1、 C++仓库管理系统 22 2020年5月29日 文档仅供参考 employee.h employee(员工)的类声明头文件 employee.cpp 包含employee类的实现代码 Salesman.h Salesman(售货员)的类声明头文件 Salesman.cpp 包含Salesman类的实现代码 Warehouseman.h warehouseman(库管员)的类声明头文件 Warehouseman.cpp 包含Warehouseman类的实现代码 manager.h manager (经理)的类声明
2、头文件 manager.cpp 包含manager类的实现代码 EmployeeList.h EmployeeList类(员工链表)的类声明头文件 EmployeeList.cpp 包含EmployeeList类的实现代码 main.cpp 主程序 //**************************************** // employee.h * //**************************************** #ifndef H_EMPLOYEE #define H_EM
3、PLOYEE class employee //基类(员工) { private: int number; //员工编号 char Address[100]; //家庭地址 protected: char name[30]; //员工姓名 float fixedSalary; //固定工资 float MonthSalary; //月薪 public: employee(); //构造函数,录入员工个人信息 void ShowInfor(); //显示员工个人及工资信息 void RecordInfor(char * pInfB
4、uffer); //将个人信息写入缓冲区 //获得工作类别 virtual char * GetWorkStyle() = 0 ; //计算员工工资的虚函数,因为只提供一个统一的接口,因此不需要添加任何实际的代码 virtual void CountSalary()=0; }; #endif //**************************************** // employee.cpp * //**************************************** #include
5、"employee.h"
#include "iostream.h"
#include "stdio.h"
//构造函数,录入员工个人信息
employee::employee()
{
cout<
6、员工编号应为四位整数,请重新输入:";
cin >> number;
}
//录入家庭地址
cout<<"请输入家庭地址:";
cin >>Address;
//默认初始月薪为零
MonthSalary = 0.0;
};
//显示员工个人及工资信息
void employee::ShowInfor()
{
cout< 7、out<<"家庭地址: "< 8、ffer , "员工姓名:%s\r\n",name);
j += sprintf(pInfBuffer + j,"员工编号:%d\r\n",number);
j += sprintf(pInfBuffer + j,"家庭地址:%s\r\n",Address);
j += sprintf(pInfBuffer + j,"工作类别:%s\r\n",GetWorkStyle());
if (MonthSalary == 0.0)
j += sprintf(pInfBuffer + j,"月薪: 尚未计算\r\n\r\n");
else
j += sprintf(p 9、InfBuffer + j,"月薪: %f\r\n\r\n",MonthSalary);
}
//****************************************
// Salesman.h *
//****************************************
#ifndef H_SALESMAN
#define H_SALESMAN
#include "employee.h"
//售货员类
class Salesman : public employee
{
private 10、
float saleSum; //售货员的销售额
float getRate; //售货员的提成比率
public:
Salesman(); //构造函数,录入售货员个人信息
char * GetWorkStyle(); //获得工作类别
void CountSalary(); //计算售货员的工资
};
#endif
//****************************************
// Salesman.cpp *
//********************* 11、
#include "Salesman.h"
#include "iostream.h"
//构造函数,录入售货员个人信息
Salesman::Salesman()
{
cout< 12、rn "售货员";
}
//计算售货员的工资
void Salesman::CountSalary()
{
//得到售货员的当月销售额
cout<<"请输入售货员"< 13、
#ifndef H_WAREHOUSEMAN
#define H_WAREHOUSEMAN
#include "employee.h"
//库管员类
class Warehouseman : public employee
{
private:
float bonus; //库管员的奖金
public:
Warehouseman(); //构造函数,录入库管员个人信息
char * GetWorkStyle(); //获得工作类别
void CountSalary(); // 14、计算库管员的工资
};
#endif
//****************************************
// warehouseman.cpp *
//****************************************
#include "Warehouseman.h"
#include "iostream.h"
//构造函数,录入库管员个人信息
Warehouseman::Warehouseman()
{ cout< 15、的固定月薪:";
cin>>fixedSalary;
}
//获得工作类别
char * Warehouseman::GetWorkStyle()
{
return "库管员";
}
//计算库管员的工资
void Warehouseman::CountSalary()
{
//得到库管员的当月奖金
cout<<"请输入库管员"< 16、
// Manager.h *
//****************************************
#ifndef H_MANAGER
#define H_MANAGER
#include "Employee.h"
//经理类
class Manager : public Employee
{
private:
float OfficeExpense;//经理的办公费用
public:
Manager(); //构造函数,录入经理个人信息 17、
char * GetWorkStyle(); //获得工作类别
void CountSalary(); //计算经理的工资
};
#endif
//****************************************
// Manager.cpp *
//****************************************
#include "Manager.h"
#include "iostream.h"
//构造函数,录入经理个人信息
Manager::Manager()
{
cou 18、t< 19、ixedSalary + OfficeExpense;
}
//****************************************
// EmployeeList.h *
//****************************************
#ifndef H_EMPLOYEELIST
#define H_EMPLOYEELIST
#include "employee.h"
#define NULL 0
//定义一个包含员工类对象的节点结构
struct employeeNode{
e 20、mployee * pEmployee;
employeeNode * pNext;
};
class EmployeeList
{
private:
employeeNode * pEmpListRoot; //员工类对象的链表的根指针
public:
EmployeeList();
//析构函数
~EmployeeList();
//将一个包含员工类对象的节点添加到链表中
void AddList(employee * pEmployee);
//计算所有员工的月薪
void CaculateAllSalary();
//显示所有员工的 21、详细信息
void ShowAllInfo();
//将所有员工的详细信息保存到纪录文件上
void SaveAllRecord();
};
#endif
//****************************************
// EmployeeList.cpp *
//****************************************
#include "EmployeeList.h"
#include "iostream.h"
#include "fstream.h"
#include 22、 "stdio.h"
#include "string.h"
EmployeeList::EmployeeList()
{
pEmpListRoot = NULL;
}
//将一个包含员工类对象的节点添加到链表中
void EmployeeList::AddList(employee * pEmployee)
{
employeeNode * pEmpNode;
pEmpNode = new employeeNode();
pEmpNode->pEmployee = pEmployee;
pEmpNode->pNext = pEmpListRoot;
pE 23、mpListRoot = pEmpNode;
}
//计算所有员工的月薪
void EmployeeList::CaculateAllSalary()
{
employeeNode * pTempNode;
//计算员工链表中所有员工的月薪
pTempNode = pEmpListRoot;
while (pTempNode)
{
pTempNode->pEmployee->CountSalary();
pTempNode = pTempNode->pNext;
}
}
//显示所有员工的详细信息
void EmployeeList:: 24、ShowAllInfo()
{
employeeNode * pTempNode;
//显示员工链表中所有员工的信息
cout<<"所有员工的个人信息如下:"< 25、File;
char sAllBuffer[1000000]= {0};
char sSingleBuffer[1000]={0};
int j;
myFile.open("info.txt",ios::app|ios::binary);
if (!myFile)
{
cerr<<"打开记录文件时出现错误!"< 26、 //保存一个员工信息
pTempNode->pEmployee->RecordInfor(sSingleBuffer);
//加入到总的字符串缓冲区中
strcat(sAllBuffer,sSingleBuffer);
pTempNode = pTempNode->pNext;
}
myFile.write(sAllBuffer,strlen(sAllBuffer));
myFile.close();
}
EmployeeList::~EmployeeList()
{
employeeNode * pTempNode;
pTempNo 27、de = pEmpListRoot;
while (pTempNode)
{
pEmpListRoot = pEmpListRoot->pNext;
delete pTempNode->pEmployee;
delete pTempNode;
pTempNode = pEmpListRoot;
}
}
//****************************************
// main.cpp *
// 主程序 28、 *
//****************************************
#include "stdlib.h"
#include "stdio.h"
#include "conio.h"
#include "employee.h"
#include "Salesman.h"
#include "Warehouseman.h"
#include "Manager.h"
#include "iostream.h"
#include "EmployeeList.h"
void main()
{
char opr; //操作项
Emp 29、loyeeList EL;
employee * pEmployee;
cout < 30、l;
cout<<"6.保存并退出"< 31、EL.AddList(pEmployee);
break;
//添加一个库管员
case '2':
pEmployee = new Warehouseman();
EL.AddList(pEmployee);
break;
//添加一个经理
case '3':
pEmployee = new Manager();
EL.AddList(pEmployee);
break;
case '4':
//计算员工链表中所有员工的月薪
EL.CaculateAllSalary();
break;
case '5':
//显示员工链表中所有员工的详细信息
EL.ShowAllInfo();
break;
case '6':
//将所有员工的详细信息保存到纪录文件上,并退出
EL.SaveAllRecord();
return;
break;
default:
break;
}
}
}






