一:前言:

  1. 知识点总结:
  • 面向对象设计:

    • 智能家居强电电路模拟系统:设计了多种控制设备(开关、分档调速器、连续调速器)和受控设备(灯、风扇)的类,并通过继承和多态实现设备的特有行为。
    • 答题判题程序:设计了题目、试卷、学生、答卷等类,通过面向对象的方式管理考试信息。
  • 数据结构:
    • 智能家居强电电路模拟系统:使用图或链表表示电路的连接关系,处理并联和串联电路的组合逻辑。
    • 答题判题程序:使用哈希表(Map)存储题目信息、试卷信息、学生信息、答卷信息和删除题目信息,使用列表(List)存储试卷中的题目及其分值,以及学生的答题信息。
  • 算法:
    • 智能家居强电电路模拟系统:计算电路中的电压、电流、电阻等物理量,处理并联和串联电路的组合逻辑,确保计算结果正确。
    • 答题判题程序:判断答案是否正确,处理多选题和填空题的特殊评分规则,计算总分。
  • 异常处理:
    • 智能家居强电电路模拟系统:处理输入数据的合法性检查,如设备编号、连接信息等,处理边界条件和特殊情况,如电压超出范围、设备未连接等。
    • 答题判题程序:处理输入格式错误的情况,处理题目被删除、题目不存在、试卷总分不为100分等特殊情况。
  1. 题量分析:
  • 智能家居强电电路模拟系统:

    • 类的设计:

      • 控制设备类:开关、分档调速器、连续调速器
      • 受控设备类:白炽灯、日光灯、吊扇、落地扇
      • 电路类:串联电路、并联电路
    • 主控类或函数:
      • 处理输入信息,解析设备和连接信息。
      • 模拟电路行为,计算各设备的状态。
      • 输出设备状态和参数
    • 测试用例:
      • 编写测试用例验证程序的正确性和鲁棒性。
  • 答题判题程序:
    • 类的设计:

      • Question 类:表示题目,包含题目编号、题目内容、标准答案等属性。
      • TestPaper 类:表示试卷,包含试卷号、题目及其分值等属性。
      • Student 类:表示学生,包含学号、姓名等属性。
      • AnswerSheet 类:表示答卷,包含试卷号、学号、答题信息等属性。
    • 主控类或函数:
      • 处理输入信息,解析题目、试卷、学生、答卷、删除题目等信息。
      • 构建题目、试卷、学生、答卷等对象。
      • 模拟答题,计算成绩,处理各种特殊情况。
      • 按照指定格式输出结果。
  1. 难度分析:
  • 智能家居强电电路模拟系统: 题目涉及多个设备和复杂的电路连接,需要综合运用面向对象设计、数据结构、算法等知识。需要处理并联和串联电路的组合逻辑,确保计算结果正确。输入输出处理较为复杂,需要仔细解析和格式化输出,题目难度较大。

  • 答题判题程序: 题目涉及多个数据结构和复杂的逻辑判断,需要综合运用字符串处理、逻辑判断、排序等知识。处理多选题和填空题的特殊评分规则,确保评分结果正确。处理各种特殊情况,如题目被删除、题目不存在、试卷总分不为100分、输入格式错误等。按照指定格式输出结果,确保输出信息的完整性和正确性,题目难度较大。

  1. 综合分析总结:

    这三道题目涵盖了面向对象设计、数据结构、算法、输入输出处理、异常处理等多个方面的知识。每道题目的设计和实现都需要综合运用这些知识,解决实际问题。通过这些题目,可以提升编程能力和问题解决能力,特别是在处理复杂数据结构和逻辑判断方面。

二:设计与分析

