淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 选题名称: 数据结构课程设计 简单的员工管理系统指导教师评语:成绩:签名:年 月 日数据结构课程设计报告第1页,共页1.课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此 过程中培养他们严谨的科学态度和良好的工作作风。
2.课程设计任务与要求:任务 根据教材《数据结构-C 语言描述》 (耿国华主编)和参考书《数据结构题集(C 语言版) 》 (严蔚敏、吴伟民主编) 选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实 现等方面加深对课程基本内容的理解和综合运用。
设计题目从任务书所列选题表中选取,每班每题不得超过 2 人。
学生自选课题 学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据 结构课程所学的知识。
学生自选课题需在 18 周前报课程设计指导教师批准方可生效。
要求: 1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据 类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。
前期准备工作完备与否直接影响 到后序上机调试工作的效率。
在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。
2、.设计的题目要求达到一定工作量(300 行以上代码) ,并具有一定的深度和难度。
3、程序设计语言推荐使用 C/C++,程序书写规范,源程序需加必要的注释; 4、每位同学需提交可独立运行的程序; 5 、每位同学需独立提交设计报告书(每人一份) ,要求编排格式统一、规范、内容充实,不少于 10 页(代码 不算) ; 6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
3.课程设计说明书数据结构课程设计报告 一 需求分析第2页,共页该程序是模拟企业单位中员工的管理系统,实现员工的添加、删除、查询、修改、排序等基本业务。
此程序规定: (1) 能够向系统中输入每个员工的基本信息,包括编号、姓名、性别、出生年月、学历、职务、电话、住址等信息, 并保存记录; (2) 用户能够按编号、姓名查询员工信息; (3) 用户能够实现员工插入(加入新员工的基本信息)、 删除(按编号删除已离职的员工的信息)、 查询(按特定 条件查询员工)、修改(按编号对某个员工的某项信息进行修改) 、排序(按特定条件对所有的员工的信息进行 排序)操作。
二 概要设计 系统用到的抽象数据类型定义:1、单链表的抽象数据类型定义: ADT LinkList{ 数据元素:D={ai|ai∈D0,i=1,2,„,n,n≥0,D0 为某一数据对象} 关系:S={<ai,ai+1>|ai,ai+1∈D0,i=1,2,„,n-1} 基本操作: (1) InitList(L) (2) DestroyList(L) (3) ClearList(L) (4) EmptyList(L) (5) ListLength(L) (6) Locate(L,e) (7) GetData(L,i) (8) InsList(L,i,e) (9) DelList(L,i,&e) }ADT LinkList 2、字符串的抽象数据类型定义: ADT String{ 数据对象:D={ai|ai∈CharacterSet,i=1,2,„,n;n≧0} 数据关系:R={<ai-1,ai>|ai-1,ai∈D,i=2,„,n;n≧0} 基本操作: (1) StrAsign(S,chars) (2) StrInsert(S,pos,T) (3) StrDelete(S,pos,len) (4) StrCopy(S,T) (5) StrEmpty(S) (6) StrCompare(S,T) (7) StrLength(S) (8) StrClear(S) (9) StrCat(S,T) (10)SubString(Sub,S,pos,len) (11)StrIndex(S,pos,T) (12)StrReplace(S,T,V) (13)StrDestroy(S)}ADT String数据结构课程设计报告 系统中的子程序和功能说明:第3页,共页1、typedef struct Node 定义链表结点 2、typedef struct Datatype 定义职工信息 3、ListInitiate(SLNode **head) 链表初始化 4、SLNode *ListInsert(SLNode *head,DataType x) 职工信息的插入姓名并按照字典升序排列 5、print(SLNode *head) 职工信息的输出 6、printLink(SLNode *head) 职工信息的显示 7、ListDelete(SLNode *head) 职工信息的删除 8、ListModify(SLNode *head) 职工信息的修改 9、Listfind(SLNode head) 职工信息的查找 10、Listpaixu(SLNode *head) 职工信息的排序 11、main() 主函数 各程序模块之间的调用关系(子程序编号见上) :主函数可调用子程序 2,6,7,8,9,10 子程序 6 可调用子程序 5 子程序 7,9,10 可调用子程序 6 功能实现过程void FindbyName(SLNode head) //按姓名查找职工 { if(链表为空) { 输出("名单中无职工信息,查询失败!"); 返回主菜单 } 输出("请输入姓名:"); 输入姓名; if(如果存在这个人) { 输出该员工信息; } if(没有找到输入的信息) 输出("职工名单中不存在此人!"); 否则,输出("查询成功!继续操作!"); } void DeletebyNum(Worker &wor,char DeleteNum[])//按编号删除员工信息 { if(记录中没有此员工) 输出“对不起,没有此人信息! ”; if(记录中有此此人) { 把此员工共各项信息置为空; 输出“成功删除此员工信息! ” ;数据结构课程设计报告 } } void ListModify(SLNode *head) { //职工信息的修改第4页,共页if(名单为空) { 输出("职工名单无职工信息,无须修改!"); } 输出("请输入要修改的职工姓名:"); 输入职工姓名; if(查找到了该职工的信息) { 输出("依次写入该职工的新信息:"); 输出("请输入职工信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n"); 按格式输入员工各项新的信息; 输出("修改成功!请继续操作!"); } } if(没有此员工) 输出("此职工不存在,无法修改其信息!"); } void Listpaixu(SLNode *head) //按姓名对职工信息进行排序 { if(职工链表为空) 输出("名单中无职工信息,无法排序!"); else 统计职工人数; 对全部职工信息按姓名进行排序; 输出("排好序的信息如下:"); 输出排好序的员工信息; } 系统程序功能流程图数据结构课程设计报告第5页,共页企业员工管理系 统按 编 号 修 改 信 息基 本 信 息 录 入按 编 号 删 除 员 工查询员工信息按条件排序按 编 号 查 询按 电 话 查 询按 姓 名 查 询按 编 号 进 行 排 序按 姓 名 进 行 排 序三 详细设计SLNode *ListInsert(SLNode *head,DataType x)//职工信息的插入姓名并按照升序排列 { SLNode *p,*q,*s; p=head->next; if((q=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//动态分配存储空间 q->born_date=x.born_date; q->work_date=x.work_date; q->tele_num=x.tele_num; strcpy(q->name,); 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; } //else if(strcmp(p->name,)==0)break; } else if(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; } } } return head; }第6页,共页//如果姓名相同则不插入信息void ListDelete(SLNode *head) //职工信息的删除 { SLNode *p,*s; char x[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");数据结构课程设计报告 printLink(head); break; } s=p; } if(p==NULL) printf("名单中无此职工信息,无须删除!\n"); }第7页,共页void ListModify(SLNode *head)//职工信息的修改 { DataType x; SLNode *p; p=head->next; if(p==NULL) { printf("职工名单无职工信息,无须修改!\n"); return; } printf("请输入要修改的职工姓名:\n"); scanf("%s",); for(;p;p=p->next) { if(strcmp(,p->name)==0) { printf("依次写入该职工的新信息:\n"); printf("请输入职工信息: \n 编号、 姓名、 性别、 出生年月、 学历、 职务、 住址、 电话\n"); scanf("%ld %s %c %ld %s %s %s %ld",&x.work_num,,&x.sex,&x.born_date,x.degree, x.job,x.address,&x.tele_num); printf("修改成功!请继续操作!\n"); break; } } if(p==NULL) printf("此职工不存在,无法修改其信息!\n"); } void Listfind(SLNode head) //按编号查找职工 { int i,j; SLNode *p; DataType x; if(head.next==NULL)//链表为空数据结构课程设计报告 { printf("名单中无职工信息,查询失败!\n"); return;第8页,共页} //返回主菜单 p=head.next; printf("请输入编号:"); scanf("%ld",&x.work_num); j=0; for(p;p;p=p->next){ if(p->work_num==x.work_num){ ++j; printf("\n 编号、性别、出生年月、学历、职务、住址、电话\n"); printf(" %ld %s %c %ld %s %s %s %ld\n",p->work_num,p->name,p->sex,p->born_date,p->de gree,p->job,p->address,p->tele_num); } } if(j==0) printf("职工名单中没有这个编号的!\n"); else printf("查询成功!请继续操作!\n"); }四 设计与调试分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期 结果与实际结果之间的差别。