职工管理系统代码解释

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

#include

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

#define ALLMAX 100

typedef struct Node

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

{

int chusheng,gongzuo,dianhua;

char sex,name[ALLMAX],xueli[ALLMAX],zhiwu[ALLMAX],zhuzhi[ALLMAX]; struct Node *next;

}SLNode;

typedef struct{

/*定义一个结构体来表示基本员工的基本信息,和链表节点的结构体,有所不同比链表的结构体少了一个指向Node结构体指针变量*/

int chusheng,gongzuo,dianhua;

char name[ALLMAX],sex,xueli[ALLMAX],zhiwu[ALLMAX],zhuzhi[ALLMAX];

}DataType;

void ListInitiate(SLNode **head)

{

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

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

(*head)->next=NULL;

}

SLNode *ListInsert(SLNode *head,DataType x)

{

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

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,);

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,)<0&&strcmp(p->next->name,)>0){

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

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

s=p->next;

p->next=q;

q->next=s;

break;

}

}

else if(strcmp(p->name,)<0&&p->next==NULL){

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

p->next=q;

q->next=NULL;

break;

}

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

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

s=head->next;

head->next=q;

q->next=s;

break;

}

}

}

//

return head;

}

void ListDelete(SLNode *head)

{

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

SLNode *p,*s;

char x[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");

}

}

void Listxiugai(SLNode *head)

{

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

DataType x;

SLNode *p;

p=head->next;

if(p==NULL){

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

printf("职工名单无职工信息,无须修改!\n");

return;

}

printf("请输入要修改的职工姓名:\n");

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

scanf("%s",);

printf("依次写入该职工的信息:\n");

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

{

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

if(strcmp(,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);

相关文档
最新文档