高校工資管理系統

花落人獨立發表於2018-06-19

對於剛剛開始學習計算機程式設計技術的小白的我,前一段時間一直在學習C++控制檯程式設計技術,自己寫了一個高校工資管理系統,希望可以幫到需要的小朋友

問題描述:

高校職工工資資訊有:教師編號、姓名、職工類別、月基本工作量、當月實際工作量、月基本工資、當月補助、當月課時費、實際總工資。職工類別有五類:教師,實驗員,行政人員,教師兼職實驗員,行政人員兼職教師。為了實現工資發放的自動功能,現要求編寫程式來自動完成此功能。同時注意生成的相關資料結果以檔案方式存放在硬碟中。程式應具備從鍵盤錄入,檔案的可繼續錄入,任意職工的工資查詢(可由職工編號和職工姓名來實現),如若有職工由於工作調動,則可進行相對應的刪除動作。相關資訊: 每個月將學校職工的上個月任職情況及上個月工作的相關情況輸入計算機,則本月職工的月工資按程式處理後的結果發放,其中職工的實際總工資計算方法如下:教師:基本工資+課時費; 實驗員:基本工資+實驗室補助; 行政人員:基本工資+行政補貼; 教師兼職實驗員:基本工資+課時費+實驗室補助; 行政人員兼職教師:基本工資+行政補貼+課時費;

其中:

(1)課時費:教師每一個月的基本工作量為20,實驗員每一個月基本工作量為15,行政人員沒有基本工作量,每節課時費為20元;課時費=(每月實際工作量-基本工作量)*20;

(2)每月基本工資:教師800元,實驗員650元,行政人員750元。

(3)每月補助:行政補貼:250元。實驗室補助:150元。

2.要求:

1) 新增刪除功能:能根據學院人事的變動情況,新增刪除記錄;

2) 查詢功能:能根據編號、姓名、類別等進行查詢;

3) 編輯功能(高階):根據查詢對相應的記錄進行修改,並儲存;

4) ★(選作)統計功能:能根據多種引數進行統計(如基本工資、補助、課時費、總工資等);

5) 儲存功能:能對輸入的資料進行相應的儲存。

以下為參考程式,有不足的地方希望大佬能指點一下

主函式

     #include<iostream>
