学生成绩管理系统问题分析

news/2025/2/23 0:17:12/文章来源:https://www.cnblogs.com/zzq-shou/p/18729847

代码来源:CNDS《学生成绩信息管理系统设计》
运行环境:Visual Studio 2022

学生成绩信息管理系统设计 #include #include using namespace std; const int MAX_STUDENTS = 100; class Student { public:string name;int id;float score; }; class StudentManager { private:Student students[MAX_STUDENTS];int studentCount;

public:
StudentManager() : studentCount(0) {}

void addStudent() {if (studentCount >= MAX_STUDENTS) {cout << "学生数量已达到最大值!" << endl;return;}cout << "请输入学生姓名: ";cin >> students[studentCount].name;cout << "请输入学生学号: ";cin >> students[studentCount].id;cout << "请输入学生成绩: ";cin >> students[studentCount].score;studentCount++;cout << "学生添加成功!" << endl;
}void displayAllStudents() {if (studentCount == 0) {cout << "没有学生信息!" << endl;return;}for (int i = 0; i < studentCount; i++) {cout << "姓名: " << students[i].name<< ", 学号: " << students[i].id<< ", 成绩: " << students[i].score << endl;}
}void findStudentById() {int id;cout << "请输入要查找的学生学号: ";cin >> id;for (int i = 0; i < studentCount; i++) {if (students[i].id == id) {cout << "找到学生: " << students[i].name<< ", 成绩: " << students[i].score << endl;return;}}cout << "未找到该学生!" << endl;
}

};

int main() {
StudentManager manager;
int choice;

while (true) {cout << "1. 添加学生" << endl;cout << "2. 显示所有学生" << endl;cout << "3. 查找学生" << endl;cout << "0. 退出" << endl;cout << "请输入选项: ";cin >> choice;switch (choice) {case 1:manager.addStudent();break;case 2:manager.displayAllStudents();break;case 3:manager.findStudentById();break;case 0:cout << "退出程序!" << endl;return 0;default:cout << "无效选项,请重新输入!" << endl;break;}
}return 0;

}

代码问题分析
1.没有对输入的成绩、学号等进行有效性检查(如成绩是否在0-100之间,学号是否重复)。
2.功能缺少删除学生、修改学生信息等功能。
学生信息存储只有姓名、学号和成绩。
3.界面交互不够友好,缺少提示信息。
新代码
改正1.void findStudentById() {
int id;
cout << "请输入要查找的学生学号: ";
cin >> id;
int index = findStudentById(id);
if (index != -1) {
cout << "找到学生: ";
students[index].display();
} else {
cout << "未找到该学生!" << endl;
}
}
改正2:// 删除学生
void deleteStudent() {
int id;
cout << "请输入要删除的学生学号: ";
cin >> id;
int index = findStudentById(id);
if (index == -1) {
cout << "未找到该学生!" << endl;
return;
}
// 将后面的学生向前移动
for (int i = index; i < studentCount - 1; i++) {
students[i] = students[i + 1];
}
studentCount--;
cout << "学生删除成功!" << endl;
}
// 修改学生信息
void modifyStudent() {
int id;
cout << "请输入要修改的学生学号: ";
cin >> id;

    int index = findStudentById(id);if (index == -1) {cout << "未找到该学生!" << endl;return;}cout << "当前学生信息: ";students[index].display();string name;float score;cout << "请输入新的姓名: ";cin >> name;cout << "请输入新的成绩: ";score = getValidInput<float>(0, 100);students[index].setName(name);students[index].setScore(score);cout << "学生信息修改成功!" << endl;
}


六、总结:
难点:
1.初始代码没有对用户输入进行验证,容易导致程序崩溃或数据错误(如输入非数字字符、成绩超出范围等)。在直接获取数字之前,需要明白输入的数字未必全是正确的,要运用逆向思维验证数据的正确性。
2.系统虽然可以运行,但是很多地方如:删除学生信息,改学生信息都没有做到,需要在用户的角度去考虑他们。
逆向软件工程的思考
逆向软件工程(Reverse Software Engineering)是指通过分析现有系统的代码、结构和行为,理解其设计意图,并在此基础上进行改进或重构。在这次软件改进中,我也是运用到了这种思维,从用户(最终)角度去逆向改进开发者应用(开始),这种思维一定会帮助未来改进并优化系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/887835.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依02

swagger 简单介绍Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务 官网:https://swagger.io/。 它的主要作用是:使得前后端分离开发更加方便,有利于团队协作 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担 功能测试S…

AI大模型有哪些常见的应用场景

图像生成应用场景: 图像生成 功能描述: 根据文本描述或参考图生成高质量图片,支持艺术、写实等多种风格。 用法示例: 输入提示词(如“赛博朋克风格的城市夜景”),调整参数(分辨率、风格强度)。 代表应用: 即梦AI视频生成应用场景: 视频生成 功能描述: 从文本/图片生成视频…

『Python底层原理』--Python对象系统探秘

Python是一种非常灵活的编程语言,它的灵活性很大程度上来自于它的对象系统。 在Python中,一切都是对象,这意味着无论是数字、字符串,还是我们自己定义的类的实例,它们在底层都遵循相同的规则。 本文尝试揭开Python的对象系统的神秘面纱。 1. 对象和类型 在Python中,每个对…

MyBatis-Plus配置之 —— 配置冲突

MyBatis-Plus配置 在 SpringBoot 工程中,当使用 yml 文件为 MyBatis-Plus 添加配置时,可能会出现 “配置冲突” 的问题,即:配置项如下: # MyBatisPlus配置 mybatis-plus:configuration:map-underscore-to-camel-case: true #字段与属性,自动转换为驼峰命名# ...config…

TLV编码学习

TLV就是Tag+Length+Value Tag(1或者多字节): Tag首字节:Bit7:0表示tag只有1字节, 1表示tag是多字节Bit6表示通用编码tag还是私有编码tag解析第5bit为0/1分别表示Value字段按照基本类型编码或者TLV方式编码。 Bit0~4,如果 Tag Value小于31,直接放Tag Value,大于…

线性规划 - 对偶

线性规划 - 对偶定义 线性规划是一类满足限制条件为关于自变量的线性约束,且目标函数是关于自变量的线性函数的一类最优化问题。 对于一组自变量 \(x_i\),定义多元线性函数 \(f(x_1,x_2,\dots,x_n)=\sum\limits_{i=1}^na_ix_i\),称 \(f(x_1,x_2,\dots,x_n)\ge/\le/=b_i\) 为…

excel的index和counta函数结合用法解决将a,b列内容合并转到c列

Excel中将a,b列内容合并转到c列 如下图,a,b列各有一些连续的数据(但个数不确定),想要将整个a,b列内容合并转到c列,应该如何实现公式及分步说明 公式实现 =IF(ROW()<=COUNTA(A$1:A$100), A1, IF(ROW()<=COUNTA(A$1:A$100)+COUNTA(B$1:B$100), INDEX(B$1:B$100, ROW()…

1-3 S语言词法分析器设计

一、实验目的 了解词法分析程序的两种设计方法:根据状态转换图直接编程的方式; 利用DFA编写通用的词法分析程序。(选做)二、实验内容 1. 根据状态转换图直接编程 编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号…

【技术解读】【CloudSec】EmojiDeploy: Smile! Your Azure web service just got RCEd ._.

目录前言存在漏洞的服务 - Kudu SCM漏洞利用的关键点1、Same-site配置不当2、服务端对Origin的校验可被绕过3、利用一个高危功能接口3.1、DoS - POST /api/scm/clean、POST /api/app/restart3.2、RCE - POST /api/zipdeploy没校验一些自定义请求头 - 如:If-Match: *、X-Reques…

基于扩频解扩+turbo译码的16QAM图传通信系统matlab误码率仿真,扩频参数可设置

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要该通信系统主要用于图像传输,适用于对图像质量和传输可靠性要求较高的场景,如无人机图像传输、视频监控、无线电视广播等。在复杂的电磁环境…

【技术学习】【WebSec】GraphQL API vulnerabilities

目录Lab1:Accessing private GraphQL postsLab2:Accidental exposure of private GraphQL fieldsLab3:Finding a hidden GraphQL endpointLab4:Bypassing GraphQL brute force protectionsLab5:Performing CSRF exploits over GraphQLReference Lab1:Accessing private G…

通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器

1.课题概述通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器。通过对比三个算法可知,采用滑模控制算法,其具有最快的收敛性能,较强的鲁棒性,以及较小的超调量。其性能略优于基于积分分离的PID控制器,远优于PID控制器的控制性能。2.系统仿真结果 (完整程序运行后无水…