学生信息管理系统博客

程序的整体结构如下:

 

 

组长负责 Dao数据层,File文件层的操作实施。

因为Dao数据层依赖于File文件层,所以这里我们先讲File层。

File层总共分为读文件和写文件。

读文件:我们通过流式读取文件的内容,减小了程序的负载,一行一行读取文件信息。

 1      public CsvReader(String filename) {
 2         try {
 3             reader = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
 4         } catch (FileNotFoundException e) {
 5             e.printStackTrace();
 6         }
 7     }
 8     
 9     public String readRecord() {
10         String line = null;
11         try {
12             line = reader.readLine();
13         } catch (IOException e) {
14             e.printStackTrace();
15         }
16         return line;
17     }

写文件:写文件也是采用了流式写入,对信息进行一行一行写入。

 1     public CsvWriter(String filename, boolean append) {
 2         try {
 3             writer = new BufferedWriter(new 
 4      OutputStreamWriter(new FileOutputStream(filename, append)));
 5         } catch (FileNotFoundException e) {
 6             e.printStackTrace();
 7         }
 8     }
 9     
10     public void writeRecord(String record) {
11         try {
12             writer.write(record);
13         } catch (IOException e) {
14             e.printStackTrace();
15         }
16     }

最后,我们在声明一个流的同时,也需要关闭一个流。

Dao层主要是对文件信息的查询,增加,删除,修改。

查询分为查询全部学生,查询单个学生。

查询单个学生:

 1     @Override
 2     public Student getStuByNumber(String number) {
 3         Student stu = null;
 4         CsvReader reader = new CsvReader(filename);
 5         String lineString = null;
 6         while((lineString = reader.readRecord()) != null) {
 7             String[] items = lineString.split(delimiter);
 8             if(items[0].equals(number))
 9                 stu = new Student(items[0], items[1], items[2], items[3], items[4], items[5], items[6], items[7]);
10         }
11         reader.close();
12         return stu;
13     }
14     

查询全部学生:

 1     @Override
 2     public List<Student> getStusByCond(String cond) {
 3         List<Student> students = getAllStudent();
 4         List<Student> res = new ArrayList<>();
 5         for(Student stu : students) {
 6             if(stu.getNumber().equals(cond) || stu.getName().equals(cond) || 
 7                     stu.getGender().equals(cond) || stu.getAddress().contains(cond) || stu.getDormNum().equals(cond)) {
 8                 res.add(stu);
 9             }
10         }
11         return res;
12     }    

删除学生:

 1     @Override
 2     public int delStuByNumber(String number) {
 3         List<Student> students = getAllStudent();
 4         CsvWriter writer = new CsvWriter(filename, false);
 5         int cnt = 0;
 6         for(Student stu : students) {
 7             if (!stu.getNumber().equals(number)) {
 8                 cnt ++;
 9                 writer.writeRecord(stu.toSaveString());
10             }
11         }
12         writer.close();
13         if(cnt == students.size()) return FAILED;
14         return SUCCESS;
15     }

增加学生:

 1     @Override
 2     public int addOneStudent(Student stu) {
 3         Student student = getStuByNumber(stu.getNumber());
 4         if(student == null) {
 5             CsvWriter writer = new CsvWriter(filename, true);
 6             writer.writeRecord(stu.toSaveString());
 7             writer.close();
 8             return SUCCESS;
 9         }
10         return FAILED;
11     }

更新学生信息:

 1     @Override
 2     public int uptStuByNumber(Student stu) {
 3         List<Student> students = getAllStudent();
 4         CsvWriter writer = new CsvWriter(filename, false);
 5         for(Student student : students) {
 6             if (!student.getNumber().equals(stu.getNumber()))
 7                 writer.writeRecord(student.toSaveString());
 8             else
 9                 writer.writeRecord(stu.toSaveString());
10         }
11         writer.close();
12         return SUCCESS;
13     }

组员负责的是实体类层entity层,业务层ui层;

