准备四个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();
}
}