一个具有良好编程习惯的系统,是将对象的属性、行为封装进不同的类中方法中,在主方法中直接调用需要的方法属性,大大的减少的代码的冗余度和易维护性,方便后期功能的扩展。目前实现的系统还有许多不完美的地方,对异常输入的处理比较少,等以后学习到异常处理再加以完善,不过对刚入门的小白来说,这是个不错的练手机会,对Java的面向对象特点,封装,模块复用有良好的体现,再接再厉。
###### 主方法,调用其他类中的属性和方法
import java.util.Scanner;
public class StudentManagement_1 {
//学生管理系统主程序
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("--------------------请定义学生总数:--------------------");
int n=in.nextInt();
Student_1[] stuArr=new Student_1[n]; //创建学生类数组,存储学生所有的信息
Admin_1 admin=new Admin_1();
while(true) {
System.out.println("------------------请选择您需要执行的功能------------------");
System.out.println("10、添加一个学生");
System.out.println("11、查找一个学生");
System.out.println("12、根据学号修改学生基本信息");
System.out.println("13、根据学号删除学生基本信息");
System.out.println("14、根据学号输入学生各科成绩");
System.out.println("15、根据某门成绩进行排序");
System.out.println("16、根据总分进行排序");
System.out.println("99、退出系统");
String num=in.nextInt();
//执行添加操作
if(num.equals(10)) {
System.out.println("请输入新加学生学号:");
int on=in.nextInt();
System.out.println("请输入姓名:");
String name=in.next();
System.out.println("请输入年龄:");
int age=in.nextInt();
System.out.println("请输入性别:");
String sex=in.next();
admin.add(on,name,age,sex,stuArr);
}
//执行查找操作
else if(num.equals(11)) {
System.out.println("请输入你想查找学生学号:");
int on=in.nextInt();
admin.select(on,stuArr);
}
//执行修改操作
else if(num.equals(12)) {
System.out.println("请输入您想修改学生的原始学号:");
int on=in.nextInt();
System.out.println("请输入修改后的学生姓名:");
String name=in.next();
System.out.println("请输入修改后的学生年龄:");
int age=in.nextInt();
System.out.println("请输入修改后的学生性别:");
String sex=in.next();
admin.update(on,name,age,sex,stuArr);
}
//执行删除操作,根据学号进行修改操作
else if(num.equals(13)) {
System.out.println("请输入需要删除学生的学号:");
int on=in.nextInt();
admin.delete(on,stuArr);
}
//根据学号输入学生各科成绩
else if(num.equals(14)) {
System.out.println("请输入待添加学生的学号:");
int on=in.nextInt();
System.out.println("请输入Java成绩:");
int java=in.nextInt();
System.out.println("请输入sql成绩:");
int sql=in.nextInt();
System.out.println("请输入html成绩:");
int html=in.nextInt();
System.out.println("请输入web成绩:");
int web=in.nextInt();
admin.score(on,java,sql,html,web,stuArr);
}
//根据某门成绩进行排序
else if(num.equals(15)) {
System.out.println("请输入您需要排序的科目:1、Java 2、sql 3、html 4、web");
int number=in.nextInt();
admin.sourceSort(number,stuArr);
}
//根据总分进行排序
else if(num.equals(16)) {
admin.sumSort(stuArr);
}
//退出系统
else if(num.equals(99)) {
System.out.println("系统已经成功退出!");
System.exit(0);
}
}
}
}
学生属性类
//学生属性类
public class Student_1 {
//封装每个对象的属性
private int on;
private String name;
private int age;
private String sex;
private int java;
private int sql;
private int html;
private int web;
private int sum;
private double avg;
//给每个属性的调用提供接口
public int getOn() {
return on;
}
public void setOn(int on) {
this.on = on;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getSql() {
return sql;
}
public void setSql(int sql) {
this.sql = sql;
}
public int getHtml() {
return html;
}
public void setHtml(int html) {
this.html = html;
}
public int getWeb() {
return web;
}
public void setWeb(int web) {
this.web = web;
}
public int getSum() {
return sum;
}
//sum有各科成绩相加得到,无参
public void setSum() {
this.sum = this.java+this.sql+this.html+this.web;
}
public double getAvg() {
return avg;
}
//avg值由sum/4得到,无参
public void setAvg() {
this.avg = this.sum/4;
}
//重写toString方法
public String toString() {
String str=this.on+"\t"+this.name+"\t"+this.age+"\t"+
this.sex+"\t"+this.java+"\t"+this.sql+"\t"+
this.html+"\t"+this.web+"\t"+this.sum+"\t"+this.avg;
return str;
}
}
对象的行为,增删改查的具体实现方法
public class Admin_1 {
Student_1 stu=new Student_1();
//判断这个位置是否有人根据的是:该位置是否为空,为空无人,反之
public int setIndex(Student_1[] arr) {
for(int i=0;i<arr.length;i++) {
if(arr[i]==null) {
return i;
}
}
return 999;
}
//输出操作
String str="学号\t\t姓名\t年龄\t性别\tJava\tsql\thtml\tweb\t总分\t平均分";
public void printf(Student_1[] arr) {
System.out.println(str);
for(int i=0;i<arr.length;i++) {
if(arr[i]!=null) { //如果是空的没必要输出
arr[i].setSum();
arr[i].setAvg();
System.out.println(arr[i]);
}
}
System.out.println("\n\n");
}
//判断学生是否为空操作
public boolean check(int on,Student_1 stu) {
if(stu!=null) {
if(stu.getOn()==on) {
return true;
}
return false;
}
return false;
}
//执行添加操作
public void add(int no,String name, int age,String sex,Student_1[] arr) {
Student_1 stu=new Student_1();
stu.setOn(no);
stu.setName(name);
stu.setAge(age);
stu.setSex(sex);
int i=this.setIndex(arr);
if(i==999) {
System.out.println("添加学生人数已经达到最大值,添加失败!");
}else {
System.out.println("添加成功!");
arr[i]=stu;
}
printf(arr);
}
//执行查找操作
public void select(int on, Student_1[] arr) {
for(int i=0;i<arr.length;i++) {
if(check(on,arr[i])) {
System.out.println("查找成功!");
//这里不能调用printf方法,因为只需要查找到的这个学生信息,不需要全部
System.out.println(str);
System.out.println(arr[i]);
return;
}
}
System.out.println("查找失败!");
}
//执行修改操作
public void update(int on, String name, int age, String sex, Student_1[] arr) {
//执行修改操作,首先判断该学生是否存在
for(int i=0;i<arr.length;i++) {
if(check(on,arr[i])) {
arr[i].setOn(on);
arr[i].setName(name);
arr[i].setAge(age);
arr[i].setSex(sex);
System.out.println("修改成功!");
printf(arr);
return;
}
}
System.out.println("修改失败!");
}
//执行删除操作,同样需要考虑删除的学生是否存在
public void delete(int on, Student_1[] arr) {
for(int i=0;i<arr.length;i++) {
if(check(on,arr[i])) {
arr[i]=null;
System.out.println("删除成功!");
printf(arr);
return;
}
}
System.out.println("删除失败!");
}
//添加学生成绩操作
public void score(int on, int java, int sql, int html, int web, Student_1[] arr) {
for(int i=0;i<arr.length;i++) {
if(check(on,arr[i])) {
arr[i].setJava(java);
arr[i].setSql(sql);
arr[i].setHtml(html);
arr[i].setWeb(web);
printf(arr);
return;
}
}
System.out.println("添加学生成绩失败!该生不存在!");
}
/**
* 这里使用选择排序,不采用冒泡排序
* 因为冒泡排序有bug,是相邻的学生进行排序的,当这两个学生中间
* 有一个学生是null时,就没办法交换了,所以用选择排序
* @param num
* @param arr
*/
public void sourceSort(int num, Student_1[] arr) {
//Java成绩
if(num==1) {
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[j].getJava()>arr[i].getJava()) {
Student_1 t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
}
printf(arr);
}
//sql成绩
else if(num==2) {
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[j].getSql()>arr[i].getSql()) {
Student_1 t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
}
printf(arr);
}
//html成绩
else if(num==3) {
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[j].getHtml()>arr[i].getHtml()) {
Student_1 t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
}
printf(arr);
}
//web成绩
else if(num==4) {
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[j].getWeb()>arr[i].getWeb()) {
Student_1 t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
}
printf(arr);
}
}
//根据总分进行排序操作
public void sumSort(Student_1[] arr) {
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[j].getSum()>arr[i].getSum()) {
Student_1 t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}
}
printf(arr);
}
}