题目要求:分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:
(1) 在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
(2) 在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Techear_Cadre类中还包含数据成员wages(工资)。
(3) 对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
(4) 在类体中声明成员函数,在类外定义成员函数。
(5) 在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
(6) 人员的基本信息分别存储在磁盘文件Teacher.txt,Cadre.txt和Teacher_Cadre.txt文件中,Teacher.txt的格式是:(姓名、年龄、性别、地址、电话、职称),Cadre.txt的格式是:(姓名、年龄、性别、地址、电话、职务),Teacher_Cadre.txt的格式是:(姓名、年龄、性别、地址、电话、职称、职务、工资),要求在操作系统中建立上述文件,并按照上述格式手工录入几条记录,程序首先从文件中读取相应数据,然后完成上述功能。
这是本人的程序,但有一个错误,希望懂的人能帮本人改一下,或是本人的程序中有麻烦,不好的地方也能帮本人指出来,并提出好的建议(后面是本人的.txt的三个文件)
#include<iostream>
#include<string>
#include<fstream>
#include “stdafx.h”
using namespace std;
class Teacher//建立一个Teacher类,含有一些数据成员,一个display函数,在类外定义函数
{
public:
void display(string y);
private:
string name;
int age;
string sex;
string Address;
long Tele;
string title;
};
void Teacher::display(string y)
{
cout<<y<<endl<<endl; //有入口参数y,y为一个从磁盘中输入到程序中的文字符号
};
class Cadre//另一个有部分和Teacher相同的类
{
private:
string name;
int age;
string sex;
string Address;
long Tele;
protected:
string post;
};
class Teacher_Cadre:public Teacher,public Cadre
{
public:
void show(string y,string s,string q);
private:
float wages;
};
void Teacher_Cadre::show(string y,string s,string q)//类调用外定义函数show,在show中调用基类中的函数display
{
Teacher_Cadre t1;
t1.Teacher::display( y);
cout<<s<<endl; //输出另一个父类中的部分数据成员
cout<<q<<endl;
}
int main()
{
string x,s,q; //定义了能在磁盘中分别读取全部和部分文件字符的字符串x,s
int nCount=0;//计数
int n=0;
Teacher_Cadre t;
ifstream i, inf1,inf2;
ofstream outf;
outf.open(“out.txt”);
inf2.open(“Teacher_Cadre.txt”);
while(getline(inf2,s)){
nCount++;
if(nCount==6||nCount==12||nCount==18)//输出Teacher_Cadre第六行,第十二行,第十八行的文字数据
{outf<<s<<“\n\n”;}
}
inf1.open(“Cadre.txt”);
while(getline(inf1,q)){
n++;
if(n==6||n==12||n==18)//输出Cadre第六行,第十二行,第十八行的文字数据
{outf<<q<<“\n\n”;}
}
i.open(“Teacher.txt”);
if(!i){cout<<“error!”<<endl;
return -1;}
while(getline(i,x)){ //得到Teacher中的全部数据
outf<<x<<“\n\n”;
}
t.show(x,s,q);//按题目要求调用show函数
inf1.close();
inf2.close();
outf.close();
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Cadre.txt文件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
name:Linda
age:22
sex:female
Address:南坪中路6号
Tele:15867760099
post:无
name:Bill
age:45
sex:male
Address:静和小区
Tele:15840717229
post:党委书记
name:Rose
age:33
sex:female
Address:武汉路22号
Tele:13840566672
post:党支部书记
name:Mary
age:36
sex:female
Address:振兴街16号
Tele:13555055257
post:团委书记
name:Blank
age:23
sex:female
Address:兴华园
Tele:15500733836
post:党员
~~~~~~~~~~~~~~~~~~~~`Teacher.txt~~~~~~~~~~~~~~~~“
name:Linda
age:22
sex:female
Address:南坪中路6号
Tele:15867760099
title:teacher
name:Bill
age:45
sex:male
Address:静和小区
Tele:15840717229
title:headmaster
name:Rose
age:33
sex:female
Address:武汉路22号
Tele:13840566672
title:advisor
name:Mary
age:36
sex:female
Address:振兴街16号
Tele:13555055257
title:director
name:Blank
age:23
sex:female
Address:兴华园
Tele:15500733836
title:teacher
~~~~~~~~~~~~~~~~~~~~~~~~~~Teacher_Cadre.txt~~~~~~~~~~~~~~~~~~~~~~~
name:Linda
age:22
sex:female
Address:南坪中路6号
Tele:15867760099
wages:4000
name:Bill
age:45
sex:male
Address:静和小区
Tele:15840717229
wages:12000
name:Rose
age:33
sex:female
Address:武汉路22号
Tele:13840566672
wages:6000
name:Mary
age:36
sex:female
Address:振兴街16号
Tele:13555055257
wages:6500
name:Blank
age:23
sex:female
Address:兴华园
Tele:15500733836
wages:4800
(1) 在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
(2) 在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Techear_Cadre类中还包含数据成员wages(工资)。
(3) 对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
(4) 在类体中声明成员函数,在类外定义成员函数。
(5) 在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
(6) 人员的基本信息分别存储在磁盘文件Teacher.txt,Cadre.txt和Teacher_Cadre.txt文件中,Teacher.txt的格式是:(姓名、年龄、性别、地址、电话、职称),Cadre.txt的格式是:(姓名、年龄、性别、地址、电话、职务),Teacher_Cadre.txt的格式是:(姓名、年龄、性别、地址、电话、职称、职务、工资),要求在操作系统中建立上述文件,并按照上述格式手工录入几条记录,程序首先从文件中读取相应数据,然后完成上述功能。
这是本人的程序,但有一个错误,希望懂的人能帮本人改一下,或是本人的程序中有麻烦,不好的地方也能帮本人指出来,并提出好的建议(后面是本人的.txt的三个文件)
#include<iostream>
#include<string>
#include<fstream>
#include “stdafx.h”
using namespace std;
class Teacher//建立一个Teacher类,含有一些数据成员,一个display函数,在类外定义函数
{
public:
void display(string y);
private:
string name;
int age;
string sex;
string Address;
long Tele;
string title;
};
void Teacher::display(string y)
{
cout<<y<<endl<<endl; //有入口参数y,y为一个从磁盘中输入到程序中的文字符号
};
class Cadre//另一个有部分和Teacher相同的类
{
private:
string name;
int age;
string sex;
string Address;
long Tele;
protected:
string post;
};
class Teacher_Cadre:public Teacher,public Cadre
{
public:
void show(string y,string s,string q);
private:
float wages;
};
void Teacher_Cadre::show(string y,string s,string q)//类调用外定义函数show,在show中调用基类中的函数display
{
Teacher_Cadre t1;
t1.Teacher::display( y);
cout<<s<<endl; //输出另一个父类中的部分数据成员
cout<<q<<endl;
}
int main()
{
string x,s,q; //定义了能在磁盘中分别读取全部和部分文件字符的字符串x,s
int nCount=0;//计数
int n=0;
Teacher_Cadre t;
ifstream i, inf1,inf2;
ofstream outf;
outf.open(“out.txt”);
inf2.open(“Teacher_Cadre.txt”);
while(getline(inf2,s)){
nCount++;
if(nCount==6||nCount==12||nCount==18)//输出Teacher_Cadre第六行,第十二行,第十八行的文字数据
{outf<<s<<“\n\n”;}
}
inf1.open(“Cadre.txt”);
while(getline(inf1,q)){
n++;
if(n==6||n==12||n==18)//输出Cadre第六行,第十二行,第十八行的文字数据
{outf<<q<<“\n\n”;}
}
i.open(“Teacher.txt”);
if(!i){cout<<“error!”<<endl;
return -1;}
while(getline(i,x)){ //得到Teacher中的全部数据
outf<<x<<“\n\n”;
}
t.show(x,s,q);//按题目要求调用show函数
inf1.close();
inf2.close();
outf.close();
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Cadre.txt文件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·
name:Linda
age:22
sex:female
Address:南坪中路6号
Tele:15867760099
post:无
name:Bill
age:45
sex:male
Address:静和小区
Tele:15840717229
post:党委书记
name:Rose
age:33
sex:female
Address:武汉路22号
Tele:13840566672
post:党支部书记
name:Mary
age:36
sex:female
Address:振兴街16号
Tele:13555055257
post:团委书记
name:Blank
age:23
sex:female
Address:兴华园
Tele:15500733836
post:党员
~~~~~~~~~~~~~~~~~~~~`Teacher.txt~~~~~~~~~~~~~~~~“
name:Linda
age:22
sex:female
Address:南坪中路6号
Tele:15867760099
title:teacher
name:Bill
age:45
sex:male
Address:静和小区
Tele:15840717229
title:headmaster
name:Rose
age:33
sex:female
Address:武汉路22号
Tele:13840566672
title:advisor
name:Mary
age:36
sex:female
Address:振兴街16号
Tele:13555055257
title:director
name:Blank
age:23
sex:female
Address:兴华园
Tele:15500733836
title:teacher
~~~~~~~~~~~~~~~~~~~~~~~~~~Teacher_Cadre.txt~~~~~~~~~~~~~~~~~~~~~~~
name:Linda
age:22
sex:female
Address:南坪中路6号
Tele:15867760099
wages:4000
name:Bill
age:45
sex:male
Address:静和小区
Tele:15840717229
wages:12000
name:Rose
age:33
sex:female
Address:武汉路22号
Tele:13840566672
wages:6000
name:Mary
age:36
sex:female
Address:振兴街16号
Tele:13555055257
wages:6500
name:Blank
age:23
sex:female
Address:兴华园
Tele:15500733836
wages:4800
解决方案
20
程序错误,暂时没有时间调试跟踪。
不过有个建议。
建立一个类,拥有教师,干部,的共同数据。成员变量全部为私有,增加每个成员变量的set,get函数。
然后从这个类,派生教师,干部类。在增加新的set get函数。
然后再有一个类,从教师,干部多继承。增加相关的函数。
不过有个建议。
建立一个类,拥有教师,干部,的共同数据。成员变量全部为私有,增加每个成员变量的set,get函数。
然后从这个类,派生教师,干部类。在增加新的set get函数。
然后再有一个类,从教师,干部多继承。增加相关的函数。
75
什么错误?你要达到这种效果?
看代码呗
看代码呗
#include "stdafx.h" #include<iostream> #include<string> #include<fstream> using namespace std; class Teacher//建立一个Teacher类,含有一些数据成员,一个display函数,在类外定义函数 { public: void display(string y); private: string name; int age; string sex; string Address; long Tele; string title; }; void Teacher::display(string y) { cout<<y<<endl<<endl; //有入口参数y,y为一个从磁盘中输入到程序中的文字符号 }; class Cadre//另一个有部分和Teacher相同的类 { private: string name; int age; string sex; string Address; long Tele; protected: string post; }; class Teacher_Cadre:public Teacher,public Cadre { public: void show(string y,string s,string q); private: float wages; }; void Teacher_Cadre::show(string y,string s,string q)//类调用外定义函数show,在show中调用基类中的函数display { Teacher_Cadre t1; t1.Teacher::display( y); cout<<s<<endl; //输出另一个父类中的部分数据成员 cout<<q<<endl; } int main() { string x,s,q; //定义了能在磁盘中分别读取全部和部分文件字符的字符串x,s int nCount=0;//计数 int n=0; Teacher_Cadre t; ifstream i, inf1,inf2; ofstream outf; outf.open("C:\out.txt"); inf2.open("C:\Teacher_Cadre.txt"); while(getline(inf2,s)) { nCount++; if(s.find("wages:")!=-1) { cout<<s<<endl; outf<<s<<"\r\n"; } /*if(nCount==6||nCount==12||nCount==18)//输出Teacher_Cadre第六行,第十二行,第十八行的文字数据 { outf<<s<<"\r\n"; }*/ } inf1.open("C:\Cadre.txt"); while(getline(inf1,q)) { n++; /*if(n==6||n==12||n==18)//输出Cadre第六行,第十二行,第十八行的文字数据 { outf<<q<<"\r\n"; }*/ if(q.find("wages:")!=-1) { outf<<q<<"\r\n"; } } i.open("C:\Teacher.txt"); if(!i){ cout<<"error!"<<endl; return -1; } while(getline(i,x)){ //得到Teacher中的全部数据 cout<<x<<endl; outf<<x<<"\r\n"; } t.show(x,s,q);//按题目要求调用show函数 inf1.close(); inf2.close(); outf.close(); return 0; }
5
能本人找到错误最好了…………