java学生管理系统

以下记录来自一个菜鸟,请大佬们见谅

2019.4.6 16:49,已经在电脑前坐了将近五个小时的我将个人第一个java优化系统调试完成,五个小时,只是将已经写好的系统进行优化,起初开始优化的时候觉得这简直是个无底洞,要考虑的东西太多太细(忽然想起一位java老师曾说过,“永远不要相信你的用户都是正常人”,言外之意就是要考虑到用户各种各样稀奇古怪的操作),而且不同类之间的分工很难协调,初步估算工程量比我原本写出系统的量还大,在这五个小时大脑周围一直有几个声音围着我转:“睡一会吧”、“去##的**系统”、“这##是人干的事吗”。但当最后一个javac stuSystem.java后没有报错,所有的一切都变成了一个声音:“值得!”

以下附上(1)第一次实现功能的代码
(2)优化后的代码

(1)

import java.util.Scanner;
class  Student {
	String num;
	String name;
	String gender;
	byte age;
	byte grade;
	
}

class main{
	public static void main(String[] args ){
		System.out.println("欢迎使用学生信息管理系统");
		Student stu[] =  new Student[10];
		int dataIndex = 0;
		Scanner scanner = new Scanner(System.in);
		while(true){
		
		System.out.println("请选择操作");
		System.out.println("0:退出系统");
		System.out.println("1:输入学生信息");
		System.out.println("2:查询学生信息");
		System.out.println("3:修改学生信息");
		System.out.println("4:删除学生信息");
		//int opIndex = scan.nextInt();
		int opIndex = scanner.nextInt();
		
		switch(opIndex){
		case 0:
			System.exit(0);///退出系统
			
		case 1:
		Scanner scan = new Scanner(System.in);
			Student stud = new Student();
			System.out.println("请输入学生的学号");
			stud.num = scan.next() ;///重点:scanner 的使用
		
			System.out.println("请输入学生的姓名");
			stud.name = scan.next() ;///加括号
		
			System.out.println("请输入学生的性别");
			stud.gender = scan.next() ;
		
			System.out.println("请输入学生的年龄");
			stud.age = scan.nextByte() ;
		
			System.out.println("请输入学生的成绩");
			stud.grade = scan.nextByte() ;
				stu[dataIndex] = stud;
				dataIndex++; 
				break;
				
		case 2:
				
				System.out.println("请输入要查询学生的姓名");
				Scanner sc = new Scanner(System.in);
				String nam = sc.next();
				int numb = -1;
				for(int i = 0; i <dataIndex ; i++){
				if(stu[i].name .equals(nam)){
					numb = i;
				}
				
				}
				if(numb >=0){
				System.out.println("该学生的学号为:" + stu[numb].num);
				System.out.println("该学生的性别为:" + stu[numb].gender);	
				System.out.println("该学生的年龄为:" + stu[numb].age);
				System.out.println("该学生的成绩为:" + stu[numb].grade);
				}
				
				else{
					System.out.println("不存在该学生!!");
				}
				break;
		case 3:
				System.out.println("请输入要修改信息学生的姓名");
				Scanner sc1 = new Scanner(System.in);//sc不能重复定义
				String nam1 = sc1.next();///nam不能重复定义
				int numb1 = -1;
				for(int i = 0; i <dataIndex ; i++){
				if(stu[i].name .equals(nam1)){
					numb1 = i;
				}		
		}
				if(numb1 >= 0){
				System.out.println("请输入学生的学号");
				stu[numb1].num = sc1.next() ;
		
				System.out.println("请输入学生的姓名");
				stu[numb1].name = sc1.next() ;
		
				System.out.println("请输入学生的性别");
				stu[numb1].gender = sc1.next() ;
		
				System.out.println("请输入学生的年龄");
				stu[numb1].age = sc1.nextByte() ;
		
				System.out.println("请输入学生的成绩");
				stu[numb1].grade = sc1.nextByte() ;
				}
				else{
					System.out.println("不存在该学生!!");
				}
				break;
				
		case 4:
				System.out.println("请输入要删除信息学生的姓名");
				Scanner sc2 = new Scanner(System.in);
				String nam2 = sc2.next();
				int numb2 = -1;
				for(int i = 0; i <dataIndex ; i++){
				if(stu[i].name .equals(nam2)){
					numb2 = i;
				}	
				if(numb2 >= 0){
					for(i= numb2;i<dataIndex;i++){
						stu[i] = stu[i+1];
					}
					dataIndex --;
				}
				else{
					System.out.println("不存在该学生!!");
				}
			
		}
		
	}
	///数组的增长
	if(dataIndex == stu.length){
		Student newstu[] = new Student[stu.length + stu.length>>1];
		for(int i = 0;i < stu.length ;i++){
			newstu[i] = stu[i];	
		}
		stu = newstu;
		
	}
	
	
	
	
}
	}
}



