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

📄 student.cpp

📁 这是一个基于.net开发环境开发的学生信息管理系统源代码经过测试可以正常使用
💻 CPP
字号:
//#include <stdafx.h>

#include ".\student.h"

#include <string.h>
#include <iostream>
using namespace std;

CStudent::CStudent(void)
{
	pupil.maxSize = MAX_NUM_STUDENT;
	pupil.numOfStu = 0;
}

CStudent::~CStudent(void)
{
}

void CStudent::AdmitStu()
{
	cout<<"\n\n请输入您要录入的学生的数目:\t";
	int num;
	cin>>num;
	if (num <= 0)
	{
		cout<<"\n\n";
		return;
	}
	cout<<"\n请在下面依次输入各个学生的信息:\n\n";
	for (int i = pupil.numOfStu + 1; i <= pupil.numOfStu + num; ++i)
	{
		cout<<"第 "<<i<<"个:\n";
		cout<<"姓名\t"<<"性别\t"<<"数学\t"<<"计算机\t"<<"语文\t"<<"英语\n";
		cin>>pupil.infoOfStu[i].name
			>>pupil.infoOfStu[i].sex
		    >>pupil.infoOfStu[i].math
			>>pupil.infoOfStu[i].computer
			>>pupil.infoOfStu[i].chinese
			>>pupil.infoOfStu[i].english;
		pupil.infoOfStu[i].id = (long)(20030800 + i);
		pupil.infoOfStu[i].allscore = pupil.infoOfStu[i].math + 
			pupil.infoOfStu[i].computer + pupil.infoOfStu[i].chinese
			+ pupil.infoOfStu[i].english;
		pupil.infoOfStu[i].avescore = (float)pupil.infoOfStu[i].allscore / 4;
	}
	pupil.numOfStu += num;

	cout<<"\n\n";
}

void CStudent::Search()
{
	if (!pupil.numOfStu)
	{
		cout<<"\n\n没有任何学生的信息!\n\n";
		return;
	}
	cout<<"\n基本查询功能:\n\n";
	cout<<"1. 学号查询    2. 姓名查询    3. 性别查询\n";
	int choice;
	cin>>choice;
	switch(choice)
	{
	case 1: this->Search_id(); break;
	case 2: this->Search_name(); break;
	case 3: this->Search_sex(); break;
	default: cout<<"没有此项功能,请慎重选择!\n\n";
	}
}

void CStudent::Search_id()  //折半查找
{
	cout<<"\n请输入您查询的学生的学号:\t";
	long id;
	cin>>id;
	int low = 1;
	int high = pupil.numOfStu;
	int mid;
	int sign = 0;
	while  (low <= high)
	{
		mid = (low + high) / 2;
		if (id == pupil.infoOfStu[mid].id)
		{
			cout<<"\n您查找的学生的信息如下:\n";
			cout<<"姓名\t"<<"学号\t"<<"性别\t"
				<<"数学\t"<<"计算机\t"<<"语文\t"<<"英语\t"<<"平均成绩\t"<<"总成绩\n";
			cout<<pupil.infoOfStu[mid].name<<"\t"
				<<pupil.infoOfStu[mid].id<<"\t"
				<<pupil.infoOfStu[mid].sex<<"\t"
				<<pupil.infoOfStu[mid].math<<"\t"
				<<pupil.infoOfStu[mid].computer<<"\t"
				<<pupil.infoOfStu[mid].chinese<<"\t"
				<<pupil.infoOfStu[mid].english<<"\t"
				<<pupil.infoOfStu[mid].avescore<<"\t"
				<<pupil.infoOfStu[mid].allscore<<"\n\n";
			sign++;
			break;
		}
		else
		{
			if (id < pupil.infoOfStu[mid].id)
			{
				high = mid - 1;
			}
			else
			{
				low = mid + 1;
			}
		}
	}
	if (!sign)
	{
		cout<<"没有您要查找的学生!\n\n";
	}
}

