学生成绩管理系统----初学者练习

文章目录

  • 学生成绩管理系统
  • 一、创建学生类
  • 二、创建成绩类
  • 三、创建学生管理类
  • 四、异常类
  • 五、测试类(主程序)
  • 总结


学生成绩管理系统

新手练手小项目,主要练习面向对象、循环、数组、排序等等。
本人也是自学练手,代码有不正确的或不完善的也请多多包涵,留言指导。
感谢!


一、创建学生类

储存学生的基本信息

public class Student {
     
	private int no;
	private String name;
	Result result;
	
	public Student() {
     
		super();
	}

	public Student(int no, String name,Result result) {
     
		super();
		this.result = result;
		this.name = name;
		this.no = no;
	}

	public Result getResult() {
     
		return result;
	}

	public void setResult(Result result) {
     
		this.result = result;
	}

	public String getName() {
     
		return name;
	}

	public void setName(String name) {
     
		this.name = name;
	}

	public int getNo() {
     
		return no;
	}

	public void setNo(int no) {
     
		this.no = no;
	}
	
	public String toString(){
     
		return "\t" + no + "\t" + name + "\t" + result;
	}
}

二、创建成绩类

便于成绩的增加,易于管理

public class Result {
     //成绩类
	private int java;
	private int python;
	private int c_shar;
	private int sql;
	private int sum;
	private int avg;
	
	public Result() {
     
		
	}

	public Result(int java, int python, int c_shar, int sql) {
     
		super();
		this.java = java;
		this.python = python;
		this.c_shar = c_shar;
		this.sql = sql;
	}

	public int getJava() {
     
		return java;
	}

	public void setJava(int java) {
     
		this.java = java;
	}

	public int getPython() {
     
		return python;
	}

	public void setPython(int python) {
     
		this.python = python;
	}

	public int getC_shar() {
     
		return c_shar;
	}

	public void setC_shar(int c_shar) {
     
		this.c_shar = c_shar;
	}

	public int getSql() {
     
		return sql;
	}

	public void setSql(int sql) {
     
		this.sql = sql;
	}
	
	public int getSum(){
     
		return this.java + this.python + this.c_shar + this.sql;
	}
	
	public int getAvg(){
     
		return this.getSum() / 4;
	}
	
	public String toString(){
     
		return java + "\t" + python + "\t" + c_shar + "\t" + sql + "\t" + this.getSum() + "\t" + this.getAvg();
	}
}

三、创建学生管理类

主要功能在此类中,例如添加学生信息、查找学生等等

import java.util.Scanner;

public class StudentAdmin {
     //管理学生类
	Scanner in = new Scanner(System.in);
	
	/**
	 * 
	 * @param name 传一个name添加学生姓名
	 * @param Arr传一个学生数组,将学生对象保存
	 * @throws AddStudentException
	 */
	public void addStudent(String name,Student[] Arr) throws AddStudentException{
     //添加学生方法
		AddStudentException ase = new AddStudentException("学生已达上限,添加失败!");
		Student stu = new Student();
		Result r = new Result();
		stu.setNo(setIndex(Arr) + 1);
		stu.setName(name);
		stu.setResult(r);
		if(setIndex(Arr) == -1){
     
			throw ase;
		}else{
     
			Arr[this.setIndex(Arr)] = stu;
		}
	}
	/**
	 * 
	 * @param Arr传一个数组
	 * @return返回空数组元素的下标
	 */
	public int setIndex(Student[] Arr){
     
		for(int i = 0; i < Arr.length; i++){
     
			if(null == Arr[i]){
     
				return i;
			}
		}
		return -1;
	}
	public void print(Student[] arr){
     //打印学生对象
		for(int i = 0; i < arr.length; i++){
     
			if(judge(i+1,arr[i])){
     
				System.out.println(arr[i]);
			}
		}
	}
	public boolean judge(int no,Student stu){
     //判断数组元素编号和传的编号是否一致
		if(stu != null){
     
			if(stu.getNo() == no){
     
				return true;
			}else{
     
				return false;
			}
		}
		return false;
	}
	public void search(String name,Student[] arr){
     //查找学生方法
		for(int i = 0; i < arr.length; i++){
     
			if(judge(i + 1,arr[i])){
     
				if(arr[i].getName().equals(name)){
     
					System.out.println(arr[i]);
					return;
				}
			}
		}
		System.out.println("没有找到此学生,请确认输入的姓名是否正确!");
	}
	public void update(int no,String name,Student[] arr){
     //更新学生姓名
		for(int i = 0; i < arr.length; i++){
     
			if(judge(i + 1,arr[i])){
     
				arr[i].setName(name);
				System.out.println(arr[i]);
				return;
			}
		}
		System.out.println("没有此编号,请确认输入的编号是否正确!");
	}
	public void del(int no,Student[] arr){
     //删除学生信息
		for(int i = 0; i < arr.length; i++){
     
			if(judge(no,arr[i])){
     
				arr[i] = null;
				return;
			}
		}
		System.out.println("没有此编号,请确认输入的编号是否正确!");
	}
	public void stuResult(int no,Student[] arr){
     //根据编号输入学生各科成绩
		for(int i = 0; i < arr.length; i++){
     
			if(judge(i + 1,arr[i])){
     
				if(arr[i].getNo() == no){
     
					System.out.println("请输入" + arr[i].getName() + "的java成绩:");
					arr[i].result.setJava(in.nextInt());
					System.out.println("请输入" + arr[i].getName() + "的python成绩:");
					arr[i].result.setPython(in.nextInt());
					System.out.println("请输入" + arr[i].getName() + "的c_char成绩:");
					arr[i].result.setC_shar(in.nextInt());
					System.out.println("请输入" + arr[i].getName() + "的sql成绩:");
					arr[i].result.setSql(in.nextInt());
					break;
				}
			}
		}
	}
	public void paiXu(int no,Student[] arr){
     //根据某科成绩排序
		switch(no){
     
			case 1:
				for(int i = 0; i < arr.length-1; i++){
     
					for(int j = i + 1; j < arr.length; j++){
     
						if(arr[j].result.getJava() > arr[i].result.getJava()){
     
							Student max = arr[i];
							arr[i] = arr[j];
							arr[j] = max;
						}
					}
				}
				for(int i = 0; i < arr.length; i++){
     
					System.out.println(arr[i]);
				}
				break;
			case 2:
				for(int i = 0; i < arr.length-1; i++){
     
					for(int j = i + 1; j < arr.length; j++){
     
						if(arr[j].result.getPython() > arr[i].result.getPython()){
     
							Student max = arr[i];
							arr[i] = arr[j];
							arr[j] = max;
						}
					}
				}
				for(int i = 0; i < arr.length; i++){
     
					System.out.println(arr[i]);
				}
				break;
			case 3:
				for(int i = 0; i < arr.length-1; i++){
     
					for(int j = i + 1; j < arr.length; j++){
     
						if(arr[j].result.getC_shar() > arr[i].result.getC_shar()){
     
							Student max = arr[i];
							arr[i] = arr[j];
							arr[j] = max;
						}
					}
				}
				for(int i = 0; i < arr.length; i++){
     
					System.out.println(arr[i]);
				}
				break;
			case 4:
				for(int i = 0; i < arr.length-1; i++){
     
					for(int j = i + 1; j < arr.length; j++){
     
						if(arr[j].result.getSql() > arr[i].result.getSql()){
     
							Student max = arr[i];
							arr[i] = arr[j];
							arr[j] = max;
						}
					}
				}
				for(int i = 0; i < arr.length; i++){
     
					System.out.println(arr[i]);
				}
				break;
			default:
				System.out.println("你输入的编号错误!");
		}
	}
	public void sumPaiXu(Student[] arr){
     //根据总分进行排序
		for(int i = 0; i < arr.length-1; i++){
     
			for(int j = i + 1; j < arr.length; j++){
     
				if(arr[j].result.getSum() > arr[i].result.getSum()){
     
					Student max = arr[i];
					arr[i] = arr[j];
					arr[j] = max;
				}
			}
		}
		for(int i = 0; i < arr.length; i++){
     
			System.out.println(arr[i]);
		}
		return;
	}
}

