Java --學生作業系統-增刪改查
阿新 • • 發佈:2018-11-09
準備四個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();
}
}