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();

	}

}

猜你喜欢

转载自blog.csdn.net/qq_43287650/article/details/83513445