职工管理系统课程设计报告.doc_第1页
职工管理系统课程设计报告.doc_第2页
职工管理系统课程设计报告.doc_第3页
职工管理系统课程设计报告.doc_第4页
职工管理系统课程设计报告.doc_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

中南大学二一二二一三学年第二学期信息科学与工程学院数据结构课程设计报告课程名称: 数据结构课程设计 班 级: 计科1106 学 号: 0909113109 0909113110 姓 名: 胡岁生 胡飞龙 指导教师: 杨旺老师 二一三年 六 月职工管理系统课程设计报告一、需求分析职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所涉及的数据量越来越大,职工信息量也大大增加,利用传统的手工查询、登记、修改等方法的处理速度远远跟不上公司的需求,有的公司不得不靠增加人力、物力来进行信息管理。 随着计算机技术的不断提高,计算机作为知识经济时代的产物,其强大的功能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要的作用,成为人们工作和生活中不可缺少的一部分。而作为计算机应用的一部分,使用计算机对职工进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。职工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果。简单的职工管理系统:1、问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。2、要求职工对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序。3、实现功能(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)对职工对象中的“姓名”按字典顺序进行排序。(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。二、概要设计 1、输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。2、系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对职工对象中的姓名按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。3、输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出职工管理功能的系统流程图,如图1所示图1 系统流程图4、系统功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分为七个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块、职工信息保存模块、职工信息显示模块。三、详细设计(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有九种操作,以下是结构体及其定义:char nameM; /姓名char sexM;/性别char birthdayM;/生日char workdayM;/工作日char educationM;/教育程度char positionM;/职位char addressM;/地址char numberM;/电话void Creat(WI *);/当没有导入文件时,用此函数来创建void Insert(WI *);/插入函数,将新增的数据插入到链表的尾端void Delete(WI *);/删除函数,按照姓名来进行指定的删除 void search_by_name(WI *);/查找函数,按照姓名来进行查找void Edit(WI *);/修改函数,按照姓名进行查找,然后针对指定的员工信息进行修改WI *Sort(WI *);/排序void Menu(WI *);/菜单void Output(WI *);/显示函数void sav(WI *);/保存函数WI *opn(WI *);/打开函数(2)主函数程序流程图如图2所示:图 2 主函数程序流程图3、查找模块设计在查询算法中,职工管理系统按照姓名进行查找,实现了系统的人性化查询操作。void search_by_name(WI *head) /按姓名查询函数WI *p=head;char nameM; /将要查找的姓名储存在NAMEM数组中,再与struct结构体中的name进行对比,用strcmp比较函数,输出为0时,代表比对相同printf(nplease input the name which you want to searchn);scanf(%s,name);while(p & strcmp(name,p-name)!=0)p=p-next;if(p=NULL | strcmp(name,p-name)!=0)printf(system can not find the personn);elseprintf(name:%snage:%snbirthday:%snworkday:%snposition:%sneducation:%snaddress:%snnumber:%sn,p-name,p-sex,p-birthday,p-workday,p-education,p-position,p-address,p-number);通过使用strcmp比较函数,来实现从名单中查找相应的名字。当输入的名字与名单中某一名字相差为0时,便可以得到查找结果。4、排序模块设计在排序算法中,职工管理系统按照姓名首字母的英文顺序来排序,实现了系统的基本排序操作。:WI *Sort(WI *head) /排序,将所有结点的地址放入sortM中,再对sortm中的所有结点的名字的首字母进行由小到大排序,将排好的SORT数组的元素赋值给新的链表,并输出WI *head_2,*k,*q,*sortM,*p=head;int i=1,n,j,b;while(p)sorti=p;p=p-next;i+;n=i-1;i=1;while(i=n)sort0=sorti;b=i;for(j=i+1;jname0name0)sort0=sortj;b=j;sort0=sorti;sorti=sortb;sortb=sort0;i+;i=1;head_2=q=k=sorti;for(i=2;inext=k;q=k;q-next=NULL;return head_2;排序,将所有结点的地址放入sortM中,再对sortm中的所有结点的名字的首字母进行由小到大排序,将排好的SORT数组的元素赋值给新的链表,并输出。四、调试分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别。在调试查询修改功能过程中,查询的总是不正确,查询的结果显示,没有找到职工信息,最后发现查找的结点不正确,查询应该与输入的值和头结点next比较,而不是头结点。还有就是查询结点不知道如何循环,最后又看看了记得笔记和书,才知道如何继续查找而不出错误。修改时总是不能正确的修改,最初时修改总是修改最后输入的数据。最后终于找到了,又是结点写错了。排序时注意交换的先后顺序就可以了,删除时注意交换结点的顺序。五、测试结果1)进入职工管理系统,如图3所示:图 3主菜单选择界面2)新增一职工信息并查询全部职工信息,如图4,5所示:图 4 新增并查询职工信息界3)修改职工信息并与前面信息对照,如5所示:图5 修改职工信息界面4)按姓名排序职工信息并显示,如图6所示图6 按姓名排序职工信息并显示5)退出系统,如图7所示:选择 9,退出职工管理系统。图7 退出职工管理系统六、心得与体会本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。那就是可以排序上面多设计几个算法。实现多角度排序。在这个系统中没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工信息重复。经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。七、附录实验程序:#include #include #include #define NULL 0#define M 20typedef struct worker_informationchar nameM; /姓名char sexM;/性别char birthdayM;/生日char workdayM;/工作日char educationM;/教育程度char positionM;/职位char addressM;/地址char numberM;/电话worker_information *next; WI;void Creat(WI *);/当没有导入文件时,用此函数来创建void Insert(WI *);/插入函数,将新增的数据插入到链表的尾端void Delete(WI *);/删除函数,按照姓名来进行指定的删除void search_by_name(WI *);/查找函数,按照姓名来进行查找void Edit(WI *);/修改函数,按照姓名进行查找,然后针对指定的员工信息进行修改WI *Sort(WI *);/排序void Menu(WI *);/菜单void Output(WI *);/显示函数void sav(WI *);/保存函数WI *opn(WI *);/打开函数void sav(WI *head)FILE *fp;char no20;WI *p=head;printf(n请输入需要保存的文件名);fflush(stdin);scanf(%s,no);fp=fopen(no,wb);while(p)fwrite(p,sizeof(WI),1,fp);p=p-next;fclose(fp);WI *opn(void) /*打开函数*/FILE *fp;WI *p,*head,*q;char no20; printf(*);printf(* 欢迎来到职工管理系统 *);printf(*);printf(nnnnnnnttt请输入需要打开的文件名);fflush(stdin);scanf(%s,no);if(fp=fopen(no,rb)=NULL)printf(没有此文件n);elsep=head=(WI *)malloc(sizeof(WI);fread(head,sizeof(WI),1,fp);p=head-next=(WI *)malloc(sizeof(WI);fread(p,sizeof(WI),1,fp);q=p;if(p=NULL) fclose(fp);elsep=(WI *)malloc(sizeof(WI);while(fread(p,sizeof(WI),1,fp)!=0)q-next=p;q=p;p=(WI *)malloc(sizeof(WI);q-next=NULL;fclose (fp);return head;return NULL;void Creat(WI *head) /创建函数WI *p,*q;char ch;(*head)=(WI *)malloc(sizeof(WI);printf(please input your namen);scanf(%s,(*head)-name);fflush(stdin);printf(please input your sexn);scanf(%s,(*head)-sex);fflush(stdin);printf(please input your birthdayn);scanf(%s,(*head)-birthday);fflush(stdin);printf(please input your workdayn);scanf(%s,(*head)-workday);fflush(stdin);printf(please input your educationn);scanf(%s,(*head)-education);fflush(stdin);printf(please input your positionn);scanf(%s,(*head)-position);fflush(stdin);printf(please input your addressn);scanf(%s,(*head)-address);fflush(stdin);printf(please input your numbern);scanf(%s,(*head)-number);fflush(stdin);(*head)-next=NULL;p=(*head);printf(would you like to continue input Y/N?n);while(ch=getchar()=Y | ch=y )q=(WI *)malloc(sizeof(WI);fflush(stdin);printf(please input your namen);scanf(%s,q-name);fflush(stdin);printf(please input your sexn);scanf(%s,q-sex);fflush(stdin);printf(please input your birthdayn);scanf(%s,q-birthday);fflush(stdin);printf(please input your workdayn);scanf(%s,q-workday);fflush(stdin);printf(please input your educationn);scanf(%s,q-education);fflush(stdin);printf(please input your positionn);scanf(%s,q-position);fflush(stdin);printf(please input your addressn);scanf(%s,q-address);fflush(stdin);printf(please input your numbern);scanf(%s,q-number);fflush(stdin);p-next=q;p=q;q-next=NULL;printf(would you like to continue input Y/N?n);void search_by_name(WI *head) /按姓名查询函数WI *p=head;char nameM; /将要查找的姓名储存在NAMEM数组中,再与struct结构体中的name进行对比,用strcmp比较函数,输出为0时,代表比对相同printf(nplease input the name which you want to searchn);scanf(%s,name);while(p & strcmp(name,p-name)!=0)p=p-next;if(p=NULL | strcmp(name,p-name)!=0)printf(system can not find the personn);elseprintf(name :%snage: %snbirthday:%snworkday:%snposition:%sneducation:%snaddress:%snnumber:%sn,p-name,p-sex,p-birthday,p-workday,p-education,p-position,p-address,p-number);void Insert(WI *head) /插入函数,将新增职工的信息插入在链表的尾端WI *q,*p=head;q=(WI *)malloc(sizeof(WI);printf(please input your namen);scanf(%s,q-name);fflush(stdin);printf(please input your sexn);scanf(%s,q-sex);fflush(stdin);printf(please input your birthdayn);scanf(%s,q-birthday);fflush(stdin);printf(please input your workdayn);scanf(%s,q-workday);fflush(stdin);printf(please input your educationn);scanf(%s,q-education);fflush(stdin);printf(please input your positionn);scanf(%s,q-position);fflush(stdin);printf(please input your addressn);scanf(%s,q-address);fflush(stdin);printf(please input your numbern);scanf(%s,q-number);fflush(stdin);while(p-next)p=p-next; /找到最后一个结点,再将新结点插入到最后p-next=q;p=q;p-next=NULL;void Delete(WI *head) /删除函数,删除指定的职工的信息WI *p=(*head);char nameM; /此处与查找函数的功能相同printf(please input the name which you want to DELETEnn);scanf(%s,name);if(strcmp(name,p-name)=0) /使用*head(指针的指针,使得函数不用返回参数,直接对head进行修改)(*head)=(*head)-next;elsewhile(p-next & strcmp(name,p-next-name)!=0)p=p-next;if(p-next=NULL | strcmp(name,p-next-name)!=0)printf(system can not find the personn);elsep-next=p-next-next;void Edite(WI *head) /编辑函数WI *q=head;char nameM; /此处与查找函数的功能相同printf(please input the name which you want to EDITEn);scanf(%s,name);while(q & strcmp(name,q-name)!=0)q=q-next;if(q=NULL | strcmp(name,q-name)!=0)printf(system can not find the personn);elseprintf(please input your namen);scanf(%s,q-name);fflush(stdin);printf(please input your sexn);scanf(%s,q-sex);fflush(stdin);printf(please input your birthdayn);scanf(%s,q-birthday);fflush(stdin);printf(please input your workdayn);scanf(%s,q-workday);fflush(stdin);printf(please input your educationn);scanf(%s,q-education);fflush(stdin);printf(please input your positionn);scanf(%s,q-position);fflush(stdin);printf(please input your addressn);scanf(%s,q-address);fflush(stdin);printf(please input your numbern);scanf(%s,q-number);fflush(stdin);getchar();WI *Sort(WI *head) /排序,将所有结点的地址放入sortM中,再对sortm中的所有结点的名字的首字母进行由小到大排序,将排好的SORT数组的元素赋值给新的链表,并输出WI *head_2,*k,*q,*sortM,*p=head;int i=1,n,j,b;while(p)sorti=p;p=p-next;i+;n=i-1;i=1;while(i=n)sort0=sorti;b=i;for(j=i+1;jname0name0)sort0=sortj;b=j;if(b!=i)sort0=sorti;sorti=sortb;sortb=sort0;i+;i=1;head_2=q=k=sorti;for(i=2;inext=k;q=k;q-next=NULL;return head_2;void Menu(WI *head)printf(tn); printf(t * 主菜单 * n); printf(t * n); printf(t n); printf(t 1.查询职工信息tttt 2.插入职工信息tnt 3.删除职工信息tttt 4.修改职工信息tnt 5.排序职工信息tttt 6.显示职工信息tnt 7.保存职工信息tttt 8.创建职工信息tnt 9.退出管理系统n); printf(t n); printf(tn); while(1)switch(getchar()case 1:system(CLS);search_by_name(head);getchar();getchar();system(CLS);Menu(head);break;case 2:system(CLS);Insert(head);getchar();system(CLS);Menu(head);break;case 3:system(CLS);Delete(&head);getchar();getchar();system(CLS);Menu(head);break;case 4:system(CLS);Edite(head);getchar();system(CLS);Menu(head);break;case 5:system(CLS);head=Sort(head);getchar();getchar();system(CLS);Menu(head);break;case 6:system(CLS);Output(head);getchar();getchar();system(CLS);Menu(head);break;case 7:system(CLS);sav(head);getchar();getchar();system(CLS);Menu(head);break;case 8:system(CLS);Creat(&head);getchar();getchar();system(CLS);Menu(head);break;case 9:exit(0);default:break;void Output(WI *head) /输出函数WI *p=head;while(p)printf(%*s%*s%*s%*sn,12,Name,11,sex,16,birthday,15,workday);printf(%*s%*s%*s%*snn,strlen(name)+8,p-name,strlen(sex)+8,p-sex,strlen(birthday)+8,p-birthday,strlen(workday)+8,p-workday);printf(%*s%*s%*s%*sn,16,position,17,education,15,address,14,number);printf(%*s%*s%*s%*s,strlen(position)+8,p-position,strlen(education)+8,p-education,strlen(address)+8,p-address,strlen(number)+8,p-number);printf(n_n);printf(nnn);p=p-next;void main(void) /主函数WI *work;work=opn();Menu(work);五子棋课程设计报告一、需求分析 五子棋是有两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。 本程序要实现人人对战以及人机对战,人机对战中电脑这方具有一定智能,具备对奕能力。人人对战中,双方棋手采用键盘输入坐标控制。游戏开始后,选择模式,可进入相应界面,界面显示15*15的棋盘,本游戏默认白棋先手,五子连珠者胜,人机对战中,程序会提示电脑当前下棋的位置,结束时会显示对战双方胜负情况。本程序难点为以下三个方面的实现:1.电脑下子的实现人机对战中电脑下子是通过AI(int *p,int *q)这个函数实现的。用p 、q返回下子的坐标。先历遍棋盘上所有点,如发现一个空点则调用函数value(int p,int q)计算该空点的价值。每个点又由8个方向的棋型组成。调用函数qixing(int n,int p,int q)判断空点p q在n方向上的棋型号。对每种棋型进行赋值,然后对各个方向的棋型进行分析。最后计算出该空点的价值。如此找到棋盘上价值最大的空点,则电脑在该处下子。2.棋型价值的计算 棋型价值的计算是通过函数value(int p,int q)实现的。先调用函数qixing(int n,int p,int q) 判断空点p q在n方向上的棋型号。n为1-8方向 从右顺时针开始数。对8个方向的棋型进行分析后给出该点的价值。各种棋型的价值存在数组a244中。本程序将两相反方向的棋型进行合在一起进行分析。本程序分为六类进行讨论。 空棋型and其他。 边界冲棋型and其他。 边界空冲棋型and其他。 己活己活 己活己冲 对活对活 对活对冲。 己活对活 己活对冲 己冲对活 己冲对冲。 其他棋型。3. 胜利及棋型的判断 胜利及棋型的判断都调用了函数yiwei(int n,int *i,int *j)。在n方向上对坐标 i j 移位。 n为1-8方向 从右顺时针开始数。胜利的判断:每下一次子从该点向1方向移位,移位后判断新点是否与下的子相同。如相同则继续移位判断,否则转向判断即n+=4;如转向后仍然没五连,则换下一个方向判断即 n-=3;直到出现五连则胜利,如果8个方向判断完都没有五 连则返回0,表示还未胜利。棋型的判断:棋型的判断主要运用switch语句。在某一方向移位后判断该点的状态。最后得出该方向上的棋型号。二、概要设计 共设计有有8个模块:界面模块和主控模块。画图模块和判断输赢模块。 电脑下子模块和计算下子价值模块。 棋型模块和移位模块。五子棋流程图,如图所示: 图(1)三、详细设计(1)程序预处理程序预处理部分包括加载头文件、定义全局变量和定义数据结构,并对它们进行初始化工作。具体加载的头文件代码如下:# include # include /*于字符数组的函数定义的头文件*/# include /*standard library标准库头文件*/(2)界面模块和主控模块该模块主要用于界面初始化,处理游戏运行过程中所输入的指令。主要函数是:void main() void start() 核心算法如下:void main()char k;dox=225;start();printf(ntt还要再来一把吗?输

温馨提示

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

最新文档

评论

0/150

提交评论