void CStudent::Search_name() //顺序查找
{
	cout<<"\n请输入您要查找的学生的姓名:\t";
	char name[20];
	cin>>name;
	strcpy(pupil.infoOfStu[0].name, name); //设置岗哨
	int guard = pupil.numOfStu;
	int sign = 0;
	while (guard >= 0)
	{
		if (!strcmp(pupil.infoOfStu[guard].name, name))
		{
			if (guard)
			{
				cout<<"\n您查找的学生的信息如下:\n";
			    cout<<"姓名\t"<<"学号\t"<<"性别\t"
				     <<"数学\t"<<"计算机\t"<<"语文\t"<<"英语\t"<<"平均成绩\t"<<"总成绩\n";
			    cout<<pupil.infoOfStu[guard].name<<"\t"
				     <<pupil.infoOfStu[guard].id<<"\t"
				     <<pupil.infoOfStu[guard].sex<<"\t"
				     <<pupil.infoOfStu[guard].math<<"\t"
				     <<pupil.infoOfStu[guard].computer<<"\t"
				     <<pupil.infoOfStu[guard].chinese<<"\t"
				     <<pupil.infoOfStu[guard].english<<"\t"
					 <<pupil.infoOfStu[guard].avescore<<"\t"
					 <<pupil.infoOfStu[guard].allscore<<"\n\n\n";
				sign++;
				break;
			}
		}
		guard--;
	}
	if (!sign)
	{
		cout<<"没有您查找的学生!\n\n";
	}
}

void CStudent::Search_sex()  //顺序查找
{
	cout<<"\n请输入您查找的性别:\t";
	char sex[10];
	cin>>sex;
	int sign = 0;
	cout<<"\n您查找的学生的信息如下:\n\n";
	cout<<"姓名\t"<<"学号\t"<<"性别\t"
		<<"数学\t"<<"计算机\t"<<"语文\t"<<"英语\t"<<"平均成绩\t"<<"总成绩\n";
	for (int i = 1; i <= pupil.numOfStu; i++)
	{
		if (!strcmp(sex, pupil.infoOfStu[i].sex))
		{
			cout<<pupil.infoOfStu[i].name<<"\t"
				 <<pupil.infoOfStu[i].id<<"\t"
				 <<pupil.infoOfStu[i].sex<<"\t"
				 <<pupil.infoOfStu[i].math<<"\t"
				 <<pupil.infoOfStu[i].computer<<"\t"
				 <<pupil.infoOfStu[i].chinese<<"\t"
				 <<pupil.infoOfStu[i].english<<"\t"
				 <<pupil.infoOfStu[i].avescore<<"\t"
				 <<pupil.infoOfStu[i].allscore<<"\n\n";
			sign++;
		}
	}
	
	cout<<"总共查找到 "<<sign<<"条信息!\n\n\n";
}

void CStudent::Sorting()
{
	if (!pupil.numOfStu)
	{
		cout<<"\n\n没有任何学生的信息!\n\n";
		return;
	}
	cout<<"\n\n此程序只能提供升序排列,请选择:\n\n";
	cout<<"1.总成绩  2.平均成绩  3.数学  4.语文  5.英语  6.计算机\n\n";
	int choice;
	cin>>choice;
	switch(choice)
	{
	case 1: Sorting_allscore(); break;
	case 2: Sorting_avescore(); break;
	case 3: Sorting_math(); break;
	case 4: Sorting_chinese(); break;
	case 5: Sorting_english(); break;
	case 6: Sorting_computer(); break;
	default: cout<<"没有此项功能!\n\n"; break;
	}
}

void CStudent::Sorting_allscore() //直接插入排序
{int j;
	for (int i = 2; i <= pupil.numOfStu; ++i)
	{
		if (pupil.infoOfStu[i].allscore < pupil.infoOfStu[i - 1].allscore)
		{
			pupil.infoOfStu[0] = pupil.infoOfStu[i];
			pupil.infoOfStu[i] = pupil.infoOfStu[i - 1];
			for ( j = i - 2;
				pupil.infoOfStu[0].allscore < pupil.infoOfStu[j].allscore;
				--j)
			{
				pupil.infoOfStu[j + 1] = pupil.infoOfStu[j];
			}
			pupil.infoOfStu[j + 1] =pupil.infoOfStu[0];
		}
	}

	Output();
}

void CStudent::Sorting_avescore() //冒泡排序
{
	for (int i = 2; i <= pupil.numOfStu; i++)
	{
		for (int j = 1; j <= pupil.numOfStu - i; j++)
		{
			if (pupil.infoOfStu[j].avescore > pupil.infoOfStu[j + 1].avescore)
			{
				pupil.infoOfStu[0] = pupil.infoOfStu[j];
				pupil.infoOfStu[j] = pupil.infoOfStu[j + 1];
				pupil.infoOfStu[j + 1] = pupil.infoOfStu[0];
			}
		}
	}

	Output();
}

