职工信息管理系统课设报告.docx
- 文档编号:29681504
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:40
- 大小:638.67KB
职工信息管理系统课设报告.docx
《职工信息管理系统课设报告.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统课设报告.docx(40页珍藏版)》请在冰豆网上搜索。
职工信息管理系统课设报告
*******************
实践教学
*******************
计算机与通信学院
20年春季学期
C程序设计课程设计
题目:
职工信息管理系统
专业班级:
姓名:
学号:
指导教师:
成绩:
_______________
摘要
职工信息管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。
使用计算机对职工信息进行管理,具有手工管理所无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高职工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。
本系统利用C语言开发,实现了简单的职工基本信息的录入、追加、修改、查询、删除等操作,并且能利用文件系统长久地保留原始数据。
通过本系统的开发,我们熟悉了面向过程的程序设计的基本方法和步骤,对于C语言有了更深入的理解,并且较好地掌握了C语言的编程方法和技术。
关键字:
C语言;职工;信息管理系统;函数
一、需求分析
1.1问题描述
对单位的职工进行管理,包括插入、删除、查找、排序等功能。
1.2要求
职工对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等信息。
(1)新增一名职工:
将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:
从职工管理文件中删除一名职工对象。
(3)查询:
从职工管理文件中查询符合某些条件的职工。
(4)修改:
检索某个职工对象,对其某些属性进行修改。
(5)排序:
按某种需要对职工对象文件进行排序。
1.3实现功能
(1)由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内存。
(2)对职工对象中的“姓名”按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。
二、总体设计
根据需求分析,为了实现系统功能,我确定职工信息管理系统总体模块如图1所示。
图1工资管理系统功能模块图
三、详细设计
3.1数据定义
3.1.1定义表结点(typedefstructNode)
ypedefstructNode{
longintborn_time,work_time,tele_num;
charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];
structNode*next;
}SLNode;
3.1.2定义职工信息(typedefstructDatatype)
typedefstruct{
longintborn_time,work_time,tele_num;
charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];
}DataType;
3.1.3初始化链表(ListInitiate(SLNode**head))
voidListInitiate(SLNode**head)//---------------------------------链表初始化
{
if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit
(1);//动态分配存储空间
(*head)->next=NULL;
}
3.2主函数设计
根据详细设计要求,可以得到主函数代码及其对应的程序流程图。
在主函数中,实现了友好的界面设计。
系统需要输入职工的基本信息:
姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。
这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:
新增职工信息:
SLNode*ListInsert(SLNode*head,DataTypex)
查询职工信息:
Listfind(SLNodehead)
删除职工信息:
ListDelete(SLNode*head)
修改职工信息:
ListModify(SLNode*head)
职工信息排序:
Listpaixu(SLNode*head)
保存职工信息:
put(SLNode*head,FILE*fp)
显示职工信息:
print(SLNode*head)
3.3算法流程图
3.3.1保存函数Save()的算法流程图如图2所示。
图2保存函数Save()的算法流程图
3.3.2主函数程序流程图如图3所示。
图3主函数程序流程图
3.3.3按姓名查找的算法流程图如图4所示。
图4按姓名查找的算法流程图
3.3.4排序算法流程图如图5所示。
图5排序算法流程图
四、编码
4.1总体框架
0,退出职工管理系统;
1,提示依次输入职工信息,录入完毕自动返回主界面;
2,提示输入删除的姓名,成功正确返回,错误有提示无此员工信息;
3,会提示查询方式:
0.退出查询系统,回到主菜单1.对姓名进行查询2.对出生年月进行查询3.对学历进行查询4.对工作年月进行查询,输入相应编号进行查询;
4,提示输入修改职工姓名,然后进行依次修改职工所有信息;
5,提示:
0.退出排序系统,回到主菜单1.对性别进行排序2.对出生年月进行排序3.对工作年月进行排序4.对姓名进行排序,输入号码进行查询。
(详细见附录)
4.2模块设计
模块
函数或数据结构
功能
链表数据类型
typedefstructNode
定义链表结点
typedefstructDatatype
定义职工信息
ListInitiate(SLNode*head)
初始化链表
系统处理模块
SLNode*ListInsert(SLNode*head,DataTypex)
插入职工信息
ListDelete(SLNode*head)
删除职工信息
ListModify(SLNode*head)
修改职工信息
put(SLNode*head,FILE*fp)
保存职工信息
Listfind(SLNodehead)
查询职工信息
Listpaixu(SLNode*head)
职工信息排序
输出模块
print(SLNode*head)
显示职工信息
五、测试
5.1职工管理系统主界面
在VisualC++6.0中运行本系统,可以得到图5所示的录入职工人数界面。
图7主菜单界面
在图5中输入0,进入图6所示的系统主菜单界面。
图6系统主菜单界面
5.2进入新增职工信息界面
在图6中输入1,进入图7所示的新增职工界面。
图7新增职工信息界面
5.3进入删除职工信息界面
在图7中输入2,进入图8所示的删除职工信息界面。
图8删除职工信息界面
5.4进入查询职工信息界面
在图8中输入3,进入图9所示的查询职工信息界面。
图9查询职工信息界面
在图9中输入1,进入图10所示的对姓名查询界面。
图10对姓名进行查询
5.5进入修改职工信息界面
在图10中先输入0返回图5所示的主菜单,再输入4,进入11图所示的修改职工信息界面。
图11修改职工信息系统界面
5.6进入职工信息排序界面
在图11中输入5,进入图12所示的职工信息排序界面。
图12职工信息排序界面
5.7退出系统
在图12中先输入0返回图5所示的主菜单,再输入0退出职工管理系统
图13退出职工管理系统
六、设计总结
本次课程设计是围绕数据结构进行。
根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。
但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。
把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。
虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。
那就是可以排序上面多设计几个算法。
实现多角度排序。
在这个系统中没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工信息重复。
经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。
当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。
因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。
此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。
致谢
通过一周的努力,我们顺利完成这一次的课程设计。
在这里,首先感谢指导老师x老师在知识和技术上的指导和帮助。
在x老师的帮助下,我们克服了许多技术上的难题,顺利地完成这次课程设计。
同时,也要感谢与我同做一个课题的xxx同学。
在我们两人的共同努力下,终于顺利地完成了这次课程设计。
参考文献
1.姜灵芝,余健.C语言课程设计案例精编.北京:
清华大学出版社,2008
2.王新,孙雷.C语言课程设计.北京:
清华大学出版社,2009
3.游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.北京:
清华大学出版社,2011
4.王连相.C/C++程序设计上机指导与测试.北京:
中国铁道出版社,2006
5.C语言函数手册,机械工业出版社,1999
附录
#include
#include
#include
#include
#defineALLMAX100//总共统计的职工的人数
typedefstructNode
{
longintborn_date,work_date,tele_num;
charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];
structNode*next;
}SLNode;
typedefstruct{
longintborn_date,work_date,tele_num;
charname[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)//职工信息的插入姓名并按照升序排列
{
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,x.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,x.name)<0&&strcmp(p->next->name,x.name)>0){//位于两个结点之间
s=p->next;
p->next=q;
q->next=s;
break;
}
//elseif(strcmp(p->name,x.name)==0)break;//如果姓名相同则不插入信息
}
elseif(strcmp(p->name,x.name)<0&&p->next==NULL){//链表非空,并且在排序中是最后一个
p->next=q;
q->next=NULL;
break;
}
if(strcmp(p->name,x.name)>0){//位于链表头结点之后的位置
s=head->next;
head->next=q;
q->next=s;
break;
}
}
}
returnhead;
}
voidListDelete(SLNode*head)//职工信息的删除
{
SLNode*p,*s;
charx[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");
break;
}
s=p;
}
if(p==NULL){//链表本身为空
printf("名单中无此职工信息,无须删除!
\n");
}
}
voidListModify(SLNode*head)//职工信息的修改
{
DataTypex;
SLNode*p;
p=head->next;
if(p==NULL){//链表本身为空
printf("职工名单无职工信息,无须修改!
\n");
return;
}
printf("请输入要修改的职工姓名:
\n");
scanf("%s",x.name);
for(;p;p=p->next)
{
if(strcmp(x.name,p->name)==0){//查找到了该职工的信息
printf("依次写入该职工的新信息:
\n");
printf("请输入职工信息:
\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");
scanf("%s%c%d%d%s%s%s%d",p->name,&p->sex,&p->born_date,&p->work_date,p->degree,p->job,p->address,&p->tele_num);
printf("修改成功!
请继续操作!
\n");
break;
}
}
if(p==NULL)//如果链表为空
printf("此职工不存在,无法修改其信息!
\n");
}
voidput(SLNode*head,FILE*fp)//职工信息的保存
{
SLNode*p;
if((fp=fopen("Employee.txt","w"))==NULL){//
printf("无法打开'Employee.txt'!
\n");
exit(0);
}
for(p=head->next;p;p=p->next)
{
fprintf(fp,"%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);
}
if(fclose(fp)){
printf("无法关闭'Employee.txt'!
\n");exit(0);
}
}
voidListfind(SLNodehead)//职工信息的查找
{
inti,j;
SLNode*p;
DataTypex;
if(head.next==NULL){//链表为空
printf("名单中无职工信息,查询失败!
\n");
return;
}
//返回主菜单
printf("\n");
printf("\t*********************************\n");
printf("\t*职工信息查询操作*\n");
printf("\t**\n");
printf("\t*0.退出查询系统,回到主菜单\t\t1.对姓名进行查询\t*\n\t*2.对出生年月进行查询\t\t3.对学历进行查询\t*\n\t*4.对工作年月进行查询\t\t5.对职务进行查询\t*\n\t*6.对住址进行查询\t\t7.对电话进行查询\t*\n");
printf("\t*********************************\n");
while
(1)
{
printf("请输入您要选择的操作:
");
scanf("%d",&i);
if(i==0)//输入0,退出查询系统,回到主菜单
break;
elseif(i==1){//输入1,对姓名进行查询
p=head.next;
printf("请输入姓名:
");
scanf("%s",x.name);
j=0;
for(p;p;p=p->next){
if(strcmp(p->name,x.name)==0){//如果存在这个人,那么j自加
++j;
printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");
printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中不存在此人!
\n");
elseprintf("查询成功!
继续操作!
\n");
}
elseif(i==2){//输入2,对出生年月进行查询
p=head.next;
printf("请输入出生年月:
");
scanf("%d",&x.born_date);
j=0;
for(p;p;p=p->next){
if(p->born_date==x.born_date){//输入的出生年月在链表中存在
++j;//如果存在这个人,那么j自加
printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");
printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有这个时间出生的!
\n");
elseprintf("查询成功!
请继续操作!
\n");
}
elseif(i==4){//输入4,对工作年月进行查询
p=head.next;
printf("请输入工作年月:
");
scanf("%d",&x.work_date);
j=0;
for(p;p;p=p->next){
if(p->work_date==x.work_date){
++j;//如果存在这个人,那么j自加
printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");
printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有这个时间工作的!
\n");
elseprintf("查询成功!
请继续操作!
\n");
}
elseif(i==3){//输入3,对学历进行查询
p=head.next;
printf("请输入学历:
");
scanf("%s",x.degree);
j=0;
for(p;p;p=p->next){
if(strcmp(p->degree,x.degree)==0){
++j;//如果存在这个人,那么j自加
printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");
printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);
}
}
if(j==0)//表示没有找到输入的信息
printf("职工名单中没有这种学历的!
\n");
elseprintf("查询成功!
请继续操作!
\n");
}
elseif(i==5){//输入5,对职务进行查询
p=head.next;
printf("请输入职务:
");
scanf("%s",x.job);
j=0;
for(p;p;p=p->next){
if(strcmp(p->job,x.job)==0){
++j;//如果存在这个人,那么j自加
printf("\n姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");
printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->born_date,p->work_date,p->degree,p->job,p->address,p->tele_num);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职工 信息管理 系统 报告