entity层是我们写的学生信息的实体类。

 1 public class Student {
 2     
 3     // 学号
 4     private String number;
 5     // 姓名
 6     private String name;
 7     // 性别
 8     private String gender;
 9     // 出生日期
10     private String birth;
11     // 政治面貌
12     private String politics;
13     // 家庭住址
14     private String address;
15     // 电话
16     private String phone;
17     // 宿舍号
18     private String dormNum;
19     
20     public Student() {}
21     
22     public Student(String number, String name, String gender, String birth, String politics, String address, String phone,
23             String dormNum) {
24         super();
25         this.number = number;
26         this.name = name;
27         this.gender = gender;
28         this.birth = birth;
29         this.politics = politics;
30         this.address = address;
31         this.phone = phone;
32         this.dormNum = dormNum;
33     }
34     
35     public String getNumber() {
36         return number;
37     }
38     public void setNumber(String number) {
39         this.number = number;
40     }
41     public String getName() {
42         return name;
43     }
44     public void setName(String name) {
45         this.name = name;
46     }
47     public String getGender() {
48         return gender;
49     }
50     public void setGender(String gender) {
51         this.gender = gender;
52     }
53     public String getBirth() {
54         return birth;
55     }
56     public void setBirth(String birth) {
57         this.birth = birth;
58     }
59     public String getPolitics() {
60         return politics;
61     }
62     public void setPolitics(String politics) {
63         this.politics = politics;
64     }
65     public String getAddress() {
66         return address;
67     }
68     public void setAddress(String address) {
69         this.address = address;
70     }
71     public String getPhone() {
72         return phone;
73     }
74     public void setPhone(String phone) {
75         this.phone = phone;
76     }
77     public String getDormNum() {
78         return dormNum;
79     }
80     public void setDormNum(String dormNum) {
81         this.dormNum = dormNum;
82     }
83     
84     @Override
85     public String toString() {
86         return "Student [number=" + number + ", name=" + name + ", gender=" + gender + ", birth=" + birth
87                 + ", politics=" + politics + ", address=" + address + ", phone=" + phone + ", dormNum=" + dormNum + "]";
88     }
89     
90     public String toSaveString() {
91         return number + "," + name + "," + gender + "," + birth + "," + politics + "," + address + "," + phone + "," + dormNum + "\n";
92     }
93     
94 }

UI层是我们实现整个GUI界面的图形布局以及程序逻辑最直观的体现。

GUI图形界面布局:

UI层程序逻辑分为展示学生信息,添加学生,删除学生,修改学生。

查询学生信息:

1             // 查询学生基本信息
2             public void actionPerformed(ActionEvent e) {
3                 String cond = findText.getText();
4                 if(!"".equals(cond)) fullTable(studentDao.getStusByCond(cond));
5             }

添加学生信息:

1             // 添加学生基本信息
2             public void actionPerformed(ActionEvent e) {
3                 StudentAddUI dialog = new StudentAddUI();
4                 dialog.setModal(true);
5                 dialog.setLocationRelativeTo(null); 
6                 dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
7                 dialog.setVisible(true);
8             }

删除学生信息:

 1             // 删除学生基本信息
 2             public void actionPerformed(ActionEvent e) {
 3                 String number = numberText.getText();
 4                 if("".equals(number)) {
 5                     JOptionPane.showMessageDialog(null, "请先选中左侧表格要删除的数据");
 6                 } else {
 7                     int flag = studentDao.delStuByNumber(number);
 8                     if(flag == StudentDao.SUCCESS) 
 9                         JOptionPane.showMessageDialog(null, "学生信息删除成功");
10                     else 
11                         JOptionPane.showMessageDialog(null, "学生信息删除失败");
12                     clearForm();
13                     fullTable(studentDao.getAllStudent());
14                 }
15             }

修改学生信息:

 1             // 修改学生基本信息
 2             public void actionPerformed(ActionEvent e) {
 3                 // 获取输入框中的数据
 4                 String number = numberText.getText();
 5                 String name = nameText.getText();
 6                 String gender = (String) genderBox.getSelectedItem();
 7                 String birth = birthText.getText();
 8                 String politics = (String) politicsBox.getSelectedItem();
 9                 String address = addressText.getText();
10                 String phone = phoneText.getText();
11                 String dormNum = dormNumText.getText();
12                 
13                 if("".equals(number) || "".equals(name) || "".equals(gender) || "".equals(birth) ||
14                         "".equals(politics) || "".equals(address) || "".equals(phone) || "".equals(dormNum)) {
15                     JOptionPane.showMessageDialog(null, "存在空数据,无法修改");
16                 } else {
17                     Student student = new Student(number, name, gender, birth, politics, address, phone, dormNum);
18                     int flag = studentDao.uptStuByNumber(student);
19                     if(flag == StudentDao.SUCCESS) 
20                         JOptionPane.showMessageDialog(null, "学生信息更新成功");
21                     else
22                         JOptionPane.showMessageDialog(null, "学生信息更新失败");
23                     clearForm();
24                     fullTable(studentDao.getAllStudent());
25                 }
26             }

总结:这次项目是一个分工项目,我们两个从最初的框架制定,业务逻辑制定的冲突,到逐渐达成共识。再到具体的实施,充分感受到了一个小型项目从开发到形成成果的来之不易。

posted @ 2023-01-12 09:12  家冢  阅读(51)  评论(0)    收藏  举报