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语言 项目练习-家庭收支软件的主要内容,如果未能解决你的问题,请参考以下文章

Golang家庭收支记账软件项目

家庭收支记账软件

百炼JAVA-----实现家庭收支记账软件

简单实现家庭记账程序(java)

62 家庭收支软件(改用结构体和函数完成)

基于java的家庭收支管理系统