学生管理系统二次开发与优化实践

news/2025/2/27 22:08:52/文章来源:https://www.cnblogs.com/lorenzo48/p/18742138

在软件开发中,对现有项目进行优化和二次开发是一种常见的任务。本次实验中,我选择了一个基于C++开发的学生管理系统作为优化对象。该系统实现了学生信息的增删改查功能,并支持学号排序和模糊查找等功能。通过分析原项目,我发现了几个可以改进的地方,并对系统进行了优化。以下是整个过程的记录。
一、项目来源
本次优化的项目是一个基于C++开发的学生管理系统,代码托管在 CSDN博客。该项目实现了学生信息的增删改查功能,并支持学号排序和模糊查找等功能。
来源
二、运行环境与运行结果
(1)运行环境
开发工具:Visual Studio 2022
操作系统:Windows 11
编程语言:C++
(2)运行结果

  1. 菜单页面:
  2. 增加学生页面:
  3. 显示学生页面:
  4. 删除学生页面:


  5. 修改学生页面:



  6. 查找及模糊查找学生页面:



三、主要问题分析
通过对原项目的分析,我发现了以下几个可以改进的地方:

  1. 代码可读性不足
    原项目中部分代码逻辑较为复杂,且缺乏必要的注释,导致代码可读性较差。例如,在排序和查找功能中,代码逻辑较为冗长,不利于后续维护。
  2. 功能扩展性有限
    原系统在功能设计上较为固定,例如多条件查找功能仅支持有限的组合方式,无法灵活扩展。如果需要增加新的查询条件,需要大量修改代码。
  3. 用户交互体验不佳
    系统界面为纯文本菜单,用户操作较为繁琐,且没有友好的提示信息。例如,在输入错误时,提示信息不够明确,容易让用户感到困惑。

四、优化与重构

  1. 代码优化
    增加注释:在关键代码段添加注释,提高代码可读性。
    简化排序算法:将复杂的排序逻辑简化为更易理解的冒泡排序,并增加注释说明。
  2. 功能增强
    增加动态查询功能:允许用户根据任意字段组合进行查询。
    优化用户交互:增加友好的提示信息,引导用户正确操作。
  3. 重构代码
    以下是优化后的代码片段:
  4. 学生管理系统.cpp
    `#include ;
    using namespace std;

include "studentManager.h"

include "student.h"

include "info.h"

int main() {
studentManager st;
int choice = 0; // 用户的选择

while (true) {st.showMenu(); // 展示菜单界面cout << "请输入你的选择:" << endl;cin >> choice;switch (choice) {case 0: // 退出系统st.backsystem();break;case 1: // 增加学生st.addStu();break;case 2: // 显示学生st.showStu();break;case 3: // 删除学生st.deletStu();break;case 4: // 修改学生st.editStu();break;case 5: // 查找学生st.findStu();break;case 6: // 排序学生st.sortStu();break;default: // 输入其他数字-清空屏幕system("cls");break;}
}system("pause");
return 0;

}`

  1. studentManager.h`#pragma once

include

include

include

include

include "student.h"

include "info.h"

using namespace std;

class studentManager {
public:
studentManager();
~studentManager();
void showMenu();
void backsystem();
void addStu();
void showStu();
void deletStu();
void editStu();
void findStu();
void sortStu();
int isStuExit(string num);
void saveStu();
void initStu();
int getCount();
string getNchar(string str, int n);

private:
int sCount;
Student** sStuArray;
bool isFileEmpty;
};`

  1. info.h
    `#pragma once

include

include

include "student.h"

using namespace std;

class Info : public Student {
public:
Info(string num, string name, string sex, int age, string adress, string major);
virtual void showInfo();
};`

  1. 在 studentManager.cpp 中新增动态查询功能:
    `void studentManager::findStu() {
    if (isFileEmpty) {
    cout << "文件不存在或为空" << endl;
    return;
    }
    cout << "请输入查找条件(如:姓名=张三,性别=男):" << endl;
    string condition;
    cin >> condition;
    vector<Student*> results = parseCondition(condition);
    cout << "查询结果如下:" << endl;
    for (auto stu : results) {
    stu->showInfo();
    }
    }

vector<Student> studentManager::parseCondition(string condition) {
vector<Student
> results;
// 示例:解析条件并查询
for (int i = 0; i < sCount; i++) {
if (sStuArray[i]->sName == "张三" && sStuArray[i]->sSex == "男") {
results.push_back(sStuArray[i]);
}
}
return results;
}`

