课程设计实验报告-职工管理系统_第1页
课程设计实验报告-职工管理系统_第2页
课程设计实验报告-职工管理系统_第3页
课程设计实验报告-职工管理系统_第4页
课程设计实验报告-职工管理系统_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE33课程设计报告课程名称:院(系):专业班级:学号:姓名:指导老师:承诺书郑重声明:本人所呈交的课程设计是本人在导师指导下独立撰写并完成的,课程设计没有剽窃、抄袭、造假等违反学术道德、学术规范和侵权行为。本课程设计不包含任何其他个人或集体已经发表或撰写过的研究成果,如果引用则标识出了出处。对本课程设计的研究做出贡献的个人和集体,均已在文中以明确方式标明。课程设计与资料若有不实之处,本人承担一切相关责任。特此声明。签名:年月日

目录1课程设计任务与要求 31.1课程设计目的 31.1.1问题描述 41.1.2详细要求 41.2问题分析 42概要设计 52.1总体设计思想 52.2系统功能设计 62.3模块函数构造 63详细设计 73.1抽象数据类型定义 73.2主函数设计 73.3查找算法设计 83.4排序算法设计 94课程设计总结 115.1该课程设计的特点 115.2存在的不足 115.3心得体会 11参考文献 11简单的职工管理系统1课程设计任务与要求1.1课程设计目的《数据结构》是计算机专业一门重要的专业技术基础课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术。本课程将为整个专业的学习以及软件设计水平的提高打下良好的基础。为了学好《数据结构》,必须掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点,此次《数据结构》课程设计目的正在于此。经过本次课程设计,我们对于数据结构基本理论和存储结构及算法设计将有更加深入的理解,并提高我们在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力,提高我们的C/C++语言程序设计能力,以及培养学我们编写程序设计文档的能力。1.1.1问题描述根据题目要求,由于职工信息是存放在文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、排序等操作;另外还应提供键盘式选择菜单实现功能选择。1.1.2详细要求(1)问题说明设计一个简单的职工管理系统,按照课程设计的要求,实现对职工信息的新增、修改、插入、删除、以及排序操作。(2)输入要求由系统管理员依次输入现有职工和新增职工的以下信息:姓名(可以重复)、性别、出生年月、工作年月、学历、职务、地址、电话等信息,并且注意输入时姓名、学历、职务、地址为字符串形式,性别为字符,其余的为长整型数字。(3)输出要求系统管理员根据公司的人员流动情况,选择系统提供的各项功能进行操作,并输出相应的结果。1.2问题分析(1)具体要求简单的职工管理系统主要实现以下功能:=1\*GB3①新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。=2\*GB3②删除一名职工:从职工管理文件中删除一名职工对象。=3\*GB3③查询:从职工管理文件中查询符合某些条件的职工。=4\*GB3④修改:检索某个职工对象,对其某些属性进行修改。=5\*GB3⑤排序:按某种需要对职工对象文件进行排序。要求:职工信息包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。(2)实现提示:=1\*GB3①由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。=2\*GB3②对职工对象中的"姓名"按字典顺序进行排序。=3\*GB3③对排序后的职工对象进行增、删、查询、修改、排序等操作。2概要设计2.1总体设计思想根据职工管理系统问题的描述和详细需求分析,要达到上述功能,链表的数据结构来存储职工信息,并对其进行相应的插入、删除、修改、查询、排序、保存等操作。(1)输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。(2)系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。(3)输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出职工管理问题的系统流程图,如图所示2.2系统功能设计根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图所示。2.3模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表1所示。表1函数功能表模块函数或数据结构功能链表数据类型typedefstructNode定义链表结点typedefstructDatatype定义职工信息ListInitiate(SLNode**head)初始化链表系统处理模块SLNode*ListInsert(SLNode*head,DataTypex)插入职工信息ListDelete(SLNode*head)删除职工信息ListModify(SLNode*head)修改职工信息bc(SLNode*head,FILE*fp)保存职工信息Listfind(SLNodehead)查询职工信息Listpaixu(SLNode*head)职工信息排序输出模块print(SLNode*head)显示职工信息3详细设计3.1抽象数据类型定义(1)定义表结点(typedefstructNode)typedefstructNode{ longintborn_time,work_time,tele_num; charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX]; structNode*next;}SLNode;(2)定义职工信息(typedefstructDatatype)typedefstruct{ longintborn_time,work_time,tele_num; charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];}DataType;(3)初始化链表(ListInitiate(SLNode**head))voidListInitiate(SLNode**head)//链表初始化{ if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);//动态分配存储空间 (*head)->next=NULL;}3.2主函数设计根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:新增职工信息:SLNode*ListInsert(SLNode*head,DataTypex)查询职工信息:Listfind(SLNodehead)删除职工信息:ListDelete(SLNode*head)修改职工信息:ListModify(SLNode*head)职工信息排序:Listpaixu(SLNode*head)保存职工信息:bc(SLNode*head,FILE*fp)显示职工信息:print(SLNode*head)主函数代码见附录1主函数程序流程图如图所示:3.3查找算法设计在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。这些查询操作分别为:对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列操作。查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。查询算法程序流程图如图所示:3.4排序算法设计在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序操作。这些排序操作分别为:对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序,等一些列操作。排序算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。排序的核心代码:for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next) { if(p->born_time>q->born_time)//对出生年月进行排序 { if(head==p) { head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else { p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } }排序算法流程图如图所示:4课程设计总结5.1该课程设计的特点本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。5.2存在的不足虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不尽人意的地方。那就是可以再排序上面多设计几个算法。实现多角度排序。在这个系统中没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工信息重复。5.3心得体会经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并对数据结构和算法的配合对于程序时间和空间性能的影响以及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法,例如,马踏棋盘问题就可以采用广度优先搜索或深度优先搜索来解决。因此此时就应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。参考文献[1]严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社,2002.9附源代码#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>#defineMAX100typedefstructNode{ longintborn_time,work_time,tele_num; charsex[MAX],name[MAX],degree[MAX],job[MAX],address[MAX]; structNode*next;}SLNode;typedefstruct{ longintborn_time,work_time,tele_num; charname[MAX],sex[MAX],degree[MAX],job[MAX],address[MAX];}DataType;voidListInitiate(SLNode**head){ if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1); (*head)->next=NULL;}voidbc(SLNode*head,FILE*fp){ SLNode*p; if((fp=fopen("职工名单.txt","w"))==NULL){// printf("无法打开'职工名单.txt'!\n"); exit(0); } for(p=head->next;p;p=p->next) { fprintf(fp,"%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } if(fclose(fp)) { printf("无法关闭'职工名单.txt'!\n");exit(0); }}SLNode*ListInsert(SLNode*head,DataTypex){ SLNode*p,*q,*s; p=head->next; if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1); q->born_time=x.born_time;q->work_time=x.work_time; q->tele_num=x.tele_num;strcpy(q->name,); strcpy(q->sex,x.sex);strcpy(q->degree,x.degree); strcpy(q->job,x.job);strcpy(q->address,x.address); if(head->next==NULL){ head->next=q; head->next->next=NULL; } else{ for(;p;p=p->next){ if(p->next!=NULL){ if(strcmp(p->name,)<0&&strcmp(p->next->name,)>0){ s=p->next; p->next=q; q->next=s; break; } elseif(strcmp(p->name,)==0)break; } elseif(strcmp(p->name,)<0&&p->next==NULL){ p->next=q; q->next=NULL; break; } if(strcmp(p->name,)>0){ s=head->next; head->next=q; q->next=s; break; } } } returnhead;}voidListDelete(SLNode*head){ SLNode*p,*s; charx[20]; s=head; p=head->next; if(head->next==NULL){ printf("名单中无职工信息,无须删除!\n"); return; } printf("请输入要删除职工的姓名:\n"); scanf("%s",x); for(p;p;p=p->next){ if(strcmp(p->name,x)==0){ s->next=p->next; free(p); printf("删除成功!请继续操作!\n"); break; } s=p; } if(p==NULL){ printf("名单中无职工信息,无须删除!\n"); }}voidListModify(SLNode*head){ DataTypex; SLNode*p; p=head->next; if(p==NULL){ printf("职工名单无职工信息,无须修改!\n"); return; } printf("请输入要修改的职工姓名:\n"); scanf("%s",); printf("依次写入该职工的新信息:\n"); for(;p;p=p->next) { if(strcmp(,p->name)==0){ scanf("%s%s%d%d%s%s%s%d",p->name,p->sex,&p->born_time,&p->work_time,p->degree,p->job,p->address,&p->tele_num); printf("修改成功!请继续操作!\n"); break; } } if(p==NULL) printf("此职工不存在,无法修改其信息!\n"); }voidListfind(SLNodehead){ inti,j; SLNode*p; DataTypex; if(head.next==NULL){ printf("名单中无职工信息,无法查询!\n"); return; } printf("\n"); printf("\t*********************************\n"); printf("\t*职工信息查询操作*\n"); printf("\t**\n"); printf("\t*0.退出查询系统,回到主菜单\t\t1.对姓名进行查询\t*\n\t*2.对出生年月进行查询\t\t3.对学历进行查询\t*\n\t*4.对工作年月进行查询\t\t5.对职务进行查询\t*\n\t*6.对住址进行查询\t\t7.对电话进行查询\t*\n");printf("\t*********************************\n"); printf("请输入您要选择的操作:"); scanf("%d",&i); switch(i) { case0:break; case1: p=head.next; printf("请输入姓名:"); scanf("%s",); j=0; for(p;p;p=p->next){ if(strcmp(p->name,)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中不存在此人!\n"); elseprintf("查询成功!请继续操作!\n"); break; case2: p=head.next; printf("请输入出生年月:"); scanf("%d",&x.born_time); j=0; for(p;p;p=p->next){ if(p->born_time==x.born_time){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中没有这个时间出生的!\n"); elseprintf("查询成功!请继续操作!\n"); break; case3: p=head.next; printf("请输入学历:"); scanf("%s",x.degree); j=0; for(p;p;p=p->next){ if(strcmp(p->degree,x.degree)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中没有这种学历的!\n"); elseprintf("查询成功!请继续操作!\n"); break; case4: p=head.next; printf("请输入工作年月:"); scanf("%d",&x.work_time); j=0; for(p;p;p=p->next){ if(p->work_time==x.work_time){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中没有这个时间工作的!\n"); elseprintf("查询成功!请继续操作!\n"); break; case5: p=head.next; printf("请输入职务:"); scanf("%s",x.job); j=0; for(p;p;p=p->next){ if(strcmp(p->job,x.job)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中没有这种职务的!\n"); elseprintf("查询成功!请继续操作!\n"); break; case6: p=head.next; printf("请输入住址:"); scanf("%s",x.address); j=0; for(p;p;p=p->next){ if(strcmp(p->address,x.address)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中没有住这的!\n"); elseprintf("查询成功!请继续操作!\n"); break; case7: p=head.next; printf("请输入电话:"); scanf("%d",&x.tele_num); j=0; for(p;p;p=p->next) { if(p->tele_num==x.tele_num) { ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中没人用这个号码!\n"); elseprintf("查询成功!请继续操作!\n"); break; default: printf("输入出错!请再次输入!\n"); } }voidprint(SLNode*head){ for(SLNode*p=head->next;p;p=p->next) printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);}voidListpaixu(SLNode*head){ inti,n=0,m,flag=1; SLNode*p,*q,*s; if(head->next==NULL){ printf("名单中无职工信息,无法排序!\n\n"); return; } printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n"); printf("\t\t~.~职工信息排序操作~.~\n"); printf("\t\t~.~~.~\n");printf("\t\t~.~\t0.退出排序系统,回到主菜单~.~\n\t\t~.~\t1.对性别进行排序~.~\n\t\t~.~\t2.对出生年月进行排序~.~\n\t\t~.~\t3.对工作年月进行排序~.~\n\t\t~.~\t4.对姓名进行排序~.~\n"); printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n"); while(1) { printf("请输入您要选择的操作:"); scanf("%d",&i); if(i==0) break; elseif(i==1){ n=0,m,flag=1; for(p=head;NULL!=p;p=p->next) n++; for(m=1;flag&&m<=n;m++) { flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next) { if(p->sex>q->sex) { if(head==p) { head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else { p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } } } printf("排好序的信息如下:\n姓名\t性别\t出生年月\t工作年月\t学历\t职位\t住址\t电话\n"); print(head); return; } elseif(i==2){ n=0,m,flag=1; for(p=head;NULL!=p;p=p->next) n++; for(m=1;flag&&m<=n;n++) { flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next) { if(p->born_time>q->born_time) { if(head==p) { head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else { p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } } } printf("排好序的信息如下:\n姓名\t性别\t出生年月\t工作年月\t学历\t职位\t住址\t电话\n"); print(head); return; } elseif(i==3){ n=0,m,flag=1; for(p=head;NULL!=p;p=p->next) n++; for(m=1;flag&&m<=n;n++) { flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){ if(p->work_time>q->work_time){ if(head==p){ head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else{ p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } } } printf("排好序的信息如下:\n姓名\t性别\t出生年月\t工作年月\t学历\t职位\t住址\t电话\n"); print(head); return; } elseif(i==4) { printf("排好序的信息如下:\n姓名\t性别\t出生年月\t工作年月\t学历\t职位\t住址\t电话\n"); print(head); } elseif(i!=0&&i!=1&&i!=2&&i!=3&&i!=4) printf("输入出错!请再次输入!\n\n");}}voidmenu(){ printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n"); printf("\t☆*主菜单*☆\n");printf("\t★**********★\n"); printf("\t☆☆\n"); printf("\t★0.结束管理系统\t\t\t\t1.新增职工信息\t★\n\t☆2.删除职工信息\t\t\t\t3.查询职工信息\t☆\n\t★4.修改职工信息\t\t\t\t5.职工信息排序\t★\n"); printf("\t☆☆\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");}/*SLNode*load(SLNode*head){ DataTypea; SLNode*p,*end; FILE*fp; if((fp=fopen("职工名单.txt","rb"))==NULL) { printf("\t无法打开'职工名单.txt'!\n"); returnhead; } p=(SLNode*)malloc(sizeof(SLNode)); p=head; p->next=NULL; if(head==0){printf("文件内没有数据!");returnhead;} else { while(head!=0) {end=(SLNode*)malloc(sizeof(SLNode)); p->next=end; p=end; p->next=NULL; f

温馨提示

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

评论

0/150

提交评论