1. 程式人生 > >練習----學生管理系統

練習----學生管理系統

/*
 * 學生管理系統
 * 
 * 1.定義學生類
 * 2.學生管理系統的主介面的程式碼編碼
 * 3.學生管理系統的檢視所有學生的程式碼編寫
 * 4.學生管理系統的新增學生的程式碼編寫
 * 5.學生管理系統的刪除學生的程式碼編寫
 * 6.學生管理系統的修改學生的程式碼編寫
 * 
 */
public class StudentManager {
	public static void main(String[] args) {
		ArrayList<Student> arrl=new ArrayList<Student>();
	
	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.退出");
		System.out.println("請輸入你的選擇");

		Scanner sc = new Scanner(System.in);
		String xuanze = sc.nextLine();
		switch (xuanze) {
		case "1":
			// 1.檢視所有學生
			findAllStudent(arrl);
			break;
		case "2":
			// 2.新增學生
			addStudent(arrl);
			break;
		case "3":
			// 3.刪除學生
			deleteStudent(arrl);
			break;
		case "4":
			// 4.修改學生
			updateStudent(arrl);
			break;
		case "5":
			// 5.退出
		default:
			System.out.println("感謝使用");
			System.exit(0);
			break;		
		}		
	}
}



public static void findAllStudent(ArrayList<Student> arrl){
	if(arrl.size()==0){
		System.out.println("暫無資訊,返回上一層");
		//return是不往下執行的意思,並不是返回值
		return;
	}
	//  \t是tap鍵的文字寫法
	System.out.println("學號\t姓名\t年齡\t性別\t家庭地址");	
	for(int a=0;a<arrl.size();a++){
		Student s=arrl.get(a);
		System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getXingbie()+"\t"+s.getAddress());
	}	
}



public static void addStudent(ArrayList<Student> arrl){

	//1.鍵盤輸入學生資訊
	Scanner sc=new Scanner(System.in);
	//定義物件id放這裡,因為放while裡面,下面外面的程式碼會報錯
	String id;	
	
	//迴圈判斷學號有沒有被人佔用
	while(true){
		System.out.println("請輸入學號:");
		id=sc.nextLine();
		//標記
		boolean flag=false;
		//遍歷集合
		for(int a=0;a<arrl.size();a++){
			//定義物件s接收集合索引a的元素
			Student s=arrl.get(a);
			//如果物件s接收的元素和鍵盤輸入的元素一樣,標記變成true,break退出for迴圈
			if(s.getId().equals(id)){
				flag=true;
				break;
			}	
		}
		//如果標記flag變成true,繼續迴圈,false就跳出while迴圈
		if(flag){
			System.out.println("輸入的學號重複,重新輸入");
		}else{
			break;
		}
	}
	
	System.out.println("請輸入姓名:");
	String name=sc.nextLine();
	System.out.println("請輸入年齡:");
	String age=sc.nextLine();
	System.out.println("請輸入性別:");
	String xingbie=sc.nextLine();
	System.out.println("請輸入家庭地址:");
	String address=sc.nextLine();
	//2.把輸入的資訊通過方法存到學生類
	Student s=new Student();
	s.setId(id);
	s.setName(name);	
	s.setAge(age);	
	s.setXingbie(xingbie);	
	s.setAddress(address);	
	//3.把學生類的資訊加到集合中
	arrl.add(s);
	System.out.println("資訊新增成功");
}



public static void deleteStudent(ArrayList<Student> arrl){
	//建立鍵盤輸入,輸入學號
	Scanner sc=new Scanner(System.in);
	System.out.println("請輸入要刪除學生的學號");
	String id=sc.nextLine();
	//標記,索引=-1表示不存在
	int index=-1;
	//迴圈比較集合中是否有匹配的資訊
	for(int a=0;a<arrl.size();a++){
		Student s=arrl.get(a);
		if(s.getId().equals(id)){
			//如果相同,進來,a賦值給index
			index=a;
			break;
		}
	}
	//如果index等於-1,說明上面if不成立,說明沒找到,else則是找到了
	if(index==-1){
		
		System.out.println("未找到要刪除的學生資訊,重新輸入");
	}else{
		arrl.remove(index);
		System.out.println("刪除成功");
	}
}



