zoukankan      html  css  js  c++  java
  • 61 C项目------家庭收支软件

    1,目标:

      ①模拟实现一个基于文本界面的《家庭收支软件》

      ②涉及知识点

        局部变量和基本数据类型

        循环语句

        分支语句

        简单的屏幕输出格式控制

    2,需求说明:

      ①模拟实现基于文本界面的《家庭收支软件》

      ②该软件能够记录家庭的收入、支出,并能够打印收支明细表

      ③项目采用分级菜单方式,主菜单如下:

        -------家庭收支软件-------

        1,收支明细

        2,登记收入

        3,登记支出

        4,退出

        请选择(1-4):

      ④假设家庭起始的生活基金为:1000元

      ⑤每次登记收入(菜单2)后,收入的金额应累加到基本金额上,并记录本次收入明细,以便后续的查询

      ⑥每次登记支出(菜单3)后,支出的金额应从基本金额上扣除,并记录本次支出明细,以便后续的查询

      ⑦查询收支明细(菜单1)时,将显示所有的收入、支出明细列表

    3,界面展示

      ①“登记收入”的界面及操作过程: 

         -------家庭收支软件-------

          1,收支明细

          2,登记收入

          3,登记支出

          4,退出

          请选择(1-4):2

           本次收入金额:1000

           本次收入说明:工资

      ②“登记支出”的界面及操作过程:

         -------家庭收支软件-------

          1,收支明细

          2,登记收入

          3,登记支出

          4,退出

            请选择(1-4):3

           本次支出金额:700

           本次支出说明:水电费

      ③“收支明细”的界面及操作过程:  

         -------家庭收支软件-------

          1,收支明细

          2,登记收入

          3,登记支出

          4,退出

          请选择(1-4):1

           ---------------当前收支明细记录--------------------

         收支  收支金额  账户余额  说明

            收入   10000    2000    工资

           支出     700       1300   水电费

      ④“退出”的界面及操作过程     

          -------家庭收支软件-------

            1,收支明细

            2,登记收入

            3,登记支出

            4,退出

            请选择(1-4):4

          确认是否退出(Y/N):

    4,基本金和收支明细的记录

      ①账户余额的记录可以使用 double 类型的局部变量来实现:double leftMoney = 1000.0;

      ②收支明细记录可以使用字符数组的变量来实现,其初始值为:明细表的表头,char details [ 3000 ] = " 收支 收支金额 账户余额 说 明 " ;

      ③在登记收支时,将收支金额与 leftMoney 相加或相减,收支记录先临时保存在 item中,再将 item 拼接到 details 后面即可

    5,流程图(活动图)----主流程

        

     6,流程图(活动图)----收入和支出处理流程

        

    代码实现

    1,显示菜单:

      ①使用 do-while 来显示菜单,如果用户输入 4 表示退出程序

     1 #include<stdio.h>
     2 void main() {
     3     int loop = 1;   //控制是否退出菜单
     4     char key = ' ';  //表示用户选择的菜单
     5     do {
     6         printf("-------家庭收支软件----
    ");
     7         printf("1,收支明细----
    ");
     8         printf("2,登记收入----
    ");
     9         printf("3,登记支出----
    ");
    10         printf("4,退出----
    ");
    11         printf("请选择(1-4):");
    12         scanf("%c", &key);
    13         getchar(); //过滤回车
    14         switch (key) {
    15         case '1':
    16             printf("收支明细
    ");break;
    17         case'2':
    18             printf("登记收入
    ");break;
    19         case'3':
    20             printf("登记支出
    ");break;
    21         case'4':
    22             loop = 0;
    23             printf("退出家庭收支程序");
    24         }
    25 
    26     } while (loop);
    27 
    28 }

     ②实现“登记收入” 并实现收入明细显示

     1 #include<stdio.h>
     2 #include<string.h>
     3 void main() {
     4     int loop = 1;
     5     char key = ' ';
     6     double money = 0.0;  //输入或支出的金额
     7     double leftMoney = 1000;  //余额,初始化是1000
     8     char accountDetail[3000] = "收支	收支金额	账户余额	说明
    0.00	0.00		1000.00
    ";  //收支明细
     9     char reason[100] = " ";  //收入或支出的说明
    10     char item[1000] = " ";  //每一条收入或支出,最后要拼接到 accountDetail
    11     do {
    12         printf("-------家庭收支软件----
    ");
    13         printf("1,收支明细----
    ");
    14         printf("2,登记收入----
    ");
    15         printf("3,登记支出----
    ");
    16         printf("4,退出----
    ");
    17         printf("请选择(1-4):");
    18         scanf("%c", &key);
    19         getchar(); //过滤回车
    20         switch (key) {
    21         case '1':
    22             //printf("收支明细
    ");break;
    23             printf("%s", accountDetail);break;
    24         case'2':
    25             //printf("登记收入
    ");break;
    26             printf("请输入一笔收入:");
    27             scanf("%lf", &money);
    28             printf("请输入收入来源:");
    29             scanf("%s", reason);
    30             getchar();
    31             leftMoney += money;  //更新余额
    32             sprintf(item,"收入	%.2f		%.2f		%s
    ", money, leftMoney, reason);//将本次记录写入到item字符数组
    33             strcat(accountDetail, item); //将item拼接到accountDetail
    34             break;
    35         case'3':
    36             printf("登记支出
    ");break;
    37         case'4':
    38             loop = 0;
    39             printf("退出家庭收支程序");
    40         }
    41 
    42     } while (loop);
    43 
    44 }

    运行结果:

    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):2
    请输入一笔收入:1000
    请输入收入来源:爸爸工资
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    收入    1000.00         2000.00         爸爸工资
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):2
    请输入一笔收入:3000
    请输入收入来源:妈妈工资
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    收入    1000.00         2000.00         爸爸工资
    收入    3000.00         5000.00         妈妈工资
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):

    ③实现“支出登记”

     1 #include<stdio.h>
     2 #include<string.h>
     3 void main() {
     4     int loop = 1;
     5     char key = ' ';
     6     double money = 0.0;
     7     double leftMoney = 1000;
     8     char accountDetail[3000] = "收支	收支金额	账户余额	说明
    0.00	0.00		1000.00
    ";
     9     char reason[100] = " ";
    10     char item[1000] = " ";
    11     do {
    12         printf("-------家庭收支软件----
    ");
    13         printf("1,收支明细----
    ");
    14         printf("2,登记收入----
    ");
    15         printf("3,登记支出----
    ");
    16         printf("4,退出----
    ");
    17         printf("请选择(1-4):");
    18         scanf("%c", &key);
    19         getchar(); //过滤回车
    20         switch (key) {
    21         case '1':
    22             //printf("收支明细
    ");break;
    23             printf("%s", accountDetail);break;
    24         case'2':
    25             //printf("登记收入
    ");break;
    26             printf("请输入一笔收入:");
    27             scanf("%lf", &money);
    28             printf("请输入收入来源:");
    29             scanf("%s", reason);
    30             getchar();
    31             leftMoney += money;
    32             sprintf(item,"收入	%.2f		%.2f		%s
    ", money, leftMoney, reason);
    33             strcat(accountDetail, item);
    34             break;
    35         case'3':
    36             printf("请输入一笔支出:");
    37             scanf("%lf", &money);
    38             printf("请输入支出去向:");
    39             scanf("%s", reason);
    40             getchar();
    41             leftMoney -= money;
    42             sprintf(item, "收入	%.2f		%.2f		%s
    ", money, leftMoney, reason);
    43             strcat(accountDetail, item);
    44             break;
    45         case'4':
    46             loop = 0;
    47             printf("退出家庭收支程序");
    48         }
    49 
    50     } while (loop);
    51 
    52 }

    运行结果:

    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):2
    请输入一笔收入:1000
    请输入收入来源:爸爸收入
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    收入    1000.00         2000.00         爸爸收入
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):3
    请输入一笔支出:200
    请输入支出去向:水电费
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    收入    1000.00         2000.00         爸爸收入
    收入    200.00          1800.00         水电费
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):

    项目代码实现改进:

    1,用户输入4退出时,给出提示“确定退出?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入 y/n

    2,在支出时,判断余额是否够,并给出相应的提示

     1 #include<stdio.h>
     2 #include<string.h>
     3 void main() {
     4     int loop = 1;
     5     char key = ' ';
     6     double money = 0.0;
     7     double leftMoney = 1000;
     8     char accountDetail[3000] = "收支	收支金额	账户余额	说明
    0.00	0.00		1000.00
    ";
     9     char reason[100] = " ";
    10     char item[1000] = " ";
    11     char isout = ' ';
    12     do {
    13         printf("-------家庭收支软件----
    ");
    14         printf("1,收支明细----
    ");
    15         printf("2,登记收入----
    ");
    16         printf("3,登记支出----
    ");
    17         printf("4,退出----
    ");
    18         printf("请选择(1-4):");
    19         scanf("%c", &key);
    20         getchar(); //过滤回车
    21         switch (key) {
    22         case '1':
    23             //printf("收支明细
    ");break;
    24             printf("%s", accountDetail);break;
    25         case'2':
    26             //printf("登记收入
    ");break;
    27             printf("请输入一笔收入:");
    28             scanf("%lf", &money);
    29             printf("请输入收入来源:");
    30             scanf("%s", reason);
    31             getchar();
    32             leftMoney += money;
    33             sprintf(item, "收入	%.2f		%.2f		%s
    ", money, leftMoney, reason);
    34             strcat(accountDetail, item);
    35             break;
    36         case'3':
    37             printf("请输入一笔支出:");
    38             scanf("%lf", &money);
    39             getchar();
    40             if (money > leftMoney) {   //余额不足的情况
    41                 printf("余额不足
    ");
    42                 break;
    43             }
    44             printf("请输入支出去向:");
    45             scanf("%s", reason);
    46             getchar();
    47             leftMoney -= money;
    48             sprintf(item, "支出	%.2f		%.2f		%s
    ", money, leftMoney, reason);
    49             strcat(accountDetail, item);
    50             break;
    51         case'4':
    52             do {
    53                 printf("确定退出?y/n:");  //退出前的提示,并控制用户必须输入 y/n
    54                 scanf("%c", &isout);
    55                 getchar();
    56                 if (isout == 'y' || isout == 'n') {
    57                     break;
    58                 }
    59             } while (1);
    60             if (isout == 'y') {  //正确输入 y/n后,判断输入的是 y ,才可以退出程序
    61                 loop = 0;
    62                 printf("退出家庭收支程序");
    63             }
    64         }
    65     } while (loop);
    66 
    67 }

    运行结果:

    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):2
    请输入一笔收入:1000
    请输入收入来源:工资
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    收入    1000.00         2000.00         工资
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):3
    请输入一笔支出:3000
    余额不足
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):3
    请输入一笔支出:800
    请输入支出去向:购物
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):1
    收支    收支金额        账户余额        说明
    0.00    0.00            1000.00
    收入    1000.00         2000.00         工资
    支出    800.00          1200.00         购物
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):4
    确定退出?y/n:a
    确定退出?y/n:n
    -------家庭收支软件----
    1,收支明细----
    2,登记收入----
    3,登记支出----
    4,退出----
    请选择(1-4):4
    确定退出?y/n:y
    退出家庭收支程序

     

  • 相关阅读:
    猜数字游戏
    Visual Studio Code如何编写运行C、C++
    Git Submodule使用完整教程
    同一客户端多个git账号的配置
    让 Git Bisect 帮助你
    GitHub 风格的 Markdown 语法
    git 命令图解
    图解git中的最常用命令
    Understanding the Bias-Variance Tradeoff
    Seven Techniques for Data Dimensionality Reduction
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12374980.html
Copyright © 2011-2022 走看看