源代码如下,麻烦各位uu们帮忙看一下对象数组部分问题在哪里,功能是实现多门课程成绩管理,太感谢了
结果报错:
/*******************************************************************
* 名 称:学生成绩管理系统1.1 *
* 创建日期:2022-4-3 *
* 最后修改:2022-4-3 *
* 版 权:中国农业大学信息与电气工程学院 *
* 版 本 号:1.0 *
*******************************************************************/
#include <iostream>
#include <cstring>
using namespace std;
#define N 20 //数组的长度
/*******************************************************
功能:显示菜单
参数:无
返回值:无
*******************************************************/
void displayMenu()
{
cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
cout<<"+ 学生成绩管理系统 +\n";
cout<<"+ +\n";
cout<<"+ 1. 录入 +\n";
cout<<"+ 2. 输出 +\n";
cout<<"+ 3. 查询 +\n";
cout<<"+ 4. 排序 +\n";
cout<<"+ 5. 结束 +\n";
cout<<"+ +\n";
cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
}
/*******************************************************
功能:登陆函数,验证口令
参数:
类型:char []
说明:用户输入口令
返回值:1或0
类型:int
说明:1表示通过验证;0表示没有通过
*******************************************************/
int login()
{
char password[8];/*用户输入的口令*/
static char key[8]="1234";
int count = 0;
int s=0;
/*====验证用户的口令,如果三次输入均错误,则不允许进入系统====*/
do
{
count++;
cout<<"请输入口令:";
gets(password);
if(strcmp(password,key)==0)
s = 1;
else
s = 0;
}while(s==0 && count<3);
return s;
}
class Score
{
int *score; //学生成绩数组
int length; //数组最大长度
int alength; //数组实际长度
public:
Score();
Score(int *st, int smax);
~Score();
void inputScore();
void outputScore();
int queryScore(int xS);
void sortScore();
};
//构造函数:传递参数
Score::Score(int *st, int smax)
{
score = new int[smax];
score = st;
length = smax;
}
//析构函数
Score::~Score(){}
//输入学生成绩
void Score::inputScore()
{
int i = 0;
int tmp;
cout << "请输入学生成绩(以-1结束输入):\n";
do{
cout << "第" << i+1 << "个学生:";
cin >> tmp;
if(tmp>=0 && tmp <=100)
{
score[i] = tmp;
i++;
}
} while(tmp!=-1 && i<length);
alength = i;
}
//输出学生成绩
void Score::outputScore()
{
int i=0;
cout<<"学生成绩如下:\n";
for(i = 0; i < alength; i++)
cout << i+1 << "\t" << score[i] << endl;
cout<<"\n";
}
//查询学生成绩
int Score::queryScore(int xS)
{
int i;
for(i = 0; i < length; i++)
{
if(xS == score[i])
{
return i;
}
}
return -1;
}
//学生成绩排序
void Score::sortScore()
{
int i, j, t;
cout<<"成绩排序如下:\n";
for(i = 0; i < alength - 1; i++)
{
for(j = 0; j < alength - i - 1; j++)
if(score[j] > score[ j + 1 ])
{
t = score[j];
score[j] = score[ j + 1 ];
score[ j + 1 ] = t;
}
}
}
/*******************************************************
功能:主函数
参数:无
返回值:无
*******************************************************/
int main()
{
int choice = 0; /*代表用户选择的操作数字 */
int s=0,datalen=0,x,find;
int as[N];
Score testS(as,N);
Score *p = new Score[3];
p[0].inputScore();
p[1].inputScore();
p[2].inputScore();
/*====验证用户的口令====*/
if (login( ) == 0)
{
cout<<"口令错误,不允许进入本系统!\n";
exit( 0 );
}
/*====根据用户的选择,执行相应的操作.====*/
while(1)
{
displayMenu();
cout<<"\n 请选择您的操作(1,2,3,4,5):\n";
cin>>choice;
switch(choice)
{
case 1:
testS.inputScore();
break;
case 2:
testS.outputScore();
break;
case 3:
cout<<"\n 请输入要查找的成绩:";
cin>>x;
find=testS.queryScore(x);
if(find>=0)
cout<<"要查成绩在数组中的下标为:"<<find+1<<endl;
else
cout<<"没有要查找的成绩。\n";
break;
case 4:
testS.sortScore();
testS.outputScore();
break;
case 5:
exit(0);
break;
}
}
cout << "Deleting..." << endl;
delete[] p;
return 0;
}