程序设计及C++)"/>
简单评分程序(面向对象程序设计及C++)
(一)过程
首先建立一个项目,再根据需求创建一个学生类,包括:
接着进行程序编写:
(1)学生类
静态属性:姓名、各科成绩、总成绩、成绩等级
成员函数:为了实现对数据成员的擦欧总,需要一组体术数据成员值的成员函数,除此外还有初始化函数、展示函数、修改函数等等。
class Score
{char *name;double per_score[4];double total_score;char rate;public:Score();Score(char *na, double *per);double Gettotal();char* GetName();void Modify();char GetRate();void Display();void Input();
};
(2)类体的实现
类体的实现程序存为与头文件相同的文件Score.cpp,在该文件中进行各函数的编写,包括初始化、展示函数、修改函数等等。
(3)主函数
在主函数中,编写一个菜单函数,并定义一个全局变量N,用以记录Student的个数,首先定义一组学生类,然后用do while循环展示菜单、接收用户选择,直至用户选择退出信息管理系统,则do while 循环结束,此外,还编写了输出对象数组元素、按姓名查询、输入对象数组元素等函数,组成main函数中中根据用户选择进行switch case的部分。
遇到的问题:
(1)关于严重性代码说明项目文件
在调试过程中,出现了使用strcpy函数不安全,可能会发生缓冲区溢出的报错。
解决方法:更改项目属性(将 SDL 检查 选择为 否),或者在main函数前加上 #pragma warning(disable:4996) 这一语句(可以关掉关于函数不安全的警告)
采用第一种方法。
(二)代码
三个文件代码:
(1)Score.h:
#include<iostream>
using namespace std;class Score
{char *name;double per_score[4];double total_score;char rate;public:Score();Score(char *na, double *per);double Gettotal();char* GetName();void Modify();char GetRate();void Display();void Input();
};
(2)Score.cpp:
#include "score.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;Score::Score()
{name = NULL;rate = 'B';total_score = 0;
}Score::Score(char * na, double * per)
{if (na){name = new char[strlen(na) + 1]; strcpy(name, na);}//per_score = new double[4];for (int i = 0; i < 4; i++){per_score[i] = 0;}
}char * Score::GetName()
{return name;
}double Score::Gettotal()
{double x1 = ((per_score[0] + per_score[1]) / 20) * 100 * 0.25; //两次随堂测试成绩double x2 = (per_score[2] / 100) * 100 * 0.25; //期中考double x3 = (per_score[3] / 100) * 100 * 0.5; //期末考total_score = x1 + x2 + x3;return x1 + x2 + x3;
}void Score::Modify()
{int choice;cout << "你要修改哪门成绩?(1-随堂测试1,2-随堂测试2,3-期中考试,4-期末考试):";cin >> choice;double x;cout << "你要将其改为?:";cin >> x;if (choice == 1)per_score[0] = x;else if (choice == 2)per_score[1] = x;else if (choice == 3)per_score[2] = x;elseper_score[3] = x;}char Score::GetRate()
{if (total_score >= 90)return 'A';else if (total_score >= 80)return 'B';else if (total_score >= 70)return 'C';else if (total_score >= 60)return 'D';elsereturn 'E';
}void Score::Display() //输出数据
{cout << "姓名: " << name << endl;cout << "各科成绩:" << "随堂成绩1——" << per_score[0] << endl;cout << "\t随堂测试2——" << per_score[1] << endl;cout << "\t期中考试——" << per_score[2] << endl;cout << "\t期末考试——" << per_score[3] << endl;cout << "总成绩:" << Gettotal() << endl;cout << "该学生成绩等级为:" << GetRate() << endl;
}void Score::Input() //输入数据
{char na[10];cout << "请输入姓名:";cin >> na;if (name)delete[]name;name = new char[strlen(na) + 1];strcpy(name, na);char per[4];cout << "请输入该学生第一次随堂测试成绩:";cin >> per_score[0];cout << "请输入该学生第二次随堂测试成绩:";cin >> per_score[1];cout << "请输入该学生期中考试成绩:";cin >> per_score[2];cout << "请输入该学生期末考试成绩:";cin >> per_score[3];
}
(3)main(score).cpp:
#include "score.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
#pragma warning(disable:4996)int N = 0;
void menu();
void Output(Score *array);
void Input(Score *array);
void Modify(Score *array);int main()
{Score Array[5];int choice;do{menu(); //展示菜单cout << "请输入你的选择:";cin >> choice;if (choice >= 1 && choice <= 4){switch (choice){case 1:Input(Array);break;case 2:Output(Array);break;case 3:Modify(Array); break;default:break;}}} while (choice != 4);}void menu()
{cout << "________________________________________________________" << endl;cout << "|\t\t1、录入该学生成绩\t\t\t|" << endl;cout << "|\t\t2、查看该学生成绩\t\t\t|" << endl;cout << "|\t\t3、修改该学生成绩\t\t\t|" << endl;cout << "|\t\t4、退出\t\t\t\t\t|" << endl;cout << "________________________________________________________" << endl;
}void Output(Score * array)
{cout << "学生总人数 = " << N << endl;for (int i = 0; i < N; i++){array[i].Display();cout << endl;}
}void Input(Score * array)
{char ch;do{array[N].Input();N ++;cout << "继续输入吗?(Y or N ):";cin >> ch;} while (ch == 'Y');
}void Modify(Score * array)
{int choice;char ch;do{cout << "你要修改第几个学生的成绩?:";cin >> choice;array[choice-1].Modify();cout << "还要修改吗?(Y or N ):";cin >> ch;} while (ch == 'Y');
}
(三)运行结果
更多推荐
简单评分程序(面向对象程序设计及C++)
发布评论