⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 student.h

📁 学生管理系统
💻 H
字号:
// list.h head files
#include <iostream>
#include <string>
#include <fstream>

using namespace std;
using std::string;

#ifndef STUDENT_H_
#define STUDENT_H_


class student
{
private:
	char name[20];
	char sex;
	int clas;
	string number;
	float score;
	static int total;
public:
    student ();
	student (const char * nam, char se, int cla, string num,float sco);
	~student();
	student(student & stud);
	
	string getnumber(){return number;}
	float getscore(){return score;}
	char *getname(){return name;}
	static void addtotal();
	static void reducetotal();
	
    bool operator == (const student &stud);
	void  operator = (const student &stud);
	
	friend std::ostream & operator<< (std::ostream &os,const student &stud)
	{
		os << stud.name << "  " << stud.sex << "  "
			<< stud.clas << "  " << stud.number << "  "
			<< stud.score << "  " << stud.total << endl;
		return os;
	}
	
	friend ifstream & operator >> (ifstream &is,student &stud)
	{
		is >> stud.name >> stud.sex >> stud.clas 
		   >> stud.number >> stud.score >> stud.total;
		
		return is;    //返回文件输入流
	}
	
};
#endif



template<typename T>class list;
template<typename T>class node
{	
public:
	T info;
	node<T> *next;
	
	node();
	node(const T & data);
	friend class list<T>;
	
};

template <typename T>
node<T>::node()
{
	next = NULL;
}
template <typename T> 
node<T>::node(const T & data)
{
	info = data;
	next = NULL;
}


//链表类的定义
template<typename T>class list
{
	node<T> *head, *tail;
public:
	list();
	~list();
	
	node<T> *begin(){return head->next;}
	// node<T> *end(){return tail;}
	void makeempty();
	node<T> *find(string number);
	void printlist();
	void insertfront(node<T> *p);
	node<T> *creatnode(T data);
	void deletenode(node<T> *p);
	bool checknum(string &num);
	int length();
	void sortby();
};

template<typename T>
list<T>::list()
{
	head = tail = new node<T>();
}

template<typename T>
list<T>::~list()
{
	makeempty();
	delete head;
}

template<typename T>
void list<T>::makeempty()
{
	node<T> *temp;
	while(head->next != NULL)
	{
		temp = head->next;
		head->next = temp->next;
		delete temp;
	}
	tail = head;
}

template<typename T>
node<T> *list<T>::find(string number)
{
	node<T> *temp = head->next;
	string num = temp->info.getnumber();
	while(temp != NULL && num != number)
	{
		temp = temp->next;
		num = temp->info.getnumber();
	}
	return temp;
}

template<typename T>
void list<T>::printlist()
{
	node<T> *temp = head->next;
	while(temp != NULL)
	{
		cout << temp->info << '\n';
		cout << "-----------------------------------------------------------"<<endl;
		temp = temp->next;
	}
}

template<typename T>
void list<T>::insertfront(node<T> *p)
{
	p->next = head->next;
	head->next = p;
	if(head == tail)
		tail = p->next;
}

template<typename T>
node<T> *list<T>::creatnode(T data)
{
	node<T> *temp = new node<T>;
	temp->info = data;
	return temp;
}

template<typename T>
void list<T>::deletenode(node<T> *p)
{
	node<T> *temp = head;
	while(temp->next != NULL && temp->next != p)
		temp = temp->next;
	if(temp->next = tail)
		tail = temp;
	temp->next = p->next;
	delete p;
}

template<typename T> 
void list<T>::sortby()
{
	cout<<"按学号排序请输入1,按成绩排序请输入2."<<endl;
	int ch;
	cin>>ch;
	switch(ch)
	{
		  case 1:{
			  node<student> *p = head->next;
			  int i, j;
			  int len = length();
			  student temp;
			  student *array = new student[len];        //构建一线性表
			  for(i=0; i<len; i++)                       //将链表信息读入线性表
			  {
				  array[i] = p->info;
				  p = p->next;
			  }
			  p = head->next;
			  while(p != NULL)               //将链表清空,只留头尾结点,等排好序后,再插入。
			  {
				  head->next = p->next;
				  delete p;
				  
				  p = head->next;
			  }
			  for(i=0; i<len; i++)
				  for(j=i+1; j<len; j++)
				  {
					  if(atoi(array[i].getnumber().c_str())<atoi(array[j].getnumber().c_str()))  //排序
					  {
						  temp = array[i];
						  array[i] = array[j];
						  array[j] = temp;
					  }
				  }
				  for(i=0; i<len; i++)                         //将排好序的信息再插入链表,
				  {
					  p = creatnode(array[i]); 
					  insertfront(p);
				  }
				 }
			  break;
		  case 2:
			  {
				  node<student> *p = head->next;              //同上
				  int i,j;
				  int len = length();
				  student temp;
				  student *array=new student[len];
				  
				  for(i=0; i<len; i++)
				  {
					  array[i]=p->info;
					  p=p->next;
				  }
                  p=head->next;
				  while(p != NULL)
				  {
					  head->next = p->next;
					  delete p;
					  
					  p=head->next;
				  }
				  
				  for(i=0; i<len; i++)
					  for(j=i+1; j<len; j++)
						  if(array[i].getscore() > array[j].getscore())
						  {
							  temp=array[i];
							  array[i]=array[j];
							  array[j]=temp;
						  }
						  
						  for(i=0; i<len; i++)
						  {
							  p=creatnode(array[i]); 
							  insertfront(p);
						  }
			  }
			  break;
		  default:
			  break;
	}
	
}

template<typename T> 
bool list<T>::checknum(string & num)
{
	node<T> *temp=head->next;
	while(temp!=tail && num!=(*temp).getnumber())
		temp=temp->next;
	if(temp!=tail)
		return false;
	return true;
	
}
template<typename T> 
int list<T>::length()
{
	node<T> *temp=head->next;
	int count=0;
	while(temp!=tail)
	{
		count++;
		temp=temp->next;
	}
	return count;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -