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