C语言课程设计报告职工工资信息管理系统_第1页
C语言课程设计报告职工工资信息管理系统_第2页
C语言课程设计报告职工工资信息管理系统_第3页
C语言课程设计报告职工工资信息管理系统_第4页
C语言课程设计报告职工工资信息管理系统_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录课程设计评语2目 录31课程论文题目42程序设计思路43. 功能模块图.64. 数据结构设计.65. 算法设计.76程序代码.107程序运行结果.198编程中遇到的困难及解决方法.229总结心得及良好建议.2310致谢.241 课程论文题目职工工资信息管理系统【要求】该系统能够实现工资信息管理。系统包括录入、新增、浏览、查询和排序等功能。其中录入功能要求能够添加新的工资信息到文件;新增功能要求能够新增职工信息到文件;浏览功能要求能够按照工资卡号、姓名分类浏览;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询。【提示】1、 文件中一行数据对应一个

2、职工工资信息2、 工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录。3、 工资单信息包括工资卡号、姓名、月份、应发工资、税费、电费、税金、实发工资等4、 实发工资=应发工资税费电费税金,其中税金计算方法为:(1) 应发工资800元,税金=0(2) 800应发工资1400元,税金=(应发工资1400)*10%2程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立

3、相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。2、总体设计整个系统可以分为信息输入、信息新增、信息浏览、信息排序和信息查询五个主要模块。3、详细设计(1)工资信息采用结构体数组:struct list int num; /工资卡号 char name20; /姓名 int month;/月份 int salary1; /应发工资 int water;/水费 int electrisity; /电费 float fax; /税金 float salary2; /实发工资listn; /listn中每个数组元素对应一个职工工资信息(2)输入模块 按照工资

4、卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。文件操作函数:fopen,fwrite,fclose.税金的计算:if(应发工资800&应发工资1400) 税金=(应发工资-1400)*10%;实发工资=应发工资-水费-电费-税金。(3)新增模块增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式(以”ab”方式打开文件)。(4)浏览模块 调用排序模块的排序功能,可以浏览排序后的所有职工信息。(5)排序模块排序模块提供菜单选择,实现按照工资卡号升序、实发工资升序排序。排序方法可以选择冒泡排序

5、、插入排序、选择排序等,本系统用的是冒泡排序。(6)查询模块实现按照工资卡号和姓名的查询,采用基本的查找方法即可。3功能模块图职工工资信息管理系统主菜单menu()输入模块enter()新增模块add()浏览模块browse()排序模块order()按姓名查询search_1()查询模块search()按工资卡号查询search_2()退出exit(0)按实发工资排序order_2()按工资卡号排序order_1()4数据结构设计系统用将职工各项信息以结构体类型struct list来定义,它包括num,name20,month,salary1,water,electricity,fax,sa

6、laly2等不同类型的数据项,同时定义了结构体数组,包括n个数组元素,对应n个职工,每一个元素用来存放一个职工的数据;每个职工的信息以结构体方式从内存和磁盘文件中进行存储和导出。以结构体方式来整合职工的不同信息,将不同的数据组合成一个有机整体,非常方便程序的调用。5算法设计1主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。开 始显示一系列的功能选择输入n,判断n是否是0到6ny根据n值调用各功能模块2.添加模块 开 始输入职工数目浏览职工信息输入各项信息返回?1储存职工信息2主菜单2.新增模块 开 始输入新增职工数目输入新职工信息浏览职工信息1返回?储存输入信息2主菜单3

7、.浏览模块开 始从磁盘中导出信息输出各职工信息返回主菜单4.排序模块 开 始输入n判断n是否是0到2ny12浏览职工信息按实发工资排序按工资卡号排序返回?输出12主菜单5.查询模块开 始输入n判断n值ny浏览职工信息12按卡号查询按姓名查询1返回?输出主菜单26程序代码(每个函数都要有功能说明)#include#include#include#include#define n 50void main() void menu(); menu();void menu() /主菜单函数 void enter(); void add(); void browse(); void search(); v