1. 第四道大作业:

  • 题目描述: 这道题要求我们设计并实现一个小巧的在线考试系统,能够处理不同类型的问题,比如普通的问答题、选择题和填空题。这个系统不仅要能够接收题目信息(包括题目的编号、内容和正确答案)、试卷信息(包含哪些题目以及每个题目的分数)、学生信息(学号和姓名),还要能够接收学生的答题情况。特别的是,这个系统还需要支持删除题目,即使这些题目已经被包含在试卷里了,删除后这些题目的分数就会变成0分。系统要能够根据学生的答案自动评分,考虑到不同题型的评分规则,最后,系统要能够输出每个学生的答题详情和总成绩,同时还要检查试卷的总分是否达到100分,如果没有达到也要给出提示。此外,系统还需要能够处理一些异常情况,比如输入格式错误或者试卷号、学号引用错误等问题,确保系统的稳定性和准确性。整个过程中,所有的信息都可以以任意顺序输入,系统需要能够灵活应对。

  • 基本思路: 这道题要用Java实现一个小型在线考试系统。首先,用哈希表存储题目、试卷和学生信息,列表存储学生的答题信息,集合记录被删除的题目。然后,读取和解析输入信息,根据前缀(如#N:#T:#X:等)将信息存入相应的数据结构。接着,遍历每个学生的答题信息,检查题目是否存在、是否被删除,比对答案并根据题目类型计算得分。最后,按学号和试卷号排序,输出每个学生的答题详情和总分,检查试卷总分是否为100分并给出提示,处理试卷号或学号引用错误的情况。

  • 画类图,缕清关系:



总共定义了以下几个类:

  1. ExamQuestionInfo:主要负责存储题目信息,包括题目ID、内容、正确答案、是否有效、是否为多选题等
  2. DataManipulationClass:包含一些辅助方法,但目前的方法没有实际用途,可以考虑移除或添加实际功能。
  3. ExamPaperDetails:存储试卷信息,包括试卷ID和每个题目的分数。
  4. MainClass:包含一些模拟方法,但目前的方法没有实际用途,可以考虑移除或添加实际功能。
  5. StudentAnswerRecord:存储学生的答题记录,包括试卷ID、学生标识和每题的答案。
  6. Main:主类,包含主方法main,负责读取输入、处理输入和生成输出。
  • ExamQuestionInfo类核心代码:
class ExamQuestionInfo {
private int questionId;
private String questionContent;
private String correctAnswerText;
private boolean isValidStatus = true;
private boolean isMultipleChoiceType; public ExamQuestionInfo(int id, String content, String answer, boolean isMultipleChoice) {
this.questionId = id;
this.questionContent = content;
this.correctAnswerText = answer;
this.isMultipleChoiceType = isMultipleChoice;
} public boolean checkAnswerMatch(String studentAnswer) {
return correctAnswerText.equalsIgnoreCase(studentAnswer);
} public boolean isAnswerPartiallyCorrect(String studentAnswer) {
if (isMultipleChoiceType) {
Set<String> correctAnswerSet = new HashSet<>(List.of(correctAnswerText.split(" ")));
Set<String> studentAnswerSet = new HashSet<>(List.of(studentAnswer.split(" ")));
return !correctAnswerSet.equals(studentAnswerSet) && correctAnswerSet.containsAll(studentAnswerSet) && studentAnswerSet.size() < correctAnswerSet.size();
} else {
return correctAnswerText.contains(studentAnswer) && !studentAnswer.equals(correctAnswerText);
}
} public void setInvalidStatus() {
isValidStatus = false;
} public boolean isValid() {
return isValidStatus;
} public boolean isMultipleChoice() {
return isMultipleChoiceType;
}
}
  • ExamPaperDetails类核心代码:
class ExamPaperDetails {
private int paperId;
private Map<Integer, Integer> questionScoreMap = new HashMap<>(); public ExamPaperDetails(int id) {
this.paperId = id;
} public void addQuestionScore(int questionId, int score) {
questionScoreMap.put(questionId, score);
} public boolean verifyTotalScore() {
int totalScore = questionScoreMap.values().stream().mapToInt(Integer::intValue).sum();
if (totalScore != 100) {
System.out.println("alert: full score of test paper " + paperId + " is not 100 points");
return false;
}
return true;
} public boolean confirmQuestionExistence(Map<Integer, ExamQuestionInfo> allQuestions) {
return questionScoreMap.keySet().stream().allMatch(allQuestions::containsKey);
} public Map<Integer, Integer> getQuestionScoreMap() {
return questionScoreMap;
}
}
  • StudentAnswerRecord类核心代码:
class StudentAnswerRecord {
private int relatedPaperId;
private String studentIdentifier;
private Map<Integer, String> studentAnswers = new HashMap<>(); public StudentAnswerRecord(int paperId, String studentId) {
this.relatedPaperId = paperId;
this.studentIdentifier = studentId;
} public void recordAnswer(int questionId, String answer) {
studentAnswers.put(questionId, answer);
} public String getStudentIdentifier() {
return studentIdentifier;
} public int getRelatedPaperId() {
return relatedPaperId;
} public Map<Integer, String> getStudentAnswers() {
return studentAnswers;
}
}
  • Main类核心代码:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<Integer, ExamQuestionInfo> questions = new HashMap<>();
Map<Integer, ExamPaperDetails> examPapers = new HashMap<>();
Map<String, String> students = new HashMap<>();
Map<String, List<StudentAnswerRecord>> answers = new HashMap<>();
Set<Integer> deletedQuestions = new HashSet<>(); processInput(scanner, questions, examPapers, students, answers, deletedQuestions);
generateAndOutputResults(questions, examPapers, students, answers, deletedQuestions);
scanner.close();
} private static void processInput(Scanner scanner, Map<Integer, ExamQuestionInfo> questions, Map<Integer, ExamPaperDetails> examPapers,
Map<String, String> students, Map<String, List<StudentAnswerRecord>> answers,
Set<Integer> deletedQuestions) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if ("end".equals(line)) break;
if (line.startsWith("#N:") || line.startsWith("#Z:") || line.startsWith("#K:")) {
handleQuestionInput(line, questions);
} else if (line.startsWith("#T:")) {
handleExamPaperInput(line, examPapers, questions);
} else if (line.startsWith("#X:")) {
handleStudentInput(line, students);
} else if (line.startsWith("#S:")) {
handleStudentAnswerInput(line, examPapers, students, answers);
} else if (line.startsWith("#D:N-")) {
handleDeletedQuestionInput(line, questions, deletedQuestions);
} else {
System.out.println("wrong format:" + line);
}
}
} private static void handleQuestionInput(String line, Map<Integer, ExamQuestionInfo> questions) {
// Handle question input and populate the questions map
} private static void handleExamPaperInput(String line, Map<Integer, ExamPaperDetails> examPapers, Map<Integer, ExamQuestionInfo> questions) {
// Handle exam paper input and populate the examPapers map
} private static void handleStudentInput(String line, Map<String, String> students) {
// Handle student input and populate the students map
} private static void handleStudentAnswerInput(String line, Map<Integer, ExamPaperDetails> examPapers, Map<String, String> students,
Map<String, List<StudentAnswerRecord>> answers) {
// Handle student answer input and populate the answers map
} private static void handleDeletedQuestionInput(String line, Map<Integer, ExamQuestionInfo> questions, Set<Integer> deletedQuestions) {
// Handle deleted question input and update the questions and deletedQuestions sets
} private static void generateAndOutputResults(Map<Integer, ExamQuestionInfo> questions, Map<Integer, ExamPaperDetails> examPapers,
Map<String, String> students, Map<String, List<StudentAnswerRecord>> answers,
Set<Integer> deletedQuestions) {
// Generate and output the results based on the processed data
}
}
  • 踩坑心得:

    • 数据结构的选择:

      • 使用 Map 来存储题目、试卷、学生信息等是非常合适的,因为这些数据通常需要通过唯一的标识符(如题目ID、试卷ID、学生ID)快速查找。
      • 使用 List 来存储学生的答题记录,因为一个学生可能多次参加同一份试卷的考试。
    • 性能优化:

      • 对于大数据量的输入,需要考虑性能优化。例如,使用 HashMap 而不是 TreeMap 可以提高查找速度。
      • 在生成结果时,对数据进行预处理和排序可以提高效率。
    • 边界条件:

      • 处理好各种边界条件,如空输入、无效的题目ID、空答案等。这些边界条件很容易被忽略,但在实际运行中可能会导致问题。
  • 改进建议:

    • 模块化设计:

      • 将每个功能模块化,每个模块负责一个特定的任务。这样可以提高代码的可读性和可维护性。
      • 例如,可以将 handleQuestionInput、handleExamPaperInput 等方法封装成独立的类或接口。
    • 异常处理改进:
      • 对异常处理进行细化,区分不同的异常类型,提供更具体的错误信息。
      • 例如,可以区分输入格式错误、数据不存在等不同类型的异常,并给出相应的提示。

