1. 程式人生 > >Java --學生作業系統-增刪改查

Java --學生作業系統-增刪改查

準備四個class
Student.java:

package cn.demo.d1029.anli;

/**
 * 學生類
 * @author Frank
 *
 */
public class Student {
	public int sid;//學號
	public String sname;//姓名
	public int sage;//年齡
	public double height;//身高
	
	/**
	 * 顯示方法
	 */
	public void show(){
		System.out.println(sid+"\t"+sname+"\t"+sage+"\t"+height)
; } }

StudentImpl.java:

package cn.demo.d1029.anli;

import java.util.Arrays;

/**
 * 學生的操作類
 * @author Frank
 * 兩個陣列
 * 	正在用 stuNew
 * 	歷史 stuHis
 * 1.新增的方法
 * 	 addStudent 
 * 	 boolean --提醒新增成功或者是失敗
 * 	 引數--student stu
 * 	方法體:
 * 		通過for迴圈迴圈變數陣列 找到null的位置坐下,結束查詢 break'
 * 	要求:
 * 		sid自動的生產
 * 2.檢視:
 * 	顯示陣列的資訊
 * 		迴圈找到不為null顯示
 * 3.修改
 * 		返回值--boolean
 * 		引數----int id,Student 修改的內容 --可以封裝成物件
 * 		方法體:
 * 			迴圈找引數對應的物件,將物件的屬性值替換成新的屬性值
 * 4.刪除
 * 	返回值--boolean
 * 	引數----int id
 * 	方法體:
 * 		找到要刪除的id的位置 將 後面的資料網前移動,最後一null
 *
 */
public class StudentImpl { //陣列,開始的是陣列的空間 ,應用資料型別在開闢空間的時候初始值null Student[] stuNews=new Student[10];//正在用的陣列 Student[] stuHis=new Student[20];//存放歷史的資訊 int StuChan=0; /** * 新增 * @param stu * @return */ public boolean addStudent(Student stu){ //每次在新增方法呼叫的時候+1, StuChan++; //將sid值賦值, stu.sid=StuChan;
//定義返回值 boolean bl=false;//預設情況下新增失敗 // //迴圈運算元組 // for(Student stuN:stuNews){ // if (stuN==null){ // stuN=stu; // break; // } // // } //通過下標找到null的位置進行新增 for(int i=0,len=stuNews.length;i<len;i++){ if(stuNews[i]==null){ stuNews[i]=stu; bl=true;//標記新增成功 break; } } return bl; } /** * 顯示 */ public void showStudent(Student[] stus){ System.out.println("id\t姓名\t年齡\t身高"); for(Student stuN:stus){ if (stuN!=null){ //stuN是屬於物件 物件可以呼叫方法 stuN.show(); } } } /** * 修改 * @param sid * @param stu * @return */ public boolean updateStudent(int sid,Student stu){ //boolean boolean bl=false; for(int i=0,len=stuNews.length;i<len;i++){ if(stuNews[i].sid==sid){ //先將原有的資料新增歷史陣列中 for(int j=0,lenl=stuHis.length;j<lenl;j++){ if(stuHis[j]==null){ //stuHis[j]=stuNews[i];//賦值的是 地址 ,放修改以後具體的值也被修改了 stuHis[j]=new Student(); stuHis[j].sid=stuNews[i].sid; stuHis[j].sname=stuNews[i].sname; stuHis[j].sage=stuNews[i].sage; stuHis[j].height=stuNews[i].height; break; } } if(stu.sname!=null){ stuNews[i].sname=stu.sname; } if(stu.sage!=0){ stuNews[i].sage=stu.sage; } if(stu.height!=0){ stuNews[i].height=stu.height; } bl=true;//標記新增成功 break; } } return bl; } /** * 刪除 * @param sid * @return */ public boolean delStudent(int sid){ boolean bl=false; //下標 int index=-1; for(int i=0,len=stuNews.length;i<len;i++){ if(stuNews[i].sid==sid){ //先將原有的資料新增歷史陣列中 for(int j=0,lenl=stuHis.length;j<lenl;j++){ if(stuHis[j]==null){ stuHis[j]=stuNews[i]; break; } } //記錄一下要刪除的下標 index=i; } //將位置往前移動,大於index還是大於等於 for (int a=index;a<len-1;a++){ //移動,將後一個覆蓋前一個要刪除的物件 stuNews[a]=stuNews[a+1]; //將最後一個賦值給null if(a==len-2){ stuNews[a+1]=null; bl=true;//標記刪除成功 } } //為了退出for迴圈 if (bl){ break; } } return bl; } /** * 身高排序 */ public void showHeight(){ //不改變原有的資料 Student[] stus=Arrays.copyOf(stuNews, stuNews.length); for(int i=0,len=stus.length;i<len-1;i++){ for(int j=0;j<len-i-1;j++){ //判斷一下比較兩個物件不能是null if(stus[j]!=null && stus[j+1]!=null){ if (stus[j].height>stus[j+1].height){ Student stu=stus[j]; stus[j]=stus[j+1]; stus[j+1]=stu; } } } } showStudent(stus); } }

MenuStudent.java:

package cn.demo.d1029.anli;

import java.util.Scanner;

/**
 * 選單類
 * @author Frank
 * 整合 
 *
 */
public class MenuStudent {
	
