资源描述
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
const int TMAX=50;
using namespace std;
class Person
{
public:
int num;//编号
string name;//姓名
string sex;//性别
int age;//年纪
double water;//用水量
double power;//用电量
public:
Person(int n=0,string nm=" ",string s=" ",int a=0,double w=0.0,double p=0.0)//初始化
{
num = n;
name = nm;
sex = s;
age = a;
water = w;
power = p;
};
virtual void Input(){};
virtual void Output(){};
int GetNum(){return num;}//获取编号
string GetName(){return name;}//获取姓名
double GetWater(){return water;}//获取用水量
double GetPower(){return power;}//获取用电量
};
class Teacher:virtual public Person //老师
{
public:
string depart;//工作部门
double watermoney;//老师水费
double powermoney;//老师电费
int choice1;
int choice2;
public:
Teacher(int n=0,string nm=" ",string s="男",int a=0,string d="一般老师",double w=0.0, double p=0.0, double wm=0.0, double pm=0.0)
:Person(n,nm,s,a,w,p),depart(d)//结构函数
{
watermoney=wm;
powermoney=pm;
};
void Input()
{
cout<<"请输入编号:"<<endl;
cin>>num;
cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请选择性别:";
cout<<"(1.男 2.女)"<<endl;
cout<<"请输入你选择"<<endl;
cin>>choice2;
switch(choice2)
{
case 1:sex="男";break;
case 2:sex="女";break;
default:cout<<"输入错误。"<<endl;break;
}
cout<<"请输入年纪:"<<endl;
cin>>age;
cout<<"请选择工作部门:"<<endl;
cout<<setw(10)<<"1.一般老师"<<setw(10)<<"2.教务处"<<setw(10)<<"3.财政处"<<setw(10)<<" 4.创业办公室"<<endl;
cout<<"请输入你选择"<<endl;
cin>>choice1;
switch(choice1)
{
case 1:depart="一般老师";break;
case 2:depart="教务处";break;
case 3:depart="财政处";break;
case 4:depart="创业办公室";break;
default:cout<<"输入错误。"<<endl;break;
}
cout<<"请输入本月用水量"<<endl;
cin>>water;
cout<<"请输入本月用电量"<<endl;
cin>>power;
watermoney=0.5*water;
powermoney=0.5*power;
}
void Output()
{
cout<<" "<<num
<<" "<<name
<<" "<<sex
<<" "<<age
<<" "<<depart
<<" "<<water
<<setw(10)<<power
<<" "<<setw(10)<<watermoney
<<setw(10)<<powermoney
<<endl;
}
};
class Student:virtual public Person //学生
{
public:
string bj;//学生班级
double watermoney;//学生水费
double powermoney;//学生电费
int choice1;
int choice2;
public:
Student(int n=0,string nm=" ",string s="男",int a=0,string z=" ",double w=0.0, double p=0.0, double wm=0.0, double pm=0.0)
:Person(n,nm,s,a,w,p),bj(z)//结构函数
{
watermoney=wm;
powermoney=pm;
};
void Input()
{
cout<<"请输入学号:"<<endl;
cin>>num;
cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请选择性别:";
cout<<"(1.男 2.女)"<<endl;
cout<<"请输入你选择"<<endl;
cin>>choice2;
switch(choice2)
{
case 1:sex="男";break;
case 2:sex="女";break;
default:cout<<"输入错误。"<<endl;break;
}
cout<<"请输入年纪:"<<endl;
cin>>age;
cout<<"请选择所在班级:"<<endl;
cout<<setw(10)<<"1.计科1班"<<setw(10)<<"2.计科2班"<<setw(10)<<"3.计科3班"<<setw(10)<<"4.计科4班"<<endl;
cout<<"请输入你选择"<<endl;
cin>>choice1;
switch(choice1)
{
case 1:bj="计科1班";break;
case 2:bj="计科2班";break;
case 3:bj="计科3班";break;
case 4:bj="计科4班";break;
default:cout<<"输入错误。"<<endl;break;
}
cout<<"请输入本月用水量"<<endl;
cin>>water;
cout<<"请输入本月用电量"<<endl;
cin>>power;
watermoney=0.5*(water-10);
powermoney=0.5*(power-10);
}
void Output()
{
cout<<" "<<num
<<" "<<name
<<" "<<sex
<<" "<<age
<<" "<<bj
<<" "<<water
<<setw(10)<<power
<<" "<<setw(10)<<watermoney
<<setw(10)<<powermoney
<<endl;
}
};
class Stu_Manage
{
Student Stu[TMAX]; //TMAX为常量,为数组中可存放学生统计最大数;
int top; //top表示目前系统中存放统计个数;
public:
Stu_Manage(){top=0;} //初始时统计个数为0,所以设置top=0;
void Add(); //实现该类统计添加;
void Show(); //实现该类全部统计显示;
void Search(); //实现该类统计查询;
void Edit(); //实现该类统计修改;
void Delete(); //实现该类统计删除;
void Total(); //实现该类统计统计;
void Save(); //将该类统计保留到文件;
void Read(); //可从文件中将统计读取到该类数组中;
};
void Stu_Manage::Add()//添加组员
{
if(top>=TMAX)
{
cout<<"用户已满"<<endl;
return;
}
Student s;
cout<<"输入新添加人员信息"<<endl;
s.Input();
for(int i=0;i<top;i++)
if (s.GetNum()==Stu[i].GetNum())
{
cout<<"该编号人员已存在"<<endl;
return;
}
Stu[top]=s;
top=top+1;
cout<<"添加成功!"<<endl;
}
void Stu_Manage::Show()//显示全部统计
{
if(top==0)
{
cout<<"无数据!"<<endl;
return;
}
cout<<" "<<"学号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"班级"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
Stu[i].Output();
}
void Stu_Manage::Search()//查询
{
if(top==0)
{
cout<<"目前系统中没有存放统计"<<endl;
return;
}
int choice;
cout<<"请选择查找方法:1.按姓名查询 2.按用水量查询 3.按用电量查询"<<endl;
cin>>choice;
switch(choice)
{
case 1:{
cout<<"请输入要查找姓名"<<endl;
string name;
cin>>name;
cout<<" "<<"学号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"班级"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
{
if(Stu[i].GetName()==name)
{
Stu[i].Output();
}
}
return;
cout<<"查无此人!"<<endl;
}break;
case 2:{
cout<<"请输入要查找水量:"<<endl;
double water;
cin>>water;
cout<<" "<<"学号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"班级"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
{
if(Stu[i].GetWater()==water)
{
Stu[i].Output();
}
}
return;
cout<<"查无此人!"<<endl;
}break;
case 3:{
cout<<"请输入要查找电量:"<<endl;
double power;
cin>>power;
cout<<" "<<"学号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"班级"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
{
if(Stu[i].GetPower()==power)
{
Stu[i].Output();
}
}
return;
cout<<"查无此人!"<<endl;
}break;
default :cout<<"无此选项!请重试!"<<endl;break;
}
}
void Stu_Manage::Edit()//更改信息
{
if(top==0)
{
cout<<"目前系统中没有存放统计!"<<endl;
return;
}
int num;
cout<<"请输入要查找教编号:"<<endl;
cin>>num;
for(int i=0;i<top;i++)
{
if(Stu[i].GetNum()==num)
{
cout<<"请对这位学生信息进行修改:"<<endl;
Stu[i].Input();
cout<<"修改成功"<<endl;return;
}
}
cout<<"查无此人"<<endl;
}
void Stu_Manage::Delete()//删除信息
{
if(top==0)
{
cout<<"目前系统中没有存放统计!"<<endl;
return;
}
cout<<"1、按编号查找删除 2、按姓名查找删除"<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1:
{
cout<<"请输入编号:";
int num;
cin>>num;
for(int i=0;i<top;i++)
{
if(num==Stu[i].num)
{
cout<<"是否确定删除? 1、是 2、否 "<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1:
{
for(int j=i;j<top-1;j++)
Stu[j]=Stu[j+1];
cout<<"删除成功!"<<endl;
top--;
};break;
case 2:return;
default:cout<<"无此项,失败!"<<endl;break;
}return;
}
}
cout<<"无此人!"<<endl;
} ;break;
case 2:
{
cout<<"请输入姓名:";
string name;
cin>>name;
for(int i=0;i<top;i++)
{
if(name==Stu[i].name)
{
cout<<"是否确定删除? 1、是 2、否 "<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1:
{
for(int j=i;j<top-1;j++)
Stu[j]=Stu[j+1];
cout<<"删除成功!"<<endl;
top--;
};break;
case 2:return;
default:cout<<"无此项,失败!"<<endl;break;
}return;
}
}
cout<<"无此人!"<<endl;
}; break;
default:cout<<"没有此项,失败:"<<endl;break;
}
}
void Stu_Manage::Total()//数据统计
{
cout<<"1 学生所用水电量总量 2 学生总水电费 "<<endl;
int choice;
cout<<"请输入你选择"<<endl;
cin>>choice;
switch(choice)
{
case 1:
{
double zwater=0.0, zpower=0.0;
for(int i=0; i<top; i++)
{
zwater+=Stu[i].water;
zpower+=Stu[i].power;
}
cout<<"学生总用水量为"<<zwater<<endl;
cout<<"学生总用电量为"<<zpower<<endl;
}break;
case 2:
{
double zwatermoney=0.0, zpowermoney=0.0;
for(int i=0; i<top; i++)
{
zpowermoney+=Stu[i].powermoney;
zwatermoney+=Stu[i].watermoney;
}
cout<<"老师总水费为"<<zwatermoney<<endl;
cout<<"老师总电费为"<<zpowermoney<<endl;
}break;
default:cout<<"输入错误。请重新输入"<<endl;break;
}
}
void Stu_Manage::Save()//保留学生信息
{
ofstream out("学生.txt",ios::out);
if(!out)
{
cout<<"打开失败!"<<endl;
return;
}
cout<<"打开成功!"<<endl;
for(int i=0;i<top;i++)
{
out<<Stu[i].num<<" "
<<Stu[i].name<<" "
<<Stu[i].sex<<" "
<<Stu[i].age<<" "
<<Stu[i].bj<<" "
<<Stu[i].water<<" "
<<Stu[i].power<<" "
<<Stu[i].watermoney<<" "
<<Stu[i].powermoney<<" "
<<endl;
}
cout<<"写入成功!"<<endl;
out.close();
}
void Stu_Manage::Read()//读取学生文件
{
ifstream in("学生.txt",ios::in);
if(!in)
{
cout<<"打开失败!"<<endl;
return;
}
int i=0;
while(in>>Stu[i].num
>>Stu[i].name
>>Stu[i].sex
>>Stu[i].age
>>Stu[i].bj
>>Stu[i].water
>>Stu[i].power
>>Stu[i].watermoney
>>Stu[i].powermoney)
{
i++;
top++;
}
cout<<"打开成功!"<<endl;
in.close();
}
class Tea_Manage
{
Teacher Tea[TMAX]; //TMAX为常量,为数组中可存放老师统计最大数;
int top; //top表示目前系统中存放统计个数;
public:
Tea_Manage(){top=0;} //初始时统计个数为0,所以设置top=0;
void Add(); //实现该类统计添加;
void Show(); //实现该类全部统计显示;
void Search(); //实现该类统计查询;
void Edit(); //实现该类统计修改;
void Delete(); //实现该类统计删除;
void Total(); //实现该类统计统计;
void Save(); //将该类统计保留到文件;
void Read(); //可从文件中将统计读取到该类数组中;
};
void Tea_Manage::Add()//添加组员
{
if(top>=TMAX)
{
cout<<"用户已满"<<endl;
return;
}
Teacher t;
cout<<"输入新添加人员信息"<<endl;
t.Input();
for(int i=0;i<top;i++)
if (t.GetNum()==Tea[i].GetNum())
{
cout<<"该编号人员已存在"<<endl;
return;
}
Tea[top]=t;
top=top+1;
cout<<"添加成功!"<<endl;
}
void Tea_Manage::Show()//显示全部统计
{
if(top==0)
{
cout<<"无数据!"<<endl;
return;
}
cout<<" "<<"编号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"部门"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
Tea[i].Output();
}
void Tea_Manage::Search()//查询
{
if(top==0)
{
cout<<"目前系统中没有存放统计"<<endl;
return;
}
int choice;
cout<<"请选择查找方法:1.按姓名查询 2.按用水量查询 3.按用电量查询"<<endl;
cin>>choice;
switch(choice)
{
case 1:{
cout<<"请输入要查找姓名"<<endl;
string name;
cin>>name;
cout<<" "<<"编号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"部门"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
{
if(Tea[i].GetName()==name)
{
Tea[i].Output();
}
}
return;
cout<<"查无此人!"<<endl;
}break;
case 2:{
cout<<"请输入要查找水量:"<<endl;
double water;
cin>>water;
cout<<" "<<"编号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"部门"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
{
if(Tea[i].GetWater()==water)
{
Tea[i].Output();
}
}
return;
cout<<"查无此人!"<<endl;
}break;
case 3:{
cout<<"请输入要查找电量:"<<endl;
double power;
cin>>power;
cout<<" "<<"编号"
<<" "<<"姓名"
<<" "<<"性别"
<<" "<<"年纪"
<<" "<<"部门"
<<setw(10)<<"用水量"
<<setw(10)<<"用电量"
<<setw(10)<<"水费"
<<setw(10)<<"电费"
<<endl;
for(int i=0;i<top;i++)
{
if(Tea[i].GetPower()==power)
{
Tea[i].Output();
}
}
return;
cout<<"查无此人!"<<endl;
}break;
default :cout<<"无此选项!请重试!"<<endl;break;
}
}
void Tea_Manage::Edit()//更改信息
{
if(top==0)
{
cout<<"目前系统中没有存放统计!"<<endl;
return;
}
int num;
cout<<"请输入要查找教编号:"<<endl;
cin>>num;
for(int i=0;i<top;i++)
{
if(Tea[i].GetNum()==num)
{
cout<<"请对这位老师信息进行修改:"<<endl;
Tea[i].Input();
cout<<"修改成功"<<endl;return;
}
}
cout<<"查无此人"<<endl;
}
void Tea_Manage::Delete()//删除信息
{
if(top==0)
{
cout<<"目前系统中没有存放统计!"<<endl;
return;
}
cout<<"1、按编号查找删除 2、按姓名查找删除"<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1:
{
cout<<"请输入编号:";
int num;
cin>>num;
for(int i=0;i<top;i++)
{
if(num==Tea[i].num)
{
cout<<"是否确定删除? 1、是 2、否 "<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1:
{
for(int j=i;j<top-1;j++)
Tea[j]=Tea[j+1];
cout<<"删除成功!"<<endl;
top--;
};break;
case 2:return;
default:cout<<"无此项,失败!"<<endl;break;
}return;
}
}
cout<<"无此人!"<<endl;
} ;break;
case 2:
{
cout<<"请输入姓名:";
string name;
cin>>name;
for(int i=0;i<top;i++)
{
if(name==Tea[i].name)
{
cout<<"是否确定删除? 1、是 2、否 "<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1:
{
for(int j=i;j<top-1;j++)
Tea[j]=Tea[j+1];
cout<<"删除成功!"<<endl;
top--;
};break;
case 2:return;
default:cout<<"无此项,失败!"<<endl;break;
}return;
}
}
cout<<"无此人!"<<endl;
}; break;
default:cout<<"没有此项,失败:"<<endl;break;
}
}
void Tea_Manage::Total()//数据统计
{
cout<<"1 老师所用水电量总量 2 老师总水电费 "<<endl;
int choice;
cout<<"请输入你选择"<<endl;
cin>>choice;
switch(choice)
{
case 1:
{
double zwater=0.0, zpower=0.0;
for(int i=0; i<top; i++)
{
zwater+=Tea[i].water;
zpower+=Tea[i].power;
}
cout<<"老师总用水量为"<<zwater<<endl;
cout<<"老师总用电量为"<<zpower<<endl;
}break;
case 2:
{
double zwatermoney=0.0, zpowermoney=0.0;
for(int i=0;i<top;i++)
{
zwatermoney+=Tea[i].watermoney;
zpowermoney+=Tea[i].powermoney;
}
cout<<"老师总水费为"<<zwatermoney<<endl;
cout<<"老师总电费为"<<zpowermoney<<endl;
}break;
default:cout<<"输入错误。请重新输入"<<endl;break;
}
}
void Tea_Manage::Save()//保留老师信息
{
ofstream out("老师.txt",ios::out);
if(!out)
{
cout<<"打开失败!"<<endl;
return;
}
cout<<"打开成功!"<<endl;
for(int i=0;i<top;i++)
{
out<<Tea[i].num<<" "
<<Tea[i].name<<" "
<<Tea[i].sex<<" "
<<Tea[i].age<<" "
<<Tea[i].depart<<" "
<<Tea[i]
展开阅读全文