public static void updateStudent(ArrayList<Student> arrl){
	//建立鍵盤輸入
	Scanner sc=new Scanner(System.in);
	System.out.println("請輸入要修改學生的學號");
	String id=sc.nextLine();
	//標記,索引=-1時,不存在該元素
	int index=-1;
	//建立迴圈看集合中有沒有匹配資訊
	for(int a=0;a<arrl.size();a++){
		Student s=arrl.get(a);
		//如果找到集合中有匹配的資訊,把索引a賦值給index,然後跳出for迴圈
		if(s.getId().equals(id)){
			index=a;
			break;

		}
	}
	//如果索引=-1,說明上面for迴圈中沒有匹配的資訊
	if(index==-1){
		System.out.println("未找到要修改的學生資訊,請重新輸入");
	}else{
		//鍵盤輸入要修改的資訊
		System.out.println("請輸入姓名:");
		String name=sc.nextLine();
		System.out.println("請輸入年齡:");
		String age=sc.nextLine();
		System.out.println("請輸入性別:");
		String xingbie=sc.nextLine();
		System.out.println("請輸入家庭地址:");
		String address=sc.nextLine();
		//2.把輸入的資訊通過方法存到學生類
		Student s=new Student();
		s.setId(id);
		s.setName(name);	
		s.setAge(age);	
		s.setXingbie(xingbie);	
		s.setAddress(address);	
		//3.把學生類的資訊加到集合中
		//arrl.add(index, s);不能用這個,用這個的話,是新加上一條資訊了
		arrl.set(index,s);
		System.out.println("資訊新增成功");
	}
	
}
}

成功輸入的截圖

在這裡插入圖片描述

碰到的問題

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

又做了一遍練習

package com.StudentManager;
    
import java.util.ArrayList;
import java.util.Scanner;

/*
 * 學生管理系統
 * 
 * 1.定義學生類
 * 2.學生管理系統的主介面的程式碼編碼
 * 3.學生管理系統的檢視所有學生的程式碼編寫
 * 4.學生管理系統的新增學生的程式碼編寫
 * 5.學生管理系統的刪除學生的程式碼編寫
 * 6.學生管理系統的修改學生的程式碼編寫
 * 
 */