8、oid order(); int n,w1; do puts(tt*menu*nn); puts(ttt 1.enter ); puts(ttt 2.add); puts(ttt 3.browse all); puts(ttt 4.search ); puts(ttt 5.order ); puts(ttt 6.exit); puts(nntt*n); printf(choice your number(1-6):bb); scanf(%d,&n); if(n6) /*对选择的数字进行判断*/ w1=1; getchar(); else w1=0; while(w1=1); switch(n)

9、 case 1:enter();break; /*输入模块*/ case 2:add();break; /*新增模块*/ case 3:browse();break; /*浏览模块*/ case 4:search();break; /*查找模块*/ case 5:order();break; /*排序模块*/ case 6:exit(0); /*退出模块*/ struct list /结构体定义工资信息 int num; /工资卡号 char name20;/姓名 int month;/月份 int salary1; /应发工资 int water;/水费 int electrisity; /

10、电费float fax; /税金 float salary2; /实发工资listn; /listn中每个数组元素对应一个职工工资信息void enter() /输入模块函数 void printf_back(); void save(int n); void input(int i); int i,n; printf(how many workers (1-%d)?:,n-1); scanf(%d,&n); /输入职工数目 printf(n enter date nownn); for(i=0;in;i+) /输入职工各项信息 printf(n input %dth student reco

11、rd.n,i+1); input(i); /调用职工信息输入函数 if(i!=0)save(n); /储存职工信息 printf_back(); /执行返回函数void add() /新增模块函数 void printf_back(); int i,n,m,k; int load();void save(int n); void input(int i); file *fp; /定义文件指针变量 n=load(); /导出文件信息,得到返回值 printf(how many workers are you want to add(0-%d)?:,n-1-n); scanf(%d,&m); /输

12、入新增职工数目 k=m+n; /总职工数= 新增职工数+已有职工数 for(i=n+1;i=k;i+) /输入新增职工信息 printf(n input %dth workers record.n,i-n+2); input(i); /调用职工信息输入函数 fp=fopen(workers.txt,ab); /以追加形式打开文件 for(i=n+1;i=k;i+) fwrite(&listi,sizeof(struct list),1,fp); /将内存中的职工信息输出到磁盘文件中save(n); /储存输入信息 fclose(fp); /关闭文件 printf_back(); /执行返回函数

13、 void browse() /浏览模块函数 void printf_one(int i); void printf_face(); int load(); void menu(); int i,n; n=load(); printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) /以10个职工为一组输出 printf(nnpass any key to continue.); getch(); puts(nn); printf_one(i); /输出各职工信息printf(n); printf(t there are %d recode.n,n); pri

14、ntf(n pass any key to back.); getch(); menu(); /返回主菜单 void search() /查询模块函数 int n,w1; do puts(ttt1.search by name); /按姓名查询 puts(ttt2.search by num); /按工资卡号查询 scanf(%d,&n); if(n2) w1=1; getchar(); else w1=0; while(w1=1); switch(n) void search_1(); void search_2(); case 1:search_1();break; case 2:sear

15、ch_2();break; void search_1() /按姓名查询 int load(); void printf_face(); void menu(); void printf_one(int i); int i,n,k,w1=1,w2,w3,w4; struct list s; n=load(); /导出文件信息,得到返回值 do do k=-1; printf(nnenter name that you want to search! name:); scanf(%s,); /输入要查找的姓名 printf_face(); /输出职工信息项目 for(i=0;in;i

16、+) if(strcmp(,)=0) /查询出与输入姓名相同的职工的信息 k=i; printf_one(k);break; /输出查询结果并中断,说明只能输出查到的第一个数据 if(k=-1) /如果没有查出信息则执行如下选择菜单 printf(nn no.exit!please); printf(nnare you again?nt1).again 2).no and back bb); scanf(%d,&w1); if(w1=2)break; while(k=-1&w1=1); /选择1继续循环执行查询 w4=0;w3=0; if(k!=-1) prin

