1、沈阳航空航天大学理学院C 语言程序设计课 程 设 计 报 告题目: 职工工资管理系统 专 业: 班 级: 学 号: 学生姓名: 指导教师: 2010 年 7 月 9 日课程设计成绩评定表姓 名 学 号评语平时成绩 阶段考核 课程设计报告 总成绩成绩指导教师(签字)教研室主任(签字)2目 录一、题目简介 .1二、概要设计 .2一.程序具有的功能模块 2二.每个模块具有的功能 2三.系统的模块图 3三、详细设计 .4四、调试与测试 .8五、解决方案 .9参考文献 .10附录(源程序清单) .11C 语言程序设计课程设计 正 文-1-一、 题目简介(根据课程设计要求,结合题目背景分析,以及个人对题目
2、的深入了解,将题目要求简单扼要的总结如下。 )题目:职工工资管理系统图书资料信息包括:ID 号、姓名、基本工资、职务工资、津贴、医疗保险、公积金。主要功能:1、各种基本数据的录入。如:职工工资基本信息录入。2、各种基本数据的修改。即:允许对以及录入的数据重新进行编辑、修改。3、各种基本数据的插入。如:在已录入的职工工资信息中插入一条新信息。4、各种基本数据的删除。如:可以实现删除某职工相关信息的功能。5、基于各种数据的查询。实现按照多关键字查询,如:姓名为 xiaowang 的职工的各种工资信息2二、概要设计一.程序具有的功能模块职工工资管理系统的设计大致可分为五个模块,其中每一个模块对应一个
3、函数,它们的功能是:各种工资的录入函数(inputs) ,各项工资的显示函数(list) ,修改工资记录函数(change),查找职工工资记录的函数(search),删除某职工工资信息的函数(delete) 。这些函数执行各自所需的功能,互不影响,又相互联系,共同构成一个工资管理系统。二.每个模块具有的功能第一个模块:输入记录,将每一个职工的姓名、ID 号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。第二个模块:显示记录,根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。第三个模块:修改
4、记录,可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。第四个模块:查找记录,可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。第五个模块:删除记录,可以删除数据文件中的任一记录。C 语言程序设计课程设计 正 文-3-三.系统的模块图职工工资管理系统工资的输入工资的修改工 资 的 显 示工 资 的 查 找记 录 的 删 除菜单结束图 14三、详细设计本程序利用双链表结构实现工资管理,采用模块化设计,各模块独立,可以分块调试,均由主函数调用。运行工资管理程序,首先进入光带主菜单,光标定位在菜单的第一项。通过键盘上的光标上下移动键选中菜单,按回车键后进入相应
5、的功能函数执行数据处理。具体各模块的表达如下:一、main()主函数主函数数是程序的入口,采用模块化设计,主函数不宜复杂,功能在各模块中实现。首先声明一些必要变量,然后作一无限循环程序,循环体为一个开关(switch )语句,该语句的条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应功能函数,同时设置一个出口,即当返回值为一定条件时运行 exit()函数结束程序,以免造成死循环。算法描述如下:图 2二、create()创建双链表利用光标移动函数 gotoxy()定位光标位置,在光标位置显示信息的方式设计成了表格输入形式。初始时,光标停留在职工编号栏上(no),输入编号按回车键,光标跳动
6、到姓名栏(name ),依次输入。当在职工编号首字符为时结束输入返回主函数,双链表创建完毕。算法显示如下:结构图如下:C 语言程序设计课程设计 正 文-5-开辟一个新节点,并使 p1,p2 指向它读入一个员工数据给 p1 所指的结点head=NULL, n=0当读入的 P1num 不是零n =n+1真n=1?假First=p1(把 p1 所指的结点作为第一个结点)p2next=p1(把 p1 所指的结点连接到表尾)p2=p1(p2 移到表尾)再开辟一个新结点,使 p1 指向它读入一个员工数据给 p1 所指结点表尾结点的指针变量置 NULL图 3三、list()显示双链表本函数实现显示链表中所有
7、数据的功能。算法如下:void list()int i=0,n;SALARY *p;clrscr();p=First;while(i%10=0clrscr();6printf(“nnn“);printf(“*SALARY*n“);printf(“|-|-|-|-|-|-|-|n“);while(p!=NULL) printf(“|%3s|%5s|%5d|%5d|%6d|%4d|%4d|n“,p-no,p-name,p-jbgz,p-zhwgz,p-jintie,p-ylbx,p-gjj);p=p-next;i+;if(i%10=0)break;printf(“*END*n“);printf(“
8、Press any key continue.n“);getch();四、change()修改记录先利用查找结点的方法将指针指乡向所要找的记录,利用 scanf 函数输入数据完成修改。算法如下:void change()SALARY *p;char s3;clrscr();printf(“please change non“);scanf(“%s“,s);p=First;while(strcmp(p-no,s)scanf(“%s %s %5d %5d %6d %4d %4d“,p-no,p-name,五、insert()插入结点插入结点需要输入插入位置和新结点信息。插入位置的确定通过输入结点的
9、编号进行定位,新结点信息通过申请空间存放,指针 info 所指,先将新结点的后继指针和前趋指针都赋值为空,将新结点插在指定结点之前。从头指针 h 开始,循环移动指针 p 先查找指定结点。算法如下:六、delete()删除结点C 语言程序设计课程设计 正 文-7-要删除记录首先要查找记录,本模块设计了两个函数:一个是查找函数 find(),一个是删除记录。算法如下:图 3图 4六、search()查找结点按照姓名查找结点,从头结点开始顺序查找,成功则将结点的指针作参数调用输出函数 print(),显示该指针所指记录的信息;失败显示没有找到。具体算法如下:p=head,使 p 指向第一个结点p 指
10、向的不是尾结点真假输出 p 所指的结点p 指向下一个结点当 p 指向的不是表尾图 5reads(p,循环变量 i=0; 输入待删除的职工编号 ngbianhaonumber假p+当 i=n?真 假j=i+18四、调试与测试1.调试:做程序错误是难免的,本人在做这个工资管理系统时出现很多错误,拿一个错误为例。在进行信息的录入后,需要对录入的信息进行显示。本人用到了 inputs()函数。所以就用该函数将职工的工资信息,即 ID 号、姓名、基本工资、职务工资、津贴、医疗保险、公积金。在程序运行时,发现显示信息的时候,只有员工的 ID 号和姓名可以正常显示,而其他数据均显示不正常。由此我想到了ID
11、号和姓名数据类型为字符型,其他数据类型均设置为整型。找到 inputs()函数的算法时,经过观察才发现 inputs()函数是针对字符输出的函数,所以对整型数据显示不正常。改用 scanf()函数输出则改正了错误,从而程序可以正常显示结果。正确输出结果:图 6错误输出结果:图 7C 语言程序设计课程设计 正 文-9-五、解决方案1、忘记定义变量。例如:main()a=8;b=3;c=a*b;printf(“%d”,c);程序中变量要先定义在应用。所以要在开头加 int a,b,c;2、语句结束后忘记加分号。例如:printf(“nlist no %s SALARYn“,s)3、语法错误,编写程
12、序过程中经常出现语法错误,有的因为语句使用不正确,有的因为单词拼写错误只需细心检查便可发现。例如:scanf 写成 scan4、连接错误。编完程序要进行编译连接。可检查连接路径是否正确。5、运行显示错误。在编译、连接均可执行后。运行时出现了错误的结果。参见调试与测试,找到相关原程序即可发现错误。6、定义的数据与使用时数据类型要一致,否则出现错误。10参考文献1郭翠英等编著.C 语言课程设计案例精编.中国水利水电出版社.2004C 语言程序设计课程设计 正 文-11-附录(源程序清单)#include#include#include#include#include#include#include
13、#include#includetypedef struct z1char no4;char name5;int jbgz,zhwgz,jintie,ylbx,gjj;struct z1 *prior;struct z1 *next;SALARY;struct z1 *First;struct z1 *Last;void init();void create();void delete();void search();void insert();12void list();void change();void print(SALARY *p);int menu_select();main()
14、int i;clrscr();for(;)switch(menu_select()case 0:init();break;case 1:create();break;case 2:list();break;case 3:search();break;case 4:delete();break;case 5:insert();break;case 6:change();break;case 7:exit(0);break;menu_select()char *f=“*MENU*“,“0.init list“,“1.enter list“,C 语言程序设计课程设计 正 文-13-“2.list a
15、lln“,“3.search record on name“,“4.delete a record“,“5.insert record to list“,“6.change a record“,“7.quit“;char s80;int i;int key=0;int c=0;gotoxy(1,25);printf(“press any key enter menun“);getch();clrscr();textcolor(YELLOW);textbackground(BLUE);gotoxy(10,2);putch(0xda);for(i=1;i8;gotoxy(10,i+1);textb
16、ackground(BLUE);cprintf(“%s“,fi);if(key=72) i=i=1?17:i-1;if(key=80) i=i=17?1:i+1;gotoxy(10,i+1);textbackground(LIGHTGREEN);C 语言程序设计课程设计 正 文-15-cprintf(“%s“,fi);c=i-1;textbackground(BLACK);window(1,1,80,25);return c;void init()First=NULL;Last=NULL;void create()int x;int i;int flag=0;float temp;SALARY
17、 *info,*p;if(First!=NULL)init();p=First;for(;)if(flag=1)break;i=0;16x=0;clrscr();gotoxy(1,3);printf(“*gongziguanli*“); gotoxy(1,4);printf(“ -enter end- “);gotoxy(1,5);printf(“|-|“);gotoxy(1,6);printf(“|ID |name |jbgz |zhwgz|jintie|ylbx|gjj |“);for(;)gotoxy(1,7+x);printf(“|-|-|-|-|-|-|-|“);info=(SALA
18、RY *)malloc(sizeof(SALARY);if(!info)printf(“nout of memory“);exit(0);info-next=NULL;info-prior=NULL;gotoxy(1,8+x);printf(“|“);gotoxy(5,8+x);printf(“|“);gotoxy(11,8+x);printf(“|“);gotoxy(17,8+x);printf(“|“);gotoxy(23,8+x);printf(“|“);gotoxy(30,8+x);printf(“|“);C 语言程序设计课程设计 正 文-17-gotoxy(35,8+x);print
19、f(“|“);gotoxy(40,8+x);printf(“|“);gotoxy(2,8+x);inputs(info-no,3);if(info-no0=)flag=1;break;gotoxy(6,8+x);inputs(info-name,5);gotoxy(12,8+x);scanf(“%d“,gotoxy(18,8+x);scanf(“%d“,gotoxy(24,8+x);scanf(“%d“,gotoxy(31,8+x);scanf(“%d“,gotoxy(36,8+x);scanf(“%d“,if(p=NULL)First=Last=info ;First-prior=NULL;
20、Last-next=NULL;18elseinfo-next=p;info-prior=p-prior;p-prior=info;p=info;First=info;x+=2;gotoxy(1,8+x);i+;if(i%9=0)break;gotoxy(1,8+x);printf(“|-|-|-|-|-|-|-|“);inputs(char*s,int count)char p255;doscanf(“%s“,p);if(strlen(p)count)printf(“n too long!n“);while(strlen(p)count);strcpy(s,p);C 语言程序设计课程设计 正
21、文-19-void list()int i=0,n;SALARY *p;clrscr();p=First;while(i%10=0clrscr();printf(“nnn“);printf(“*SALARY*n“);printf(“|-|-|-|-|-|-|-|n“);while(p!=NULL)printf(“|%3s|%5s|%5d|%5d|%6d|%4d|%4d|n“,p-no,p-name,p-jbgz,p-zhwgz,p-jintie,p-ylbx,p-gjj);p=p-next;i+;if(i%10=0)break;printf(“*END*n“);printf(“Press an
22、y key continue.n“);getch();void change()20SALARY *p;char s3;clrscr();printf(“please change non“);scanf(“%s“,s);p=First;while(strcmp(p-no,s)scanf(“%s %s %5d %5d %6d %4d %4d“,p-no,p-name,void insert() SALARY *p,*info;char s11;float temp;clrscr();printf(“please enter location before the non“);scanf(“%s
23、“,s);printf(“nplease new recordn“);clrscr();gotoxy(1,3);printf(“*gongziguanli*“);gotoxy(1,5);printf(“|-|“);gotoxy(1,6);printf(“|ID |name |jbgz |zhwgz|jintie|ylbx|gjj |“);C 语言程序设计课程设计 正 文-21-gotoxy(1,7);printf(“|-|-|-|-|-|-|-|“);info=(SALARY *)malloc(sizeof(SALARY);if(!info)printf(“nout of memory“);e
24、xit(0);info-next=NULL;info-prior=NULL;gotoxy(1,8);printf(“|“);gotoxy(5,8);printf(“|“);gotoxy(11,8);printf(“|“);gotoxy(17,8);printf(“|“);gotoxy(23,8);printf(“|“);gotoxy(30,8);printf(“|“);gotoxy(35,8);printf(“|“);gotoxy(40,8);printf(“|“);gotoxy(2,8);inputs(info-no,3);gotoxy(6,8);inputs(info-name,5);go
25、toxy(12,8);scanf(“%d“,info-jbgz);gotoxy(8,18);scanf(“%d“,info-zhwgz);gotoxy(24,8);22scanf(“%d“,info-jintie);gotoxy(31,8);scanf(“%d“,info-ylbx);gotoxy(36,8);scanf(“%d“,info-gjj);printf(“|-|-|-|-|-|-|-|“);p=First;while(strcmp(p-no,s)if(p=NULL)if(p=First)First=info;First-prior=NULL;Last=First;elseLast-
26、next=info;info-prior=Last;Last=info;elseif(p=First)info-prior=NULL;info-next=p;p-prior=info;C 语言程序设计课程设计 正 文-23-First=info;elseinfo-next=p;info-prior=p-prior;p-prior-next=info;p-prior=info;printf(“nnn-have insert %s SALARY-n“,info-name);printf(“n-Dont forget save-n“);SALARY *find(char *no)SALARY *p;
27、p=First;while(p)if(!strcmp(no,p-no)return p;p=p-next;printf(“not foundn“);return NULL;void delete()24SALARY *p;char s11;clrscr();printf(“please deleted non“);scanf(“%s“,s);if(p=find(s)!=NULL)if(First=p)First=p-next;if(First)First-prior=NULL;elseLast=NULL;elsep-prior-next=p-next;if(p!=Last)p-next-pri
28、or=p-prior;elseLast=p-prior;free(p);printf(“n have deleted %s SALARYn“,s);printf(“Dont forget saven“);C 语言程序设计课程设计 正 文-25-void search()SALARY *p;char s15;clrscr();printf(“please enter name for searchn“);scanf(“%s“,s);p=First;while(strcmp(p-name,s)if(p=NULL)printf(“nlist no %s SALARYn“,s);elseprintf(“nn“);printf(“|-|-|-|-|-|-|-|n“);printf(“|ID |name |jbgz |zhwgz|jintie|ylbx|gjj |n“);printf(“|%3s|%5s|%5d|%5d|%6d|%4d|%4dn“,p-no,p-name,p-jbgz,p-zhwgz,p-jintie,p-ylbx,p-gjj);26