📄 smy.cpp
字号:
//smy.cpp 管理系统类层次函数实现部分
//————————————————————————————————
#include<iostream.h>
#include<iomanip.h>
#include<fstream.h>
#include<string.h>
#include<process.h>
#include "smy.h"
char *workerduty[]={"教师","实验员","行政人员","教师兼职实验员","行政人员兼职教师"};
//——————————函数实现
//共同基类构造函数
baseworker:: baseworker()
{
}
void baseworker::buildsystem(int idduty)
{
ifstream maxread("data/max.mp3",ios::binary|ios::nocreate);
if(maxread)
{
maxread.read((char *)&maxnum,sizeof maxnum);
}
else
{
maxnum=100;//职工编号基数初始化
}
maxread.close();
ofstream maxdelete("data/max.mp3",ios::binary|ios::in|ios::trunc);
maxdelete.close();
ofstream maxwrite("data/max.mp3",ios::binary|ios::in);
char namestr[40];
char *makesex[2]={"男","女"};
cout<<endl<<"请输入职员姓名:";
cin>>namestr;//输入职员姓名
strcpy(person.name,namestr);
person.id=maxnum++;
cout<<endl<<"性别:";
cin>>person.sex;//输入职员性别
while(strcmp(person.sex,makesex[1]) && strcmp(person.sex,makesex[0]))
{
cout<<endl<<setw(45)<<"你输入的性别不合法,请重新输入!";
cout<<endl<<"性别:";
cin>>person.sex;
}
cout<<endl<<"年龄:";
cin>>person.age;//输入职员年龄
if(!cin.good())
{
cout<<"非法操作!请退出!"<<endl;
exit(2);
}
while(person.age<=0 || person.age>100)
{
cout<<endl<<"你输入的年龄不合法,请重新输入!"<<endl;
cout<<"年龄:";
cin>>person.age;
}
person.duty=idduty;
person.totalsalary=0.0;//职员总工资初始化
person.payedsalary=0.0;//已付职员总工资初始化
person.surplussalary=0.0;//拖欠职员工资数初始化
maxwrite.write((char *)&maxnum,sizeof maxnum);
maxwrite.close();
write();
}
void baseworker::write()
{
ofstream we("data/info.dat",ios::binary|ios::ate|ios::in);
we.write((char *)&person,sizeof person);
we.close();
}
void baseworker::read(int idnum)
{
ifstream rd("data/info.dat",ios::binary|ios::nocreate);
if(rd)
{
rd.read((char*)&person,sizeof person);
while(!rd.eof())
{
if(idnum==person.id)
break;
rd.read((char*)&person,sizeof person);
}
if(idnum!=person.id)
cout<<"对不起!不能找到你要找的记录!"<<endl;
else
{
cout<<setw(6)<<"ID"<<setw(8)<<"名字"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<setw(8)<<"职务"<<setw(15)<<"本月总工资"<<setw(11)<<"已发工资"<<setw(11)<<"拖欠工资"<<endl;
displayinfo();
}
}
else
cout<<"对不起!与数据库连接失败!请与管理员联系!"<<endl;
rd.close();
}
void baseworker::read()
{
ifstream rdw("data/info.dat",ios::binary|ios::nocreate);
if(rdw)
{
cout<<setw(6)<<"ID"<<setw(8)<<"名字"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<setw(8)<<"职务"<<setw(15)<<"本月总工资"<<setw(11)<<"已发工资"<<setw(11)<<"拖欠工资"<<endl;
rdw.read((char*)&person,sizeof person);
while(!rdw.eof())
{
displayinfo();
rdw.read((char*)&person,sizeof person);
}
}
else
cout<<"对不起!与数据库连接失败!请与管理员联系!"<<endl;
rdw.close();
}
void baseworker::readinfo(int idnumin)
{
ifstream rdin("data/info.dat",ios::binary|ios::nocreate);
rdin.read((char*)&person,sizeof person);
while(!rdin.eof())
{
if(idnumin==person.id)
break;
rdin.read((char*)&person,sizeof person);
}
rdin.close();
}
void baseworker::deleteinfo(int delnum)
{
ifstream old("data/info.dat",ios::binary|ios::nocreate);
ofstream file("data/info.rm",ios::binary|ios::ate|ios::trunc|ios::in);
if(old)
{
old.read((char*)&person,sizeof person);
while(!old.eof())
{
if(delnum==person.id)
;
else
file.write((char *)&person,sizeof person);
old.read((char*)&person,sizeof person);
}
}
else
{
cout<<"对不起!与数据库连接失败!请与管理员联系!"<<endl;
exit(2);
}
file.close();
old.close();
ofstream delold("data/info.dat",ios::binary|ios::ate|ios::trunc|ios::in);
delold.close();
ifstream refile("data/info.rm",ios::binary|ios::nocreate);
refile.read((char*)&person,sizeof person);
while(!refile.eof())
{
write();
refile.read((char*)&person,sizeof person);
}
refile.close();
ofstream delrm("data/info.rm",ios::binary|ios::ate|ios::trunc|ios::in);
delrm.close();
}
int baseworker::retuidnum(int reidnum)
{
ifstream ru("data/info.dat",ios::binary|ios::nocreate);
if(ru)
{
ru.read((char*)&person,sizeof person);
while(!ru.eof())
{
if(reidnum==person.id)
break;
ru.read((char*)&person,sizeof person);
}
if(reidnum!=person.id)
{
cout<<endl<<"对不起!你输入的职员不存在,可能还没注册!"<<endl;
return 100;
}
else
{
return person.duty;
}
}
else
{
cout<<endl<<"对不起!与数据库连接失败!请与管理员联系!"<<endl;
return 100;
}
ru.close();
}
void baseworker::modify(int paysa)
{
ifstream myold("data/info.dat",ios::binary);
ofstream mynew("data/info.rm",ios::binary|ios::ate|ios::trunc|ios::in);
myold.read((char *)&persons,sizeof persons);
while(!myold.eof())
{
if(persons.id==paysa)
mynew.write((char *)&person,sizeof person);
else mynew.write((char *)&persons,sizeof persons);
myold.read((char *)&persons,sizeof persons);
}
myold.close();
mynew.close();
ofstream deldat("data/info.dat",ios::binary|ios::ate|ios::trunc|ios::in);
deldat.close();
ifstream refile("data/info.rm",ios::binary|ios::nocreate);
refile.read((char*)&person,sizeof person);
while(!refile.eof())
{
write();
refile.read((char*)&person,sizeof person);
}
refile.close();
ofstream delrm("data/info.rm",ios::binary|ios::ate|ios::trunc|ios::in);
delrm.close();
}
void baseworker::modifyworker(int idmdy,int idduty)
{
char namestr[40];
cout<<endl<<"姓名:";
cin>>namestr;//输入职员姓名
strcpy(person.name,namestr);
person.id=idmdy;
cout<<endl<<"性别:";
cin>>person.sex;//输入职员性别
cout<<endl<<"年龄:";
cin>>person.age;//输入职员年龄
if(!cin.good())
{
cout<<"非法操作!请退出!"<<endl;
exit(2);
}
while(person.age<=0 || person.age>100)
{
cout<<endl<<"你输入的年龄不合法,请重新输入!"<<endl;
cout<<"年龄:";
cin>>person.age;
}
person.duty=idduty;
person.totalsalary=0.0;//职员总工资初始化
person.payedsalary=0.0;//已付职员总工资初始化
person.surplussalary=0.0;//拖欠职员工资数初始化
cout<<endl<<setw(45)<<"修改后职员信息"<<endl;
cout<<setw(6)<<"ID"<<setw(8)<<"名字"<<setw(8)<<"性别"<<setw(8)<<"年龄"<<setw(8)<<"职务"<<setw(15)<<"本月总工资"<<setw(11)<<"已发工资"<<setw(11)<<"拖欠工资"<<endl<<endl;
displayinfo();
modifyinfo(idmdy);
}
void baseworker::modifyinfo(int idmdy)
{
ifstream mdyold("data/info.dat",ios::binary);
ofstream mdynew("data/info.rm",ios::binary|ios::ate|ios::trunc|ios::in);
mdyold.read((char *)&persons,sizeof persons);
while(!mdyold.eof())
{
if(persons.id==idmdy)
mdynew.write((char *)&person,sizeof person);
else mdynew.write((char *)&persons,sizeof persons);
mdyold.read((char *)&persons,sizeof persons);
}
mdyold.close();
mdynew.close();
ofstream mdeldat("data/info.dat",ios::binary|ios::ate|ios::trunc|ios::in);
mdeldat.close();
ifstream mdfile("data/info.rm",ios::binary|ios::nocreate);
mdfile.read((char*)&person,sizeof person);
while(!mdfile.eof())
{
write();
mdfile.read((char*)&person,sizeof person);
}
mdfile.close();
ofstream mdelrm("data/info.rm",ios::binary|ios::ate|ios::trunc|ios::in);
mdelrm.close();
}
void baseworker::displayinfo()
{
cout<<setw(6)<<person.id<<setw(9)<<person.name<<setw(6)<<person.sex<<setw(8)<<person.age<<setw(10)<<workerduty[person.duty]<<setw(10)<<person.totalsalary<<setw(12)<<person.payedsalary<<setw(13)<<person.surplussalary<<endl;
}
//共同基类析构函数实现
baseworker::~baseworker()
{
}
//——————————教师类函数实现
jiaoshi::jiaoshi()
{
basesalary1=800.0;//每月基本工资初始化
basehour=0;//基本工作量
lasthour=120;//上学期工作量
}
void jiaoshi::pay(int paysa)
{
//在此添加从文件中取得的职员信息
readinfo(paysa);
countsalary();//计算工资函数
cout<<"职员"<<person.name<<"职务"<<workerduty[person.duty]<<"编号:"<<person.id<<"本月工资"<<person.totalsalary<<"本次发放工资数"<<person.payedsalary<<endl;
displayinfo();
modify(paysa);
}
void jiaoshi::countsalary()
{
person.totalsalary=basesalary1+(lasthour-basehour)*20;//计算本月总工资数
cout<<endl<<setw(20)<<person.name<<"本月总工资为:"<<person.totalsalary;
cout<<endl<<"请输入本次发放工资数:";
cin>>person.payedsalary;//输入本次发放的工资数
person.surplussalary=person.totalsalary-person.payedsalary;//计算剩余工资数
//在此添加修改职员工资发放信息
}
//——————————实验员类函数实现
shiyianyuan::shiyianyuan()
{
basesalary2=650.0;//每月基本工资初始化
monthlypay=150.0;//实验室补助初始化
}
void shiyianyuan::pay(int paysa)
{
//在此添加从文件中取得的职员信息
readinfo(paysa);
countsalary();//计算工资函数
cout<<"职员"<<person.name<<"职务"<<workerduty[person.duty]<<"编号:"<<person.id<<"本月工资"<<person.totalsalary<<"本次发放工资数"<<person.payedsalary<<endl;
displayinfo();
modify(paysa);
}
void shiyianyuan::countsalary()
{
person.totalsalary=basesalary2+monthlypay;//计算本月总工资数
cout<<endl<<setw(20)<<person.name<<"本月总工资为:"<<person.totalsalary;
cout<<endl<<"请输入本次发放工资数:";
cin>>person.payedsalary;//输入本次发放的工资数
person.surplussalary=person.totalsalary-person.payedsalary;//计算剩余工资数
//在此添加修改职员工资发放信息
}
//——————————行政人员类函数实现
xinzhengyuan::xinzhengyuan()
{
basesalary=750.0;//每月基本工资初始化
monthlypay=250.0;//行政补贴初始化
}
void xinzhengyuan::pay(int paysa)
{
//在此添加从文件中取得的职员信息
readinfo(paysa);
countsalary();//计算工资函数
cout<<"职员"<<person.name<<"职务"<<workerduty[person.duty]<<"编号:"<<person.id<<"本月工资"<<person.totalsalary<<"本次发放工资数"<<person.payedsalary<<endl;
displayinfo();
modify(paysa);
}
void xinzhengyuan::countsalary()
{
person.totalsalary=basesalary+monthlypay;//计算本月总工资数
cout<<endl<<setw(20)<<person.name<<"本月总工资为:"<<person.totalsalary;
cout<<endl<<"请输入本次发放工资数:";
cin>>person.payedsalary;//输入本次发放的工资数
person.surplussalary=person.totalsalary-person.payedsalary;//计算剩余工资数
//在此添加修改职员工资发放信息
}
//——————————教师兼职实验员类函数实现
shiyianjiao::shiyianjiao()
{
basesalary1=800.0;//每月基本工资初始化
// monthlypay=150.0;//实验室补助初始化
}
void shiyianjiao::pay(int paysa)
{
//在此添加从文件中取得的职员信息
readinfo(paysa);
countsalary();//计算工资函数
cout<<"职员"<<person.name<<"职务"<<workerduty[person.duty]<<"编号:"<<person.id<<"本月工资"<<person.totalsalary<<"本次发放工资数"<<person.payedsalary<<endl;
displayinfo();
modify(paysa);
}
void shiyianjiao::countsalary()
{
person.totalsalary=basesalary1+(lasthour-basehour)*20+monthlypay;//计算本月总工资数
cout<<endl<<setw(20)<<person.name<<"本月总工资为:"<<person.totalsalary;
cout<<endl<<"请输入本次发放工资数:";
cin>>person.payedsalary;//输入本次发放的工资数
person.surplussalary=person.totalsalary-person.payedsalary;//计算剩余工资数
//在此添加修改职员工资发放信息
}
//——————————行政人员兼职教师类函数实现
xinzhengjiao::xinzhengjiao()
{
basesalary=750.0;//每月基本工资初始化
monthlypay=250.0;//行政补贴初始化
}
void xinzhengjiao::pay(int paysa)
{
//在此添加从文件中取得的职员信息
readinfo(paysa);
countsalary();//计算工资函数
cout<<"职员"<<person.name<<"职务"<<workerduty[person.duty]<<"编号:"<<person.id<<"本月工资"<<person.totalsalary<<"本次发放工资数"<<person.payedsalary<<endl;
displayinfo();
modify(paysa);
}
void xinzhengjiao::countsalary()
{
person.totalsalary=basesalary+(lasthour-basehour)*20+monthlypay;//计算本月总工资数
cout<<endl<<setw(20)<<person.name<<"本月总工资为:"<<person.totalsalary;
cout<<endl<<"请输入本次发放工资数:";
cin>>person.payedsalary;//输入本次发放的工资数
person.surplussalary=person.totalsalary-person.payedsalary;//计算剩余工资数
//在此添加修改职员工资发放信息
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -