问题及代码:
/***************************************************************************************/ *版权所有 (C)2015,SongChen * *文件名称:messageguanli.cpp *文件标识:无 *内容摘要:head.h dingyi.cpp main.cpp *其它说明:无 *当前版本:V1.0 *作者:宋晨 *完成日期:20151225 /***************************************************************************************/
头文件head.h
#ifndef HEAD_H_INCLUDED #define HEAD_H_INCLUDED struct employee { char id[20];//工号 char name[20];//姓名 char sex[20];//性别 char age[20];//年龄 char edu[20];//学历 char salary[20];//工资 char phone[30];//电话 char address[30];//地址 }; //存储结构 typedef struct LNode { struct employee data; struct LNode* next; }LNode,*Linklist; int Initlist(Linklist *L);//初始化单链表 int CreatList(Linklist L);//头插法生成单链表 void Display(Linklist L);//显示职工信息 int SearchID(Linklist L,char id[20]);//ID查询 int SearchName(Linklist L,char name[10]);//姓名查询 void SortID(Linklist L);//编号排序 void SortName(Linklist L);//姓名排序 int Ins(Linklist L, char id[20]);//插入信息 int Alter(Linklist L,char id[20]);//更改信息 int Del(Linklist L,char id[20]);//按ID删除 #endif // HEAD_H_INCLUDED
各函数的定义 dingyi.cpp
#include<stdio.h> #include<stdlib.h> #include<string.h> #include "head.h" #define OK 1 #define ERROR 0 /***************************************************************************************/ *功能描述:初始化单链表 *输入参数:无 *输出参数:无 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ int Initlist(Linklist *L) //初始化单链表 { (*L)=(Linklist)malloc(sizeof(LNode)); if(!(*L)) return (0); (*L)->next=NULL; return OK; } /***************************************************************************************/ *功能描述:头插法生成单链表 *输入参数:职工各项信息 *输出参数:无 *返回值:1或0 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ int CreatList(Linklist L)//头插法生成单链表 { Linklist p; p=(Linklist)malloc(sizeof(LNode)); if(!p) { return (0); } else { printf("请输入员工信息\n"); printf("编号:"); scanf("%s",p->data.id); printf("姓名:"); scanf("%s",p->data.name); printf("性别:"); scanf("%s",p->data.sex); printf("年龄:"); scanf("%s",p->data.age); printf("学历:"); scanf("%s",p->data.edu); printf("工资:"); scanf("%s",p->data.salary); printf("电话:"); scanf("%s",p->data.phone); printf("地址:"); scanf("%s",p->data.address); } p->next=L->next; L->next=p; return OK; } /***************************************************************************************/ *功能描述:显示职工信息 *输入参数:无 *输出参数:职工各项信息 *返回值:无 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ void Display(Linklist L)//显示职工信息 { Linklist p; for(p=L->next;p;p=p->next) { printf("编号: %s\n",p->data.id); printf("姓名: %s\n",p->data.name); printf("性别: %s\n",p->data.sex); printf("年龄: %s\n",p->data.age); printf("学历: %s\n",p->data.edu); printf("工资: %s\n",p->data.salary); printf("电话: %s\n",p->data.phone); printf("地址: %s\n",p->data.address); printf("============================\n"); } } /***************************************************************************************/ *功能描述:ID查询 *输入参数:职工工号 *输出参数:该职工各项信息 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ int SearchID(Linklist L,char id[20])//ID查询 { LNode *p; p=L; while(p) { if(strcmp(p->data.id,id)==0) { printf("编号 %s\n",p->data.id); printf("姓名 %s\n",p->data.name); printf("性别 %s\n",p->data.sex); printf("年龄 %s\n",p->data.age); printf("学历 %s\n",p->data.edu); printf("工资 %s\n",p->data.salary); printf("电话 %s\n",p->data.phone); printf("地址 %s\n",p->data.address); } p=p->next; } return OK; } /***************************************************************************************/ *功能描述:姓名查询 *输入参数:职工姓名 *输出参数:该职工各项信息 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ int SearchName(Linklist L,char name[10])//姓名查询 { LNode *p; p=L; while(p) { if(strcmp(p->data.name,name)==0) { printf("编号 %s\n",p->data.id); printf("姓名 %s\n",p->data.name); printf("性别 %s\n",p->data.sex); printf("年龄 %s\n",p->data.age); printf("学历 %s\n",p->data.edu); printf("工资 %s\n",p->data.salary); printf("电话 %s\n",p->data.phone); printf("地址 %s\n",p->data.address); } p=p->next; } return OK; } /***************************************************************************************/ *功能描述:编号排序 *输入参数:无 *输出参数:按照编号排序后各职工各项信息 *返回值:无 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ void SortID(Linklist L)//编号排序 { Linklist p,q; struct employee temp; for(p=L->next;p!=NULL;p=p->next) { for(q=p->next;q!=NULL;q=q->next) { if((strcmp(p->data.id,q->data.id)>0)) { temp=q->data; q->data=p->data; p->data=temp; } } } } /***************************************************************************************/ *功能描述:姓名排序 *输入参数:无 *输出参数:按照姓名排序后各职工各项信息 *返回值:无 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ void SortName(Linklist L)//姓名排序 { Linklist p,q; struct employee temp; for(p=L->next;p!=NULL;p=p->next) { for(q=p->next;q!=NULL;q=q->next) { if((strcmp(p->data.name,q->data.name)>0)) { temp=q->data; q->data=p->data; p->data=temp; } } } } /***************************************************************************************/ *功能描述:插入信息 *输入参数:要插入员工的信息 *输出参数:无 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ int Ins(Linklist L, char id[20])//插入信息 { LNode *pre,*s; pre=L; while(pre->next!=NULL) { pre=pre->next; if((strcmp( pre->data.id,id))==0) { s=(LNode*)malloc(sizeof(LNode)); printf("请输入要插入员工信息\n"); printf("编号:"); scanf("%s",s->data.id); printf("姓名:"); scanf("%s",s->data.name); printf("性别:"); scanf("%s",s->data.sex); printf("年龄:"); scanf("%s",s->data.age); printf("学历:"); scanf("%s",s->data.edu); printf("工资:"); scanf("%s",s->data.salary); printf("电话:"); scanf("%s",s->data.phone); printf("地址:"); scanf("%s",s->data.address); s->next=pre->next; pre->next=s; printf("插入员工信息成功!\n"); } } return OK; } /***************************************************************************************/ *功能描述:更改信息 *输入参数:要更改的员工的某项信息 *输出参数:无 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ int Alter(Linklist L,char id[20])//更改信息 { int c; LNode *p; p=L; while(p) { if(strcmp(p->data.id,id)==0) { printf("请输入要修改的选项(1编号,2姓名,3性别,4出生年月\n"); printf(" 5学历,6职务,7电话,8地址):"); scanf("%d",&c); switch(c) { case 1: { printf("请输入修改员工编号(原编号是%s):",p->data.id); scanf("%s",p->data.id); printf("修改员工信息成功!\n"); break; } case 2: { printf("请输入员工修改姓名(原姓名是%s):",p->data.name); scanf("%s",p->data.name); printf("修改员工信息成功!\n"); break; } case 3: { printf("请输入员工修改性别原(性别是%s):",p->data.sex); scanf("%s",p->data.sex); printf("修改员工信息成功!\n"); break; } case 4: { printf("请输入员工修改年龄(原年龄是%s):",p->data.age); scanf("%s",p->data.age); printf("修改员工信息成功!\n"); break; } case 5: { printf("请输入员工修改学历(原学历是%s):",p->data.edu); scanf("%s",p->data.edu); printf("修改员工信息成功!\n"); break; } case 6: { printf("请输入员工修改工资(原工资是%s):",p->data.salary); scanf("%s",p->data.salary); printf("修改员工信息成功!\n"); break; } case 7: { printf("请输入员工修改电话(原电话是%s):",p->data.phone); scanf("%s",p->data.phone); printf("修改员工信息成功!\n"); break; } case 8: { printf("请输入员工修改地址(原地址是%s):",p->data.address); scanf("%s",p->data.address); printf("修改员工信息成功!\n"); break; } } } p=p->next; } return OK; } /***************************************************************************************/ *功能描述:按ID删除 *输入参数:要删除的员工的工号 *输出参数:无 *返回值:1 *其他说明:消息字段之间用分号(;)隔离 /***************************************************************************************/ int Del(Linklist L,char id[20])//按ID删除 { LNode *p; LNode *r; p=L->next; r=L; while(!(strcmp(p->data.id,id)==0)&&p) { r=p; p=p->next; } if(!p) printf("\n删除位置不合理\n"); else { r->next=p->next; free(p); printf("删除成功!\n"); } return OK; }
main.cpp
#include<stdio.h> #include<stdlib.h> #include<string.h> #include "head.h" #include "dingyi.cpp" #define OK 1 #define ERROR 0 /***************************************************************************************/ *功能描述:测试函数 *输入参数:你的选择 *输出参数:无 *返回值:0 *其他说明:完成各个函数测试,消息字段之间用分号(;)隔离 /***************************************************************************************/ int main()//主函数 { Linklist L; int a,b; int x=1; int y; char m; char name[10]; char id[20]; Initlist(&L);//初始化单链表 while(x) { printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n"); printf("◆ 欢迎使用职工信息管理系统 ◆\n"); printf("◆ ◆\n"); printf("◆ 【菜单】 ◆\n"); printf("◆ 1.录入职工信息 ◆\n"); printf("◆ 2.查询职工信息 ◆\n"); printf("◆ 3.职工信息排序 ◆\n"); printf("◆ 4.插入职工信息 ◆\n"); printf("◆ 5.浏览职工信息 ◆\n"); printf("◆ 6.修改职工信息 ◆\n"); printf("◆ 7.删除职工信息 ◆\n"); printf("◆ 【8】退出系统 ◆\n"); printf("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n"); printf("请选择操作序号并按回车:"); scanf("%d",&y); switch(y) { case 1: { printf("*********************欢迎进入录入模块********************\n"); CreatList(L);//头插法生成单链表 do { printf("是否继续输入?(y/n):"); getchar(); scanf("%c",&m); if(m=='y') { CreatList(L);//显示职工信息 } } while(m!='n'); printf("*******************欢迎下次进入录入模块******************\n"); break; } case 2: printf("*********************欢迎进入查询模块********************\n"); printf("请输入查询方式(1按编号查询,2按姓名查找):"); scanf("%d",&a); if(a==1) { printf("请输入查询职工编号:"); scanf("%s",&id); SearchID(L,id);//ID查询 } if(a==2) { printf("请输入查询职工姓名:"); scanf("%s",&name); SearchName(L,name);//姓名查询 } printf("*******************欢迎下次进入查找模块******************\n"); break; case 3: printf("*********************欢迎进入排序模块********************\n"); printf("请输入排序方式(1按编号排序,2按姓名排序):"); scanf("%d",&b); if(b==1) { printf("按编号排序为:\n"); SortID(L);//编号排序 Display(L); } if(b==2) { printf("按姓名排序为:\n"); SortName(L);//姓名排序 Display(L);//显示职工信息 } printf("*******************欢迎下次进入排序模块******************\n"); break; case 4: printf("*********************欢迎进入插入模块********************\n"); printf("请输入要插入查找的职工号:"); getchar(); scanf("%s",&id); Ins(L,id);//插入信息 printf("*******************欢迎下次进入插入模块******************\n"); break; case 5: printf("*********************欢迎进入显示模块********************\n"); printf("所有职工信息如下所示\n"); Display(L);//显示职工信息 printf("*******************欢迎下次进入显示模块******************\n"); break; case 6: printf("*********************欢迎进入修改模块********************\n"); printf("请输入要修改员工编号:"); getchar(); scanf("%s",&id); Alter(L,id);//更改信息 printf("******************欢迎下次进入修改模块*******************\n"); break; case 7: printf("*********************欢迎进入删除模块********************\n"); printf("请输入删除员工编号:"); getchar(); scanf("%s",&id); Del(L,id);//按ID删除 printf("******************欢迎下次进入删除模块*******************\n"); break; case 8: x=0; printf("****************欢迎下次进入员工管理系统*****************\n"); break; default: printf("请输入正确序号!\n"); break; } } return 0; }
运行结果: