求一道C语言编程题(职工信息管理程序)

//写这个程序花了我2.5小时写代码

//再花了1个小时测试,全部正确了

//所以一定要给我加分哦,要求100分以上,哈哈

//不然下次就没信心帮你写了

//职工管理系统

//职工号,姓名,性别,年龄,学历,工资,住址,电话等

/*

1、录入职工信息,若录入的职工号重复给予提示;

2、浏览职工信息;

3、职工号和职工姓名查询职工信息;

4、按职工号删除职工信息。

*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//下面定义职工信息结构

struct WORKER{

int id; //职工号

char name[20]; //姓名

char sex[3]; //性别

int age; //年龄

char edu[50]; //学历

int wages; //工资

char adr[255]; //住址

char phone[13]; //电话

};

typedef struct WORKER *PWORKER;

struct LINK{

WORKER w;

LINK *next;

};

typedef struct LINK *PLINK;

//创建职工信息链表

PLINK create()

{

PLINK p=(PLINK)malloc(sizeof(struct LINK));

if(NULL!=p)

{

p->next=NULL;

return p;

}

printf("内存不足!\n");

return NULL;

}

//显示程序界面文字

void message()

{

system("cls");

printf("欢迎进入职工管理系统\n");

printf(" --帮助 请输入:0\n");

printf(" --录入职工信息 请输入:1\n");

printf(" --浏览职工信息 请输入:2\n");

printf(" --按职工号查询 请输入:3\n");

printf(" --按姓名 查询 请输入:4\n");

printf(" --删除职工信息 请输入:5\n");

printf("\n --清屏 请输入:6\n");

printf(" --退出 请输入:-1\n");

}

//录入职工信息

int add(PLINK p)

{

PLINK q=(PLINK)malloc(sizeof(struct LINK));

if(NULL==q)

{

printf("录入失败提示:内存不足!\n");

return -1;

}

printf("请输入职工号(数字):");

scanf("%d",&q->w.id);

PLINK 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;

}

//浏览职工信息

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.adr,

p->next->w.edu,p->next->w.wages,p->next->w.adr,p->next->w.phone);

p=p->next;

}

printf("显示完毕!\n");

}

//按职工号查询

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

}

int main()

{

int cmd=0;//命令号

int id;

char name[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:

printf("请输入要查询的职工号:");

scanf("%d",&id);

findid(pworker,id);

break;

case 4:

printf("请输入要查询的职姓名:");

scanf("%s",name);

findname(pworker,name);

break;

case 5:

printf("请输入要删除的职工号:");

scanf("%d",&id);

del(pworker,id);

break;

case 6:

default:

message();

}

printf("请输入操作命令数字:\n");

scanf("%d",&cmd);//接收命令

}

printf("谢谢使用!\n");

release(pworker);

return 0;

}

//程序有详细说明了

//希望你以后好好学。