17、tf(successful); printf(nn what do you want to do?nt1).search another 2).back bb); /选择查找下一个数据或返回 scanf(%d,&w2); while(w2=1); /选择1循环执行查询下一个数据 menu(); void search_2() /按工资卡号查询 int load(); void printf_face(); void menu(); void printf_one(int i); struct list s; int i,n,k,w1=1,w2,w3,w4; n=load(); do do k=

18、-1; printf(nnenter num that you want to search! num:); scanf(%d,&s.num); /输入要查找的工资卡号 printf_face(); /输出职工信息项目 for(i=0;in;i+) if(s.num=listi.num) /查询出与输入工资卡号相同的职工的信息 k=i; printf_one(k);break; if(k=-1) /如果没有查出信息则执行如下选择菜单 printf(nn no.exit!please); printf(nnare you again?nt1).again 2).no and back bb);

19、scanf(%d,&w1); if(w1=2)break; while(k=-1&w1=1); /选择1继续循环执行查询 w4=0;w3=0; if(k!=-1) printf(successful); printf(nn what do you want to do?nt1).search another 2).back bb); scanf(%d,&w2); while(w2=1); /选择1循环执行查询下一个数据 menu(); void order() /排序功能模块函数 int w1,n; void order_1(); void order_2(); do puts(ttt1.or

20、der by num); /按工资卡号排序 puts(ttt2.order by salary 2); /按实发工资排序 scanf(%d,&n); if(n2) w1=1; getchar(); else w1=0; while(w1=1); switch(n) case 1:order_1();break; case 2:order_2();break; void order_1() /按工资卡号升序排序 int load(); void printf_back(); void save(int i); int i,j,n;void browse();struct list s; n=lo

21、ad(); for(i=0;in-1;i+) /冒泡排序法,按职工工资卡号升序排列出职工信息 for(j=i+1;jn-1;j+) if(listj.numlisti.num) s=listj; listj=listi; listi=s; save(n); /储存排序后的信息browse(); /显示排序后的信息 puts(nn); printf_back(); /执行返回函数 void order_2() /按实发工资升序排序 int load(); void printf_back(); void save(int i); int i,j,n; struct list s; void br

22、owse(); n=load(); for(i=0;in-1;i+) /冒泡排序法,按实发工资升序排列出职工信息 for(j=i+1;jn-1;j+) if(listi.salary2listj.salary2) s=listj;listj=listi;listi=s; save(n); /储存排序后的信息browse(); /显示排序后的信息 puts(nn); printf_back(); /执行返回函数 void save(int n) /储存函数 file *fp; int i; fp=fopen(workers.txt,wb); /以只写方式打开文件 for(i=0;in;i+) f

23、write(&listi,sizeof(struct list),1,fp); /将内存中的职工信息输出到磁盘文件中 fclose(fp); /关闭文件 int load() /导出文件信息 file *fp; int i; fp=fopen(workers.txt,rb); /以只读方式打开文件 for(i=0;!feof(fp);i+) fread(&listi,sizeof(struct list),1,fp); /读出磁盘文件中的职工信息 fclose(fp); /关闭文件 return(i-1); /返回数值i-1 void input(int i) /职工信息输入函数 float

24、salary2(int i); float fax(int i); printf(no.:); scanf(%d,&listi.num); printf(name:); scanf(%s,); printf(month:); scanf(%d,&listi.month); printf(salary1:); scanf(%d,&listi.salary1); printf(water:); scanf(%d,&listi.water); printf(electricity:); scanf(%d,&listi.electrisity); fax(i); /计算税金 sal

