问题及代码:
/**********************************************
*版权所有 (C)2016,meiyanrumei
*
*文件名称:职工信息管理系统
*文件标识:无
*内容摘要:head.h 1.cpp main.cpp
*其他内容:无
*当前版本:v1.0
*作者:刘倩
*完成日期:2016.12.27
*************************************************/
(1)head.h代码
struct employee { char id[20];//职工号 char name[20];//姓名 char sex[20];//性别 int age;//年龄 char edu[20];//学历 double salary;//工资 char phone[30];//电话 char address[30];//地址 }; //存储结构 typedef struct LNode { struct employee data; struct LNode* next; }LNode, *Linklist; void menu();//菜单函数 int Initlist(Linklist *L);//初始化单链表 int CreatList(Linklist L);//头插法生成单链表 void Display(Linklist L);//显示职工信息 void Search(Linklist L);//职工信息查询 int SearchID(Linklist L,char id[20]);//职工号查询 int SearchName(Linklist L,char name[10]);//姓名查询 int SearchPhone(Linklist L,char phone[30]);//电话查询 void Sort(Linklist L);//职工信息排序 void SortID(Linklist L);//职工号排序 void SortName(Linklist L);//姓名排序 void SortSalary(Linklist L);//工资排序 int Ins(Linklist L, char id[20]);//插入信息 int Alter(Linklist L,char id[20]);//更改信息 int Del(Linklist L,char id[20]);//按职工号删除 void Save(Linklist L);//保存到文件 void Read(Linklist L);//读取信息
(2)1.cpp代码#include<stdio.h> #include<stdlib.h> #include<string.h> #include"head.h" #define OK 1 #define ERROR 0 /*************************************************************************************** *功能描述:菜单函数 *输入参数:无 *输出参数:无 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 ***************************************************************************************/ void menu() { printf("\t ∴★∵∴☆.★∵∴☆. 欢迎使用职工信息管理系统 ∴★∵**☆.\n"); printf("\t █████.★∵∴☆. 1.录入职工信息 2.查询职工信息 ∴★∵**☆.\n"); printf("\t █田█田█.★∵∴☆.3.职工信息排序 4.插入职工信息 ∴★∵**☆.\n"); printf("\t █田█田█.★∵∴☆.5.浏览职工信息 6.修改职工信息 ∴★∵**☆.\n"); printf("\t █田█田█.★∵∴☆.7.删除职工信息 8.保存职工信息 ∴★∵**☆.\n"); printf("\t █田█田█.★∵∴☆. 【9】退出系统 ∴★∵**☆.\n"); printf("\t █████.★∵∴☆. ∴★∵**☆.\n"); printf("\t◢██□██◣.~~~~~*^_^* \n"); } /*************************************************************************************** *功能描述:初始化单链表 *输入参数:无 *输出参数:无 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 ***************************************************************************************/ int Initlist(Linklist *L) //初始化单链表 { *L=(Linklist )malloc(sizeof(LNode)); if((*L)==NULL) return (0); (*L)->next=NULL; return OK; } /*************************************************************************************** *功能描述:头插法生成单链表 *输入参数:职工各项信息 *输出参数:无 *返回值:1或0 *其他说明:消息字段之间用分号(;)隔离 ***************************************************************************************/ int CreatList(Linklist L)//头插法生成单链表 { LNode *p,*r,*s; char id[30]; int k=0; r=L; s=L->next;//链表没有节点时,s=null;/链表有节点时,指向第一个职工节点 while(r->next!=NULL)//如果存在后继结点时,r指针后移一个 { r=r->next; } while(L) { printf("\t职工号:"); scanf("%s",id); s=L->next;//每次从第一个节点开始找,看id是否重复 while(s) { if(strcmp(s->data.id,id)==0) { printf("\t提示:职工号为'%s'的职工已经存在!\n",id); k=1; return OK; } s=s->next; } p=(Linklist)malloc(sizeof(LNode)); memset(p,0,sizeof(LNode));//清空内存 strcpy(p->data.id,id); printf("\t姓名:"); scanf("%s",p->data.name); printf("\t性别:"); scanf("%s",p->data.sex); printf("\t年龄:"); scanf("%d",&p->data.age); printf("\t学历:"); scanf("%s",p->data.edu); printf("\t工资:"); scanf("%lf",&p->data.salary); printf("\t电话:"); scanf("%s",p->data.phone); printf("\t地址:"); scanf("%s",p->data.address); break; } p->next=NULL;//表明这是链表的尾部结点 r->next=p;//将新建的结点加入链表尾部中 r=p; return OK; } /*************************************************************************************** *功能描述:显示职工信息 *输入参数:无 *输出参数:职工各项信息 *返回值:无 *其他说明:消息字段之间用分号(;)隔离 ***************************************************************************************/ void Display(Linklist L)//显示职工信息 { LNode *p; p=L->next; if(p==NULL) { printf("\t现在没有职工信息,请先输入职工信息\n\n"); return; } printf("\t职工号\t姓名\t\t性别\t年龄\t学历\t工资\t电话\t\t地址\n\n"); while(p) { printf("\t%s\t",p->data.id); printf("%s\t\t",p->data.name); printf("%s\t",p->data.sex); printf("%d\t",p->data.age); printf("%s\t",p->data.edu); printf("%0.2lf\t",p->data.salary); printf("%s\t",p->data.phone); printf("%s\t",p->data.address); printf("\n"); p=p->next; } } /*************************************************************************************** *功能描述:职工信息查询 *输入参数:无 *输出参数:无 *返回值:1无 *其他说明:消息字段之间用分号(;)隔离 ***************************************************************************************/ void Search(Linklist L)//职工信息查询 { int a,k=0; char name[10]; char id[20]; char phone[30]; printf("\t请输入查询方式(1按职工号查询,2按姓名查找,3按电话查询):"); scanf("%d",&a); if(a==1) { k=1; printf("\t请输入查询职工号:"); scanf("%s",&id); SearchID(L,id);//ID查询 } if(a==2) { k=1; printf("\t请输入查询职工姓名:"); scanf("%s",&name); SearchName(L,name);//姓名查询 }