⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ying.cpp

📁 小型公司工资管理系统 工资的计算方法: A 经理:固定月薪为8000; B 技术员:工作时间*小时工资(100元每小时); C 销售员:销售额*4%提成; D 销售经理:底薪(5000)+所
💻 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 + -