职工管理系统代码解释.docx

上传人:b****6 文档编号:8665518 上传时间:2023-02-01 格式:DOCX 页数:18 大小:19.54KB
下载 相关 举报
职工管理系统代码解释.docx_第1页
第1页 / 共18页
职工管理系统代码解释.docx_第2页
第2页 / 共18页
职工管理系统代码解释.docx_第3页
第3页 / 共18页
职工管理系统代码解释.docx_第4页
第4页 / 共18页
职工管理系统代码解释.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

职工管理系统代码解释.docx

《职工管理系统代码解释.docx》由会员分享,可在线阅读,更多相关《职工管理系统代码解释.docx(18页珍藏版)》请在冰豆网上搜索。

职工管理系统代码解释.docx

职工管理系统代码解释

#include//printf,scanf输出,输入的头文件

#include//strcpy(),strcmp()字符串函数的头文件

#include

#include//malloc函数的头文件包含

#defineALLMAX100

typedefstructNode

//定义一个结构体来表示链表的节点

{

intchusheng,gongzuo,dianhua;

charsex,name[ALLMAX],xueli[ALLMAX],zhiwu[ALLMAX],zhuzhi[ALLMAX];

structNode*next;

}SLNode;

typedefstruct{

/*定义一个结构体来表示基本员工的基本信息,和链表节点的结构体,有所不同

比链表的结构体少了一个指向Node结构体指针变量*/

intchusheng,gongzuo,dianhua;

charname[ALLMAX],sex,xueli[ALLMAX],zhiwu[ALLMAX],zhuzhi[ALLMAX];

}DataType;

voidListInitiate(SLNode**head)

{

//开辟一个SLNode大小的空间,来初始化链表头指针,并让next指向null

if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit

(1);

(*head)->next=NULL;

}

SLNode*ListInsert(SLNode*head,DataTypex)

