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

admin2019-01-19  27

问题 使用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
    注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
1  #include<fstream.h>
2  #include<assert.h>
3  #include<string.h>
4  #define NMAX 50
5  class Teacher;
6  class Student
7  {
8  public:
9    Student(char  *name=’’未知’’,char  *number=’’00000’’,double mark=0.0)
10    {
11    int len=strlen(name);
12   m name=new char[len+1];
13    strcpy(m_name,name);
14    strcpy(m_number,number);
15    m_mark=mark;
16    }
17    ~Student()
18    {
19    delete[]m_name;
20    }
21    void DisplayMsg()
22    {
23    cout<<m_name<<’’\t’’<<m_number<<’’\t’’<<m mark<<end1;
24    }
25  protected:
26    char  *m_name;
27    char  m_number[5];
28    double m_mark;
29    //********1********
30
31  };
32  class Teacher
33  {
34  public:
35    Teacher(){);
36    ~Teacher(){
37    for(int i=0;i<m count;i++)
38    {
39    delete m_pStu;
40    m_pStu=NULL;
41    }
42    };
43    int BestScore(Student*pS[]);
44    void  InputScore();
45    void Display();
46    void SortScore();
47  Drotected:
48    Student*m_pStu[NMAX];
49    double m_average;
50    int    m_count;
51  };
52  void Teacher::InputScore()
53  {
54    ifstream in(’’data.txt’’);
55    assert(in);
56    char name[20];
57    char number[5];
58    double mark=0;
59    m_count=0;
60    cout<<’’姓名\t’’<<’’学号\t’’<<’’成绩\t’’<<end1;
61    for(  int  i=0;  !in.eof();i++){
62    in>>name;
63    in>>number;
64    in>>mark;
65    m_count++;
66    m_pStu=new  Student(name,number,mark);
67    cout<<name<<’’\t’’<<number<<’’\t’’<<mark<<end1;
68    }
69   }
70  void Teacher::SortScore()
71  {
72    double sum=0;
73    for(int  i=0;  i<m_count;i++)
74    {
75    int index=i;
76    for(int j=i+l;j<m count;j++)
77    {
78    if(m_pStu[j]->m mark>m_pStu[index]->m_mark)
79    index=j;
80    }
81    //********2********
82    if()
83    {
84    Student *ps=m_pStu
85    m_pStu=m_pStu[index];
86    m_pStu[index]=ps;
87    }
88    }
89   }
90  void Teacher::Display()
91  {
92    cout<<’’姓名\t’’<<’’学号\t’’<<’’成绩\t’’<<end1;
93    for(int j=0; j<m count;j++)
94    {
95    m_pStu[j]->DisplayMsg();
96    }
97  }
98  int Teacher::BestScore(Student*pS[])
99  {
100    int index=0;
101    int count=1;
102    //********3********
103
104    for(int j=1;j<m_count;j++)
105    {
106    if(m_pStu[j]->m mark>m_pStu[index]->m_mark)
107    {
108   count=1;
109    index=j;
110    pS[count++]=m_pStu[index];
111    }
112    else if(m_pStu[j]>m_mark==m_pStu[index]->m_mark)
113    {
114    index=j;
115    pS[count++]=m_pStu[index];
116    }
117    }
118    return count;
119  }
120  void main()
121  {
122    Teacher Teacher;
123    Student *pStudent[NMAX];
124    cout<<’’输入的学生信息:’’<<end1;
125   Teacher.InputScore();
126    Teacher.SortScore();
127    cout<<end1<<’’非序后的学生信息:’’<<end1;
128    Teacher.Display();
129    cout<<end1<<"查询成绩最高的学生信息:’’<<end1;
130    int n=Teacher.BestScore(pStudent);
131    while(n--)
132    {
133    pStudent[n]->DisplayMsg();
134    }
135  }

选项

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

解析 类Student含有三个成员变量:姓名、五个英文字符的学号和精确到小数点后一位的一科成绩,类Teacher含有Student对象数组的指针Student水m_pStu[NMAX]、m_average和m_count三个成员变量,类Teacher有多个成员函数,完成学生数据输入、排序、查找最好成绩和打印等功能。
    (1)学生的信息受到严密保护和限制,任课老师可以修改学生数据,比如本科升到研究需要修改学号等信息,因此老师类(Teacher)可以访问学生类(Student),故老师类是学生类友元类,故第1个标识下应添加“friend class Teacher;”。
    (2)SortScore()成员函数是实现按成绩高低的排序,函数结构是二重循环,采用的是选择法排序,每次在内层循环中寻找成绩最高的元素的下标,如果找到的最高成绩的元素的下标和现在的位置(外层循环变量i+1的值)不同则两者交换,故第2个标识下的判断条件为“if(index!=j)”。
    (3)BestScore(Student*pS[])实现查找成绩最高学生名单,即利用循环查找数组中的每个元素的成绩值,先假设第一个元素的成绩最高,然后再循环中逐个比较,如果有成绩更高的,那么将更高的成绩保存下来,搜索整个数组就能找到成绩最高的学生,即第3标识下应添加“ps[0]=m_pStu[0];”。
转载请注明原文地址:https://jikaoti.com/ti/p2t0FFFM
0

最新回复(0)