数据结构课程设计 简单的职工管理系统.docx

上传人:b****3 文档编号:5456860 上传时间:2023-05-08 格式:DOCX 页数:24 大小:442KB
下载 相关 举报
数据结构课程设计 简单的职工管理系统.docx_第1页
第1页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第2页
第2页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第3页
第3页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第4页
第4页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第5页
第5页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第6页
第6页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第7页
第7页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第8页
第8页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第9页
第9页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第10页
第10页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第11页
第11页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第12页
第12页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第13页
第13页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第14页
第14页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第15页
第15页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第16页
第16页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第17页
第17页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第18页
第18页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第19页
第19页 / 共24页
数据结构课程设计 简单的职工管理系统.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计 简单的职工管理系统.docx

《数据结构课程设计 简单的职工管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计 简单的职工管理系统.docx(24页珍藏版)》请在冰点文库上搜索。

数据结构课程设计 简单的职工管理系统.docx

数据结构课程设计简单的职工管理系统

数据结构课程设计

题目名称:

简单的职工管理系统

计算机科学与技术学院

一.需求分析

1.问题描述

  对单位的职工进行管理,包括插入、删除、查找、排序等功能。

2.要求

  职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。

(1)新增一名职工:

将新增职工对象按姓名以字典方式职工管理文件中。

(2)删除一名职工:

从职工管理文件中删除一名职工对象。

(3)查询:

从职工管理文件中查询符合某些条件的职工。

(4)修改:

检索某个职工对象,对其某些属性进行修改。

(5)排序:

按某种需要对职工对象文件进行排序。

3.实现提示

  职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。

(1)由键盘输入职工对象,以文件方式保存。

程序执行时先将文件读入内存。

(2)对职工对象中的"姓名"按字典顺序进行排序。

(3)对排序后的职工对象进行增、删、查询、修改等操作。

 

二.概要设计

1.设计一个职工的结构体

typedefstructWorker

{

char*name;

char*sex;

char*Bothdate;

char*Workdate;

char*school;

char*duty;

char*address;

char*phone;

structWorker*next;

}worker;

2.主体函数

(1).输入函数

voidScanfwork(worker**phead,worker**pend,intnum);

(2).输出函数

voidPrintfwork(worker*phead);

(3).查询职工函数

voidFindworker(worker*phead);

(4).更新职工函数

voidUpdata(worker*phead);

(5).删除职工函数

voidDelwork(worker**phead,worker**pend);

voidDelete(worker**phead,worker**pend,char*name);

(6).按字典排序函数

worker*Sort(worker**phead,worker**pend,intnum);

(7).文件调用函数

voidsave(worker*phead);

(8).增加职工函数

voidAddworker(worker**phead,worker**pend,worker*p);

worker*GetnodeIn();

三.详细设计

1.流程图

 

2.代码详细分析

(1).输入函数

voidScanfwork(worker**phead,worker**pend,intnum)

{

inti;

srand((unsignedint)time(0));

for(i=0;i

{

Addworker(phead,pend,Getwork());

}

}

(2).输出函数

voidPrintfwork(worker*phead)

{

while(phead)

{

printf("%s%s%s%s%s%s%s%s\n",phead->name,phead->sex,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).查询职工函数

voidFindworker(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)

{

pDel=newhead;

newhead=newhead->next;

free(pDel);

pDel=NULL;

}

newhead=NULL;

newend=NULL;

}

if(key=='b')

{

return;

}

else

{

printf("没有找到\n");

}

}

}

(4).更新职工函数

voidUpdata(worker*phead)

{

worker*bj=phead;

char*name1;

while

(1)

{

printf("请输入要修改的名字");

name1=getstring();

phead=bj;

while(phead)

{

if(strncmp(phead->name,name1,strlen(name1))==0)

{

printf("请输入新的电话号码");

free(phead->phone);

phead->phone=getstring();

}

phead=phead->next;

}

printf("y继续修改,其他键返回");

if(getkey()!

='y')

{

return;

}

}

}

(5).删除职工函数

voidDelwork(worker**phead,worker**pend)

