java實現(xiàn)選課系統(tǒng)
本文實例為大家分享了java實現(xiàn)選課系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
這個程序主要是練習IO(文件讀寫,序列化),集合框架的使用
學生端可以實現(xiàn),查找課程,增加選課,刪除選課的功能
管理端可以實現(xiàn)對備選課程,學生信息的增刪查改
缺點:登陸操作沒有實現(xiàn)密碼驗證和多態(tài)。
另外map對象明明put了,可是get的時候竟然會取到null,而且嘗試多次,有時候成功,有時候取到null,并不確定。據(jù)說這是由多線程引起的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();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~ 根據(jù)List來創(chuàng)建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;
}
}
}
// 根據(jù)學號查找學生
public void query1() {
System.out.println("請輸入要查詢的學生學號:");
if (in.hasNext()) {
int id = in.nextInt();
System.out.println(map1.get(id));
map1.get(id).travese();
}
}
// 根據(jù)課程號查找課程
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();
}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~ 根據(jù)List來創(chuàng)建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());
}
}
//根據(jù)課程號查詢備選課程
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();
*/ }
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring\SpringBoot配置連接數(shù)據(jù)庫的方法
最近在學習SpringBoot,第一步就是要配置數(shù)據(jù)庫,本文詳細的介紹了Spring\SpringBoot配置連接數(shù)據(jù)庫的方法,有需要的朋友們下面隨著小編來一起學習學習吧2021-06-06
Springboot-Starter造輪子之自動鎖組件lock-starter實現(xiàn)
這篇文章主要為大家介紹了Springboot-Starter造輪子之自動鎖組件lock-starter實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
Java for-each循環(huán)使用難題2例(高級使用方法)
從Java5起,在Java中有了for-each循環(huán),可以用來循環(huán)遍歷collection和array。For each循環(huán)允許你在無需保持傳統(tǒng)for循環(huán)中的索引,或在使用iterator /ListIterator時無需調(diào)用while循環(huán)中的hasNext()方法就能遍歷collection2014-04-04

