#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define COUNT 2
struct Data
{
char num[20];
char name[20];
char sex[10];
char nation[10];
char time[20];
char job[15];
};
typedef struct Node
{
struct Data data;//结构体类型//结构体嵌套
struct Node* next;//结构体指针型
}node,*Pnode;
Pnode phead=NULL;
Pnode ptail=NULL;
//创建结点
Pnode creat_node()
{
int i=0;
Pnode pnew=NULL;
for(i=0;i<COUNT;i++) //COUNT为节点数
{
pnew=(Pnode)malloc(sizeof(node));//创建一个新节点
printf("请输入第%d个人员的信息:\n",(i+1));
printf("工号:\n");
scanf("%s",pnew->data.num);
printf("姓名:\n");
scanf("%s",pnew->data.name);
printf("性别:\n");
scanf("\n%s",&pnew->data.sex);
printf("族别:\n");
scanf("%s",&pnew->data.nation);
printf("入职时间:\n");
scanf("%s",&pnew->data.time);
printf("职务:\n");
scanf("%s",&pnew->data.job);
if(ptail)
{
ptail->next=pnew;//第一个以后的结点
ptail=pnew;
}
else
{
phead=ptail=pnew;//第一个节点
}
pnew->next=NULL;
}
return phead;
}
int del(char *num)
{
Pnode p_dst = phead;
Pnode p_tmp = NULL;
if(!num)
return -1;
while(p_dst)
{
if(strcmp(p_dst->data.num, num) == 0)
break;
p_tmp = p_dst;
p_dst = p_dst->next;
}
if(p_dst)
{
if(p_dst == phead)
{
phead = phead->next;
if(p_dst == ptail)
ptail = NULL;
}
else
{
p_tmp->next = p_dst->next;
if(p_dst == ptail)
ptail = p_tmp;
}
free(p_dst);
return 0;
}
return -1;
}
Pnode search(char *num)
{
Pnode p_dst = phead;
if(!num)
return NULL;
while(p_dst)
{
if(strcmp(p_dst->data.num, num) == 0)
return p_dst;
p_dst = p_dst->next;
}
return NULL;
}
int update(char *num)
{
Pnode p_dst;
char str[32];
if(p_dst = search(num))
{
printf("新工号: ");
scanf("%s",p_dst->data.num);
printf("姓名(%s): ", p_dst->data.name);
scanf("%s",p_dst->data.name);
printf("性别(%s): ", p_dst->data.sex);
scanf("%s",p_dst->data.sex);
printf("族别(%s): ", p_dst->data.nation);
scanf("%s",p_dst->data.nation);
printf("入职时间(%s): ", p_dst->data.time);
scanf("%s",p_dst->data.time);
printf("职务(%s): ", p_dst->data.job);
scanf("%s",p_dst->data.job);
return 0;
}
return -1;
}
void travel(FILE *fp)
{
Pnode p_dst = phead;
while(p_dst)
{
fprintf(fp,"num:%s,name:%s,sex:%s,nation:%s,date:%s,job:%s\n",
p_dst->data.num,p_dst->data.name,p_dst->data.sex,p_dst->data.nation,p_dst->data.time,p_dst->data.job);
p_dst = p_dst->next;
}
}
int insert()
{
int i, where;
Pnode pnew=NULL, p_dst = phead, p_tmp;
pnew=(Pnode)malloc(sizeof(node));//创建一个新节点
printf("请输入要插入的人员信息:\n");
printf("位置: ");
scanf("%d", &where);
printf("工号: ");
scanf("%s",pnew->data.num);
if(search(pnew->data.num))
{
printf("ERROR: 工号已存在!\n");
return -1;
}
printf("姓名: ");
scanf("%s",pnew->data.name);
printf("性别: ");
scanf("\n%s",&pnew->data.sex);
printf("族别: ");
scanf("%s",&pnew->data.nation);
printf("入职时间: ");
scanf("%s",&pnew->data.time);
printf("职务: ");
scanf("%s",&pnew->data.job);
while(p_dst && --where > 0)
{
p_tmp = p_dst;
p_dst = p_dst->next;
}
if(phead == NULL)
{
phead=ptail=pnew;
}
else if(phead == p_dst)
{
pnew->next = phead;
phead = pnew;
}
else if(NULL == p_dst)
{
ptail->next=pnew;
ptail=pnew;
}
else
{
pnew->next = p_tmp->next;
p_tmp->next = pnew;
}
return 0;
}
int put_file()
{
FILE * fp;
char filename[128];
printf("请输入文件名:");
scanf("%s",filename);
fp = fopen(filename, "w");
if(fp)
{
travel(fp);
fclose(fp);
}
return 0;
}
int main(){
struct Node * pt;
char str[32];
pt=creat_node();
//printf("\n num:%s,name:%s,sex:%s,nation:%s,date:%s,job:%s\n",pt->data.num,pt->data.name,pt->data.sex,pt->data.nation,pt->data.time,pt->data.job);
travel(stdout);
insert();
travel(stdout);
printf("请输入要搜索的人员工号:");
scanf("%s",str);
if(pt = search(str))
{
printf("num:%s,name:%s,sex:%s,nation:%s,date:%s,job:%s\n",pt->data.num,pt->data.name,pt->data.sex,pt->data.nation,pt->data.time,pt->data.job);
}
else
{
printf("No data!\n");
}
printf("请输入要修改的人员工号:");
scanf("%s",str);
if(update(str) != 0)
{
printf("failed to update %s\n", str);
}
travel(stdout);
printf("请输入要删除的人员工号:");
scanf("%s",str);
if(del(str) != 0)
{
printf("failed to delete %s\n", str);
}
travel(stdout);
put_file();
return 0;
}