{

char*name1;

while

(1)

{

printf("请输入删除的姓名:

");

name1=getstring();

Delete(phead,pend,name1);

printf("按y继续删除其他键返回主菜单\n");

if(getkey()!

='y')

{

return;

}

 

}

}

voidDelete(worker**phead,worker**pend,char*name)

{

worker*bj=*phead;

worker*pDel=NULL;

if(strncmp((*phead)->name,name1,strlen(name1))==0)

{

pDel=*phead;

*phead=(*phead)->next;

free(pDel);

pDel=NULL;

return;

}

while(bj->next!

=NULL)

{

if(strncmp(bj->next->name,name1,strlen(name1))==0)

{

pDel=bj->next;

bj->next=bj->next->next;

free(pDel);

pDel=NULL;

if(bj->next==NULL)

{

*pend=bj;

}

return;

}

bj=bj->next;

}

}

(6).按字典排序函数

worker*Sort(worker**phead,worker**pend,intnum)

{

inti;

intj;

worker*bj=*phead;

worker*sign=NULL;

worker*sign1=NULL;

chartemp[20]={0};

chartemp1[20]={0};

chartemp2[20]={0};

chartemp3[20]={0};

chartemp4[20]={0};

chartemp5[20]={0};

chartemp6[15]={0};

chartemp7[12]={0};

for(i=0;i

{

bj=(*phead);

sign=bj;

for(j=i+1;j

{

sign1=sign->next;

if(strncmp(sign->name,sign1->name,strlen(sign1->name))>=0)

{

strcpy(temp,sign->name);

strcpy(temp1,sign->sex);

strcpy(temp2,sign->Bothdate);

strcpy(temp3,sign->Workdate);

strcpy(temp4,sign->school);

strcpy(temp5,sign->duty);

strcpy(temp6,sign->address);

strcpy(temp7,sign->phone);

 

strcpy(sign->name,sign1->name);

strcpy(sign->sex,sign1->sex);

strcpy(sign->Bothdate,sign1->Bothdate);

strcpy(sign->Workdate,sign1->Workdate);

strcpy(sign->school,sign1->school);

strcpy(sign->duty,sign1->duty);

strcpy(sign->address,sign1->address);

strcpy(sign->phone,sign1->phone);

 

strcpy(sign1->name,temp);

strcpy(sign1->sex,temp1);

strcpy(sign1->Bothdate,temp2);

strcpy(sign1->Workdate,temp3);

strcpy(sign1->school,temp4);

strcpy(sign1->duty,temp5);

strcpy(sign1->address,temp6);

strcpy(sign1->phone,temp7);

}

sign=sign->next;

}

 

}

return*phead;

}

(7).文件调用函数

voidsave(worker*phead)

{

FILE*pf;

fopen_s(&pf,"F:

\\worker.txt","w+");

while(phead)

{

fprintf(pf,"%s%s%s%s%s%s%s%s\n",phead->name,phead->sex,phead->Bothdate,phead->Workdate,phead->school,phead->duty,phead->phone,phead->address);

phead=phead->next;

}

fclose(pf);

}

(9).增加职工函数

voidAddworker(worker**phead,worker**pend,worker*p)

{

if(*phead==NULL)

{

*phead=p;

}

else

{

(*pend)->next=p;

}

*pend=p;

}

 

worker*GetnodeIn()

{

worker*w=(worker*)malloc(sizeof(worker));

printf("请输入名字\n");

w->name=getstring();

printf("请输入性别\n");

w->sex=getstring();

printf("请输入出生年月\n");

w->Bothdate=getstring();

printf("请输入工作年月\n");

w->Workdate=getstring();

printf("请输入学历\n");

w->school=getstring();

printf("请输入职务\n");

w->duty=getstring();

printf("请输入电话\n");

w->phone=getstring();

printf("请输入住址\n");

w->address=getstring();

w->next=NULL;

returnw;

}

 

四.调试分析

1.在写职工程序的时候遇到了单链表排序问题,解决的方法我选择了询问网络以及身边的朋友

2.当写删除的时候遇到了头删除的问题,解决方法我选择了查看书籍

3.当调用文件保存的时候也遇到了问题,例如文件内容不能直接覆盖,数据不能全部输出等问题,解决的方法我选择了询问网络,查看视频等

4.在写职工程序的时候,虽然遇到了很多问题,我通过自己的努力以及身边朋友的帮助,使我克服了问题,这次的课程设计提高我自己写代码能力,以及训练了我运用链表的增删改查方面的知识和文件的调用存取方面的知识。

五.用户使用说明

(1).可以直接运行程序,当运行程序后,会有五个选项

(2).可以通过选择序号来完成自已有想要做的事情

(3).数据会自动的存在文本文档,可以直接选择查看

(4).q可以直接退出程序

 

六.测试结果

(1).菜单测试结果

(2).查看职工测试结果

(3).添加职工测试结果

 

(4).查询职工测试结果

(5).修改职工测试结果

(6).删除职工测试结果

附录:

#include

#include

#include

#include

charkey;

intG_key;

typedefstructWorker

{

char*name;

char*sex;

char*Bothdate;

char*Workdate;

char*school;

char*duty;

char*address;

char*phone;

structWorker*next;

}worker;

worker*Getwork();

char*Getname();

char*Getsex();

char*GetBothdate();

char*GetWorkdate();

char*Getschool();

char*Getduty();

char*Getaddress();

char*Getphone();

chargetkey();

char*getstring();

voidAddworker(worker**phead,worker**pend,worker*p);

worker*GetnodeIn();

voidScanfwork(worker**phead,worker**pend,intnum);

voidPrintfwork(worker*phead);

voidFindworker(worker*phead);

voidUpdata(worker*phead);

voidDelwork(worker**phead,worker**pend);

voidDelete(worker**phead,worker**pend,char*name);

worker*Sort(worker**phead,worker**pend,intnum);

voidsave(worker*phead);

intmain()

{

worker*phead=NULL;

worker*pend=NULL;

worker*bj=NULL;

charc;

G_key=12;

Scanfwork(&phead,&pend,G_key);

bj=phead;

while

(1)

{

printf("1.查看职工信息\n");

printf("2.添加职工信息\n");

printf("3.查询职工信息\n");

printf("4.修改职工信息\n");

printf("5.删除职工信息\n");

printf("q.退出\n");

 

c=getkey();

switch(c)

{

case'1':

Printfwork(Sort(&phead,&pend,G_key));

save(Sort(&phead,&pend,G_key));

break;

case'2':

Addworker(&phead,&pend,GetnodeIn());

G_key+=1;

Printfwork(Sort(&phead,&pend,G_key));

save(Sort(&phead,&pend,G_key));

break;

case'3':

Findworker(phead);

break;

case'4':

Updata(phead);

save(Sort(&phead,&pend,G_key));

break;

case'5':

Delwork(&phead,&pend);

G_key-=1;

save(Sort(&phead,&pend,G_key));

break;

case'q':

return;

break;

}

 

}

return0;

}

 

 

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2