本文实例为大家分享了java实现选课系统的具体代码,供大家参考,具体内容如下
这个程序主要是练习IO(文件读写,序列化),集合框架的使用
学生端可以实现,查找课程,增加选课,删除选课的功能
管理端可以实现对备选课程,学生信息的增删查改
缺点:登陆操作没有实现密码验证和多态。
另外map对象明明put了,可是get的时候竟然会取到null,而且尝试多次,有时候成功,有时候取到null,并不确定。据说这是由多线程引起的map取值为null,因为多线程部分还没开始学习,所以也没做修改。
//课程信息 package selectCourse; import java.io.Serializable; public class Course implements Serializable{ private String id; private String name; public Course(String id, String name) { super(); this.id = id; this.name = name; } public Course() { super(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Course other = (Course) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } public String toString() { return "课程号:" + id + " " + "课程名:" + name; } }
//学生信息 package selectCourse; import java.io.Serializable; import java.util.HashSet; import java.util.Set; public class Student implements Serializable,Comparable<Student>{ private int id; private String name; private Set<Course> courses; public Student(int id, String name) { super(); this.id = id; this.name = name; this.courses = new HashSet<Course>(); } public Student() { super(); this.id = 0; this.name = null; this.courses = new HashSet<Course>(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (id != other.id) return false; return true; } public String toString() { return "学号:"+id+" " +"姓名:"+name; } //遍历输出所选课程 public void travese() { if(courses.size()>0) { for (Course course : courses) { System.out.println(course); } } else { System.out.println("还没有选课"); } } public int compareTo(Student s) { int result=this.id-s.id; return result; } }
//管理端 package selectCourse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; public class AdministratorOp { //管理端,用来管理学生信息和备选课程 List<Student> students = new ArrayList<Student>(); Map<Integer, Student> map1 = new HashMap<Integer, Student>(); List<Course> courses = new ArrayList<Course>(); Map<String, Course> map2 = new HashMap<String, Course>(); Scanner in = new Scanner(System.in); public AdministratorOp() { } //~~~~~~~~~~~~~~~~~从文件读入List~~~~~~~~~~~~~~~~~~~~~ public void load1() { File file = new File("students.txt"); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileInputStream fis; try { fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); students = (List<Student>) ois.readObject(); ois.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public void load2() { File file = new File("courses.txt"); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileInputStream fis; try { fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); courses = (List<Course>) ois.readObject(); ois.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } //将信息写回文件 public void save1() { File file = new File("students.txt"); FileOutputStream fos; try { fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(students); oos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public void save2() { File file = new File("courses.txt"); FileOutputStream fos; try { fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(courses); oos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } //~~~~~~~~~~~~~~~~~~~~~~~~~ 根据List来创建Map~~~~~~~~~~~~~~~~~~~~~~~ public void createMap1() { for (int i = 0; i < students.size(); i++) { map1.put(students.get(i).getId(), students.get(i)); } } public void createMap2() { for (int i = 0; i < courses.size(); i++) { map2.put(courses.get(i).getId(), courses.get(i)); } } // ~~~~~~~~~~~~~~~~~~~~~~ 增删查改~~~~~~~~~~~~~~~~~~~~~~~ // 增加学生基本信息 public void add() { System.out.println("输入学生信息,输入0结束"); while (true) { int id = in.nextInt(); if(id!=0) { String name = in.next(); Student s = new Student(id, name); students.add(s); Collections.sort(students); map1.put(id, s); System.out.println("添加成功"); } if (id == 0) { break; } } } // 删除学生信息 public void del() { while(true) { int id = in.nextInt(); Student s = map1.get(id); students.remove(s); map1.remove(id); System.out.println("移除成功"); if (id == 0) { break; } } } // 增加课程基本信息 public void add2() { System.out.println("输入课程信息,输入end结束"); while (true) { String id = in.nextLine(); if(!id.equals("end")) { String name = in.nextLine(); Course cr = new Course(id, name); courses.add(cr); map2.put(id, cr); System.out.println("添加成功"); } else{ //System.out.println("添加结束"); break; } } } // 删除课程信息 public void del2() { while(true) { String id = in.next(); if(!id.equals("end")) { Course cr = map2.get(id); courses.remove(cr); map2.remove(id); System.out.println("移除成功"); } else { break; } } } // 根据学号查找学生 public void query1() { System.out.println("请输入要查询的学生学号:"); if (in.hasNext()) { int id = in.nextInt(); System.out.println(map1.get(id)); map1.get(id).travese(); } } // 根据课程号查找课程 public void query2() { System.out.println("请输入要查询的课程号:"); if (in.hasNext()) { String id = in.nextLine(); System.out.println(map2.get(id)); } } // 修改学生基本信息 public void modify1() { System.out.println("请输入要修改的学生的学号:"); int id = in.nextInt(); Student s = map1.get(id); System.out.println("输入修改后的学生信息:"); int no = in.nextInt(); String name = in.next(); int i = students.indexOf(s); students.set(i, new Student(no, name)); Collections.sort(students); map1.remove(id); map1.put(no, new Student(no, name)); System.out.println("修改成功"); } // 修改课程信息 public void modify2() { System.out.println("请输入要修改的课程的课程号:"); String id = in.nextLine(); Course cr = map2.get(id); System.out.println("输入修改后的课程信息:"); String no = in.nextLine(); String name = in.nextLine(); int i = courses.indexOf(cr); courses.set(i, new Course(no, name)); map2.remove(id); map2.put(no, new Course(no, name)); System.out.println("修改成功"); } // ~~~~~~~~~~~~~~~~~~~~~~ 遍历list~~~~~~~~~~~~~~~~~~~~~~~ void display1() { System.out.println("所有的学生信息:"); for (Student s : students) { System.out.println(s.toString()); s.travese(); } } void display2() { System.out.println("所有的备选课程信息:"); for (Course course : courses) { System.out.println(course.toString()); } } public void close() { in.close(); } }
//学生操作端 package selectCourse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; public class StudentOp { Scanner in = new Scanner(System.in); Student st; List<Student> students = new ArrayList<Student>(); List<Course> courses = new ArrayList<Course>(); Map<String, Course> map = new HashMap<String, Course>(); public StudentOp(int no) { load3(no); load4(); } // ~~~~~~~~~~~~~~~~~从文件读入信息~~~~~~~~~~~~~~~~~~~~~ public void load3(int n) { File file = new File("students.txt"); FileInputStream fis; try { fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); students = (List<Student>) ois.readObject(); ois.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } for (int i = 0; i < students.size(); i++) { if (n == students.get(i).getId()) { st = students.get(i); break; } } } public void load4() { File file = new File("courses.txt"); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileInputStream fis; try { fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); courses = (List<Course>) ois.readObject(); ois.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 将信息写回文件 public void save3() { File file = new File("students.txt"); FileOutputStream fos; try { fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(students); oos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public void save4() { File file = new File("courses.txt"); FileOutputStream fos; try { fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(courses); oos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } //~~~~~~~~~~~~~~~~~~~~~~~~~ 根据List来创建Map~~~~~~~~~~~~~~~~~~~~~~~ public void createMap() { for (int i = 0; i < courses.size(); i++) { map.put(courses.get(i).getId(), courses.get(i)); } //遍历map /*Set<String> set = map.keySet(); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { String key = iterator.next(); System.out.println(key + " " + map.get(key)); } */ } //遍历显示备选课程 public void displayAllCourse() { System.out.println("所有的备选课程信息:"); for (Course course : courses) { System.out.println(course.toString()); } } //根据课程号查询备选课程 public void queryCourse() { System.out.println("请输入要查询的课程号:"); String str = in.next(); System.out.println(str); System.out.println((map.containsKey(str) ? "yes" : "no")); System.out.println(map.get(str)); } //显示所选课程 public void display() { System.out.println("所选课程:"); st.travese(); } //增加所选课程 public void addSelect() { System.out.println("输入所选课程的课程号,输入end结束"); while (true) { String id = in.nextLine(); if (!id.equals("end")) { Course cr = map.get(id); st.getCourses().add(cr); System.out.println("选课成功"); } else { // System.out.println("添加结束"); break; } } } //减少所选课程 public void deleteSelect() { System.out.println("要删除课程的课程号,输入end结束"); while (true) { String id = in.nextLine(); if (!id.equals("end")) { Course cr = map.get(id); st.getCourses().remove(cr); System.out.println("删除成功"); } else { // System.out.println("添加结束"); break; } } } public void close() { in.close(); } }
//测试类 package selectCourse; import java.util.Scanner; public class Test { public static void main(String[] args) { //~~~~~~~~~~~~~测试管理端~~~~~~~~~~~~~~~~~~~~~~~~~~ /*添加学生 AdministratorOp a1=new AdministratorOp(); a1.add(); //a1.display1(); // a1.close(); a1.save1();*/ /*添加课程 AdministratorOp a2=new AdministratorOp(); a2.add2(); //a2.display2(); a2.close(); a2.save2();*/ /* // 测试删除,查找,修改 AdministratorOp a3=new AdministratorOp(); a3.load1(); a3.createMap1(); a3.load2(); a3.createMap2(); // a3.display1(); // a3.display2(); // a3.del(); // a3.display1(); // a3.del2(); // a3.display2(); // a3.query1(); // a3.query2(); // a3.modify1(); // a3.display1(); // a3.modify2(); // a3.display2(); a3.close(); // a3.save1(); // a3.save2();*/ //~~~~~~~~~~~~~~~~测试学生端~~~~~~~~~~~~~~~~~~~~~~~~~ /*Scanner in=new Scanner(System.in); System.out.println("请输入学号:"); int id=in.nextInt(); StudentOp sto=new StudentOp(id); sto.createMap(); //sto.displayAllCourse(); //sto.queryCourse(); // sto.addSelect(); // sto.deleteSelect(); sto.display(); sto.close(); in.close(); // sto.save3(); // sto.save4(); */ } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。