下面是源代码
#include <iostream>
#include <fstream>//标准文件输入输出流class
#include <sstream>//文件的分支
#include <cstring>//字符串
#include <iomanip>//操纵运算子
const int number=100;
using namespace std;
void menu(){//自定义一个函数,来查询信息
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n";
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n";
cout<<" *欢迎来到学生信息管理系统* \n";
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n";
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n";
cout<<"输入0,退出系统"<<endl;
cout<<"输入1,输出每个学生的总成绩、平均成绩,所有学生单科的平均成绩,找出总成绩和单科成绩最高的学生,学生的绩点;"<<endl;
cout<<"输入2,则根据学号查询某个同学的成绩"<<endl;
cout<<"输入3,根据名字查询某个同学的成绩"<<endl;
cout<<"输入4,各科成绩的排序及绩点排序"<<endl;
cout<<"输入5,按照学号删除该学生的成绩"<<endl;
cout<<"输入6,按照姓名删除该学生的成绩"<<endl;
cout<<"输入7,按照成绩绩点评定奖学金"<<endl;
cout<<"输入8, 按照三好生评定办法,输出获得三好生的学生名单"<<endl;
}
class Students{//定义一个学生类
public: //输入公有信息:学号,姓名,性别,地址,VC,英语,体育,德育的信息
string xh;
string name;
string sex;
string address;
double Vc;
double English;
double Maths;
double PE;
double Dy;
double sum;
double average;
double point;
double JD;
void sortjd();
Students test(string path);
// 1.计算:每个学生的总成绩、平均成绩,所有学生单科的平均成绩,找出总成绩和单科成绩最高的学生,学生的绩点并输出;
void calculate(Students student[],int n){
double Vcaverage=0;
double Mathsaverage=0;
double Englishaverage=0;
double VcMax=0;
double MathsMax=0;
double EnglishMax=0;
double sumMax=0;
for(int i=0;i<n;i++){
cout<<student[i].name<<"同学的Vc成绩:"<<student[i].Vc<<"同学的Maths成绩:"<<student[i].Maths
<<"同学的English成绩:"<<student[i].English<<endl;
cout<<student[i].name<<"同学的PE成绩:"<<student[i].PE<<"同学的德育成绩:"<<student[i].Dy<<endl;
cout<<student[i].name<<"同学的总成绩:"<<student[i].sum<<endl;
cout<<student[i].name<<"同学的平均成绩:"<<student[i].average<<endl;
cout<<student[i].name<<"同学的学分绩点为:"<<student[i].point<<endl;
//以下是求单科平均成绩
Vcaverage+=student[i].Vc;
Mathsaverage+=student[i].Maths;
Englishaverage+=student[i].English;
//以下是寻找单科最大值
if(student[i].Vc>=VcMax){
VcMax=student[i].Vc;
}
if(student[i].Maths>=MathsMax){
MathsMax=student[i].Maths;
}
if(student[i].English>=EnglishMax){
EnglishMax=student[i].English;
}
if(student[i].sum>=sumMax){
sumMax=student[i].sum;
}
}
cout<<"所有学生的Vc平均成绩:"<<Vcaverage/n<<"所有学生的Maths平均成绩:"
<<Mathsaverage/n<<"所有的学生English平均成绩:"<<Englishaverage/n<<endl;
//下面是输出单科成绩最高的同学及其分数
for( i=0;i<n;i++){
if(VcMax==student[i].Vc){
cout<<"Vc最高的同学:"<<student[i].name<<" "<<VcMax<<endl;
}
if(MathsMax==student[i].Maths){
cout<<"Maths最高的同学:"<<student[i].name<<" "<<MathsMax<<endl;
}
if(EnglishMax==student[i].English){
cout<<"English最高的同学:"<<student[i].name<<" "<<EnglishMax<<endl;
}
if(sumMax==student[i].sum){
cout<<"总分最高的同学:"<<student[i].name<<" "<<sumMax<<endl;
}
}
}
//2.根据学号查询某个同学的成绩
void inquirexh(Students student[],int n,string xh){
int num=0;
for(int i=0;i<n;i++){
if(xh==student[i].xh){
cout<<student[i].name<<"同学的vc成绩:"<<student[i].Vc
<<"Maths成绩:"<<student[i].Maths
<<"English成绩:"<<student[i].English
<<"同学的PE成绩:"<<student[i].PE
<<"同学的德育成绩:"<<student[i].Dy<<endl;
num++;
}
}
if(num==0){
cout<<"没有"<<endl;
}
}
//3.根据名字查询某个同学的成绩
void inquirename(Students student[],int n,string name){
int num=0;
for(int i=0;i<n;i++){
if(name==student[i].name){
cout<<student[i].name<<":"<<"同学的vc成绩"<<student[i].Vc<<"同学的Maths成绩"<<student[i].Maths<<"同学的English成绩1"<<student[i].English<<endl;
num++;
}
}
if(num==0){
cout<<"没有"<<endl;
}
}
//4.排序
void SortAll(double a[],int n){
for(int i=0;i<n;i++){
for(int j=0;j<n-i;j++){
if(a[j]<a[j+1]){
double temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
void Vcsort(Students student[],int n){
double Avc[number];
for( int i=0;i<n;i++){
Avc[i]=student[i].Vc;
}
SortAll(Avc,n);
cout<<"所有学生的Vc排名为:"<<endl;
//找值输出
for( i=0;i<n;i++){
for(int j=0;j<n;j++){
if(Avc[i]==student[j].Vc){
cout<<student[j].name<<" "<<student[j].Vc<<endl;
}
}
}
}
void Mathssort(Students student[],int n){
double AMaths[number];
for( int i=0;i<n;i++){
AMaths[i]=student[i].Maths;
}
SortAll(AMaths,n);
cout<<"所有同学的Maths排名为:"<<endl;
//找值输出
for( i=0;i<n;i++){
for(int j=0;j<n;j++){
if(AMaths[i]==student[j].Maths){
cout<<student[j].name<<" "<<student[j].Maths<<endl;
}
}
}
}
void Englishsort(Students student[],int n){
double AEnglish[number];
for(int i=0;i<n;i++){
AEnglish[i]=student[i].English;
}
SortAll(AEnglish,n);
cout<<"所有学生的英语排名为:"<<endl;
//找值输出
for( i=0;i<n;i++){
for(int j=0;j<n;j++){
if(AEnglish[i]==student[j].English){
cout<<student[j].name<<" "<<student[j].English<<endl;
}
}
}
}
void JDsort(Students student[],int n){
double AJD[number];
for(int i=0;i<n;i++){
AJD[i]=student[i].point;
}
SortAll(AJD,n);
cout<<"所有学生的绩点排名为:"<<endl;
//找值输出
for( i=0;i<n;i++){
for(int j=0;j<n;j++){
if(AJD[i]==student[j].point){
cout<<student[j].name<<" "<<student[j].point<<endl;
}
}
}
}
void sumsort(Students student[],int n){
double Asum[number];
for( int i=0;i<n;i++){
Asum[i]=student[i].sum;
}
SortAll(Asum,n);
cout<<"所有学生的总分排名为:"<<endl;
//找值输出
for( i=0;i<n;i++){
for(int j=0;j<n;j++){
if(Asum[i]==student[j].sum){
cout<<student[j].name<<" "<<student[j].sum<<endl;
}
}
}
}
void pointsort(Students student[],int n){
cout<<"学生的姓名、平均绩点为:\n";
for(int i=0;i<n-1;i++)
for(int j=j+1;j<n;j++)
if(student[i].point<student[j].point){double k=student[i].point;student[i].point=student[j].point;student[j].point=k;}
for(i=0;i<n;i++)
cout<<student[i].name<<" 、"<<student[i].point<<endl;
}
//5.按照学号删除
void DeleteId(Students student[],int n,string xh){
int j=-1; //记录删除的下标
for(int i = 0;i< n;i++){
if(xh==student[i].xh){
j=i;
for(int t=j;j<n;j++){
student[t]=student[t+1];
}
break;
}
}
if(j==-1){
cout<<"查无此人,删除失败!"<<endl;
}
else{
cout<<"删除成功"<<endl;
}
}
//6.按照姓名删除 其他删除方式一样,只需要修改参数列表以及函数里面的对应数据就可
void DeleteName(Students student[],int n,string name){
int j=-1; //记录删除的下标
for(int i = 0;i< n;i++){
if(name==student[i].name){
j=i;
for(int t=j;j<n;j++){
student[t]=student[t+1];
}
break;
}
}
if(j==-1){
cout<<"查无此人,删除失败!"<<endl;
}else{
cout<<"删除成功 "<<endl;
}
}
//7.评定奖学金
void pdjxj(Students student[],int n){
for(int i=0;i<n;i++){
if(student[i].point>=4.0&&student[i].PE>=70){
cout<<student[i].name<<"同学的总成绩为:"<<" "<<student[i].sum<<" "<<"学生的绩点:"<<student[i].point<<" "<<"特等奖"<<endl;
}
else
if(student[i].point>=3.6&&student[i].PE>=70){
cout<<student[i].name<<"同学的总成绩为:"<<" "<<student[i].sum<<" "<<"学生的绩点:"<<student[i].point<<" "<<"一等奖学金"<<endl;
}
else
if(student[i].point>=3.2&&student[i].PE>=70){
cout<<student[i].name<<"同学的总成绩为:"<<" "<<student[i].sum<<" "<<"学生的绩点:"<<student[i].point<<" "<<"二等奖学金"<<endl;
}
else
if(student[i].point>=2.8&&student[i].PE>=60){
cout<<student[i].name<<"同学的总成绩为:"<<" "<<student[i].sum<<" "<<"学生的绩点:"<<student[i].point<<" "<<"三等奖学金"<<endl;
}
/*else{
cout<<"没有奖学金"<<endl;
} */
}
}
//8.评定三好学生
void pdshxs(Students student[],int n){
for(int i=0;i<n;i++){
if(student[i].point>=2.8&&student[i].Vc>=60&&student[i].English>=60&&student[i].Maths>=60){
cout<<student[i].name<<"被评为三好学生"<<endl;
}
}
}
};
int main(){
Students *p=new Students[100];
int n=0;
char path0[12];
string path = "信管2班.txt";
strcpy(path0,path.c_str());
ifstream infile(path0,ios::in);
if(!infile){
cerr<<"open error!"<<endl;
exit(-1);
}
string line="";
while(getline(infile,line)){
istringstream ss(line);
ss>>p[n].xh;
ss>>p[n].name;
ss>>p[n].sex;
ss>>p[n].address;
ss>>p[n].Vc;
ss>>p[n].Maths;
ss>>p[n].English;
ss>>p[n].PE;
ss>>p[n].Dy;
n++;
}
double GainsVc;
double GainsMaths;
double GainsEnglish;
for(int i=0;i<n;i++){
p[i].sum=p[i].Vc+p[i].Maths+p[i].English;
p[i].average=(p[i].Vc+p[i].Maths+p[i].English)/3;
if(p[i].Vc<60){
GainsVc=0;
}
else{
GainsVc=p[i].Vc/10-5;
}
if(p[i].Maths<60){
GainsMaths=0;
}
else{
GainsMaths=p[i].Maths/10-5;
}
if(p[i].English<60){
GainsEnglish=0;
}
else{
GainsEnglish=p[i].English/10-5;
}
p[i].point=(GainsVc+GainsMaths+GainsEnglish)/3;
}
menu();
cout<<"请输入选择的序号:";
int k;
Students s;
while(cin>>k){
if(k==0)
exit(0);
if(k==1){
s.calculate(p,n);
menu();
cout<<"请输入选择的序号:";
}
if(k==2){
cout<<"请输入你要查询的学号:";
string xh;
cin>>xh;
s.inquirexh(p,n,xh);
menu();
cout<<"请输入选择的序号:";
}
if(k==3){
cout<<"请输入你要查询的名字:";
string name;
cin>>name;
s.inquirename(p,n,name);
menu();
cout<<"请输入选择的序号:";
}
if(k==4){
s.Vcsort(p,n);
s.Mathssort(p,n);
s.Englishsort(p,n);
s.sumsort(p,n);
s.JDsort(p,n);
menu();
cout<<"请输入选择的序号:";
}
if(k==5){
cout<<"输入想要删除的同学的学号:"<<endl;
string xh;
cin>>xh;
s.DeleteId(p,n,xh);
n--;
menu();
cout<<"请输入选择的序号:";
}
if(k==6){
cout<<"请输入删除同学的名字:";
string name;
cin>>name;
s.DeleteName(p,n,name);
menu();
cout<<"请输入选择的序号:";
}
if(k==7){
s.pdjxj(p,n);
menu();
cout<<"请输入选择的序号:";
}
if(k==8){
s.pdshxs(p,n);
menu();
cout<<"请输入选择的序号:";
}
}
return 0;
}
这是运行截图
你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。
您可以点击问题下方的【编辑】,进行补充修改问题。