2.第五道大作业:

  • 题目描述: 本题要求设计并实现一个智能家居强电电路模拟系统,该系统能够模拟控制设备(包括开关、分档调速器、连续调速器)和受控设备(包括白炽灯、日光灯、吊扇)之间的连接和工作状态。系统需要解析输入的设备信息、连接信息以及控制设备的调节信息,根据这些信息构建电路模型,计算并更新各设备的工作状态或参数,如开关的开启/关闭状态、调速器的档位、灯具的亮度以及风扇的转速。特别地,系统需遵循特定的连接规则,如不考虑调速器之间的串联、控制设备的并联或反馈接入,并且所有连接信息按电路从电源到接地的顺序依次输入。最终,系统应按照指定格式输出所有设备的状态或参数,包括控制设备的档位或状态、灯具的亮度、风扇的转速等。此外,系统还需处理输入电压或电压差的计算,采用截尾规则保留整数部分,并确保所有计算过程中使用double类型以避免精度误差。

  • 基本思路: 解题的核心思路是:首先,定义设备类(开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇),每个类包含必要的属性和方法来表示设备的状态和行为。接着,构建一个电路模型来管理设备之间的连接关系,解析输入的连接信息,确保遵循连接规则,并处理电压的逐级传递。然后,实现状态更新机制,根据用户对控制设备的调节指令(如开关切换、调速器调整),更新设备状态并重新计算受控设备的工作参数(如亮度、转速)。最后,设计输出模块,按照指定格式输出所有设备的当前状态或参数,确保输出顺序和格式符合要求。主程序整合这些模块,处理用户输入,执行状态更新,并生成最终输出。

  • 画类图,缕清关系:



