您的位置:首页 > 理论基础 > 数据结构算法

2015数据结构课程设计——职工信息管理系统

2015-12-25 11:06 871 查看
问题及代码:

/***************************************************************************************/
*版权所有 (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;
}


运行结果:





















内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: