问答题
使用VC6打开
下的源程序文件modi3.cpp。
学校教务处要为任课老师开发一个学生管理系统,需求如下:
(1)学生的信息是要受到严密保护和限制的,包括姓名、五个英文字符的学号,以及精确到小数点后一位的一科成绩,只有任课老师可以修改,如果学生升学了,比如由本科升到研究生,原来的信息还有效,而只需添加研究生的必要信息,不过现在不必马上实现,但应当有所考虑。
(2)学生的所有信息可以查看,但也只有学生自己才有这个权利。
(3)学生的信息可以从文件中读取来构造信息库,需要把信息输出到屏幕以便核实,但这需要任课老师来完成。
(4)老师能提供所教学生的完整信息列表,同时可按成绩高低排序。
(5)为了便于学校评定奖学金,需要单独查找成绩最高的同学(一般不采用把成绩单全部排列后来选取,可能这比较耗费时间,虽然要求不太合理,但要按用户的需求操作,同时需要指出的是,如果成绩最高者有数名,需要一一列出)。
(6)由于学校的机器比较老,内存严重不足,每个老师带的学生数不一样,但也不会超过50人。
以上功能的程序框架已经形成,考生需要按照需求来逐个实现。
(1)请在注释//********1********之后添加适当的语句,以便实现功能需求(1)。
(2)请在注释//********2********处添加适当的语句,成绩单排序功能。
(3)请在注释//********3********处实现查找成绩最高学生名单。
无需修改main()主函数,当得到下面的结果,该系统可能被采用。
输入的学生信息:
输入的学生信息:
姓名
周华
李强
刘星
贺兰
周红
赵邦
高俊
|
学号
0001
0002
0003
0004
0005
0006
0007
|
成绩
78.5
98
89
78
76.5
85
98
|
排序后的学牛信息:
姓名
李强
高俊
刘星
赵邦
周华
贺兰
周红
|
学号
0002
0007
0003
0006
0001
0004
0005
|
成绩
98
98
89
85
78.5
78
76.5
|
查询成绩最高的学生信息:
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
#include<fstream.h>
#include<assert.h>
#include <string.h>
#define NMAX 50
class Teacher;
class Student
{
public:
Student(char *name="未知",char *number="00000",double mark=0.0)
{
int len=strlen(name);
m_name=new char[len+1];
strcpy(m_name,name);
strcpy(m_number,number);
m_mark=mark;
}
~Student()
{
delete []m_name;
}
void DisplayMsg()
{
cout
<
<
m name
<
<
"/t"
<
<
m_number
<
<
"/t"
<
<
m_mark
<
<
endl;
}
protected:
char *m_name;
char m_number[5];
double m_mark;
//********1********
};
class Teacher
{
public:
Teacher(){};
~Teacher(){
for(int i=0;i<m_count; i++)
{
delete m_pStu[i];
m_pStu[i]=NULL;
}
};
int BestScore(Student *pS[]);
void InputScore();
void Display();
void SortScore();
protected:
Student *m_pStu[NMAX];
double m_average;
int m_count;
};
void Teacher::InputScore()
{
ifstream in("data.txt");
assert (in);
char name[20];
char number[5];
double mark=0;
m_count=0;
cout
<
<
"姓名/t"
<
<
"学号/t"
<
<
"成绩/t"
<
<
endl;
for(int i=0; !in.eof(); i++) {
in
>
>
name;
in
>
>
number;
in
>
>
mark;
m_count++;
m_pStu [i]=new Student (name, number,mark);
cout
<
<
name
<
<
" / t"
<
<
number
<
<
" / t"
<
<
mark
<
<
endl;
}
}
void Teacher::SortScore()
double sum=0;
for (int i=0; i<m_count; i++)
{
int index=i;
for (int j=i+1; j<m_count; j++)
{
if (m_pStu [j]->m_mark> m_pStu[index] ->m_mark)
index=j;
}
//********2********
if()
{
Student *ps=m_pStu[i];
m_pStu[i]=m_pStu[index];
m_pStu[index]=ps;
}
}
}
void Teacher::Display()
{
cout
<
<
"姓名/t"
<
<
"学号/t"
<
<
"成绩 /t"
<
<
endl;
for(int j=0; j<m_count; j++)
{
m_pStu [j]->DisplayMsg ();
}
}
int Teacher::BestScore (Student *pS [])
{
int index=0;
int count=1;
//********3********
for(int j=1; j<m_count; j++)
{
if(m_pStu[j]->m_mark> m_pStu[index]->m_mark)
{
count=1;
index=j;
pS[count++]=m_pStu
[index];
}
else if(m_pStu[j]->m_mark ==m_pStu[index]->m_mark)
{
index=j;
pS[count++]=m_pStu[index];
}
}
return count;
}
void main ()
{
Teacher Teacher;
Student *pStudent[NMAX];
cout
<
<
"输入的学生信息: "
<
<
endl;
Teacher.InputScore();
Teacher.SortScore();
cout
<
<
endl
<
<
"排序后的学生信息: "
<
<
endl;
Teacher.Display();
cout
<
<
endl
<
<
"查询成绩最高的学生信息: "
<
<
endl;
int n=Teacher.BestScore (pStudent);
while(n--)
{
pStudent[n]->
DisplayMsg();
}
}