职工信息管理系统,查询调用函数问题
#include <stdio.h>#include <stdlib.h>
#include <string.h>
typedef struct worker
{
int id;
char name[20];
char sex[3];
int age;
char edu[50];
int wages;
char adr[255];
char phone[13];
}WORKER, *PWORKER;
//typedef struct WORKER *PWORKER;
typedef struct link
{
WORKER w;
struct link *next;
}LINK, *PLINK;
//typedef struct LINK *PLINK;
/*创建职工信息链表*/
PLINK create()
{
PLINK p=(PLINK)malloc(sizeof(LINK));
if(NULL!=p)
{
p->next=NULL;
return p;
}
printf("内存不足!\n");
return NULL;
}
/*显示程序界面文字*/
void message()
{ system("color 09f");/*设置当前窗口的背景色和前景色*/
/* 0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 浅绿色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色*/
system("cls");
printf("\t\t************************************************\n\n");
printf("\t\t>>>>>>>>>>>>>>欢迎进入职工管理系统<<<<<<<<<<<<<<\n\n");
printf("\t\t************************************************\n\n");
printf("\t\t ************** Choose Function *************\n\n");
printf("\t\t ************ 帮助 请输入:0************\n\n");
printf("\t\t ************录入职工信息 请输入:1************\n\n");
printf("\t\t ************浏览职工信息 请输入:2************\n\n");
printf("\t\t ************查询职工信息 请输入:3************\n\n");
printf("\t\t ************删除职工信息 请输入:4************\n\n");
printf("\t\t ************修改职工信息 请输入:5************\n\n");
printf("\t\t ************ 清屏 请输入:6************\n\n");
printf("\t\t ************ 退出 请输入:-1***********\n\n");
printf("\t\t************************************************\n\n");
printf("\t\t************************************************\n\n");
}
/*录入职工信息*/
int add(PLINK p)
{
PLINK h = NULL;
PLINK q=(PLINK)malloc(sizeof(LINK));
if(NULL==q)
{
printf("录入失败提示:内存不足!\n");
return -1;
}
printf("请输入职工号(数字):");
scanf("%d",&q->w.id);
h=p->next;
while(h)
{
if(h->w.id==q->w.id)
{
free(q);
printf("录入失败提示:此职工号已经存在!\n");
return -1;
}
h=h->next;
}
printf("请输入职工姓名(文字):");
scanf("%s",&q->w.name);
printf("请输入职工性别(文字):");
scanf("%s",&q->w.sex);
printf("请输入职工年龄(数字):");
scanf("%d",&q->w.age);
printf("请输入职工学历(文字):");
scanf("%s",&q->w.edu);
printf("请输入职工工资(数字):");
scanf("%d",&q->w.wages);
printf("请输入职工住址(文字):");
scanf("%s",&q->w.adr);
printf("请输入职工电话(文字):");
scanf("%s",&q->w.phone);
q->next=p->next;
p->next=q;
printf(".^_^.录入成功!.^_^.\n");
return -1;
}
/*按工号查询*/
PLINK findid(PLINK p,int id)
{
message();
printf("按工号查询\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
while(NULL!=p->next)
{
if(p->next->w.id==id)
{
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",
p->next->w.id,p->next->w.name,p->next->w.sex,p->next->w.adr,
p->next->w.edu,p->next->w.wages,p->next->w.adr,p->next->w.phone);
return p;
}
p=p->next;
}
printf(".^_^.查询结束!.^_^.\n");
return NULL;
}
/*按学历查询*/
PLINK find_sr(PLINK p,char *str)
{
message();
printf("按学历查询\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
while(NULL!=p->next)
{
if(0==strcmp(p->next->w.edu,str))
{
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",
p->next->w.id,p->next->w.name,p->next->w.sex,p->next->w.adr,
p->next->w.edu,p->next->w.wages,p->next->w.adr,p->next->w.phone);
return p;
}
p=p->next;
}
printf(".^_^.查询结束!.^_^.\n");
return NULL;
}
/*按姓名查询*/
PLINK findname(PLINK p,char *name)
{
message();
printf("按姓名 查询\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
while(NULL!=p->next)
{
if(0==strcmp(p->next->w.name,name))
{
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",
p->next->w.id,p->next->w.name,p->next->w.sex,p->next->w.adr,
p->next->w.edu,p->next->w.wages,p->next->w.adr,p->next->w.phone);
return p;
}
p=p->next;
}
printf(".^_^.查询结束!.^_^.\n");
return NULL;
}
/*按职工号删除职工信息*/
int del(PLINK p,int id)
{
message();
printf("按职工号删除职工信息\n");
while(NULL!=p->next)
{
if(p->next->w.id==id)
{
PLINK q=p->next;
p->next=p->next->next;
free(q);
printf(".^_^.删除成功!.^_^.\n");
return 1;
}
p=p->next;
}
printf("没有你输入的职工号!\n");
return -1;
}
/*程序结束释放内存*/
void release(PLINK p)
{
PLINK q;
while(NULL!=p->next)
{
q=p;
p=p->next;
free(q);
}
free(p);
}
//浏览职工信息
void show(PLINK p)
{
message();
printf("浏览职工信息\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
while(NULL!=p->next)
{
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",
p->next->w.id,p->next->w.name,p->next->w.sex,p->next->w.age,
p->next->w.edu,p->next->w.wages,p->next->w.adr,p->next->w.phone);
p=p->next;
}
printf("显示完毕!\n");
}
/*查询调用*/
void search()
{
int id;
char name[20];
char str[20];
PLINK pworker;
int l;
printf("\t\t\t\t*姓名查找按:1*\n");
printf("\t\t\t\t*学历查找按:2*\n");
printf("\t\t\t\t*职工号查按:3*\n");
scanf("%d",&l);
if(l>0&&l<4)
{switch(l)
{
case 1:printf("请输入要查询的职工姓名:");
scanf("%s",name);
findname(pworker,name);
break;
case 2:printf("请输入要查询的职工学历: ");
scanf("%s", str);
find_sr(pworker, str);
break;
case 3:printf("请输入要查询的职工号:");
scanf("%d",&id);
findid(pworker,id);
break;
}
printf("\n\n选择完毕!!!");
}
else printf("\t\t\t\t输入有误!!!");
}
/*修改职工信息*/
int modify(PLINK p)
{ int id;
PLINK q;
PLINK h = NULL;
printf("请输入职工号(数字):");
scanf("%d",&id);
h=p->next;
while(h)
{
if(h->w.id==id)
{
break;
}
h=h->next;
}
if (h == NULL)
{
printf("找不到此职工,请重试\n");
return -1;
}
printf("请输入职工姓名(文字):");
scanf("%s",&h->w.name);
printf("请输入职工性别(文字):");
scanf("%s",&h->w.sex);
printf("请输入职工年龄(数字):");
scanf("%d",&h->w.age);
printf("请输入职工学历(文字):");
scanf("%s",&h->w.edu);
printf("请输入职工工资(数字):");
scanf("%d",&h->w.wages);
printf("请输入职工住址(文字):");
scanf("%s",&h->w.adr);
printf("请输入职工电话(文字):");
scanf("%s",&h->w.phone);
q->next=p->next;
p->next=q;
printf(".^_^.修改成功!.^_^.\n");
return -1;
}
int main()
{
int cmd=0;
int id;
char name[20];
char str[20];
PLINK pworker;
if(!(pworker=create()))
{
exit(0);
}
while(cmd!=-1)
{
switch(cmd)
{
case 0: message(); break;
case 1: add(pworker); break;
case 2: show(pworker); break;
case 3: search(); break;
case 4: printf("请输入要删除的职工号:");
scanf("%d",&id);
del(pworker,id);
break;
case 5: modify(pworker); break;
case 6: message(); break;
}
printf("请输入操作命令数字:\n");
scanf("%d",&cmd);
}
printf(".^_^.谢谢使用!.^_^.\n");
release(pworker);
return 0;
}
程序运行到查找和修改的时候总是出现问题,应该是查找调用中PLINK pworker没有初始化的问题,不知道怎么解决啊,求高手指点···急啊,在线等···