程序的整体结构如下:
组长负责 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 }
总结:这次项目是一个分工项目,我们两个从最初的框架制定,业务逻辑制定的冲突,到逐渐达成共识。再到具体的实施,充分感受到了一个小型项目从开发到形成成果的来之不易。
标签:return,String,number,博客,学生,stu,equals,信息管理系统,public From: https://www.cnblogs.com/poneyzxd/p/17045470.html