在做老师给的作业,遇到了问题,各位高人给指点一下?
1.编写一个学生成绩登记程序,每个学生每学期有三门课,将学生名、学号和三门成绩存放在一个学生类中,实现以下要求:
(1)录入学生信息以及学生成绩;
(2)输出学生数据,输出所有学生;
(3)显示单个学生各成绩
(4)计算全班每门课的平均成绩,以及班级的总人数。
(5)根据姓名来查找某个学生的信息
(6)根据学号删除某个学生
(7)对所有学生依据个人总成绩排序
自已写的:
#include <iostream.h>
class student_info
{
int pid []; //学号
char name []; //姓名
float guard [] [4]; //成绩,第一个[]为学生的标号,与pid[],和name[]想对;第二个 []的0-2放3门成绩就是:guard[][0],guard[][1],guard[2];而guard [][3]为汇总
int count; //总人
int select; //存放选择
public:
void select_ui(void ) //选择
{
cout<< "\t you select num 1-7"<<endl;
cout << "1. input student infortion"<<endl;
cout << "2. output student infortion"<<endl;
cout << "3. display one student of guard"<<endl;
cout << "4. aver guard and countstudent"<<endl;
cout << "5. find infortaion by name "<< endl;
cout << "6. del student by pid "<<endl;
cout << "7. sort by countguard"<<endl;
cout << "8.exit "<<endl;
cin>>select;
}
void input(void) //录入学生信息以及学生成绩
{
int i,j;
cout << "if you input 0 ,input exit"<<endl;
for ( i = 0; pid [i] !=0 || name [i] != 0 ;i++)
{
cout << "input student pid: "<<endl;
cin >> pid[i];
cout << "input student name :" <<endl;
cin >> name [i];
for ( j = 0; j < 3 ; j++)
{
cout <<" input "<< j+1 << "guard: " <<endl;
cin >>guard [i][j];
}
}
count=i;
}
void output(void) //输出学生数据,输出所有学生
{
int i,j;
for ( i = 0; i <count ;i++)
{
cout << "student pid :"<< pid [i] <<endl;
cout << "student name :"<< name [i] <<endl;
for ( j =0; j<3 ;j++)
{
cout << "student guard: "<< j+1<<guard [i][j]<<endl;
}
}
}
void signalguard(void) //(3)显示单个学生各成绩
{
int i,j;
for ( i = 0 ; i <= count ; i++)
{
cout <<"student name :"<< name [i]<<endl;
for ( j = 0 ; j < 3 ; j++)
{
count <<"student guard is "<<guard [i][j]<<endl;
}
}
}
void averguard(void) //计算全班每门课的平均成绩,以及班级的总人数
{
int i,j;
for ( j=0 ;j<3;j++)
{
float sum,aver;
for ( i =0; i<=count;i++)
{
sum =0;
sum+=guard[i][j] ;
}
aver = sum/count;
count<< j+1 <<" aver guard:"<<aver<<endl;
}
count << "myclass conut is :" <<count <<endl;
}
void find_name(void) //根据姓名来查找某个学生的信息
{
int i;
char name;
count<<"input find name "<<endl;
cin >>name;
for ( i =0; name[i] != name ;i++)
;
if (i >count)
count << "myclass no this name "<<endl;
else
{
count<<"this student name:"<<name[i]<< " this stdent pid :"<<pid[i]<<endl;
count<< "this student guard :" << "one "<<guard [i][0]<<" two"<<guard [i][1]<< " three " <<guard [i][2]<<endl;
}
}
void del_pid(void) //根据学号删除某个学生
{
int pid,i ;
count <<"input del pid :"<<endl;
cin>> pid;
for ( i =0; fid[i] != pid; i++)
;
if ( i > count)
count<< "errr :no this pid"<<endl;
else
{
pid[i]=0 ;
name[i]= null;
guard[i][0]= 0;
guard [i][1]=0;
guard [i][2]=0;
}
}
void sort(void) //对所有学生依据个人总成绩排序冒泡法
{
int i,j;
float temp;
for ( i=0 ;i<=count;i++)
for ( j=0;j<3; j++)
guard[i][3] += guard[i][j];
for (i=0;i<=count;i++)
for (j = i+1;j<=count;j++)
{
if (guard[i][3] > guard [j][3])
{
temp = guard[i][3];
guard[i][3] = guard [j][3];
guard[j][3] = temp;
}
}
}
};
void main ()
{
int select;
student_info s1;
s1.select_ui();
select = s1.select;
switch (select)
{
case '1': s1.input();break;
case '2': s1.output();break;
case '3': s1.signalguard();break;
case '4': s1.averguard();break;
case '5': s1.find_name();break;
case '6': s1.del_pid();break;
case '7': s1.sort();break;
case '8': return;
}
}
出现的错误:'stuent_info ::select' is not accessible .
我在类中设的select变量不能访问,是private私有有的,当我用public 定义时,还不可以。
刚开始学,那位过来人给俺指点一下。thank you
同时,能否指点一下如何学C++?
问题点数:20、回复次数:11Top
1 楼microhard(Befree)回复于 2004-12-03 00:35:11 得分 2
你再试一下,把select 变为public应该可以的Top
2 楼wwxsoft(婉儿)回复于 2004-12-03 08:49:08 得分 0
作业还是自己做比较好,认真检查,会找到错误得
Top
3 楼alanzhu(爱的逃兵)回复于 2004-12-03 09:54:43 得分 10
编译成功版
#include <iostream.h>
class student_info
{
int pid [50]; //ѧºÅ
char name [50]; //ÐÕÃû
float guard [50] [4]; //³É¼¨£¬µÚÒ»¸ö[]ΪѧÉúµÄ±êºÅ,Óëpid[],ºÍname[]Ïë¶Ô£»µÚ¶þ¸ö []µÄ0-2·Å3Ãųɼ¨¾ÍÊÇ£ºguard[][0],guard[][1],guard[2];¶øguard [][3]Ϊ»ã×Ü
int count; //×ÜÈË
public:
int select; //´æ·ÅÑ¡Ôñ
void select_ui(void ) //Ñ¡Ôñ
{
cout<< "\t you select num 1-7"<<endl;
cout << "1. input student infortion"<<endl;
cout << "2. output student infortion"<<endl;
cout << "3. display one student of guard"<<endl;
cout << "4. aver guard and countstudent"<<endl;
cout << "5. find infortaion by name "<< endl;
cout << "6. del student by pid "<<endl;
cout << "7. sort by countguard"<<endl;
cout << "8.exit "<<endl;
cin>>select;
}
void input(void) //¼ÈëѧÉúÐÅÏ¢ÒÔ¼°Ñ§Éú³É¼¨
{
int i,j;
cout << "if you input 0 ,input exit"<<endl;
for ( i = 0; pid [i] !=0 || name [i] != 0 ;i++)
{
cout << "input student pid: "<<endl;
cin >> pid[i];
cout << "input student name :" <<endl;
cin >> name [i];
for ( j = 0; j < 3 ; j++)
{
cout <<" input "<< j+1 << "guard: " <<endl;
cin >>guard [i][j];
}
}
count=i;
}
void output(void) //Êä³öѧÉúÊý¾Ý£¬Êä³öËùÓÐѧÉú
{
int i,j;
for ( i = 0; i <count ;i++)
{
cout << "student pid :"<< pid [i] <<endl;
cout << "student name :"<< name [i] <<endl;
for ( j =0; j<3 ;j++)
{
cout << "student guard: "<< j+1<<guard [i][j]<<endl;
}
}
}
void signalguard(void) //£¨3£©ÏÔʾµ¥¸öѧÉú¸÷³É¼¨
{
int i,j;
for ( i = 0 ; i <= count ; i++)
{
cout <<"student name :"<< name [i]<<endl;
for ( j = 0 ; j < 3 ; j++)
{
cout <<"student guard is "<<guard [i][j]<<endl;
}
}
}
void averguard(void) //¼ÆËãÈ«°àÿÃÅ¿ÎµÄÆ½¾ù³É¼¨£¬ÒÔ¼°°à¼¶µÄ×ÜÈËÊý
{
int i,j;
for ( j=0 ;j<3;j++)
{
float sum,aver;
for ( i =0; i<=count;i++)
{
sum =0;
sum+=guard[i][j] ;
}
aver = sum/count;
cout<< j+1 <<" aver guard:"<<aver<<endl;
}
cout << "myclass conut is :" <<count <<endl;
}
void find_name(void) //¸ù¾ÝÐÕÃûÀ´²éÕÒij¸öѧÉúµÄÐÅÏ¢
{
int i;
char tname;
cout<<"input find name "<<endl;
cin >>tname;
for ( i =0; name[i] != tname ;i++)
;
if (i >count)
cout << "myclass no this name "<<endl;
else
{
cout<<"this student name:"<<name[i]<< " this stdent pid :"<<pid[i]<<endl;
cout<< "this student guard :" << "one "<<guard [i][0]<<" two"<<guard [i][1]<< " three " <<guard [i][2]<<endl;
}
}
void del_pid(void) //¸ù¾ÝѧºÅɾ³ýij¸öѧÉú
{
int fid,i ;
cout <<"input del pid :"<<endl;
cin>> fid;
for ( i =0; pid[i] != fid; i++)
;
if ( i > count)
cout<< "errr :no this pid"<<endl;
else
{
pid[i]=0 ;
name[i]= '\0';
guard[i][0]= 0;
guard [i][1]=0;
guard [i][2]=0;
}
}
void sort(void) //¶ÔËùÓÐѧÉúÒÀ¾Ý¸öÈË×ܳɼ¨ÅÅÐòðÅÝ·¨
{
int i,j;
float temp;
for ( i=0 ;i<=count;i++)
for ( j=0;j<3; j++)
guard[i][3] += guard[i][j];
for (i=0;i<=count;i++)
for (j = i+1;j<=count;j++)
{
if (guard[i][3] > guard [j][3])
{
temp = guard[i][3];
guard[i][3] = guard [j][3];
guard[j][3] = temp;
}
}
}
};
void main ()
{
int select;
student_info s1;
s1.select_ui();
select = s1.select;
switch (select)
{
case '1': s1.input();break;
case '2': s1.output();break;
case '3': s1.signalguard();break;
case '4': s1.averguard();break;
case '5': s1.find_name();break;
case '6': s1.del_pid();break;
case '7': s1.sort();break;
case '8': return;
}
}
Top
4 楼kv4000(ABCD(A Brave Csharp Developer))回复于 2004-12-03 19:36:33 得分 1
关注Top
5 楼79720699(大地勇士)回复于 2004-12-03 19:53:16 得分 1
C++没有办法了,VB和Delphi还行^^^^^Top
6 楼titainium(一千瓦的刀狼)回复于 2004-12-03 20:17:06 得分 1
accelerated C++上面给了一个类似的例子,可以参考一下。Top
7 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2004-12-03 20:40:10 得分 5
可以把select做成一个成员函数啊
把下面的选择过程做成一个成员函数,然后在main调用不就可以了吗.
switch (select)
{
case '1': s1.input();break;
case '2': s1.output();break;
case '3': s1.signalguard();break;
case '4': s1.averguard();break;
case '5': s1.find_name();break;
case '6': s1.del_pid();break;
case '7': s1.sort();break;
case '8': return;
}
}
Top
8 楼dadong52(一簑风雨笑红尘)回复于 2004-12-03 21:05:48 得分 0
自已出现的错误:1.用public 定义select
2.cout<< 拼写成count<<
3.在成员函数中定义了与成员变量同名的变量 name 与name[] ;pid 与pid[]
汗颜呀,还有点别的错误,正在调试。
Top
9 楼dadong52(一簑风雨笑红尘)回复于 2004-12-03 22:48:14 得分 0
(1)录入学生信息以及学生成绩
自已感到很菜:
这个成员函数不难实现,可是在实际运行中就出现不是我想要的,郁闷。
我的思路: 把录入的信息放入到数组之中,出现的问题:当我输入第一个pid[0],name[0]时,在输入成绩时不停的动,不能我时间让我输入,而我也用
for ( j = 0; j < 3 ; j++)
{
cout <<" input "<< j+1 << "guard: " <<endl;
cin >>guard [i][j];
}
输入不进去,我想是不是结束条件没设好,该了也不行。
titainium(一千瓦的刀狼) accelerated C++上面给了一个类似的例子,我没有这本书能否把人家好的例子给贴出来一下?让我学习一下,thank you你的关注和帮忙。
horisly(爱你!我会默默的努力……) 是,自已又有到了新东东,thank you我会默默的努力的。
alanzhu(啊鸿) 我很感谢你又给我调试,从上又给我改出来,让我明白自已错误,
这是我写的
void input(void) //录入学生信息以及学生成绩
{
int i,j;
cout << "if you input 0 ,input exit"<<endl;
for ( i = 0; pid [i] !=0 || name [i] != 0 ;i++)
{
cout << "input student pid: "<<endl;
cin >> pid[i];
cout << "input student name :" <<endl;
cin >> name [i];
for ( j = 0; j < 3 ; j++)
{
cout <<" input "<< j+1 << "guard: " <<endl;
cin >>guard [i][j];
}
}
count=i;
}
过路的高人,我是初学,每一点都是刚开始,对我很难的东东,对你们来说我问的还是比较菜 ,能否给写出一个让我学习一下?Top
10 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2004-12-04 00:29:19 得分 0
int pid []; //学号
char name []; //姓名
float guard [] [4];
------------------------------------------
你这里都没有给数组分配空间。应该要指定大小得
如int pid[10];
char name[20]
........
是不可为空得
但是 可以这样:int pid[]={1,2,3};这表示该数组有3个元素Top
11 楼dadong52(一簑风雨笑红尘)回复于 2004-12-12 18:40:53 得分 0
okTop




