此项目源自CSDN的Java大作业项目(学生管理系统)https://blog.csdn.net/qq_46162008/article/details/140255206?sharetype=blog&shareId=140255206&sharerefer=APP&sharesource=qq_61323695&sharefrom=link。
这是基于JAVA的环境下运行的学生管理系统,主要功能有学生信息的添加、删除、查找单个学生、查看所有学生信息、以及修改学生个人信息。附程序运行截图:
添加学生个人信息:
修改个人信息后查看个人信息:
删除个人信息:
功能大致如上。
附本程序源代码:
点击查看代码此程序中出现的问题:
1.输入后的信息不能保存到本地,每一次打开都需要重新输入信息。
更新代码后实现
保存功能:在退出程序时,会自动将学生信息保存到 students.txt 文件中。
加载功能:在程序启动时,会自动从 students.txt 文件中加载之前保存的学生信息。
保存格式如图:
2.缺少输入错误提示
在删除或修改学生信息时,如果用户输入的学号不存在,程序不会提示用户。
更新后实现了在删除、修改、查找学生信息时,增加提示信息。
增加了提示信息,提醒用户输入的信息是否正确。
3.代码中存在重复的输入代码,可能会导致输入异常,无法正确读取输入
在使用 Scanner 时,混合使用 nextInt()、nextDouble() 和 next() 导致输入异常,无法正确读取用户输入。
点击查看代码- student.id = scanner.nextInt();
- student.name = scanner.next();
- student.chinese = scanner.nextDouble();
复制代码 解决方法为在每次读取输入数据后添加scanner.nextLine()清除输入缓冲区点击查看代码- private static Student createStudent(Scanner scanner) {
- Student student = new Student();
- System.out.println("请输入学号:");
- student.id = scanner.nextInt();
- scanner.nextLine(); // 清除缓冲区
- System.out.println("请输入姓名:");
- student.name = scanner.nextLine();
- System.out.println("请输入语文成绩:");
- student.chinese = scanner.nextDouble();
- scanner.nextLine(); // 清除缓冲区
- System.out.println("请输入高数成绩:");
- student.math = scanner.nextDouble();
- scanner.nextLine(); // 清除缓冲区
- System.out.println("请输入C语言成绩:");
- student.c_language = scanner.nextDouble();
- scanner.nextLine(); // 清除缓冲区
- System.out.println("请输入数据结构成绩:");
- student.data_structure = scanner.nextDouble();
- return student;
- }
复制代码 4.菜单显示不够美观:
修改后如下:
修改的代码如下:
点击查看代码上述代码省略了学生类的声明。重构的代码截图已在上述问题陈述中展示。总结
在修改代码和逆向软件分析的过程中,难点主要在于理解代码、定位错误代码。理解代码逻辑需要花费大量时间阅读代码,梳理变量、函数和类之间的关系。定位问题则需要通过调试跟踪代码执行过程,找出错误的代码。修改代码时还需注意避免引入新的错误,这需要对更改的代码进行测试。花时间比较久的是需要重构代码,对源代码结构进行改进、减少冗余代码,还要通过改进算法等优化程序的性能。逆向软件工程中,代码分析是关键,需要使用工具和技术来理解代码结构和功能。功能推测是在没有文档或注释的情况下,通过代码行为和输出来推断其功能。代码重构旨在改进代码质量,提高可读性和可维护性,这需要考虑代码的结构、可扩展性和可测试性。整个过程耗时较长,尤其是学习新技术、重构代码和优化性能等方面。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |