-
课程设计内容
-
课题描述
本系统是为某个公司编写雇员工资支付程序。
所完成的功能包括:
经理(Manager)每月按固定工资支付;
销售人员(Salesman)在基本工资基础上每月还有销售提成;
一般工人(Worker)按每月工作的天数计算工资;
临时工(Floater)按小时支付。
经理工资计算:月工资;
销售人员工资计算:基本工资+每件产品提成额度*销售的产品数量;
一般工人工资计算:每天工资*工作天数;
临时工工资计算:每小时工资*总工作小时数。
在本系统中用抽象类(Employee)描述所有雇员的共同特性(如姓名,性别,出生日期,员工类别),含有计算工资的纯虚函数computeSalay(),而且在系统中对于所有员工用该方法计薪是以多态形式来实现的。
系统应包含新增员工信息、删除员工信息、员工信息搜索、员工信息统计、员工信息分类存储、员工信息导入、按工资排序等功能为。
-
系统设计
本系统所完成的功能如下:
1.新增员工信息;
2.删除员工信息;
3.员工信息搜索(按姓名) ;
5.员工信息统计(按姓名或工资或类别) ;
6.员工信息分类存储; .
7.员工信息导入;
8.按工资排序;
9.退出
原创手写
本实验本人花了很多天,许多小时,最终完成了两个版本,其中不同点在于二进制方式存取和ASCLL(文本)方式存取两种存取方式
文本存取方式版本
///文本读取方式 string改成字符数组版
#include <iostream>///包含cin和cout
#include <cstdio>///包含scanf, printf的函数
#include <cstdlib>///包含abort()和exit()
#include <string>///string类的相关函数
#include <cstring>///包含strcmp()
#include <fstream>///文件输入输出流
using namespace std;
///类:
class Employee
{///职业 抽象类
protected:
char name[10], sex[3], birthday[10], category[10];///
double wage;
public:
Employee(){};
char *get_name();///
double get_wage();
virtual void set_data();
virtual void show_data();
virtual void computeSalary() = 0;
virtual ~Employee(){};///此处很重要,一定要加virtual,具体可查“基类的虚析构函数”
virtual void load();
virtual void unload();
};
void Employee::set_data()
{
cout << "请按照提示依次输入信息" << endl;
cout << "姓名: " << endl;
cin >> name;
cout << "性别: " << endl;
cin >> sex;
cout << "出生日期(例:19980515): " << endl;
cin >> birthday;
//cout << "职业类型(经理、销售人员、工人、临时工): " << endl;
//cin >> category;
}
char *Employee::get_name()///
{
return name;
}
double Employee::get_wage()
{
return wage;
}
void Employee::show_data()
{
cout << "姓名: " << name << endl;
cout << "性别: " << sex << endl;
cout << "出生日期: " << birthday << endl;
cout << "职业类型: " << category << endl;
cout << "总工资:" << wage << endl;
}
void Employee::load()
{///从文件中读入数据
cin >> name >> sex >> birthday >> category >> wage;
}
void Employee::unload()
{///将数据写入文件
cout << name << " " << sex << " " << birthday << " " << category << " " << wage;
}
Employee *M[100];///经理对象的指针数组
Employee *S[100];///销售人员对象的指针数组
Employee *W[100];///工人对象的指针数组
Employee *F[100];///临时工对象的指针数组
int n;///总人数
int m;///经理人数
int s;///销售人员人数
int w;///工人人数
int f;///临时工人数
class Manager: public Employee
{///经理
private:
double monthly_wages;
public:
Manager(){};
void set_data();
void show_data();
void computeSalary();
void load();
void unload();
};
void Manager::set_data()
{
Employee::set_data();
strcpy(category, "经理"); ///category = "经理";
cout << "请输入该经理的月工资" << endl;
cin >> monthly_wages;
cout << "输入结束" << endl;
}
void Manager::show_data()
{
Employee::show_data();
cout << "月工资: " << monthly_wages << endl;
}
void Manager::computeSalary()
{
wage = monthly_wages;
}
void Manager::load()
{
Employee::load();
cin >> monthly_wages;
}
void Manager::unload()
{
Employee::unload();
cout << " " << monthly_wages << endl;
}
class Salesman: public Employee
{///销售人员
private:
double basic_wage, push_money;
int sold_num;
public:
Salesman(){};
void set_data();
void show_data();
void computeSalary();
void load();
void unload();
};
void Salesman::set_data()
{
Employee::set_data();
strcpy(category, "销售人员");///category = "销售人员";
cout << "基础工资: " << endl;
cin >> basic_wage;
cout << "每售出一件产品的提成额度: " << endl;
cin >> push_money;
cout << "售出的产品数量: " << endl;
cin >> sold_num;
cout << "输入结束" << endl;
}
void Salesman::show_data()
{
Employee::show_data();
cout << "基础工资: " << basic_wage << endl;
cout << "每售出一件产品的提成额度: " << push_money << endl;
cout << "售出的产品数量: " << sold_num << endl;
}
void Salesman::computeSalary()
{
wage = basic_wage + push_money * sold_num;
}
void Salesman::load()
{
Employee::load();
cin >> basic_wage >> push_money >> sold_num;
}
void Salesman::unload()
{
Employee::unload();
cout << " " << basic_wage << " " << push_money << " " << sold_num << endl;
}
class Worker: public Employee
{///工人
private:
double day_wage;
int work_day;
public:
Worker(){};
void set_data();
void show_data();
void computeSalary();
void load();
void unload();
};
void Worker::set_data()
{
Employee::set_data();
strcpy(category, "工人");///category = "工人";
cout << "每日工资: " << endl;
cin >> day_wage;
cout << "工作天数: " << endl;
cin >> work_day;
cout << "输入结束" << endl;
}
void Worker::show_data()
{
Employee::show_data();
cout << "每日工资: " << day_wage << endl;
cout << "工作天数: " << work_day << endl;
}
void Worker::computeSalary()
{
wage = day_wage * work_day;
}
void Worker::load()
{
Employee::load();
cin >> day_wage >> work_day;
}
void Worker::unload()
{
Employee::unload();
cout << " " << day_wage << " " << work_day << endl;
}
class Floater: public Employee
{///临时工
private:
double hour_wage;
int work_hour;
public:
Floater(){};
void set_data();
void show_data();
void computeSalary();
void load();
void unload();
};
void Floater::set_data()
{
Employee::set_data();
strcpy(category, "临时工");///category = "临时工";
cout << "每小时工资: " << endl;
cin >> hour_wage;
cout << "工作小时数: " << endl;
cin >> work_hour;
cout << "输入结束" << endl;
}
void Floater::show_data()
{
Employee::show_data();
cout << "每小时工资: " << hour_wage << endl;
cout << "工作小时数: " << work_hour << endl;
}
void Floater::computeSalary()
{
wage = hour_wage * work_hour;
}
void Floater::load()
{
Employee::load();
cin >> hour_wage >> work_hour;
}
void Floater::unload()
{
Employee::unload();
cout << " " << hour_wage << " " << work_hour << endl;
}
///功能函数:
///添加员工信息:
void Add_Manager()
{///添加新经理
M[m]= new Manager();
M[m]->set_data();
M[m]->computeSalary();
m++;
n++;
}
void Add_Salesman()
{///添加新销售人员
S[s]= new Salesman();
S[s]->set_data();
S[s]->computeSalary();
s++;
n++;
}
void Add_Worker()
{///添加新工人
W[w]= new Worker();
W[w]->set_data();
W[w]->computeSalary();
w++;
n++;
}
void Add_Floater()
{///添加新临时工
F[f]= new Floater();
F[f]->set_data();
F[f]->computeSalary();
f++;
n++;
}
void Add_person()
{///新增员工
int x;
printf("您要新增的员工类型:\n");
printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
scanf("%d", &x);
if(x < 1 || x > 4)
{
printf("输入错误!\n");
return;
}
switch(x)
{
case 1:Add_Manager();break;
case 2:Add_Salesman();break;
case 3:Add_Worker();break;
case 4:Add_Floater();break;
}
}
///删除员工信息:
void Delete_Manager()
{///删除经理
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < m; i++)
{
if(strcmp(name1, M[i]->get_name()) == 0)///name1 == M[i]->get_name()
{
delete M[i];
for(int j = i; j < m - 1; j++)
{
M[j] = M[j + 1];
}
M[m - 1] = NULL;
m--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_Salesman()
{///删除销售人员
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < s; i++)
{
if(strcmp(name1, S[i]->get_name()) == 0)///
{
delete S[i];
for(int j = i; j < s - 1; j++)
{
S[j] = S[j + 1];
}
S[s - 1] = NULL;
s--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_Worker()
{///删除工人
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; strcmp(name1, W[i]->get_name()) == 0; i++)///
{
if(name1 == W[i]->get_name())
{
delete W[i];
for(int j = i; j < w - 1; j++)
{
W[j] = W[j + 1];
}
W[w - 1] = NULL;
w--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_Floater()
{///删除临时工
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < f; i++)
{
if(strcmp(name1, F[i]->get_name()) == 0)///
{
delete F[i];
for(int j = i; j < f - 1; j++)
{
F[j] = F[j + 1];
}
F[f - 1] = NULL;
f--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_person()
{///删除员工
int x;
printf("您要删除的员工类型:\n");
printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
scanf("%d", &x);
if(x < 1 || x > 4)
{
printf("输入错误!\n");
return;
}
switch(x)
{
case 1:Delete_Manager();break;
case 2:Delete_Salesman();break;
case 3:Delete_Worker();break;
case 4:Delete_Floater();break;
default:printf("输入错误!\n");break;
}
}
///员工信息搜索
void Search1_inf()
{
int flag = 0;
char name1[10];///
cout << "请输入您要查找的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < m; i++)
{///查询是否为经理
if(strcmp(name1, M[i]->get_name()) == 0)///
{
M[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
if(flag == 0)
{///查询是否为销售人员
for(int i = 0; i < s; i++)
{
if(strcmp(name1, S[i]->get_name()) == 0)///
{
S[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
}
if(flag == 0)
{///查询是否为工人
for(int i = 0; i < w; i++)
{
if(strcmp(name1, W[i]->get_name()) == 0)///
{
W[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
}
if(flag == 0)
{///查询是否为临时工
for(int i = 0; i < f; i++)
{
if(strcmp(name1, F[i]->get_name()) == 0)
{
F[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
}
///员工信息统计
void display_all()
{
printf("\n");
cout << "经理信息: " << endl;
for(int i = 0; i < m; i++)
{
M[i]->show_data();
printf("\n");
}
cout << "经理信息统计完毕,经理人数:" << m << endl;
printf("\n");
cout << "销售人员信息: " << endl;
for(int i = 0; i < s; i++)
{
S[i]->show_data();
printf("\n");
}
cout << "销售人员信息统计完毕,销售人员人数:" << s << endl;
printf("\n");
cout << "工人信息: " << endl;
for(int i = 0; i < w; i++)
{
W[i]->show_data();
printf("\n");
}
cout << "工人信息统计完毕,工人人数:" << w << endl;
printf("\n");
cout << "临时工信息: " << endl;
for(int i = 0; i < f; i++)
{
F[i]->show_data();
printf("\n");
}
cout << "临时工信息统计完毕,临时工人数:" << f << endl;
printf("\n");
cout << "员工总人数:" << n << endl;
}
///按工资从小到大排序
template<typename T> void quick_sort(T p[], int l, int r)
{
T key = p[l];
int i, j;
i = l;
j = r;
if(i >= j) return;
while(i < j)
{
while(i < j && p[r]->get_wage() >= key->get_wage())
j--;
p[i] = p[j];
while(i < j && p[i]->get_wage() <= key->get_wage())
i++;
p[j] = p[i];
}
p[i] = key;
quick_sort(p, i, i - 1);
quick_sort(p, i + 1, j);
}
void sort_in_wages()
{
int x;
printf("您要进行排序的员工类型:\n");
printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
scanf("%d", &x);
if(x < 1 || x > 4)
{
printf("输入错误!\n");
return;
}
switch(x)
{
case 1:quick_sort(M, 0, m - 1); break;///M和&M[0]相同,都表示首地址
case 2:quick_sort(S, 0, s - 1);break;
case 3:quick_sort(W, 0, w - 1);break;
case 4:quick_sort(F, 0, f - 1);break;
///default:printf("输入错误!\n");break;
}
printf("排序完成!\n");
}
///将文件中员工信息导入程序
void get_from_file()
{
freopen("text1.txt", "r", stdin);///输入重定向到文件
cin >> n >> m >> s >> w >> f;
for(int i = 0; i < m; i++)
{
M[i]= new Manager();
M[i]->load();
}
for(int i = 0; i < s; i++)
{
S[i]= new Salesman();
S[i]->load();
}
for(int i = 0; i < w; i++)
{
W[i]= new Worker();
W[i]->load();
}
for(int i = 0; i < f; i++)
{
F[i]= new Floater();
F[i]->load();
}
freopen("CON", "r", stdin);///输入重定向到控制台
cout << "信息导入完毕!" << endl;
}
///将员工信息分类存储到文件
void save_to_file()
{
freopen("text1.txt", "w", stdout);///输出重定向到文件
cout << n << " " << m << " " << s << " " << w << " " << f << endl;
for(int i = 0; i < m; i++)
{
M[i]->unload();
}
for(int i = 0; i < s; i++)
{
S[i]->unload();
}
for(int i = 0; i < w; i++)
{
W[i]->unload();
}
for(int i = 0; i < f; i++)
{
F[i]->unload();
}
freopen("CON", "w", stdout);///输出重定向到控制台
cout << "信息存储完成!" << endl;
}
void menu()
{///菜单
printf("\n");
printf("****************************************\n");///40个
printf("* 1.新增员工信息 *\n");
printf("* 2.删除员工信息 *\n");
printf("* 3.员工信息搜索 *\n");
printf("* 4.员工信息统计(按类别) *\n");
printf("* 5.按工资排序 *\n");
//printf("* 6.将文件中员工信息导入程序 *\n");
//printf("* 7.将员工信息分类存储到文件 *\n");
printf("* -1.退出 *\n");
printf("****************************************\n");
printf("\n");
}
int main()
{
int x;
get_from_file();///将文件中员工信息导入程序
cout << n << " " << m << " " << s << " " << w << " " << f << endl;
while(1)
{
menu();
printf("请输入您要使用的功能编号: ");
scanf("%d", &x);
if(x == -1 || (x >= 1 && x <= 5))
{
switch(x)
{
case 1:Add_person(); break;///新增员工信息
case 2:Delete_person(); break;///删除员工信息
case 3:Search1_inf(); break;///员工信息搜索
case 4:display_all(); break;///员工信息统计
case 5:sort_in_wages(); break;///按工资排序
///case 6:get_from_file(); break;///将文件中员工信息导入程序
///case 7:save_to_file(); break;///将员工信息分类存储到文件
case -1:save_to_file(); exit(1);///退出并将员工信息分类存储到文件
///default:printf("输入错误!请重新选择\n"); break;
}
}
else
{
printf("输入错误!请重新选择\n");
}
}
return 0;
}
二进制存取方式版本
///二进制读取方式 string改成字符数组版
#include <iostream>///包含cin和cout
#include <cstdio>///包含scanf, printf的函数
#include <cstdlib>///包含abort()和exit()
#include <string>///string类的相关函数
#include <cstring>///包含strcmp()
#include <fstream>///文件输入输出流
using namespace std;
///类:
class Employee
{///职业 抽象类
protected:
char name[10], sex[3], birthday[10], category[10];///
double wage;
public:
Employee(){};
char *get_name();///
double get_wage();
virtual void set_data();
virtual void show_data();
virtual void computeSalary() = 0;
virtual ~Employee(){};///此处很重要,一定要加virtual,具体可查“基类的虚析构函数”
};
void Employee::set_data()
{
cout << "请按照提示依次输入信息" << endl;
cout << "姓名: " << endl;
cin >> name;
cout << "性别: " << endl;
cin >> sex;
cout << "出生日期(例:19980515): " << endl;
cin >> birthday;
//cout << "职业类型(经理、销售人员、工人、临时工): " << endl;
//cin >> category;
}
char *Employee::get_name()///
{
return name;
}
double Employee::get_wage()
{
return wage;
}
void Employee::show_data()
{
cout << "姓名: " << name << endl;
cout << "性别: " << sex << endl;
cout << "出生日期: " << birthday << endl;
cout << "职业类型: " << category << endl;
cout << "总工资:" << wage << endl;
}
Employee *M[100];///经理对象的指针数组
Employee *S[100];///销售人员对象的指针数组
Employee *W[100];///工人对象的指针数组
Employee *F[100];///临时工对象的指针数组
int n;///总人数
int m;///经理人数
int s;///销售人员人数
int w;///工人人数
int f;///临时工人数
class Manager: public Employee
{///经理
private:
double monthly_wages;
public:
Manager(){};
void set_data();
void show_data();
void computeSalary();
};
void Manager::set_data()
{
Employee::set_data();
strcpy(category, "经理"); ///category = "经理";
cout << "请输入该经理的月工资" << endl;
cin >> monthly_wages;
cout << "输入结束" << endl;
}
void Manager::show_data()
{
Employee::show_data();
cout << "月工资: " << monthly_wages << endl;
}
void Manager::computeSalary()
{
wage = monthly_wages;
}
class Salesman: public Employee
{///销售人员
private:
double basic_wage, push_money;
int sold_num;
public:
Salesman(){};
void set_data();
void show_data();
void computeSalary();
};
void Salesman::set_data()
{
Employee::set_data();
strcpy(category, "销售人员");///category = "销售人员";
cout << "基础工资: " << endl;
cin >> basic_wage;
cout << "每售出一件产品的提成额度: " << endl;
cin >> push_money;
cout << "售出的产品数量: " << endl;
cin >> sold_num;
cout << "输入结束" << endl;
}
void Salesman::show_data()
{
Employee::show_data();
cout << "基础工资: " << basic_wage << endl;
cout << "每售出一件产品的提成额度: " << push_money << endl;
cout << "售出的产品数量: " << sold_num << endl;
}
void Salesman::computeSalary()
{
wage = basic_wage + push_money * sold_num;
}
class Worker: public Employee
{///工人
private:
double day_wage;
int work_day;
public:
Worker(){};
void set_data();
void show_data();
void computeSalary();
};
void Worker::set_data()
{
Employee::set_data();
strcpy(category, "工人");///category = "工人";
cout << "每日工资: " << endl;
cin >> day_wage;
cout << "工作天数: " << endl;
cin >> work_day;
cout << "输入结束" << endl;
}
void Worker::show_data()
{
Employee::show_data();
cout << "每日工资: " << day_wage << endl;
cout << "工作天数: " << work_day << endl;
}
void Worker::computeSalary()
{
wage = day_wage * work_day;
}
class Floater: public Employee
{///临时工
private:
double hour_wage;
int work_hour;
public:
Floater(){};
void set_data();
void show_data();
void computeSalary();
};
void Floater::set_data()
{
Employee::set_data();
strcpy(category, "临时工");///category = "临时工";
cout << "每小时工资: " << endl;
cin >> hour_wage;
cout << "工作小时数: " << endl;
cin >> work_hour;
cout << "输入结束" << endl;
}
void Floater::show_data()
{
Employee::show_data();
cout << "每小时工资: " << hour_wage << endl;
cout << "工作小时数: " << work_hour << endl;
}
void Floater::computeSalary()
{
wage = hour_wage * work_hour;
}
///功能函数:
///添加员工信息:
void Add_Manager()
{///添加新经理
M[m]= new Manager();
M[m]->set_data();
M[m]->computeSalary();
m++;
n++;
}
void Add_Salesman()
{///添加新销售人员
S[s]= new Salesman();
S[s]->set_data();
S[s]->computeSalary();
s++;
n++;
}
void Add_Worker()
{///添加新工人
W[w]= new Worker();
W[w]->set_data();
W[w]->computeSalary();
w++;
n++;
}
void Add_Floater()
{///添加新临时工
F[f]= new Floater();
F[f]->set_data();
F[f]->computeSalary();
f++;
n++;
}
void Add_person()
{///新增员工
int x;
printf("您要新增的员工类型:\n");
printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
scanf("%d", &x);
if(x < 1 || x > 4)
{
printf("输入错误!\n");
return;
}
switch(x)
{
case 1:Add_Manager();break;
case 2:Add_Salesman();break;
case 3:Add_Worker();break;
case 4:Add_Floater();break;
}
}
///删除员工信息:
void Delete_Manager()
{///删除经理
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < m; i++)
{
if(strcmp(name1, M[i]->get_name()) == 0)///name1 == M[i]->get_name()
{
delete M[i];
for(int j = i; j < m - 1; j++)
{
M[j] = M[j + 1];
}
M[m - 1] = NULL;
m--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_Salesman()
{///删除销售人员
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < s; i++)
{
if(strcmp(name1, S[i]->get_name()) == 0)///
{
delete S[i];
for(int j = i; j < s - 1; j++)
{
S[j] = S[j + 1];
}
S[s - 1] = NULL;
s--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_Worker()
{///删除工人
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; strcmp(name1, W[i]->get_name()) == 0; i++)///
{
if(name1 == W[i]->get_name())
{
delete W[i];
for(int j = i; j < w - 1; j++)
{
W[j] = W[j + 1];
}
W[w - 1] = NULL;
w--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_Floater()
{///删除临时工
int flag = 0;
char name1[10];///
cout << "请输入您要删除的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < f; i++)
{
if(strcmp(name1, F[i]->get_name()) == 0)///
{
delete F[i];
for(int j = i; j < f - 1; j++)
{
F[j] = F[j + 1];
}
F[f - 1] = NULL;
f--;
n--;
flag = 1;
break;
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
else
{
cout << "删除成功!" << endl;
}
}
void Delete_person()
{///删除员工
int x;
printf("您要删除的员工类型:\n");
printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
scanf("%d", &x);
if(x < 1 || x > 4)
{
printf("输入错误!\n");
return;
}
switch(x)
{
case 1:Delete_Manager();break;
case 2:Delete_Salesman();break;
case 3:Delete_Worker();break;
case 4:Delete_Floater();break;
default:printf("输入错误!\n");break;
}
}
///员工信息搜索
void Search1_inf()
{
int flag = 0;
char name1[10];///
cout << "请输入您要查找的员工姓名: " << endl;
cin >> name1;
for(int i = 0; i < m; i++)
{///查询是否为经理
if(strcmp(name1, M[i]->get_name()) == 0)///
{
M[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
if(flag == 0)
{///查询是否为销售人员
for(int i = 0; i < s; i++)
{
if(strcmp(name1, S[i]->get_name()) == 0)///
{
S[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
}
if(flag == 0)
{///查询是否为工人
for(int i = 0; i < w; i++)
{
if(strcmp(name1, W[i]->get_name()) == 0)///
{
W[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
}
if(flag == 0)
{///查询是否为临时工
for(int i = 0; i < f; i++)
{
if(strcmp(name1, F[i]->get_name()) == 0)
{
F[i]->show_data();
cout << "查询完毕!" << endl;
flag = 1;
break;
}
}
}
if(flag == 0)
{
cout << "未找到您输入的员工姓名" << endl;
}
}
///员工信息统计
void display_all()
{
printf("\n");
cout << "经理信息: " << endl;
for(int i = 0; i < m; i++)
{
M[i]->show_data();
printf("\n");
}
cout << "经理信息统计完毕,经理人数:" << m << endl;
printf("\n");
cout << "销售人员信息: " << endl;
for(int i = 0; i < s; i++)
{
S[i]->show_data();
printf("\n");
}
cout << "销售人员信息统计完毕,销售人员人数:" << s << endl;
printf("\n");
cout << "工人信息: " << endl;
for(int i = 0; i < w; i++)
{
W[i]->show_data();
printf("\n");
}
cout << "工人信息统计完毕,工人人数:" << w << endl;
printf("\n");
cout << "临时工信息: " << endl;
for(int i = 0; i < f; i++)
{
F[i]->show_data();
printf("\n");
}
cout << "临时工信息统计完毕,临时工人数:" << f << endl;
printf("\n");
cout << "员工总人数:" << n << endl;
}
///按工资排序
template<typename T> void quick_sort(T p[], int l, int r)
{
T key = p[l];
int i, j;
i = l;
j = r;
if(i >= j) return;
while(i < j)
{
while(i < j && p[r]->get_wage() >= key->get_wage())
j--;
p[i] = p[j];
while(i < j && p[i]->get_wage() <= key->get_wage())
i++;
p[j] = p[i];
}
p[i] = key;
quick_sort(p, i, i - 1);
quick_sort(p, i + 1, j);
}
void sort_in_wages()
{
int x;
printf("您要进行排序的员工类型:\n");
printf("1.经理\t 2.销售人员\t 3.一般工人\t 4.临时工\n");
scanf("%d", &x);
if(x < 1 || x > 4)
{
printf("输入错误!\n");
return;
}
switch(x)
{
case 1:quick_sort(M, 0, m - 1); break;///M和&M[0]相同,都表示首地址
case 2:quick_sort(S, 0, s - 1);break;
case 3:quick_sort(W, 0, w - 1);break;
case 4:quick_sort(F, 0, f - 1);break;
///default:printf("输入错误!\n");break;
}
printf("排序完成!\n");
}
///将文件中员工信息导入程序
void get_from_file()
{
ifstream infile("file1.dat", ios::in | ios::binary);///|ios::binary
if(!infile)
{
cerr << "open file1.dat error!" << endl;
cerr << "请将数据文件\"file1.dat\"放入该程序所在文件夹,或在该程序所在文件夹中建立该文件!" << endl;
abort();
}
infile.read((char *)&n, sizeof(n));
infile.read((char *)&m, sizeof(m));
infile.read((char *)&s, sizeof(s));
infile.read((char *)&w, sizeof(w));
infile.read((char *)&f, sizeof(f));
for(int i = 0; i < m; i++)
{
M[i]= new Manager();
infile.read((char *)M[i], sizeof(Manager));
}
for(int i = 0; i < s; i++)
{
S[i]= new Salesman();
infile.read((char *)S[i], sizeof(Salesman));
}
for(int i = 0; i < w; i++)
{
W[i]= new Worker();
infile.read((char *)W[i], sizeof(Worker));
}
for(int i = 0; i < f; i++)
{
F[i]= new Floater();
infile.read((char *)F[i], sizeof(Floater));
}
infile.close();
cout << "信息导入完毕!" << endl;
}
///将员工信息分类存储到文件
void save_to_file()
{
ofstream outfile("file1.dat", ios::out | ios::binary);
if(!outfile)
{
cerr << "open file1.dat error!" << endl;
abort();
}
outfile.write((char *)&n, sizeof(n));
outfile.write((char *)&m, sizeof(m));
outfile.write((char *)&s, sizeof(s));
outfile.write((char *)&w, sizeof(w));
outfile.write((char *)&f, sizeof(f));
for(int i = 0; i < m; i++)
{
outfile.write((char *)M[i], sizeof(Manager));
}
for(int i = 0; i < s; i++)
{
outfile.write((char *)S[i], sizeof(Salesman));
}
for(int i = 0; i < w; i++)
{
outfile.write((char *)W[i], sizeof(Worker));
}
for(int i = 0; i < f; i++)
{
outfile.write((char *)F[i], sizeof(Floater));
}
outfile.close();
cout << "信息存储完成!" << endl;
}
void menu()
{///菜单
printf("\n");
printf("****************************************\n");///40个
printf("* 1.新增员工信息 *\n");
printf("* 2.删除员工信息 *\n");
printf("* 3.员工信息搜索 *\n");
printf("* 4.员工信息统计(按类别) *\n");
printf("* 5.按工资排序 *\n");
//printf("* 6.将文件中员工信息导入程序 *\n");
//printf("* 7.将员工信息分类存储到文件 *\n");
printf("* -1.退出 *\n");
printf("****************************************\n");
printf("\n");
}
int main()
{
int x;
get_from_file();///将文件中员工信息导入程序
cout << n << " " << m << " " << s << " " << w << " " << f << endl;
while(1)
{
menu();
printf("请输入您要使用的功能编号: ");
scanf("%d", &x);
if(x == -1 || (x >= 1 && x <= 5))
{
switch(x)
{
case 1:Add_person(); break;///新增员工信息
case 2:Delete_person(); break;///删除员工信息
case 3:Search1_inf(); break;///员工信息搜索
case 4:display_all(); break;///员工信息统计
case 5:sort_in_wages(); break;///按工资排序
///case 6:get_from_file(); break;///将文件中员工信息导入程序
///case 7:save_to_file(); break;///将员工信息分类存储到文件
case -1:save_to_file(); exit(1);///退出并将员工信息分类存储到文件
///default:printf("输入错误!请重新选择\n"); break;
}
}
else
{
printf("输入错误!请重新选择\n");
}
}
return 0;
}