1. 程式人生 > >Java-用集合編寫的班級管理系統

Java-用集合編寫的班級管理系統

這是我初學java以來寫的第一個大一點的小程式,在這裡就跟大家一起來分享一下。

首先給大家說一下做這個小程式的需求:  

    每個班有一個老師,每個班可以有多個學生。

    學生的增刪改查

    老師的增刪改查

    學生可以轉班

思路:1、我們實現這一個功能因為還沒學習資料庫話,首先應該想到要用到陣列的方式來實現;

          2、構思:結構要安排合理,什麼部分該實現什麼功能,以及應該先實現什麼再做什麼,一步一步的寫;

          3、先不要管程式碼量有多少,以實現功能為主要目的;

          4、實現功能後,再考慮程式碼的優化問題。

下面就是程式碼實現的部分:

第一步:我們要有一個主程式來執行,程式碼如下

import java.util.*;
import java.util.List;
import java.util.Scanner;

import org.lanqiao.service.ClassService;
import org.lanqiao.service.StudentService;
import org.lanqiao.service.TeacherService;

public class Main { 
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ClassService cs = new ClassService();
		StudentService ss = new StudentService();
		TeacherService ts = new TeacherService();
		a:while(true) {
			System.out.println("=======班級管理======");
			System.out.println("1、班級資訊管理");
			System.out.println("2、老師資訊管理");
			System.out.println("3、學生資訊管理");
			System.out.println("4、退出程式");
			int input = sc.nextInt();
			switch (input) {
			case 1:
				cs.checkAll(sc);
				break;
			case 2:
				ts.teacherAll(sc);
				break;
			case 3:
				ss.studentAll(sc);
				break;
			case 4:
				System.out.println("歡迎下次使用!");
				System.exit(0);
				break a;
			default:
				System.out.println("沒有此功能!!!");
				break;
			}
		}
	}
}

第二步:服務類

這裡要說的就是我把實現功能都在寫在Service類裡面:

1、班級的Service類如下:


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import org.lanqiao.school.Clazz;
import org.lanqiao.school.Student;
import org.lanqiao.school.Teacher;

public class ClassService {
	// 建立班級容器
	static List<Clazz> clazz = new ArrayList<>();

