职工信息管理系统设计报告.docx
- 文档编号:25474659
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:27
- 大小:277.93KB
职工信息管理系统设计报告.docx
《职工信息管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
职工信息管理系统设计报告
电子科技大学计算机系
实践专周设计报告
课程名称:
___数据结构强化实践____
设计题目:
_____职工信息管理______
计算机系制
2014年6月
第一章引言
1.1问题分析
(1)加深对面向对象设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
(2)学会设计数据结构。
其中包括对以类的形态出现的链表、对象数组、数据文件等知识的运用。
(3)提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
(4)训练高级语言程序调试能力,能将一个中小型各级组织系统联调通过。
(5)开发一个小型企业的职工信息管理系统,掌握系统研发整个过程。
(6)培养分析问题、解决实际问题的能力。
1.2设计目标
1.2.1基本功能
设计一个实用的职工信息管理系统,能以简便高效的方式对职工信息进行管理和检索、排序。
具体要求如下:
(1)数据录入:
以链表形式存放职工信息并以文件形式保存。
能够实现职工工号、姓名、工作量的录入;可以专门定义链表类,在链表类中定义查找、排序等方法。
定义职工类,每一个职工对象均为链表中的一个结点,也可以采用结构体的方式来存放。
每插入一个结点时,要求按照冒泡排序算法进行排序,以职工ID号从小到大进行排序。
所有职工信息保存在一个文件当中。
(2)查询职工信息:
能实现指定职工姓名或ID号的查询功能。
(3)增加职工记录;
(4)删除职工信息:
能将指定职工信息删除。
(5)统计职工信息:
统计链表中结点的个数
(6)能够对职工工资进行计算并输出。
(7)保存并显示查询信息
(8)退出系统
(9)系统以菜单方式工作,界面友好,易于操作,容错性好。
用户通过输入不同的数字进入不同的菜单。
次级菜单主要显示本程序的功能,主要的功能有录入职工信息、查询信息、添加职工记录、删除职工记录、统计职工工资信息、显示所有数据记录信息。
1.3信息描述
职工信息包括职工ID(职工ID不能重复)、姓名、基本工资、岗位津贴、医疗保险、公积金等。
1.4功能描述
图1程序功能结构图
(1)在程序的主界面,显示系统的所有功能,包括:
录入职工信息、浏览所有职工、查找职工、修改职工、删除职工和退出系统。
系统应提示用户如何选择相应功能。
(2)当用户选择录入职工信息后,系统进入录入职工信息界面,在该界面应提示用户输入相应信息,当用户正确录入职工信息后,自动生成一个不重复的职工ID号,并将该职工的信息以链表形式存放并以文件形式存放在职工信息文件的最后,并给出录入成功的提示并提示用户是否需要继续录入,根据用户的选择做出相应的处理。
(3)当用户选择浏览所有职工后,系统进入浏览所有职工界面,在该界面中显示所有职工的主要信息(所显示信息由用户确定)。
(4)当用户选择查找职工后,系统提示用户选择查询的关键字(基本要求是:
可按职工姓名、电话号码进行查询,该项用户可以扩展,可适当增加其他关键字)。
当用户选择查询关键字,并按提示输入其值后,系统显示查询后的结果(如有该职工,则显示该职工的详细信息,否则给出适当提示)。
(5)当用户选择修改职工后,提示用户输入需修改的职工ID,根据该ID查询到相应的职工信息,并显示,用户按提示输入更改后的职工信息,系统更新相应的职工信息并提示用户。
(6)当用户选择删除职工后,需提示用户输入需删除的职工ID,根据该ID查询到相应的职工信息,并显示,经用户确认后,系统删除相应的职工信息并提示用户。
(7)当用户选择退出系统后,退出程序。
1.5设计思路
本系统主要的设计思想是实现对职工信息的录入、删除、排序、查询等主要功能。
职工信息以文件的形式存储。
系统的人机接口采用简单的字符界面进行交互。
系统的设计方法是结构化设计方法,采用C语言进行开发。
软件开发平台采用VisualC++6.0,主要考虑在VC中可以使用中文,用户交互界面设计比较美观清晰
第二章总体设计
2.1程序功能结构图
图2-1程序功能结构图
2.2程序流程图
2.2.1.主函数
2.2.2显示函数
2.2.3输入函数
2.2.4查询函数
2.2.5删除函数
2.2.6排序函数
第三章详细设计
3.1存储结构设计
staticchartempstr[20]用以临时存储数据,最终存入文件information.txt中。
3.2模块功能及算法设计
3.2.1函数功能描述
voidcin(void);/*输入信息*/
intidentify(intnum);/*对职工号是否重复进行验证*/
voidcout(void);/*输出信息*/
voidsort(void);/*查询排序*/
voiddel(void);/*删除职工信息*/
intrecord(void);/*将文件中的数据录入结构体数组中*/
voidiyear(intj);/*按工作年月排序*/
voideducation(intj);/*按学历排序*/
voidmodify(void);/*修改职工信息*/
voiddescending(void);/*学历降序输出*/
voidascending(void);/*学历升序输出*/
voidprintmsg(inti);/*输出信息*/
voidseek(void);//查询员工信息
第四章系统实现
4.1系统主界面
主界面运行效果如图4-1所示。
图4-1主界面运行效果
核心代码如下:
intmain(void)
{
intflag=1;
while(flag)
{
system("cls");/*清屏*/
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("☆欢迎登陆职工信息管理系统!
☆\n");
printf("☆【1】输入职工信息【2】输出职工信息☆\n");
printf("☆【3】信息查询排序【4】删除职工信息☆\n");
printf("☆【5】修改职工信息【6】查询职工信息☆\n");
printf("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
printf("请输入以上数字,选择相应的功能:
");
switch(getchar())
{
case'1':
cin();break;/*调用输入信息的函数*/
case'2':
cout();break;/*调用输出信息的函数*/
case'3':
sort();break;/*调用排序的函数*/
case'4':
del();break;/*调用删除职工信息函数*/
case'5':
modify();break;/*调用修改职工信息的函数*/
case'6':
seek();break;//查询员工信息
default:
flag=0;break;/*跳出循环体,结束程序*/
}
}
return0;
}
4.2录入职工信息信息
录入界面运行效果如图4-2所示
图4-2录入界面运行效果
核心代码如下:
voidcin(void)/*输入信息的函数*/
{
FILE*fp;
intreceive;/*接收返回值*/
system("cls");
printf("================\n");
printf("添加职工信息\n");
printf("================\n");
if((fp=fopen("information.txt","a+"))==NULL)/*为读写打开一个文本文件*/
{
printf("文件打开错误\n");
exit
(1);/*关闭所有文件,终止正在执行的程序,待用户检查出错误,修改后再运行*/
}
newn=(structstaff*)malloc(sizeof(structstaff));
if(head==NULL)/*连接链表*/
{
head=newn;
thisn=newn;
thisn->next=NULL;
}
else
{
thisn=head;
while(thisn->next!
=NULL)
thisn=thisn->next;
thisn->next=newn;
thisn=newn;
}
getchar();/*接收缓冲区中选择菜单时多余的回车*/
fputc('\n',fp);/*每次记录信息前先换行*/
printf("请输入职工号:
");
gets(tempstr);
thisn->num=atoi(tempstr);/*atoi()将字符串转换成整型数*/
receive=identify(thisn->num);
while(receive)
{
printf("请输入职工号:
");
gets(tempstr);thisn->num=atoi(tempstr);
receive=identify(thisn->num);
}
fputs(tempstr,fp);
fputs("",fp);/*信息排版的需要*/
printf("请输入姓名:
");
gets(thisn->name);
fputs(thisn->name,fp);
fputs("",fp);
printf("请输入性别(填F或M):
");
thisn->sex=getchar();getchar();
fputc(thisn->sex,fp);
fputs("",fp);
printf("请输入出生年月(如199001):
");
gets(tempstr);thisn->byear=atoi(tempstr);
fputs(tempstr,fp);
fputs("",fp);
printf("请输入工作年月(如199001):
");
gets(tempstr);thisn->iyear=atoi(tempstr);
fputs(tempstr,fp);
fputs("",fp);
printf("请输入学历(博士、硕士、本科、大专、高中、中专、初中、小学、其他):
");
gets(thisn->education);
fputs(thisn->education,fp);
fputs("",fp);
printf("请输入职务:
");
gets(thisn->duty);
fputs(thisn->duty,fp);
fputs("",fp);
printf("请输入地址:
");
gets(thisn->address);
fputs(thisn->address,fp);
fputs("",fp);
printf("请输入电话号码:
");
gets(thisn->phone);
fputs(thisn->phone,fp);
thisn->next=NULL;
fclose(fp);
system("cls");/*清屏*/
}
4.3浏览所有职工信息信息
输出界面运行效果如图4-3所示
图4-3输出界面运行效果
voidcout(void)/*输出信息*/
{
FILE*fp;
ints,i,j;
system("cls");
if((fp=fopen("information.txt","r"))==NULL)
{
printf("文件打开错误");
exit
(1);
}
for(i=0;i
{
fscanf(fp,"%d%s%c%ld%ld%s%s%s%s\n",
&sta[i].num,&sta[i].name,&sta[i].sex,&sta[i].byear,&sta[i].iyear,&sta[i].education,&sta[i].duty,
&sta[i].address,&sta[i].phone);
if(sta[i].num==0)/*动态限制循环输出的次数*/
break;
}
s=record();
setlocale(LC_COLLATE,"");
for(j=0;j for(i=0;i { if(strcoll(sta[i].name,sta[i+1].name)>0) { temp=sta[i]; sta[i]=sta[i+1]; sta[i+1]=temp; } } printf("工号姓名性别出生年月工作年月学历职务地址电话\n"); printf("-----------------------------------------------------------------------------\n"); for(i=0;i printmsg(i); fclose(fp); getchar();/*接收回车*/ printf("\n\n\n\n\n回到主界面请按r退出系统请按其他键\n"); switch(getchar()) { case'r': getchar();system("cls");break;/*getchar()接收回车*/ default: exit(0); } } 4.4查找职工信息 查询界面运行效果如图4-4所示 图4-4查询界面运行效果 核心代码如下: voidseek()//查询职工信息 { FILE*fp; inti,num,j,c;/*num是要修改的职工号,j用于计算职工人数*/ charnam[20]; system("cls"); if((fp=fopen("information.txt","r"))==NULL) { printf("文件打开错误"); exit (1); } for(i=0,j=0;i { fscanf(fp,"%d%s%c%ld%ld%s%s%s%s\n", &sta[i].num,&sta[i].name,&sta[i].sex,&sta[i].byear,&sta[i].iyear,&sta[i].education,&sta[i].duty, &sta[i].address,&sta[i].phone); } printf("1.按编号查找2.按姓名查找\n"); scanf("%d",&c); if(c==1) {printf("请输入要查询的职工编号: "); scanf("%d",&num); printf("工号姓名性别出生年月工作年月学历职务地址电话\n"); printf("-----------------------------------------------------------------------------\n"); for(i=0;i {if(sta[i].num==num) printmsg(i); } } else{ printf("请输入要查询的职工姓名: "); scanf("%s",nam); printf("工号姓名性别出生年月工作年月学历职务地址电话\n"); printf("-----------------------------------------------------------------------------\n"); for(i=0;i {if(strcmp(sta[i].name,nam)==0) printmsg(i); } } getchar(); printf("\n\n\n\n\n回到主界面请按r退出系统请按其他键\n"); switch(getchar()) { case'r': getchar();system("cls");break;/*getchar()接收回车*/ default: exit(0); } } 4.5修改职工信息 修改界面运行效果如图4-5所示 图4-5修改界面运行效果 核心代码如下: voidmodify(void)/*修改职工信息*/ { FILE*fp; inti,num,j;/*num是要修改的职工号,j用于计算职工人数*/ getchar();/*接收回车*/ system("cls"); printf("请输入要修改的职工号码: "); scanf("%d",&num); getchar(); if((fp=fopen("information.txt","r"))==NULL) { printf("文件打开错误"); exit (1); } for(i=0,j=0;i { fscanf(fp,"%d%s%c%ld%ld%s%s%s%s\n", &sta[i].num,&sta[i].name,&sta[i].sex,&sta[i].byear,&sta[i].iyear,&sta[i].education,&sta[i].duty, &sta[i].address,&sta[i].phone); } for(i=0;i {if(sta[i].num==num) { printf("【1】修改姓名【2】修改学历\n"); printf("【3】修改职务【4】修改住址\n"); printf("【5】修改电话\n"); printf("请输入以上数字,选择相应的功能: "); switch(getchar()) { case'1': getchar(); printf("请输入新姓名: "); gets(sta[i].name); printf("修改成功! 按任意键返回主界面"); getchar(); break; case'2': getchar(); printf("请输入新学历(博士、硕士、本科、大专、高中、中专、初中、小学、其他): "); gets(sta[i].education); printf("修改成功! 按任意键返回主界面"); getchar(); break; case'3': getchar(); printf("请输入新职务: "); gets(sta[i].duty); printf("修改成功! 按任意键返回主界面"); getchar();break; case'4': getchar(); printf("请输入新地址: "); gets(sta[i].address); printf("修改成功! 按任意键返回主界面"); getchar();break; case'5': getchar(); printf("请输入新电话号码: "); gets(sta[i].phone); printf("修改成功! 按任意键返回主界面"); getchar();break; default: break; } } } fclose(fp); if((fp=fopen("information.txt","w"))==NULL)/*重新向文件输入所有信息*/ { printf("文件打开错误"); exit (1); } for(i=0;i { sprintf(tempstr,"%d",sta[i].num);/*将整型数转化成字符串*/ fputs(tempstr,fp); fputs("",fp); fputs(sta[i].name,fp); fputs("",fp); fputc(sta[i].sex,fp); fputs("",fp); sprintf(tempstr,"%ld",sta[i].byear); fputs(tempstr,fp); fputs("",fp); sprintf(tempstr,"%ld",sta[i].iyear); fputs(tempstr,fp); fputs("",fp); fputs(sta[i].education,fp); fputs("",fp); fputs(sta[i].duty,fp); fputs("",fp); fputs(sta[i].address,fp); fputs("",fp); fputs(sta[i].phone,fp); fputc('\n',fp); } fclose(fp); } 4.6职工信息排序 排序界面运行效果如图4-6 图4-6排序界面运行效果 核心代码如下: voidsort(void)/*查询排序*/ { intj; getchar();/*接收回车*/ j=record(); printf("【1】按工作年月排序【2】按学历排序\n"); printf("请输入以上数字,选择相应的功能: "); switch(getchar()) { case'1': iyear(j);break; case'2': education(j);break; } getchar();/*接收回车*/ getchar();/*接收回车*/ system("cls"); printf("【1】回到主界面【2】退出系统\n"); printf("请输入以上数字,选择相应的功能: "); switch(getchar()) { case'1': getchar();system("cls");break; default: exit (1); } } 第五章测试和总结 5.1测试和调试 ……(略) 5.2系统存在的问题及解决方案 ……(略) 5.3收获及心得体会 ……(略) 参考文献 致谢 我要首先感谢……(略) 附录 附录一: 程序设计清单 (略)… 电子科技大学成都学院 2017届
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职工 信息管理 系统 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)