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

Posted shanlu0000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了62 家庭收支软件(改用结构体和函数完成)相关的知识,希望对你有一定的参考价值。

  1 #include<stdio.h>
  2 #include<string.h>
  3 //定义一个结构体
  4 struct MyAccount{
  5     double leftMoney; //余额
  6     char accountDetail[3000]; //账户明细
  7 };
  8 
  9 //定义相关的变量---全局变量
 10 char isout =  ;
 11 int loop = 1;
 12 char key =  ;
 13 double money=0.0;//收入或支出的金额
 14 char item[100]=" ";
 15 char reason[100]=" "; //收入或支出说明
 16 
 17 
 18 //登记收入功能
 19 void importRed(struct MyAccount* myaccount) {
 20     //printf("登记收入
");break;
 21     printf("请输入一笔收入:");
 22     scanf("%lf", &money);
 23     printf("请输入收入来源:");
 24     scanf("%s", reason);
 25     getchar();
 26     (*myaccount).leftMoney += money;
 27     sprintf(item, "收入	%.2f		%.2f		%s
", money, (*myaccount).leftMoney, reason);
 28     strcat((*myaccount).accountDetail, item);
 29 }
 30 
 31 
 32 //登记支出功能
 33 void outputRed(struct MyAccount* myaccount) {
 34     printf("请输入一笔支出:");
 35     scanf("%lf",&money);
 36     getchar();
 37     if (money > (*myaccount).leftMoney) {
 38         printf("余额不足
");
 39         return;
 40     }
 41     printf("请输入支出去向:");
 42     scanf("%s", reason);
 43     getchar();
 44     (*myaccount).leftMoney -= money;
 45     sprintf(item, "支出	%.2f		%.2f		%s
", money, (*myaccount).leftMoney, reason);
 46     strcat((*myaccount).accountDetail, item);
 47 }
 48 
 49 //显示明细功能
 50 void showDetails(struct MyAccount* myaccount) {
 51     printf("%s", (*myaccount).accountDetail);
 52 }
 53 
 54 //退出功能
 55 void myExit() {
 56     do {
 57         printf("确定退出?y/n:");
 58         scanf("%c", &isout);
 59         getchar();
 60         if (isout == y || isout == n) {
 61             break;
 62         }
 63     } while (1);
 64     if (isout == y) {
 65         loop = 0;
 66         printf("退出家庭收支程序");
 67     }
 68 }
 69 
 70 
 71 //打印菜单功能
 72 void printMenu(struct MyAccount* myaccount) {
 73     do {
 74         printf("-------家庭收支软件----
");
 75         printf("1,收支明细----
");
 76         printf("2,登记收入----
");
 77         printf("3,登记支出----
");
 78         printf("4,退出----
");
 79         printf("请选择(1-4):");
 80         scanf("%c", &key);
 81         getchar(); //过滤回车
 82         switch (key) {
 83         case 1:
 84             //printf("收支明细
");break;
 85             showDetails(myaccount);//printMeun()中传入的实参是&myaccount,所以这里的myaccount是printMenu的形参,即&myaccount,不用再传入&myaccount
 86             break;
 87         case2:
 88             importRed(myaccount);
 89             break;
 90         case3:
 91             outputRed(myaccount);
 92             break;
 93         case4:
 94             myExit();
 95         }
 96     } while (loop);
 97 }
 98 
 99 void main(){
100     struct MyAccount myaccount;
101     //初始化
102     myaccount.leftMoney = 1000.0;
103     //char accountDetail[3000] = "收支	收支金额	账户余额	说明
0.00	0.00		1000.00
";
104     //定义的结构体中,这个accountDetail是一个常量,不能重新赋值,所以改为拷贝的方式赋值
105     memset(myaccount.accountDetail, 3000, 0); //先清零
106     strcpy(myaccount.accountDetail, "收支	收支金额	账户余额	说明
0.00	0.00		1000.00
");
107     printMenu(&myaccount);
108 }

 

以上是关于62 家庭收支软件(改用结构体和函数完成)的主要内容,如果未能解决你的问题,请参考以下文章

C语言 项目练习-家庭收支软件

Golang家庭收支记账软件项目

家庭收支记账软件

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

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

java 家庭收支账户