最新《数据结构》课程设计之企业员工信息管理系统设计与实现.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date数据结构课程设计之企业员工信息管理系统设计与实现数据结构课程设计之企业员工信息管理系统设计与实现算法与数据结构课程设计题目:企业员工信息管理系统设计与实现院、 系: 计算机信息与技术系学科专业: 软件工程 学 号: B10060XXX 学生姓名: XX 指导教师: X X 2012年9月16日目 录第一章 设计要求21.1 问题描述21.2 需求分析2第二章 概要设计32.1 主界面设计32.2 存储结构设计32.3 系统功能设计4第三章 模块设计43.1 系统子程序及功能设计43.2 系统功能图5第四章 详细设计54.1 数据类型定义54.2 系统主要子程序详细设计61.显示函数:62.删除函数:63.查询函数:74.修改函数:95.主函数:108.其他函数:11第五章 测试分析125.程序各功能的运行结果:125.1系统主界面125.2建立信息125.3修改信息135.4查询信息135.5显示信息145.6删除信息145.7退出系统15第六章 源程序清单16第七章 工作总结23第八章 参考文献23-第一章 设计要求1.1 问题描述企业员工信息管理系统,包括企业中所有员工的基本信息,如:工号、姓名、性别、学历等。且该系统能够完成新员工的增添、所有员工信息的相应查询、修改、删除等各项功能。1.2 需求分析(1)在相应的每条记录中,应该包括该员工的所有信息,如:工号、姓名、性别、学历等;(2)根据不同关键字(如工号,姓名等),对所有员工的信息进行排序;(3)按照指定条件查找某个员工的所有信息;(4)按工号对某个员工的信息进行修改;(5)添加新员工的信息;(6)按工删除已离职、退休员工的信息;(7)与此同时,除了以上基本的需求以外,该企业员工信息管理系统的程序源代码还应具有良好的编程结构和适当的注释,运行界面清晰,提示内容明确,易于操作。第二章 概要设计2.1 主界面设计 当输入相应的操作字符(如:数字0-6),实现并完成各项功能操作(如:建立、修改、删除、显示、退出等)。系统主界面如下:2.2 存储结构设计依据给定的数据格式,个人信息由四个字段来组成,即工号、姓名、性别、学历,外加一个判断关键字。如: 工号 | 姓名 | 性别 | 学历 123 feng n daxue 本课程设计根据功能需求,使用线性结构来组织数据,由于要对表中某项数据进行插入、删除操作,所以使用链表比较方便。2.3 系统功能设计依据程序的数据结构和功能,遵照“自顶向下,逐步细化”原则,描述该程序的层次结构,在总体上包括数据的增添、修改、删除、查询以及数据的显示等功能模块。(1)新增函数功能:通过输入各项数据给数据元素,来建立一个数据表。(2)显示函数功能:输出表中所有节点的信息。(3)查询函数功能:按照指定关键字,对相应员工信息进行查询。(4)修改函数功能:输入员工工号,查询员工信息,对其信息进行修改。(5)删除函数功能:查找到要删除员工的相应信息,并将其从表中永久的删除。(6)主函数功能:调用以上子函数,并用开关语句进行选择性的调用。第三章 模块设计3.1 系统子程序及功能设计(1) 新增员工信息,利用函数: creatlist(linklist &L)(2) 显示所有员工信息,利用函数: display(linklist &L)(3) 删除员工信息,是按员工工号删除,利用函数: delet(linklist &L,char num6)(4) 查询员工信息,按工号和姓名进行查询;按工号查询利用函数: searchnum(linklist &L,char num10) ; 按姓名查询利用函数: searchname(linklist &L,char name10)(5) 修改员工信息,利用函数: alter(linklist &L,char num6)3.2 系统功能图主页面建立链表查询显示信息退出修改删除按工号按姓名按工号图3-2 系统功能图第四章 详细设计4.1 数据类型定义结构体定义:typedef struct node char num6; /工号 char name10; /姓名 char sex6; /性别 char degree20; /学历 struct node *next; /指针域 node,*linklist;4.2 系统主要子程序详细设计1. 显示函数函数原型: void display(linklist &L)函数功能:输出表中所有节点的信息。算法要点:使用循环输出所有信息。主要算法:void display(linklist &L)linklist p;for(p=L->next;p;p=p->next)printf("工号 %s",p->num);printf("姓名 %s",p->name);printf("性别 %s",p->sex);printf("学历 %s",p->edu);2. 删除函数函数原型:void delet(linklist &L,char num6)函数功能:查找到要删除员工的相应信息,并将其从表中永久的删除。算法要点:(1) 按关键字查找信息;(2) 链表中删除节点信息,并释放节点空间。主要算法:int delet(linklist &L, char num6)node *p; /*实现删除操作的临时的结构体指针变量*/node *r; p=L->next;r=L; if(!L->next) /当list无后继结点时,提示和结束返回del()printf("n=>提示:没有记录可以删除!n"); printf("n");return 1; while(!(strcmp(p->num,num)=0)&&p)r=p;p=p->next;if(!p)printf("nnttt 找不到该职工信息!n");elser->next=p->next; free(p);printf("删除成功n");printf("n");return 1;3. 查询函数(1)按工号查询int searchnum(linklist &L,char num10)node *p;p=L;while(p)if(strcmp(p->num,num)=0)printf("t");printf("工号 %s",p->num);printf("t");printf("姓名 %s",p->name);printf("n");printf("t");printf("性别 %s",p->sex);printf("t");printf("t");printf("学历 %s",p->edu);printf("n");p=p->next;return 1;(2)按姓名查询int searchname(linklist &L,char name10)node *p;p=L;while(p)if(strcmp(p->name,name)=0)printf("t");printf("工号 %s",p->num);printf("t");printf("姓名 %s",p->name);printf("n");printf("t");printf("性别 %s",p->sex);printf("t");printf("t");printf("学历 %s",p->edu);printf("n");p=p->next;return 1;4. 修改函数 (按工号修改)int alter(linklist &L,char num6)node *p;p=L;while(p)if(strcmp(p->num,num)=0)printf("请输入员工的工号:n");printf("您输入的是:"); printf("t"); scanf("%s",p->num); printf("请输入员工的姓名:n"); printf("您输入的是:"); printf("t"); scanf("%s",p->name); printf("请输入员工的性别:n"); printf("您输入的是:"); printf("t"); scanf("%s",p->sex); printf("请输入员工的学历:n"); printf("您输入的是:"); printf("t"); scanf("%s",p->edu); p=p->next; printf("n"); return 1;5. 主函数主函数主要是调用以上的子函数,用开关语句进行选择性的调用。大致程序如下:void main()linklist L;int a;char m;char name10; char num6;initlist(L);int g;int f=1;while(f)menu();scanf("%d",&g);printf("n");switch(g)case 1: creatlist(L); do printf("是否继续输入?(y/n)"); printf("t"); getchar(); scanf("%c",&m); if(m='y') creatlist(L); while(m!='n'); printf("n"); break; case 2: printf("请输入修改员工的工号:"); printf("您输入的是:"); printf("t"); getchar(); scanf("%s",&num); alter(L,num); printf("n"); break; ······case 0: f=0; printf("nn"); break;6. 其他函数这些函数主要起到辅助功能,比如:菜单函数,主要起到引导作用;菜单函数原型:void menu()第五章 测试分析5. 程序各功能的运行结果:5.1 系统主界面5.2 建立信息(1)首先输入操作字符“1”;(2)接着输入员工信息;(3)最后输入操作字符“n”结束输入。5.3 修改信息(1)首先输入操作字符“2”;(2)再输入新的员工信息, 5.4 查询信息(1)首先输入操作字符“3”;(2)接着输入操作字符“1”或者“2”(即实现按“工号”查询,或者按“姓名”查询);(3)再输入编号的字符“1”;5.5 显示信息输入操作字符“5”;5.6 删除信息输入操作字符“4”; 5.7退出系统输入操作字符“0”;第六章 源程序清单#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node /定义节点类型char num6;char name10;char sex3;char edu6;struct node *next;node,*linklist;int creatlist(linklist &L) /头插法生成单链表linklist p;p=(linklist)malloc(sizeof(node);if(!p)return (0);elseprintf("请输入员工的工号:n");printf("t");scanf("%s",p->num); printf("请输入员工的姓名:n");printf("t");scanf("%s",p->name); printf("请输入员工的性别:n");printf("t"); scanf("%s",p->sex); printf("请输入员工的学历:n");printf("t"); scanf("%s",p->edu); p->next=L->next; L->next=p;int initlist(linklist &L) /初始化单链表L=(linklist)malloc(sizeof(node);if(!L)return (0);L->next=NULL;return 1;void meau()printf("t* _ 欢迎使用企业员工信息系统 _ *n");printf("n"); printf("t * 1 建立员工信息表 *n"); printf("t * 2 插入新员工信息 *n"); printf("t * 3 查询员工信息记录 *n"); printf("t * 4 删除员工信息记录 *n"); printf("t * 5 显示员工信息 *n"); printf("t * 0 退出管理系统 *n"); printf("n");printf("t* _ 欢迎使用企业员工信息系统 _ *n");printf("n");printf("t XXXn");printf("t 2012年9月12日n");printf("n");printf("请您从0-5中选择: n");printf("您选择的是:");printf("t");void display(linklist &L) /显示所有员工信息linklist p;for(p=L->next;p;p=p->next)printf("t");printf("工号 %s",p->num);printf("t");printf("姓名 %s",p->name);printf("n");printf("t");printf("性别 %s",p->sex);printf("t");printf("t");printf("学历 %s",p->edu);printf("n");printf("n");printf("n");int delet(linklist &L,char num6) /按工号删除node *p; /*实现删除操作的临时的结构体指针变量*/node *r; p=L->next;r=L; if(!L->next) /当list无后继结点时,提示和结束返回del()printf("n=>提示:没有记录可以删除!n"); printf("n");return 1; while(!(strcmp(p->num,num)=0)&&p)r=p;p=p->next;if(!p)printf("nnttt 找不到该职工信息!n");elser->next=p->next; free(p);printf("删除成功n");printf("n");return 1;int searchnum(linklist &L,char num10) /查询工号node *p;p=L;while(p)if(strcmp(p->num,num)=0)printf("t"); printf("工号 %s",p->num); printf("t"); printf("姓名 %s",p->name); printf("n"); printf("t"); printf("性别 %s",p->sex); printf("t"); printf("t"); printf("学历 %s",p->edu); printf("n"); p=p->next; return 1;int searchname(linklist &L,char name10) /查询姓名node *p;p=L;while(p)if(strcmp(p->name,name)=0)printf("t"); printf("工号 %s",p->num); printf("t"); printf("姓名 %s",p->name); printf("n"); printf("t"); printf("性别 %s",p->sex); printf("t"); printf("t"); printf("学历 %s",p->edu); printf("n"); p=p->next; return 1;int alter(linklist &L,char num6) /修改信息node *p;p=L;while(p)if(strcmp(p->num,num)=0)printf("请输入员工的工号:n");printf("您输入的是:"); printf("t"); scanf("%s",p->num); printf("请输入员工的姓名:n"); printf("您输入的是:"); printf("t"); scanf("%s",p->name); printf("请输入员工的性别:n"); printf("您输入的是:"); printf("t"); scanf("%s",p->sex); printf("请输入员工的学历:n"); printf("您输入的是:"); printf("t"); scanf("%s",p->edu); p=p->next; printf("n"); return 1;void main() /主函数linklist L;int a;char m;char name10; char num6;initlist(L);int g;int f=1;while(f)meau();scanf("%d",&g);printf("n");switch(g) case 1: creatlist(L); do printf("是否继续输入?(y/n)"); printf("t"); getchar(); scanf("%c",&m); if(m='y') creatlist(L); while(m!='n'); printf("n"); break; case 2: printf("请输入修改员工的工号:"); printf("您输入的是:"); printf("t"); getchar(); scanf("%s",&num); alter(L,num); printf("n"); break; case 3: printf("请选择查询方式(1.按工号查询 , 2.按姓名查找)"); printf("n"); printf("您选择的是:"); printf("t"); scanf("%d",&a); if(a=1) printf("请输入查询员工的工号:n"); printf("您输入的是:"); printf("t"); scanf("%s",&num); printf("n"); searchnum(L,num); if(a=2) printf("请输入查询员工的姓名:n"); printf("您输入的是:"); printf("t"); scanf("%s",&name); printf("n"); searchname(L,name); printf("n"); break; case 4: printf("请输入删除员工的工号:n"); printf("您输入的是:"); printf("t"); getchar(); scanf("%s",&num); printf("n"); delet(L,num); break; case 5: printf("所有员工的信息如下所示n"); printf("n"); display(L); printf("n"); break; case 0: f=0; printf("nn"); printf("tn"); printf("t*n"); printf("t * * n"); printf("t * 感谢您的使用,再见! * n"); printf("t * * n"); printf("t*n"); printf("tnn");break; 第七章 工作总结通过本次数据结构课程设计,使我深深的意识到以下几个方面的问题。第一,基础永远是最重要的。因为C语言程序设计和数据结构的基础知识不扎实,所以导致我的本次课程设计问题重重,要不是在同学以及互联网的帮助下,我真不知道如何完成。所以,无论在什么事情,没有扎实的基础,都是非常困难的。第二,要善于利用网络。如果不是通过互联网的搜索,找到了相应的程序与代码以及看到了很多人的经典构想与思维,我真的不知道自己该如何解决程序中出现的一系列问题,如何坚持到最后。不过,网络虽好,但也增长了我的懒惰:借助别人的思维与设计,我便少了自我摸索的过程,我深深认识到这是很严重的问题。我以后将好好克制和解决这一问题。第三,做程序这一行,细致是非常重要的。由于在设计工程中的粗枝大叶,使得后续的调试阶段发现无数小问题,都是一些细节问题,浪费了无数宝贵时间。以后的程序设计,我将稳扎稳打,步步为营,避免一些不应该出现的问题的出现。 第八章 参考文献1.耿国华.数据结构C语言描述.高等教育出版社.2005/067511.2.谭浩强.C程序设计.清华大学出版社.2007/014674.