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