职工信息管理系统C++版 程序设计说明书.docx
《职工信息管理系统C++版 程序设计说明书.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统C++版 程序设计说明书.docx(27页珍藏版)》请在冰豆网上搜索。
![职工信息管理系统C++版 程序设计说明书.docx](https://file1.bdocx.com/fileroot1/2022-12/16/83bd3326-5547-4503-b585-54084f32fb7b/83bd3326-5547-4503-b585-54084f32fb7b1.gif)
职工信息管理系统C++版程序设计说明书
高级语言程序设计说明书
职工信息管理系统
系别
专业班级
学生姓名
指导教师
注释:
2010计算机工程系《高级语言程序设计》大作业
目录
引言···········································(3)
程序结构·····································(3)
程序流程图···································(4)
程序源程序模块设计说明·······················(5)
1.函数头················································(5)
2.主函数·················································(5)
3.基类及继承类············································(5)
3-1.基类················································(5)
3-2.继承类··············································(6)
3-3.公司类··············································(6)
程序使用说明·································(8)
总结·········································(9)
引言
程序名称:
职工信息管理系统
开发平台:
windows7
MicrosoftVisualC++6.0
主要功能:
1。
添加职工信息;
2。
删除职工信息及薪酬;
3。
修改职工信息;
4。
查询职工信息及薪酬;
5。
设置职位基本薪酬;
6。
存储职位信息;
程序说明:
准确性要求高,可靠性要求高,输入控制严格,页面响应时间短,
用户界面友好,输出准确,功能强大!
!
!
运行环境:
WindowsNT/2000/XP/VISTA/WIN7
文件说明:
程序源代码(职工信息管理系统.cpp);
程序运行文件(职工信息管理系统.exe);
职工信息存储文件(Employee.text);
参考资料:
《C++程序设计》谭浩强编著清华大学出版社
程序结构
函数头:
//cin,cout,等函数
//类,对象,等函数定义
//文本文档的读/写/复制等函数
主函数:
voidmain()
基类职工类employee
派生类:
Technician技术员类、Salesman销售员类、Salesmanager销售经理类、Manager经理类、Company公司类。
在公司类中定义六个模块功能的实现方法:
voidAdd()//添加
voidDelete()//删除
voidModify()//修改
voidQuery()//查询
voidset()//设置
voidSave()//载入
voidLoad()//储存
程序流程图
程序源程序模块设计说明
1.函数头:
#include
#include
#include
#include
调用系统在程序中将要用到的函数。
2.主函数:
switch(c)
{
case'1':
a.Add();break;
case'2':
a.Delete();break;
case'3':
a.Modify();break;
case'4':
a.Query();break;
case'5':
a.Set();break;
case'6':
a.Save();break;
case'7':
a.Load();break;
}
在do-while循环中嵌套switch结构,用来调用构造函数,实现函数模块的功能。
3.基类及继承类:
3-1.基类:
classEmployee//职工类
{
protected:
intNo;//编号
charName[20];//姓名
charSex[10];//性别
intDuty;//职位
doubleEarning;//收入
Employee*next;
public:
Employee(charID,char*Name,intDuty)
{
this->Duty=Duty;
strcpy(this->Name,Name);
this->No=ID;
}
virtualvoidCalcSalary()=0;
virtualvoidOutput()=0;
friendclassCompany;
};
先定义一个职工基类,设置了属于保护类的职工基本属性,以及构造函数Employee,可以给职工类型继承。
3-2.继承类:
classTechnician:
publicEmployee//技术员类
{
private:
doubleWorkload;//上个月完成工作量
public:
Technician(charID,char*Name,intDuty,doubleWorkload):
Employee(ID,Name,Duty)
{
this->Workload=Workload;
}
doubleGetWorkload()
{
returnWorkload;
}
voidSetWorkload(doubleAmount)
{
this->Workload=Amount;
}
voidCalcSalary()
{
Earning=Workload*100;
}
voidOutput()
{
CalcSalary();
cout<}
};
以技术员类为例,继承了Employee职工类。
在这个类中定义了上个月的工作量Workload,获得工作量函数doubleGetWorkload(),传入工作量函数voidSetWorkload(doubleAmount),工作量计算薪酬函数voidCalcSalary(),输出薪酬结果以及该类职工信息函数voidOutput()。
3-3.公司类:
classCompany//公司类
{
private:
Employee*Worker;//职工表
voidClear();//清除内存中数据
public:
Company()
{
Worker=0;
Load();
}
~Company()
{
Employee*p;
p=Worker;
while(p)
{
p=p->next;
deleteWorker;
Worker=p;
}
Worker=0;
}
在公司类中先定义一个职工表Worker用于存储职工信息,然后构造函数中可以构造链表,用于管理职工的信息。
析构函数用来释放存储空间,清除链表结点中的信息。
模块功能的实现方法:
voidCompany:
:
Add()//增加人员
{
Employee*p;//新结点指针
intDuty;
charName[20];
charSex[10];//性别
doubleWorkload;
cout<<"\n**新增员工**\n";
//输入员工信息
cout<<"输入工号:
";cin>>ID;
cout<<"输入职位(1-技术员3-经理4-销售经理5-销售员):
";cin>>Duty;
cout<<"输入姓名:
";cin>>Name;
cout<<"输入性别:
";cin>>Sex;
if(Duty!
=4)
{
cout<<"上个月完成工作量:
";cin>>Workload;
}
//创建新员工结点
switch(Duty)
{
case1:
p=newTechnician(ID,Name,Duty,Workload);break;
case3:
p=newManager(ID,Name,Duty,Workload);break;
case4:
p=newSalesmanager(ID,Name,Duty);break;
case5:
p=newSalesman(ID,Name,Duty,Workload);break;
}
p->next=0;
构造添加函数Add(),在函数中先定义职工的基本信息和新节点指针,创建新的初始化构造函数,用于添加新的职工信息。
职工结点加入链表:
if(Worker)//若已经存在结点
{
Employee*p2;
p2=Worker;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;//连接
}
else//若不存在结点(表空)
{
Worker=p;//连接
}
}
使用指针p和职工表Worker构造一个单链表,在if选择结构和while选择结构中添加新的结点,这个新的结点可以输入职工信息和存储信息的地址,再把职工信息添加到职工链表中。
其他模块删除函数Delete()、修改函数Modify()、查询函数Query()、载入函数Save()和存储函数Load()都使用了链表的构造方法。
具体内容可以看代码部分。
voidCompany:
:
Set()//设置基础数据
{
cout<<"\n**设置基础数据**\n";
cout<<"经理的基本工资["<";cin>>CSalary;
cout<<"销售经理的基本工资["<";cin>>APSalary;
cout<<"员工工号[>="<";cin>>ID;
}
设置经理和销售经理的基本工资,用于计算这两个职位的工资。
使用说明
这是一个关于职工信息管理系统,具有增加、输出、删除、查询、修改、保存、载入数据、计算总支出薪酬等功能,建立了一个含有工号、姓名、性别、工作量等成员的类的变量classEmployee。
系统中已预输入了5个职工的相关数据以及基本薪酬数据,调试是可按“4”键先查看输入的数据记录。
调试过程中,可按照有关提示进行相关操作:
增加职工数据按“1”键;
删除职工数据按“2”键;
修改职工数据按“3”键;
查询职工数据按“4”键;
基础数据设置按“5”键;
数据存盘按“6”键;
数据装入按“7”键;
退出系统按“8”键。
总结
经过对职工信息管理系统的分析与编写,我得到了很大的收获。
自主学习的必要性更是解决问题的基础。
这次设计使我重温了以前学过的各科知识,让我对C++编程有了更深刻的认识。
除了对系统作出正确的分析,实际的调查工作对系统的整体设计有着至关重要的作用。
所以在分析系统之前,我花了一些时间在公司的实际管理工作调查上。
也因为这样,如何编写代码逐渐变得明朗。
每一个功能模块经过调查后后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好。
在这样的前提下,最后顺利完成了这份设计。
这次C++系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。
从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用
代码附录:
#include
#include
#include
#include
usingnamespacestd;
//全局数据,对象
doubleAPSalary;
doubleCSalary;
intID;//员工工号
classEmployee//员工类
{
protected:
intNo;//编号
charName[20];//姓名
charSex[10];//性别
intDuty;//职位
doubleEarning;//收入
Employee*next;
public:
Employee(charID,char*Name,intDuty)
{
this->Duty=Duty;
strcpy(this->Name,Name);
this->No=ID;
}
virtualvoidCalcSalary()=0;
virtualvoidOutput()=0;
friendclassCompany;
};
classTechnician:
publicEmployee//技术员类
{
private:
doubleWorkload;//上个月完成工作量
public:
Technician(charID,char*Name,intDuty,doubleWorkload):
Employee(ID,Name,Duty)
{
this->Workload=Workload;
}
doubleGetWorkload()
{
returnWorkload;
}
voidSetWorkload(doubleAmount)
{
this->Workload=Amount;
}
voidCalcSalary()
{
Earning=Workload*100;
}
voidOutput()
{
CalcSalary();
cout<}
};
classSalesman:
publicEmployee//销售员类
{
private:
doubleWorkload;//上个月完成工作量
public:
Salesman(charID,char*Name,intDuty,doubleWorkload):
Employee(ID,Name,Duty)
{
this->Workload=Workload;
}
doubleGetWorkload()
{
returnWorkload;
}
voidSetWorkload(doubleAmount)
{
this->Workload=Amount;
}
voidCalcSalary()
{
Earning=Workload*0.04;
}
voidOutput()
{
CalcSalary();
cout<}
};
classSalesmanager:
publicEmployee//销售经理类
{
private:
doubleWorkload;
public:
Salesmanager(charID,char*Name,intDuty):
Employee(ID,Name,Duty)
{
this->Workload=Workload;
}
doubleGetWorkload()
{
returnWorkload;
}
voidSetWorkload(doubleAmount)
{
this->Workload=Amount;
}
voidCalcSalary()
{
Earning=APSalary+Workload*0.005;
}
voidOutput()
{
CalcSalary();
cout<}
};
classManager:
publicEmployee//经理类
{
private:
doubleWorkload;//上个月完成工作量
public:
Manager(charID,char*Name,intDuty,doubleWorkload):
Employee(ID,Name,Duty)
{
this->Workload=Workload;
}
doubleGetWorkload()
{
returnWorkload;
}
voidSetWorkload(doubleAmount)
{
this->Workload=Amount;
}
voidCalcSalary()
{
Earning=CSalary;//固定月薪
}
voidOutput()
{
CalcSalary();
cout<}
};
classCompany//公司类
{
private:
Employee*Worker;//员工表
voidClear();//清除内存中数据
public:
Company()
{
Worker=0;
Load();
}
~Company()
{
Employee*p;
p=Worker;
while(p)
{
p=p->next;
deleteWorker;
Worker=p;
}
Worker=0;
}
voidFind(charName[20]);//按姓名查找
voidFind(intID);//按编号查找
voidAdd();//增加人员
voidDelete();//删除人员
voidModify();//修改人员
voidQuery();//查询人员
voidSet();//基础数据设置
voidSave();//数据存盘(包括基础数据,人员数据)
voidLoad();//数据装入(包括基础数据,人员数据)
};
voidCompany:
:
Clear()//清除内存中人员数据(内部使用)
{
Employee*p=Worker;
while(p)
{
Worker=p->next;
deletep;
p=Worker;
}
}
voidCompany:
:
Find(charName[20])
{
}
voidCompany:
:
Add()//增加人员
{
Employee*p;//新结点指针
intDuty;
charName[20];
charSex[10];//性别
doubleWorkload;
cout<<"\n**新增员工**\n";
//输入员工信息
cout<<"输入工号:
";cin>>ID;
cout<<"输入职位(1-技术员3-经理4-销售经理5-销售员):
";cin>>Duty;
cout<<"输入姓名:
";cin>>Name;
cout<<"输入性别:
";cin>>Sex;
if(Duty!
=4)
{
cout<<"上个月完成工作量:
";cin>>Workload;
}
//创建新员工结点
switch(Duty)
{
case1:
p=newTechnician(ID,Name,Duty,Workload);break;
case3:
p=newManager(ID,Name,Duty,Workload);break;
case4:
p=newSalesmanager(ID,Name,Duty);break;
case5:
p=newSalesman(ID,Name,Duty,Workload);break;
}
p->next=0;
//员工结点加入链表
if(Worker)//若已经存在结点
{
Employee*p2;
p2=Worker;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;//连接
}
else//若不存在结点(表空)
{
Worker=p;//连接
}
}
voidCompany:
:
Delete()//删除人员
{
intNo;
cout<<"\n**删除员工**\n";
cout<<"ID:
";cin>>No;
//查找要删除的结点
Employee*p1,*p2;p1=Worker;
while(p1)
{
if(p1->No==No)
break;
else
{
p2=p1;
p1=p1->next;
}
}
//删除结点
if(p1!
=NULL)//若找到结点,则删除
{
if(p1==Worker)//若要删除的结点是第一个结点
{
Worker=p1->next;
deletep1;
}
else//若要删除的结点是后续结点
{
p2->next=p1->next;
deletep1;
}
cout<<"找到并删除\n";
}
else//未找到结点
cout<<"未找到!
\n";
}
voidCompany:
:
Modify()//修改员工
{
intNo,Duty;
charName[20];
doubleWorkload;
cout<<"\n**修改员工**\n";
cout<<"ID:
";cin>>No;
//查找要修改的结点
Employee*p1,*p2;p1=Worker;
while(p1)
{
if(p1->No==No)
break;
else
{
p2=p1;
p1=p1->next;
}
}
//修改结点
if(p1!
=NULL)//若找到结点
{
p1->Output();
cout<<"调整职位(1-技