最近,笔者做了一个有趣的练习,在这里分享一下。
#include <iostream>
#include <cstring>
using namespace std;
int number = -1;
class student
{
public :
student(){}
student(unsigned int id,int score,char name[20])
{
this->id = id;
strcpy(this->name,name);
this->score = score;
}
friend void printout(int number,student *p);
friend bool cmpid(unsigned int id,int number,student *p);
friend void searchid(unsigned int id,int number,student *p);
friend void searchname(char search_name[],int number,student *p);
friend void idsort(int number,student *p);
friend void scoresort(int number,student *p);
void printout();
private:
unsigned int id;
char name[20];
int score;
};
void student::printout()
{
cout << id << ' ' << name << ' ' << score << endl;
}
void printout(int number,student *p);
bool cmpid(unsigned int id,int number,student *p);
void searchid(unsigned int id,int number,student *p);
void searchname(char search_name[],int number,student *p);
void idsort(int number,student *p);
void scoresort(int number,student *p);
int main()
{
student *p = new student[10000];
student *p2 = new student[10000];
student *p1 = new student[10000];
unsigned int id = 0;
int score = 0,judge_number = 0;
char name[20];
bool flag = 0;
while(!flag)
{
cin >> judge_number;
switch(judge_number)
{
case 1:
{
bool flag2 = 0;
cin >> id >> name >> score;
flag2 = cmpid(id,number,&p[0]);
if(flag2) break;
number++;
student temp(id,score,name);
p[number] = temp;
p1[number] = temp;
p2[number] = temp;
cout << "SUCCESS" << endl;
break;
}
case 2:
{
printout(number,&p[0]);
break;
}
case 3:
{
unsigned int search_id = 0;
cin >> search_id;
searchid(search_id,number,&p[0]);
break;
}
case 4:
{
char search_name[20];
cin >> search_name;
searchname(search_name,number,&p[0]);
break;
}
case 5:
{
idsort(number,&p1[0]);
break;
}
case 6:
{
scoresort(number,&p2[0]);
break;
}
case 7:
{
cout << "END"; flag = 1;
break;
}
}
}
delete []p;
p = 0;
delete []p1;
delete []p2;
p1 = 0;
p2 = 0;
return 0;
}
void printout(int number,student *p)
{
for(int i = 0;i <= number;i++)
{
if(number == -1) return ;
else p[i].printout();
}
return ;
}
bool cmpid(unsigned int id,int number,student *p)
{
for(int i = 0;i <= number;i++)
{
if(number == -1) return 0;
if(p[i].id == id)
{
cout << "FAILED\n";
return 1;
}
}
return 0;
}
void searchid(unsigned int id,int number,student *p)
{
if(number == -1) return;
for(int i = 0;i <= number;i++)
{
if(p[i].id == id)
{
p[i].printout();
}
}
}
void searchname(char search_name[],int number,student *p)
{
if(number == -1) return;
int judge = 0;
for(int i = 0;i <= number;i++)
{
judge = strcmp(search_name,p[i].name);
if(judge == 0)
{
p[i].printout();
return ;
}
}
}
void idsort(int number,student *p){
for(int i = 1;i <= number;i++){
for(int j = 0;j <= number-i;j++){
student temp = p[j];
if(p[j].id > p[j+1].id){
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
printout(number,&p[0]);
}
void scoresort(int number,student *p)
{
for(int i = 1;i <= number;i++){
for(int j = 0;j <= number-i;j++){
student temp = p[j];
if(p[j].score < p[j+1].score){
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
printout(number,&p[0]);
}