///成员变量和局部变量

/*****************************************
设计思路
1、输入:
(1)无限循环输入
(2)根据用户操作停止输入
(3)输入时先输入到一个对象中然后赋值给数组
(4)注意要用一个index来记录该输入第几个数组了
(5)用函数来进行输入等操作
输入时在主函数里定义一个成员变量
2、查询:
(1)遍历数组再遍历对象

3、修改学生信息
(1)

4、删除学生信息
(1)进行覆盖

问题:
(1)其他类里的局部变量怎么引入到main里?
是不是可以直接在其他class里给main里的变量赋值?否





*****************************************/


(2)

import java.util.Scanner;

class Student{
	Student(){
		
	}
	Student (String stuNo, String stuName, String gender, byte age, int score){
		this.stuNo   = stuNo;
		
		this.stuName = stuName;
		
		this.gender  = gender;
		
		this.age     =  age;
		
		this.score   =  score;
		
	}
	
	String stuNo;
	
	String stuName;
	
	String gender;
	
	byte   age;
	
	int    score;
}

class StuData{
	
	Student stuArray[] = new Student[10];
	int dataindex = 0;
	
	void insertStu(Student stu){
		if(dataindex == stuArray.length){
			Student newArray[] = new Student[stuArray.length + (stuArray.length >> 1)];
			for(int i = 0; i<dataindex; i++){
				newArray[i] = stuArray[i];
			}
			stuArray = newArray;///赋值时不用加[]
		}
		stuArray[dataindex] = stu;
		dataindex++;
		
	}
	
	Student checkStuNo(String stuNo){
		for(int i = 0; i < dataindex; i++){
			if(stuArray[i].stuNo.equals(stuNo)) ///.equals
			{
				return stuArray[i]; 
			}
		}
		return null;
	}
	
	void delateStu(String stuNo){///错误:找不到符号 有可能是大小写的问题,只要双击不论大小写只要拼写相同就变绿
		boolean flag = false;
		for(int i = 0; i < dataindex; i++){
			if (stuArray[i].stuNo.equals(stuNo)){
				stuArray[i] = stuArray[i + 1];
				flag = true;
			}
		}
		if(flag){
				dataindex--;
			}
		
	}
	
	void updateStu(Student stu){
		for(int i = 0; i < dataindex; i++){
			if(stuArray[i].stuNo.equals(stu.stuNo)){
				stuArray[i] = stu;
			}
		}
	}
	
	void printStu(Student stu){
		System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
		System.out.print("学生编号 " + stu.stuNo + "  ");
		System.out.print("学生姓名 " + stu.stuName + "  ");
		System.out.print("学生性别 " + stu.gender + "  ");
		System.out.print("学生年龄 " + stu.age + "  ");
		System.out.println("学生成绩 " + stu.score + "  ");
		System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
	}
	
	void printAllstuInf(){
		for(int i  = 0; i < dataindex; i++){
			printStu(stuArray[i]);
		}
		
	}
}


class StuSys{
	StuData stud = new StuData();
	
	void insertStu(Scanner scanner){
		System.out.println("请输入学生的学号 姓名 性别 年龄 成绩(输入出用空格分开):");
		String stuNo    = scanner.next();
		String stuName  = scanner.next();
		String gender   = scanner.next();
		byte   age		= scanner.nextByte();
		int    score	= scanner.nextInt();
		int    i 		= 0;
		
		if(stud.checkStuNo(stuNo) == null){
			Student stu = new Student(stuNo, stuName, gender, age, score);
			stud.insertStu(stu);
			System.out.println("学生信息添加成功!!!");
		}
		else{
			System.out.println("您输入的学生编号已存在,请选择下一步操作");
			System.out.println("1、继续添加  2、退出系统");
			i = scanner.nextInt();
			if(i == 1){
				insertStu(scanner); ///递归
			}
			else if(i == 2){
				System.exit(0);
			}
			
			else{
				System.out.println("您输入的数据不合规!!!");
			}
		}
	}
	
	void delateStu(Scanner scan){
		int i = 0;///可以重复使用i吗
		System.out.println("请输入要删除学生的编号:");
		String stuNo = scan.next();
		if(stud.checkStuNo(stuNo) != null){
			stud.delateStu(stuNo);
			System.out.println("学成信息删除成功!!!");
		}
		else {
			System.out.println("您输入的学号不存在,请选择下一步操作");
			System.out.println("1、继续删除 2、退出系统");
			if(i == 1){
				delateStu(scan); 
			}
			else if(i == 2) {
				System.exit(0);
			}
			else{
				System.out.println("您输入的数据不合规!!!");
			}
		}
	}
	
