一个实用的税收程序

程序目标

  这个程序由C Primer Plus(Fifth Edition)中的一道练习引出。

  

我们的目标是制作一个界面友好且安全性高(防止错误输入)的程序。按照书上的要求,我们拟定伪代码:

主体:

  DO循环{

    提示输入等级类型

    判断:类型。如果不正确,置标记为0

    提示输入金额

    判断:金额。如果不正确,置标记为0{

      类型1:调用函数输出税额

      类型2:调用函数输出税额

      类型3:调用函数输出税额

      类型4:调用函数输出税额

    }

    缓冲区调整

  }循环继续条件(标记)

 

输出税额的函数:

  如果:金额在规定以下

    返回:金额 * 0.15

  否则

    返回:规定 * 0.15 + (金额 - 规定) * 0.28

  为了使界面更美观,我们采用制表符来提示用户输入,并采用无缓冲输入达到一定的效果,详细请看程序代码。

程序代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <conio.h>
 4 
 5 /*
 6     本程序依照1988年的United States Federal Tax Schedule
 7     该计划分为四个标准征税:
 8     单身 17850
 9     户主 23900
10     已婚共有 29750
11     已婚离异 14875
12     每一种等级在其范围内征收15%的税,超过部分按28%计算
13 */
14 
15 #define ALONE 17850.0 
16 #define FAM_MAN 23900.0
17 #define MA_TOG 29750.0
18 #define MA_SE 14875.0
19 
20 double calc(double money, double base);
21 
22 int main(int argc, char * argv[]){
23     char type;
24     double money;
25     int flag = 1; //循环标记
26 
27     do{
28         printf("┌─────────────┐\n"
29                "│请选择纳税人身份:        │\n"
30                "│a.单身          b.户主    │\n"
31                "│c.已婚共有      d.已婚离异│\n"
32                "│输入其它内容退出          │\n"
33                "└─────────────┘\n"
34                "  User#[ ]\b\b");
35         //下面的getche是有回显无缓冲输入,函数原形在conio.h中
36         if( ( type = getche() ) != 'a' && type != 'b' && type != 'c' && type != 'd'){
37             flag = 0;
38             printf("\n已退出!\n");
39             break;
40         }
41 
42         printf("\n请输入纳税人财产总额:$[          ]\b\b\b\b\b\b\b\b\b\b\b");
43         if( scanf("%lf",&money) ){
44             switch(type){
45             case 'a':
46                 printf("这位纳税人需要缴纳 $%g 的税款\n\n",calc(money, ALONE) );
47                 break;
48             case 'b':
49                 printf("这位纳税人需要缴纳 $%g 的税款\n\n",calc(money, FAM_MAN) );
50                 break;
51             case 'c':
52                 printf("这位纳税人需要缴纳 $%g 的税款\n\n",calc(money, MA_TOG) );
53                 break;
54             case 'd':
55                 printf("这位纳税人需要缴纳 $%g 的税款\n\n",calc(money, MA_SE) );
56                 break;
57             }
58         }
59         else{
60             flag = 0;
61             printf("数据错误!\n");
62         }
63         while(getchar() != '\n'); //调整读取缓冲区
64 
65     }while(flag);
66 
67     printf("\n谢谢使用\n");
68     getch();
69 
70     return 0;
71 }
72 
73 double calc(double money, double base){
74     return (money < base) ? (money * 0.15) : (base * 0.15 + (money - base) * 0.28);
75     //这个函数返回正确的税额,?:运算符简洁,这里提供一个记忆技巧:
76     //是真的吗 ? 是 : 不是
77 }

部分代码显示纠错:

运行结果

 

posted @ 2016-08-08 22:40  Mr_Blug  阅读(336)  评论(0编辑  收藏  举报