25、ary2(i); /计算实发工资 float fax(int i) /税金计算函数 if(listi.salary1800)listi.fax=0; else if(listi.salary11400) listi.fax=(listi.salary1-800)*5/100); else listi.fax=(listi.salary1-1400)/10);return listi.fax; float salary2(int i) /实发工资计算函数 listi.salary2=(listi.salary1-listi.water-listi.electrisity-listi.fax);

26、return listi.salary2; void printf_back() /返回函数 int w; void menu(); void browse(); printf(nntsuccessful!); printf(what do you want to do?nnt1).browse all nowt2).back: bb); /菜单选择浏览职工信息或返回主菜单 scanf(%d,&w); if(w=1)browse(); /输入1选择浏览职工信息 else menu(); /输入2返回主菜单 void printf_one(int i) /单个职工信息输出函数 printf(%9

27、d,listi.num); printf(%9s,); printf(%9d,listi.month); printf(%9d,listi.salary1); printf(%9d,listi.water); printf(%9d,listi.electrisity); printf(%9.2f,listi.fax); printf(%9.2f,listi.salary2); void printf_face() /职工信息项目 printf(ntno. name month salary1 water electrisity fax salary2n); 7程序运行结果1

28、、主函数运行,显示主菜单函数menu()2、输入数字1,添入两组数据3、如果输入数字2,新增一组数据并浏览4、输入数字3,浏览所有职工信息5、输入4,进行查询程序,再输入1 ,按姓名查询,输入2 ,按工资卡号查询6、输入数字5,进行排序程序,输入1 ,按卡号排序,输入2按实发工资排序。8.编程中遇到的困难及解决方法遇到最大的问题是所有程序代码编完放在一起后,虽然能够成功运行,但使用时如果职工人数发生变化,会导致文件后部出现乱码。若要使每次运行都正常,必须在人数改变后退出程序,修改宏定义的值。这样很不方便,不能够连续运行。为解决这一大问题,最后我想到了定义一个全局指针变量,用来追踪最新的人数。特

29、别是添加这个会导致人数变化的函数中,全局指针变量起了很大作用。经过一边修改一边调试,最终可以成功的串联整个函数,在连续运行时,总能根据最新的人数调用各个函数。另外在串联所有函数时,调试提示出错:有几个函数“redefinition; different basic types”解决:在函数名前加void指明类型。 整个程序代码是分块书写的,每个函数都可以独立运行。只有输入函数查询菜单函数写得很顺利,一次性就能够成功运行,其他函数在调试过程中或多或少都出现了问题。比如,浏览函数display()遇到的问题虽然不大,但解决起来很麻烦。理想的运行结果是美观整齐。即下面的职工信息分别与第一个print

30、f输出的中文项目提示对齐。解决方法:不断修改空格个数,不断运行察看效果。又如,添加函数add()遇到的问题是用printf输入新职工信息后,保存到文件里面,发现原有的信息不见了。解决:文件打开方式改用a追加写入。9总结心得及良好建议 经过一学期的c语言学习,我们掌握了c语言的基础知识,能够读懂别人用c语言设计的程序。平时的程序设计大多是以填空的形式出现,虽然有所接触,但都不完全。而这一周的课程设计,却让我们完完全全用自己学到的知识编写一个完整的体统程序。这是一个新的挑战,也是一种新的学习。 我们组选择的题目是第一个职工工资信息管理系统。初看到这个题目觉得很简单,但当我做到电脑前准备开始编写代码的时候才发现无从下手。通过去图书馆查找程序设计相关的书籍,和上网参考前人编写的类似程序,我脑中才有了一个大概方向。 终于开始着手写了。第一天下来,我只写好了两个函数,但还是很开心,因为这是我编的第一个小系统的成功的开始! 接下来几天都在宿舍整个下午的对着电脑不断的编译、调试、修改,每次编好一个能够成功运行的程序,都会感到很欣慰,但自己编的程序自己很难发现当中的错误,而电脑又没有提示的时候就很受打击,也会着急。但可以先放一放,让脑子休息一下,忘掉错误的记忆。或许等过段时间再回过头来,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论