简易版学生成绩管理系统
实体类
public class Student {
int id;//学号
String name;//名字
String address;//地址
int ChineseGrade;//语文成绩
int MathGrade; //数学成绩
int EnglishGrade;//英语成绩
double averGrade;//平均分
public Student(int id, String name, String address, int chineseGrade, int mathGrade, int englishGrade, double averGrade) {
this.id = id;
this.name = name;
this.address = address;
ChineseGrade = chineseGrade;
MathGrade = mathGrade;
EnglishGrade = englishGrade;
this.averGrade = averGrade;
}
public Student() {
}
@Override
public String toString() {
return
"\t学生id:" + id +
"\t姓名:" + name +
"\t地址:" + address +
"\t语文成绩:" + ChineseGrade +
"\t数学成绩:" + MathGrade +
"\t英语成绩:" + EnglishGrade +
"\t平均分:" + averGrade ;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getChineseGrade() {
return ChineseGrade;
}
public void setChineseGrade(int chineseGrade) {
ChineseGrade = chineseGrade;
}
public int getMathGrade() {
return MathGrade;
}
public void setMathGrade(int mathGrade) {
MathGrade = mathGrade;
}
public int getEnglishGrade() {
return EnglishGrade;
}
public void setEnglishGrade(int englishGrade) {
EnglishGrade = englishGrade;
}
public double getAverGrade() {
return averGrade;
}
public void setAverGrade(double averGrade) {
this.averGrade = averGrade;
}
}
service类
public class StudentService {
//定义集合保存学生信息
List<Student> list = new ArrayList<>();
//全查询学生信息
public List<Student> findAll() {
//返回集合
return list;
}
//添加学生信息
public void addStudent(Student student) {
//调用集合添加方法 添加进去
list.add(student);
}
//修改学生信息
public Student updateStudent(int id) {
//循环遍历集合 将集合中的每一个id 和输入的id 进行对比 查找
for (int i = 0; i < list.size(); i++) {
if (list.get(i).id == id) {
return list.get(i);
}
}
return null;
}
//删除学生信息
public boolean deleteStudent(int id) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).id == id) {
list.remove(i);
i--;
return true;
}
}
return false;
}
}
view类 主菜单界面
public class StudentView {
//设置学生初始id为1
int id = 1;
//定义一个1布尔变量 控制主菜单循环
boolean loop = true;
//实例化service
StudentService studentService = new StudentService();
//全查询学生信息
public void findAll() {
List<Student> list = studentService.findAll();
list.forEach(System.out::println);
}
//添加学生信息
public void addStudent() {
System.out.println("请输入学生的姓名:");
String name = Util.readString(10);
System.out.println("请输入学生的地址:");
String address = Util.readString(10);
System.out.println("请输入学生的语文成绩:");
int chinese = Util.readInt();
System.out.println("请输入学生的数学成绩:");
int math = Util.readInt();
System.out.println("请输入学生的英语成绩:");
int english = Util.readInt();
int aver = (chinese + math + english) / 3;
//键盘输入信息 并实例化类 调用全参构造器进行赋值
Student student = new Student(id, name, address, chinese, math, english, aver);
//调用方法
studentService.addStudent(student);
id++;
System.out.println("添加成功");
}
//修改学生信息
public void updateStudent() {
//键盘输入要修改的学生信息 并调用set方法 进行赋值
System.out.println("请输入你要修改的学生id");
int id = Util.readInt();
Student student = studentService.updateStudent(id);
if (student == null) {
System.out.println("没有对应的学生");
return;
}
System.out.println("请输入学生的姓名:");
String name = Util.readString(10);
student.setName(name);
System.out.println("请输入学生的地址:");
String address = Util.readString(10);
student.setAddress(address);
System.out.println("请输入学生的语文成绩:");
int chinese = Util.readInt();
student.setChineseGrade(chinese);
System.out.println("请输入学生的数学成绩:");
int math = Util.readInt();
student.setMathGrade(math);
System.out.println("请输入学生的英语成绩:");
int english = Util.readInt();
student.setEnglishGrade(english);
int aver = (chinese + math + english) / 3;
student.setAverGrade(aver);
System.out.println("修改成功");
}
//删除信息
public void deleteStudent() {
//键盘输入要删除的学生信息
System.out.println("请输入你要删除的学生id");
int id = Util.readInt();
boolean flag = studentService.deleteStudent(id);
if (!flag) {
System.out.println("删除失败");
} else {
System.out.println("删除成功");
}
}
//主菜单
public void mainEu() {
while (loop) {
System.out.println("***********欢迎来到学生成绩管理系统!***********");
System.out.println("\t\t1.添加学生信息");
System.out.println("\t\t2.删除学生信息");
System.out.println("\t\t3.修改学生信息");
System.out.println("\t\t4.查看所有学生信息");
System.out.println("\t\t5.按排序信息查看");
System.out.println("\t\t6.退出管理系统");
System.out.println("请输入对应的选择");
int choice = Util.readInt();
switch (choice) {
case 1:
addStudent();
break;
case 2:
deleteStudent();
break;
case 3:
updateStudent();
break;
case 4:
findAll();
break;
case 5:
mainEu2();
break;
case 6:
loop = false;
break;
default:
System.out.println("输入不合法、请重新输入");
break;
}
}
}
//学生信息排序显示
public void mainEu2() {
boolean loop1 = true;
while (loop1) {
System.out.println("***********欢迎来到学生成绩管理系统!***********");
System.out.println("\t\t1.按学号排序");
System.out.println("\t\t2.按语文成绩排序");
System.out.println("\t\t3.按数学成绩排序");
System.out.println("\t\t4.按英语成绩排序");
System.out.println("\t\t5.按平均分排序");
System.out.println("\t\t6。退出排序");
System.out.println("请输入你的选择");
int choice = Util.readInt();
switch (choice) {
case 1:
orderById();
break;
case 2:
orderByChinese();
break;
case 3:
orderByMath();
break;
case 4:
orderByEnglish();
break;
case 5:
orderByAvg();
break;
case 6:
loop1 = false;
break;
default:
System.out.println("输入有误");
break;
}
}
}
//按学号排序
public void orderById() {
List<Student> list = studentService.findAll();
System.out.println("原数据");
list.forEach(System.out::println);
CompareId id1 = new CompareId();
Collections.sort(list, id1);
System.out.println("========================");
System.out.println("新数据");
list.forEach(System.out::println);
}
//按语文成绩排序
public void orderByChinese() {
System.out.println("原数据");
List<Student> list = studentService.findAll();
list.forEach(System.out::println);
CompareChinese chinese = new CompareChinese();
System.out.println("========================");
Collections.sort(list, chinese);
System.out.println("新数据");
list.forEach(System.out::println);
}
//按数学成绩排序
public void orderByMath() {
List<Student> list = studentService.findAll();
System.out.println("原数据");
list.forEach(System.out::println);
CompareMath math = new CompareMath();
System.out.println("========================");
System.out.println("新数据");
Collections.sort(list, math);
list.forEach(System.out::println);
}
//英语
public void orderByEnglish() {
List<Student> list = studentService.findAll();
System.out.println("原数据");
list.forEach(System.out::println);
CompareEnglish eng = new CompareEnglish();
System.out.println("========================");
System.out.println("新数据");
Collections.sort(list, eng);
list.forEach(System.out::println);
}
//平均分
public void orderByAvg() {
List<Student> list1 = studentService.findAll();
System.out.println("原数据");
list1.forEach(System.out::println);
CompareAvg avg = new CompareAvg();
System.out.println("========================");
System.out.println("新数据");
Collections.sort(list1, avg);
list1.forEach(System.out::println);
}
}
//按照姓名进行排序
class CompareId implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.getId() - o2.getId();
}
}
//按语文成绩排序
class CompareChinese implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
return o1.getChineseGrade() - o2.getChineseGrade();
}
}
//数学
class CompareMath implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.getMathGrade() - o2.getMathGrade();
}
}
//英语
class CompareEnglish implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return o1.getEnglishGrade() - o2.getEnglishGrade();
}
}
//平均分
class CompareAvg implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
return (int) (o1.getAverGrade() - o2.getAverGrade());
}
}
接收键盘输入类
import java.util.Scanner;
public class Util {
/**
* 工具类的作用:
* 处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
*/
//静态属性
private static Scanner scanner = new Scanner(System.in);
/**
* 功能:读取键盘输入的一个菜单选项,值:1——5的范围
*
* @return 1——5
*/
public static char readMenuSelection() {
char c;
for (; ; ) {
String str = readKeyBoard(1, false);//包含一个字符的字符串
c = str.charAt(0);
if (c != '1' && c != '2' && c != '3' & c != '4' & c != '5') {
System.out.println("选择错误,请重新输入:");
} else break;
}
return c;
}
/**
* 功能:读取键盘输入的一个字符
*
* @return 一个字符
*/
public static char readChar() {
String str = readKeyBoard(1, false);//读取字符
return str.charAt(0);
}
/**
* 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
*
* @param defaultValue 指定的默认值
* @return 默认值或输入的字符
*/
public static char readChar(char defaultValue) {
String str = readKeyBoard(1, true);//读取结果不是字符就是一个空的字符串
return (str.length() == 0) ? defaultValue : str.charAt(0);
}
/**
* 功能:读取键盘输入的整型,长度小于2位
*
* @return 整数
*/
public static int readInt() {
int n;
for (; ; ) {
String str = readKeyBoard(10, true);//读取一个整数,长度<=10位
try {
n = Integer.parseInt(str);//进行转型,字符转换成整数
break;
} catch (NumberFormatException e) {
System.out.println("数字输入的有错误,请重新输入!");
}
}
return n;
}
/**
* 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
*
* @param defaultValue 指定的默认值
* @return 整数或默认值
*/
public static int readInt(int defaultValue) {
int n;
for (; ; ) {
String str = readKeyBoard(10, true);
if (str.equals("")) {
return defaultValue;
}
//异常处理
try {
n = Integer.parseInt(str);
break;
} catch (NumberFormatException e) {
System.out.println("数字输入的有错误,请重新输入!");
}
}
return n;
}
/**
* 功能:读取键盘输入的指定长度的字符串
*
* @param limit 限制的长度
* @return 指定长度的字符串
*/
public static String readString(int limit) {
return readKeyBoard(limit, false);
}
/**
* 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
*
* @param limit 限制的长度
* @param defaultValue 指定的默认值
* @return 指定长度的字符串
*/
public static String readString(int limit, String defaultValue) {
String str = readKeyBoard(limit, true);
return str.equals("") ? defaultValue : str;
}
/**
* 功能:读取键盘输入的确认选项,Y或N
* 将小的功能,封装到一个方法中.
*
* @return Y或N
*/
public static char readConfirmSelection() {
System.out.println("请输入你的选择(Y/N)");
char c;
for (; ; ) {
//将接受的字符转换成大写字母
String str = readKeyBoard(1, false).toUpperCase();
c = str.charAt(0);
if (c == 'Y' || c == 'N') {
break;
} else {
System.out.println("选择有错误,请重新输入!");
}
}
return c;
}
/**
* 功能: 读取一个字符串
*
* @param limit 读取的长度
* @param blankReturn 如果为true ,表示 可以读空字符串。
* 如果为false表示 不能读空字符串。
* <p>
* 如果输入为空,或者输入大于limit的长度,就会提示重新输入。
* @return
*/
public static String readKeyBoard(int limit, boolean blankReturn) {
//定义一个字符串
String line = "";
while (scanner.hasNextLine()) {//判断是否有下一行
line = scanner.nextLine();
//如果line.length=0, 即用户没有输入任何内容,直接回车
if (line.length() == 0) {
if (blankReturn) return line;//如果blankReturn=true,可以返回空串
else continue; //如果blankReturn=false,不接受空串,必须输入内容
}
//如果用户输入的内容大于了 limit,就提示重写输入
//如果用户如的内容 >0 <= limit ,我就接受
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
}
测试类
public class Test {
public static void main(String[] args) {
StudentView studentView = new StudentView();
studentView.mainEu();
}
}
###运行截图