简单的职工管理系统

更新时间:2023-11-02 18:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

淮阴工学院

数据结构课程设计报告

选题名称: 简单的职工管理系统 系(院): 计算机工程学院 专 业: 计算机科学与技术 班 级: 姓 名: 学 号: 指导教师: 学年学期: ~ 学年 第 1 学期

年 月 日

摘要:

简单的职工管理系统问题主要设计脉络是:先完成整体框架,再对部分进行细致的编写,其实就是用链表的数据结构来存储职工信息,并对其进行相应的插入、删除、修改、查询、排序、保存等操作。首先,输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。其次,系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。最后就是输出功能的实现:根据选择的操作,输出与之对应的信息。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改、保存以及职工信息的显示。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。该程序可分成几块,包括结构定义、函数声明、函数实现,函数调用,输入和输出。本课题不需要复杂的算法,但是要有较好的链表和指针的知识,这亦是本课题的难点。

关键词:整体;部分;函数;链表;指针;

目 录

1需求分析..................................................................................................................... 1

1.1课程设计题目 ............................................................................................................................. 1 1.2问题描述 ..................................................................................................................................... 1 1.3详细要求 ..................................................................................................................................... 1 1.3实现提示 ..................................................................................................................................... 1 1.5选做内容 ..................................................................................................................................... 1 1.6软硬件运行环境及开发工具 ..................................................................................................... 1

2概要设计..................................................................................................................... 1

2.1系统设计思想 ............................................................................................................................. 1 2.2系统功能设计 ............................................................................................................................. 2 2.3设计原理 ..................................................................................................................................... 3 2.3.1单链表的结构定义 .................................................................................................................. 4 2.3.3带表头结点的单链表 .............................................................................................................. 5 2.3.3单链表的模板类 ...................................................................................................................... 5

3详细设计和实现......................................................................................................... 5 4调试与操作说明....................................................................................................... 14 总 致

结........................................................................................................... 19 谢........................................................................................................... 20

参 考 文 献................................................................................................................ 21

1需求分析

1.1课程设计题目 简单的职工管理系统 1.2问题描述

对单位的职工进行管理,包括插入、删除、查找、排序等功能。

1.3详细要求

