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

在软件开发中,对现有项目进行优化和二次开发是一种常见的任务。本次实验中,我选择了一个基于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;
}`

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

posted @ 2025-02-27 22:08  林盛毅  阅读(34)  评论(0)    收藏  举报