貌似是动态内存分配出错了,大家帮忙看一下吧,谢谢
黑咖日记 2009-05-03 02:57:33 我是新手,好不容易写出来程序,结果总是运行的时候出错,大家帮忙看一下吧,谢谢
#include "stdafx.h"
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
#include<string>
using std::string;
#include<iomanip>
using std::setw;
class Class
{
private:
student *s;
int ave_c,ave_os;
int number;
int cm;
public:
void order_c();
Class();
Class(int,int);
virtual ~Class();
void operate();
void append();
void change();
void showclass();
int getnumber();
int getcm();
void setnumber(int);
void setcm(int);
void average_c();
int get_average_c();
void average_os();
int get_average_os();
};
Class::Class()
{
}
Class::Class(int num,int m)
{
s=new student[m];
number=num;
cm=m;
}
Class::~Class()
{
delete []s;
}
void Class::operate()
{
int a;
do{
cout<<"====================operate===================="<<endl
<<"请输入操作命令(1.添加记录 2.更改记录 3.显示本班记录 0.退出)";
cin>>a;
switch(a)
{
case 1:append();break;
case 2:change();break;
case 3:showclass();break;
}
}while(a!=0);
}
void Class::append()
{
char order;
for(int i=0;i<cm;i++)
{
int num,cscore,osscore;
string n;
cout<<"请输入学号:";
cin>>num;
cout<<"请输入姓名:";
cin>>n;
cout<<"请输入c语言成绩:";
cin>>cscore;
cout<<"请输入操作成绩:";
cin>>osscore;
if((*(s+i)).getnumber()==0)
{
(*(s+i)).setnumber(num);
(*(s+i)).setname(n);
(*(s+i)).setc(cscore);
(*(s+i)).setos(osscore);
// (*(s+i)).setstudent(num,n,cscore,osscore);
cout<<"继续添加信息吗?(任意键继续,n退出):"<<endl;
cin>>order;
}
if(order=='n') break;
}
}
void Class::change()
{
int i,a;
for(;i!=0;)
{
int number;
int newnumber;
string newname;
int newc;
int newos;
for(int flag=0;flag!=1;)
{
cout<<"请输入待修改信息的学号:";
cin>>number;
for(int o=0;o<cm;o++)
{
if((*(s+o)).getnumber()==number)
{flag=1;}
}
if(flag==1)
{
cout<<"请输入新学号:";
cin>>newnumber;
cout<<"请输入新姓名:";
cin>>newname;
cout<<"请输入新的数学成绩:";
cin>>newc;
cout<<"请输入新的c语言成绩:";
cin>>newos;
for(int o=0;o<cm;o++)
{
if((*(s+o)).getnumber()==number)
{
(*(s+o)).setnumber(newnumber);
(*(s+o)).setname(newname);
(*(s+o)).setc(newc);
(*(s+o)).setos(newos);
}
}
}
else cout<<"您输入了错误号码,请再次输入正确学号:"<<endl;
}
cout<<"按任意数字键继续,退出修改请按0:";
cin>>a;
if(a==0) break;
}
}
void Class::showclass()
{
cout<<".................成绩表................."
<<endl<<"学号.....姓名..........c语言成绩...操作成绩......总分"<<endl;
for(int i=0;i<cm;i++)
{
(*(s+i)).showstudent();
}
cout<<"……………………………………………………………………………………………………"<<endl;
}
void Class::average_c()
{
int t=0,i,a=0;
for(i=0;i<=cm;i++)
{
t=t+((*(s+i)).getcscore());
if((*(s+i)).getnumber()!=0) a++;
}
ave_c=t/a;
cout<<"c语言总分:"<<t<<" 总人数:"<<a<<" 平局分:"<<ave_c<<endl;
}
void Class::setcm(int m)
{
cm=m;
}
void Class::setnumber(int n)
{
number=n;
}
int Class::getnumber()
{
return number;
}
int Class::getcm()
{
return cm;
}
int Class::get_average_c()
{
return ave_c;
}
void Class::average_os()
{
int t=0,i,a=0;
for(i=0;i<=cm;i++)
{
t=t+((*(s+i)).getosscore());
if((*(s+i)).getnumber()!=0) a++;
}
ave_os=t/a;
cout<<"操作系统总分:"<<t<<" 总人数:"<<a<<" 平局分:"<<ave_os<<endl;
}
int Class::get_average_os()
{
return ave_os;
}
class grade
{
private:
Class t[3];
int gradescore;
public:
void operate();
void showgrade();
void gradetotalscore();
grade();
virtual ~grade();
};
grade::grade()
{
/* Class t1(1,3),t2(2,4),t3(3,5);
t[0]=t1;
t[1]=t2;
t[2]=t3;(不知注释部分的声明方法对不对?)*/
t[0]=Class(1,3);
t[1]=Class(2,4);
t[2]=Class(3,5);
gradescore=0;
}
grade::~grade()
{
}
void grade::showgrade()
{
int i;
for(i=0;i<3;i++)
{
t[i].showclass();
}
}
void grade::operate()
{
int i;
for(;i!=0;)
{
cout<<"请输入班级(1.一班 2.二班 3.三班 0.退出 10.显示年纪成绩):";
cin>>i;
switch(i)
{
case 1:t[0].operate();break;
case 2:t[1].operate();break;
case 3:t[2].operate();break;
case 10:showgrade();break;
}
}
}
class student
{
private:
int number;
static int m;
string name;
int c;
int os;
int total;
public:
void total_score();
int get_total_score();
student();
virtual ~student();
void setnumber(int);
void setname(string);
void setc(int);
void setos(int);
int getnumber();
string getname();
int getcscore();
int getosscore();
void showstudent();
};
student::student()
{
number=m+1;
m++;
name="...";
c=0;
os=0;
total=0;
}
student::~student()
{
}
void student::setnumber(int num)
{
number=num;
}
void student::setname(string n)
{
name=n;
}
void student::setc(int cscore)
{
c=cscore;
}
void student::setos(int osscore)
{
os=osscore;
}
int student::getnumber()
{
return number;
}
string student::getname()
{
return name;
}
int student::getcscore()
{
return c;
}
int student::getosscore()
{
return os;
}
void student::showstudent()
{
cout<<setw(3)<<number<<setw(10)<<name<<setw(19)<<c<<setw(11)<<os<<setw(10)<<total<<endl;
}
void student::total_score()
{
total=c+os;
}
int student::get_total_score()
{
return total;
}
int student::m=0;
int main(int argc, char* argv[])
{
grade g1,g2,g3,g4;
g1.showgrade();
int grade_number;
for(;grade_number!=0;)
{
cout<<"请输入年级(1.大一 2.大二 3.大三 4.大四 0.退出 10.显示全部记录):";
cin>>grade_number;
switch(grade_number)
{
case 1:g1.operate();break;
case 2:g2.operate();break;
case 3:g3.operate();break;
case 4:g4.operate();break;
case 10:g1.showgrade();g2.showgrade();g3.showgrade();g4.showgrade();break;
}
}
return 0;
}