资源描述
第一章 课程设计目的和要求
1.1 课程设计的目的
C语言一直是程序设计语言的主流之一数据类型丰富、齐全。C语言供了整数、实数、字符、字符串等基本数据类型,还提供数组、指针、结构体等构造数据类型,运算符丰富、齐全,运算能力强。 C语言提供的运算符为常规运算:常规运算符——算术运算符、逻辑运算符、关系运算符等,这类运算符各种语言一般都具备;
进一步巩固《C程序设计》所学的知识,加强语句类型的应用,熟悉面向过程的结构化和面向对象可视化程序设计方法,培养化程序设计的思想,加深对基本语言要素和结构的理解,锻炼程序设计的能力,以及用C语言解决实际问题的能力。
此课程设计着眼于知识的运用,把平常学的知识运用到实践中来,本身就是考察我们知识运用能力。要求熟悉运用一些编程软件,对我们所学的理论知识进一步的深化。
1.2 课程设计实现的要求
如今公民纳税意识的增强,需要有方便、简单、快速的工具帮助大家解决工资,个人所得收入的纳税问题。所以我们可以用程序来实现这个功能,在程序设计中,既可以用传统的程序设计方法,也可以用先进的面向对象程序设计方法。
对应用程序的要求:
1、该系统软件可以根据输入的工资数额,得出所需缴纳的税额。
2、得出税后工资;
工资g ;税:t;税后工资m;
3、显示税率
第二章 程序设计任务内容
用C语言实现一个工资纳税系统,该系统主要应用在个人工资纳税操作中,其中要求能够准确计算出个人工资或收入的所得税,能够查询到一个人的工资所得税,该系统涉及到的加,减,乘等简单运算,课程设计主要是使用if语句及switch语句实现。
按照国家规定,工资低于1600元时,不用缴纳所得税。当工资高于1600时,需按以下规定缴纳所得税:
(税前工资-1600)×税率=个人所得税税额
级数 含税级距 税率% 速算扣除数
1 不超过500元的 5 0
2 超过500元至2000元的部分 10 25
3 超过2000元至5000元的部分 15 175
4 超过5000元至20000元的部分 20 625
5 超过20000元至40000元的部分 25 3625
超过40000元至60000元的部分 30 9625
7 超过60000元至80000元的部分 35 16625
8 超过80000元至100000元的部分 40 24625
9 超过100000元的部分 45 31625
表中的应纳税所得额是指以每月收入额减1600元按公式计算后的余额。
例如:计算为:2500-1600=900
应纳个人所得税额=500×5%+400×10% =65
再比如:我们用一个大额工资计算,25000元
应纳税所得额=25000-1600=23400
应纳个人所得税税额=500×5%+1500×10%+3000×15%+15000×20%+3400×25%=4475
要求:输入工资计算出纳税金额。
第三章 详细设计说明
3.1 模块
3.1.1 模块描述
声明函数,定义两个变量g和t,m;创建一个工资纳税系统计算函数,实现个人工资所得税的计算、查询。在程序中输入的内容包括:
(1)输入个人工资
实现过程:根据提示输入个人工资数据
(2)个人所得税的计算
实现过程
(3)显示税率
3.1.2 功能模块图
此系统的函数功能模块图如图1所示。
工资纳税系统
计算需缴纳税额
得出最终工资所得
图1 函数功能模块图
3.2 性能
该模块性能要求
(1)灵活性要求
输出的数据能准确的按照操作代码输出。
(2)时间特性要求
输入的各项操作代码能及时反应其运行结果。
3.3 算法说明
该程序采用一系列if语句及switch语句来达到计算目的
3.4 函数说明
工资纳税计算函数
(1)原型:int main()
(2)功能:该函数用来计算输入工资的所得税
(3)流程图:如图2所示
开始
输入工资g
g>1600
t=0
c>200
t=(g-j-100000)*d9+31625
Case
c=(g-j)/500
t=(g-j)*d1
t=(g-j-500)*d2+25
t=(g-j-2000)*d3+175
t=(g-j-5000)*d4+625
t=(g-j-20000)*d5+3625
t=(g-j-40000)*d6+9625
t=(g-j-40000)*d7+16625
t=(g-j-80000)*d8+24625
输出t
m=g-t
输出m
输出“工资纳税系统”
输出税率值
图2
(4)对应代码
#include<stdio.h>
int main()
{
int g,c,j=1600;
float d1=0.05,d2=0.1,d3=0.15,d4=0.2,d5=0.25,d6=0.3,d7=0.35,d8=0.4,d9=0.45,m,t;
printf("欢迎进入工资纳税系统\n");
printf(" 税率表 \n");
printf("级数 含税级距 税率 (% %)\n");
printf(" 1 不超过500元的 5 \n");
printf(" 2 超过500元至2000元的部分 10\n ");
printf(" 3 超过2000元至5000元的部分 15\n ");
printf(" 4 超过5000元至20000元的部分 20\n ");
printf(" 5 超过20000元至40000元的部分 25\n ");
printf(" 6 超过40000元至60000元的部分 30\n ");
printf(" 7 超过60000元至80000元的部分 35\n ");
printf(" 8 超过80000元至100000元的部分 40\n ");
printf(" 9 超过100000元的部分 45\n ");
printf("\n请输入工资:\n");
scanf ("%d",&g);
if (g<=j)
t=0;// g不超过1600元时t的值
else if(g>j)
c=(g-j)/500;
else if(c>200)
t=(g-j-100000)*d9+31625;// (g-j)超过100000元时t计算方法
switch(c)
{
case 0:t=(g-j)*d1;// (g-j)不超过500元时t计算方法
case 1:
case 2:
case 3:
case 4:t=(g-j-500)*d2+25;break;//1~4;(g-j)超过500元但不超过2000元时t计算方法
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:t=(g-j-2000)*d3+175;break;//5~10;(g-j)超过2000元但不超过5000元时t计算方法
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
case 34:
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:t=(g-j-5000)*d4+625;break; //11~40;(g-j)超过5000元但不超过20000元时t计算方法
case 41:
case 42:
case 43:
case 44:
case 45:
case 46:
case 47:
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
case 58:
case 59:
case 60:
case 61:
case 62:
case 63:
case 64:
case 65:
case 66:
case 67:
case 68:
case 69:
case 70:
case 71:
case 72:
case 73:
case 74:
case 75:
case 76:
case 77:
case 78:
case 79:
case 80:t=(g-j-20000)*d5+3625;break;// 41~80;(g-j)超过20000元但不超过40000元时t计算方法
case 81:
case 82:
case 83:
case 84:
case 85:
case 86:
case 87:
case 88:
case 89:
case 90:
case 91:
case 92:
case 93:
case 94:
case 95:
case 96:
case 97:
case 98:
case 99:
case 100:
case 101:
case 102:
case 103:
case 104:
case 105:
case 106:
case 107:
case 108:
case 109:
case 110:
case 111:
case 112:
case 113:
case 114:
case 115:
case 116:
case 117:
case 118:
case 119:
case 120:t=(g-j-40000)*d6+9625;break;// 81~120;(g-j)超过40000元但不超过60000元时t计算方法
case 121:
case 122:
case 123:
case 124:
case 125:
case 126:
case 127:
case 128:
case 129:
case 130:
case 131:
case 132:
case 133:
case 134:
case 135:
case 136:
case 137:
case 138:
case 139:
case 140:
case 141:
case 142:
case 143:
case 144:
case 145:
case 146:
case 147:
case 148:
case 149:
case 150:
case 151:
case 152:
case 153:
case 154:
case 155:
case 156:
case 157:
case 158:
case 159:
case 160:t=(g-j-40000)*d7+16625;break;// 121~160;(g-j)超过60000元但不超过80000元时t计算方法
case 161:
case 162:
case 163:
case 164:
case 165:
case 166:
case 167:
case 168:
case 169:
case 170:
case 171:
case 172:
case 173:
case 174:
case 175:
case 176:
case 177:
case 179:
case 180:
case 181:
case 182:
case 183:
case 184:
case 185:
case 186:
case 187:
case 188:
case 189:
case 190:
case 191:
case 192:
case 193:
case 194:
case 195:
case 196:
case 197:
case 198:
case 199:
case 200:t=(g-j-80000)*d8+24625;break;// 161~200;(g-j)超过80000元但不超过100000元时t计算方法
}
printf("个人所得税:t=%10.2f\n",-t);
m=g-t;
printf("税后工资:m=%10.2f\n",m);
}
3.5 限制条件
在输入值时必须按照程序所规定的输入,否则将运行错误或无法运行。
3.6 测试计划
本次测试主要为验证工资纳税函数的功能,该函数可以根据输入的工资数额,得出所需缴纳的税额。对该函数进行功能测试、正确性测试等。
第四章 程序使用说明
4.1 使用操作
该程序可以实现对个人工资所得税的计算。
安装VisualC++6.0,在工具栏“文件”中单击“新建”选项,开始输入程序,程序输入完成,保存,单击工具栏中“”选项,选择“txt.c”待程序无误后,开始构建并执行程序。
4.2 运行结果
4.2.1 初始运行界面
最初的运行界面,要求输入 工资数据如图4-1所示
图4-1
4.2.2 最终运行界面
进入初始界面后,输入个人工资,计算某人的工资所得税。
第一种情况所出现的最终运行界面如图4-2最终运行界面(一)
图4-2最终运行界面(一)
第二种情况所出现的最终运行界面如图4-2最终运行界面(二)
图4-2最终运行界面(二)
第三种情况所出现的最终运行界面如图4-2最终运行界面(三)
图4-2最终运行界面(三)
第四种情况所出现的最终运行界面如图4-2最终运行界面(四)
图4-2最终运行界面(四)
第五种情况所出现的最终运行界面如图4-2最终运行界面(五)
图4-2最终运行界面(五)
第六种情况所出现的最终运行界面如图4-2最终运行界面(六)
图4-2最终运行界面(六)
第七种情况所出现的最终运行界面如图4-2最终运行界面(七)
如图4-2最终运行界面(七)
第八种情况所出现的最终运行界面如图4-2最终运行界面(八)
图4-2最终运行界面(八)
第九种情况所出现的最终运行界面如图4-2最终运行界面(九)
图4-2最终运行界面(九)
第五章 课程设计心得与体会
通知要进行课程设计时,有点懵,感觉学的东西没有系统认识,不知该怎么练到一起。只能利用自己所理解的零星点滴来尽量完成,通过查找资料(《从程序设计》p109,例题4.10)及老师的指导整个程序终于完成。虽然有很多不完善的地方,但是经过这次课程设计,让我对C语言有进一步的了解和认识,能更好的认识和运用这门语言,并且它在我们的生活,工作,学习中有很多用途。
在反复的修改中也让我们认识到要做好一件事,一定要认真对待,一丝不苟,注意细节,最重要的是在平时的学习知识时打好一个坚实的基础。
这次的课程设计收获了知识、提高了能力,学会了如何运用所学知识去解决实际问题,懂得怎么样去制定计划,怎么样去实现这个计划。希望自己以后办事的时候要认真,仔细,考虑周全。在此,感谢老师的辛勤教导!
附录一:参考文献
[1]谭浩强,C程序设计(第四版),北京清华大学出版社,2013年11月重印
附录二:程序
#include<stdio.h>
int main()
{
int g,c,j=1600;
float d1=0.05,d2=0.1,d3=0.15,d4=0.2,d5=0.25,d6=0.3,d7=0.35,d8=0.4,d9=0.45,m,t;
printf(" 欢迎进入工资纳税系统\n\n");
printf(" 税率表 \n");
printf("级数 含税级距 税率 (% %)\n");
printf(" 1 不超过500元的 5 \n");
printf(" 2 超过500元至2000元的部分 10\n ");
printf(" 3 超过2000元至5000元的部分 15\n ");
printf(" 4 超过5000元至20000元的部分 20\n ");
printf(" 5 超过20000元至40000元的部分 25\n ");
printf(" 6 超过40000元至60000元的部分 30\n ");
printf(" 7 超过60000元至80000元的部分 35\n ");
printf(" 8 超过80000元至100000元的部分 40\n ");
printf(" 9 超过100000元的部分 45\n ");
printf("\n请输入工资:\n");
scanf ("%d",&g);
if (g<=j)
t=0;
else if(g>j)
c=(g-j)/500;
else if(c>200)
t=(g-j-100000)*d9+31625 ;
switch(c)
{
case 0:t=(g-j)*d1;
case 1:
case 2:
case 3:
case 4:t=(g-j-500)*d2+25;break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:t=(g-j-2000)*d3+175;break;
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
case 34:
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:t=(g-j-5000)*d4+625;break;
case 41:
case 42:
case 43:
case 44:
case 45:
case 46:
case 47:
case 48:
case 49:
case 50:
case 51:
case 52:
case 53:
case 54:
case 55:
case 56:
case 57:
case 58:
case 59:
case 60:
case 61:
case 62:
case 63:
case 64:
case 65:
case 66:
case 67:
case 68:
case 69:
case 70:
case 71:
case 72:
case 73:
case 74:
case 75:
case 76:
case 77:
case 78:
case 79:
case 80:t=(g-j-20000)*d5+3625;break;
case 81:
case 82:
case 83:
case 84:
case 85:
case 86:
case 87:
case 88:
case 89:
case 90:
case 91:
case 92:
case 93:
case 94:
case 95:
case 96:
case 97:
case 98:
case 99:
case 100:
case 101:
case 102:
case 103:
case 104:
case 105:
case 106:
case 107:
case 108:
case 109:
case 110:
case 111:
case 112:
case 113:
case 114:
case 115:
case 116:
case 117:
case 118:
case 119:
case 120:t=(g-j-40000)*d6+9625;break;
case 121:
case 122:
case 123:
case 124:
case 125:
case 126:
case 127:
case 128:
case 129:
case 130:
case 131:
case 132:
case 133:
case 134:
case 135:
case 136:
case 137:
case 138:
case 139:
case 140:
case 141:
case 142:
case 143:
case 144:
case 145:
case 146:
case 147:
case 148:
case 149:
case 150:
case 151:
case 152:
case 153:
case 154:
case 155:
case 156:
case 157:
case 158:
case 159:
case 160:t=(g-j-40000)*d7+16625;break;
case 161:
case 162:
case 163:
case 164:
case 165:
case 166:
case 167:
case 168:
case 169:
case 170:
case 171:
case 172:
case 173:
case 174:
case 175:
case 176:
case 177:
case 179:
case 180:
case 181:
case 182:
case 183:
case 184:
case 185:
case 186:
case 187:
case 188:
case 189:
case 190:
case 191:
case 192:
case 193:
case 194:
case 195:
case 196:
case 197:
case 198:
case 199:
case 200:t=(g-j-80000)*d8+24625;break;}
printf("个人所得税:t=%10.2f\n",t);
m=g-t;
printf("税后工资:m=%10.2f\n",m);
}
附录资料:不需要的可以自行删除
Abstract: Based on the comprehensive analysis on the plastic part’s structure service requirement, mounding quality and mould menu factoring cost. A corresponding injection mould of internal side core pulling was designed. By adopting the multi-direction and multi-combination core-pulling. A corresponding injection mould of internal side core pulling was designed, the working process of the mould was introduced
C语言详解 - 枚举类型
注:以下全部代码的执行环境为VC++ 6.0
在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。
1. 定义一种新的数据类型 - 枚举型
以下代码定义了这种新的数据类型 - 枚举型
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
(2) DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。
(3) 第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。
(4) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(5) 枚举型是预处理指令#define的替代。
(6) 类型定义以分号;结束。
2. 使用枚举类型对变量进行声明
新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float, 双精度浮点型double, 字符型char, 短整型short等等。用这些基本数据类型声明变量通常是这样:
char a; //变量a的类型均为字符型char
char letter;
int x,
y,
z; //变量x,y和z的类型均为整型int
int number;
double m, n;
double result; //变量result的类型为双精度浮点型double
既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。
方法一:枚举类型的定义和变量的声明分开
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY yesterday;
enum DAY today;
enum DAY tomorrow; //变量tomorrow的类型为枚举型enum DAY
enum DAY good_day, bad_day; //变量good_day和bad_day的类型均为枚举型enum DAY
方法二:类型定义与变量声明同时进行:
enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //变量workday的类型为枚举型enum DAY
enum week { Mon=1, Tue, Wed, Thu, Fri Sat, Sun} days; //变量days的类型为枚举型enum week
enum BOOLEAN { false, true } end_flag, match_flag; //定义枚举类型并声明了两个枚举型变量
方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:
typedef enum workday
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //此处的workday为枚举型enum workday的别名
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
enum workday中的workday可以省略:
typedef enum
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //此处的workday为枚举型enum workday的别名
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
也可以用这种方式:
typedef enum workday
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
};
workday today, tomorrow; //变量today和tomorrow的类型为枚举型workday,也即enum workday
注意:同一个程序中不能定义同名的枚举类型,不同的枚举类型中也不能存在同名的命名常量。错误示例如下所示:
错误声明一:存在同名的枚举类型
typedef enum
{
wednesday,
thursday,
friday
} workday;
typedef enum WEEK
{
saturday,
sunday = 0,
monday,
} workday;
错误声明二:存在同名的枚举成员
typedef enum
{
wednesday,
thursday,
friday
} workday_1;
typedef enum WEEK
{
wednesday,
sunday = 0,
monday,
} workday_2;
3. 使用枚举类型的变量
3.1 对枚举型的变量赋值。
实例将枚举类型的赋值与基本数据类型的赋值进行了对比:
方法一:先声明变量,再对变量赋值
#include<stdio.h>
/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
/* 使用基本数据类型声明变量,然后对变量赋值 */
int x, y, z;
x = 10;
y = 20;
z = 30;
/* 使用枚举类型声明变量,再对枚举型变量赋值 */
enum DAY yesterday, today, tomorrow;
yesterday = MON;
today = TUE;
tomorrow = WED;
printf("%d %d %d \n", yesterday, today, tomorrow);
}
方法二:声明变量的同时赋初值
#include <stdio.h>
/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
/* 使用基本数据类型声明变量同时对变量赋初值 */
int x=10, y=20, z=30;
/* 使用枚举类型声明变量同时对枚举型变量赋初值 */
enum DAY yesterday = MON,
today = TUE,
tomorrow = WED;
printf("%d %d %d \n", yesterday, today, tomorrow);
}
方法三:定义类型的同时声明变量,然后对变量赋值。
#include <stdio.h>
/* 定义枚举类型,同时声明该类型的三个变量,它们都为全局变量 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;
/* 定义三个具有基本数据类型的变量,它们都为全局变量 */
int x, y, z;
void main()
{
/* 对基本数据类型的变量赋值 */
x = 10; y = 20; z = 30;
/* 对枚举型的变量赋值 */
yesterday = MON;
today = TUE;
tomorro
展开阅读全文