四、异常类

练习自定义异常类的创建及使用

public class AddStudentException extends Exception{
     
	public AddStudentException(){
     }
	public AddStudentException(String s){
     
		super(s);
	}
}

五、测试类(主程序)

import java.util.Scanner;

public class Test {
     
	public static void main(String[] args){
     
		Scanner in = new Scanner(System.in);
		
		StudentAdmin admin = new StudentAdmin();
		
		System.out.println("请定义学生的人数:");
		Student[] stuArr = new Student[in.nextInt()];
		
		while(true){
     
			System.out.println("请选择你要执行的功能:");
			System.out.println("1:添加一个学生");
			System.out.println("2:查找一个学生");
			System.out.println("3:根据学生编号更新 学生基本信息");
			System.out.println("4:根据学生编号删除学生");
			System.out.println("5:根据编号输入学生各科成绩");
			System.out.println("6:根据某科成绩进行排序");
			System.out.println("7:根据总分进行排序");
			System.out.println("0:退出系统");
			int num = in.nextInt();
			switch(num){
     
				case 0 :
					System.exit(0);
				case 1 :
					System.out.println("请输入学生姓名:");
					try {
     
						admin.addStudent(in.next(), stuArr);
					} catch (AddStudentException e) {
     
						e.printStackTrace();
					}
					admin.print(stuArr);
					break;
				case 2 :
					System.out.println("请输入要查找的学生姓名:");
					String name = in.next();
					admin.search(name, stuArr);
					break;
				case 3 :
					System.out.println("请输入要修改的编号:");
					int no = in.nextInt();
					System.out.println("请重新输入学生姓名:");
					String name1 = in.next();
					admin.update(no, name1, stuArr);
					break;
				case 4 :
					System.out.println("请输入学生编号:");
					int no1 = in.nextInt();
					admin.del(no1, stuArr);
					System.out.println("删除学生信息成功!");
					break;
				case 5 :
					System.out.println("请输入学生编号:");
					int no2 = in.nextInt();
					admin.stuResult(no2, stuArr);
					admin.print(stuArr);
					break;
				case 6 :
					System.out.println("请输入编号对应成绩进行排序【1:java 2:python 3:c_char 4:sql】");
					int no3 = in.nextInt();
					admin.paiXu(no3, stuArr);
					break;
				case 7 :
					admin.sumPaiXu(stuArr);
					break;
				default :
					System.out.println("您输入的编号有误,请重新输入!");
					break;
			}
		}
	}
}

总结

本人也是刚学习java不久,一直在看视频自学。目前学习到了集合(刚开始),线程、IO还没学。这个小的项目也是我自己在练手,巩固学习的基础知识,只用到了最基本的知识。
在做这个项目的时候有很多不懂的地方。
例如:
1、Student类中的Result result这个实例变量的传参,我发现如果把Result result这个属性私有化无法赋值,最后便把访问权限改成了缺省
2、“根据编号删除学生信息”不知道怎么删除数组中的学生对象,现在知道原来把数组赋值为“null”就行了
等等
通过这个小练习,也学习到了很多很多。代码还有很多不完善的地方,分享给大家,请大家指导!

你可能感兴趣的:(java,编程语言)