一、目标与要求
编写一个新的串类的程序
一:扩充串类
将教材中的串类功能扩充;
重载操作运算符 +
重载字符串流输入运算符 <<
重载字符串流输出运算符 >>
二:编写学生基本信息类,使用单链表进行管理
1.定义一个学生类;
class student {
String name;
int weight;
float height;
String No;
}
2.使用单链表进行管理
3.使用文件保存一个班的同学;
4.具有输入新同学,修改同学,屏幕打印输出;
三:要求
- 文件内容如下(同学的总数,每个同学的信息)
3
WangLin
65
170.3
07215103
LiJun
48
165.8
07215105
CaoHong
68
179.4
07215123
- 文件输入输出使用运算符重载 << >>
例如 student wang ,Li ,chao;
ios >> wang >> Li >> chao
ios << wang << Li << chao
二、工具/准备工作
VC6.0,串类、节点类、单链表类等相关软件包
三、实验分析
1.首先需要重载串类的“+”“>>”“<<”运算符,函数实现过程可以调用串类中已存在的函数。
2.创建student类,并实现student类的“<<”“>>”运算符重载
3.创建oneclass类,该类继承lk_list<student>类并进行扩充,以实现“使用文件保存一个班的同学”及“输入新同学,修改同学,屏幕打印输出”等功能。
四、实验步骤
1.完成string.h的扩充,实现“+”“>>”“<<”运算符重载,具体代码如下:
istream& operator >>(istream &is, String &str)// >>重载
{ char e[30];
is>>e;
String t(e);
str=t;
return is;
}
ostream& operator <<(ostream &os,const String &str) // <<重载
{return os<<str.CStr()<<'\n';
}
String operator +(const String &first, const String &second)// +重载
{ String e(first);
Concat(e,second);
return e;
}
2.创建student类
成员变量如下:
String name;
int weight;
float height;
String No;
友元函数如下:
friend ostream& operator << (ostream &os, student ©);
friend istream& operator >> (istream &is, student ©);
3.创建oneclass类,如下:
class oneclass: public LinkList<student>
{public:
void Save(); //保存信息
void Show(); //屏幕输出
void AddStudent(int n); //通过文件添加新同学,n为添加的同学数
void AddOneStudent(); //添加一个同学,同学数据由键盘输入
bool Edit(int n); //通过键盘修改第n个同学的信息
};
完成相关函数的编写。
4.编写main函数,调试、完善程序。
五、测试与结论
String a("hello "),b; cin>>b; cout<<a+b<<endl;
//通过键盘输入信息到b(检验“>>”重载),输出a+b(检验“<<”“+”重载),运行如下:
oneclass classone;
classone.AddStudent(3); //新添3个同学,同学数据从data.txt中获取
classone.AddOneStudent(); //新添一个同学,同学数据由键盘输入
classone.Show(); //通过屏幕输出学生信息
classone.Save(); //将信息保存至data2.txt
以下是这四个函数的测试结果:
生成的data2.txt如下:
classone.Edit(2); //修改同学信息,这里修改第2个同学
cout<<"修改后的数据:"<<endl;
classone.Show(); //通过屏幕输出修改后的数据
运行结果如下:
实验程序满足了实验目标与要求。
六、实验总结
- 创建了oneclass类,使用类成员函数可以方便地管理学生信息,功能完善。
- 熟悉了软件包的使用。
- 巩固了大一所学的继承与派生,输入输出流等内容,并将所学实现了具体的应用。