本文实例为大家分享了Java实现学生成绩管理系统的具体代码,供大家参考,具体内容如下
新手练手小项目,主要练习面向对象、循环、数组、排序等等。
本人也是自学练手,代码有不正确的或不完善的也请多多包涵,留言指导。
感谢!
一、创建学生类
储存学生的基本信息
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”就行了
等等
通过这个小练习,也学习到了很多很多。代码还有很多不完善的地方,分享给大家,请大家指导!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。