




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
i 湖南涉外经济学院湖南涉外经济学院 数据结构课程设计报告 题目:题目: 简单的职工管理系统简单的职工管理系统 院系名称:院系名称: 计算机学院计算机学院 专业名称:专业名称:计算机科学与技术计算机科学与技术 班班 级:级: 计科班计科班 学生姓名:学生姓名:刘兴斌刘兴斌 学号:学号: 30 指导教师:指导教师: 张建明张建明 设计起止时间:设计起止时间:2011 年 11 月 20 日2011 年 12 月 30 日 完成于 2011 年 12 月 29 日 星期四 i 目 录 第一章第一章 序序.1 第二章第二章 系统总体功能的设计和分析.2 1、 问题描述.2 2 、详细要求 .2 3 、 功能分析.2 1、 具体要求.2 2、 系统流程分析.3 3、系统功能结构.3 4、 模块函数构造.4 第三章第三章 详细设计分析详细设计分析.5 1、抽象数据类型定义.5 2、主函数设计.5 3、查找算法设计.6 4、排序算法设计.8 第四章第四章 源程序代码源程序代码.11 第五章第五章 系统实现系统实现29 第第六六章章 课程设计总结课程设计总结.31 1 第一章 序 电子信息时代由如洪水一样的凶猛,能在现实社会应用软件给 我们的生活和工作带来方便和实用性就是软件存在的最大的价值。 数据结构所能解决的就是这些复杂的问题简单化。 数据结构是计算机专业学生学习的一门基础课程,但十分 的重要。本课程系统地介绍了软件设计中常用的数据结构以及相应 的存储结构和实现算法,介绍了常用的多种查找和排序技术。本课 程将为整个专业的学习以及软件设计水平的提高打下良好的基础。 为了学好数据结构 ,必须掌握编写一些在特定数据结构上的算法, 并通过上机调试,更好地掌握各种数据结构及其特点。 经过本次课程设计,我们对于数据结构基本理论和存储结构及 算法设计将有更加深入的理解,并提高我们在实际设计操作中系统 分析、结构确定、算法选择、数学建模和信息加工的能力,提高我 们的 C/C+语言程序设计能力,以及培养学我们编写程序设计文档 的能力,为将来在实战工作中打下良好的基础。 在经济发达的今天对于职工简单的管理都是有很大程度上的要 求,一个工司能否较好较快的运行,与职工管理的好坏分不开关系, 通过该系统,将一系列的问题系统化,能够更好的管理职工。简化 管理,使管理更方便,准确性、直观性和实用性更强。本着以锻炼 自己的能力为目的,通过设计与制作进一步学习和掌握简单的职工 管理系统的原理和使用方法。虽然在一定程度上较为简单,但也能 体现在出在人员管理上的方便快捷,也体现一个领导的管理水平是 不是充满艺术。 2 第二章第二章 系统总体功能的设计和分析系统总体功能的设计和分析 1 、 问题描述问题描述 根据课程设计题目的要求,由于职工信息是一定要存放 在指定的文件中,所以应提供文件的输入、输出等操作; 在程序中需要浏览职工的信息,应提供显示、查找、删除、 插入、排序等一系列的操作;另外还应提供键盘式选择菜 单实现功能选择 对功能要求的实现是解决管理系统的关键问题。一个管 理系统能将其划分为插入、删除、查找、排序等功能。对 不同的功能模块进行代码的编写实现,最后通过一定的方 式的进行连接测试和最终的调用,从而完成对各部分的操 作。 2 、详细要求、详细要求 1.要求 职工对象包括姓名、性别、出生年月、工作年月、学 历、职务、住址、电话等信息。 (1)新增一名职工:将新增职工对象按姓名以字典方式职 工管理文件中。 (2)删除一名职工:从职工管理文件中删除一名职工对象。 (3)查询:从职工管理文件中查询符合某些条件的职工。 (4)修改:检索某个职工对象,对其某些属性进行修改。 (5)排序:按某种需要对职工对象文件进行排序。 3 3 功能分析功能分析 1 1、实现提示实现提示 职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。 (1 1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。 (2 2)对职工对象中的)对职工对象中的 姓名姓名 按字典顺序进行排序。按字典顺序进行排序。 (3 3)对排序后的职工对象进行增、删、查询、修改、排序等操作。)对排序后的职工对象进行增、删、查询、修改、排序等操作。 2、 系统流程分析系统流程分析 (1)输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职 工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输 入职工对象,以文件方式保存。程序执行时先将文件读入内存。 (2)系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示 信息的提示下,选择相应的服务进行操作。如对职工对象中的姓名按字典顺 序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。 (3)输出的实现:根据选择的操作,输出与之对应的信息。 综上可以绘制出职工管理功能的系统流程图,如图 1 所示 总控模块 输入模块 系统处理 模块 输出模块 测试模块 图1 系统流程图 4 3、系统功能结构、系统功能结构 根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以 分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、 职工信息查询模块、职工信息排序模块。其系统功能结构如图 2 所示。 职工管理系统 新 增 职 工 信 息 删 除 职 工 信 息 查 询 职 工 信 息 排 序 职 工 信 息 修 改 职 工 信 息 对 职 务 进 行 查 询 对 电 话 进 行 查 询 对 姓 名 进 行 查 询 对 工 作 年 月 进 行 查 询 对 住 址 进 行 查 询 对 出 生 年 月 进 行 查 询 对 学 历 进 行 查 询 对 性 别 进 行 排 序 对 出 生 年 月 进 行 排 序 对 工 作 年 月 进 行 排 序 对 姓 名 进 行 排 序 图2 系统功能结构图 4 4、 模块函数构造模块函数构造 根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应 的函数,其方法名和功能如表 1 所示。 表1 函数功能表 模块函数或数据结构功能 typedef struct Node 定义链表结点 typedef struct Datatype 定义职工信息链表数据类型 ListInitiate(SLNode *head) 初始化链表 SLNode *ListInsert(SLNode *head,DataType x) 插入职工信息 ListDelete(SLNode *head) 删除职工信息 ListModify(SLNode *head) 修改职工信息 系统处理模块 put(SLNode *head,FILE *fp) 保存职工信息 5 Listfind(SLNode head) 查询职工信息 Listpaixu(SLNode *head) 职工信息排序 输出模块 print(SLNode *head) 显示职工信息 6 第三章 详细设计分析 1 1、 抽象数据类型定义抽象数据类型定义 (1)定义表结点(typedef struct Node) typedef struct Node long int born_time,work_time,tele_num; char sex,nameALLMAX,degreeALLMAX,jobALLMAX,addressALLMAX; struct Node *next; SLNode; (2)定义职工信息(typedef struct Datatype) typedef struct long int born_time,work_time,tele_num; char nameALLMAX,sex,degreeALLMAX,jobALLMAX,addressALLMAX; DataType; (3)初始化链表(ListInitiate(SLNode *head)) void ListInitiate(SLNode *head)/-链表初始化 if(*head=(SLNode *)malloc(sizeof(SLNode)=NULL) exit(1);/动态分配存 储空间 (*head)-next=NULL; 2 2、 主函数设计主函数设计 (1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在 主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性 别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘 输入提供的主菜单服务,在主菜单中,有七种操作的调用: 新增职工信息:SLNode *ListInsert(SLNode *head,DataType x) 查询职工信息:Listfind(SLNode head) 删除职工信息:ListDelete(SLNode *head) 7 修改职工信息:ListModify(SLNode *head) 职工信息排序:Listpaixu(SLNode *head) 保存职工信息:put(SLNode *head,FILE *fp) 显示职工信息:print(SLNode *head) (2)主函数程序流程图如图 3 所示: 开始 输入职工人数 和对应的信息 显示主菜单提 示 选择操作 新增职 工信息 删除职 工信息 查询职 工信息 职工信 息排序 修改职 工信息 结束系统 选1 选 2 选3 选 4 选5 选0 选除 上述 数字 之外 的操 作 图 3 主函数程序流程图 3 3、 查找算法设计查找算法设计 在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化 查询操作。这些查询操作分别为: 对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进 行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查 询等一些列操作。查找算法中,利用链表的指针的移动扫描整个职工信息表, 利用 strcmp()函数判断字符串是否匹配。 8 查询算法程序流程图如图 4 所示: 链表是否为空 选择执行的 操作 退出查 询 对年龄 查询 对学历 查询 对工作年 月查询 对住址 查询 对出生年 月查询 对姓名 查询 对职务 查询 无职工 信息 是 否 选0 选3 选1 选4 选6 选5 选7 选2 显示查询 主菜单 选择除上述数字之外的操作 图 4 查询算法程序流程图 4 4、 排序算法设计排序算法设计 在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排 序操作。这些排序操作分别为: 对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进 行排序,等一些列操作。排序算法中,利用链表的指针的移动扫描整个职工信 息表,利用 strcmp()函数判断字符串是否匹配。 9 排序的核心代码: for(q=head-next,p=head,s=p;q;s=p,p=q,q=q-next) if(p-born_timeq-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; 排序算法流程图如图 5 所示: 显示排序菜单 链表是否为 空 选择操作 对工作日 期排序 对出生日 期排序 退出排 序系统 对性别 排序 无职工 信息 是 否 选0 选1 选2 选3 选除上述操作的任意操作 图5 排序算法程序流程图 10 第四章第四章 源程序代码源程序代码 #include #include #include #include #include #include #include #include using namespace std; struct Employee /声明职工的结构作为链表节点。 /-数据域- string m_Code; string m_Name; unsigned short int m_Year; string m_Sex; string m_Post; string m_Department; 11 unsigned int m_Wage; /链表节点的指针域- struct Employee* Next; ; /-个人习惯:取别名- typedef struct Employee Node; typedef Node* Link; /-函数声明- Link Create(Link Head); void Release(Link Head); Link Add(Link Head); bool Search(Link Head); Link Search_Unique(Link Head); void Display_List(Link Head); void Display_Node(Link pNode); Link Modify(Link Head); Link Del(Link Head); void Save_ByFile(Link Head,fstream Link Sort(Link Head); /-函数实现- 12 Link Create(Link Head) /创建一个带头节点的空链表。 Head=(Link)new Node; if(!Head) cout分配内存失败!m_Name=; Head-m_Year=0; Head-m_Sex=; Head-m_Post=; Head-m_Department=; Head-m_Wage=0; Head-Next=NULL; return Head; void Release(Link Head) /释放链表。 13 Link ptr;/声明一个操作用的指针。 while(Head!=NULL) ptr=Head; Head=Head-Next; delete ptr;/释放节点资源。 Link Add(Link Head) /前插法添加数据。 Link pNew;/ 声明一个新节点。 char again; string code,name,sex,post,department; unsigned short int year; unsigned int wage; do pNew=(Link)new Node; /数据域。 coutcode; 14 coutendlname; coutendlyear; while(cin.fail() cout请输入正确的年份格式。year; coutendlsex; coutendlpost; coutendldepartment; coutendlwage; while(cin.fail() cout请输入正确的工资数据。wage; coutm_Name=name; pNew-m_Year=year; pNew-m_Sex=sex; pNew-m_Post=post; pNew-m_Department=department; pNew-m_Wage=wage; /指针域。 pNew-Next=Head-Next; Head-Next=pNew; cout数据添加成功!是否继续添加?(Y/N)again; while(again=Y|again=y); return Head; bool Search(Link Head) 16 /查询同时满足“姓名”和“部门”的职工信息。 Link ptr; string department; string name; ptr=Head-Next; coutdepartment; coutendlname; coutendl-查询结果- endl; coutendl职工代码、姓名、出生年份、性别、职 称、部门、工资Next;/查询下一节点。 17 cout无此职工的信息。endl; return false; Link Search_Unique_Front(Link Head) /查询满足“职工代码“的职工信息(职工代码必需 唯一) 。 Link ptr; string code; ptr=Head; coutcode; coutendl-查询结果- endl; coutendl职工代码、姓名、出生年份、性别、职 称、部门、工资Next-m_Code=code) /Display_Node(ptr);/打印满足条件的节点。 return ptr;/注意,是返回的查询到的节点的直接前趋节 18 点。 ptr-Next=ptr-Next-Next;/查询下一节点。 return ptr; void Display_List(Link Head) Link ptr; ptr=Head-Next; cout=所有职工信息 =endl; coutendl职工代码、姓名、出生年份、性别、职 称、部门、工资Next; void Display_Node(Link pNode) 19 /在标准输出设备上输出。 coutsetw(10)leftm_Code setw(10)leftm_Name setw(10)leftm_Year setw(10)leftm_Sex setw(10)leftm_Post setw(10)leftm_Department setw(10)leftm_WageNext) cout-你现在可以修改此职工的信息了- endl; 20 coutendl职工代码、姓名、出生年份、性别、职 称、部门、工资endl; /数据域。 coutcode; coutendlname; coutendlyear; while(cin.fail() cout请输入正确的年份格式。year; coutendlsex; coutendlpost; coutendldepartment; 21 coutendlwage; while(cin.fail() cout请输入正确的工资数据。wage; coutm_Code=code;/因 ptr 是前趋节点,所以要 用 ptr-Next; ptr-Next-m_Name=name; ptr-Next-m_Year=year; ptr-Next-m_Sex=sex; ptr-Next-m_Post=post; ptr-Next-m_Department=department; ptr-Next-m_Wage=wage; cout没找到此职工的记录,无法修改。Next=ptr-Next; delete ptr;/删除此节点。 cout没找到此职工的记录,无法删除。Next; ofile.clear();/清除文件结束状态。 23 while(pNode) ofilesetw(10)leftm_Code setw(10)leftm_Name setw(10)leftm_Year setw(10)leftm_Sex setw(10)leftm_Post setw(10)leftm_Department setw(10)leftm_WageNext; cout数据文件保存成功!Next- Next=NULL)/此步条件判断非常有价值。 cout数据节点数少于 2 个,不用排序!Next; ptr_F=Head; Head-Next-Next=NULL;/到此,分成了两个链表。 /第三步。 while(ptr) ptr_N=ptr-Next; ptr_F=Head;/ptr_F 的归位。 while(ptr_F-Next) if(ptr-m_Wageptr_F-Next-m_Wage) ptr-Next=ptr_F-Next; ptr_F-Next=ptr; break; /if 25 else ptr_F=ptr_F-Next; /while(ptr_F-Next) if(ptr_F-Next=NULL) ptr-Next=ptr_F-Next; ptr_F-Next=ptr;/表示插到有序链表的最后面了。 ptr=ptr_N;/归位,准备下一次排序。 /while(ptr) cout从高到低,排序成功!endl; return Head; int main() Link Head=0; 26 Head=Create(Head); fstream iofile; iofile.open(d:iofile.txt,ios_base:in|ios_base:out|ios_ba se:app);/文件以三种方式打开。 if(!iofile) cout打开文件失败!endl; return -1; int menu; while(1) cout*endl; cout*欢迎进入职工管理系统*endl; cout*endl; coutendl; cout endl; cout 主菜单 endl; cout = endl; cout endl; 27 cout endl; cout 1.注册职工 2.修改信息 endl; cout 3.删除信息 4.信息查询 endl; cout 5.保存文件 6.工资排行 endl; cout 7.信息显示 0.退出系统 endl; cout endl; cout endl; cout endl; cout endl; coutendlmenu; while(cin.fail() cout请选择正确的菜单选项。menu; switch(menu) case 0: cout成功退出系统!endl; return 0; case 1: Head=Add(Head); break; case 2: Head=Modify(Head); break; case 3: Head=Del(Head); break; case 4: Search(Head); break; case 5: Save_ByFile(Head,iofile); 29 break; case 6: Sort(Head); break; case 7: Display_List(Head); break; default: cout请选择正确的菜单项进行操作。多谢合作! endl; Release(Head); iofile.close(); return 0; 30 第五章 系统实现 测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检 验是否满足规定的需求或弄清
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学历类自考专业(法律)合同法-国际经济法概论参考题库含答案解析(5套试卷)
- 2025年学历类自考专业(汉语言文学)文学概论-中国古代文学作品选(一)参考题库含答案解析(5套试卷)
- 2025年学历类自考专业(护理)护理学导论-儿科护理学(一)参考题库含答案解析(5套)
- 2025年学历类自考专业(国贸)涉外经济法-国际商务英语参考题库含答案解析(5套试卷)
- 2025年医卫类放射医学(中级)相关专业知识-基础知识参考题库含答案解析(5套试卷)
- 锦州建设有限公司招聘考试真题2024
- 贸易考试题及答案
- 中西通俗小说赏析知到智慧树答案
- 医疗器械冷链管理培训试题及答案
- 电梯安全员守则培训考核试题及答案
- 2023分布式光伏电站安装作业指导书
- 《七大营养素》课件
- 国际道路旅客运输经营许可申请表
- (2023版)电信智家工程师认证必备考试题库大全(含解析)-下(判断题汇总)
- 超高层带伸臂结构巨型环桁架施工技术总结附图
- 2乳的验收与预处理解析
- 三峡大学级本科电气工程及其自动化二本培养方案
- 架桥机安装与拆除安全技术交底
- GB/T 19839-2005工业燃油燃气燃烧器通用技术条件
- 伤口造口新进展课件
- (完整版)人工智能介绍课件
评论
0/150
提交评论