#include"Schoolperson.h"     //實體類標頭檔案
#include<windows.h>
#include"Appface.h"            //介面類標頭檔案
using namespace std;
int main(int argc,char *argv[])
{
{
int c;
Appface appface;     //定義介面類物件
do
{
system("cls");//清屏; 
cout<<"\t\t\t      高校工資管理系統       "<<endl;
cout<<"\t\t\t============================="<<endl; 
cout<<"\t\t\t****   (1).新增資訊   ****"<<endl;
cout<<"\t\t\t****   (2).資訊刪除   ****"<<endl; 
cout<<"\t\t\t****   (3).資訊查詢   ****"<<endl;
cout<<"\t\t\t****   (4).列出資訊   ****"<<endl; 
cout<<"\t\t\t****   (5).資訊修改   ****"<<endl;
cout<<"\t\t\t****   (6).資訊統計   ****"<<endl;
cout<<"\t\t\t****   (7).已刪除人員資訊   ****"<<endl;
cout<<"\t\t\t****   (8).退出並儲存 ****"<<endl;
cout<<"\t\t\t============================="<<endl;
cout<<"請選擇:1~7"<<endl;
cout<<"\t";
cin>>c;
switch(c)
{
case 1:appface.add();break;                 //向使用者提供新增功能;
case 2:appface.delete1();break;           //向使用者提供刪除功能;
case 3:appface.findoperator();break;  //向使用者提供查詢功能;
case 4:appface.list();break;                  //向使用者提供所有人員資訊;
case 5:appface.modify();break;           //向使用者提供修改功能;
case 6:appface.tongji();break;              //向使用者提供統計功能;
case 7:appface.dele1();break;              //向使用者提供刪除記錄;
case 8:appface.save();break;               //向使用者提供儲存記錄;
default : break;

cout<<endl<<"\t";
system("pause");
}while(c!=7);    //當C==7時 程式結束
return 0;
}

實體類

#ifndef SCHOOLPERSON_H
#define SCHOOLPERSON_H
#define  A  800       //教師基本工資
#define  B  650       //實驗員基本工資
#define  C  750      //行政人員基本工資
#define  D  250      //行政補貼
#define  E  150      //實驗室補貼
#define  F  20        //教師基本工作量
#define  G  15       //實驗員基本工作量
#define  J  35         //教師兼職實驗員基本工作量
class Schoolperson
{
public:
Schoolperson();
~Schoolperson();
Schoolperson(char *name,char *num,char *WType,int wload);//建構函式
int getWload();
int getSalary();
int getClassfee();
int setWload(int wload);
char *getName();
void setName(char *name);
char *getNum();
void setNum(char *num);
char *getWType();
void setWType(char *WType);
protected:
       int wload;
int salary;
char name[30];
char num[40];
char WType[20];
};
#endif

#include "Schoolperson.h"
#include<string.h>
Schoolperson::Schoolperson()
{
}
Schoolperson::~Schoolperson()
{
}
Schoolperson::Schoolperson(char *name,char *num,char *WType,int wload)   //賦初值
{
    strcpy(this->num,num);
strcpy(this->name,name);
strcpy(this->WType,WType);
this->wload=wload;
if(strcmp("教師",WType)==0)
salary=(wload-F)*F+A;
else if((strcmp("實驗員",WType)==0))
salary=(wload-G)*F+B;
else if(strcmp("行政人員",WType)==0)
salary=750+D;
else if(strcmp("行政人員兼職教師",WType)==0)
salary=750+B+(wload-F)*F+D;
else if(strcmp("教師兼職實驗員",WType)==0)
salary=A+B+(wload-J)*F+E;
}
char* Schoolperson::getNum()
{
return num;
}
void Schoolperson::setNum(char *num)
{
strcpy(this->num,num);
}
char* Schoolperson::getName()
{
return name;
}
void Schoolperson::setName(char *name)
{
strcpy(this->name,name);
}
void Schoolperson::setWType(char *WType)
{
strcpy(this->WType,WType);
}
char* Schoolperson::getWType()
{
return WType;
}
int Schoolperson::setWload(int wload)
{
this->wload=wload;
}
int Schoolperson::getWload()
{
return wload;
}
int Schoolperson::getSalary()
{
return salary;
}
int Schoolperson::getClassfee()
{
return salary=wload*F;
}

管理類

 #ifndef SCHOOLPERSONMANAGE_H
#define SCHOOLPERSONMANAGE_H
#include<vector> 
#include<iostream>
#include"Schoolperson.h"
using namespace std;
class Schoolpersonmanage     //職員資訊管理類 
{
private:

    vector<Schoolperson>schoolpersons;  //用於儲存職員資訊容器的子物件 
public:
    Schoolpersonmanage();       
~Schoolpersonmanage();
void load();                        //將檔案載入到schoolperson中 
void save();                        //將schoolperson中職員資訊儲存到檔案中 
void add(Schoolperson school);      //新增職員資訊到schoolperson 
bool delete1(char *num);           //在schoolperson中按姓名刪除職員資訊 
void findName1(char *name);
Schoolperson *findNum(char *num);   //按編號查詢 
Schoolperson *findWType(char *type);
vector<Schoolperson>& getSchoolpersons();//返回schoolperson引用 


};
#endif

#include"Schoolpersonmanage.h"
#include"Schoolperson.h"
#include<fstream>
#include<string.h>
#include<vector>
Schoolpersonmanage::Schoolpersonmanage()
{
    load();
}
Schoolpersonmanage::~Schoolpersonmanage()
{
}
void Schoolpersonmanage::load() //將檔案載入到students中
{
fstream fin("F:\\address.txt",ios::in|ios::binary);
if (!fin)
return ;
Schoolperson school;
fin.read((char*)&school,sizeof(school));
while(!fin.eof())
{
schoolpersons.push_back(school);//向量尾部增加一個元素 school
fin.read((char*)&school,sizeof(school));
}
fin.close();
}
void Schoolpersonmanage::save()
{
fstream fout("F:\\address.txt",ios::out|ios::binary);
vector<Schoolperson>::iterator pos;
for(pos=schoolpersons.begin();pos!=schoolpersons.end();pos++)
{
    fout.write((char*)&(*pos),sizeof(Schoolperson));

fout.close();
}
void Schoolpersonmanage::add(Schoolperson school)
{
schoolpersons.push_back(school);
save();
}
void Schoolpersonmanage::findName1(char *name)
{
vector<Schoolperson>::iterator pos;
for(pos=schoolpersons.begin();pos!=schoolpersons.end();pos++)
{
if(strcmp(pos->getName(),name)==0)
{
cout<<"\t--------查詢結果---------"<<endl;
    cout<<"\t姓名:"<<pos->getName()<<endl; 
    cout<<"\t編號:"<<pos->getNum()<<endl;
    cout<<"\t職工型別:"<<pos->getWType()<<endl;
    cout<<"\t職工工作量:"<<pos->getWload()<<endl;
    cout<<"\t-------------------------"<<endl;
    }
}
}
/*Schoolperson *Schoolpersonmanage::findName(char *name)
{
vector<Schoolperson>::iterator pos;
for(pos=schoolpersons.begin();pos!=schoolpersons.end();pos++)
{
if(strcmp(pos->getName(),name)==0)
{
    return &(*pos);
    }
}
return NULL;
}*/
Schoolperson *Schoolpersonmanage::findNum(char *num)
{
vector<Schoolperson>::iterator pos;
for(pos=schoolpersons.begin();pos!=schoolpersons.end();pos++)
{
if(strcmp(pos->getNum(),num)==0)
{
    return &(*pos);
    }
}
return NULL;
}
Schoolperson *Schoolpersonmanage::findWType(char *type)
{
vector<Schoolperson>::iterator pos;
for(pos=schoolpersons.begin();pos!=schoolpersons.end();pos++)
{
if(strcmp(pos->getWType(),type)==0)
{
    return &(*pos);
    }
}
return NULL;
}
bool Schoolpersonmanage::delete1(char *num)
{
fstream out("F:\\del.txt",ios::out|ios::binary);
vector<Schoolperson>::iterator pos;
for(pos=schoolpersons.begin();pos!=schoolpersons.end();pos++)
{   
if(strcmp(pos->getNum(),num)==0)
{
schoolpersons.erase(pos);
out.write((char*)&(*pos),sizeof(Schoolperson));
fstream fout("F:\\address.txt",ios::out|ios::trunc);
for(pos=schoolpersons.begin();pos!=schoolpersons.end();pos++)
          {
          fout.write((char *)&(*pos),sizeof(Schoolperson));
        } 
    out.close();
fout.close();
return true;
}
  
   }
    return false;
}
vector<Schoolperson>& Schoolpersonmanage::getSchoolpersons()
{
return schoolpersons;
}

介面類

    #ifndef APPFACE_H
#define APPFACE_H
#include "Schoolpersonmanage.h"
class Appface
{
public:
Appface();
~Appface(); 
void Classfee(); //統計課時費; 
void Salary();   //統計總工資; 
void dele1();    //已刪除的職工資訊; 
void add();      //向使用者提供新增功能;
void findoperator();
void findType();
void findNum();
void findName();     //向使用者提供查詢功能;
void list();     //向使用者提供列表功能;
void save();     //向使用者提供儲存功能;
void modify();   //向使用者提供修改功能;
void delete1();  //向使用者提供刪除功能; 
void tongji();   //向使用者提供統計功能; 
protected:
    Schoolpersonmanage schoolpersonmanage;
};

#endif

#include "Appface.h"
#include"Schoolperson.h"
#include<iostream>
#include<fstream>
#include<vector>
#include<string.h>
#include"Schoolpersonmanage.h"
using namespace std;
Appface::Appface()
{

Appface::~Appface()
{
}
void Appface::add()
{
int wload;
char num[10];
char name[30];
char WType[30];
cout<<"\t請輸入職工姓名:";
cin>>name;
cout<<"\t請輸入職工編號:";
cin>>num;
cout<<"\t可供選擇的職工型別:"<<endl;
cout<<"\t(1).教師\t(2).實驗員"<<endl;
cout<<"\t(3).行政人員\t(4).行政人員兼職教師"<<endl;
cout<<"\t(5).教師兼職實驗員"<<endl;
cout<<"\t請輸入職工型別:";
cin>>WType;
cout<<"\t請輸入職工工作量(如果職工型別為行政人員輸入0):";
cin>>wload;
Schoolperson schoolperson(name,num,WType,wload);
schoolpersonmanage.add(schoolperson);
cout<<"\n\t新增成功"<<endl;
}
void Appface::findoperator()
{
int c;
cout<<"\t(1)按姓名查詢"<<endl<<"\t(2)按編號查詢"<<endl<<"\t(3)按工作型別查詢"<<endl;
cout<<"\t請選擇(1~3)"<<endl;
cout<<"\t";
cin>>c;
switch(c)
{
case 1:findName();break;
case 2:findNum();break;
case 3:findType();break;
default:break;
}
}
void Appface::findName()
{
char name[30];
cout<<"\t請輸入要查詢的職工姓名:";
cin>>name;
schoolpersonmanage.findName1(name);
}
void Appface::findNum()
{
char num[30];
cout<<"\t請輸入要查詢的職工編號:";
cout<<"\t";
cin>>num;
Schoolperson *schoolperson=schoolpersonmanage.findNum(num);
if(schoolperson==NULL)
{
cout<<"\t你要查詢的職工不存在"<<endl;

else
{
cout<<"\t--------查詢結果---------"<<endl;
cout<<"\t姓名:"<<schoolperson->getName()<<endl; 
cout<<"\t編號:"<<schoolperson->getNum()<<endl;
cout<<"\t職工型別:"<<schoolperson->getWType()<<endl;
cout<<"\t職工工作量:"<<schoolperson->getWload()<<endl;
cout<<"\t-------------------------"<<endl;

}
void Appface::findType()
{
char type[30];
vector<Schoolperson>schoolperson=schoolpersonmanage.getSchoolpersons();
vector<Schoolperson>::iterator pos;
cout<<"\t請輸入要查詢的職工型別:"<<endl;
cout<<"\t可供選擇的職工型別:"<<endl;
cout<<"\t(1).教師\t(2).實驗員"<<endl;
cout<<"\t(3).行政人員\t(4).行政人員兼職教師"<<endl;
cout<<"\t(5).教師兼職實驗員"<<endl;
cout<<"\t";
cin>>type;
for(pos=schoolperson.begin();pos!=schoolperson.end();pos++)
{
if(strcmp(pos->getWType(),type)==0)
{
        cout<<"\t--------查詢結果---------"<<endl;
    cout<<"\t姓名:"<<pos->getName()<<endl; 
    cout<<"\t編號:"<<pos->getNum()<<endl;
    cout<<"\t職工型別:"<<pos->getWType()<<endl;
    cout<<"\t職工工作量:"<<pos->getWload()<<endl;
    cout<<"\t-------------------------"<<endl;
}
}


void Appface::delete1()
{
char num[30];
cout<<"\t請輸入要刪除的職工編好:";
cin>>num;
if(schoolpersonmanage.delete1(num))
{
cout<<"\n\t***刪除成功***\n"<<endl;
}
else
{
cout<<"\n\t你要刪除的職工不存在"<<endl;

}
void Appface::dele1()
{
Schoolperson schoolperson;
fstream fin("H:\\del.txt",ios::in|ios::binary);
fin.read((char*)&schoolperson,sizeof(Schoolperson));
while(!fin.eof())
{
cout<<schoolperson.getName()<<endl;
cout<<schoolperson.getNum()<<endl;
cout<<schoolperson.getWType()<<endl;

cout<<schoolperson.getSalary()<<endl;

                fin.read((char*)&schoolperson,sizeof(Schoolperson));

}

void Appface::modify()
{
char c;
char num[30];
do
{
    list();
cout<<"\t請輸入要修改的職工編號:";
cin>>num;
Schoolperson *schoolperson=schoolpersonmanage.findNum(num);
do
{
cout<<"\t1.修改編號 2.修改姓名  3.修改職工型別  4.修改職工工作量  5.退出修改\n"<<endl;
cout<<"\t請選擇(1~5)要修改的資訊:"<<endl;
cin>>c;
if(c!='5')
{
cout<<"\t請輸入新的資訊:";
char info[40];
cin>>info;
switch(c)
{
case '1': schoolperson->setNum(info); break;
    case '2': schoolperson->setName(info); break;
    case '3': schoolperson->setWType(info); break;
    case '4': schoolperson->setWload((int)info); break;
    default:break;
}
cout<<"\n\t***修改成功***"<<endl;
}
} while(c!='5');
cout<<"\n\t是否繼續修改:(Y/N)" ;
cin>>c;
}while(c=='Y'||c=='y');
}
void Appface::list()
{
vector<Schoolperson>schoolperson=schoolpersonmanage.getSchoolpersons();
vector<Schoolperson>::iterator pos;
cout<<"\n\t--------------聯絡人列表-------------\n"<<endl;
for(pos=schoolperson.begin();pos!=schoolperson.end();pos++) 
{
cout<<"\t姓名:"<<pos->getName()<<" ";
cout<<"編號:"<<pos->getNum()<<" ";
cout<<"職工型別:"<<pos->getWType()<<" ";
cout<<"職工工作量:"<<pos->getWload();
cout<<endl;
}
}
void Appface::tongji()
{
int c;
cout<<"\t請選擇:"<<endl;
cout<<"\t(1).統計總工資\t(2).統計課時費";
cin>>c;
switch(c)
{
case 1:Salary();break;
case 2:Classfee();break;
    default:break;

}
void Appface::Salary() 
{
vector<Schoolperson>schoolperson=schoolpersonmanage.getSchoolpersons();
vector<Schoolperson>::iterator pos;
cout<<"\n\t--------------聯絡人列表-------------\n"<<endl;
for(pos=schoolperson.begin();pos!=schoolperson.end();pos++) 
{
cout<<"\t姓名:"<<pos->getName();
cout<<"\t職工總工資:"<<pos->getSalary();
cout<<endl;
}
}
void Appface::Classfee() 
{
vector<Schoolperson>schoolperson=schoolpersonmanage.getSchoolpersons();
vector<Schoolperson>::iterator pos;
cout<<"\n\t--------------聯絡人列表-------------\n"<<endl;
for(pos=schoolperson.begin();pos!=schoolperson.end();pos++) 
{
cout<<"\t姓名:"<<pos->getName();
cout<<"\t職工課時費:"<<pos->getClassfee();
cout<<endl;
}
}
void Appface::save()
{
schoolpersonmanage.save();

相關文章