简单的职工管理系统课程设计报告Word文件下载.docx
- 文档编号:6212553
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:41
- 大小:25.76KB
简单的职工管理系统课程设计报告Word文件下载.docx
《简单的职工管理系统课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《简单的职工管理系统课程设计报告Word文件下载.docx(41页珍藏版)》请在冰点文库上搜索。
、需求分析
需求分析需求分析
需求分析
职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司
的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足
的信息和快捷的查询手段。
但一直以来各个公司基本上都是靠传统的人工方式来
管理职工信息,这种管理方式存在着许多缺点,如:
效率低、保密性差,另外时
间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不
少的困难。
当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所
涉及的数据量越来越大,职工信息量也大大增加,利用传统的手工查询、登记、
修改等方法的处理速度远远跟不上公司的需求,有的公司不得不靠增加人力、物
力来进行信息管理。
随着计算机技术的不断提高,计算机作为知识经济时代的产物,其强大的功
能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要
的作用,成为人们工作和生活中不可缺少的一部分。
而作为计算机应用的一部分,使用计算机对职工进行管理,具有手工管理所
无法比拟的优点。
例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、
寿命长、成本低等。
这些优点能够极大地提高职工管理的效率,也是公司的科学
化、正规化管理和与世界接轨的重要条件。
职工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已
达到了良好效果。
简单的职工管理系统:
1、问题描述
对单位的职工进行管理,包括插入、删除、查找、排序等功能。
2、要求
职工对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月
(数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等
信息。
(1)新增一名职工:
将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:
从职工管理文件中删除一名职工对象。
(3)查询:
从职工管理文件中查询符合某些条件的职工。
(4)修改:
检索某个职工对象,对其某些属性进行修改。
(5)排序:
按某种需要对职工对象文件进行排序。
3、实现功能
(1)由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内
存。
(2)对职工对象中的“姓名”按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。
-3-二
二二
二、
、概要设计
概要设计概要设计
概要设计
1、输入功能的实现:
要想实现职工管理系统的输入,必须要建立一个职工
信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。
由键盘输入职
工对象,以文件方式保存。
程序执行时先将文件读入内存。
2、系统处理功能的实现:
系统管理员根据公司的人员流动情况,在提示信
息的提示下,选择相应的服务进行操作。
如对职工对象中的"
姓名"
按字典顺序进
行排序;
对排序后的职工对象进行增、删、查询、修改、排序等操作。
3、输出的实现:
根据选择的操作,输出与之对应的信息。
综上可以绘制出职工管理功能的系统流程图,如图1所示
图1系统流程图
4、系统功能结构
根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分
为五个模块:
职工信息添加模块、职工信息修改模块、职工信息删除模块、职工
信息查询模块、职工信息排序模块。
其系统功能结构如图2所示。
图2系统功能结构图-
5、模块函数构造
根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的
函数,其方法名和功能如表1所示
。
表1函数功能表
模块函数或数据结构功能
.
三.详细设计
1、抽象数据类型定义
2)定义员工信息(typedefstructDatatype)
t
3)初始化链表(ListInitiate(SLNode**head))
}
2、主函数设计
(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:
在主
函数中,实现了友好的界面设计。
系统需要输入职工的基本信息:
姓名、性别、
出生年月、工作年月、学历、职务、住址、电话等。
这个系统还利用键盘输入提
供的主菜单服务,在主菜单中,有七种操作的调用:
新增职工信息:
SLNode*ListInsert(SLNode*head,DataTypex)
查询职工信息:
Listfind(SLNodehead)
删除职工信息:
ListDelete(SLNode*head)
修改职工信息:
ListModify(SLNode*head)
职工信息排序:
Listpaixu(SLNode*head)
保存职工信息:
put(SLNode*head,FILE*fp)
显示职工信息:
print(SLNode*head)
(2)主函数程序流程图如图3所示:
图3主函数程序流程图
3、查找算法设计
在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查
询操作。
这些查询操作分别为:
对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行
查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等
一些列操作。
查找算法中,利用链表的指针的移动扫描整个职工信息表,利用-6-strcmp()函数判断字符串是否匹配。
查询算法程序流程图如图4所示
图4查询算法程序流程图
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)-7-{
head->
next=q->
next;
head=q;
q->
next=p;
q=head->
p=head;
}
else
p->
s->
next=q;
p=q;
q=p->
flag=1;
排序算法流程图如图5所示:
四、
调试分析
调试分析调试分析
调试分析
测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检
验是否满足规定的需求或弄清预期结果与实际结果之间的差别。
在调试查询修改功能过程中,查询的总是不正确,查询的结果显示,没有找
到职工信息,最后发现查找的结点不正确,查询应该与输入的值和头结点next
比较,而不是头结点。
还有就是查询结点不知道如何循环,最后又看看了记得笔
记和书,才知道如何继续查找而不出错误。
修改时总是不能正确的修改,最初时修改总是修改最后输入的数据。
最后终
于找到了,又是结点写错了。
排序时注意交换的先后顺序就可以了,删除时注意交换结点的顺序。
经验与体会:
本次课程设计是围绕数据结构进行。
根据问题描述可知,需要解决问题并不
复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对
职工信息的插入、删除、查询、排序、修改以及保存。
但是,为了实现该功能,
却需要优秀的算法和数据结构以保证实现的时间和空间效率。
把职工信息存储在
一个单链表中,利用指针实现对职工信息的各项基本操作。
虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意
的地方。
那就是可以排序上面多设计几个算法。
实现多角度排序。
在这个系统中
没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工
信息重复。
经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及
软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软
件工程提供的开发流程和工具对于实现特定功能程序的重要意义。
当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据
结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不
同的算法。
因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,
然后从中选择一个作为实现程序的基础。
此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软
件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测
试其是否正确和完整地实现了问题描述中要求的功能。
五.
用户使用说明
用户使用说明用户使用说明
用户使用说明
进入职工管理系统,首先看到的就是欢迎界面,然后提示:
请输入要录入的
职工数,输入完数字后,就提示:
按次序依次输入职工的姓名、性别、出生年月、
工作年月、学历、职务、电话的信息(注意是依次输入,中间可以用空格,tab,
回车做切换输入),输完信息后自动回到主界面,根据提示:
0.结束管理系统\1.
新增职工信息2.删除职工信息3.查询职工信息4.修改职工信息5.职工信息排序,-9-输入相应操作的数字,
如0,退出简单职工管理系统;
如1,提示依次输入职工信息,录入完毕自动返回主界面;
如2,提示输入删除的姓名,成功正确返回,错误有提示无此员工信息;
如3,会提示查询方式:
0.退出查询系统,回到主菜单1.对姓名进行查询2.
对出生年月进行查询3.对学历进行查询4.对工作年月进行查询,输入相应编号进
行查询;
如4,提示输入修改职工姓名,然后进行依次修改职工所有信息;
如5,提示:
0.退出排序系统,回到主菜单1.对性别进行排序2.对出生年月
进行排序3.对工作年月进行排序4.对姓名进行排序,输入号码进行查询。
六
.测试结果
测试结果测试结果
测试结果
1)进入职工管理系统,如图6所示:
图6主菜单选择界面
2)新增一职工信息并查询全部职工信息,如图7、8所示:
图7新增并查询职工信息界
3)修改职工信息并与前面信息对照,如图8所示:
图8修改职工信息界面
4)按姓名排序职工信息并显示,如图9所示
图9按姓名排序职工信息并显示
5)退出系统,如图10所示:
选择0,退出职工管理系统。
图10退出职工管理系统
七
.附录
参考文献:
[1]李云清,杨庆红,揭安全.数据结构(C语言版)[M].北京:
人民邮
电大学出版社,2004.6
[2]潘彦.算法设计与分析基础[M].北京:
清华大学出版社,2007.1-11-[3]肖梦强,曲秀清.软件工程——原理、方法与应用[M].北京:
中国水利水电出版
社,2005.10
[4]吕凤翥.C++语言程序设计(第2版)[M].北京:
电子工业出版社,2007.2
[5]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:
清华大学出版社,2002.9
实验程序:
#include<
stdio.h>
string.h>
malloc.h>
stdlib.h>
#defineALLMAX100//总共统计的职工的人数
typedefstructNode
{
longintborn_date,work_date,tele_num;
char
sex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];
structNode*next;
}SLNode;
typedefstruct{
char
name[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];
}DataType;
voidListInitiate(SLNode**head)//链表初始化
if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
//动态分配存
储空间
(*head)->
next=NULL;
SLNode*ListInsert(SLNode*head,DataTypex)//职工信息的插入姓名并按照升序
排列
{-12-SLNode*p,*q,*s;
p=head->
if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);
//动态分配存储空
间
born_date=x.born_date;
work_date=x.work_date;
tele_num=x.tele_num;
strcpy(q->
name,x.name);
sex=x.sex;
degree,x.degree);
job,x.job);
address,x.address);
if(head->
next==NULL){//如果只有链表的头结点,没有其他的结点,直接插
入在头结点后面
next->
else{//链表非空
for(;
p;
p=p->
next){
next!
=NULL){
if(strcmp(p->
name,x.name)<
0&
&
strcmp(p->
name,x.name)>
0){//位于两个
结点之间
s=p->
next=s;
break;
//elseif(strcmp(p->
name,x.name)==0)break;
//如果姓名相同则
不插入信息
elseif(strcmp(p->
p->
next==NULL){//链表非空,并
且在排序中是最后一个
break;
}-13-if(strcmp(p->
0){//位于链表头结点之后的位置
s=head->
returnhead;
voidListDelete(SLNode*head)//职工信息的删除
SLNode*p,*s;
charx[20];
s=head;
next==NULL){//链表为空,输出:
名单中无职工信息,无须删除!
printf("
名单中无此职工信息,无须删除!
\n"
);
return;
请输入要删除职工的姓名:
//输入要删除的人的姓名
scanf("
%s"
x);
for(p;
next){//在链表中从头到尾查找输入的人的姓名
name,x)==0){//如果存在,则删除,否则输出:
名单中无
职工信息,无须删除!
next=p->
free(p);
删除成功!
请继续操作!
s=p;
if(p==NULL){//链表本身为空
-14-}
voidListModify(SLNode*head)//职工信息的修改
DataTypex;
SLNode*p;
职工名单无职工信息,无须修改!
请输入要修改的职工姓名:
x.name);
if(strcmp(x.name,p->
name)==0){//查找到了该职工的信息
依次写入该职工的新信息:
请输入职工信息:
\n姓名、性别、出生年月、工作年月、学
历、职务、住址、电话\n"
%s%c%d%d%s%s%s%d"
p->
name,&
sex,&
born_date,&
wo
rk_date,p->
degree,p->
job,p->
address,&
tele_num);
修改成功!
if(p==NULL)//如果链表为空
此职工不存在,无法修改其信息!
voidput(SLNode*head,FILE*fp)//职工信息的保存-15-{
if((fp=fopen("
Employee.txt"
"
w"
))==NULL){//
无法打开'
Employee.txt'
!
exit(0);
for(p=head->
fprintf(fp,"
%s%c%d%d%s%s%s%d\n"
name,p->
sex,p->
born_date,p->
address,p->
if(fclose(fp)){
无法关闭'
voidListfind(SLNodehead)//职工信息的查找
inti,j;
if(head.next==NULL){//链表为空
名单中无职工信息,查询失败!
//返回主菜单
\t*****************************
****\n"
\t*职工信息查询操作
*\n"
\t*
\t*0.退出查询系统,回到主菜单\t\t1.对姓名进行查询\t*\n\t-16-*2.对出生年月进行查询\t\t3.对学历进行查询\t*\n\t*4.对工
作年月进行查询\t\t5.对职务进行查询\t*\n\t*6.对住址进行查询
\t\t7.对电话进行查询\t*\n"
while
(1)
请输入您要选择的操作:
"
%d"
&
i);
if(i==0)//输入0,退出查询系统,回到主菜单
elseif(i==1){//输入1,对姓名进行查询
p=head.next;
请输入姓名:
j=0;
name,x.name)==0){//如果存在这个人,那么j自加
++j;
\n姓名、性别、出生年月、工作年月、学历、职务、
住址、电话\n"
work_
date,p->
if(j==0)//表示没有找到输入的信息
职工名单中不存在此人!
elseprintf("
查询成功!
继续操作!
elseif(i==2){//输入2,对出生年月进行查询
请输入出生年月:
x.born_date);
born_date==x.born_date){//输入的出生年月在链表中存在-17-++j;
//如果存在这个人,那么j自加
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 职工 管理 系统 课程设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)