public class StudentManager {
	public static void main(String[] args) {
		// 建立一個集合物件
		ArrayList<Student> arrl = new ArrayList<Student>();

		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.退出系統");
			// 建立鍵盤輸入
			Scanner sc = new Scanner(System.in);
			String xuanze = sc.nextLine();
			// 通過鍵盤輸入來選擇以下
			switch (xuanze) {
			case "1":
				// 1.檢視所有學生資料
				findAllStudent(arrl);
				break;
			case "2":
				// 2.新增新的學生資訊
				addNewStudent(arrl);
				break;
			case "3":
				// 3.刪除學生資訊
				deleteStudent(arrl);
				break;
			case "4":
				// 4.修改學生資訊
				updateStudent(arrl);
				break;
			case "5":
				// 5.退出系統
			default:
				System.out.println("感謝使用本系統");
				System.exit(0);
			}// 這個大括號是switch

		} // 這個大括號是while
	}// 這個大括號是main方法

	// 檢視所有學生資料方法
	public static void findAllStudent(ArrayList<Student> arrl) {
		if (arrl.size() == 0) {
			System.out.println("對不起,暫時沒有學生資料");
			return;
		}
		System.out.println("學號\t姓名\t年齡");
		for (int a = 0; a < arrl.size(); a++) {
			Student s = arrl.get(a);
			System.out.println(s.getId() + "\t" + s.getName() + "\t" + s.getAge() + "\t");
		}
		System.out.println("已載入所有學生資料");
	}// 這個大括號是findAllStudent

	public static void addNewStudent(ArrayList<Student> arrl) {
		// 鍵盤輸入
		Scanner sc = new Scanner(System.in);

		// 因為加了一個while迴圈,下面s.setId(id)報錯了,於是就把id定義在外面了
		String id;
		while (true) {
			System.out.println("請輸入學號");
			id = sc.nextLine();
			// 回過頭來考慮,如果輸入的學號跟已有的有重複,怎麼辦??
			// 首先定一個標記
			int index = -1;
			// 迴圈遍歷出集合中已有的元素
			for (int a = 0; a < arrl.size(); a++) {
				Student s = arrl.get(a);
				// 如果集合已有的學號和鍵盤輸入的學號相同,a賦值給index,迴圈結束
				if (s.getId().equals(id)) {
					index = a;
					break;
				}
			} // 這個大括號是for迴圈

			// 如果index=-1,說明上面遍歷後沒有相同的學號
			if (index == -1) {
				// 滿足就跳出迴圈,注意如果不加break下面Syso("請輸入姓名")報錯,
				break;
			} else {
				System.out.println("輸入的學號有重複,請重新輸入");

			}
		} // 這個大括號是while

		System.out.println("請輸入姓名");
		String name = sc.nextLine();
		System.out.println("請輸入年齡");
		String age = sc.nextLine();
		// 鍵盤錄入的資訊賦值給學生類
		Student s = new Student();
		s.setId(id);
		s.setName(name);
		s.setAge(age);
		// 學生類的資訊賦值給集合arrl
		arrl.add(s);
		System.out.println("新增成功");

	}// 這個大括號是addNewStudent

	public static void deleteStudent(ArrayList<Student> arrl) {

		// 鍵盤輸入學號
		Scanner sc = new Scanner(System.in);
		if(arrl.size()==0){
			System.out.println("對不起,暫時沒有學生資料");
			return;
		}

		while (true) {
			System.out.println("請輸入要刪除的學生學號");
			String id = sc.nextLine();
			// 標記
			int index = -1;
			// for迴圈找匹配資訊
			for (int a = 0; a < arrl.size(); a++) {
				Student s = arrl.get(a);
				// 如果學號相同,進if,把a賦值給index
				if (s.getId().equals(id)) {
					index = a;
					break;
				}
			}
			// 如果標記==-1,說明沒有匹配的學號,return重新輸入
			if (index == -1) {
				System.out.println("輸入的學號不存在,請重新輸入");
			} else {
				arrl.remove(index);
				System.out.println("刪除成功");
				return;
			}
		} // 這個大括號是while

	}// 這個大括號是deleteStudent

	public static void updateStudent(ArrayList<Student> arrl){
		
		//鍵盤輸入學號
		Scanner sc=new Scanner(System.in);
		if(arrl.size()==0){
			System.out.println("對不起,暫時沒有學生資料");
			return;
		}
		
		while(true){
		System.out.println("請輸入要修改的學生學號");
		String id=sc.nextLine();
		int index=-1;
		//for迴圈找匹配資訊
		for(int a=0;a<arrl.size();a++){
			Student s=arrl.get(a);
			//如果集合中找到和鍵盤輸入相同的物件,a賦值給index
			if(s.getId().equals(id)){
				index=a;
			}
		}//這個大括號是for
		//如果index==-1,沒找到匹配資訊
		if(index==-1){
			System.out.println("輸入的學號不存在,請重新輸入");
		}else{
			
			System.out.println("請輸入姓名");
			String name=sc.nextLine();
			System.out.println("請輸入年齡");
			String age=sc.nextLine();
			
			Student s=new Student();
			s.setId(id);
			s.setName(name);
			s.setAge(age);
			
			arrl.set(index,s);
			System.out.println("修改成功");
			return;
		}
		}//這個大括號是while
		
	}//這個大括號是updateStudent
}// 這個大括號是類的