程序中的排序功能不能实现,请高手们指教,谢谢!

xuhuan881207 2008-11-09 06:23:17
就是一个管理学生成绩的小程序,想输出排名信息,但不能实现,请高手指教.
程序如下:(可能是哪个排序的STL函数用的不太对)
#include<iostream>
#include<string>
#include<conio.h>
#include<algorithm>
#include<vector>
using namespace std;
class Student
{
private:

char name[80];
double score[3];
double summary;
public:
int id;
Student(){}
void input()
{
double sum=0;
cout<<"请输入学号:";
cin>>id;
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入成绩(数学,英语,C++):"<<endl;
for(int i=0;i!=3;++i){
cin>>score[i];
sum+=score[i];}
summary=sum;
}
bool operator <(const Student&rhs){
return this->summary<rhs.summary;
}
void print(){
cout<<"学号:"<<id<<'\t'<<"姓名:"<<name<<'\t'<<"数学"<<score[0]<<" 英语"<<score[1]<<" C++"<<score[2]<<'\t'<<"总分"<<summary<<endl;
}
};
vector<Student> v;
Student s[100];
void found(int d,int i)
{
while((s[i].id-d)!=0&&i!=v.size())
i++;
if(i==v.size())
cout<<"对不起,没有所需信息"<<endl;
else s[i].print();
}
int main()
{
int x;
while(true)
{
system("cls");
cout<<"请选择操作类型:"<<'\n'
<<"1.输入学生信息\n"<<"2.查询学生信息\n"<<"3.排名信息\n"<<"0.退出系统"<<endl;
cin>>x;
system("cls");
switch(x)
{
case 1:{
char p='y';
int n=0;
while(p=='y'){
s[n].input();
s[n].print();
v.push_back(*s);
n++;
cout<<"是否继续?(y/n)"<<endl;
cin>>p;
}
if(p=='n'){
cout<<"任意键返回"<<endl;
_getch();
continue;}
break;
}
case 2:{
int d,i=0;
char q='y';
while(q=='y'){
cout<<"输入所查学生的学号:";
cin>>d;
found(d,i);
cout<<"是否继续?(y/n)"<<endl;
cin>>q;
}
if(q=='n'){
cout<<"任意键返回"<<endl;
_getch();
continue;}
break;
}
case 3:{
system("cls");
sort(v.begin(),v.end());
for(int i=0;i<=v.size();i++)
s[i].print();
cout<<"任意键返回"<<endl;
_getch();
continue;
break;
}
case 0:{
cout<<"谢谢使用学生管理系统"<<endl;
break;
}
}
}
}






...全文
81 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
西园软件 2008-11-09
  • 打赏
  • 举报
回复
觉得主要是你对vector理解错了.

我也是第一次看到这个vector,初步查了一下资料,这个vector是一个类模板.

当你使用vector <Student> v;的时候,就是定义一个类变量了(我习惯把对象称为类变量)

这个v,就是管理类Student的对象的.它事实上是一个顺序的,大小可变的数组,它的数据就是你定义时的Student类变量.

先把你的程序改好后给你看看吧:


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

class Student
{
private:
char name[80];
double score[3];
double summary;
public:
int id;
Student(){}
void input()
{
double sum=0;
cout<<"请输入学号:";
cin>>id;
cout<<"请输入姓名:";
cin>>name;
cout<<"请输入成绩(数学,英语,C++):"<<endl;
for(int i=0;i!=3;++i)
{
cin>>score[i];
sum+=score[i];}
summary=sum;
}
bool operator <(const Student& rhs)
{
return this->summary <rhs.summary;
}
void print()
{
cout<<"学号:"<<id<<'\t'<<"姓名:"<<name<<'\t'<<"数学"<<score[0]<<" 英语"<<score[1]<<" C++"<<score[2]<<'\t'<<"总分"<<summary<<endl;
}
};

vector <Student> v;
Student s;

void found(int d)
{
int i=0;
while((v[i].id-d)!=0&&i!=v.size())
i++;
if(i==v.size())
cout<<"对不起,没有所需信息"<<endl;
else
v[i].print();
}


int main()
{
int x;
while(true)
{
system("cls");
cout<<"请选择操作类型:" <<'\n'<<"1.输入学生信息\n" <<"2.查询学生信息\n" <<"3.排名信息\n"<<"0.退出系统" <<endl;
cin>>x;
system("cls");
switch(x)
{
case 1:
{
char p='y';
int n=0;
while(p=='y')
{
s.input();
s.print();
v.push_back(s);
n++;
cout<<"是否继续?(y/n)"<<endl;
cin>>p;
}
if(p=='n')
{
cout <<"任意键返回" <<endl;
_getch();
continue;
}
break;
}
case 2:
{
int d;
char q='y';
while(q=='y')
{
cout<<"输入所查学生的学号:";
cin>>d;
found(d);
cout <<"是否继续?(y/n)" <<endl;
cin>>q;
}

if(q=='n')
{
cout<<"任意键返回"<<endl;
_getch();
continue;
}

break;
}

case 3:
{
system("cls");
sort(v.begin(),v.end());
for(int i=0;i <v.size();i++)
v[i].print();
cout<<"任意键返回" <<endl;
_getch();
continue;
break;
}
case 0:
{
cout <<"谢谢使用学生管理系统"<<endl;
return 0;
}

}

}
return 0;

}

lzp765 2008-11-09
  • 打赏
  • 举报
回复
up~~

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