定义了以下类:

Test(主类):处理用户输入,注册设备和电路,执行控制命令,输出设备状态。

CircuitDevice(抽象类):提供设备的基本属性和方法。

ControlledDevice(抽象类,继承自 CircuitDevice):提供受控设备的电压计算和状态输出方法。

ControllingDevice(抽象类,继承自 CircuitDevice):提供控制设备的命令执行方法。

SwitchDevice(继承自 ControllingDevice):实现开关设备的开关状态切换和电压计算。

GearDevice(继承自 ControllingDevice):实现分档调速器的档位调整和电压计算。

ContinuousSpeedDevice(继承自 ControllingDevice):实现连续调速器的档位比例设置和电压计算。

LightDevice(继承自 ControlledDevice):实现灯具的亮度计算和状态输出

RelayDevice(继承自 ControlledDevice):实现继电器的亮度计算和状态输出。

MotorDevice(继承自 ControlledDevice):实现风扇的转速计算和状态输出。

SeriesCircuit(继承自 ControlledDevice):实现串联电路的电压计算和状态输出。

  • Test类核心代码:
public class Test {
private static final double VCC = 220.0;
private static Map<String, CircuitDevice> devices = new HashMap<>();
private static List<SeriesCircuit> circuits = new ArrayList<>(); public static void main(String[] args) {
// 主程序入口
} private static void handleInput(String input) {
// 处理输入
} private static void registerConnection(String connectionInfo) {
// 注册连接
} private static boolean isDevice(String part) {
// 判断是否为设备
} private static CircuitDevice createDevice(String deviceId) {
// 创建设备
} private static void executeCommand(String command) {
// 执行命令
} private static void printDeviceStatuses() {
// 打印设备状态
} private static int getDeviceOrder(char type) {
// 获取设备排序顺序
}
}
  • CircuitDevice 类核心代码:
