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

📄 sort.cpp

📁 1.管理信息系统(学生成绩) 两种用户等级:管理员和用户
💻 CPP
字号:
#include "Function.h"


void InfoManager::SortByID()
{
	Unit *p1, *p2;
	p1=head_stu;
	int count=Get_Length();
	for (int i=1; i<count; ++i)
	{
		p1=head_stu;
		if (p1->ID>p1->next->ID)//首结点大于第二个节点,交换
		{ 
			p2=p1->next;
			p1->next=p1->next->next;
			p2->next=p1;
			head_stu=p2;
		}
		p1=head_stu;
		while (p1->next->next)//交换除首节点以外的节点
		{
			p2=p1;
			p1=p1->next;
			if (p1->ID>p1->next->ID)
			{
				p2->next=p1->next;
				p1->next=p1->next->next;
				p2->next->next=p1;
				p1=p2->next;
			}
		}
	}
	InfoManager::Show_All_Stu(head_stu);
}

void InfoManager::SortBySex (int sign)
{
	--sign;
	Unit *p1, *p2;
	int count=Get_Length();
	p1=head_stu;
	if (sign==0)
	{
		for (int i=1; i<count; ++i)
		{
			p1=head_stu;
			if (p1->Sex>p1->next->Sex)//首结点小于第二个节点,交换
			{ 
				p2=p1->next;
				p1->next=p1->next->next;
				p2->next=p1;
				head_stu=p2;
			}
			p1=head_stu;
			while (p1->next->next)//交换除首节点以外的节点
			{
				p2=p1;
				p1=p1->next;
				if (p1->Sex>p1->next->Sex)
				{
					p2->next=p1->next;
					p1->next=p1->next->next;
					p2->next->next=p1;
					p1=p2->next;
				}
			}
		}
	}
	else
	{
		for (int i=1; i<count; ++i)
		{
			p1=head_stu;
			if (p1->Sex<p1->next->Sex)//首结点小于第二个节点,交换
			{ 
				p2=p1->next;
				p1->next=p1->next->next;
				p2->next=p1;
				head_stu=p2;
			}
			p1=head_stu;
			while (p1->next->next)//交换除首节点以外的节点
			{
				p2=p1;
				p1=p1->next;
				if (p1->Sex<p1->next->Sex)
				{
					p2->next=p1->next;
					p1->next=p1->next->next;
					p2->next->next=p1;
					p1=p2->next;
				}
			}
		}
	}
	InfoManager::Show_All_Stu(head_stu);
}

void InfoManager::SortByOld (int sign)
{
	Unit *p1, *p2;
	int count=Get_Length();
	p1=head_stu;
	if (sign==1)
	{
		for (int i=1; i<count; ++i)
		{
			p1=head_stu;
			if (p1->Old>p1->next->Old)//首结点小于第二个节点,交换
			{ 
				p2=p1->next;
				p1->next=p1->next->next;
				p2->next=p1;
				head_stu=p2;
			}
			p1=head_stu;
			while (p1->next->next)//交换除首节点以外的节点
			{
				p2=p1;
				p1=p1->next;
				if (p1->Old>p1->next->Old)
				{
					p2->next=p1->next;
					p1->next=p1->next->next;
					p2->next->next=p1;
					p1=p2->next;
				}
			}
		}
	}
	else
	{
		for (int i=1; i<count; ++i)
		{
			p1=head_stu;
			if (p1->Old<p1->next->Old)//首结点小于第二个节点,交换
			{ 
				p2=p1->next;
				p1->next=p1->next->next;
				p2->next=p1;
				head_stu=p2;
			}
			p1=head_stu;
			while (p1->next->next)//交换除首节点以外的节点
			{
				p2=p1;
				p1=p1->next;
				if (p1->Old<p1->next->Old)
				{
					p2->next=p1->next;
					p1->next=p1->next->next;
					p2->next->next=p1;
					p1=p2->next;
				}
			}
		}
	}
	InfoManager::Show_All_Stu(head_stu);
}

