Java 学生系统 运用 文件操作 自带menu
来源:互联网 发布:心理学书籍推荐 知乎 编辑:程序博客网 时间:2024/06/10 11:12
郁闷 数据库老师叶QS居然让我们做个学生管理系统(对文件操作) 无奈 之前说是用C 后来又改Java 没办法写就写呗 感觉重复造没用的轮子好没意义 所以就在此基础上 运用最近学的软件工程 写一个menu菜单 尽量实现单个职责
类图结构:
界面图:
Student.java
package SQL.homework;import java.io.Serializable;import java.util.*;/** * Created by Donald on 2016/10/27. */public class Student implements Serializable { private int numb; private String name; private String sex; private Map<String, Double> gradeMap = new HashMap<>(); public int getNumb() { return numb; } public void setNumb(int numb) { this.numb = numb; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Map<String, Double> getGradeMap() { return gradeMap; } public void setGradeMap(Map<String, Double> gradeMap) { this.gradeMap = gradeMap; } public double getAverage(){ double sum = 0; for (double value : gradeMap.values()) { sum += value; } return sum / gradeMap.size(); } @Override public String toString() { return "Student{" + "numb=" + numb + ", name=" + name + ", sex='" + sex + '\'' + ", gradeMap=" + gradeMap + ", average=" + getAverage() + '}'; }}
StudentService.java
package SQL.homework;import java.util.HashMap;import java.util.Map;import java.util.Random;/** * Created by Donald on 2016/10/29. */public class StudentService { static Random random = new Random(); public static String subject[] = new String[]{"Java", "C++", "C", "Scale"}; public static final int STUDENT_NUMBER = 68; public String initName(){ int num; StringBuilder stringBuilder = new StringBuilder(""); for (int i = 0; i < 4; ++i){ num = random.nextInt(26); if (i != 0) stringBuilder.append((char)('a' + num)); else stringBuilder.append((char)('A' + num)); } return stringBuilder.toString(); } public String initSex(){ int type; String str; type = random.nextInt(2); if(type == 0) str = "male"; else str = "female"; return str; } public Map<String, Double> initGrade(){ Map<String, Double> stu = new HashMap<>(); double core ; for (int i = 0 ; i < 4; ++i){ core = random.nextDouble() * 100; stu.put(subject[i], core); } return stu; } public Map<Integer, Student> initStudent(){ Map<Integer, Student> stuMap = new HashMap<>(); Student stu; for(int i = 1 ; i <= STUDENT_NUMBER; ++i){ stu = new Student(); stu.setNumb(i); stu.setName(initName()); stu.setSex(initSex()); stu.setGradeMap(initGrade()); stuMap.put(i, stu); } return stuMap; }}
FileOperator.java
package SQL.homework;/** * Created by Donald on 2016/10/27. */import java.io.*;import java.util.*;/** * writeFile * readFile */public class FileOperator { private Map<Integer, Student> stuMap; public static final String FILENAME = "D:\\tools\\idea\\JavaSE\\text_practise\\stu.txt"; public void writeFile(Map<Integer, Student> stuMap){ ObjectOutputStream objectOutputStream = null; try { objectOutputStream = new ObjectOutputStream( new FileOutputStream(FILENAME)); for (Object key : stuMap.keySet()){ objectOutputStream.writeObject(stuMap.get(key)); } }catch (IOException ex){ ex.printStackTrace(); }finally { try { if (objectOutputStream != null) objectOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println("Write file success..."); } } public Map<Integer, Student> readFile(){ stuMap = new HashMap<>(); try( ObjectInputStream ois = new ObjectInputStream( new FileInputStream(FILENAME))) { Student stu; for (int i = 1 ; i <= 68; ++i){ stu = (Student)ois.readObject(); stuMap.put(i, stu); System.out.println(stu); } System.out.println("Loading SUCCESS..."); } catch (Exception ex){ ex.printStackTrace(); } return stuMap; }}
DataNode.java
package SQL.homework;/** * Created by Donald on 2016/10/29. */public abstract class DataNode { abstract public String getCmd(); abstract public String getDesc(); abstract public void handler();}
Table.java
package SQL.homework;import java.util.Map;import java.util.Scanner;/** * Created by Donald on 2016/10/29. */public class Table { private LinkTable tLinkTable = new LinkTable(); static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { Table table = new Table(); String cmd; DataNode dataNode; while(true){ System.out.print("Input a cmd number > "); cmd = scanner.next().toLowerCase(); dataNode = table.InitMenu().get(cmd); if (dataNode == null){ System.out.println("This is a wrong cmd!"); continue; } System.out.println(dataNode.getCmd() + " - " + dataNode.getDesc()); dataNode.handler(); } } public Map<String, DataNode> InitMenu(){ return tLinkTable.InitMenuData(); }}
LinkTable.java
package SQL.homework;import java.util.HashMap;import java.util.Map;import java.util.Scanner;/** * Created by Donald on 2016/10/29. *//** * Specific operator * */public class LinkTable { private Map<String, DataNode> tLinkMap; private Map<Integer, Student> stuMap; static Scanner scanner = new Scanner(System.in); private FileOperator fileOperator = new FileOperator(); private StudentService studentService = new StudentService(); public void getStuMap(){ stuMap = studentService.initStudent(); } public Map<String, DataNode> InitMenuData(){ tLinkMap = new HashMap<>(); tLinkMap.put("help", new InnerHelp()); tLinkMap.put("init", new InnerInitStudent()); tLinkMap.put("print", new InnerPrint()); tLinkMap.put("read", new InnerReadFile()); tLinkMap.put("write", new InnerWriteFile()); tLinkMap.put("updatename", new InnerUpdateName()); tLinkMap.put("updatesex", new InnerUpdateSex()); tLinkMap.put("updategrade", new InnerUpdateGrade()); tLinkMap.put("quit", new InnerQuit()); return tLinkMap; } public void showAllCmd(){ for (Object key : tLinkMap.keySet()){ System.out.println(tLinkMap.get(key).getCmd() + " - " + tLinkMap.get(key).getDesc()); } } public void help(){ showAllCmd(); } public void writeFile(){ fileOperator.writeFile(stuMap); } public void readFile(){ stuMap = fileOperator.readFile(); } public void quit(){ System.exit(0); } public void init(){ getStuMap(); System.out.println("Init SUCCESS..."); } public void updateName(){ int num ; String name; System.out.print("Please input student number : "); num = inputNum(); if(checkNumb(num)){ System.out.print("Please input the student name what you want to change: "); name = inputString(); stuMap.get(num).setName(name); System.out.println("SUCCESS..."); }else{ System.out.println("Input Error!"); return ; } writeFile(); } public void updateSex(){ int num; String sex; int flag = 0; //1. male to female, 2. female to male System.out.print("Please input student number : "); num = inputNum(); if("male".equals(stuMap.get(num).getSex())){ flag = 1; System.out.println("Do you want to change sex to female?(Y/N)"); }else { flag = 2; System.out.println("Do you want to change sex to male?(Y/N)"); } sex = scanner.next().toLowerCase(); if("y".equals(sex)){ if(flag == 1){ stuMap.get(num).setSex("female"); }else if (flag == 2){ stuMap.get(num).setSex("male"); } writeFile(); System.out.println("Update sex SUCCESS!"); }else if ("n".equals(sex)){ System.out.println("Stay up , No change!"); }else{ System.out.println("Input Error!"); return ; } } public void updateGrade(){ String course; double core; System.out.print("Please input student number : "); int num = inputNum(); System.out.println("Grade: " + stuMap.get(num).getGradeMap()); System.out.println("Input course you want to change: "); course = inputString().toLowerCase(); System.out.println("Input core you want to change: "); core = inputDouble(); if("java".equals(course)){ stuMap.get(num).getGradeMap().replace("Java", core); }else if ("c++".equals(course)){ stuMap.get(num).getGradeMap().replace("C++", core); }else if ("c".equals(course)){ stuMap.get(num).getGradeMap().replace("C", core); }else if ("scale".equals(course)){ stuMap.get(num).getGradeMap().replace("Scale", core); }else{ System.out.println("Input Error!"); return ; } writeFile(); } public void printAllStu(){ for (Object key : stuMap.keySet()){ System.out.println(stuMap.get(key)); } } public boolean checkNumb(int num){ if (stuMap.containsKey(num)){ System.out.println("You want to change:" + stuMap.get(num)); return true; } return false; } public Integer inputNum(){ int num; return scanner.nextInt(); } public String inputString(){ String type; return scanner.next(); } public Double inputDouble(){ double num; return scanner.nextDouble(); } public class InnerUpdateGrade extends DataNode{ String cmd = "updateGrade"; String desc = "Update student grade."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { readFile(); LinkTable.this.updateGrade(); } } public class InnerUpdateSex extends DataNode{ String cmd = "updateSex"; String desc = "Update student sex."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { readFile(); LinkTable.this.updateSex(); } } public class InnerUpdateName extends DataNode{ String cmd = "updateName"; String desc = "Update student name."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { readFile(); LinkTable.this.updateName(); } } public class InnerPrint extends DataNode{ String cmd = "print"; String desc = "Print all student."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { printAllStu(); } } public class InnerInitStudent extends DataNode{ String cmd = "init"; String desc = "Init students information by random."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { init(); } } public class InnerReadFile extends DataNode{ String cmd = "read"; String desc = "Read students information from file."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { LinkTable.this.readFile(); } } public class InnerWriteFile extends DataNode{ String cmd = "write"; String desc = "Write students information to file."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { LinkTable.this.writeFile(); } } public class InnerHelp extends DataNode{ String cmd = "help"; String desc = "Show all cmd to help you."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { LinkTable.this.help(); } } public class InnerQuit extends DataNode{ String cmd = "quit"; String desc = "Quit this student-Manager."; @Override public String getCmd() { return cmd; } @Override public String getDesc() { return desc; } @Override public void handler() { LinkTable.this.quit(); } }}
0 0
- Java 学生系统 运用 文件操作 自带menu
- 自写的java学生信息管理系统
- 集合操作、系统自带函数
- Android系统自带的颜色文件
- Android调用系统自带文件管理器
- 学生管理系统中的文件操作
- 系统自带的文件拷贝、移动、删除和重命名操作
- java IO流操作学生信息管理系统
- 使用JAVA自带的zipInputStream进行解压缩文件包的操作
- android调用系统自带的文件管理程序选择文件
- 运用系统自带的一个Cell然后自定义Cell方法
- 系统自带样式
- 系统自带定位
- 系统自带分享
- 系统自带照相
- oracle自带的操作文件的包UTL_FILE介绍
- android利用系统自带的DownloadManager下载文件
- 十五、文件操作示例——学生信息录入系统
- 数据库概论
- R语言笔记
- NGINX跨域配置
- 第4章 自顶向下语法分析方法
- 使用NVM来管理Node
- Java 学生系统 运用 文件操作 自带menu
- 二叉树(三)——已知遍历序列构造二叉树(java版)
- 《学习笔记》之JavaScript--在HTML网页中书写JavaScript
- java泛型
- scala 函数参数列表
- 国内访问Github官网以及二级域名时卡顿、缓慢的问题解决
- 浅谈异常与恋爱
- (坑)android 实现filterable 接口
- 如何处理mysql数据库主从不一致