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 case‘2‘: 88 importRed(myaccount); 89 break; 90 case‘3‘: 91 outputRed(myaccount); 92 break; 93 case‘4‘: 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 家庭收支软件(改用结构体和函数完成)的主要内容,如果未能解决你的问题,请参考以下文章