1、华中科技大学文华学院信息学部课程设计报告C语言课程设计报告题 目:职工信息管理系统班 级:电科二班 学生姓名:钱 浩 宇 学 号:100110021118指导老师:陈 维日 期: 2011-6-29 目 录1、 前言.22、需求分析.33、总体设计.34、详细设计.45、调试过程.56、结束语.77、参考文献.78、附录.81.前言C语言是近年来在国内外都得到迅速推广的一种现代通用的程序设计语言,它不但具有丰富的数据类型与运算符、灵活的控制结构、简洁而高效的表达式、清晰的程序结构和良好的可移植性等优点,还具有直接支持计算机硬件编程的强大功能。其既具有高级语言的优点,有具有低级语言的优点,具有完
2、善的结构化、模块化程序结构,是世界最流行、使用最广泛的高级程序设计语言之一。但由于课堂教学和实验的深度和广度有限,练习的深度也受到一定的限制。所以开设了课程设计这门课。它比教学实验复杂一些,涉及的深度也广些,这样便可培养我们学生实际分析问题、编程和动手能力,也可以让我们更好的掌握C语言这门课程。2.需求分析根据要设计职工信息管理系统可以知道职工数据由职工编号、姓名、部门、职称、基 本工资、加班工资、奖金和总工资构成。功能要求如下:(1)添加职工的记录(2)查询职工(分别按职工编号和姓名)(3)对职工数据排序(分别按总工资的降序)(4)删除职工记录(5)修改职工记录(6)插入职工信息(7)输出职
3、工信息表(8)保存职工信息3.总体设计根据上面的需求分析,可以将这个系统设计分为以下模块:增加职工信息、删除职工信息、查询职工信息、修改职工信息、插入职工信息、排序、保存职工信息、显示职工信息。系统功能模块如下: 职 工 信 息 管 理 系 统 菜 单 选 择显 示 职 工 信 息保 存 职 工 信 息排 序插 入 职 工 信 息修 改 职 工 信 息查 询 职 工 信 息增 加 职 工 信 息删 除 职 工 信 息按姓名 按工号 按姓名 按工号 按姓名 按工号 4.详细设计 (1).主函数:创建一个链表,并使用指针。 void main() Link list; FILE *fp; int
4、choose; char ch; int count=0; struct node *p,*r; pintf(tttt职工信息管理系统nttttn); list=(struct node*)malloc(sizeof(struct node); if(!list) printf(n allocate memory failure ); return ; (2).定义各部分功能函数: void Add(Link l) 增加职工信息 void Del(Link l) 删除职工信息 void Qur(Link l) 查询职工信息 void Modify(Link l) 修改职工信息 void Ins
5、ert(Link l) 插入职工信息 void Sort(Link l) 排序(3) 菜单函数: void menu() printf(t*n); printf(t* *n); printf(t* 职工信息管理系统 *n); printf(t* *n); printf(t* 1 增加职工信息 2 删除职工信息 *n); printf(t* 3 查询职工信息 4 修改职工信息 *n); printf(t* 5 插入职工记录 6 排序 *n); printf(t* 7 保存职工信息 8 显示职工信息 *n); printf(t* 0 退出系统 *n); printf(t* *n); printf(
6、t*n); (4) .输出中文标题函数: void printstart(); void Wrong(); void Nofind(); void printc(); 5、调试过程1.主菜单2.增加职工信息3.删除职工信息4.查询职工信息5.修改职工信息6.插入职工信息7排序.6.结束语通过为期二周的课程设计学习,我对C语言这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们电子科学与技术专业的学习中占据着十分重要的地位。同时也使我知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与
7、掌握书本上的东西。然而这个程序还有不足之处,比如说:界面会跟随输入的数据而变得整齐或不整齐等等,这些都是有待改进的地方。7.参考文献:1.网站搜索:2.程序设计基础(c语言) 杨有安 陈维 曹慧雅 鲁丽 编著3.C程序设计 课程设计 刘振安,孙 忱 刘燕君 编著4.C语言程序设计-实验指导.课程设计.习题解答 高涛 陆丽娜 编著5.C语言课程设计 案例精编 姜灵芝 余健 编著8.附录(源程序): #include #include #include int saveflag=0; struct employee char name15; char num10;char sex4; char b
8、m15; char zc20; int gz;int jbgz;int jj;int zgz; typedef struct node struct employee data; struct node *next; Node,*Link; void add(Link l); void disp(Link l); void del(Link l); Node* Locate(Link l,char findmess,char nameornum);void Qur(Link l); void Sort(Link l); void Modify(Link l); void save(Link l
9、); void printe(Node *p); void printstart(); void Wrong(); void Nofind(); void printc();void menu()printf(t*n);printf(t* *n);printf(t* 职工信息管理系统 *n);printf(t* *n);printf(t* 1 增加职工信息 2 删除职工信息 *n);printf(t* 3 查询职工信息 4 修改职工信息 *n);printf(t* 5 插入职工记录 6 排序 *n);printf(t* 7 保存职工信息 8 显示职工信息 *n);printf(t* 0 退出系
10、统 *n);printf(t* *n);printf(t*n); int count=0; Node *p; p=l-next; if(!p) printf(n=提示:没有职工记录可以显示!n);return; printf(tttt显示结果n); printstart(); printc(); printf(n); while(p) printe(p); p=p-next; printstart(); printf(n); void printstart() printf(-n); void Wrong() printf(n=提示:输入错误!n); void Nofind() printf(
11、n=提示:没有找到该职工!n); void printc() printf(工号t 姓名 性别 部门 职称 工资 加班工资 奖金 总工资n); void printe(Node *p) printf(%-12s%st%st%st%st%dt%dt%dt%dn,p-data.num,p-data.name,p-data.sex,p-data.bm,p-data.zc,p-data.gz,p-data.jbgz,p-data.jj,p-data.zgz); Node* Locate(Link l,char findmess,char zcornum) Node *r; if(strcmp(zcor
12、num,num)=0) r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(zcornum,zc)=0) r=l-next; while(r!=NULL) if(strcmp(r-data.zc,findmess)=0) return r; r=r-next; return 0; void Add(Link l) Node *p,*r,*s; char num10;int flag=0;r=l; s=l-next; while(r-next!=NULL)whi
13、le(1) printf(请你输入工号(以0返回上一级菜单:); scanf(%s,num); if(strcmp(num,0)=0) break; s=l-next;while(s) if(strcmp(s-data.num,num)=0) printf(=提示:工号为%d的职工已经存在,若要修改请你选择4 修改!n,num); flag=1; break;return ; s=s-next; p=(Node *)malloc(sizeof(Node); strcpy(p-data.num,num); printf(请你输入姓名:); scanf(%s,p-data.name); getch
14、ar(); printf(请你输入性别:); scanf(%s,p-data.sex); getchar(); printf(请你输入职工所在部门:); scanf(%s,&p-data.bm); getchar(); printf(请你输入职工职称:); scanf(%s,&p-data.zc); getchar(); printf(请你输入职工工资:); scanf(%d,&p-data.gz); getchar();printf(请你输入职工加班工资:); scanf(%d,&p-data.jbgz); getchar();printf(请你输入职工奖金:); scanf(%d,&p-d
15、ata.jj); getchar();p-data.zgz=p-data.gz+p-data.jbgz+p-data.jj; p-next=NULL; r-next=p; r=p; saveflag=1; void Del(Link l) int sel; Node *p,*r; char findmess20; if(!l-next) printf(n=提示:没有记录可以删除!n); return; printf(n=1按工号删除n=2按姓名删除n); scanf(%d,&sel); if(sel=1) /按工号删除 printf(请你输入要删除的工号:); scanf(%s,findmes
16、s);p=Locate(l,findmess,num);if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提示:该职工已经成功删除!n); saveflag=1; else Nofind(); else if(sel=2) printf(请你输入要删除的姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; /r r-next(p) p-nextfr
17、ee(p); printf(n=提示:该职工已经成功删除!n); saveflag=1; else Nofind(); /if(sel=2)else Wrong(); void Qur(Link l) int sel; char findmess20; Node *p; if(!l-next) printf(n=提示:没有资料可以查询!n); return; printf(n=1按工号查找n=2按职称查找n); scanf(%d,&sel); if(sel=1)/* 工号 */ printf(请你输入要查找的工号:); scanf(%s,findmess); p=Locate(l,findme
18、ss,num); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else if(sel=2) printf(请你输入要查找的职称:); scanf(%s,findmess); p=Locate(l,findmess,zc); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else Wrong(); void Modify(Link l
19、) /修改功能 Node *p; char findmess20; if(!l-next) printf(n=提示:没有资料可以修改!n); return; printf(请你输入要修改的职工工号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(请你输入新工号(原来是%s):,p-data.num); scanf(%s,p-data.num); printf(请你输入新姓名(原来是%s):,p-data.name); scanf(%s,p-data.name); getchar(); printf(请你输入新性别(原来
20、是%s):,p-data.sex); scanf(%s,p-data.sex); getchar(); printf(请你输入新的部门(原来是%s):,p-data.bm); scanf(%s,&p-data.bm); printf(请你输入新的职称(原来是%s):,p-data.zc); scanf(%s,&p-data.zc); getchar(); printf(请你输入新的工资(原来是%d):,p-data.gz); scanf(%d,&p-data.gz); getchar(); printf(请你输入新的加班工资(原来是%d):,p-data.jbgz); scanf(%d,&p-
21、data.jbgz); getchar(); printf(请你输入新的奖金(原来是%d):,p-data.jj); scanf(%d,&p-data.jj); getchar(); p-data.zgz=p-data.gz+p-data.jbgz+p-data.jj; printf(n=提示:资料修改成功!n); else Nofind(); void Insert(Link l) Node *s,*r,*p; char ch,new_num10,old_num10; int flag=0; s=l-next; system(cls); Disp(l); while(1) printf(请你
22、输入已存在的工号(以0返回上一级菜单:); scanf(%s,old_num); if(strcmp(old_num,0)=0) return; s=l-next; flag=0; while(s) if(strcmp(s-data.num,old_num)=0) flag=1; break; s=s-next; if(flag=1) break; else getchar();printf(n=The number %s is not existing,try again?(y/n):,old_num); scanf(%c,&ch); if(ch=y|ch=Y) continue; else
23、 return; printf(请你输入待插入的工号(以0返回上一级菜单:); scanf(%s,new_num); if(strcmp(new_num,0)=0) return; s=l-next; while(s) if(strcmp(s-data.num,new_num)=0) printf(=提示:工号为%s的职工已经存在!n,new_num); flag=1; return ; s=s-next; p=(Node *)malloc(sizeof(Node); if(!p) printf(n allocate memory failure ); return ; strcpy(p-da
24、ta.num,new_num); printf(请你输入姓名:); scanf(%s,p-data.name); getchar(); printf(请你输入性别:); scanf(%s,p-data.sex); getchar(); printf(请你输入部门:); scanf(%s,&p-data.bm); getchar(); printf(请你输入职称:); scanf(%s,&p-data.zc); getchar(); printf(请你输入工资:); scanf(%d,&p-data.gz); getchar(); printf(请你输入加班工资:); scanf(%d,&p-d
25、ata.jbgz); getchar(); printf(请你输入奖金:); scanf(%d,&p-data.jj); getchar(); p-data.zgz=p-data.gz+p-data.jbgz+p-data.jj; p-next=NULL; saveflag=1; r=l-next; while(1) if(strcmp(r-data.num,old_num)=0) p-next=r-next; r-next=p; break; r=r-next; Disp(l); printf(nn); void Sort(Link l) Link ll; Node *p,*rr,*s; i
26、nt i=0; if(l-next=NULL) system(cls); printf(n=Not employee record!n); getchar(); return ; ll=(Node*)malloc(sizeof(Node); if(!ll) printf(n allocate memory failure ); return ; ll-next=NULL; system(cls); Disp(l); p=l-next; while(p) s=(Node*)malloc(sizeof(Node); if(!s) /*s=NULL*/ printf(n allocate memor
27、y failure ); return ; s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.zgz=p-data.zgz) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-next; rr-next=s; p=p-next; l-next=ll-next; Disp(l); saveflag=1; printf(n =sort complete!n); void Save(Link l) FILE* fp; Node *p; int flag
28、=1,count=0; fp=fopen(employee.txt,wb); if(fp=NULL) printf(n=提示:重新打开文件时发生错误!n); return; p=l-next; while(p) if(fwrite(p,sizeof(Node),1,fp)=1) p=p-next; count+; else flag=0; break; if(count0) printf(n=提示:文件保存成功.(有%d条记录已经保存.)n,count); saveflag=0; else system(cls); printf(保存文件失败,0条记录被保存!n); fclose(fp); void main() Link list; FILE *fp; int choose; char ch; int count=0; struct node *p,*r; printf(tttt职工信息管理系统nttttn); list=(struct node*)malloc(sizeof(struct node); if(!list) printf(n allocate memory failure ); return ; list-next=NULL; r=list; p=fopen(employee.txt,rb); i