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