Unit * InfoManager::SortByClass(Unit *p1)
{
	Unit *p2=NULL;
	Unit *p3=p1;
	Unit *p4=p1;
	int count=0;
	while (p4)
	{
		++count;
		p4=p4->next;
	}
	for (int i=1; i<count; ++i)
	{
		p1=p3;
		if (p1->Class>p1->next->Class)//首结点大于第二个节点,交换
		{ 
			p2=p1->next;
			p1->next=p1->next->next;
			p2->next=p1;
			p3=p2;
		}
		p1=p3;
		while (p1->next->next)//交换除首节点以外的节点
		{
			p2=p1;
			p1=p1->next;
			if (p1->Class>p1->next->Class)
			{
				p2->next=p1->next;
				p1->next=p1->next->next;
				p2->next->next=p1;
				p1=p2->next;
			}
		}
	}
	return p3;
}

void InfoManager::SortByMath()
{
	Unit *p1, *p2;
	int count=Get_Length();
	p1=head_stu;
	for (int i=1; i<count; ++i)
	{
		p1=head_stu;
		if (p1->Math<p1->next->Math)//首结点大于第二个节点,交换
		{ 
			p2=p1->next;
			p1->next=p1->next->next;
			p2->next=p1;
			head_stu=p2;
		}
		p1=head_stu;
		while (p1->next->next)//交换除首节点以外的节点
		{
			p2=p1;
			p1=p1->next;
			if (p1->Math<p1->next->Math)
			{
				p2->next=p1->next;
				p1->next=p1->next->next;
				p2->next->next=p1;
				p1=p2->next;
			}
		}
	}
	InfoManager::Show_All_Stu(head_stu);
}

void InfoManager::SortByChinese()
{
	Unit *p1, *p2;
	int count=Get_Length();
	p1=head_stu;
	for (int i=1; i<count; ++i)
	{
		p1=head_stu;
		if (p1->Chinese<p1->next->Chinese)//首结点大于第二个节点,交换
		{ 
			p2=p1->next;
			p1->next=p1->next->next;
			p2->next=p1;
			head_stu=p2;
		}
		p1=head_stu;
		while (p1->next->next)//交换除首节点以外的节点
		{
			p2=p1;
			p1=p1->next;
			if (p1->Chinese<p1->next->Chinese)
			{
				p2->next=p1->next;
				p1->next=p1->next->next;
				p2->next->next=p1;
				p1=p2->next;
			}
		}
	}
	InfoManager::Show_All_Stu(head_stu);
}

void InfoManager::SortByEnglish()
{
	Unit *p1, *p2;
	int count=Get_Length();
	p1=head_stu;
	for (int i=1; i<count; ++i)
	{
		p1=head_stu;
		if (p1->English<p1->next->English)//首结点大于第二个节点,交换
		{ 
			p2=p1->next;
			p1->next=p1->next->next;
			p2->next=p1;
			head_stu=p2;
		}
		p1=head_stu;
		while (p1->next->next)//交换除首节点以外的节点
		{
			p2=p1;
			p1=p1->next;
			if (p1->English<p1->next->English)
			{
				p2->next=p1->next;
				p1->next=p1->next->next;
				p2->next->next=p1;
				p1=p2->next;
			}
		}
	}
	InfoManager::Show_All_Stu(head_stu);
}

void InfoManager::SortByAverage()
{
	Unit *p1, *p2;
	int count=Get_Length();
	p1=head_stu;
	for (int i=1; i<count; ++i)
	{
		p1=head_stu;
		if (p1->Average<p1->next->Average)//首结点大于第二个节点,交换
		{ 
			p2=p1->next;
			p1->next=p1->next->next;
			p2->next=p1;
			head_stu=p2;
		}
		p1=head_stu;
		while (p1->next->next)//交换除首节点以外的节点
		{
			p2=p1;
			p1=p1->next;
			if (p1->Average<p1->next->Average)
			{
				p2->next=p1->next;
				p1->next=p1->next->next;
				p2->next->next=p1;
				p1=p2->next;
			}
		}
	}
	InfoManager::Show_All_Stu(head_stu);
}

⌨️ 快捷键说明

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