void CStudent::Sorting_chinese()   //折半插入排序
{
	int i, j;
	int low, high, mid;
	for (i = 2; i <= pupil.numOfStu; ++i)
	{
		pupil.infoOfStu[0] = pupil.infoOfStu[i];
		low = 1;
		high = i - 1;
		while (low <= high)
		{
			mid = (low + high) / 2;
			if (pupil.infoOfStu[0].chinese < pupil.infoOfStu[mid].chinese)
			{
				high = mid - 1;
			}
			else
			{
				low = mid + 1;
			}
		}

		for (j = i - 1; j >= high + 1; --j)
		{
			pupil.infoOfStu[j + 1] = pupil.infoOfStu[j];
		}
		pupil.infoOfStu[high + 1] = pupil.infoOfStu[0];
	}

	Output();
}

void CStudent::Sorting_computer()  //希尔排序
{
	const int NUM_OF_PACE = 6;
	int pace[NUM_OF_PACE] = {11, 9, 7, 5, 3, 1};
	for (int i = 0; i < NUM_OF_PACE; i++)
	{
		ShellInsert(pace[i]);
	}

	Output();
}

void CStudent::ShellInsert(int pace)
{
int j;
	for (int i = pace + 1; i <= pupil.numOfStu; ++i)
	{
		if (pupil.infoOfStu[i].computer < pupil.infoOfStu[i - pace].computer)
		{
			pupil.infoOfStu[0] = pupil.infoOfStu[i];
			for (j = i - pace;
				(j > 0) && (pupil.infoOfStu[j].computer > pupil.infoOfStu[0].computer);
				j -= pace)
			{
				pupil.infoOfStu[j + pace] = pupil.infoOfStu[j];
			}
			pupil.infoOfStu[j + pace] = pupil.infoOfStu[0];
		}
	}
}

void CStudent::Sorting_english()  //快速排序
{
	QuickSort(1, pupil.numOfStu);

	Output();
}

int CStudent::Partition(int low, int high)
{
	pupil.infoOfStu[0] = pupil.infoOfStu[low];
	int key = pupil.infoOfStu[low].english;
	while (low < high)
	{
		while (low < high && pupil.infoOfStu[high].english >= key)
		{
			--high;
		}
		pupil.infoOfStu[low] = pupil.infoOfStu[high];

		while (low < high && pupil.infoOfStu[low].english <= key)
		{
			++low;
		}
		pupil.infoOfStu[high] = pupil.infoOfStu[low];
	}
	pupil.infoOfStu[low] = pupil.infoOfStu[0];

	return low;
}

void CStudent::QuickSort(int low, int high)
{
	if (low < high)
	{
		int location = Partition(low, high);
		QuickSort(low, location - 1);
		QuickSort(location + 1, high);
	}
}

void CStudent::Sorting_math()   //堆排序
{
	int i;
	for (i = pupil.numOfStu / 2; i > 0; --i)
	{
		HeapAdjust(i, pupil.numOfStu);
	}
	for (i = pupil.numOfStu; i > 1; --i)
	{
		pupil.infoOfStu[0] = pupil.infoOfStu[1];
		pupil.infoOfStu[1] = pupil.infoOfStu[i];
		pupil.infoOfStu[i] = pupil.infoOfStu[0];

		HeapAdjust(1, i - 1);
	}

	Output();
}

void CStudent::HeapAdjust(int differ, int end)
{
	pupil.infoOfStu[0] = pupil.infoOfStu[differ];
	for (int j = 2 * differ; j <= end; j *= 2)
	{
		if (j < end && pupil.infoOfStu[j].math < pupil.infoOfStu[j + 1].math)
		{
			j++;
		}
		if (pupil.infoOfStu[0].math > pupil.infoOfStu[j].math)
		{
			break;
		}
		pupil.infoOfStu[differ] = pupil.infoOfStu[j];
		differ = j;
	}
	pupil.infoOfStu[differ] = pupil.infoOfStu[0];
}

void CStudent::Output()
{
	cout<<"升许排列后的学生的成绩排名如下:\n\n";
	cout<<"姓名\t"<<"学号\t"<<"性别\t"
		<<"数学\t"<<"计算机\t"<<"语文\t"<<"英语\t"
		<<"平均成绩\t"<<"总成绩\n\n";
	for (int j = 1; j <= pupil.numOfStu; ++j)
	{
		cout<<pupil.infoOfStu[j].name<<"\t"
			<<pupil.infoOfStu[j].id<<"\t"
			<<pupil.infoOfStu[j].sex<<"\t"
			<<pupil.infoOfStu[j].math<<"\t"
			<<pupil.infoOfStu[j].computer<<"\t"
			<<pupil.infoOfStu[j].chinese<<"\t"
			<<pupil.infoOfStu[j].english<<"\t"
			<<pupil.infoOfStu[j].avescore<<"\t"
			<<pupil.infoOfStu[j].allscore<<"\n\n";
	}
	cout<<endl<<endl;
}

⌨️ 快捷键说明

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