职工信息管理Word文档格式.docx
《职工信息管理Word文档格式.docx》由会员分享,可在线阅读,更多相关《职工信息管理Word文档格式.docx(36页珍藏版)》请在冰豆网上搜索。
(2)职工工资信息应该包含:
工资卡号、身份证号、姓名、基本工资、职务工资、各种补助、应发工资、水电费、公积金、实发工资等;
(3)为各项操作功能设计一个菜单(可选)。
应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
(4)不使用C++的string类型来存放字符串
(5)函数接口参数设计允许使用C++引用类型
(6)建议使用动态堆内存分配,达到高效利用内存目的(本要求适合提高水平的同学,不做严格要求)
注:
1、第3条要求设计一个菜单,此项不做严格要求,如果不使用菜单作为输出提示,程序运行时严格按照下面流程执行:
添加10个职工基本信息显示刚添加的10个职工信息删除指定职工信息显示删除后所有职工信息查找特定职工信息(按姓名模糊查找,如所有王姓职工)显示结果模糊查找信息按照工资降序排序显示排序后信息根据键入的特定职工姓名,查找并修改其工资信息按照工资降序重新排序显示最新排序信息。
2、如果存在多种显示方式,可以设计重载函数
【输入要求】
应用程序运行后,在屏幕上显示一个菜单。
用户可以根据需求,选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
也可以直接按照【题目要求】的注1执行顺序严格执行,要求提供友好的提示信息。
【输出要求】
(1)应用程序运行后,要在屏幕上显示一个菜单;
或按照规定执行顺序给出明确的执行提示信息。
(2)要求用户输入数据时,除了给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
如:
“请输入10位职工基本信息”、“请输入待删除的职工姓名”、“正在对职工工资进行降序排序”等等
【提示】
设计一个结构体类型和一维数组,用来保存职工工资登记信息。
如果不采用结构体,则将使用多个一维或二维数组来存储职工基本信息数据,排序时采用“联动”模式。
【评分标准】
1、按模块化要求进行系统设计,在main模块中调用所设计的各个模块。
2、不使用外部存储类型变量
3、给出各函数模块的接口参数设计(即原型说明)并说明理由;
4、给出主要的数据类型或数据结构的设计;
5、绘制模块分解图
6、按规范撰写报告
7、至少完成添加、删除、精确查找、排序和所需显示功能
满足以上基本要求得70%分值,采用结构体/给出菜单显示、完成全部功能最高得100%分值
三、实验步骤:
1、总体设计
下图为基本模块调用图(简略版)
以下十个功能函数作用及其流程图:
main函数:
实现的是程序界面的设计和各功能函数的调用。
流程图如下所示:
add函数:
主要是实现程序员工数据的实时录入。
remove函数:
主要实现删除某职工信息。
display_all函数:
显示所有职工信息。
find函数:
通过姓名或者姓氏查找对应员工信息并输出该信息。
search函数:
通过姓名或者姓氏查找对应员工信息。
sort函数:
实现按照实际工资的大小以逆序排列所有职工信息。
input函数:
输入某职工信息。
free_all函数:
回收所有占用的堆空间。
showone函数:
输出某职工的信息。
showmenu函数:
显示各功能函数对应键值。
selectmenu函数:
提供菜单选择。
流程图说明:
定义结构体指针的同时均初始化为NULL;
各功能函数所用到的head均为函数接口结构体指针;
由于种种原因详细伪代码未能补上,请见谅。
2、数据描述及模块接口参数设计
structEmployee//定义Employee结构体,并初始化,作为每名员工的信息载体
{
charname[10];
//姓名
charwagecard[15];
//工资卡号
charID[20];
//身份证号
floatbasewage;
//基本工资
floatdutywage;
//职位工资
floatallowance;
//津贴
floatutilities;
//水电费
floataccfund;
//公积金
floatsendwage;
//应发工资
floatfactwage;
//实发工资
structEmployee*next;
//增加节点
};
typedefstructEmployeeEmp;
//为方便另取Epm
下面为函数原型说明
voidshowmenu();
//显示主菜单选项
voidinput(Emp*p);
//输入某职工信息,通过函数接口指针P确定信息保存位置
voidadd(Emp*head);
//添加员工信息,通过接口head指针实现
voidremove(Emp*head);
//删除员工信息,通过接口传输指针头
voiddisplay_all(Emp*head);
//显示所有员工信息,通过接口传输指针头
Emp*search(Emp*head);
//按姓名查找员工,通过接口传输指针头
voidmodify(Emp*head);
//修改某员工信息,通过接口传输指针头
voidfind(Emp*head);
//查找员工并显示其信息
voidsort(Emp*head);
//按实际工资对所有员工逆序排列
voidshowone(Emp*p);
//显示某员工信息
voidfree_all(Emp*head);
//释放所有内存,以退出程序
voidselectmenu(Emp*head);
//主菜单选择
说明:
设置结构体指针为head的函数,均是需由接口传进头指针的位置,以便于头指针与节点构成完整循环链对所需信息进行搜素记录。
另外,在add函数中head指针分配堆空间后,堆空间地址也传回了主调函数。
3、完整程序清单
My.h
#include<
stdio.h>
string.h>
stdlib.h>
structEmployee//定义Employee结构体,并初始化
structEmployee*next;
//显示主菜单
//输入某职工信息
//添加员工信息
//删除员工信息
//显示所有员工信息
//按姓名查找员工
//修改某员工信息
main.cpp
/************************************************
**
*职工工资信息管理*
*************************************************/
#include"
my.h"
intmain()
Emp*head=NULL;
selectmenu(head);
return0;
}
按实际工资对所有职工排序.cpp
/*对所有员工按实际工资逆序排序*/
voidsort(Emp*head)
printf("
***************进入对员工信息排序菜单*******************\n"
);
Emp*p1=NULL,*p2=NULL,*flag=NULL;
Emptemp;
if(head==NULL)
printf("
对不起,职工工资管理系统中无任何数据!
\n"
else
{
for(p2=head->
next;
p2->
next!
=NULL;
p2=p2->
next)//通过设置标签的方法排序
{
flag=p2;
//设置标签
for(p1=p2->
p1!
p1=p1->
next)
{
if(flag->
factwage<
p1->
factwage)
flag=p1;
//记录该次遍历中指向最大值的指针
}
if(flag!
=p2)//交换指针所指内容,但保持节点不变
temp=*flag;
*flag=*p2;
*p2=temp;
p2->
next=flag->
flag->
next=temp.next;
}
排序已完成。
}
重新排序请按6,返回主菜单请按7,退出程序请按0,清除屏显请按8.\n"
删除、修改某员工信息.cpp
/*删除某员工信息*/
voidremove(Emp*head)
****************进入删除员工信息菜单*******************\n"
Emp*isfound=search(head),*p=NULL,*temp=NULL;
if(isfound==NULL)
对不起,未找到该职工!
所要删除职工的信息:
showone(isfound);
for(p=head;
p->
=isfound;
p=p->
next);
//找到需要删除指针位置,令指向该指针的节点越过
//该指针指向下一个指针
temp=p->
//同时释放所要删除的指针所指空间
p->
next=p->
next->
free(temp);
该信息已删除。
继续删除请按2,返回主菜单请按7,退出程序请按0,清除屏显请按8.\n"
/*修改功能某员工信息*/
voidmodify(Emp*head)
****************进入修改员工信息菜单********************\n"
Emp*isfound=search(head);
所需修改的职工原信息为:
请输入修改后员工信息:
input(isfound);
员工信息修改完毕.\n"
继续修改请按5,返回主菜单请按7,退出程序请按0,清除屏显请按8.\n"
释放所有内存.cpp
/*释放所有内存*/
voidfree_all(Emp*head)
Emp*p=head,*temp=NULL;
for(;
p!
temp=p;
p=p->
所有内存已释放。
**************************************\n"
*谢谢使用,再见!
*\n"
输入、添加、查找某员工信息.cpp
/*输入某员工信息*/
voidinput(Emp*p)
请按提示输入职工信息:
员工姓名:
"
scanf("
%s"
p->
name);
工资卡号:
wagecard);
身份证号:
ID);
基本工资:
%f"
&
basewage);
职位工资:
dutywage);
津贴:
allowance);
水电费:
utilities);
公积金:
accfund);
sendwage=p->
basewage+p->
dutywage+p->
allowance;
//计算应发工资
factwage=p->
sendwage-p->
utilities-p->
accfund;
//计算实际工资
}
/*添加某员工信息*/
voidadd(Emp*head)
***************进入添加员工信息菜单*******************\n"
Emp*addition=NULL,*last=NULL;
if((addition=(Emp*)malloc(sizeof(Emp)))==NULL)//给将要添加的员工信息分配内存
堆内存不够!
exit(0);
input(addition);
//输入该职工信息
addition->
next=NULL;
//设置下一指针节点位NULL
if(head==NULL)//若头指针为空说明还未
if((head=(Emp*)malloc(sizeof(Emp)))==NULL)
elsehead->
next=addition;
for(last=head;
last->
last=last->
//找到已给定职工链表的最后节点
last->
//将新指针域该最后节点连接
员工录入操作完毕.\n"
继续添加请按1,返回主菜单请按7,退出程序请按0,清除屏显请按8。
/*按姓名或姓氏查找某员工*/
Emp*search(Emp*head)
Emp*p=NULL;
charname[20];
intchoose;
职工工资管理中无任何数据!
returnNULL;
while
(1)
请选择查找方式:
\n1.姓名准确查找法\n2.姓氏模糊查找法\n"
%d"
choose);
//选择查找法
if(choose==1)
printf("
请输入所需对象的姓名:
name);
for(p=head->
next)//姓名准确查找法
if(strcmp(p->
name,name)==0)
returnp;
break;
elseif(choose==2)
请输入所需对象的姓氏:
for(p=head->
next)//姓氏模糊查找法
{
if(p->
name[0]==name[0])
showone(p);
}
break;
elseprintf("
输入错误!
请重新选择。
//若以上两种方法未准确找到所需信息,返回NULL
/*查找某一员工信息*/
voidfind(Emp*head)
***************进入对员工信息查询菜单*******************\n"
Emp*isfind=search(head);
//找到与给定信息相符的职工指针结点
if(isfind==NULL)
//通过返回值是否为NULL,确定是否找到所需信息
找到该用户:
showone(isfind);
//输出该职工信息
继续查找请按4,返回主菜单请按7,退出程序请按0,清除屏显请按8。
显示某员工信息、所有员工信息.cpp
/*显示某员工信息*/
voidshowone(Emp*p)
姓名:
%s\n"
%.1f\n"
应发工资:
sendwage);
实发工资:
factwage);
/*显示所有员工信息*/
voiddisplay_all(Emp*head)
********************进入显示所有员工信息菜单*************************\n"
if(head==NULL)
姓名工资卡号身份证号基本工资职位工资津贴水电费公积金应发工资实发工资\n"
--------------------------------------------------------------------------------\n"
next)//通过结点指针遍历输出所有职工信息
{
%-7s%-9s%-9s%-9.1f%-9.1f%-7.1f%-7.1f%-7.1f%-9.1f%-9.1f"
name,p->
wagecard,p->
ID,
basewage,p->
dutywage,p->
allowance,p->
utilities,p->
accfund,p->
sendwage,p->
重新显示请按3,返回主菜单请按7,退出程序请按0,清除屏显请按8.\n"
主菜单显示与选择.cpp
/*主菜单显示*/
voidshow