顺序表存储,文件保存

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值