问题及代码:
/**********************************************
*版权所有 (C)2016,meiyanrumei
*
*文件名称:职工信息管理系统
*文件标识:无
*内容摘要:head.h 1.cpp main.cpp
*其他内容:无
*当前版本:v1.0
*作者:刘倩
*完成日期:2016.12.27
*************************************************/
(1)head.cpp代码
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);//姓名查询
}
if(a==3)
{
k=1;
printf("\t请输入查