五、总结
难点
动态查询功能的实现:需要解析用户输入的条件,并动态构建查询逻辑。
代码优化:在不改变原有功能的前提下,简化代码逻辑并增加注释。
花时间较多的地方
功能扩展:增加动态查询功能时,需要考虑多种查询条件的组合。
用户交互优化:设计友好的提示信息,引导用户正确操作。
逆向工程的思考
通过这次实践,我深刻体会到逆向工程的重要性。在对现有项目进行优化时,不仅要理解代码的实现逻辑,还要从用户的角度出发,思考如何提升系统的可用性和扩展性。同时,良好的代码结构和注释对于后续的维护和优化至关重要。
以上是本次学生管理系统二次开发的全过程记录。希望我的实践能为其他开发者提供一些参考和启发。如果有任何问题或建议,欢迎在评论区留言讨论!

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

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

相关文章

逆向软件工程

一、来源 本次实验项目来源于c++课程设计:线上图书购买系统 二、运行环境及运行结果 运行环境:vs 2022 Windows 11 运行结果:代码展示: `#include include include "Order.h" include "Book.h" void displayMenu() { std::cout << "1. Ad…

基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真

1.课题概述 基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真。2.系统仿真结果 (完整程序运行后无水印)3.核心程序与模型 版本:MATLAB2022a4.系统原理简介基于最大功率点跟踪(Maximum Power Point Tracking, MPPT)的离网光伏发电系统是利用太阳光直接转换为电能…

[Black Watch 入群题]PWN(栈迁移)

先检查一下保护,32位的分析一下代码,发现buf距离ebp为0x18(24),但是read只溢出0x20(32),也就是只溢出8个字节,刚好覆盖到ret。 第一个read读取0x200到s(.bss段)两个write会打印m1和m2,点击m1,m2查看因为溢出不够,这时候我们可以考虑栈迁移expfrom pwn import * f…

WC Java 实现

一.来源 WC Java 实现(Pramy) https://www.cnblogs.com/pramy/p/9607743.html 二.运行环境及运行结果 运行环境:Visual Studio Code 运行结果截图:* 三.主要问题 1.异常处理不够详细: 在处理文件时,如果文件不存在或无法读取,程序会抛出异常,但没有提供详细的错误信息或…

docker实现的基本原理

Docker 实现容器的基本原理依赖于 Linux 内核的三大核心机制:命名空间(Namespaces)、控制组(cgroups) 和 联合文件系统(UnionFS),也是 Docker 能够出现的最重要原因。 1. 命名空间(Namespaces) 作用:实现资源的隔离,使容器内的进程无法感知或干扰宿主机的其他进程或…

将DeepSeek接入人类大脑会怎样??

昨天在与同事聊起最近大火的DeepSeek, 突然,有一个不切实际的想法,如果DeepSeek或人工智能AI能以某种形式接入人类大脑, 比如,通过芯片不侵入式连接大脑 或者 外带什么眼镜、 隐形眼镜之类的, 能人类有DeepSeek一样的知识量以及响应速度,那得多好,整个世界、人类将会变…

gh-ost工具介绍及使用

💖简介 gh-ost 是一款由GitHub开发的在线DDL(Online Data Definition Language)变更工具,专门用于MySQL数据库。它允许在不锁定表的情况下执行数据库模式变更,从而避免了传统ALTER TABLE命令可能带来的长时间锁表问题,这对于高可用性要求严格的生产环境尤为重要。 它通过…

[算法]KD树

KD树,你看着他好几个维度不明白,但实际上非常简单 \(K\)指维度 因此他可以在二维(多维)平面内进行搜索!!! 1.二维 1.1 建树 对于每一层,我们使用轮转法进行建树 什么意思呢?比如二维,如果\(x\)层为一维(横坐标),则\((x+1)\)层为二维(纵坐标) 确定好维数,接下来…

事务的ACID原则

atomic原子性,事务包含一批读写操作要么都提交,要不都回滚,在并发状态下另一个线程看到的这个线程操作的事务一定是完整的,要不都没看见,要么都看见,不存在看见一半的情况。 consiste一致性,对数字的一组特定的约束条件必须成立,例如转账业务中的进账和出账必须能相抵。…

Python Flask Web应用的二次开发

我选择了一个简单的Python Flask Web应用,它是一个简易的任务管理系统,能实现任务的添加和查看,但存在不少可优化之处。 1.来源 这个简易的任务管理系统是某位学长的开源项目。原作者的目的是提供一个基础的任务管理功能示例,方便开发者学习Flask框架的基本使用。 2.运行环…

Vulnhub-DC-9靶机-SQL注入拿到账户+利用端口敲门连接ssh+信息泄露利用root脚本追加提权

一、环境搭建 选择扫描虚拟机选择靶机路径如果出现以下信息如下修改,修改和虚拟机一样的版本二、信息收集 扫ip nmap -sn 192.168.108.0/24得到靶机ip:192.168.108.143扫开放端口 nmap -p 1-65535 192.168.108.143只开放了两个端口信息如下 22/tcp filtered ssh #filtered是“…