简单的职工管理系统设计.docx
- 文档编号:23012230
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:62
- 大小:484.74KB
简单的职工管理系统设计.docx
《简单的职工管理系统设计.docx》由会员分享,可在线阅读,更多相关《简单的职工管理系统设计.docx(62页珍藏版)》请在冰豆网上搜索。
简单的职工管理系统设计
简单的职工管理系统设计
一、问题描述
对单位的职工进行管理,包括录入、删除、查询、修改、排序、显示软件信息等功能。
1.要求
职工信息包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:
将新增职工对象录入职工管理文件中。
(2)删除一名职工:
从职工管理文件中删除一名职工对象。
(3)查询:
从职工管理文件中按条件查询符合某些条件的职工。
(4)修改:
检索某个职工对象,按条件对其某些属性进行修改。
(5)排序:
按名字首字母对职工信息对职工对象文件进行排序。
(6)显示:
显示软件信息等功能。
二、设计
1.信息输入:
要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。
2.信息处理:
由于职工会存在流动周转,职工的信息会有所变化,因此该算法实现了员工的录入、删除、查询、修改、排序等功能
3.
信息输出:
根据不同的操作,输出相应数据。
4.结构设计
5.函数类型
函数名
功能
structworker
定义链表结点
voidchushi()
每次开始操作后,自动把文件里的数据写入链表
voidinput()
职工信息的录入
voiddelet()
职工信息的删除(按姓名删除)
voidsearch()
职工信息查询(按姓名、职位、或者电话查询)
voidsearch_name()
按姓名查询职工信息
voidsearch_post()
按职位查询职工信息
voidsearch_tele()
按电话查询职工信息
voidchange()
职工信息的修改(按各种条件修改)
voidchange_name()
修改职工的姓名信息
voidchange_sex()
修改职工的性别信息
......
voidchange_tele()
修改职工的电话信息
voidinorder()
按职工名字首字母进行排序(升序)
voiddisplay(structworker*qd)
特定职工信息显示
voidcx()
将链表中的数据写入文件
voidrjxx()
显示软件信息
6.函数间的调用(主函数内)
核心代码
voidmain()
{
intn;
QD=(structworker*)malloc(sizeof(structworker));
QD->next=NULL;
chushi();
do{
scanf("%d",&n);
while(n>8||n<1)
{
scanf("%d",&n);
}
switch(n)
{
case1:
input();break;信息录入
case2:
delet();break;信息删除
case3:
search();break;信息查询
case4:
change();break;信息修改
case5:
inorder();break;信息排序
case6:
system("CLS");break;清屏
case7:
rjxx();break;软件信息
}
cx();
}while(n!
=8);
}
三、测试
1.主界面
2.录入职工信息
(1)核心代码
voidinput()
{
structworker*p;
charqname[20];
intwu;
do
{
scanf("%s",qname);
p=(structworker*)malloc(sizeof(structworker));
if(p==NULL)
{
return;
}
strcpy(p->name,qname);
scanf("%s",qname);
strcpy(p->sex,qname);
scanf("%s",qname);
strcpy(p->birday,qname);
scanf("%s",qname);
strcpy(p->workday,qname);
scanf("%s",qname);
strcpy(p->edu,qname);
scanf("%s",qname);
strcpy(p->post,qname);
scanf("%s",qname);
strcpy(p->add,qname);
scanf("%s",qname);
strcpy(p->tele,qname);
p->next=QD->next;
QD->next=p;
scanf("%d",&wu);
printf("\n\n");
system("CLS");
}while(wu==1);
}
。
。
。
。
。
。
。
3.删除职工信息
(1)核心代码
voiddelet()
{
structworker*qd,*qb;
charqname[20];
intwu,n;
do
{
wu=1;
scanf("%s",qname);
printf("\n");
qb=QD;
for(qd=QD->next;qd!
=NULL;qb=qd,qd=qd->next)
{
if(strcmp(qd->name,qname)==0)
break;
}
if(qd==NULL)
{
scanf("%d",&wu);
system("CLS");
if(wu)
return;
}
else
{
display(qd);
scanf("%d",&n);
if(n==1)
{
qb->next=qd->next;
free(qd);
}
if(n==2)
return;
}
scanf("%d",&wu);
if(wu)
return;
}while(wu==0);
}
4.查询职工信息
(1)核心代码
查询部件(以按名字查询为例)
voidsearch_name()
{
structworker*qd;
charqname[20];
intwu,flag=0;
do{
scanf("%s",qname);
for(qd=QD->next;qd!
=0;qd=qd->next)
{
if(strcmp(qname,qd->name)==0)
{
if(flag==0)
{
flag=1;
}
if(flag=1)
{
display(qd);
}
}
}
if(flag==0)
{
.....
}
scanf("%d",&wu);
system("CLS");
if(wu)
return;
}while(wu==0);
}
查找主代码
voidsearch()
{
intn,wu=0;
do
{
scanf("%d",&n);
if(n>=1&&n<=4)
{
switch(n)
{
case1:
search_name();break;
case2:
search_post();break;
case3:
search_tele();break;
case4:
system("CLS");return;
}
}
else
{
scanf("%d",&wu);
}
}while(wu==0);
}
4.修改职工信息
(1)核心代码
修改部件(以修改名字为例)
voidchange_name(structworker*qd)
{
intn;
charqname[20];
scanf("%d",&n);
if(n)
{
scanf("%s",qname);
strcpy(qd->name,qname);
scanf("%d",&n);
}
system("CLS");
return;
}
修改主代码
voidchange()
{
structworker*qd;
charqname[20];
intn;
do{
scanf("%s",qname);
for(qd=QD->next;qd!
=0;qd=qd->next)
{
if(strcmp(qname,qd->name)==0)
break;
}
if(qd==NULL)
{
scanf("%d",&n);
}
else
{
display(qd);
scanf("%d",&n);
while(n<=1&&n>=9)
{
scanf("%d",&n);
}
switch(n)
{
case1:
change_name(qd);return;
case2:
change_sex(qd);return;
case3:
change_birday(qd);return;
case4:
change_workday(qd);return;
case5:
change_edu(qd);return;
case6:
change_post(qd);return;
case7:
change_add(qd);return;
case8:
change_tele(qd);return;
case9:
return;
}
}
}while(n!
=9);
}
找不到所查询的信息后,
找到所查询的信息后
输入1(选择修改姓名)
5.给职工信息排序
(1)核心代码
voidinorder()
{
structworker*p,*q,*pp,*last;
intn;
last=QD;
scanf("%d",&n);
if(!
n)
{
return;
}
while(last->next!
=NULL)
last=last->next;
while(last!
=QD->next)
{
pp=QD;
p=pp->next;
while(p!
=last)
{
q=p->next;
if(strcmp(p->name,q->name)>0)
{
pp->next=q;p->next=q->next;q->next=p;
if(last==q)last=p;
}
pp=((strcmp(p->name,q->name)<0)?
p:
q);
p=pp->next;
}
last=pp;
}
scanf("%d",&n);
system("CLS");
}
6.删除职工信息
(1)核心代码
voiddelet()
{
structworker*qd,*qb;
charqname[20];
intwu,n;
do
{
wu=1;
scanf("%s",qname);
qb=QD;
for(qd=QD->next;qd!
=NULL;qb=qd,qd=qd->next)
{
if(strcmp(qd->name,qname)==0)
break;
}
if(qd==NULL)
{
scanf("%d",&wu);
if(wu)
return;
}
else
{
display(qd);
scanf("%d",&n);
printf("\n");
if(n==1)
{
qb->next=qd->next;
free(qd);
}
if(n==2)
return;
}
scanf("%d",&wu);
if(wu)
return;
}while(wu==0);
}
7.显示软件信息
8.初始化
(1)核心代码
voidchushi()
{
structworker*p;
charqdname[20];
intwu;
FILE*fp;
if((fp=fopen("职工数据.txt","r"))==NULL)
{
printf("Error!
\n");
exit(0);
}
while(fscanf(fp,"%s",qdname)!
=EOF)
{
//fscanf(fp,"%s",qdname);
p=(structworker*)malloc(sizeof(structworker));
p->next=NULL;
if(p==NULL)
{
return;
}
strcpy(p->name,qdname);
fscanf(fp,"%s",p->sex);
fscanf(fp,"%s",p->birday);
fscanf(fp,"%s",p->workday);
fscanf(fp,"%s",p->edu);
fscanf(fp,"%s",p->post);
fscanf(fp,"%s",p->add);
fscanf(fp,"%s",p->tele);
p->next=QD->next;
QD->next=p;
fscanf(fp,"%d",&wu);
}
fclose(fp);
}
9.数据写入文件
(1)核心代码
voidcx()
{
FILE*fp;
structworker*q;
fp=fopen("职工数据.txt","w");
for(q=QD->next;q!
=NULL;q=q->next)
{
fprintf(fp,"%s%s%s%s%s%s%s%s\n",q->name,q->sex,q->birday,q->workday,q->edu,q->post,q->add,q->tele);
}
fclose(fp);
}
8.问题分析及解决
1)首先是一些简单的问题。
一开始把电话以数字的形式存入,后来为了方便起见,统一换成了字符串类型。
2)最大的问题是文件数据的读入以及读出。
由于是上个学期的知识并且不扎实,一开始根本无从下手。
后来翻了一下书,然后把录入功能这一块的数据读入文件的代码写出来了,但是后来根本不知道要去初始化(也就是把文件里的数据读入链表里),结果出现了乱码。
3)初始化那一块我是参考网上的一段代码硬着头皮写的,后来还是出了些小问题。
起先是以文件结束作为条件,后来我去请教了学长,最后以fscanf(fp,"%s",qdname)!
=EOF做为条件解决了问题。
4)对于删除、修改以及排序等操作,链表里的数据很容易修改,但是文件里的数据我一开始不知道怎么去修改。
后来我就去问了老师。
老师说,把链表里的数据都修改之后,最后把链表里的数据重新读入文件就可以了,真是一语惊醒梦中人。
后来顺利解决了。
四.使用说明和作业小结
1)使用说明:
进入职工管理系统,首先看到的就是“吃货公司职工管理系统v1.3”的字样,然后提示:
“请输入相应的数字完成相应功能”,输入完数字后,
如1,出现“亲,请输入您的姓名,格式如haha”,接下来会出现“亲,请输入您的性别w或m,w:
woman,m:
man”等等。
如2,会出现“欢迎使用删除功能”。
“亲,请输入您所需删除的职工信息”字样,提示输入删除的姓名,成功会自动打印一份新的职工信息表,错误有提示:
亲,没有找到您要删除的职工信息!
错误之后,可以重新输入查询,也可以返回主界面;
如3,会出现“欢迎使用查询功能”,然后输入不同的数字完成不同条件的查询。
如4,会出现“欢迎使用修改功能”提示输入修改职工姓名,如果存在,会显示对应的信息。
并且有修改选项,可以对职工的特定信息进行修改;如是不存在,则会出现:
亲,没有找到您要删除的职工信息!
!
如5,按首字母顺序对名字进行排序
每一步操作,系统都会提示您接下来如何操作,包括输入什么样的格式。
2)作业小结
虽然一个人做会有不少的麻烦的,但是也是因为如此我进步了不少,程序的每一个步奏都亲自做,更加有利于查漏补缺,这道题的点很多,链表里的基本的操作,插入、删除、查找、修改与排序都涵盖了,在遇到问题时我会主动看老师的书本,若是没有,我也可以上网XX,看看我出了什么问题,比如说出现了“烫”,我就去XX了。
此外,我也会去请教别人。
这次编程让我对编程重燃了信心。
有些操作,通过借鉴,修改,你也可以胜任。
不仅如此,通过这次编程,很多知识点得到了回顾,特别是文件那部分的操作。
总之,通过这次作业我学会了很多,让我更加清楚一个大问题的解决流程,如何利用算法一步步解决,这对我以后的学习有很大的帮助!
附:
(程序代码)
#include
#include
#include
#include
//*******************************定义结构体
structworker
{
charname[20];
charsex[10];
charbirday[20];
charworkday[20];
charedu[40];
charpost[20];
charadd[20];
chartele[20];
structworker*next;
};
structworker*QD;
//*******************************重新写入文件
voidcx()
{
FILE*fp;
structworker*q;
fp=fopen("职工数据.txt","w");
for(q=QD->next;q!
=NULL;q=q->next)
{
fprintf(fp,"%s%s%s%s%s%s%s%s\n",q->name,q->sex,q->birday,q->workday,q->edu,q->post,q->add,q->tele);
}
fclose(fp);
}
//*******************************初始化
voidchushi()
{
structworker*p;
charqdname[20];
intwu;
FILE*fp;
if((fp=fopen("职工数据.txt","r"))==NULL)
{
printf("Error!
\n");
exit(0);
}
while(fscanf(fp,"%s",qdname)!
=EOF)
{
//fscanf(fp,"%s",qdname);
p=(structworker*)malloc(sizeof(structworker));
p->next=NULL;
if(p==NULL)
{
return;
}
strcpy(p->name,qdname);
fscanf(fp,"%s",p->sex);
fscanf(fp,"%s",p->birday);
fscanf(fp,"%s",p->workday);
fscanf(fp,"%s",p->edu);
fscanf(fp,"%s",p->post);
fscanf(fp,"%s",p->add);
fscanf(fp,"%s",p->tele);
p->next=QD->next;
QD->next=p;
fscanf(fp,"%d",&wu);
}
fclose(fp);
}
//*************************************录入功能
voidinput()
{
structworker*p;
charqname[20];
intwu;
system("CLS");
printf("\n\n\n");
printf("\t\t\t┌───────——─┐\n");
printf("\t\t\t│欢迎使用职工录入功能│\n");
printf("\t\t\t└───────——─┘\n\n");
do
{
system("CLS");
printf("\n\n\n");
printf("\t┌─────────────────────────┐\n");
printf("\t│亲,请输入姓名,格式如xiuxiu咻咻认真地说道│\n");
printf("\t└─────────────────────────┘\n\n");
scanf("%s",qname);
printf("\n\n");
p=(structworker*)malloc(sizeof(structworker));
if(p==NULL)
{
system("CLS");
printf("\n\n\n");
printf("┌───────────────────┐\n");
printf("│内存不足,无法录入。
咻咻遗憾地说道。
│\n");
printf("└───────────────────┘\n\n");
return;
}
strcpy(p->name,qname);
system("CLS");
printf("\n\n\n");
printf("\t┌─────────────────────────┐\n");
printf("\t│亲,请输入性别w或m,w:
Woman,m:
Man咻咻热情地提示│\n");
printf("\t└─────────────────
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 职工 管理 系统 设计