abstract static class CircuitDevice {
protected final String id;
protected final char type; CircuitDevice(String id) {
this.id = id;
this.type = id.charAt(0);
} abstract String getStatus();
}
  • ControlledDevice 类核心代码:
abstract static class ControlledDevice extends CircuitDevice {
ControlledDevice(String id) {
super(id);
} abstract double calculateVoltage();
}
  • ControllingDevice 类核心代码:
abstract static class ControllingDevice extends CircuitDevice {
ControllingDevice(String id) {
super(id);
} abstract void executeCommand(String command);
}
  • SwitchDevice 类核心代码:
static class SwitchDevice extends ControllingDevice {
private boolean closed; SwitchDevice(String id) {
super(id);
} @Override
void executeCommand(String command) {
// 执行开关命令
} @Override
String getStatus() {
// 获取开关状态
} double calculateVoltage() {
// 计算电压
}
}
  • GearDevice 类
static class GearDevice extends ControllingDevice {
private int gear; GearDevice(String id) {
super(id);
} @Override
void executeCommand(String command) {
// 执行档位命令
} @Override
String getStatus() {
// 获取档位状态
} double calculateVoltage() {
// 计算电压
}
}
  • ContinuousSpeedDevice 类核心代码:
static class ContinuousSpeedDevice extends ControllingDevice {
private double ratio; ContinuousSpeedDevice(String id) {
super(id);
} @Override
void executeCommand(String command) {
// 执行连续速度命令
} @Override
String getStatus() {
// 获取连续速度状态
} double calculateVoltage() {
// 计算电压
}
}
  • LightDevice 类核心代码:
static class LightDevice extends ControlledDevice {
private double voltage; LightDevice(String id) {
super(id);
} @Override
double calculateVoltage() {
// 计算电压
} @Override
String getStatus() {
// 获取灯光状态
}
}
  • RelayDevice 类核心代码:
static class RelayDevice extends ControlledDevice {
private double voltage; RelayDevice(String id) {
super(id);
} @Override
double calculateVoltage() {
// 计算电压
} @Override
String getStatus() {
// 获取继电器状态
}
}
  • MotorDevice 类核心代码:
static class MotorDevice extends ControlledDevice {
private double voltage; MotorDevice(String id) {
super(id);
} @Override
double calculateVoltage() {
// 计算电压
} @Override
String getStatus() {
// 获取电机状态
}
}
  • SeriesCircuit 类核心代码:
static class SeriesCircuit extends ControlledDevice {
private final List<String> parts; SeriesCircuit(String[] parts) {
super(parts[0].split("-")[0]);
this.parts = Arrays.asList(parts);
} @Override
double calculateVoltage() {
// 计算总电压
}* @Override
String getStatus() {
// 获取电路状态
}
}
  • 踩坑心得:

    • 电压计算:

      • 电压计算逻辑复杂,容易出错。特别是在串联电路中,多个设备的电压累加需要特别注意。
      • 具体表现:电压计算结果与预期不符,导致设备状态显示错误。
      • 解决过程:逐个设备调试电压计算逻辑,确保每个设备的电压计算正确无误。
    • 设备状态更新
      • 问题:设备状态更新逻辑复杂,容易遗漏或出错。特别是多个设备之间的交互。
      • 具体表现:设备状态更新不及时或更新错误,导致程序行为异常。
      • 解决过程:在每个设备类中明确实现 executeCommand 方法,并确保状态更新逻辑正确。添加日志记录,便于调试。
  • 改进建议:
    • 模块化设计: 将不同的功能模块化,例如输入解析、设备管理、状态输出等,分别放在不同的类或方法中,提高代码的可读性和可维护性。
    • 异常处理: 增强异常处理机制,确保程序在遇到非法输入或错误时能够优雅地处理,而不是直接崩溃。

      例如:
