• 简单评分程序(面向对象程序设计及C++)


    (一)过程

    首先建立一个项目,再根据需求创建一个学生类,包括:

    接着进行程序编写

    (1)学生类

    静态属性:姓名、各科成绩、总成绩、成绩等级

    成员函数:为了实现对数据成员的擦欧总,需要一组体术数据成员值的成员函数,除此外还有初始化函数、展示函数、修改函数等等。

    1. class Score
    2. {
    3. char *name;
    4. double per_score[4];
    5. double total_score;
    6. char rate;
    7. public:
    8. Score();
    9. Score(char *na, double *per);
    10. double Gettotal();
    11. char* GetName();
    12. void Modify();
    13. char GetRate();
    14. void Display();
    15. void Input();
    16. };

     

    (2)类体的实现

    类体的实现程序存为与头文件相同的文件Score.cpp,在该文件中进行各函数的编写,包括初始化、展示函数、修改函数等等。

    (3)主函数

    在主函数中,编写一个菜单函数,并定义一个全局变量N,用以记录Student的个数,首先定义一组学生类,然后用do while循环展示菜单、接收用户选择,直至用户选择退出信息管理系统,则do while 循环结束,此外,还编写了输出对象数组元素、按姓名查询、输入对象数组元素等函数,组成main函数中中根据用户选择进行switch case的部分。

    遇到的问题

    (1)关于严重性代码说明项目文件

    在调试过程中,出现了使用strcpy函数不安全,可能会发生缓冲区溢出的报错。

    解决方法:更改项目属性(将 SDL 检查 选择为 否),或者在main函数前加上 #pragma warning(disable:4996) 这一语句(可以关掉关于函数不安全的警告)

    采用第一种方法。


    (二)代码

    三个文件代码:

    (1)Score.h:

    1. #include
    2. using namespace std;
    3. class Score
    4. {
    5. char *name;
    6. double per_score[4];
    7. double total_score;
    8. char rate;
    9. public:
    10. Score();
    11. Score(char *na, double *per);
    12. double Gettotal();
    13. char* GetName();
    14. void Modify();
    15. char GetRate();
    16. void Display();
    17. void Input();
    18. };

    (2)Score.cpp:

    1. #include "score.h"
    2. #include <iostream>
    3. #include <string.h>
    4. #include <stdlib.h>
    5. using namespace std;
    6. Score::Score()
    7. {
    8. name = NULL;
    9. rate = 'B';
    10. total_score = 0;
    11. }
    12. Score::Score(char * na, double * per)
    13. {
    14. if (na)
    15. {
    16. name = new char[strlen(na) + 1];
    17. strcpy(name, na);
    18. }
    19. //per_score = new double[4];
    20. for (int i = 0; i < 4; i++)
    21. {
    22. per_score[i] = 0;
    23. }
    24. }
    25. char * Score::GetName()
    26. {
    27. return name;
    28. }
    29. double Score::Gettotal()
    30. {
    31. double x1 = ((per_score[0] + per_score[1]) / 20) * 100 * 0.25; //两次随堂测试成绩
    32. double x2 = (per_score[2] / 100) * 100 * 0.25; //期中考
    33. double x3 = (per_score[3] / 100) * 100 * 0.5; //期末考
    34. total_score = x1 + x2 + x3;
    35. return x1 + x2 + x3;
    36. }
    37. void Score::Modify()
    38. {
    39. int choice;
    40. cout << "你要修改哪门成绩?(1-随堂测试1,2-随堂测试2,3-期中考试,4-期末考试):";
    41. cin >> choice;
    42. double x;
    43. cout << "你要将其改为?:";
    44. cin >> x;
    45. if (choice == 1)
    46. per_score[0] = x;
    47. else if (choice == 2)
    48. per_score[1] = x;
    49. else if (choice == 3)
    50. per_score[2] = x;
    51. else
    52. per_score[3] = x;
    53. }
    54. char Score::GetRate()
    55. {
    56. if (total_score >= 90)
    57. return 'A';
    58. else if (total_score >= 80)
    59. return 'B';
    60. else if (total_score >= 70)
    61. return 'C';
    62. else if (total_score >= 60)
    63. return 'D';
    64. else
    65. return 'E';
    66. }
    67. void Score::Display() //输出数据
    68. {
    69. cout << "姓名: " << name << endl;
    70. cout << "各科成绩:" << "随堂成绩1——" << per_score[0] << endl;
    71. cout << "\t随堂测试2——" << per_score[1] << endl;
    72. cout << "\t期中考试——" << per_score[2] << endl;
    73. cout << "\t期末考试——" << per_score[3] << endl;
    74. cout << "总成绩:" << Gettotal() << endl;
    75. cout << "该学生成绩等级为:" << GetRate() << endl;
    76. }
    77. void Score::Input() //输入数据
    78. {
    79. char na[10];
    80. cout << "请输入姓名:";
    81. cin >> na;
    82. if (name)
    83. delete[]name;
    84. name = new char[strlen(na) + 1];
    85. strcpy(name, na);
    86. char per[4];
    87. cout << "请输入该学生第一次随堂测试成绩:";
    88. cin >> per_score[0];
    89. cout << "请输入该学生第二次随堂测试成绩:";
    90. cin >> per_score[1];
    91. cout << "请输入该学生期中考试成绩:";
    92. cin >> per_score[2];
    93. cout << "请输入该学生期末考试成绩:";
    94. cin >> per_score[3];
    95. }

    (3)main(score).cpp:

    1. #include "score.h"
    2. #include <iostream>
    3. #include <string.h>
    4. #include <stdlib.h>
    5. using namespace std;
    6. #pragma warning(disable:4996)
    7. int N = 0;
    8. void menu();
    9. void Output(Score *array);
    10. void Input(Score *array);
    11. void Modify(Score *array);
    12. int main()
    13. {
    14. Score Array[5];
    15. int choice;
    16. do
    17. {
    18. menu(); //展示菜单
    19. cout << "请输入你的选择:";
    20. cin >> choice;
    21. if (choice >= 1 && choice <= 4)
    22. {
    23. switch (choice)
    24. {
    25. case 1:
    26. Input(Array);
    27. break;
    28. case 2:
    29. Output(Array);
    30. break;
    31. case 3:
    32. Modify(Array);
    33. break;
    34. default:break;
    35. }
    36. }
    37. } while (choice != 4);
    38. }
    39. void menu()
    40. {
    41. cout << "________________________________________________________" << endl;
    42. cout << "|\t\t1、录入该学生成绩\t\t\t|" << endl;
    43. cout << "|\t\t2、查看该学生成绩\t\t\t|" << endl;
    44. cout << "|\t\t3、修改该学生成绩\t\t\t|" << endl;
    45. cout << "|\t\t4、退出\t\t\t\t\t|" << endl;
    46. cout << "________________________________________________________" << endl;
    47. }
    48. void Output(Score * array)
    49. {
    50. cout << "学生总人数 = " << N << endl;
    51. for (int i = 0; i < N; i++)
    52. {
    53. array[i].Display();
    54. cout << endl;
    55. }
    56. }
    57. void Input(Score * array)
    58. {
    59. char ch;
    60. do
    61. {
    62. array[N].Input();
    63. N ++;
    64. cout << "继续输入吗?(Y or N ):";
    65. cin >> ch;
    66. } while (ch == 'Y');
    67. }
    68. void Modify(Score * array)
    69. {
    70. int choice;
    71. char ch;
    72. do
    73. {
    74. cout << "你要修改第几个学生的成绩?:";
    75. cin >> choice;
    76. array[choice-1].Modify();
    77. cout << "还要修改吗?(Y or N ):";
    78. cin >> ch;
    79. } while (ch == 'Y');
    80. }

    (三)运行结果

     

     

     

     

  • 相关阅读:
    NIM游戏,模板题
    高层次人才申报
    山西电力市场日前价格预测【2023-10-23】
    Java基础----多线程
    nginx异常重启
    Go语言核心编程(三) --协程
    k8s--RC
    【设计模式】三、概述分类+单例模式
    编译openMVG出现的错误的解决
    Spring源码:Bean生命周期(五)
  • 原文地址:https://blog.csdn.net/qq_62692207/article/details/127780306