基于文本界面的家庭收支软件

1.项目展示

 

 

2.项目代码

#include <stdio.h>
#include <string.h>
//定义一个结构体
struct MyFamilyAccount{
	int flag;//表示至少有一笔收入或者支出 
	char details[3000];//明细 
	double balance;//余额 
}; 
   //定义相关的变量
	char key=' '; //表示用户输入了那个菜单 
	int  loop=1; //控制是否退出菜单 
	char note[20]=" ";//对收入或者支出的说明 
	double money=0.0; 
	char temp[100]=" ";//用于格式化每次的收入或者支出,然后拼接到details 
	char choice=' ';
	//使用函数退出
	void myexit(){
		printf("\n你确定要退出吗? y/n");
			do{
				scanf("%c",&choice);
				getchar();
				if(choice=='y'||choice=='n'){
					break;
				}
				printf("\n你的输入有误,请重新输入 y/n"); 
			} while(1);
			if(choice=='y'){
			loop=0;
		}  
	} 
	//使用函数显示明细 
	void showDetails(struct MyFamilyAccount *myFamilyAccount){
			if((*myFamilyAccount).flag) {
					printf("%s",(*myFamilyAccount).details);
				}
				else{
					printf("\n当前没有收支明细...来一笔吧!"); 
				}
	}
	//使用函数,完成登记收入
	void income(struct MyFamilyAccount *myFamilyAccount){
			printf("\n本次收入金额:");
			scanf("%lf",&money);
			getchar();
			(*myFamilyAccount).balance+=money;//更新余额 
			printf("\n本次收入说明");
			scanf("%s",note); 
			getchar();
			sprintf(temp,"\n收入\t%.2f\t\t%.2f\t\t%s",money,(*myFamilyAccount).balance,note); //将本次信息写入到temp中 
			strcat((*myFamilyAccount).details,temp);//将信息拼接到details
			(*myFamilyAccount).flag=1; 
	} 
	//完成一个登记支出 
	void pay(struct MyFamilyAccount *myFamilyAccount){
			printf("\n本次支出的金额:");
			scanf("%lf",&money);
			getchar();
			if(money>(*myFamilyAccount).balance){
				printf("\n余额不足....");
			return;
			}
			printf("\n本次支出的说明:"); 
			scanf("%s",note); 
			getchar();
		    (*myFamilyAccount).balance-=money;//更新余额
		    sprintf(temp,"\n支出\t%.2f\t\t%.2f\t\t%s",money,(*myFamilyAccount).balance,note); //将本次信息写入到temp中 
			strcat((*myFamilyAccount).details,temp);
			(*myFamilyAccount).flag=1;
	}	
//函数专门用于显示菜单	
void mainMenu(struct MyFamilyAccount *myFamilyAccount){
		do{
		printf("\n\n-----------------家庭收支记账软件---------------");
	    printf("\n\n                   1 收支明细                    ");
	    printf("\n                   2 登记收入                     ");
	    printf("\n                   3 登记支出                     ");
	    printf("\n                   4 退    出                     ");
	    printf("\n\n                 请选择(1-4):");
        scanf("%c",&key);
        getchar();
		switch (key){
			case'1':
			showDetails(myFamilyAccount);
			break;
			case'2':
			income(myFamilyAccount);
			break; 
			case'3':
			pay(myFamilyAccount);
			break;
			case'4':
			myexit();
		}
	} while(loop);
	printf("\n你退出了家庭财务软件QAQ");
	getchar(); 	
}
void main(){
  //创建一个结构体变量 
  struct MyFamilyAccount myFamilyAccount;
  //初始化
  myFamilyAccount.flag=0;
  myFamilyAccount.balance=1000.0;
  //使用拷贝的方式赋值
  memset(myFamilyAccount.details,3000,0);
  strcpy(myFamilyAccount.details,"-----------------当前收支明细记录-----------------\n收支\t收支金额\t账户金额\t说  明");
 //调用mainMenu显示菜单 
	mainMenu(&myFamilyAccount);
	getchar();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值