private static CircuitDevice createDevice(String deviceId) {
try {
char deviceType = deviceId.charAt(0);
switch (deviceType) {
case 'K': return new SwitchDevice(deviceId);
case 'F': return new GearDevice(deviceId);
case 'L': return new ContinuousSpeedDevice(deviceId);
case 'B': return new LightDevice(deviceId);
case 'R': return new RelayDevice(deviceId);
case 'D': return new MotorDevice(deviceId);
default: throw new IllegalArgumentException("Unknown device type: " + deviceType);
}
} catch (IllegalArgumentException e) {
System.err.println("Failed to create device: " + deviceId);
System.err.println(e.getMessage());
return null; // 返回 null 表示创建失败
} catch (Exception e) {
System.err.println("An unexpected error occurred while creating device: " + deviceId);
System.err.println(e.getMessage());
e.printStackTrace(); // 打印堆栈跟踪,便于调试
return null; // 返回 null 表示创建失败
}
}

3. 第六道大作业:

  • 题目描述: 这道Java大作业题要求设计一个智能家居强电电路模拟系统,模拟家庭中各种电器设备的连接和控制逻辑,并输出设备的工作状态。系统需要模拟的设备包括开关、分档调速器、连续调速器(控制设备)和白炽灯、日光灯、吊扇、落地扇(受控设备)。输入信息包括设备信息、连接信息、控制设备调节信息、电源接地标识、串联电路信息和并联电路信息。输出信息按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇的顺序依次输出所有设备的状态或参数。计算过程中出现的小数部分用截尾规则处理,最终输出时保留整数部分。所有连接信息按从电源到接地的顺序输入,调速器的输入端只能直连VCC,且整个电路最多只有一个调速器。本次迭代只考虑一条包含并联电路的主电路。
  • 基本思路:难度太大,做不出来.

