码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-28 01:21:14      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:std   常量   exit   初始   oid   不能   detail   count   span   

  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("登记收入\n");break;
 21     printf("请输入一笔收入:");
 22     scanf("%lf", &money);
 23     printf("请输入收入来源:");
 24     scanf("%s", reason);
 25     getchar();
 26     (*myaccount).leftMoney += money;
 27     sprintf(item, "收入\t%.2f\t\t%.2f\t\t%s\n", 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("余额不足\n");
 39         return;
 40     }
 41     printf("请输入支出去向:");
 42     scanf("%s", reason);
 43     getchar();
 44     (*myaccount).leftMoney -= money;
 45     sprintf(item, "支出\t%.2f\t\t%.2f\t\t%s\n", 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("-------家庭收支软件----\n");
 75         printf("1,收支明细----\n");
 76         printf("2,登记收入----\n");
 77         printf("3,登记支出----\n");
 78         printf("4,退出----\n");
 79         printf("请选择(1-4):");
 80         scanf("%c", &key);
 81         getchar(); //过滤回车
 82         switch (key) {
 83         case 1:
 84             //printf("收支明细\n");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] = "收支\t收支金额\t账户余额\t说明\n0.00\t0.00\t\t1000.00\n";
104     //定义的结构体中,这个accountDetail是一个常量,不能重新赋值,所以改为拷贝的方式赋值
105     memset(myaccount.accountDetail, 3000, 0); //先清零
106     strcpy(myaccount.accountDetail, "收支\t收支金额\t账户余额\t说明\n0.00\t0.00\t\t1000.00\n");
107     printMenu(&myaccount);
108 }

 

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

标签:std   常量   exit   初始   oid   不能   detail   count   span   

原文地址:https://www.cnblogs.com/shanlu0000/p/12375398.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!