{

//此函数功能是插入链表节点,并让节点插入合适位置

SLNode*p,*q,*s;

p=head->next;

//首先先开辟一个节点的内存空间

if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit

(1);

//然后把X里的信息赋值给q链表节点

q->chusheng=x.chusheng;q->gongzuo=x.gongzuo;

q->dianhua=x.dianhua;strcpy(q->name,x.name);

q->sex=x.sex;strcpy(q->xueli,x.xueli);

strcpy(q->zhiwu,x.zhiwu);strcpy(q->zhuzhi,x.zhuzhi);

//strcpy(a1,a2)函数的功能是把a2字符的值赋值给a1

if(head->next==NULL){

//如果只有头节点,而没有其他的节点,则将q节点插入到头节点后

head->next=q;

head->next->next=NULL;

}

else{

//如果有其他节点元素

for(;p;p=p->next){

//不断向后查找,当前面节点name值小于数据X里name值并且后面的节点name值大于数据X里name值的时候插入

if(p->next!

=NULL){

if(strcmp(p->name,x.name)<0&&strcmp(p->next->name,x.name)>0){

/*strcmp(a1,a2)函数的功能是比较a1,a2字符的值,若a1=a2,则返回值为

若a1>a2,则返回一个正值,,若a1

s=p->next;

p->next=q;

q->next=s;

break;

}

}

elseif(strcmp(p->name,x.name)<0&&p->next==NULL){

//不断先后查找,当找到最后一个节点的时候,并且前面所有的name值都小于数据X里name值,把节点插入到链表最后

p->next=q;

q->next=NULL;

break;

}

if(strcmp(p->name,x.name)>0){

//后面所以节点name的值都比数据X里name值大,就把节点插入后指针后,即所以链表节点前

s=head->next;

head->next=q;

q->next=s;

break;

}

}

}

//

returnhead;

}

voidListDelete(SLNode*head)

{

//此函数的功能是删除链表中特定的节点,以职员name为关键字

SLNode*p,*s;

charx[20];

s=head;

p=head->next;

if(head->next==NULL){

//当链表中无节点时,给出提示信息

printf("名单中无职工信息,无须删除!

\n");

return;

}

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

\n");

//获得要删除的节点的name的值

scanf("%s",x);

for(p;p;p=p->next){

//然后不断的往后找,知道节点里的name的值,等于输入的name的值的时候,就退出此for循环,,用break语句

if(strcmp(p->name,x)==0){

//找到后,要删除节点的前面节点指向要删除节点的后面节点

s->next=p->next;

free(p);//然后释放要删除节点的内存空间

printf("删除成功!

请继续操作!

\n");

//break,退出for循环

break;

}

s=p;

}

if(p==NULL){

//如果没有找到要删除的节点,则提示信息

printf("名单中无职工信息,无须删除!

\n");

}

}

voidListxiugai(SLNode*head)

{

//此函数为修改指定的节点,以职员name为关键字,

DataTypex;

SLNode*p;

p=head->next;

if(p==NULL){

//当链表中无节点时,给出提示信息

printf("职工名单无职工信息,无须修改!

\n");

return;

}

printf("请输入要修改的职工姓名:

\n");

//获得要修改的节点的name的值

scanf("%s",x.name);

printf("依次写入该职工的信息:

\n");

for(;p;p=p->next)

{

//不断往后找,直到找到要修改的节点,让后通过scanf获得用户重新输入的各属性值,再重新赋值给要修改的节点P

if(strcmp(x.name,p->name)==0){

scanf("%s%c%d%d%s%s%s%d",p->name,&p->sex,&p->chusheng,&p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,&p->dianhua);

break;

}

}

if(p==NULL)

//如果没有找到要修改的节点,则提示信息

printf("此职工不存在,无法修改其信息!

\n");

printf("修改成功!

请继续操作!

\n");

}

voidput(SLNode*head,FILE*fp)

{

//此函数的功能是将,链表中节点的值,打印到worker.txt文件中

SLNode*p;

//打开要输入信息的文件

if((fp=fopen("worker.txt","w"))==NULL){

//如果没有打开,则提示错误信息

printf("无法打开‘worker.txt’!

\n");

exit(0);

}

for(p=head->next;p;p=p->next)

{

//通过for循环,不断的将链表节点信息输入到文件中

fprintf(fp,"%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

//输入信息成功后,关闭打开的文件

if(fclose(fp)){

//如果关闭失败,则提示错误信息

printf("无法关闭‘worker.txt’!

\n");exit(0);

}

}

voidListfind(SLNodehead)

{

//此函数的功能是,寻找特定职员的信息

inti;

SLNode*p;

DataTypex;

if(head.next==NULL){

//如果没有链表节点,则提示信息

printf("名单中无职工信息,无法查询!

\n");

return;

}

//打印出一段字符,提示用户,输入不同的数字,来执行不同的操作

printf("0.退出查询系统,回到主菜单\n1.对姓名进行查询\n2.对出生年月进行查询\n3.对工作年月进行查询\n4.对学历进行查询\n5.对职务进行查询\n6.对住址进行查询\n7.对电话号码进行查询\n");

for(;;)

{

//一个空的for循环,来不断的接受用户的查询,当用户输入时,在通过break语句退出此for循环

//得到用户要操作的数字,通过这个数字的不同来执行不同的查询操作

scanf("%d",&i);

if(i==0)

//如果用户输入,则退出for循环,也就是退出查询

break;

if(i==1){

//输入,按姓名查询

p=head.next;

printf("请输入姓名:

");

scanf("%s",x.name);

i=0;

for(p;p;p=p->next){

//通过用户输入的name值,来查询链表各节点中name的值,如相同,则打印到屏幕上

if(strcmp(p->name,x.name)==0){

++i;//设置一个i值,来判断,有木有查询到所要查询的员工信息

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

}

if(i==0)

//i=0,说明没有查询到要查询的员工信息,则提示信息

printf("职工名单中不存在此人!

\n");

//否则说明,查询成功,即给出提示信息

elseprintf("查询成功!

请继续操作!

\n");

}

/*下面的程序和上面的程序一样,只是通过获得不同的i值,来通过不同的关键字来查询

,当i=1.对姓名进行查询i=2.对出生年月进行查询i=3.对工作年月进行查询i=4.对学历进行查询i=5.对职务进行查询i=6.对住址进行查询

i=7.对电话号码进行查询,,,所以,下面的程序就不解释啦*/

if(i==2){

p=head.next;

printf("请输入出生年月:

");

scanf("%d",&x.chusheng);

i=0;

for(p;p;p=p->next){

if(p->chusheng==x.chusheng){

++i;

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

}

if(i==0)

printf("职工名单中没有这个时间出生的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

if(i==3){

p=head.next;

printf("请输入工作年月:

");

scanf("%d",&x.gongzuo);

i=0;

for(p;p;p=p->next){

if(p->gongzuo==x.gongzuo){

++i;

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

}

if(i==0)

printf("职工名单中没有这个时间工作的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

if(i==4){

p=head.next;

printf("请输入学历:

");

scanf("%s",x.xueli);

i=0;

for(p;p;p=p->next){

if(strcmp(p->xueli,x.xueli)==0){

++i;

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

}

if(i==0)

printf("职工名单中没有这种学历的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

if(i==5){

p=head.next;

printf("请输入职务:

");

scanf("%s",x.zhiwu);

i=0;

for(p;p;p=p->next){

if(strcmp(p->zhiwu,x.zhiwu)==0){

++i;

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

}

if(i==0)

printf("职工名单中没有这种职务的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

if(i==6){

p=head.next;

printf("请输入住址:

");

scanf("%s",x.zhuzhi);

i=0;

for(p;p;p=p->next){

if(strcmp(p->zhuzhi,x.zhuzhi)==0){

++i;

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

}

if(i==0)

printf("职工名单中没有住这的!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

if(i==7){

p=head.next;

printf("请输入电话:

");

scanf("%d",&x.dianhua);

i=0;

for(p;p;p=p->next){

if(p->dianhua==x.dianhua){

++i;

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

}

if(i==0)

printf("职工名单中没人用这个号码!

\n");

elseprintf("查询成功!

请继续操作!

\n");

}

//如果用户输入i的值,不是我们提示的值,则给出用户错误信息,并让用户重新输入

if(i!

=0&&i!

=1&&i!

=2&&i!

=3&&i!

=4&&i!

=5&&i!

=6&&i!

=7)

printf("输入出错!

请再次输入!

\n");

}

}

voidprint(SLNode*head)

{

//此函数,是打印出链表中的所有员工的信息

for(SLNode*p=head->next;p;p=p->next)

printf("%s%c%d%d%s%s%s%d\n",p->name,p->sex,p->chusheng,p->gongzuo,p->xueli,p->zhiwu,p->zhuzhi,p->dianhua);

}

voidListpaixu(SLNode*head)

{

//此函数,是对职员信息来排序,,

inti,n=0,m,flag=1;

SLNode*p,*q,*s;

if(head->next==NULL){

printf("名单中无职工信息,无法排序!

\n");

return;

}

printf("0.退出排序系统,回到主菜单\n1.对性别进行排序\n2.对出生年月进行排序\n3.对工作年月进行排序\n");

for(;;)

{

scanf("%d",&i);

if(i==0)

break;

//通过用户输入值的不同,来对节点不同的信息进行排序

if(i==1){

n=0,m,flag=1;

for(p=head;NULL!

=p;p=p->next)

//或的链表节点的数目

n++;

for(m=1;flag&&m<=n;n++)

{

flag=0;

for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next)

{

//采用冒泡排序法来对链表进行排序

if(p->sex>q->sex)

{

//如果前面节点sex大于后面的sex,则交换二节点的位置

if(head==p)

{

//判断p是否为头指针,来进行不同的操作

head->next=q->next;

head=q;

q->next=p;

q=head->next;

p=head;

}

else

{

p->next=q->next;

q->next=p;

s->next=q;

p=q;

q=p->next;

}

flag=1;

}

}

}

printf("排好序的信息如下:

\n");

//排序成功后,打印出排序好的职员信息,通过调用print()函数来实现

print(head);

}

/*下面的程序和上面的程序一样,只是通过获得不同的i值,来通过不同的关键字来排序,所以,下面的程序就不解释啦*/

if(i==2){

n=0,m,flag=1;

for(p=head;NULL!

=p;p=p->next)

n++;

for(m=1;flag&&m<=n;n++)

{

flag=0;

for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next)

{

if(p->chusheng>q->chusheng)

{

if(head==p)

{

head->next=q->next;

head=q;

q->next=p;

q=head->next;

p=head;

}

else

{

p->next=q->next;

q->next=p;

s->next=q;

p=q;

q=p->next;

}

flag=1;

}

}

}

printf("排好序的信息如下:

\n");

print(head);

}

if(i==3){

n=0,m,flag=1;

for(p=head;NULL!

=p;p=p->next)

n++;

for(m=1;flag&&m<=n;n++)

{

flag=0;

for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){

if(p->gongzuo>q->gongzuo){

if(head==p){

head->next=q->next;

head=q;

q->next=p;

q=head->next;

p=head;

}

else{

p->next=q->next;

q->next=p;

s->next=q;

p=q;

q=p->next;

}

flag=1;

}

}

}

printf("排好序的信息如下:

\n");

print(head);

}

if(i!

=0&&i!

=1&&i!

=2&&i!

=3)

printf("输入出错!

请再次输入!

\n");

}

}

voidmain()

{

//main函数,程序执行的入口

DataTypex;//定义一个DataType结构体

SLNode*head;//定义一个链表的头节点

inti,n;

FILE*fp;//定义一个文件指针

ListInitiate(&head);//初始化链表

printf("请输入职工人数n:

");//提示用户输入员工的人数,来控制总的员工信息

scanf("%d",&n);//获得用户输入的员工的数目值

printf("请输入职工信息:

姓名、性别、出生年月、工作年月、学历、职务、住址、电话\n");

//提示,用户输入那些员工信息

for(i=0;i

{

//不断获得n个员工的信息

scanf("%s%c%d%d%s%s%s%d",x.name,&x.sex,&x.chusheng,&x.gongzuo,x.xueli,x.zhiwu,x.zhuzhi,&x.dianhua);

//并将这些员工信息插入到所建的链表中

head=ListInsert(head,x);

}

//打开要存放数据的文件

if((fp=fopen("worker.txt","w"))==NULL){

printf("无法打开‘worker.txt’!

\n");

exit(0);

}

//把链表中用户输入的信息,放入worker.txt文件中

put(head,fp);

if(fclose(fp)){

printf("无法关闭‘worker.txt’!

\n");exit(0);

}

//打印出本系统的功能,即通过用户输入的不同的值来执行不同的操作

printf("0.结束系统\n1.新增一名职工\n2.删除一名职工\n3.查询职工信息\n4.修改职工信息\n5.对职工信息进行排序\n");

for(;;)

{

scanf("%d",&i);

if(i==0)

break;

if(i==1){

//增加员工信息

printf("请输入职工信息:

姓名

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

当前位置:首页 > 小学教育 > 语文

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

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