本系统通过设计模板实现链表操作,功能有查询学生信息,添加和删除学生信息,根据学号、成绩等对学生进行排序输出。在程序运行开始时,从文件中读取学生信息,储存到链表中,之后对链表进行各种操作,在退出程序时能够自动将链表中的数据保存到文件中。
整个系统包括四个部分:
1.结点类
2.链表类
3.学生类
4.main函数
main函数主要包括3个部分:
1.文件读写
2.对链表操作
3.功能选择
首先来看结点类:
template<class T>
class StuNode
{
public:
StuNode();//初始化
StuNode<T> *pre;//前一结点
StuNode<T> *next;//后一结点
T data;//数据
};
链表类:
template<class T>
class StuList
{
private:
StuNode<T> *head;//链表的头结点
StuNode<T> *tail;//链表的尾结点
int length;//链表的长度
public:
StuList();//默认构造函数
StuList(StuList &list1);//拷贝构造函数
~StuList();//析构函数
int size();//返回长度
void add(T e);//添加结点
StuNode<T> *get_head();
StuNode<T> *get_tail();
void show();//按序输出
void remove(T index);//移除
void find(T index);//查找
};
学生类中定义学生的各项属性即可,除此之外还需根基需要重载部分操作符,可以参考
main函数中的文件读写可以参考
对链表操作的函数有
save_file(list);//保存
add_info(list);//添加
search_info(list);//查询
delete_info(list);//删除
stu_num_out(list);//学号排序
score_out(list);//分数排序
功能操作的选择可以用此结构:
while(1)
{
cin>>choice;
switch(choice)
{
case : break;
case : break;
case : break;
}
}
我认为其中有三个比较重要的点
1.模板类中不能出现有具体的类的内容,模板就是模板
2.对链表操作时一定要注意区分是对真实数据进行操作还是对数据的副本进行操作,否则g了
3.注意姓名班级等信息都可以重复,但是学号必定是唯一的