JAVA 程序设计课程设计. 界面可选择命令行也可以是 Swing 界面设计。功能要求如下: 实现一个简单的学生信息管理系统, a )读取、添加、修改、删除、查询等功能。 b )系统需要提供对学生成绩的统计和分析功能,例如对所有学生进行排序、计算班级平均分、统计各科目成绩等等。
时间: 2023-07-10 17:06:39 浏览: 115
好,这个要求比较明确,我们可以先从实现基本的学生信息管理系统开始。首先,我们可以先定义一个学生类,包含学生的姓名、学号、性别、年龄等基本信息,还可以包含学生的课程成绩。
```java
public class Student {
private String name;
private String id;
private String gender;
private int age;
private Map<String, Double> scores;
// 构造函数和 getter/setter 方法省略
}
```
然后,我们需要实现一个学生信息管理系统类,提供对学生信息的读取、添加、修改、删除、查询等功能。可以考虑使用 List 或 Map 来存储学生信息,具体实现可以根据需求来决定。
```java
public class StudentManagementSystem {
private List<Student> students;
public StudentManagementSystem() {
students = new ArrayList<>();
}
// 添加学生信息
public void addStudent(Student student) {
students.add(student);
}
// 修改学生信息
public void updateStudent(Student student) {
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(student.getId())) {
students.set(i, student);
break;
}
}
}
// 删除学生信息
public void deleteStudent(String id) {
for (int i = 0; i < students.size(); i++) {
if (students.get(i).getId().equals(id)) {
students.remove(i);
break;
}
}
}
// 查询学生信息
public Student queryStudent(String id) {
for (Student student : students) {
if (student.getId().equals(id)) {
return student;
}
}
return null;
}
// 读取学生信息
public void loadStudents(InputStream in) throws IOException {
// 从输入流中读取学生信息,可以使用 BufferedReader 和 StringTokenizer 等类来实现
}
// 保存学生信息
public void saveStudents(OutputStream out) throws IOException {
// 将学生信息写入输出流中,可以使用 PrintWriter 等类来实现
}
}
```
接下来,我们需要实现对学生成绩的统计和分析功能。可以考虑添加一些方法来实现这些功能,例如计算班级平均分、统计各科目成绩等等。
```java
public class StudentManagementSystem {
// ...
// 计算班级平均分
public double calculateClassAvgScore() {
double sum = 0;
int count = 0;
for (Student student : students) {
Map<String, Double> scores = student.getScores();
for (double score : scores.values()) {
sum += score;
count++;
}
}
return sum / count;
}
// 统计各科目成绩
public Map<String, Double> calculateSubjectScores() {
Map<String, Double> subjectScores = new HashMap<>();
for (Student student : students) {
Map<String, Double> scores = student.getScores();
for (Map.Entry<String, Double> entry : scores.entrySet()) {
String subject = entry.getKey();
double score = entry.getValue();
if (!subjectScores.containsKey(subject)) {
subjectScores.put(subject, score);
} else {
subjectScores.put(subject, subjectScores.get(subject) + score);
}
}
}
return subjectScores;
}
// 对所有学生进行排序
public void sortStudents(Comparator<Student> comparator) {
students.sort(comparator);
}
}
```
最后,我们可以考虑实现一个简单的 Swing 界面来展示这些功能。可以使用 JFrame、JPanel、JTable 等组件来实现。
```java
public class StudentManagementSystemGUI extends JFrame {
private StudentManagementSystem system;
private JTable table;
public StudentManagementSystemGUI() {
system = new StudentManagementSystem();
table = new JTable();
// ...
// 添加菜单和按钮等组件
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
JMenuItem openItem = new JMenuItem("打开");
openItem.addActionListener(e -> {
try {
system.loadStudents(new FileInputStream("students.txt"));
updateTable();
} catch (IOException ex) {
ex.printStackTrace();
}
});
JMenuItem saveItem = new JMenuItem("保存");
saveItem.addActionListener(e -> {
try {
system.saveStudents(new FileOutputStream("students.txt"));
} catch (IOException ex) {
ex.printStackTrace();
}
});
fileMenu.add(openItem);
fileMenu.add(saveItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton("添加");
addButton.addActionListener(e -> {
// 弹出对话框,获取学生信息并添加到系统中
// ...
system.addStudent(student);
updateTable();
});
JButton updateButton = new JButton("修改");
updateButton.addActionListener(e -> {
// 弹出对话框,获取学生信息并更新到系统中
// ...
system.updateStudent(student);
updateTable();
});
JButton deleteButton = new JButton("删除");
deleteButton.addActionListener(e -> {
int row = table.getSelectedRow();
if (row != -1) {
String id = (String) table.getValueAt(row, 0);
system.deleteStudent(id);
updateTable();
}
});
buttonPanel.add(addButton);
buttonPanel.add(updateButton);
buttonPanel.add(deleteButton);
add(buttonPanel, BorderLayout.NORTH);
updateTable();
}
private void updateTable() {
DefaultTableModel model = new DefaultTableModel();
model.addColumn("学号");
model.addColumn("姓名");
model.addColumn("性别");
model.addColumn("年龄");
Map<String, Double> subjects = system.calculateSubjectScores();
for (String subject : subjects.keySet()) {
model.addColumn(subject);
}
List<Student> students = system.getStudents();
for (Student student : students) {
Vector<Object> row = new Vector<>();
row.add(student.getId());
row.add(student.getName());
row.add(student.getGender());
row.add(student.getAge());
Map<String, Double> scores = student.getScores();
for (String subject : subjects.keySet()) {
if (scores.containsKey(subject)) {
row.add(scores.get(subject));
} else {
row.add("");
}
}
model.addRow(row);
}
table.setModel(model);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane, BorderLayout.CENTER);
pack();
}
}
```
这样,我们就实现了一个简单的学生信息管理系统,可以通过命令行或 Swing 界面来使用。当然,这只是一个基础版本,还可以根据需要进行扩展和优化。
阅读全文