公司职员信息管理系统 用C或C++
公司职员信息管理系统
一、 系统概要
公司职员的信息管理程序主要实现以下功能:输入员工的姓名,输出该员工的基本信息、级别以及当月工资信息。需求如下。
1、 某小型公司,主要由总经理、技术经理和技术人员、销售经理和销售人员。要求存储所有人员的一下信息:姓名、性别、出生年月、技术特长、血型、星座、参加工作时间、接入本公司时间、联系电话、编号、级别、当月薪、计算月薪总额并显示全部信息。
2、 人员的编号从1开始,依次递增。
3、 程序对所有人员有提升级别的功能。假设所有人员的初始级别均为1级,然后进行升级,总经理升为4级,技术经理和销售经理升为3级,技术人员升为2级,销售人员为1级。
4、 月工资计算办法如下:总经理拿固定月薪10000元; 技术经理拿固定月薪6000元加奖金;技术人员拿固定月薪3000元加奖金;销售经理既拿固定月薪也领取销售提成,固定月薪为4000元,销售提成为所辖部门的当月销售总额的5‰;销售人员的月薪按当月销售额的1%提成。
5、 考核结果作为升级和工资提成的依据,考核结果按百分制计算。
二、 基本功能要求
设计一个基类employee,然后派生出technician(技术人员)类、manager(经理)类和saleman(销售人员)类共3类,在此基础上通过继承和派生实现其它类。职员信息要求保存到文件。对部分数据应设置有操作权限。
三、 功能描述
1、 新进入公司员工基本信息的输入。
2、 公司员工基本信息的查询、修改。
3、 离开公司员工信息的处理。
4、 与员工级别有关的操作。
5、 与月薪有关的操作。
6、 与人员考核有关的操作。
四、主要知识点
面向对象程序设计技术,特别是继承和派生以及文件的操作。
备注:对使用可视化技术编程者,将给予5—15分的加分
我把自己写的发上来,帮忙修改下,让它能运行
补充:#include <iostream.h>
#include <fstream.h>
#include <ctype.h>
#include <string.h>
//全局数据,对象
double pay; //经理固定月薪
double pay1; //销售经理固定月薪
double pay2; //技术人员当月薪
double pay3; //技术经理当月薪
double rate; //销售经理提成%
double rate1; //销售人员提成%
double bonus; //技术经理奖金
double bonus1;//技术人员奖金
int ID; //员工标识(要保证唯一)
class employee
//姓名、性别、出生年月、技术特长、血型、星座、参加工作时间、接入本公司时间、联系电话、编号、级别、
{
protected:
int No; //编号
int grade; //级别
int Duty; //岗位
char Name[20]; //姓名
char 易做图;
char domain[20]; //技术特长
char xingzuo[20],xuexing;
double income; //收入
double bore; //生日
double t1; //参加工作时间
double t2; //加入本公司时间
double phone;
employee *next;
public:
employee(char ID,char *Name,char 易做图,int grade,char *domain,double bore,\
char *xingzuo,char xuexing,double income,double t1,double t2,double phone,int Duty)
{
this->t1=t1;
this->t2=t2;
this->No=ID;
this->易做图=易做图;
this->Duty=Duty;
this->grade=grade;
this->phone=phone;
this->income=income;
this->xuexing=xuexing;
strcpy(this->Name,Name);
strcpy(this->domain,domain);
strcpy(this->xingzuo=xingzuo);
}
virtual void CalcSalary()=0;
virtual void Output()=0;
virtual void promote(int increase=0);
friend class Company;
};
class Manager: virtual public employee //经理类
{
public:
Manager(char ID,char *Name,char 易做图,int grade,char *domain,double bore,char *xingzuo,\
char xuexing,double income,double t1,double t2,double phone,int Duty):\
employee( ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty){}
void CalcSalary(){income=pay;}
void promote(int);
void Output()
{
CalcSalary();
cout<<"编号"<<No<<endl<<"姓名"<<Name<<endl<<"性别"<<易做图<<endl<<"总月薪"<<income<<endl\
<<"星座"<<xingzuo<<endl<<"血型"<<xuexing<<endl<<"级别"<<grade<<endl<<"特长"<<domain<<endl\
<<"生日"<<bore<<endl<<"参加工作时间"<<t1<<endl<<"加入本公司时间"<<t2<<endl<<"电话"<<phone<<endl;
}
};
class saleman: virtual public employee //销售员类
{
private:
double sales;//销售额
public:
saleman(char ID,char *Name,char 易做图,int grade,char *domain,double bore,\
char *xingzuo,char xuexing,double income,double t1,double t2,double phone,int Duty,double sales):\
employee(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty)
{
this->sales=sales;
}
double Getsales()
{
return sales;
}
void Setsales(double sales)
{
this->sales=sales;
}
void CalcSalary()
{
income=(rate1)/100*sales;
}
void promote(int);
void Output()
{
CalcSalary();
cout<<"编号"<<No<<endl<<"姓名"<<Name<<endl<<"销售额"<<sales<<endl<<"总月薪"<<income<<endl<<"星座"\
<<xingzuo<<endl<<"血型"<<xuexing<<endl<<"级别"<<grade<<endl<<"特长"<<domain<<endl\
<<"生日"<<bore<<endl<<"参加工作时间"<<t1<<endl<<"加入本公司时间"<<t2<<endl<<"电话"<<phone<<endl;
}
};
class SalesManager:public saleman,public Manager //销售经理类
{
private:
double sales;
public:
SalesManager(char ID,char *Name,char 易做图,int grade,char *domain,double bore,\
char *xingzuo,char xuexing,double income,double t1,double t2,double phone,int Duty,double sales):\
Manager(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty),\
saleman(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty,sales){} //(多继承如何初始化?)
void Setsales(double s)
{
sales=s;
}
void CalcSalary()
{
income=pay1+sales*rate/200;
}
void promote(int);
void Output()
{
CalcSalary();
cout<<"编号"<<No<<endl<<"姓名"<<Name<<endl<<"销售额"<<sales<<endl<<"总月薪"<<income<<endl<<"星座"\
<<xingzuo<<endl<<"血型"<<xuexing<<endl<<"级别"<<grade<<endl<<"特长"<<domain<<endl\
<<"生日"<<bore<<endl<<"参加工作时间"<<t1<<endl<<"加入本公司时间"<<t2<<endl<<"电话"<<phone<<endl;
}
};
class Technician:virtual public employee //技术员类
{public:
Technician(char ID,char *Name,char 易做图,int grade,char *domain,double bore,\
char *xingzuo,char xuexing,double income,double t1,double t2,double phone,int Duty):\
employee(ID,*Name,易做图,grade,*domain,bore,xingzuo,xuexing,income,t1,t2,phone,Duty){}
void CalcSalary()
{
income=pay2+bonus1;
}
void promote(int);
void Output()
{
CalcSalary();
cout<<"编号"<<No<<endl<<"姓名"<<Name<<endl<<"总月薪"<<income<<endl<<"星座"\
<<xingzuo<<endl<<"血型"<<xuexing<<endl<<"级别"<<grade<<endl<<"特长"<<domain<<endl\
<<"生日"<<bore<<endl<<"参加工作时间"<<t1<<endl<<"加入本公司时间"<<t2<<endl<<"电话"<<phone<<endl;
}
};
class Tech_manager:public Technician,public Manager
{
public:
Tech_manager(char ID,char *Name,char 易做图,int grade,char *domain,double bore,\
char *xingzuo,char xuexing,double income,double t1,double t2,double phone,int Duty):\
Technician(ID,*Name,易做图,grade,*domain,bore,xingzuo,xuexing,income,t1,t2,phone,Duty),\
Manager(ID,*Name,易做图,grade,*domain,bore,xingzuo,xuexing,income,t1,t2,phone,Duty){}
void CalcSalary()
{
income=bonus+pay3;
}
void promote(int);
};
class Company //公司类
{
private:
employee *Worker; //员工表
void Clear(); //清除内存中数据
public:
Company()
{
Worker=0;
Load();
}
~Company()
{
employee *p;
p=Worker;
while(p)
{
p=p->next;
delete Worker;
Worker=p;
}
Worker=0;
}
void Add(); //增加人员
void Delete(); //删除人员
void Modify(); //修改人员
void Query(); //查询人员
void Set(); //基础数据设置
void Save(); //数据存盘(包括基础数据,人员数据)
void Load(); //数据装入(包括基础数据,人员数据)
};
void employee::promote(int increase)
{
grade+=increase;
}
void Manager::promote(int)
{
employee::promote(3);
}
void saleman::promote(int)
{
employee::promote(0);
}
void salemanager::promote(int)
{
employee::promote(2);
}
void Technician::promote(int)
{
employee::promote(1);
}
void Tech_manager::promote(int)
{
employee::promote(2);
}
void Company::Clear() //清除内存中人员数据(内部使用)
{
employee* p=Worker;
while(p)
{
Worker=p->next;
delete p;
p=Worker;
}
}
void Company::Add()
{
employee *p; //新结点指针
int Duty;
char Name[20];
double sales,T;
cout<<"\n** 新增员工 **\n";
//输入员工信息
ID++;
cout<<"输入岗位(1-经理2-销售经理3-销售员4-技术员5-技术经理):"; cin>>Duty;
cout<<"输入姓名:"; cin>>Name;
if(Duty==3)
{
cout<<"本月销售额:"; cin>>sales;
}
//创建新员工结点
switch(Duty)
{
case 1:p=new Manager(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty); break;
case 2:p=new SalesManager(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty,sales); break;
case 3:p=new saleman(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty,sales); break;
case 4:p=new Technician(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty); break;
case 5:p=new Tech_mannger(ID,*Name,易做图,grade,*domain,*xingzuo,xuexing,income,t1,t2,phone,Duty); break;
}
p->next=0;
//员工结点加入链表
if(Worker) //若已经存在结点
{
employee *p2;
p2=Worker;
while(p2->next) //查找尾结点
{
p2=p2->next;
}
p2->next=p; //连接
}
else //若不存在结点(表空)
{
Worker=p; //连接
}
}
void Company::Delete() //删除人员
{
int No;
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;
delete p1;
}
else //若要删除的结点是后续结点
{
p2->next=p1->next;
delete p1;
}
cout<<"找到并删除\n";
}
else //未找到结点
cout<<"未找到!\n";
}