使用VC6打开考生文件夹下的源程序文件modi3.cpp。学校教务处要为任课老师开发一个学生管理系统,需求如下: (1)学生的信息是要受到严密保护和限制的,包括姓名、五个英文字符的学号,以及精确到小数点后一位的一科成绩,只有任课老师可以修改,如果学生升学了

admin2020-10-21  45

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

选项

答案(1)添加语句:friend class Teacher; (2)将“if()”补充完整为: if(index!=j) (3)添加语句:pS[0]=m.-pstu[0];

解析 (1)学生的信息受到严密保护和限制,任课老师可以修改学生数据,比如本科升到研究需要修改学号等信息,因此老师类(1’eacher")可以访问学生类(Student),故老师类是学生类友元类,故第1个标识下应添加“friend classTeacher;"。
(2)SortScore()成员函数是实现按成绩高低的排序,函数结构是二重循环,采用的是选择法排序,每次在内层循环中寻找成绩最高的元素的下标,如果找到的最高成绩的元素的下标和现在的位置(外层循环变量i+l的值)不同则两者交换,故第2个标识下的判断条件为“if(index!=x)”。
(3)BestScore(Student*pS[])实现查找成绩最高学生名单,即利用循环查找数组中的每个元素的成绩值,先假设第一个元素的成绩最高,然后再循环中逐个比较,如果有成绩更高的,那么将更高的成绩保存下来,搜索整个数组就能找到成绩最高的学生,即第3标识下应添加“pS[0]=mpStu[0];”。
转载请注明原文地址:https://kaotiyun.com/show/fNyp777K
0

相关试题推荐
最新回复(0)