用C++编写职工信息管理系统

要求:设计一个小型实用的职工信息管理系统,具有职工信息的添加、查询、修改、简单统计如计算职工平均年龄等。职工信息数据包括职工编号、姓名、性别、工资、出生时间、参加工作时间... 要求:设计一个小型实用的职工信息管理系统,具有职工信息的添加、查询、修改、简单统计如计算职工平均年龄等。职工信息数据包括职工编号、姓名、性别、工资、出生时间、参加工作时间和年龄(必须计算得到)等。必须使用面向对象进行设计,如构造这样的类:雇员类——虚基类,教师类和工人类——派生类等等。
给出设计流程图及说明
若写出设计报告书奖励100分
展开
 我来答
fu710240330
2009-02-20
知道答主
回答量:7
采纳率:0%
帮助的人:3.3万
展开全部
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>

typedef struct ZHIGONG
{
char zhigongNumber[10];/*职工号*/
char zhigongName[20];/*职工姓名*/
char zhigongsex[4]; /*职工性别*/
char zhigongage[10]; /*出生年月*/
char zhigongedu[10];/*学历*/
char zhigongposition[30]; /*职务*/
char zhigongwage[1000]; /*工资*/
struct ZHIGONG *next;

}ZHIGONG;

ZHIGONG *headLink;/*链表表头指针*/
/*以下是函数声明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
ZHIGONG *MallocNode(void);
void GetInformation(ZHIGONG *t);

void InsertOneNode(ZHIGONG *t);
void DesplayInfoByzhigongwage(void);

void DesplayInfoByezhigongedu(void);
void DesplayOneNode(ZHIGONG *t);

void DeleteNodeByzhigongNumber(void);
void OutputInformation(void);
void ChangeMarkByzhigongName(void);
void CompositorByTotalzhigongwage(void);
void CompositorByTotalzhigongedu(void);
void SaveLinkToFile(void);

int choose;/*用于接受用户的选择*/
/*主函数*/
void main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
SaveLinkToFile();
}
/************************************
函数功能:从文件中读职工信息到链表中
************************************/
void ReadInfoFormFile(void)
{
FILE *fp;
ZHIGONG *p;
fp=fopen("zhigong.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}

p=MallocNode();
while(fscanf(fp,"%s%s%s%s%s%s%s",p->zhigongNumber,p->zhigongName,p->zhigongsex,
p->zhigongage,p->zhigongedu,p->zhigongposition,p->zhigongwage))
{
InsertOneNode(p);
p=MallocNode();
}

fclose(fp);
}
/************************************
函数功能:显示菜单,根据用户的输入
完成相应的功能
************************************/
void DesplayMenu(void)
{
ZHIGONG *p;
printf("-------请选择相应功能------------\n\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("| 9 退出 |\n\n");
scanf("%d",&choose);/*取得用户的选择*/
switch(choose)
{
case 1:
p=MallocNode();/*先申请一个新结点*/
GetInformation(p);/*要求用户输入信息到新结点中*/
InsertOneNode(p);/*将新结点加到链表中*/
break;
case 2:
OutputInformation();/*显示所有职工的信息*/

break;
case 3:
DesplayInfoByzhigongwage();/*根据用户输入的职工工资显示该职工的信息*/
break;
case 4:
DesplayInfoByezhigongedu(); /*根据用户输入的职工学历显示该职工的信息*/
break;
case 5:
CompositorByTotalzhigongwage();/* 按工资排序*/
break;
case 6:
CompositorByTotalzhigongedu();/* 按学历排序*/
break;
case 7:
DeleteNodeByzhigongNumber();/*根据用户输入的职工号删除该职工信息*/

break;
case 8:
ChangeMarkByzhigongName();/*根据用户输入的职工姓名修改该职工信息*/

break;

case 9:
SaveLinkToFile();/*保存数据后再退出*/
free(headLink);

default:
break;
}
DesplayMenu();/*递归调用*/
}

/************************************
函数功能:建立链表表头
************************************/
void CreateHeadLink(void)
{

ZHIGONG *p;
p=(ZHIGONG*)malloc(sizeof(ZHIGONG));
headLink=p;
p->next=NULL;
}
/****************************************
函数功能:申请一个新结点,并将其初始化
*****************************************/
ZHIGONG *MallocNode(void)
{
ZHIGONG *p;
int i;
p=(ZHIGONG*)malloc(sizeof(ZHIGONG));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->zhigongNumber[i]='\0';
for(i=0;i<20;i++)
p->zhigongName[i]='\0';
for(i=0;i<4;i++)
p->zhigongsex[i]='\0';

for(i=0;i<10;i++)
p->zhigongage[i]='\0';

for(i=0;i<10;i++)
p->zhigongedu[i]='\0';

for(i=0;i<30;i++)
p->zhigongposition[i]='\0';
for(i=0;i<1000;i++)
p->zhigongwage[i]='\0';
p->next=NULL;

return p;
}
/************************************
函数功能:取得用户输入的职工信息
************************************/
void GetInformation(ZHIGONG *t)
{
printf("请输入职工号:\n");
scanf("%s",t->zhigongNumber);
printf("请输入职工姓名:\n");
scanf("%s",t->zhigongName);
printf("请输入职工性别:\n");
scanf("%s",t->zhigongsex);
printf("请输入职工出生年月:\n");
scanf("%s",t->zhigongage);
printf("请输入职工学历:\n");
scanf("%s",t->zhigongedu);
printf("请输入职工职位:\n");
scanf("%s",t->zhigongposition);

printf("请输入职工工资:\n");

scanf("%s",t->zhigongwage);

}
/************************************
函数功能:在链表的结尾处增加一个结点
************************************/
void InsertOneNode(ZHIGONG *t)
{
ZHIGONG *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/*************************************************
函数功能:根据用户输入的职工工资显示该职工的信息
**************************************************/
void DesplayInfoByzhigongwage(void)
{
ZHIGONG *p;
char zhigongwage[1000];
char flag=0;
p=headLink->next;
printf("请输入职工的工资:\n");
scanf("%s",zhigongwage);
while(p)
{
if(strcmp(p->zhigongwage,zhigongwage)==0)
{
printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在工资为%s的职工\n",zhigongwage);
}
/************************************************
函数功能:根据用户输入的职工学历显示该职工的信息
*************************************************/
void DesplayInfoByezhigongedu(void)
{
ZHIGONG *p;
char zhigongedu[10];
char flag=0;
p=headLink->next;
printf("请输入职工学历:\n");
scanf("%s",zhigongedu);
while(p)
{
if(strcmp(p->zhigongedu,zhigongedu)==0)
{
printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在学历为 %s 的职工\n",zhigongedu);
}
/************************************
函数功能:输出一个结点的信息
************************************/
void DesplayOneNode(ZHIGONG *t)
{
printf("%s\t",t->zhigongNumber);
printf("%s\t",t->zhigongName);

printf("%s\t",t->zhigongsex);
printf("%s\t",t->zhigongage);
printf("%s\t",t->zhigongedu);
printf("%s\t",t->zhigongposition);
printf("%s\t\n",t->zhigongwage);
}
/*************************************************
函数功能:根据用户输入的职工号删除该职工的信息
**************************************************/
void DeleteNodeByzhigongNumber(void)
{
char zhigongNumber[10];
ZHIGONG *p,*q;
char flag=0;
printf("请输入要删除的职工的职工号:");
scanf("%s",zhigongNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->zhigongNumber,zhigongNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在该职工号的职工\n");
return;
}
printf("成功删除\n");
}
/************************************
函数功能:显示所有职工的信息
************************************/
void OutputInformation(void)
{
ZHIGONG *p;
p=headLink->next;
if(p==NULL)
{
printf("现在没有职工信息,请先输入职工信息\n\n");
return;
}
printf("职工号\t姓名\t性别\t出生年月\t学历\t职务\t工资\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/*********************************************
函数功能:根据输入的职工姓名修改员工的信息
**********************************************/
void ChangeMarkByzhigongName(void)

{
ZHIGONG *p;
char zhigongName[10];
char flag=0;
char zhigongedu,zhigongwage,zhigongage,zhigongNumber,zhigongsex,zhigongposition;
p=headLink->next;
printf("请输入职工姓名:\n");
scanf("%s",zhigongName);
while(p)
{
if(strcmp(p->zhigongName,zhigongName)==0)
{
printf("请输入新的职工号:\n");
scanf("%s",&zhigongNumber);
printf("请输入新的学历:\n");
scanf("%s",&zhigongedu);
printf("请输入新的工资:\n");
scanf("%s",&zhigongwage);
printf("请输入新的出生年月:\n");
scanf("%s",&zhigongage);
printf("请输入新的性别:\n");
scanf("%s",&zhigongsex);
printf("请输入新的职位:\n");
scanf("%s",&zhigongposition);

strcpy(p->zhigongposition,&zhigongposition);
strcpy(p->zhigongsex,&zhigongsex);
strcpy(p->zhigongNumber,&zhigongNumber);
strcpy(p->zhigongedu,&zhigongedu);
strcpy(p->zhigongwage,&zhigongwage);
strcpy(p->zhigongage,&zhigongage);
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("对不起,不存在姓名为 %s 的职工\n",zhigongName);
}
/************************************
函数功能:保存链表数据到文件中
************************************/
void SaveLinkToFile(void)
{
ZHIGONG *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("现在没有职工信息,请先输入职工信息\n\n");
return;
}
fp=fopen("zhigong.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s%s%s%s%s%s%s",p->zhigongNumber,p->zhigongName,p->zhigongsex,
p->zhigongage,p->zhigongedu,p->zhigongposition,p->zhigongwage);
p=p->next;

}
fclose(fp);
}

/************************************
函数功能:按职工工资排序
************************************/
void CompositorByTotalzhigongwage(void)
{
ZHIGONG exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没职工信息,请先输入职工信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((p->zhigongwage)>(p->zhigongwage))
{
strcpy(exchange.zhigongNumber,q->zhigongNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.zhigongName,q->zhigongName);
strcpy(exchange.zhigongsex,q->zhigongsex);
strcpy(exchange.zhigongage,q->zhigongage);

strcpy(exchange.zhigongedu,q->zhigongedu);
strcpy(exchange.zhigongposition,q->zhigongposition);
strcpy(exchange.zhigongwage,q->zhigongwage);

strcpy(q->zhigongNumber,p->zhigongNumber);/*再复制p结点信息到q*/
strcpy(q->zhigongName,p->zhigongName);
strcpy(q->zhigongsex,p->zhigongsex);
strcpy(q->zhigongage,p->zhigongage);

strcpy(q->zhigongedu,p->zhigongedu);
strcpy(q->zhigongposition,p->zhigongposition);
strcpy(q->zhigongwage,p->zhigongwage);

strcpy(p->zhigongNumber,exchange.zhigongNumber);/*最后复制exchange结点信息到p*/
strcpy(p->zhigongName,exchange.zhigongName);
strcpy(p->zhigongsex,exchange.zhigongsex);
strcpy(p->zhigongage,exchange.zhigongage);
strcpy(p->zhigongedu,exchange.zhigongedu);
strcpy(p->zhigongposition,exchange.zhigongposition);
strcpy(p->zhigongwage,exchange.zhigongwage);
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}

/************************************
函数功能:按职工学历排序
************************************/
void CompositorByTotalzhigongedu(void)
{
ZHIGONG exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("现在还没职工信息,请先输入职工信息\n");
return;
}
while(r)/*两层while循环实现排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->zhigongedu)>(p->zhigongedu))
{
strcpy(exchange.zhigongNumber,q->zhigongNumber);/*先复制q结点信息到exchange*/
strcpy(exchange.zhigongName,q->zhigongName);
strcpy(exchange.zhigongsex,q->zhigongsex);
strcpy(exchange.zhigongage,q->zhigongage);

strcpy(exchange.zhigongedu,q->zhigongedu);
strcpy(exchange.zhigongposition,q->zhigongposition);
strcpy(exchange.zhigongwage,q->zhigongwage);

strcpy(q->zhigongNumber,p->zhigongNumber);/*再复制p结点信息到q*/
strcpy(q->zhigongName,p->zhigongName);
strcpy(q->zhigongsex,p->zhigongsex);
strcpy(q->zhigongage,p->zhigongage);

strcpy(q->zhigongedu,p->zhigongedu);
strcpy(q->zhigongposition,p->zhigongposition);
strcpy(q->zhigongwage,p->zhigongwage);

strcpy(p->zhigongNumber,exchange.zhigongNumber);/*最后复制exchange结点信息到p*/
strcpy(p->zhigongName,exchange.zhigongName);
strcpy(p->zhigongsex,exchange.zhigongsex);
strcpy(p->zhigongage,exchange.zhigongage);
strcpy(p->zhigongedu,exchange.zhigongedu);
strcpy(p->zhigongposition,exchange.zhigongposition);
strcpy(p->zhigongwage,exchange.zhigongwage);
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
wangbinwh
2009-02-18 · TA获得超过639个赞
知道大有可为答主
回答量:1367
采纳率:100%
帮助的人:525万
展开全部
VC的?图形界面还是文本界面?
我资料里有联系方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式