📄 ying.cpp
字号:
//ying.cpp
#include<iostream.h>
#include"employee.h"
#include<string.h>
int mn;//确定经理的人数
#include<iomanip.h>
#include<fstream.h>
#include<stdlib.h>
//在满足条件的情况下,可随意设置员工的人数,有较强的灵活性
int tn;//确定技术员的人数
int sn;//确定销售员的人数
int smn;//确定销售经理的人数
static int smnu[100]={0};//静态数组,用于存放销售经理所分配的销售员人数
int sum(int i);//计算静态数组的前i项和
Technition t[100];//技术员类对象数组
Manager m[100];//经理类对象数组
Saleman s[100];//销售员类对象数组
Salesmanager sm[100];//销售经理类对象数组
Employee e[400];
void Imiasin()//初始化全局对象数组,便于后面排序和打印表格
{for(int i=0;i<tn;i++)
e[i]=t[i];
for(i=0;i<mn;i++)
e[i]=m[i];
for(i=0;i<sn;i++)
e[i]=s[i];
for(i=0;i<smn;i++)
e[i]=sm[i];
}
void Quit_system()
{cout<<"*****退出系统!*****"<<endl;}
void Menu()//菜单,具有选择功能
{char ch;
cout<<" 菜单选项有:"<<endl;
cout<<" 1.数据输入(Input)"<<endl;
cout<<" 2.数据统计(Statistic)"<<endl;
cout<<" 3.数据备份(Back_up)"<<endl;
cout<<" 4.数据排序(Arrange)"<<endl;
cout<<" 5.数据输出(Output)"<<endl;
cout<<" 6.退出系统(Quit)"<<endl;
cout<<" 请选择菜单(输入首字母):"<<endl;
cin>>ch;//通过开关语句选择菜单
switch(ch)
{case'I':Input();break;
case'S':Statistic();break;
case'B':Back_up();break;//
case'A':Arrange();break;
case'O':Output();break;//
case'Q':Quit_system();break;//
default:cout<<" ******输入错误!请重新输入:*****"<<endl;
Menu();
}
}
void main()
{ Imiasin();////////////////////////////////////////////////////////////////////
cout<<" **************************************"<<endl;
cout<<" * 南昌某公司工资管理系统 *"<<endl;
cout<<" **************************************"<<endl;
Menu();
}
void Input()//菜单输入数据功能
{cout<<"请输入技术员的人数:"<<"0<=number<"<<tn<<"100)"<<endl;
cin>>tn;
cout<<"请输入经理的人数:"<<"0<=number<"<<mn<<"100)"<<endl;
cin>>mn;
cout<<"请输入销售员的人数:"<<"0<=number<"<<sn<<"100)"<<endl;
cin>>sn;
cout<<"请输入销售经理的人数:"<<"0<=number<"<<smn<<"100)"<<endl;
cin>>smn;
for(int i=0;i<tn;i++)//输入tn个技术员的工作时间
t[i].Setwork_hour();
for(i=0;i<sn;i++) //输入sn销售员的销售额
s[i].Setsale_amount();
if((tn>100) &( mn>100)& (sn>400 )& (smn>100) & (sn>smn))
cout<<"数据输入错误!"<<endl;
Settotal_amount();//计算销售经理总销售额
if(tn==0) cout<<endl;//若输入人数为0,则不输出人员信息
else
{cout<<"现在开始输入技术员的档案:"<<endl;
for(i=0;i<tn;i++)///输入tn个技术员信息
cin>>e[i].num>>e[i].name>>e[i].sex>>e[i].age>>e[i].position;
}
if(mn==0) cout<<endl;
else
{cout<<"现在开始输入经理的档案:"<<endl;
for(i=tn;i<tn+mn;i++)//输入mn个经理信息
cin>>e[i].num>>e[i].name>>e[i].sex>>e[i].age>>e[i].position;
}
if(sn==0) cout<<endl;
else
{cout<<"现在开始输入销售员的档案:"<<endl;
for(i=tn+mn;i<tn+mn+sn;i++)//输入sn个销售员信息
cin>>e[i].num>>e[i].name>>e[i].sex>>e[i].age>>e[i].position;
}
if(smn==0) cout<<endl;
else
{cout<<"现在开始输入销售经理的档案:"<<endl;
for(i=tn+mn+sn;i<tn+mn+sn+smn;i++)//输入smn个销售经理信息
cin>>e[i].num>>e[i].name>>e[i].sex>>e[i].age>>e[i].position;
}
cout<<"******** 数据输入完毕! ********"<<endl;
Menu();//选择菜单的下一功能
}
void Statistic ()//菜单统计功能,并输出某一销售经理的销售情况
{ if(tn==0) cout<<endl;
else
{cout<<"您所输入的技术员的工资如下!"<<endl;
for(int i=0;i<tn;i++)//
{ t[i].Pay();//计算技术员的工资
cout<<t[i].month_pay<<endl;//输出技术员的工资,便于检查计算是否正确
}
}
if(mn==0) cout<<endl;
else
{ cout<<"您所输入的经理的工资如下:"<<endl;
for(int i=0;i<mn;i++)//
{
m[i].Pay();//计算经理的工资
cout<<m[i].month_pay<<endl;//输出经理的工资
}
}
if(sn==0) cout<<endl;
else
{ cout<<"您所输入的销售员的工资如下:"<<endl;
for(int i=0;i<sn;i++)//
{
s[i].Pay();//计算销售员的工资
cout<<s[i].month_pay<<endl;//输出销售员的工资
}
}
if(smn==0) cout<<endl;
else
{ cout<<"您所输入的销售经理的工资如下:"<<endl;
for(int i=0;i<smn;i++)//
{
sm[i].Pay();//计算销售经理的工资
cout<<sm[i].month_pay<<endl;//输出销售经理的工资
}
}
//将各员工的工资传递给雇员对象数组元素
for(int i=0;i<tn;i++)
e[i].month_pay=t[i].month_pay;
for(i=0;i<mn;i++)
e[tn+i].month_pay=m[i].month_pay;
for(i=0;i<sn;i++)
e[tn+mn+i].month_pay=s[i].month_pay;
for(i=0;i<smn;i++)
e[tn+mn+sn+i].month_pay=sm[i].month_pay;
cout<<"现在输出一销售经理的业绩:"<<endl;
cout<<"请输入该销售经理在销售部门的号码:"<<"(0<=number<"<<smn<<")"<<endl;
int N,t;
cin>>N;
cout<<"┌────┬────┬────┐"<<endl;
cout<<"│ 职工号 │ 姓名 │ 销售额 │"<<endl;
cout<<"├────┼────┼────┤"<<endl;
// int t;
if(N<1)
t=tn+mn+smnu[N-1];//确定每个销售经理所对应的销售员号码
else t=tn+mn+smnu[N-1]-1;//
for(i=0;i<smnu[N];i++)//用smnu[N]来控制循环次数
{ int r=t++;
cout<<"│"<<setw(8)<<e[r].num<<"│"<<setw(8)<<e[r].name<<"│"<<setw(8)<<s[i].sale_amount<<"│"<<endl;
cout<<"├────┼────┼────┤"<<endl;
}
cout<<"│"<<setw(18)<<"销售额合计"<<"│"<<setw(8)<<sm[N].total_amount<<"│"<<endl;
cout<<"└─────────┴────┘"<<endl;
cout<<"******* 数据统计完毕! ********"<<endl;
Menu();
}
void Back_up()//菜单备份文件功能
{
fstream infile,outfile;
outfile.open("ZhangYang.txt",ios::out|ios::binary);//以二进制写的方式打开文件
if(!outfile)
{cout<<"ZhangYang.txt can't open"<<endl;
abort();
}
for(int i=0;i<tn+mn+sn+smn;i++)//将各员工的信息写入文件
outfile.write((char *)&e[i],sizeof(e[i]));
outfile.close();
infile.open("ZhangYang.txt",ios::in|ios::binary);//以二进制读的方式打开文件
if(!infile)
{cout<<"ZhangYang.txt can't open"<<endl;
abort();
}
cout<<"现在显示您所输入的员工的信息:"<<endl;//将各员工的信息输到屏幕上
for(i=0;i<tn+mn+sn+smn;i++)
{
infile.read((char *)&e[i],sizeof(e[i]));//将各员工的信息从文件中读出
cout<<e[i].num<<" "<<e[i].name<<" "<<e[i].sex<<" "<<e[i].age<<" "
<<e[i].position<<endl;
}
infile.close();
cout<<"******** 文件备份完毕! ********"<<endl;
Menu();
}
void Arrange()//菜单排序功能,处理了重复数据的排名问题
{
//现在开始对各员工工资进行排序
for(int i=0;i<tn+mn+sn+smn;i++)//双重循环,实现按工资从大到小排列
for(int j=i+1;j<tn+mn+sn+smn;j++)//工资高者,输出在前,并交换信息
{int no,a;
char na[10]="zhang",se[10]="M",po[10]="Technit";//给三个字符数组赋初值
double temp;
if(e[i].month_pay < e[j].month_pay)//判断相邻两员工的工资大小,看是否进行交换
{no=e[i].num; e[i].num=e[j].num; e[j].num=no;//交换职工号
strcpy(na,e[i].name); strcpy(e[i].name,e[j].name); strcpy(e[j].name,na);//交换职工姓名
strcpy(se,e[i].sex); strcpy(e[i].sex,e[j].sex); strcpy(e[j].sex,se);//交换职工性别
a=e[i].age; e[i].age=e[j].age; e[j].age=a;//交换职工年龄
strcpy(po,e[i].position); strcpy(e[i].position,e[j].position), strcpy(e[j].position,po);//交换职工岗位
temp=e[i].month_pay; e[i].month_pay=e[j].month_pay; e[j].month_pay=temp;//交换职工工资
}
}
cout<<"******* 数据排序完毕! ********"<<endl;
Menu();
}
void Output()//菜单输出功能,按表格形式输出
{
cout<<"现在输出您所输入的员工的基本信息:"<<endl;
cout<<"┌────┬────┬────┬────┬────┬────┬────┐"<<endl;
cout<<"│ 职工号 │ 姓名 │ 性别 │ 年龄 │ 岗位 │ 工资 │ 排名 │"<<endl;
for(int i=0;i<tn+mn+sn+smn;i++)//控制循环
{
cout<<"├────┼────┼────┼────┼────┼────┼────┤"<<endl;
cout<<"│"<<setw(8)<<e[i].num<<"│"<<setw(8)<<e[i].name<<"│"<<setw(8)<<e[i].sex<<"│"<<setw(8)
<<e[i].age<<"│"<<setw(8)<<e[i].position<<"│"<<setw(8)<<e[i].month_pay<<"│"<<setw(8);
if(i<1)
cout<<e[i].place<<"│"<<endl;
else
if(e[i].month_pay<e[i-1].month_pay)//相邻两项比较,若后者工资少,则相应名次自增1
{ e[i].place++;
cout<<e[i].place<<"│"<<endl;
}
else
if(e[i].month_pay==e[i-1].month_pay)//若相邻两项工资相等,则名次保持不变
cout<<e[i].place<<"│"<<endl;
}
cout<<"└────┴────┴────┴────┴────┴────┴────┘"<<endl;
cout<<"******** 数据输出完毕! ********"<<endl;
Menu();
}
void Settotal_amount()//确定销售经理的销售总额
{
static int p=0;
int q;
for(int i=0;i<smn;i++)
{
cout<<"请输入相应销售经理所分配的销售员人数:"<<"(0<number<"<<smn<<")"<<endl;
cin>>q;
p+=q;
smnu[i]=q;
}
if(p!=sn)
cout<<"数据输入错误:"<<endl;
for( i=0;i<smn;i++)
for(int j=0;j<smnu[i];j++)
{ int r;
r=sum(i-1);
sm[i].total_amount+=s[j+r].sale_amount;
cout<<"现在开始输出销售经理的销售总额:"<<endl;//输出销售经理的销售总额
cout<<sm[i].total_amount<<endl;
}
}
int sum(int i)//计算数组smnu[i]的前i项和
{
int s=0;
for(int j=0;j<=i;j++)
s+=smnu[j];
return s;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -