做网站需要先申请域名,专业网络推广服务,手机站建设,发朋友圈吸引顾客话术一、目的
通过用户图形界面设计#xff0c;掌握JavaSwing开发的基本方法。
二、实验内容与设计思想
实验内容#xff1a;
课本验证实验#xff1a;
Example10_6 图 1
Example10_7 图 2 图 3
Example10_15 图 4
设计思想#xff1a;
①学生信息管理系统#xff1a…一、目的
通过用户图形界面设计掌握JavaSwing开发的基本方法。
二、实验内容与设计思想
实验内容
课本验证实验
Example10_6 图 1
Example10_7 图 2 图 3
Example10_15 图 4
设计思想
①学生信息管理系统
※结果截图 图 5 窗口效果图 图 6 写入学生信息 图 7 写入学生信息成功 图 8 输入查询学生的ID 图 9 查询成功 图 10 存储学生信息的文件 图 11 加载学生信息成功 图 12 输入查询加载后学生的ID 图 13 查询成功 图 14 输入不存在的学生ID(异常处理) ※设计思路
1、该应用程序通过一个图形用户界面(GUI)允许用户输入和查看学生信息。
2、用户可以通过Save按钮保存输入的学生信息Load按钮加载已保存的学生信息Query按钮3、查询特定学生信息。
4、学生信息包括ID姓名年龄专业以及性别。
5、为了实现对学生信息的存储和查询程序使用了Java中的HashMap数据结构。 ※主要代码结构
1、在StudentInfoGUI构造函数中初始化组件并添加事件监听器。
2、定义三个按钮“Save”“Load”和“Query”并为每个按钮添加一个动作监听器。
3、定义一个JPanel并添加组件以显示学生信息。
4、定义三个私有方法saveStudentInfo(), loadStudentInfo() 和 queryStudentInfo()。这些方法处理按钮的点击事件。
5、在主窗口中显示所有组件。 ※主要代码段的文字分析
1、JTextField idField, nameField, ageField, majorField;这些是用于输入学生信息的文本框。
2、JCheckBox maleCheckBox, femaleCheckBox;这些是用于选择学生性别的复选框。
3、JTextArea outputArea;这是一个文本区域用于显示输出信息。
4、MapString, Student students;这是一个HashMap用于存储学生信息。键是一个字符串学生的ID值是一个Student对象。
5、saveButton.addActionListener(new ActionListener() {...});为Save按钮添加一个动作监听器当点击该按钮时调用saveStudentInfo()方法。
6、loadButton.addActionListener(new ActionListener() {...});为Load按钮添加一个动作监听器当点击该按钮时调用loadStudentInfo()方法。
7、queryButton.addActionListener(new ActionListener() {...});为Query按钮添加一个动作监听器当点击该按钮时调用queryStudentInfo()方法。
8、JPanel panel new JPanel(new GridLayout(7, 2));创建一个新的JPanel并设置其布局为7行2列的网格布局。
9、panel.add(new JLabel(ID:)); panel.add(idField);向面板添加标签和文本框以输入学生ID。
10、panel.add(new JLabel(Name:)); panel.add(nameField);向面板添加标签和文本框以输入学生姓名。
11、panel.add(new JLabel(Age:)); panel.add(ageField);向面板添加标签和文本框以输入学生年龄。
12、panel.add(new JLabel(Major:)); panel.add(majorField);向面板添加标签和文本框以输入学生专业。 三、实验使用环境
Eclipse集成开发环境 四、实验小结
一、实验中遇到的问题及解决过程
在本次实验中我遇到了以下几个问题
对题目理解不准确在实验初期由于没有仔细审题导致我对实验任务的要求理解不准确。后来通过与同学和老师交流我逐渐明确了实验任务的目标和要求。
2.代码逻辑错误在编写代码的过程中我发现自己的代码逻辑有错误导致程序无法正常运行。经过仔细排查和调试最终找到了问题所在并进行了修复。
3.技术难点在实验过程中我遇到了一些技术难点比如如何使用Java中的多线程等。通过查阅相关资料和请教同学我逐渐掌握了这些技术难点。
二、实验中产生的错误及原因分析
在实验中我主要出现了以下几个错误
1.语法错误在编写代码的过程中由于疏忽大意导致出现了语法错误。这些错误在编译阶段就被发现并及时修复。
2.逻辑错误由于代码逻辑复杂我在编写代码的过程中出现了逻辑错误。这些错误在测试阶段被发现并通过调试进行了修复。
3.运行错误由于环境配置问题或者代码本身的问题导致程序在运行时出现了错误。这些错误通过仔细排查和调试得到了解决。
三、实验体会和收获
通过本次实验我获得了以下体会和收获
1.仔细审题在实验开始前一定要仔细审题明确实验任务的目标和要求。这样可以避免在实验过程中走弯路。
2.多交流在实验过程中要多与同学和老师交流共同解决问题。这样可以拓宽自己的思路学到更多的知识。
3.善于总结在实验结束后要善于总结自己的实验结果和经验教训。这样可以加深对知识的理解和记忆为以后的实验打下良好的基础。
四、结论
通过本次Java程序设计实验我深入了解了Java语言的基本特性和编程方法掌握了多线程等复杂技术的使用方法。虽然在实验过程中遇到了一些问题和挫折但通过不断地学习和探索我最终成功地完成了实验任务。这次实验让我更加深刻地认识到编程的复杂性和挑战性同时也让我更加坚定了自己学习编程的决心和信心。我相信在未来的学习和工作中我会更加努力地学习和掌握更多的编程知识和技能。
五、参考文献
[1]耿祥义,张跃平Java面向对象程序设计第3版 ,清华大学出版社,2020
六、源代码附件
第一题
package test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class StudentInfoGUI extends JFrame { private JTextField idField, nameField, ageField, majorField; private JCheckBox maleCheckBox, femaleCheckBox; private JTextArea outputArea; private MapString, Student students; public StudentInfoGUI() { students new HashMap(); idField new JTextField(10); nameField new JTextField(10); ageField new JTextField(10); majorField new JTextField(10); maleCheckBox new JCheckBox(Male); femaleCheckBox new JCheckBox(Female); outputArea new JTextArea(10, 30); outputArea.setEditable(false); JButton saveButton new JButton(Save); JButton loadButton new JButton(Load); JButton queryButton new JButton(Query); saveButton.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent e) { saveStudentInfo(); } }); loadButton.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent e) { loadStudentInfo(); } }); queryButton.addActionListener(new ActionListener() { Override public void actionPerformed(ActionEvent e) { queryStudentInfo(); } }); JPanel panel new JPanel(new GridLayout(7, 2)); panel.add(new JLabel(ID:)); panel.add(idField); panel.add(new JLabel(Name:)); panel.add(nameField); panel.add(new JLabel(Age:)); panel.add(ageField); panel.add(new JLabel(Major:)); panel.add(majorField); panel.add(new JLabel(Gender:)); panel.add(maleCheckBox); panel.add(new JLabel()); panel.add(femaleCheckBox); JPanel buttonPanel new JPanel(); buttonPanel.add(saveButton); buttonPanel.add(loadButton); buttonPanel.add(queryButton); Container container getContentPane(); container.setLayout(new BorderLayout()); container.add(panel, BorderLayout.CENTER); container.add(buttonPanel, BorderLayout.SOUTH); container.add(new JScrollPane(outputArea), BorderLayout.EAST); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500, 300); setVisible(true); } private void saveStudentInfo() { String id idField.getText(); String name nameField.getText(); int age Integer.parseInt(ageField.getText()); String major majorField.getText(); String gender maleCheckBox.isSelected() ? Male : Female; Student student new Student(id, name, age, major, gender); students.put(id, student); try (ObjectOutputStream outputStream new ObjectOutputStream(new FileOutputStream(students.dat))) { outputStream.writeObject(students); JOptionPane.showMessageDialog(this, Student information saved successfully!); } catch (IOException ex) { JOptionPane.showMessageDialog(this, Error saving student information: ex.getMessage(), Error, JOptionPane.ERROR_MESSAGE); } } private void loadStudentInfo() { try (ObjectInputStream inputStream new ObjectInputStream(new FileInputStream(students.dat))) { students (MapString, Student) inputStream.readObject(); JOptionPane.showMessageDialog(this, Student information loaded successfully!); } catch (IOException | ClassNotFoundException ex) { JOptionPane.showMessageDialog(this, Error loading student information: ex.getMessage(), Error, JOptionPane.ERROR_MESSAGE); } } private void queryStudentInfo() { String id JOptionPane.showInputDialog(this, Enter student ID:); if (students.containsKey(id)) { Student student students.get(id); outputArea.setText(student.toString()); } else { outputArea.setText(Student not found.); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { Override public void run() { StudentInfoGUI win new StudentInfoGUI(); win.setTitle(学生信息管理系统); } }); }
}
class Student implements Serializable { private static final long serialVersionUID 1L; private String id; private String name; private int age; private String major; private String gender; public Student(String id, String name, int age, String major, String gender) { this.id id; this.name name; this.age age; this.major major; this.gender gender; } Override public String toString() { return ID: id \nName: name \nAge: age \nMajor: major \nGender: gender; }
}