数据结构课程设计 简单的职工管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计
题目名称:简单的职工管理系统
计算机科学与技术学院
一.需求分析
1.问题描述
对单位的职工进行管理,包括插入、删除、查找、排序等功能。
2.要求
职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:从职工管理文件中删除一名职工对象。
(3)查询:从职工管理文件中查询符合某些条件的职工。
(4)修改:检索某个职工对象,对其某些属性进行修改。
(5)排序:按某种需要对职工对象文件进行排序。
3.实现提示
职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。
(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。
(2)对职工对象中的"姓名"按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改等操作。
二.概要设计
1.设计一个职工的结构体
typedef struct Worker
{
char* name;
char* sex;
char* Bothdate;
char* Workdate;
char* school;
char* duty;
char* address;
char* phone;
struct Worker *next;
}worker;
2.主体函数
(1).输入函数
void Scanfwork(worker** phead,worker** pend,int num);
(2).输出函数
void Printfwork(worker* phead);
(3).查询职工函数
void Findworker(worker* phead);
(4).更新职工函数
void Updata(worker* phead);
(5).删除职工函数
void Delwork(worker** phead,worker** pend);
void Delete(worker** phead,worker** pend,char* name);
(6).按字典排序函数
worker* Sort(worker** phead,worker** pend,int num);
(7).文件调用函数
void save(worker* phead);
(8).增加职工函数
void Addworker(worker** phead,worker** pend,worker* p);
worker* GetnodeIn();
三.详细设计
1.流程图
2.代码详细分析
(1).输入函数
void Scanfwork(worker** phead,worker** pend,int num)
{
int i;
srand((unsigned int)time(0));
for(i=0;i { Addworker(phead,pend,Getwork()); } } (2).输出函数 void Printfwork(worker* phead) { while(phead) { printf("%s %s %s %s %s %s %s %s\n",phead->name,phead->se x,phead->Bothdate,phead->Workdate,phead->school,phead->duty,phead->phone, phead->address); phead=phead->next; } printf("b返回主菜单"); key=getchar(); switch (key) { case 'b': return; break; default: printf("按错了\n"); } } (3).查询职工函数 void Findworker(worker* phead) { char* keyword = NULL; worker* w=NULL; worker* newhead=NULL; worker* newend=NULL; worker* pDel=NULL; worker* bj=phead; while(1) { while(1) { printf("请输入要查询的关键字:"); keyword=getstring(); printf("按a键确认你的输入,按其他键重新输入:"); if(getkey()=='a') { break; } else { free(keyword); keyword=NULL; } } phead=bj; while(phead) { if(strncmp(phead->name,keyword,strlen(keyword))==0|| strncmp(phead->sex,keyword,strlen(keyword))==0|| strncmp(phead->Bothdate,keyword,strlen(keyword))==0|| strncmp(phead->Workdate,keyword,strlen(keyword))==0|| strncmp(phead->school,keyword,strlen(keyword))==0|| strncmp(phead->duty,keyword,strlen(keyword))==0|| strncmp(phead->address,keyword,strlen(keyword))==0|| strncmp(phead->phone,keyword,strlen(keyword))==0) { w=(worker*)malloc(sizeof(worker)); w->name=phead->name; w->sex=phead->sex; w->Bothdate=phead->Bothdate; w->Workdate=phead->Workdate; w->duty=phead->duty; w->school=phead->school; w->address=phead->address; w->phone=phead->phone; w->next=NULL; Addworker(&newhead,&newend,w); } phead=phead->next; } if(newhead!=NULL) { Printfwork(newhead); while(newhead)