《高级语言程序设计》课程设计报告.docx
《《高级语言程序设计》课程设计报告.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计》课程设计报告.docx(33页珍藏版)》请在冰豆网上搜索。
![《高级语言程序设计》课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-1/23/aa222149-60a4-46c0-adfe-cf35f5a7933f/aa222149-60a4-46c0-adfe-cf35f5a7933f1.gif)
《高级语言程序设计》课程设计报告
学号
2012-2013学年第二学期
《高级语言程序设计》
课程设计报告
题目:
专业:
班级:
姓名:
学号:
指导教师:
成绩:
计算机与信息工程系
年月日
1设计内容及要求.........................................2
1.1设计内容.....................................................2
1.2设计任务及具体要求...........................................2
2概要设计.........................................................3
2.1该系统的功能简介.............................................3
2.2总体程序框图.................................................3
2.3各个模块之间的主要关系........................................4
33设计过程或程序代码............................................5
3.1各个模块的程序流程图及运行界面................................5
3.2对关键代码加以分析说明.......................................15
4程序调试分析.....................................................23
5小结.............................................................25
致谢...........................................................26
参考文献...........................................................27
附:
源程序..........................................................28
1设计内容及要求
1.1设计内容
《工资管理查询系统》主要根据课程设计要求进行设计,并了解了公司的职工的工资工作流程,该系统功能主要包括六大模块:
1)职工个人说得税的计算模块,根据工资多余5000,在1000—5000之间,少余1000三种情况进行计算。
2)添加职工的工资信息模块,用户根据输入职工编号后,对工资信息进行录入。
3)职工工资查询模块,根据用户输入职工编号后,方可进行查询。
4)职工工资修改模块,用户输入职工编号后,对以前的信息进行修改。
5)数据输出模块,输出其相应的模块功能。
6)职工工资统计模块,根据输入的职工信息进行统计。
1.2设计任务及具体要求
主要利用c语言的文件操作能力设计开发一个小型的管理信息系统,至少具有如下功能:
工资录入,按人名、基本工资、实发工资、个人所得税进行查询和按部门进行分类统计。
操作界面要符合用户的一般习惯,图形或文本界面都可以。
要求:
明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用高级语言进行程序设计的能力,重点提高用C语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤;提高撰写技术文档的能力。
2概要设计
2.1系统的功能简介
该系统的主要功能是实现职工工资的录入,包括(录入职工的基本工资、实发工资、津贴、岗贴、补贴、房帖、交通补贴、储蓄、汇费)。
对职工的工资信息进行删除、修改、个人所得税的计算。
并统计职工的所有信息。
2.2总体程序框图
图2.2-A总体程序
图2.2-B添加职工的工资信息
2.2各个模块之间的主要关系
该程序的功能主要是实现职工工资的录入,并对工资的相应信息进行个人所得税的计算。
各个模块之间的关系是相互联系的。
首先,主函数包含了所有的子函数。
主函数是整个程序的核心。
子函数之间也是有联系的,对个人所得税的计算、职工工资信息的修改、删除、查询、统计,必须是在职工工资录入的情况下进行的。
因此对职工工资信息的录入是非常重要的。
在职工工资的修改、删除、查询、统计与个人所得税所有的子函数之间是没有多大联系的。
3设计过程或程序代码
3.1各个模块的程序流程图
1)
主函数程序(N-S)流程图及运行界面
主函数程序(N-S)流程图(见图3.1-A)
主函数main()
定义变量charch;n=0;
while(TRUE)
ch=getche();
switch(ch)
case'1':
addone();break;添加职工信息
case'2':
delone();break;删除个人记录
case'3':
modone();break;修改个人记录
case'4':
idone();break;查找职工记录
case'5':
listall();break;统计职工记录
case'6':
wfile();break;将信息写入文件当中
case'7':
rfile();break;从文件中读取信息
case'8':
exit(0);退出系统
default:
printf("对不起,请重新选择!
\n");
图3.1-A主函数程序
简单说明:
该功能主要显示的是给用户一个进入界面,它主要的是显示该程序主要能够执行的有哪些功能。
下面是显示给用户的界面。
(见图3.1-A)
主函数程序运行界面:
图3.1B主函数界面
2)职工个人所得税(N-S)流程图(见图3.1-B)
图3.2-A职工个人所得税程序
该程序主要根据职工的工资信息进行个人所得税的计算,当个人所得税m大于等于5000时,个人所得税tmp为(m-5000)*0.2;在1000<=m<5000时,个人所得税为(5000-1000)*0.1;当800<=m<1000时,个人所得税为(m-800)*0.5。
3)
录入职工的工资信息(N-S)流程图及程序运行界面
录入职工的工资信息(N-S)流程图(见图3.3-A)
printf("RecordNO.%d\n",n+1);
输入月份
输入职工基本信息
输入职工的职工编号
输入职工的基本工资
输入职工的津贴
输入职工的岗帖
输入职工的补贴
输入职工的房帖
输入职工的交通补贴
输入职工的房租
输入职工的储蓄
输入职工的汇费
图3.3-A录入职工的工资信息程序
该模块主要是对职工的工资进行录入,录入的主要有职工的津贴、岗贴、补贴、房帖、交通补贴,并把该五项统计为职工的实发工资。
还录入职工的房租、储蓄、汇费。
录入职工的程序运行界面。
(见图3.3-B)
图3.3-B录入职工的工资信息程序界面
4)删除职工记录的(N-S)流程图及程序运行界面
删除职工记录的(N-S)流程图(见图3.4-A)
定义数据变量
输入某职工的职工编号gets(numstr);
zhigongid=atof(numstr);
for(j=0;j<=n;j++)
zg[j].id==zhigongid?
真
假
flagfind=1;
tmp[k]=zg[j];k++;
flagfind==1?
真
假
for(j=0;j<=(n-1);j++)
没有你要删除的记录
zg[j]=tmp[j];
成功删除记录
n=n-1;
return(0);
图3.4-A删除职工记录程序
该模块主要通过已经输入的职工信息进行删除,如果你输入的信息存在或不存在,则分别显示以下运行界面。
见图(3.4-B、C)
图3.4-B删除职工记录程序界面
图3.4-C删除职工记录程序界面
5)修改个人记录的(N-S)流程图及运行界面
修改个人记录的(N-S)流程图(见图3.5-A)
定义数据变量
输入职工的职工编号
将所输职工编号转化为double型
for(j=0;j<=n;j++)
zg[j].id==zhigongid?
真
假
输入职工的新信息同时调用atof进行修改
flagfind=0
flagfind=1;
flagfind!
=0?
真
假
return0
图3.5-A修改个人记录程序
修改个人记录是在原有的基础上对职工的工资信息进行修改,在修改的同时你可以看到该职工原来的工资信息。
以下是修改职工工资信息过后的显示界面。
(见图3.5-B)
图3.5-B修改个人记录的运行界面
6)查找职工记录的(N-S)流程图及运行界面
查找职工记录的(N-S)流程图(见图3.6-A)
定义数据变量
输入职工的职工编号
将所输职工编号转化为double型
for(j=0;j<=n;j++)
zg[j].id==zhigongid?
真
假
将查询到的程序一一输出
flagfind=0
flagfind=1
flagfind!
=0?
真
假
您查找的记录不存在!
return0
图3.6-A查找职工记录的(N-S)流程图
该功能是对已经录入的职工信息进行查寻,如果你输入的职工编号存在,则显示职工的工资信息,如果不存在,则提示为“您查找的记录不存在”。
运行界面如下。
(见图3.6-B)
图3.6-B查找职工记录的运行界面
7)统计出所有的职工信息的(N-S)流程图及运行界面
统计出所有的职工信息的N-S流程图(见图3.7-A)
intj
n<1?
真
假
您查找的记录不存在
for(j=0;j
printf("\nNO:
%d|",j+1)
输出全体职工相应的信息
return(0)
图3.7-A统计出所有的职工信息的(N-S)流程图
在这个子模块程序中,主要是对输入的职工信息进行统计,统计过后并输出说有的职工工资信息。
以下是程序的运行界面。
(见图3.7-B)
图3.7-B统计出所有的职工信息的运行界面
3.2对关键代码加以分析说明
1)/*结构体声明*/
structzhigong
{
intmonth;
doubleid;
doublejbgz;
doublejt;
doublegt;
doublebt;
doubleft;
doublejtbt;
doublesfgz;
doublefz;
doublecx;
doublehf;
doublegrsds;
doubleyks;
doublesfs;
};
这是对职工工资信息录入的一个结构体的申明,申明该职工的工资信息有哪些。
Id为职工编号,jbgz为职工的基本工资,jt为职工的津贴,gt为职工的岗帖,bt为职工的补贴,ft为职工的房帖,jtbt为职工的交通补贴,cx为职工的储蓄,hf为职工的汇费,grsds为职工的个人所得税,yks为职工的应扣数,sfs为职工的实发数,Sfgz为实发工资。
/*建立50个元素的结构体数组*/
structzhigongzg[50];
/*建立结构体变量*/
structzhigongzgone;
/*职员列表中的数量*/
intn=0;
/*获得字符串*/
charnumstr[50];
这是对职工的工资录入的主要数据结构,zg[50]是可以录入50个职工的工资信息,charnumstr[50]为在录入职工的工资信息时,可输入的字符串的最大是50位。
2)函数addone
addone(void)
{
printf("\n");
printf("__________________________________>>><<<_____________________________________\n");
printf("RecordNO.%d\n",n+1);
printf("请输入月份:
\n");
gets(numstr);
zg[n].month=atoi(numstr);
printf("输入职工基本信息\n");
printf("请输入职工的职工编号:
\n");
gets(numstr);
zg[n].id=atof(numstr);
printf("请输入职工的基本工资:
\n");
gets(numstr);
zg[n].jbgz=atof(numstr);
printf("请输入职工的津贴:
\n");
gets(numstr);
zg[n].jt=atof(numstr);
printf("请输入职工的岗贴:
\n");
gets(numstr);
zg[n].gt=atof(numstr);
printf("请输入职工的补贴:
\n");
gets(numstr);
zg[n].bt=atof(numstr);
printf("请输入职工的房帖:
\n");
gets(numstr);
zg[n].ft=atof(numstr);
printf("请输入职工的交通补贴:
\n");
gets(numstr);
zg[n].jtbt=atof(numstr);
zg[n].sfgz=(zg[n].jbgz)+(zg[n].jt)+(zg[n].gt)+(zg[n].bt)+(zg[n].ft)+(zg[n].jtbt);
printf("请输入职工的房租:
\n");
gets(numstr);
zg[n].fz=atof(numstr);
printf("请输入职工的储蓄:
\n");
gets(numstr);
zg[n].cx=atof(numstr);
printf("请输入职工的会汇:
\n");
gets(numstr);
zg[n].hf=atof(numstr);
zg[n].grsds=tgrsds(zg[n].sfgz);
zg[n].yks=(zg[n].fz)+(zg[n].cx)+(zg[n].hf)+(zg[n].grsds);
zg[n].sfs=(zg[n].sfgz)-(zg[n].yks);
n++;
printf("添加成功!
\n");
printf("__________________________________>>><<<_________________________________\n");
return0;
}
通过这个函数可以创建一个职工的所有工资信息,首先程序提示输入职工的编号,然后输入职工的工资信息,包括(基本工资、津贴、岗贴、补贴、房帖、交通补贴,并统计这些工资为实发工资。
然后输入职工的房租、储蓄、汇费)
3)函数delone
/*删除个人记录*/
delone(void)
{
structzhigongtmp[50];
doublezhigongid;
intj,k;
intflagfind;
flagfind=0;
k=0;
printf("---------------------------------------------------\n");
printf("\n请输入某职工的职工编号:
\n");
gets(numstr);
zhigongid=atof(numstr);
for(j=0;j<=n;j++)
{
if(zg[j].id==zhigongid)
{
flagfind=1;
}
else
{
tmp[k]=zg[j];
k++;
}
}
if(flagfind==1)
{
for(j=0;j<=(n-1);j++)
{
zg[j]=tmp[j];
}
printf("\n成功删除记录!
\n");
printf("---------------------------------------------------\n");
n=n-1;
}
else
{
printf("\n没有你要删除的记录!
\n");
printf("----------------------------------------------------\n");
}
return(0);
}
程序提示用户输入要删除的个人的工资记录,使用线形查找法查找相应的记录,如果找到,则删除记录。
如果没有,则提示用户该记录不存在。
4)函数modone
/*修改个人记录*/
modone(void)
{
doublezhigongid;
intj;
intflagfind;
flagfind=0;
printf("\n请输入职工的职工编号:
\n");
gets(numstr);
zhigongid=atof(numstr);
for(j=0;j<=n;j++)
{
if(zg[j].id==zhigongid)
{
printf("NO.:
%d\n",j);
printf("month:
%d\n",zg[j].month);
printf("\t职工编号%10.0f\n",zg[j].id);
printf("\t基本工资:
%10.2f\n",zg[j].jbgz);
printf("\t请输入职工的基本工资:
\n");
gets(numstr);
zg[j].jbgz=atof(numstr);
printf("\t津贴:
%10.2f\n",zg[j].jt);
printf("\t请输入职工的津贴:
\n");
gets(numstr);
zg[j].jt=atof(numstr);
printf("\t岗贴:
%10.2f\n",zg[j].gt);
printf("\t请输入职工的岗贴:
\n");
gets(numstr);
zg[j].gt=atof(numstr);
printf("\t补贴:
%10.2f\n",zg[j].bt);
printf("\t请输入职工的补贴:
\n");
gets(numstr);
zg[j].bt=atof(numstr);
printf("\t房帖:
%10.2f\n",zg[j].ft);
printf("\t请输入职工的房帖:
\n");
gets(numstr);
zg[j].ft=atof(numstr);
printf("\t交通补贴:
%10.2f\n",zg[j].jtbt);
printf("\t请输入职工的交通补贴:
\n");
gets(numstr);
zg[j].jtbt=atof(numstr);
zg[j].sfgz=(zg[j].jbgz)+(zg[j].jt)+(zg[j].gt)+(zg[j].bt)+(zg[j].ft)+(zg[j].jtbt);
printf("\t房租:
%10.2f\n",zg[j].fz);
printf("\t请输入职工的房租:
\n");
gets(numstr);
zg[j].fz=atof(numstr);
printf("\t储蓄:
%10.2f\n",zg[j].cx);
printf("\t请输入职工的储蓄:
\n");
gets(numstr);
zg[j].cx=atof(numstr);
printf("\t汇费:
%10.2f\n",zg[j].hf);
printf("\t请输入职工的汇费:
\n");
gets(numstr);
zg[j].hf=atof(numstr);
printf("修改成功\n");
zg[j].grsds=tgrsds(zg[j].sfgz);
zg[j].yks=(zg[j].fz)+(zg[j].cx)+(zg[j].hf)+(zg[j].grsds);
zg[j].sfs=(zg[j].sfgz)-(zg[j].yks);
flagfind=1;
}
else
{
flagfind=0;
}
}
if(flagfind!
=0)printf("\n没有此记录!
\n");
return(0);
}
程序提示用户输入职工的编号,使用线形查找相应的记录,如果找到,则提示用户输入新的相应的职工信息。
4设计结果与分析
当把程序写好并进行调试时,并不是一帆风顺的,总会遇到很多在调试时遇到的错误。
1.首先在定义函数时,不能输入汉字。
否则会程序会显示错误。
2.在程序中,如果定义职工的基本工资、津贴、岗贴、补贴、房帖、交通补贴等为float型,而后面其相应的返回值为双精度浮点型,会出现相应的警告
3.前后定义变量要统一。
4.如果要调用添加函数,修改函数,修改函数,查找函数,统计函数等要在主函数前面进行申明。
否则会显示警告。
5.对背景颜色设置的时候,当你输入的颜色在内存中不存在时,运行程序过后,系统会告诉你相应的颜色符号常数及数值。
6.如果程序在运行的过程中,对于一个循环语句,如果你返回的值始终是真的,那么程序将进如死循环。
7.未注意int,float型数据的数值范围,int型数据的数值范围(-32768~32768)。
对定义工资变量时,如果将职工工资定义为float型,将会出现警告。
8.对应该有花括弧的复合语句,忘记加花括弧。
9.所调用的函数在调用语句之后才定义,而又在调用前未加说明。
5小结
随着我国成功加入WTO及信息化浪潮的日益临近,企业、单位等一些部门在激烈的市场竞争环境下求得生存,就必须有效地利用人才、时间、信息结合的优势。
因此,如何使企业、单位等部门及时掌握本企业、单位等人才的各种信息、第一时间处理好随时变化的工资管理问题,建立一套符合企业、单位实际的工资管理系统就显得尤为重要。
在本课程设计的设计过程中,我刚开始感觉到有点头痛。
要通过一学期C语言的学习后将所学知识运用起来有点困难,但回过头来再去看教课书,对于这些知识点有关的背景,概念和解决方案更进一步的理解,感觉也不是很难。
另外我还体会了从事C语言课程设计工作需要特别谨慎认真地态度和作风,一点都不能马虎。
每个细微的细节都必须十分注意,如果不认真思考,就会出现或大或小的错误。
如果把早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时会推倒很多前面做的工作。
有时候,我自己觉得我写的程序非常正确,但是就是编译通不过,在查找错误的过程中