一:前言:

  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. python requests 报错 Caused by ProxyError ('Unable to connect to proxy', OSError('Tunnel connection failed: 403 Tunnel or SSL Forbidden'))

    背景:访问https接口,使用http代理 版本:requests: 2.31.0 从报错可以看出,是proxy相关的报错 调整代码,设定不使用代理,将http与https对应的proxy值置空即可( ...

  2. java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator 问题解决

    目录 报错情况 分析原因 解决方法 本文author:@愷龍 报错情况 在一次使用JSP的jstl时候按照正常引入jstl和使用for each标签出现了如下报错: 分析原因 经过一番调查研究发现原因 ...

  3. 从Workload中优雅隔离Pod

    线上集群中,业务跑着跑着,突然发现有个Pod上出现大量错误日志,其他的Pod是正常的,该如何处理呢? 直接删除Pod? 这样不便于保留现场,可能会影响判断问题的根因 让业务方忍一会,先排查下问题? 会 ...

  4. 面试官:limit 100w,10为什么慢?如何优化?

    在 MySQL 中,limit X,Y 的查询中,X 值越大,那么查询速度也就越慢,例如以下示例: limit 0,10:查询时间大概在 20 毫秒左右. limit 1000000,10:查询时间可 ...

  5. rpm -Uvh *.rpm --nodeps --force

    rpm -Uvh *.rpm --nodeps --force 含义:-U:升级软件,若未软件尚未安装,则安装软件.-v:表示显示详细信息.-h:以"#"号显示安装进度.--for ...

  6. 通过 maven 命令来查看 jar 包的引用关系

    通过 maven 命令来查看 jar 包的引用关系 1.可以通过maven命令来查看jar包的引用关系 mvn dependency:tree -Dverbose -Dincludes=org.cod ...

  7. 【JS设计模式笔记】神奇的魔术师-简单工厂模式(创建型)

    简单工厂模式(Simple Factory):又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例.主要用来创建同一类对象. 第一次需求 开发一个登录模块的需求,用户名输入框如果输入的内容不 ...

  8. 【笔记】理解CSS3之Flexbox布局

    前言 先看一个例子,html代码如下: <ul> <li>1</li> <li>2</li> <li>3</li> ...

  9. RxJS 系列 – Custom Operator

    前言 虽然 RxJS 提供了非常多的 Operators. 但依然会有不够用的时候. 这时就可以自定义 Operator 了. Operator Is Just a Function Observab ...

  10. Vs Code, Visual Studio 2022, Angular and Live Server Running Through Https and IP Address

    前言 之前就写过 angular cli, vs code liveserver, vs 2019 iis express 10, vs code kestrel 使用 https + ip. 但写的 ...