	public void zhu(){
		//始終保持只有這一個空間
		StudentImpl stuImpl=new StudentImpl();
		//Scanner
		Scanner sc=new Scanner(System.in);
		//退出迴圈的條件
		String strDo=null;
		do{
			System.out.print("1,新增\n2,修改\n3,刪除\n4,檢視\n5,身高排序");
			int num=sc.nextInt();
			switch (num) {
			case 1:
				
				//新增的迴圈的次數是 在操作類中的new陣列的長度
				for(int i=0,len=stuImpl.stuNews.length;i<len;i++){
					//建立 學生類在使用自定義的物件的如果新增的話物件應該是新增幾個就
					//new幾次
					Student stu=new Student();//
					System.out.print("請輸入姓名:");
					stu.sname=sc.next();
					System.out.print("請輸入年齡:");
					stu.sage=sc.nextInt();
					System.out.print("請輸入身高:");
					stu.height=sc.nextDouble();
					//呼叫方法
					boolean bl=stuImpl.addStudent(stu);
					System.out.println(bl?"新增成功":"新增失敗");
					System.out.print("是否繼續:");
					strDo=sc.next();
					if("n".equals(strDo)){
						break;
					}
					
				}
				
				break;
			case 2:
				System.out.print("請輸入修改的id:");
				int numid1=sc.nextInt();
				Student stuupdate=new Student();
				while(true){
					System.out.print("1,姓名\n2,年齡\n3,身高");
					int numShu=sc.nextInt();
					if(numShu==1){
						System.out.print("請輸入姓名:");
						stuupdate.sname=sc.next();
					}
					else if(numShu==2){
						System.out.print("請輸入年齡:");
						stuupdate.sage=sc.nextInt();
					}
					else{
						System.out.print("請輸入身高:");
						stuupdate.height=sc.nextDouble();
					}
					System.out.print("是否繼續修改:");
					String strupdate=sc.next();
					if(strupdate.equals("n")){
						break;
					}
				}
				boolean blupdate=stuImpl.updateStudent(numid1, stuupdate);
				System.out.println(blupdate?"修改成功":"修改失敗");
				break;
			case 3:
				System.out.print("請輸入刪除的id:");
				int numid=sc.nextInt();
				//呼叫方法
				boolean bl=stuImpl.delStudent(numid);
				System.out.println(bl?"刪除成功":"刪除失敗");
				break;
			case 4:
				System.out.print("請輸入檢視的陣列型別(1,正在用2,歷史):");
				int num1=sc.nextInt();
				if(num1==1){
					stuImpl.showStudent(stuImpl.stuNews);
				}
				else{
					stuImpl.showStudent(stuImpl.stuHis);
				}
				
				break;
			case 5:
				stuImpl.showHeight();
				break;

			default:
				System.out.println("輸入錯誤!");
				break;
			}
			
			System.out.print("是否繼續:");
			strDo=sc.next();
		}while(strDo.equals("y"));
		
	}
	
	

}

TestStudent.java:

package cn.demo.d1029.anli;

public class TestStudent {

	public static void main(String[] args) {
		//建立物件
		MenuStudent ms=new MenuStudent();
		ms.zhu();

	}

}