《C语言课程设计职工管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计职工管理系统.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、洛 阳 理 工 学 院课 程 设 计 说 明 书课程名称 C语言程序设计 设计课题 职工管理系统 专 业 计算机科学与技术 班 级 B140501 学 号 姓 名 完成日期 2015-7-1 课 程 设 计 任 务 书设计题目: 职工信息管理系统 设计内容与要求:1.1问题描述对职工信息进行管理,职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。1.2基本要求(1)系统以菜单方式工作(2)职工信息录入功能(职工信息用文件保存) 。(3)输出职工信息、浏览职工信息功能。(4)查询和排序功能:(至少一种查询方式) ,如按工资查询、按学历查询等。(5)职工信息删除、修改
2、功能(任选项)。 指导教师:_ 年 月 日课 程 设 计 评 语 成绩: 指导教师:_ 年 月 日 目录1. 设计概述2. 总体设计3. 功能模块图3.1 录入员工数据3.2 输出员工数据3.3 查找员工数据3.4 修改员工数据4. 测试5. 设计总结6. 源代码 概述退 出系 统职工信息管理系统录入职工信息浏览员工数据查找员工数据通过工号查找修改员工数据设计的目标是建立一个可以录入,浏览,查找以及修改员工所有数据的职工管理同,在不知道有多少职工的情况下我采用了动态链表的方式来使员工的信息录入的更加简单方便。实现浏览员工信息的过程中我选择了用循环的方式输出每一个节点信息,同样用循环的方法通过每
3、一个节点中的工号所要查找的工号的对比,实现了员工数据的查找,然后将printf改成scanf从而实现了修改员工信息。这五个功能均在一个不停循环的系统中,每完成一种操作就会返回主界面重新选择要进行的操作,实现退出系统的功能时用break直接跳出五个功能的循环,从而结束整个信息管理系统。录入员工数据 输出员工数据 输出该节点数据Head!=NULL输入第一个节点的数据创建动态链表开始开辟空间,将NULL赋给head选择录入员工数据开始选择浏览员工数据P=head是否否P1-NUM!=0录入数据是结束P=p-nextP!=NULL否结束是否否是是结束P=NULLP=p-next修改节点数据p-num
4、= num输入员工号开始修改员工数据否是是结束否P=NULLP=p-next输出节点数据p-num= num输入员工号查找员工数据开始查找员工数据 修改员工数据测试录入员工数据输出员工数据查找员工数据修改员工数据退出系统设计总结在程序还没有开始写之前,我一直在想用什么方式来写这个程序,使用一直使用的循环还是用刚学的自己并不熟悉的链表,因为用循环的写法许久没有头绪,最后我选择了写起来难度高但是代码比较简洁的链表。选定用链表写程序后,我开始看课本上关于链表建立、输入输出的例子,然后自己模仿着课本上的例子写出来了程序当录入以及输出部分的代码,通过几次尝试和变通也写出了查找的代码,然后通过对查找的代码
5、的修改完成了修改部分的源代码。在编译解决错误之后,发现录入无法停止,这个问题困扰了我很久,最后在同学的帮助下找到了错误。解决了无法停止录入的问题后,又发现录入完毕后无法返回主页面,对自己的程序重新梳理之后发现自己的程序只能运行一种功能,然后我在操作选择界面的代码上加上了强制循环的while(1),加入了退出系统这一功能,当选择退出系统时,这个功能的代码会在整个循环中直接使用break跳出整个循环。在让老师检测这个程序的时候,发现查找员工时只能查找已有数据的员工,查找没有数据的员工时会发生错误。在重新检查这个代码时,看到自己设定的当p=NULL时输出未查找到员工在整个查找员工的循环代码之外,之后
6、把这几句代码放进了循环之内,之后发现还是错误,再一次进行检查代码后发现,只有在找到员工时才会跳出而未找到员工时还是再循环,于是我就在查找到不到员工的情况的代码下也加入了一个break跳出循环代码,再次运行成功的实现了所有的功能,没有出现错误。通过这次课程设计,我发现写代码并不是想象中的那么简单,在写代码的过程中,尤其是长代码,很容易让人的思维乱掉,所以我在重要的代码完成后给每一个代码加上了注释,然后在调试的过程中虽然问题全部解决了但是功能却不一定能够全部实现,还需要带自己的代码进行不断的分析,然后尝试运行,再分析改正。代码写完并不代表程序的完成,比写出代码更重要的是对自己写出的程序代码的美化、
7、修正,让自己的程序虽然简单但是能够实现所有预设的功能,这次设计也让我对链表的原理、使用方法掌握的更深。罗马非一日建成,要成长为一个合格的程序员,我要走的路还很多。源代码#include /创建动态链表/#include#define LEN sizeof(struct worker)struct worker int num; /工号char name20; / 姓名char sex15; /性别int age; /年龄 char xueli10; /学历int mon; /工资char address20; /地址int phone; /手机号struct worker *next;stru
8、ct worker *head;int main()struct worker *head;struct worker *p;int a,num; while(1) /使系统在以下几个操作中循环printf(nn);printf( - );printf( | 欢迎使用员工信息管理系统 | );printf( - );printf( | 请选择你要进行的操作 | );printf( - );printf( | 1. 录入员工数据 | 2. 浏览员工数据 | );printf( - );printf( | 3. 查找员工数据 | 4. 修改员工数据 | );printf( - );printf(
9、| 5. 退出系统 | );printf( - );scanf(%d,&a);if(a=1) struct worker *p1,*p2; int n=0; p1=p2=(struct worker *)malloc(LEN);/开辟一个长度为LEN的空间/printf(n请依次输入n职工号、姓名、性别、年龄、学历、工资、住址、电话n);scanf(%d %s %s %d %s %d %s %d,&p1-num,&p1-name,&p1-sex,&p1-age,&p1-xueli,&p1-mon,&p1-address,&p1-phone);/录入职工成绩/head=NULL;while(p1
10、-num!=0)n=n+1; if(n=1) head=p1; /若n=1, p1是第一个节点,把head赋给p1else p2-next=p1; /若n不等于1,不是第一个节点,将p1的值赋给p2-next,使p2-next指向下一个节点p2=p1; /把p1赋给p1,使p2也指向下一个节点p1=(struct worker *)malloc(LEN); /为p1开辟一个空间printf(请依次输入n职工号、姓名、性别、年龄、学历、工资、住址、电话n);scanf(%d %s %s %d %s %d %s %d,&p1-num,&p1-name,&p1-sex,&p1-age,&p1-xue
11、li,&p1-mon,&p1-address,&p1-phone); p2-next=NULL;printf(录入员工数据完毕n); if(a=2) /输出动态链表/ p=head;printf(所有员工数据如下n);printf(职工号、姓名、性别、年龄、学历、工资、住址、电话n);if(head!=NULL)/判断该节点是否为空/doprintf(%d %s %s %d %s %d %s %dn,p-num,p-name,p-sex,p-age,p-xueli,p-mon,p-address,p-phone);p=p-next;while(p!=NULL);/当下个节点为空时停止循环/pr
12、intf(已输出所有员工数据n);if(a=3)printf(请输入要查找的员工的工号n); scanf(%d,&num); /输入员工号p=head; /从录入的第一个员工开始查找while(1)if(p-num=num) /判断每一个节点的员工的工号是否与要查找的相同 printf(查找到的员工数据为:n); printf(职工号、姓名、性别、年龄、学历、工资、住址、电话n); printf(%d %s %s %d %s %d %s %dn,p-num,p-name,p-sex,p-age,p-xueli,p-mon,p-address,p-phone);break; /查找到员工后输出员
13、工数据,然后跳出循环p=p-next; /未查到将下一节点地址赋给pif(p=NULL) /如果最后一个节点的员工信息仍不符合要查找的员工信息 输入未找到该员工printf(未查到该员工n);break;if(a=4)printf(请输入要修改的员工的工号n);scanf(%d,&num);p=head; /参考上面查找员工数据while(1)if(p-num=num) printf(您要修改的员工数据为:n); printf(职工号、姓名、性别、年龄、学历、工资、住址、电话n); printf(%d %s %s %d %s %d %s %dn,p-num,p-name,p-sex,p-age,p-xueli,p-mon,p-address,p-phone); printf(请输入修改后的数据:n); scanf(%d %s %s %d %s %d %s %d,&p-num,&p-name,&p-sex,&p-age,&p-xueli,&p-mon,&p-address,&p-phone); printf(员工数据修改成功!n);break;p=p-next;if(a=5)printf(您已成功退出系统n); break; return 0;