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

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;
}
}
}
}






...全文
80 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~~
内容概要:本文系统研究了构网型变流器的正负序阻抗解耦特性及其在弱电网环境下的稳定性表现,重点依托Matlab/Simulink仿真平台,构建了详细的阻抗数学模型,设计了解耦控制策略,并采用小信号扫频法进行频域辨识与稳定性验证。研究深入探讨了构网型变流器与传统跟网型逆变器在正负序阻抗特性上的本质差异,结合虚拟同步发电机(VSG)等先进控制技术,分析其在抑制宽频带振荡、削弱锁相环动态耦合等方面的优越性。文不仅提供了完整的仿真模型与MATLAB代码实现,还整合了光伏、风电、储能、微电网等多类新能源系统的阻抗建模与稳定性分析资源,形成了一套面向新型电力系统稳定性的综合性技术资料体系,具有较强的科研复现与工程参考价值。; 适合人群:面向具备电力电子、电力系统自动化、新能源并网等专业背景的研究生、高校教师及工程技术人员,特别适用于从事阻抗建模、小干扰稳定性分析、宽频振荡机理研究以及撰写高水平学术论文的科研工作者。; 使用场景及目标:①掌握构网型变流器正负序阻抗建模与扫频辨识的仿真方法;②深入理解VSG等构网型控制在弱电网提升稳定性的内在机理;③复现顶刊论文的阻抗分析流程与稳定性判据应用;④利用提供的成熟模型与代码加速科研进程,支撑课题研究与学术成果产出。; 阅读建议:建议结合文提供的Simulink模型与MATLAB代码,按照“理论建模—仿真搭建—扫频激励—频响提取—Nyquist判据分析”的完整流程进行实践操作,重点关注扫频信号的注入方式、频率范围设置及阻抗曲线的物理意义解读,并参考博士论文复现案例深化对复杂动态耦合问题的理解。

65,211

社区成员

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

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