#include<fstream>
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
class student
{
string ID;
string name;
public:
bool operator<(student stu);
friend ostream & operator<<(ostream & s, const student & stu);
friend istream & operator>>(istream & s, student & stu);
};
//根据student类中成员函数的申明和程序运行结果分析,完成成员函数的定义
bool student::operator<(student stu)
{
return ID < stu.ID;
}
ostream& operator<<(ostream& s, const student& stu)
{
s << stu.ID << ' ' << stu.name << endl;
return s;
}
istream& operator>>(istream& s, student& stu)
{
s >> stu.ID >> stu.name;
return s;
}
template<typename T, int size>
class Orderlist
{
int maxsize;
int last;
T slist[size];
public:
Orderlist();
~Orderlist();
int getlast() { return last; }
T getslist(int k) { return slist[k]; }
void setslist(T t, int k) { slist[k] = t; }
void BubbleSort();
void input();
void print();
};
//根据Orderlist类中成员函数的申明和程序运行结果分析,完成Orderlist()的定义
template<typename T, int size>
Orderlist<T, size>::Orderlist()
:maxsize(size),last(0)
{
ifstream file;
if (!file.is_open())
{
cout << "没有该数据文件,创建该数据文件" << endl;
file.open("student.txt");
}
char str[1024];
while (file.getline(str, sizeof(str)))
{
stringstream ss(str);
T t;
ss >> t;
slist[last++] = t;
}
}
//根据Orderlist类中成员函数的申明和程序运行结果分析,完成~Orderlist()的定义
template<typename T, int size>
Orderlist<T, size>::~Orderlist()
{
ofstream file("student.txt");
for (int i = 0; i < last; i++)
file << slist[i];
file.close();
}
//根据Orderlist类中成员函数的申明和程序运行结果分析,完成BubbleSort()的定义
template<typename T, int size>
void Orderlist<T, size>::BubbleSort()
{
for (int i = 0; i < last - 1; i++)//冒泡次数=n-1次
{
bool orderly = true;
for (int j = 0; j < last - 1 - i; j++)
{
if (slist[j+1] < slist[j])
{
swap(slist[j], slist[j + 1]);
orderly = false;
}
}
if (orderly)
break;
}
}
//根据Orderlist类中成员函数的申明和程序运行结果分析,完成input()的定义
template<typename T, int size>
void Orderlist<T, size>::input()
{
cout << "结束时请按:^Z和回车:" << endl;
while ( last < maxsize&&!cin.eof())
{
cout << "请输入学号和姓名,中间留一个空格或回车:" << endl;
T t;
cin >> t;
slist[last++] = t;
}
}
template<typename T, int size>
void Orderlist<T, size>::print()
{
for (int i = 0; i < last; i++)
cout << slist[i];
}
int main() {
Orderlist <student, 30>list1;
list1.input();
list1.BubbleSort();
list1.print();
system("pause");
return 0;
}
顺序表存储,文件保存
最新推荐文章于 2021-10-27 19:25:10 发布