	void updateStu(Scanner scanner){
		int i = 0;
		System.out.println("请输入要修改的学生的编号:");
		String stuNo = scanner.next();
		Student stu = new Student();
		///非要等与null吗??调试后的总结:1不能直接= new student 因为构造方法里没有student() (无参数的构造方法)
		///解决方法:加一个无参的构造方法
		if(stud.checkStuNo(stuNo) != null){
			System.out.println("请输入学生的姓名 性别 年龄 成绩 (输入时用空格分开)");
			stu.stuNo     = stuNo;
			stu.stuName  = scanner.next();
			stu.gender	 = scanner.next();
			stu.age		 = scanner.nextByte();
			stu.score	 = scanner.nextInt();
			stud.updateStu(stu);
			System.out.println("学生信息修改成功!!!");
		}
		else{
			System.out.println("您输入的学生编号不存在,请选择下一步操作");
			System.out.println("1、继续修改  2、退出系统");
			i = scanner.nextInt();
			if(i == 1){
				insertStu(scanner); 
			}
			else if(i == 2){
				System.exit(0);
			}
			
			else{
				
				System.out.println("您输入的数据不合规!!!");
			}
			
		}
	}
	
	void showStuInfo(Scanner scanner){
		int i = 0;
		Student stu = new Student();
		System.out.println("请输入查看学生的编号");
		String stuNo = scanner.next();
		if((stu = stud.checkStuNo(stuNo)) != null){
			stud.printStu(stu);
		}
		else{
			System.out.println("您输入的学号不存在,请选择下一步操作");
			System.out.println("1、继续查看 2、退出系统");
			i = scanner.nextInt();
			if(i == 1){
				showStuInfo(scanner); 
			}
			
			else if(i == 2){
				System.exit(0);
			}
			
			else{
				System.out.println("您输入的数据不合规!!!");
			}
		}
	}
	void showAllStuInfo(){
		stud.printAllstuInf();
	}
}

class Main{
	public static void main(String[] strs){
		System.out.println("欢迎使用tyrantfor的学生管理系统");
		
		Scanner scan = new Scanner(System.in);
		
		Main main = new Main();
		
		StuSys s1 = new StuSys();
		
		while(true){
			main.showMenu();
			switch(scan.nextInt()){
				case 0:
				System.exit(0);
				
				case 1:
				s1.insertStu(scan);
				break;
				
				case 2:
				s1.delateStu(scan);
				break;
				
				case 3:
				s1.updateStu(scan);
				break;
				
				case 4:
				s1.showStuInfo(scan);
				break;
				
				case 5:
				s1.showAllStuInfo();
				break;
				
				default:
				
				System.out.println("输入数据不合规!!!");
			}
		}
	}
	
	void showMenu(){
		System.out.println("请选择操作:\n\n");
		
		System.out.println("1:增加学生信息");
		System.out.println("2:删除学生信息");
		System.out.println("3:修改学生信息");
		System.out.println("4:根据学号查看学生信息");
		System.out.println("5:查看所有学生信息");
		System.out.println("0:退出系统");
	}
}











1、把6个java文件保存到同一文件夹,例如C:\Student.然后将6个java文件分别编译生成相应的字节码(.class)文件,然后,用java 解释器运行主类:C:\Student\java StudentManager 2、使用jar.exe把一些文件压缩成JAR文件,来发布我们的应用程序。我们可以把本java应用程序中涉及到的类文件(*.class)压缩成一个JAR文件,例如StudentManager.jar。 首先,用记事本编一个清单文件(Manifestfiles): Manifest-Version: 1.0 Main-class: StudentManager Created-By: 1.2.2(Sun Microsystems Inc.) 例如,清单文件命名为moon.mf,保存到C:\Student。 注意:在编清单文件时,在“Manifest-Version:”和“1.0”之间,“Main-class:”和“StudentManager”之间,以及在“Created-By:”和“1.2.2(Sun Microsystems Inc.)”之间必须有且只有一个空格。 然后,如下生成JAR文件: C:\Student\jar cvfm StudentManager.jar moon.mf *.class 其中,参数C表示要生成一个新的JAR文件;f表示要生成的JAR文件的名字,m表示文件清单文件的名字,v表示生成详细输出到标准输出上。具体运行jar命令请查看 现在就可以将StudentManager.jar拷贝到任何一个安装了java运行环境(jdk版本号须高于1.2.2)的计算机上,只要鼠标双击StudentManager.jar文件就可以运行该java应用程序了。 注意在装了WinRAR解压缩软件的机子上可能不能运行,因此,在发布本系统时,还应该建立一个有如下内容的.bat文件(StudentManager.bat),用记事本编javaw -jar StudentManager.jar 保存即可。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值