C++ 学生成绩管理系统解决方法

C++ 学生成绩管理系统#includeiostream#includestring#includefstreamusing namespace stdclass st

C++ 学生成绩管理系统
#include<iostream>

#include<string> 

#include<fstream> 

using namespace std;
class student

{protected:

int number;char name[30],address[30];double match,english,computer,total,sum;

public:

student(){}

student(char na[30],char ad[30],double ma,double eng,double com,int num)

{

strcpy(name,na);

strcpy(address,ad);

match=ma;

english=eng;

computer=com;

number=num;

}

double getsum()

{

sum=match+english+computer;

return sum;

}


friend void main(); //定义友员主函数

}; 

void main() //主函数




cout<<"请选择您需要的操作!"<<endl; 

cout<<"操作:"<<endl; 

cout<<"1、输入/添加学生资料"<<endl; 

cout<<"2、显示学生资料"<<endl; 

cout<<"3、按学号查找"<<endl; 

cout<<"4、删除记录"<<endl; 

cout<<"5、按总分进行排序"<<endl; 

cout<<"6、退出"<<endl; 

cout<<"请选择相关操作请输入相对的括号里的数字!"<<endl; 

char p;char w; student *s[50]; ofstream *file[50]; int i=0; int j=0; 

bool flag2=0; 

do 



cin>>p; 

if((p>='0'&&p<='10')) 

flag2=1; 

else 

cout<<"指令错误!请重新输入:"<<endl; 

}while(flag2==0); 

do{ 

switch(p) 



case '1':



char ch; char name[30],address[30];double match,english,computer;int number;


do



cout<<"请输入学生的姓名"<<endl;

cin>>name;

cout<<"请输入学生的学号"<<endl;

cin>>number;

cout<<"请输入学生的地址"<<endl;

cin>>address;

cout<<"请输入学生的高数成绩"<<endl;

cin>>match;

cout<<"请输入学生的英语成绩"<<endl;

cin>>english; 

cout<<"请输入学生的计算机成绩"<<endl;

cin>>computer;


file[j]=new ofstream("d:\\lixiao",ios::ate); 

*file[j]<<"name="<<name<<"math="<<match<<"english="<<english<<"computer="<<computer<<endl; 

j++; 

s[i]=new student(name,address, match,english,computer,number); 

i++; 

cout<<"数据录入成功,想继续录入吗(y/n)"<<endl; 

cin>>ch; 

flag2=0; 

do 



if(ch!='y'&&ch!='n') 



cout<<"指令错误!请重新输入!"<<endl; 

cin>>ch; 



else 

flag2=1; 

}while(flag2==0); 

}while(ch=='y'); 

break; 



case '2': 



cout<<"本系统所有学生数据如下:"<<endl; 

if(i==0) 

cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl; 

for(int k=0;k<i;k++) 



cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<< "学号:"<<" "<<s[k]->number<<"地址:"<<" "<<s[k]->address <<"高数:"<<" "<<s[k]->match<<"英语:"<<" "<<(*s[k]->english<<"计算机:"<<""<<s[k]->computer) <<endl; 





break; 

}
case '3':



double t;char ch; 

do 



int flag1=0; 

cout<<"请输入你要查询学生的学号"<<endl; 

cin>>t; 

for(int q=0;q<i;q++) 



if(s[q]->number()==t) 



flag1=1; 

cout<<"您要查询的学生是:"<<(*s[q]).name<<endl; 





if(flag1==0) 

cout<<"对不起!您要查询的学生不存在!"<<endl; 

cout<<"您想继续查询吗?(y/n)"<<endl; 

cin>>ch; 

if(ch!='y'&&ch!='n') 



cout<<"指令错误!请重新输入!"<<endl; 

cin>>ch; 





while(ch=='y'); 

break; 



case '4': //删除数据



char name[20];bool flag3=0;char ch; 

do



cout<<"请输入您要删除的学生姓名:"<<endl; 

cin>>name; 

for(int h=0;h<i;h++) 



if(strcmp(name,s[h]->name)==0) 



flag3=1; 

i--; 

do



s[h]=s[h+1]; 

h++; 

}while(h<=i); 





if(flag3==0) 

cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!"; 

cout<<"要继续删除吗?(y/n)"<<endl; 

cin>>ch; 

if(ch!='y'&&ch!='n') 



cout<<"指令错误!请重新输入!"<<endl; 

cin>>ch; 



}while(ch=='y'); 

break; 



case '5':



int t;student b; 

cout<<"本系统所有学生排名如下:"<<endl; 

for(int x=0;x<i-1;x++) 



t=x; 

for(int y=x+1;y<i;y++) 



if((s[t]->getsum())<(s[y]->getsum())) 

t=y; 

if(t!=x) 



b=*s[x]; *s[x]=*s[t]; *s[t]=b; 







if(i==0) 

cout<<"管理系统中没有录入数据或者数据已经被删除!"; 

for(int k=0;k<i;k++) 



cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<< "学号:"<<" "<<s[k]->number<<"地址:"<<" "<<s[k]->address <<"高数:"<<" "<<s[k]->match<<"英语:"<<" "<<s[k]->english<<"计算机:"<<" "<<s[k]->computer<<endl; 



break; 



case '6':

return;

}

cout<<"您想继续进行其他操作吗?(y/n)"<<endl; 

bool flag4=0; 

do 



cin>>w; 

if(w!='y'&&w!='n') 

cout<<"指令错误!请重新输入!"<<endl; 

else 

flag4=1; 

}while(flag4==0); 

if(w=='y') 

cout<<"请输入操作代码1、 输入/添加学生资料/2、显示学生资料/3、按学号查找/4、删除记录/5、按总分进行排序/6、退出)"<<endl; 

cin>>p; 

}while(w=='y');

}


编译的时候4个错误 

如图 请问怎么改谢谢

cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<< "学号:"<<" "<<s[k]->number<<"地址:"<<" "<<s[k]->address <<"高数:"<<" "<<s[k]->match<<"英语:"<<" "<<s[k]->english<<"计算机:"<<" "<<s[k]->computer<<endl; 


这里有错的


for(int q=0;q<i;q++) 



if(s[q]->number()==t) 



flag1=1; 

cout<<"您要查询的学生是:"<<(*s[q]).name<<endl; 





这里有错的

谢谢

[解决办法]
friend void main(); //定义友员主函数 ???

可以这样的吗?

另外 楼主你为什么每一句空一行呢 看起来代码量少好多
[解决办法]
楼主啊,论坛发贴的时候有个标签,名字叫“插入源代码”......
[解决办法]
你太不细心了。。。
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name<< "学号:"<<" "<<s[k]->number<<"地址:"<<" "<<s[k]->address <<"高数:"<<" "<<s[k]->match<<"英语:"<<" "<<(*s[k]->english<<"计算机:"<<""<<s[k]->computer) <<endl;中多了两个括号和一个*
应去掉 

第二个错误也是多了一对括号:if(s[q]->number()==t)
应改为if(s[q]->number==t)

这就OK了
[解决办法]
建议楼主用用string别用字符数组
[解决办法]
楼主代码写的好乱,这个习惯有待改进;
楼主对友元函数理解不错,如果没有那句友元函数声明,这个程序就完全通过不了编译了。。