当前位置:编程学习 > C/C++ >>

公司职员信息管理系统 用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";
}

答案:我帮你稍微改了一下,没改完,因为我觉得改没啥意义,建议你重写,因为这些类你设计有问题。应该做一个叫employeeProperty的struct来写,char*最好全部换成std::string来做,double换成float。另外就是多重继承的地方要把菱形的结构改掉,Manager和Employee可以的话都做成纯虚的接口类。有能力的话用MFC的架构把main改一下就是一个不错的可视化工程了。
// canidaye.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <fstream>#include <ctype.h>#include <string.h>using namespace std;//全局数据,对象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?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_s(this->Name,Name);strcpy_s(this->domain,domain);strcpy_s(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){} //(多继承如何初始化?),//你老师没有告诉过你不要出现菱形的继承结构吗?菱形的结构就会导致错误,这里可以让manager用inte易做图ce的模式来实现,不要带任何的私有变量,使用纯虚函数。//如果需要可以这么设计// class IManager// {// virtualvoid calculateSalary() = 0;// virtual void promote(int) = 0;// }// class Manager:public employee, public IManager// {// virtual void CalcSalary(){income=pay;}// virtual void promote(int);// // blablabla.......// }//然后上面的SalesManager::public salesman, public IManager来避免菱形继承。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 SalesManager::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";char 易做图 = 'm';int grade = 1;char* domain

上一个:C++面向对象程序设计编程项目代码
下一个:C++中提到的类中的析构函数,有什么作用?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,