三:总结:

  • 第一道题目:答题程序

    • 学习收获:

      • 编程实践能力方面:通过这次答题程序的开发,我不仅巩固了对Java编程语言的理解,还提升了处理复杂输入输出的能力。题目涉及多种信息的输入(题目信息、试卷信息、学生信息、答卷信息、删除题目信息),需要对这些信息进行解析、处理和输出。这让我学会了如何使用Map、List等数据结构来管理和处理复杂的数据关系,确保程序的高效运行。

      • 问题解决技巧方面:在实现答题程序的过程中,遇到了许多具体的技术问题,例如如何高效地查找和删除题目信息,如何处理不同类型的题目评分等。这些问题促使我深入学习了Java集合框架的相关知识,以及如何合理设计类和接口来提高代码的复用性和可扩展性。同时,我也更加熟练地使用了调试工具,提高了代码调试效率。

      • 软件工程思想方面:这次作业让我深刻体会到了模块化设计的重要性。通过对题目的分析,我将程序分解为多个模块,如题目管理模块、试卷管理模块、学生信息管理模块等,每个模块负责处理特定的功能,使得整个程序结构清晰,易于维护。此外,我还学会了如何在代码中添加详细的注释和日志,这对于团队协作和后期维护都非常重要。

    • 需要进一步学习及研究的地方:

      • 设计模式的应用:虽然在这次作业中尝试使用了一些简单的设计模式,如单例模式和工厂模式,但在更复杂的设计模式应用上仍然存在不足。例如,如何在大型项目中有效地使用策略模式、观察者模式等,这些都需要在未来的实践中不断学习和积累。

      • 性能优化:这次作业的规模相对较小,但在处理大量数据时,程序的性能表现就显得尤为重要。未来需要加强对算法和数据结构的学习,掌握更多的性能优化技巧,以应对更大规模的数据处理需求。

      • 测试驱动开发(TDD):虽然这次作业中也有一定的测试要求,但整体上对TDD的理解还不够深入。未来需要更多地学习和实践TDD的思想,学会如何编写高质量的单元测试,确保代码的质量。

    • 对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见

      • 课程内容:建议增加一些实战项目的练习,让我们在实际项目中应用所学知识,增强实战经验。同时,增加一些软件工程方法论的内容,帮助我们了解软件开发的整体流程。

      • 作业和实验:希望作业可以设计得更具有挑战性和实用性,鼓励我们在完成任务的同时,也能发挥创意,探索不同的解决方案。实验环节希望能提供更多指导和支持,特别是在遇到难题时,能够有更多资源可供参考。

      • 课上组织方式:希望课堂上能增加一些互动环节,比如小组讨论,让大家有机会互相交流学习心得,促进共同进步。教师可以分享一些个人经验和行业动态,拓宽我们的视野。

  • 第二道题目:智能家居强电电路模拟系统

    • 学习收获:

      • 编程实践能力方面:通过这次智能家居强电电路模拟系统的开发,我深入了解了物联网技术在家庭自动化中的应用。特别是对控制设备(开关、分档调速器、连续调速器)和受控设备(灯、风扇)的模拟,使我掌握了如何使用Java来建模和处理复杂的电路逻辑。通过处理不同设备的连接和状态变化,我学会了如何使用面向对象的方法来设计和实现系统,使代码更加模块化和可维护。

      • 问题解决技巧方面:在实现智能家居电路模拟系统的过程中,遇到了许多具体的技术问题,例如如何处理不同设备之间的连接关系,如何计算电压和输出状态等。这些问题促使我深入学习了Java中的数据结构和算法,以及如何合理设计类和方法来提高代码的复用性和可扩展性。同时,我也更加熟练地使用了调试工具,提高了代码调试效率。

      • 软件工程思想方面:这次作业让我深刻体会到了模块化设计的重要性。通过对电路设备的分类和建模,我将程序分解为多个模块,如控制设备模块、受控设备模块、连接信息模块等,每个模块负责处理特定的功能,使得整个程序结构清晰,易于维护。此外,我还学会了如何在代码中添加详细的注释和日志,这对于团队协作和后期维护都非常重要。

    • 需要进一步学习及研究的地方

      • 设计模式的应用:虽然在这次作业中尝试使用了一些简单的设计模式,如单例模式和工厂模式,但在更复杂的设计模式应用上仍然存在不足。例如,如何在大型项目中有效地使用策略模式、观察者模式等,这些都需要在未来的实践中不断学习和积累。

      • 性能优化:这次作业的规模相对较小,但在处理大量数据时,程序的性能表现就显得尤为重要。未来需要加强对算法和数据结构的学习,掌握更多的性能优化技巧,以应对更大规模的数据处理需求。

      • 测试驱动开发(TDD):虽然这次作业中也有一定的测试要求,但整体上对TDD的理解还不够深入。未来需要更多地学习和实践TDD的思想,学会如何编写高质量的单元测试,确保代码的质量。

    • 对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见

      课程内容:建议增加一些实战项目的练习,让我们在实际项目中应用所学知识,增强实战经验。同时,增加一些软件工程方法论的内容,帮助我们了解软件开发的整体流程。

      • 作业和实验:希望作业可以设计得更具有挑战性和实用性,鼓励我们在完成任务的同时,也能发挥创意,探索不同的解决方案。实验环节希望能提供更多指导和支持,特别是在遇到难题时,能够有更多资源可供参考。

    通过这两道题目的总结,我认识到自己在编程实践和理论知识方面都有了进步,但也看到了自己还需要努力的地方。希望在未来的学习中,能够继续提升自己的技能,并将所学应用于实际项目中。

