C语言 项目练习-家庭收支软件
Posted DQ_CODING
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 项目练习-家庭收支软件相关的知识,希望对你有一定的参考价值。
目标
需求说明
界面说明
登记收入界面:
登记支出界面
收支明细界面
退出界面
项目代码改进要求
自己完成的代码
版本1
#include<stdio.h>
#include<string.h>
void choose(int button,int i);
//项目--家庭收支软件
static double total=10000;//总金额
#define SIZE 100
//用来接收收支信息
struct Count{
char *name;
double money;
char info[100];
}count[100];
int main()
{
int d=0;
char c='0';
int i=0;//统计记录个数
printf("---------家庭收支软件--------\\n");
printf(" 1.收支明细\\n 2.登记收入\\n 3.登记支出\\n 4.退出\\n");
while(1)
{
printf("请选择(1-4):");
scanf("%d",&d);
getchar();//接收回车enter
if(d==4)
{
printf("是否确认退出(y/n):");
//输入的是字符串
scanf("%c",&c);
getchar();//接收回车enter,一定要记得接收回车符
if(c=='y')
{
break;//退出while循环
}
}else
{
choose(d,i);
if(d==2||d==3)
{
i++;
}
}
}
fflush(stdin);//刷新
getchar();
return 0;
}
void choose(int button,int i)
{
int k;
if(button==1)//收支明细
{
printf("---------当前收支明细记录--------\\n");
printf("收支\\t\\t收支金额\\t\\t总金额\\t\\t说明\\n");
if(i==0)
{
printf("无\\t\\t0.00\\t\\t\\t%.2f\\t无\\n",total);
}else
{
for(k=0;k<i;k++)
{
printf("%s\\t\\t%.2f\\t\\t\\t%.2f\\t%s\\n",count[k].name,count[k].money,total,count[k].info);
}
}
printf("\\n---------------------------------\\n");
}else if(button==2)//登记收入
{
count[i].name="收入";
printf("本次收入金额:");
scanf("%lf",&count[i].money);
printf("本次收入说明:");
scanf("%s",count[i].info);
total+=count[i].money;
}else if(button==3)//登记支出
{
count[i].name="支出";
printf("本次支出金额:");
scanf("%lf",&count[i].money);
printf("本次支出说明:");
scanf("%s",count[i].info);
total-=count[i].money;
}
}
版本2
#include<stdio.h>
#include<string.h>
void choose(int button,int i);
//项目--家庭收支软件
static double total=10000;//总金额
//用来接收收支信息
struct Count{
char *name;//每一次收支的名称:收入or支出
double money;//每一次收支的金额
char info[100];//每一次收支的信息
double all;//每一次收支后的总金额
}count[100];
int main()
{
int d=0;
char c='0';
int i=0;//统计记录个数
printf("---------家庭收支软件--------\\n");
printf(" 1.收支明细\\n 2.登记收入\\n 3.登记支出\\n 4.退出\\n");
while(1)
{
printf("请选择(1-4):");
scanf("%d",&d);
getchar();//接收回车enter
if(d==4)
{
printf("是否确认退出(y/n):");
//输入的是字符串
scanf("%c",&c);
getchar();//接收回车enter,一定要记得接收回车符
if(c=='y')
{
break;//退出while循环
}else if(c=='n')
{
continue;
}else{
printf("输入错误\\n");
}
}else
{
choose(d,i);
if(d==2||d==3)
{
i++;
}
}
}
fflush(stdin);//刷新
getchar();
return 0;
}
void choose(int button,int i)
{
int k;
if(button==1)//收支明细
{
printf("---------当前收支明细记录--------\\n");
printf("收支\\t\\t收支金额\\t\\t总金额\\t\\t说明\\n");
if(i==0)
{
printf("无\\t\\t0.00\\t\\t\\t%.2f\\t无\\n",total);
printf("当前没有收支明细...来一笔吧!\\n");
}else
{
for(k=0;k<i;k++)
{
printf("%s\\t\\t%.2f\\t\\t\\t%.2f\\t%s\\n",count[k].name,count[k].money,count[k].all,count[k].info);
}
}
printf("\\n---------------------------------\\n");
}else if(button==2)//登记收入
{
count[i].name="收入";
printf("本次收入金额:");
scanf("%lf",&count[i].money);
printf("本次收入说明:");
scanf("%s",count[i].info);
total+=count[i].money;
count[i].all=total;
}else if(button==3)//登记支出
{
count[i].name="支出";
printf("本次支出金额:");
double temp=0;//临时存储支出金额
scanf("%lf",&temp);
getchar();//过滤enter
if(temp>total)
{
printf("当前余额不足,不能支出\\n");
}else{
count[i].money=temp;
printf("本次支出说明:");
scanf("%s",count[i].info);
total-=count[i].money;
count[i].all=total;
}
}
}
案例代码
案例代码版本1
#include<stdio.h>
#include<string.h>
//项目--家庭收支软件(teacher)--代码版本1
int main()
{
//所有的局部变量在使用前要初始化
int loop=1;//控制最外层do--while循环
int num=0;//用户选择的数字
char quit='0';//用户选择是否退出的操作:y/n
double total=1000;//总金额
double money=0;//每次收支金额
char detail[100];//每次收支说明
char info[3000]="";//要显示的所有明细
char s[1000]="";//每次收支明细的临时数组
int n=0;//统计是否有至少一笔收支明细记录,1为有,0为无
//初始化detail数组
memset(detail,0,sizeof(detail));
do{
printf("------家庭收支软件--------\\n");
printf("--------1.收支明细--------\\n--------2.登记收入--------\\n--------3.登记支出--------\\n--------4.退出-----------\\n");
printf("请选择(1-4):");
scanf("%d",&num);
getchar();//过滤enter
switch(num){//使用switch对每种选择结果做出反应
case 1://收支明细
printf("收支\\t\\t收支金额\\t总金额\\t说明\\n");
printf("%s",info);
if(!n)
{
printf("当前没有收支明细..来一笔吧!\\n");
}
break;
case 2://登记收入
printf("本次收入金额:");
scanf("%lf",&money);
getchar();//enter
printf("本次收入说明:");
scanf("%s",detail);
getchar();//enter
total+=money;
sprintf(s,"收支\\t\\t%.2f\\t\\t%.2f\\t%s\\n",money,total,detail);
strcat(info,s);
n=1;//有一笔明细记录
break;
case 3://登记支出
printf("本次支出金额:");
scanf("%lf",&money);
getchar();//enter
if(money>total)
{
printf("能够支出的金额不够\\n");
}else
{
printf("本次支出说明:");
scanf("%s",detail);
getchar();//enter
total-=money;
sprintf(s,"收支\\t\\t%.2f\\t\\t%.2f\\t%s\\n",money,total,detail);
strcat(info,s);
n=1;//有一笔明细记录
}
break;
case 4://退出
do{
printf("确认是否退出(y/n):");
scanf("%c",&quit);
getchar();//enter
if(quit=='y'||quit=='n')
{
break;//跳出此do-while循环
}else
{
printf("输入错误!\\n");
}
}while(1);//循环执行退出询问
if(quit=='y')
{
loop=0;//结束最外层do-while循环
}
break;
}
}while(loop);//循环输出
getchar();
return 0;
}
案例代码版本2
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//项目--家庭收支软件(teacher)--代码版本2--结构体+函数
//所有的局部变量在使用前要初始化
int loop=1;//控制最外层do--while循环
char info[3000]="";//要显示的所有明细
char s[1000]="";//每次收支明细的临时数组
int num=0;//用户选择的数字
char quit='c';//用户选择是否退出的操作:y/n
//家庭账户结构体
struct Account{
double total;//总金额
double money;//每次收支金额
char detail[100];//每次收支说明
int n;//统计是否有至少一笔收支明细记录,1为有,0为无
};
//支出
void pay(struct Account*count)
{
printf("本次支出金额:");
scanf("%lf",&(*count).money);
getchar();//enter
if((*count).money>(*count).total)
{
printf("能够支出的金额不够\\n");
}else
{
printf("本次支出说明:");
scanf("%s",(*count).detail);
getchar();//enter
(*count).total-=(*count).money;
sprintf(s,"收支\\t\\t%.2f\\t\\t%.2f\\t%s\\n",(*count).money,(*count).total,(*count).detail);
strcat(info,s);
(*count).n=1;//有一笔明细记录
}
}
//收入
void income(struct Account*count)
{
printf("本次收入金额:");
scanf("%lf",&(*count).money);
getchar();//enter
printf("本次收入说明:");
scanf("%s",(*count).detail);
getchar();//enter
(*count).total+=(*count).money;
sprintf(s,"收支\\t\\t%.2f\\t\\t%.2f\\t%s\\n",(*count).money,(*count).total,(*count).detail);
strcat(info,s);
(*count).n=1;//有一笔明细记录
}
//所有明细
void show(struct Account*count)
{
printf("收支\\t\\t收支金额\\t总金额\\t说明\\n");
printf("%s",info);
if(!(*count).n)
{
printf("当前没有收支明细..来一笔吧!\\n");
}以上是关于C语言 项目练习-家庭收支软件的主要内容,如果未能解决你的问题,请参考以下文章