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
原创粉丝点击