	static {
		Teacher	t1 = new Teacher(1, "AA", "
[email protected]
", "英語"); Teacher t2 = new Teacher(2, "BB", "[email protected]", "語文"); List<Student> student1 = new ArrayList<>(); student1.add(new Student(1, "aa", "[email protected]", 85)); student1.add(new Student(2, "bb", "[email protected]", 90)); List<Student> student2 = new ArrayList<>(); student2.add(new Student(3, "cc", "[email protected]", 95)); student2.add(new Student(4, "dd", "[email protected]", 100)); student2.add(new Student(5, "ee", "[email protected]", 75)); clazz.add(new Clazz(t1, student1, 1)); clazz.add(new Clazz(t2, student2, 2)); } public static void checkAll(Scanner sc) { d: while (true) { System.out.println("============="); System.out.println("1、檢視所有班級資訊"); System.out.println("2、檢視指定班級資訊"); System.out.println("3、增加班級"); System.out.println("4、刪除班級"); System.out.println("5、返回上級選單"); int input = sc.nextInt(); switch (input) { case 1: check(sc); break; case 2: check1(sc); break; case 3: add(sc); break; case 4: delete(sc); break; case 5: break d; default: System.out.println("沒有該功能!"); break; } } } /** * 檢視所有班級資訊 */ public static void check(Scanner sc) { int sum=0; System.out.println("本校共有" + clazz.size() + "個班,資訊如下"); for (Clazz a : clazz) { System.out.println(a.getId() + "班有" + a.getStulist().size() + "個學生"); for (int i = 0; i < a.getStulist().size(); i++) { System.out.println(a.getStulist().get(i).toString()); } sum+=a.getStulist().size(); } System.out.println("本校共有"+sum+"個學生"); System.out.println("==========="); } /** * 檢視指定班級資訊 */ public static void check1(Scanner sc) { System.out.println("請輸入要檢視的班級id"); int id = sc.nextInt(); int index = -1; for (Clazz c : clazz) { if (id == c.getId()) { System.out.println(c.getId() + "班有" + c.getStulist().size() + "個學生"); for (int i = 0; i <= c.getStulist().size() - 1; i++) { System.out.println(c.getStulist().get(i).toString()); index = i; } } } if (index == -1) { System.out.println("沒有該班級"); } } /** * 增加班級 */ public static void add(Scanner sc) { //判斷輸入班級id是否存在 System.out.println("請輸入增加的班級id"); int cID = sc.nextInt(); for(Clazz c:clazz) { if(c.getId()==cID) { System.out.println("此班級id已經存在!!!"); return; } } //使用者輸入一個老師物件 System.out.println("請輸入一個老師資訊,格式為:[email protected]數學"); String s = sc.next(); String[] infos = s.split("-"); Teacher t3 = new Teacher(Integer.parseInt(infos[0]),infos[1],infos[2],infos[3]); //判斷輸入的老師id是否存在 for(Clazz c:clazz) { if(t3.getId()==c.getT().getId()) { System.out.println("此id已經存在"); return; } } //新增學生 System.out.println("請輸入要新增的學生個數"); int n = sc.nextInt(); //因為是新班級,所以要重新建立一個學生容器 List<Student> stul = new ArrayList<>(); System.out.println("請輸入要新增的學生資訊,格式為:[email protected]"); //定義一個統計學生的變數 int num=0; //當新增學生數量大於輸入的就結束迴圈 a:while(num<n) { String s1 = sc.next(); String[] info = s1.split("-"); //判斷輸入格式是否正確 if(info.length<4) { System.out.println("輸入資訊錯誤"); continue a; } //建立學生物件 Student newStu = new Student(Integer.parseInt(info[0]),info[1],info[2],Double.parseDouble(info[3])); //判斷輸入的學生id是否存在 for(Clazz c :clazz) { for(int i = 0;i<c.getStulist().size();i++) { if(newStu.getId()==c.getStulist().get(i).getId()) { System.out.println("該學號已經存在!!!"); continue a; } } } stul.add(newStu); num++; } clazz.add(new Clazz(t3, stul, cID)); System.out.println("新增成功!"); } /** * 刪除班級 */ public static void delete(Scanner sc) { System.out.println("請輸入要刪除的班級id"); int id = sc.nextInt(); int index =-1; for(int i =0;i<=clazz.size();i++) { if(id==clazz.get(i).getId()) { clazz.remove(id-1); index=i; System.out.println("刪除成功!!"); break; } } if(index==-1) { System.out.println("沒有該班級!!!"); } System.out.println("======="); } }

2、學生的服務類如下:


import java.util.Scanner;

import org.lanqiao.school.Clazz;
import org.lanqiao.school.Student;

public class StudentService extends ClassService {
	public static void studentAll(Scanner sc) {
		c: while (true) {
			System.out.println("===學生資訊管理===");
			System.out.println("1、增加一個學生(先輸入一個班級)");
			System.out.println("2、刪除一個學生");
			System.out.println("3、更新一個學生資訊");
			System.out.println("4、學生轉班");
			System.out.println("5、返回上一級選單");
			int input = sc.nextInt();
			switch (input) {
			case 1:
				stuAdd(sc);
				break;
			case 2:
				stuDelete(sc);
				break;
			case 3:
				stuUpdate(sc);
				break;
			case 4:
				stuZb(sc);
				break;
			case 5:
				break c;
				default:
					System.out.println("沒有此功能!");
					break;
			}
		}
	}

	/**
	 * 增加一個學生 先輸入班級
	 */
	public static void stuAdd(Scanner sc) {
		System.out.println("請先輸入要增加到哪一個班級");
		int id = sc.nextInt();
		//定義一個下標,判斷是否存在這個班級
		int index = -1;
		for (Clazz c : clazz) {
			if (id == c.getId()) {
				System.out.println(c.getId() + "班共有" + c.getStulist().size() + "個學生");
				for (int i = 0; i <= c.getStulist().size() - 1; i++) {
					System.out.println(c.getStulist().get(i).toString());
					index = i;
				}
			}
		}
		if (index == -1) {
			System.out.println("沒有該班級");
			return;
		}
		System.out.println("請輸入你要增加的學生資訊,例如([email protected])");
		String s = sc.next();
		try {
			String[] infos = s.split("-");
			// 建立學生物件
			Student newStu = new Student(Integer.parseInt(infos[0]), infos[1], infos[2], Double.parseDouble(infos[3]));
			for (Clazz c : clazz) {
				for (int i = 0; i < c.getStulist().size(); i++) {
					if (newStu.getId() == c.getStulist().get(i).getId()) {
						System.out.println("輸入有誤,學號不能一樣!");
						return;
					}
				}
				// c.getStulist().add(newStu);
			}
			for (int i = 0; i < clazz.size(); i++) {
				if (id == clazz.get(i).getId()) {
					clazz.get(i).getStulist().add(newStu);
				}

			}
			System.out.println("新增成功!!");
		} catch (Exception e) {
			System.out.println("輸入有誤!");
			// TODO: handle exception
		}
	}

	/**
	 * 刪除
	 */
	public static void stuDelete(Scanner sc) {
		System.out.println("請輸入要刪除的學生id");
		int id = sc.nextInt();
		int index = -1;
		for (Clazz c : clazz) {
			for (int i = 0; i < c.getStulist().size(); i++) {
				if (id == c.getStulist().get(i).getId()) {
					index = i;
					c.getStulist().remove(c.getStulist().get(i));
				}
			}
		}
		if (index == -1) {
			System.out.println("沒有該學號的學生!");
			return;
		}
		System.out.println("刪除成功!");
	}

	/**
	 * 更新
	 */
	public static void stuUpdate(Scanner sc) {
		System.out.println("請輸入要更新的學生學號");
		int id = sc.nextInt();
		int index =-1;
		for (Clazz c : clazz) {
			for (int i = 0; i < c.getStulist().size(); i++) {
				if (id == c.getStulist().get(i).getId()) {
					System.out.println(c.getStulist().get(i).toString());
					index=i;
				}
			}
		}
		
		if (index == -1) {
			System.out.println("沒有該學號的學生!");
			return;
		}

		System.out.println("請輸入修改的資訊:[email protected]  學號不能修改");
		String s = sc.next();
		try {
			String[] infos = s.split("-");
			for(Clazz c:clazz) {
				for(int i =0;i<c.getStulist().size();i++) {
					if(id==c.getStulist().get(i).getId()) {
						c.getStulist().get(i).setName(infos[0]);
						c.getStulist().get(i).setEmail(infos[1]);
						c.getStulist().get(i).setScore(Double.parseDouble(infos[2]));
					}
				}
			}
			System.out.println("更新成功!");
		} catch (Exception e) {
			System.out.println("輸入有誤,請按要求重新輸入");
			// TODO: handle exception
		}
	}

	/**
	 * 轉班
	 */
	public static void stuZb(Scanner sc) {
		System.out.println("請輸入要轉班的學生學號");
		int id1 = sc.nextInt();
		//定義一個下標,判斷該學生是否存在
		int index = -1;
		for (Clazz c : clazz) {
			for (int i = 0; i < c.getStulist().size(); i++) {
				if (id1 == c.getStulist().get(i).getId()) {
					System.out.println("該學生原班級為:"+c.getId()+"班");
					System.out.println(c.getStulist().get(i).toString());
					index = i;
				}
			}
		}
		if (index == -1) {
			System.out.println("學號不存在!");
			return;
		}
		System.out.println("請輸入要轉入的班級的編號");
		int id2 = sc.nextInt();
		int index1 = -1;
		
		//新建一個學生空的學生物件,為了後面把要轉班的學生資訊給自己
		Student newStu = null;
		for (Clazz c : clazz) {
			for (int i = 0; i < c.getStulist().size(); i++) {
				if (id1 == c.getStulist().get(i).getId()) {
					// 把這個學生資訊放入新的學生物件裡面
					 newStu=c.getStulist().get(i);
					// 找到這個學生把學生資訊在這個班級刪除
					c.getStulist().remove(i);
					index1 = i;
				}
			}
		}
		//找到轉入的班級,再把學生物件放入
		for (int i = 0; i < clazz.size(); i++) {
			if (clazz.get(i).getId() == id2) {
				clazz.get(i).getStulist().add(newStu);
			}

		}

		if (index1 == -1) {
			System.out.println("該班級不存在");
			return;
		}
		System.out.println("轉班成功");
	}
}

3、老師的服務類:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import org.lanqiao.school.Clazz;
import org.lanqiao.school.Teacher;


public class TeacherService extends ClassService{
	
	public static void teacherAll(Scanner sc) {
		b:while(true) {
			System.out.println("===老師資訊管理===");
			System.out.println("1、檢視所有老師資訊");
			System.out.println("2、修改老師資訊");
			System.out.println("3、返回上一級選單");
			int input = sc.nextInt();
			switch(input) {
			case 1:
				tcAll(sc);
				break;
			case 2:
				tcUpdate(sc);
				break;
			case 3:
				break b;
				default:
					System.out.println("沒有該功能!");
					break;
			}
		}
	}
	/**
	 * 檢視
	 */
	public static void tcAll(Scanner sc) {
		System.out.println("本校共有"+clazz.size()+"個老師,老師資訊如下");
		for(int i = 0;i<clazz.size();i++) {
			System.out.println(clazz.get(i).getT().toString());
		}
		
	}
	/**
	 * 修改
	 */
	public static void tcUpdate(Scanner sc) {
		System.out.println("請輸入要修改老師的id");
		int id = sc.nextInt();
		int index = -1;
		for (int i = 0; i < clazz.size(); i++) {
			if (id == clazz.get(i).getId()) {
				System.out.println(clazz.get(i).getT().toString());
				index=i;
			}
		}
		if (index==-1) {
			System.out.println("查無此人!");
			return;
		}
		System.out.println("請輸入修改的老師資訊,例如([email protected]英語) 編號不能修改");
		String s = sc.next();
		try {
			String[] infos = s.split("-");

			for(int i =0;i<clazz.size();i++) {
				if(id==clazz.get(i).getId()) {
					clazz.get(i).getT().setName(infos[0]);
					clazz.get(i).getT().setEmail(infos[1]);
					clazz.get(i).getT().setJob(infos[2]);
				}
			}
			
			System.out.println("修改成功!!");
		} catch (Exception e) {
			System.out.println("輸入有誤,請按要求重新輸入!");
			// TODO: handle exception
		}
	}
}

服務類就寫完了,下面就是班級,學生,老師的封裝類了,程式碼如下:

1、班級:

import java.util.ArrayList;
import java.util.List;

public class Clazz {
	private Teacher t;
	private List<Student> stulist = new ArrayList<>();
	private int id;

	public Teacher getT() {
		return t;
	}

	public void setT(Teacher t) {
		this.t = t;
	}

	public List<Student> getStulist() {
		return stulist;
	}

	public void setStulist(List<Student> stulist) {
		this.stulist = stulist;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public Clazz(Teacher t, List<Student> stulist, int id) {
		super();
		this.t = t;
		this.stulist = stulist;
		this.id = id;
	}

	public Clazz() {
		super();
	}

}

2、學生:

public class Student {
	private int id;
	private String name;
	private String email;
	private double score;

	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 String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public double getScore() {
		return score;
	}

	public void setScore(double score) {
		this.score = score;
	}

	public Student(int id, String name, String email, double score) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
		this.score = score;
	}

	
	
	@Override
	public String toString() {
		return "學號:" + id + "姓名:" + name+ "郵箱:" + email + "分數:" + score;
	}

	public Student() {
		super();
	}

}

3、老師:

public class Teacher {
	private int id;
	private String name;
	private String email;
	private String job;

	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 String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	
	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
	
	public Teacher(int id, String name, String email, String job) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
		this.job = job;
	}
	


	@Override
	public String toString() {
		return "編號:" + id + ",姓名"+ name+",郵箱:"+ email + ",科目:"+job;
	}

	public Teacher() {
		super();
	}

}
以上就是我的程式碼部分,在這裡說明以下,我也是一個初學者,程式碼的結構和處理以及程式碼的優化可能不是很好,對於新手來說還是以實現功能為目的,等你練得多了自己也就會去修改程式碼,後面我也會更多的給大家說說自己學習java的經歷。也希望有更多的朋友為我評論,說說我的不足之處,謝謝!!!