java4~6次大作业全面总结的更多相关文章

  1. 数据库大作业--由python+flask

    这个是项目一来是数据库大作业,另一方面也算是再对falsk和python熟悉下,好久不用会忘很快. 界面相比上一个项目好看很多,不过因为时间紧加上只有我一个人写,所以有很多地方逻辑写的比较繁琐,如果是 ...

  2. 程设大作业xjb写——魔方复原

    鸽了那么久总算期中过[爆]去[炸]了...该是时候写写大作业了 [总不能丢给他们不会写的来做吧 一.三阶魔方的几个基本定义 ↑就像这样,可以定义面的称呼:上U下D左L右R前F后B UD之间的叫E,LR ...

  3. 大作业NABC分析结果

    大作业NABC分析结果 这次的大作业计划制作一款关于七巧板的游戏软件.关于编写的APP的NABC需求分析: N:需求 ,本款软件主要面向一些在校的大学生,他们在校空闲时间比较多,而且热衷于一些益智类游 ...

  4. [留念贴] C#开发技术期末大作业——星月之痕

    明天就要去上海大学参加 2015赛季 ACM/ICPC最后一场比赛 —— EC-Final,在这之前,顺利地把期末大作业赶出来了. 在这种期末大作业10个人里面有9个是从网上下载的国内计算机水平五六流 ...

  5. Hadoop综合大作业

    Hadoop综合大作业 要求: 用Hive对爬虫大作业产生的文本文件(或者英文词频统计下载的英文长篇小说)词频统计. 用Hive对爬虫大作业产生的csv文件进行数据分析 1. 用Hive对爬虫大作业产 ...

  6. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  7. 期末Java Web大作业----简易的学生管理系统

    学生信息管理系统(大作业) 2018-12-21:此文章已在我的网站更新,添加视图介绍等信息,源码请移步下载https://www.jeson.xin/javaweb-sims.html PS:首先不 ...

  8. CSAPP HITICS 大作业 hello's P2P by zsz

    摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知 ...

  9. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  10. 最课程阶段大作业之01:使用SVN实现版本控制

    版本控制在友军那里都是放在整个培训的最后阶段才开始讲的,但我们打算放到SE阶段.与其匆匆在项目实战阶段弄个半生不熟,然后进入实际工作中接受他人对你的怀疑,不如……早死早超生~~~. 可是,我们毕竟现在 ...

随机推荐

  1. 图解Zabbix设置邮件报警

    Zabbix设置邮件告警   前提条件: Zabbix Server 和 Zabbix Agent都已安装完毕,并已启动   1.添加主机   2.配置邮件告警,这里以VSFTP服务为例 yum in ...

  2. 一文剖析TCP三次握手、四次挥手

    TCP三次握手四次挥手 问题 TCP建立连接为什么是三次握手,而不是两次或四次? TCP,名为传输控制协议,是一种可靠的传输层协议,IP协议号为6. 顺便说一句,原则上任何数据传输都无法确保绝对可靠, ...

  3. windows docker(25.0.3) 运行 1.4.1 nacos 容器

    Docker Desktop 设定图标 -> Docker Engine 设定国内镜像源 添加配置: { "builder": { "gc": { &qu ...

  4. Unrecognized SSL message, plaintext connection?

    报错:Unrecognized SSL message, plaintext connection? 修改:把 requestContext.setScheme(Scheme.HTTPS);修改为 r ...

  5. 消息队列的对比测试与RocketMQ使用扩展

    消息队列的对比测试与RocketMQ使用扩展     本文的主要内容包括以下几个方面: 原有的消息技术选型 RocketMQ与kafka 测试对比 如何构建自己的消息队列服务 RocketMQ扩展改造 ...

  6. web前端常用的五种方式搭建本地静态html页面服务器

    方式一:live-server live-server是一款npm工具,可以在项目目录启动一个node服务,然后直接在浏览器中预览,并且自动全局监听实时更新. 两种安装方式: 全局安装 npm i l ...

  7. JavaScript – Async Iterator & Generator

    前言 要看懂这篇请先看下面几篇 JavaScript – Iterator JavaScript – Generator Function JavaScript – Promise JavaScrip ...

  8. C++ char*类型与vector类型的相互转换

    char*类型与vector<char> 类型的相互转换 很多时候需要使用动态的字符串,但是char*难以完成相应的扩容操作,而动态数组vector则可以简单地完成,结合二者特性就可以完成 ...

  9. 运输小猫娘之再续 5k 传奇之寻找人道主义素数

    原文 前情提要 本章主角 5k_sync_closer 第一章 从再续前缘到苦心寻找满足最优条件的人道主义美丽素数 上回书说到,5k 因为拯救大家被炸断了 \(1000000007\) 米中的十五千米 ...

  10. SXYZ-12天集训

    Day 1(6月25日) 早上四点多钟起床做七点到九点四十的飞机到杭州萧山(空客330) 然后坐一小时车到绍兴一中对面的酒店. 中午曾老师请我们在酒店隔壁吃了一桌家常菜(味道可以),以此庆祝曾老师52 ...