//add()函数中,无节点时,r指向list头,有节点时,r指向末尾节点 void Add(Link l) /* 增加职工 */ {
Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/ char num[10]; int flag=0; r=l;
s=l->next; //链表没有节点时,s=null;/链表有节点时,指向第一个职工节点
while(r->next!=NULL) //如果存在后继结点时,r指针后移一个 r=r->next; /*将指针移至于链表最末尾,准备添加记录*/
while(1) {
printf(\请你输入工号(以'0'返回上一级菜单:)\scanf(\
if(strcmp(num,\ //输入'0',跳出while(1),即跳出add()函数 break;
s=l->next; //作用? 每次从第一个节点开始找,看num是否重复。
while(s) //工号重复时,返回主菜单 {
if(strcmp(s->data.num,num)==0) {
printf(\提示:工号为'%s'的职工已经存在,若要修改请你选择'4 修改'!\\n\flag=1; //break; return ; }
s=s->next; } //while(s)
p=(Node *)malloc(sizeof(Node)); //生成没赋值的新节点 p
strcpy(p->data.num,num); printf(\请你输入姓名:\scanf(\getchar();
printf(\请你输入性别:\scanf(\getchar();
printf(\请你输入部门:\
scanf(\getchar();
printf(\请你输入职称:\scanf(\getchar();
printf(\请你输工资:\scanf(\getchar();
/* 信息输入已经完成 */
p->next=NULL; /*表明这是链表的尾部结点*/
r->next=p; /*将新建的结点加入链表尾部中*/ r=p;
saveflag=1; } //while(1) }
void Del(Link l) /* 删除 */ {
int sel;
Node *p,*r; /*实现删除操作的临时的结构体指针变量*/ char findmess[20];
if(!l->next) //当list无后继结点时,提示和结束返回del() {
printf(\提示:没有记录可以删除!\\n\return; }
printf(\按工号删除\\n=====>2按姓名删除\\n\scanf(\
if(sel==1) //按工号删除 {
printf(\请你输入要删除的工号:\scanf(\
p=Locate(l,findmess,\ if(p) { r=l;
//void Add增加结束
while(r->next!=p)
r=r->next; //从第一个结点找起,直到发现r->next=p, 是待删除结点,跳出循环
r->next=p->next; //r r->next(p) p->next free(p);
printf(\提示:该职工已经成功删除!\\n\saveflag=1; } else
Nofind(); //显示一句话 } //if(sel==1)
else if(sel==2) //按姓名删除 {
printf(\请你输入要删除的姓名:\scanf(\
p=Locate(l,findmess,\if(p) { r=l;
while(r->next!=p) r=r->next;
r->next=p->next; //r r->next(p) free(p);
printf(\提示:该职工已经成功删除!\\n\saveflag=1; } else
Nofind(); } //if(sel==2) else
Wrong(); //显示输入错误的话 } //void Del删除结束
void Qur(Link l) //查询功能 {
int sel; //*1:按工号查询,2:按姓名查询,其它:返回主界面(菜单)*/ char findmess[20];
Node *p; //实现查询操作的临时的结构体指针变量
if(!l->next) {
p->next printf(\提示:没有资料可以查询!\\n\return; }
printf(\按工号查找\\n=====>2按姓名查找\\n\scanf(\
if(sel==1)/* 工号 */ {
printf(\请你输入要查找的工号:\scanf(\
p=Locate(l,findmess,\ if(p) {
printf(\查找结果\\n\printstart(); //打印横线 printc(); //打印信息
printc(p); //打印p结点各个数据成员的值 printstart(); //打印横线 } else
Nofind();
} //if(sel==1)
else if(sel==2) /* 姓名 */ {
printf(\请你输入要查找的姓名:\scanf(\
p=Locate(l,findmess,\if(p) {
printf(\查找结果\\n\printstart(); printc(); printc(p); printstart(); } else
Nofind(); } else
Wrong();
} //void Qur查询结束
void Modify(Link l) //修改功能 {
Node *p;
char findmess[20]; if(!l->next) {
printf(\提示:没有资料可以修改!\\n\return; }
printf(\请你输入要修改的职工工号:\scanf(\
p=Locate(l,findmess,\ if(p) {
printf(\请你输入新工号(原来是%s):\scanf(\
printf(\请你输入新姓名(原来是%s):\scanf(\getchar();
printf(\请你输入新性别(原来是%s):\scanf(\getchar();
printf(\请你输入新的部门(原来是%s):\scanf(\
printf(\请你输入新的职称(原来是%s):\scanf(\getchar();
printf(\请你输入新的工资(原来是%d):\scanf(\
printf(\提示:资料修改成功!\\n\
//shoudsave=1; }