📄 student.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 + -