职工对象包括姓名、性别、出生年月、学历、职务、住址、电话等信息。 (1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。 (2)删除一名职工:从职工管理文件中删除一名职工对象。 (3)查询:从职工管理文件中查询符合某些条件的职工。 (4)修改:检索某个职工对象,对其某些属性进行修改。 (5)排序:按某种需要对职工对象文件进行排序。

1.3实现提示

职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。 (1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。 (2)对职工对象中的\姓名\按字典顺序进行排序。

(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。

1.5选做内容

将职工对象按散列法存储,并设计解决冲突的方法。在此基础上实现增、删、查询、修改、排序等操作。

1.6软硬件运行环境及开发工具 Windows XP 操作系统

Visual C++ 6.0 运行环境

2概要设计

2.1系统设计思想

根据职工管理系统问题的描述和详细需求分析,要达到上述功能,链表的数据结构来存储职工信息,并对其进行相应的插入、删除、修改、查询、排序、保

1

存等操作。

(1)输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。

(2)系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。

(3)输出的实现:根据选择的操作,输出与之对应的信息。 综上可以绘制出职工管理问题的系统流程图,如图1所示

总控模块输入模块系统处理模块输出模块测试模块

图1 系统流程图

2.2系统功能设计

根据职工管理系统问题的分析和设计要求,可以将该职工管理系统可以分为七个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块、职工信息保存模块、职工信息显示模块。其系统功能结构如图2所示

2

简单的职工管理系统输入密码显示个人信息系统主菜单增加职工信息修改职工信息删除职工信息查询职工信息保存信息文件按工资排序职工信息显示退出管理系统 图2 系统结构功能图 2.3设计原理

2.3.1单链表特点

每个元素(表项)由结点(Node)构成。

线性结构

结点之间可以连续,可以不连续存储 结点的逻辑顺序与物理顺序可以不一致 表可扩充

3

2.3.1单链表的结构定义

在C中定义单链表的结构十分简单:

typedef int T;

//结点数据的类型

typedef struct node { //结点结构定义 T data; //结点数据域 struct node *link; //结点链接指针域 } LinkNode; //结点命名

这是一个递归的定义。

在结构定义时不考虑操作,以后在定义和实现链表操作时直接使用结构的成分。

2.3.2单链表的类定义

使用面向对象方法,要把数据与操作一起定义和封装,用多个类表达一个单链表。 链表结点(ListNode)类 链表(List)类

定义方式: 复合方式,嵌套方式,继承方式,结构方式

2.3.3单链表中的插入与删除操作

(1)插入

第一种情况:在链表最前端插入

newnode->link = first ; first = newnode; 第二种情况:在链表中间插入

newnode->link = current->link;

current->link = newnode; 第三种情况:在链表末尾插入

newnode->link = current->link;

current->link = newnode;

(2)删除

4

第一种情况: 删除表中第一个元素 第二种情况: 删除表中或表尾元素

(3)实现单链表的插入和删除算法,不需要移动元素,只需修改结点指针,比顺序表方便。情况复杂,要专门讨论空表和在表头插入的特殊情形。寻找插入或删除位置只能沿着链顺序检测。

2.3.3带表头结点的单链表

表头结点位于表的最前端,本身不带数据,仅标志表头。

设置表头结点的目的是统一空表与非空表的操作,简化链表操作的实现。

2.3.3单链表的模板类

类模板将类的数据成员和成员函数设计得更完整、更灵活。 类模板更易于复用。

在单链表的类模板定义中,增加了表头结点。

3详细设计和实现

3.1系统模块的调用关系图框架

根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,,函数之间通过调用来实现系统的功能。 职工管理系统问题的系统模块类图如图3所示

5

void Release(Link Head);void Display_Node(Link pNode)Link Create(Link Head)Link Search_Unique(Link Head)void Display_List(Link Head)Link Add(Link Head)bool Search(Link Head)int main()Link Sort(Link Head)void Save_ByFile(Link Head,fstream& ofile)Link Del(Link Head)Link Modify(Link Head) 图3 模块调用关系图 3.2主函数设计

根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:

新增员工信息注册函数: Link Add(Link Head) 员工信息查询函数: bool Search(Link Head) 员工信息显示函数: void Display_List(Link Head) 修改员工信息函数: Link Modify(Link Head) 员工信息删除函数: Link Del(Link Head)

信息文件保存函数: void Save_ByFile(Link Head,fstream& ofile) Link Sort(Link Head)

员工工资排序函数: Link Sort(Link Head)

6

3.2.1主函数核心代码

int main() {

system(\设置当前窗口的背景色和前景色 int key;

cout<<\请输入密码:\ cin>>key; if(key==110) {

Link Head=0; Head=Create(Head);

fstream iofile; // fstream 输入输出文件流类

iofile.open(\:app);//文件以三种方式打开。 if(!iofile) {

cout<<\打开文件失败!\ return -1; }

int menu; cin>>menu; while(cin.fail()) {

cout<<\请选择正确的菜单选项。\

7

cin.clear(); //清除 cin 中的内容 fflush(stdin); //清楚标准输入中的内容 cin>>menu; }

switch(menu) {

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); break;

case 6: //执行工资排序函数 Sort(Head);

8

break;

case 7: //执行信息显示函数 Display_List(Head); break; default:

cout<<\请选择正确的菜单项进行操作。谢谢合作!\ } }

Release(Head); // 释放 iofile.close(); return 0; } else

cout<<\对不起,密码错误,您无权访问!\

return 0; }

3.2.2流程图

主函数程序流程图如图4所示:

9

开始输入密码注册职工选1显示个人信息和系统主菜单选4信息查询修改信息选2选择操作选5保存文件删除信息选3选7选0选6工资排行 信息显示退出系统 图4 系统流程图

3.3模块算法设计

系统程序中包含了信息注册、信息修改、信息删除、信息查询、信息保存、信息排序、信息显示共七个七个算法的设计。 (1) 信息删除函数代码

Link Del(Link Head) //员工信息删除函数 {

Link ptr; Link ptr_front;

ptr_front=Search_Unique_Front(Head); ptr=ptr_front->Next; if(ptr) {

ptr_front->Next=ptr->Next; delete ptr; //删除此节点。

10

}

cout<<\恭喜你,删除信息成功!。\return Head; }

(2) 文件保存函数

void Save_ByFile(Link Head,fstream& ofile) //文件保存函数 {

Link pNode; pNode=Head->Next;

ofile.clear(); //清除文件结束状态。 while(pNode) {

ofile<m_Code <m_Name <m_Year <m_Sex

<m_Education <m_Address <m_phone

<m_Post <m_Department

<m_Wage<

pNode=pNode->Next;

11

}

cout<<\你的数据文件保存成功!\} (3)

Link Sort(Link Head) //排序函数,对工资进行排序 { //我创建的是带头节点的链表。用直接插入法。

if((Head->Next==NULL)||(Head->Next->Next==NULL)) //常有价值。 {

cout<<\数据节点数少于2个,不用排序!\ return Head; }

//-----------第二步; Link ptr; Link ptr_F; Link ptr_N;

ptr=Head->Next->Next; ptr_F=Head;

Head->Next->Next=NULL; //到此,分成了两个链表。 //第三步。 while(ptr) {

ptr_N=ptr->Next;

ptr_F=Head; //ptr_F的归位。

12

此步条件判断非

while(ptr_F->Next) {

if(ptr->m_Wage>ptr_F->Next->m_Wage) {

ptr->Next=ptr_F->Next; ptr_F->Next=ptr; break; } //if 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<<\从高到低,排序成功!\return Head; }

13

4调试与操作说明

测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别.其主要阶段包括单元测试、集成测试、确认测试和系统测试。测试方法主要有白盒测试法和黑盒测试法;其中,白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作,检验程序中的每条通路是否都能按预定要求正确工作;黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构。

职工信息有:姓名、性别、出生年月、工作年月、学历、职务、住址、电话。在数据输入中注意数据类型。

现有4组测试数据:

代码、姓名、出生年月、性别、学历、住址、电话、职务、部门、工资 1 m 89 b dx xz 123 gcx wl 2000 2 y 88 g xx xy 234 gr wl 900 3 g 91 g gz xy 888 jl wl 1500 4 yh 91 g bk xh 333 bl wl 3000

4.1错误调试

(1)运行程序是出现了一个警告

只要在程序主函数返回值最后加个return 0;就可以完美的解决这个警告 (2)第一次运行成功后,结果输出错误,出现问号,经过调试发现是phone;数据类型定义错误把 string m_phone; 改为 unsigned int m_phone; 再重新生成,问题就解决了。

14

4.2 职工管理系统操作图解

图5 系统登录密码访问,密码正确方可进入系统

图6 系统主菜单,根据需要选择相应的操作

15

图7 注册信息,选择1进行添加员工信息

图8 信息修改,选择菜单4,输入要修改信息的职工代码,然后进行信息修改

16

图9 信息删除,选择菜单3,输入要删除的职工代码

图10 职工信息查询,选择菜单4,输入要查询的职工部门及姓名

17

图11 文件保存 ,输入菜单5进行文件保存 图12 信息排序,输入菜单6进行工资排序

图13 职工信息总览,输入菜单7,浏览所有职工信息

图14 退出系统界面,选择菜单0,成功退出

18

这次的数据结构课程设计,我做的课题是“简单的职工管理系统”。这个课题在所有选题中算是简单的,我算是幸运的了,但简单归简单,对于语言基础较差的我来说,第一次单独完成这个课题仍然是很难的。在做课程设计时必然会遇到各种各样的困难,每个难题都要自己查资料,请教老师,然后一个一个的解决。经过老师和同学们的帮助,再加上我自己的思考,我终于逐渐理清了思路,查询了网络,又参考了图书馆中的文献,使得一个又一个难题迎刃而解,就这样在解决一个个难题中我学到了许多。通过这次由理论到实践的课程设计,我发现了自己在计算机语言上知识的不足,并进行了及时的弥补;学会了许多书上没涉及的知识;学到了一些关于设计程序的经验。回顾起一周内的努力编程,有些不敢相信那程序竟是自己一点一点编出来的,心中充满着自豪感。经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并对数据结构和算法的配合对于程序时间和空间性能的影响以及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。

当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法,例如,马踏棋盘问题就可以采用广度优先搜索或深度优先搜索来解决。因此此时就应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。

此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。

19

感谢淮阴工学院、计算机工程系给我们提供了这次实验机会,感谢实验室人员给我们提供了实验环境,感谢我们数据结构任课老师张有栋老师的谆谆教诲,感谢张亚红老师、周海岩老师、寇海洲老师和杨礼青老师的辛勤指导和无微不至的关怀,感谢周蕾导师的辛勤帮助,感谢李昱、刘洪等同学在实验中给我提供的帮助,感谢《实用c++教程》的作者马智娴和徐克奇二人。回顾这过去的一周,我收获了很多,也成长了很多,感悟到上机实验是多么的重要,自己去动手操作是多么的重要,懂得了如何去多方位地查找资料,完善和创新一些旧的思维方式,相信这次课程设计的体验将成为今后我更多更广学习的奠基石。同时,也在此感谢老师能给我这次机会锻炼自己!在这次的课程设计中要感谢我的朋友们,要不是他们的细心和热情帮助这次的课程设计就没那么容易完成。有些由于粗心造成的错误就很难查出!所以在这里对他们表示我诚挚的谢意!其次,也谢谢上机实验时各位指导老师的细心指导!当然做课程设计不是靠一个人的力量能够完成的,需要各个方面的支持和借鉴。我要特别感谢的是我们宿舍的一位电脑专家,他给予了我极大的支持。在做课程设计的同时也提高了各方面的能力,让我明白了一个道理:同学之间应该相互帮助,相互学习才能提高自己的能力!在本次课程设计中由于我们没有经验所以在这一周的课程设计中经常会遇到各方面的小问题是自己一时难以解决的,再次,我要谢谢他们对我的帮助,让我能够比较顺利的完成本次课程设计,而且还提高了各个方面的能力。感谢所有支持和帮助过我的人。

20

参 考 文 献

1.殷人昆.数据结构(第二版).北京:清华大学出版社,2007; 2.马智娴、徐克奇、荣祺.实用c++教程.北京:高等教育出版社,2004; 3.王晓东.数据结构与算法设计.北京:电子工业出版社,2002; 4.陈明.数据结构(C++版).北京:清华大学出版社,2005; 5.Bruno R.preiss.数据结构与算法.北京:电子工业出版社,2003; 6.北京人民邮电出版社陈慧南.数据结构—C++语言描述.北京:人民邮电出版社,2005;

21

指导教师评语

学号 选题 名称 序号 1 2 3 评价内容 考勤记录、学习态度、工作作风与表现。 自学情况: 上网检索机时数、文献阅读情况(笔记)。 论文选题是否先进,是否具有前沿性或前瞻性。 成果验收: 4 是否完成设计任务;能否运行、可操作性如何等。 报告的格式规范程度、是否图文并茂、语言规5 范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。 6 文献引用是否合理、充分、真实。 答辩情况: 7 自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。 合计 姓名 班级 权重(%) 5 10 5 得分 20 30 5 25 指导教师(签章): 2010 年 12 月 31 日

22

本文来源:https://www.bwwdw.com/article/f452.html

Top