简单的职工管理系统设计.docx

上传人:b****1 文档编号:23012230 上传时间:2023-04-30 格式:DOCX 页数:62 大小:484.74KB
下载 相关 举报
简单的职工管理系统设计.docx_第1页
第1页 / 共62页
简单的职工管理系统设计.docx_第2页
第2页 / 共62页
简单的职工管理系统设计.docx_第3页
第3页 / 共62页
简单的职工管理系统设计.docx_第4页
第4页 / 共62页
简单的职工管理系统设计.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

简单的职工管理系统设计.docx

《简单的职工管理系统设计.docx》由会员分享,可在线阅读,更多相关《简单的职工管理系统设计.docx(62页珍藏版)》请在冰豆网上搜索。

简单的职工管理系统设计.docx

简单的职工管理系统设计

简单的职工管理系统设计

一、问题描述

  对单位的职工进行管理,包括录入、删除、查询、修改、排序、显示软件信息等功能。

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└─────────────────

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1