順序表存儲,文件保存

#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章