一个实用的税收程序

程序目标



  这个程序由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 }

部分代码显示纠错:

运行结果



时间: 2024-11-07 01:34:54

一个实用的税收程序的相关文章

一个实用的从文本文件读取数据进行排序的程序

程序说明 这是一个十分可靠的程序,这个程序的查错能力非常强悍.程序包含了文件操作,归并排序和字符串输入等多种技术. 程序的功能是从外部读取一个包括int型数据的文本文件,然后将它保存到内部临时数组,对数组进行排序后,以文本形式输出到指定的文件上.因为是int类型的数据,没有很严重的损失精度的问题. 正常运行要求: 包括数据的源文件内不能包括其他任何除数字和空白字符(空格,制表符,换行符)之外的任何字符,源文件最开始必须是数字字符,要保证源文件的数据计数正确.同时保证文件名有效. 完整代码 警告:

一个实用的C#网页抓取类代码分享

一个实用的C# 网页抓取类 模拟蜘蛛,类中定义了超多的C#采集文章.网页抓取文章的基础技巧,下面分享代码: using System; using System.Data; using System.Configuration; using System.Net; using System.IO; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using Sys

“makefile”写法详解,一步一步写一个实用的makefile,详解 sed &#39;s,$?\.o[ :]*,\1.o [email&#160;protected] : ,g&#39; &lt; [email&#160;protected]

目的:编写一个实用的makefile,能自动编译当前目录下所有.c/.cpp源文件,支持二者混合编译.并且当某个.c/.cpp..h或依赖的源文件被修改后,仅重编涉及到的源文件,未涉及的不编译. 二要达到这个目的,用到的技术有:1-使用wildcard函数来获得当前目录下所有.c/.cpp文件的列表.2-make的多目标规则.3-make的模式规则.4-用gcc -MM命令得到一个.c/.cpp文件include了哪些文件.5-用sed命令对gcc -MM命令的结果作修改.6-用include命

一个实用的实时毛发渲染及着色方法

一个实用的实时毛发渲染及着色方法 Thorsten scheuermann ATI Resarch,Inc. 翻译:潘曦 (译文里的(pancy:XXX)为译者注) 介绍: 我们提出了一个使用多边形模型的实时毛发渲染算法,并且将其应用于今年SIGGRAPH动画节上的一个实时动画<ruby:The Double Cross>上面.该毛发渲染算法是基于Kajiya-Kay 毛发渲染模型的算法,但是在其之上添加了一个实时的接近现实高光的镜面反射效果(pancy:原始算法可能没有考虑到头发的高光只计算

利用JSP编程技术实现一个简单的购物车程序

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

一个简单的Qt程序分析

本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNA

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与

如何成为一个牛逼的程序猿

这个题目的噱头太大,要真的写起来, 足够写一本书了. 本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路. 每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人. 一.C/C++语言 如果你的基础很差, 建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进.C语言的书嘛,先买一本 300 页以内的,把书中的每一个例子都通过键盘敲打进去到 Visual studio里面去,然后单步执行,逐行调试去看各个变量的值.或者自行添加一些printf语句去输

记录一个在制作Swing程序的小怪事

在制作一个Swing程序时,出现了奇怪的事情,程序在Eclipse里执行正常,但打包后再执行那些动态执行的控件就消失不见了.截图如下: 在Eclipse里正常执行的画面: 打包执行后出现的画面: 可以发现,那些动态创建的CheckBox都消失了. 起初也在网上找什么解决方案,什么updateUI(),repaint(),invalidate()之类的,乱试乱碰,结果当然是无效了. 增加log查看,发现动态创建时需要读取的文件没找到,原来是一个配置文件没有拷贝到jar所在的目录中! 有时候,发现心