今天来写一写学习Java前期自己练习的一个小项目——学生管理系统。
写这个系统之前我们需要有一个类来规范学生对象,学生类一共有学号、姓名、邮箱、成绩、生日五个属性。其次我们还需要准备一个班级类和一个老师类,老师类有工号、姓名、所授课程三个属性。班级类则只需要一个班主任和一帮学生即可。
既然是前期的练习自然涉及不到数据库,所有的数据都是写在代码里头供运行测试的,这里大家不需要太过纠结。
学生类
import java.time.LocalDate; public class Student { //学号 private int id; //姓名 private String name; //邮箱 private String email; //成绩 private double sorce; //生日 private LocalDate berthday; 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 getEmail() { return email; } public void setEmail(String email) { this.email = email; } public double getSorce() { return sorce; } public void setSorce(double sorce) { this.sorce = sorce; } public LocalDate getBerthday() { return berthday; } public void setBerthday(LocalDate berthday) { this.berthday = berthday; } public Student(int id, String name, String email, double sorce, LocalDate berthday) { super(); this.id = id; this.name = name; this.email = email; this.sorce = sorce; this.berthday = berthday; } public Student() { super(); } //这里是便于打印学生信息所定义的一个方法,类似toString public String allStu() { return "学号:" + id + ", 姓名:" + name + ", 邮箱:" + email + ", 成绩:" + sorce + ", 生日:" + berthday ; } }
老师类
public class Teacher { private int id; private String name; private String subject; 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 getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public Teacher(int id, String name, String subject) { super(); this.id = id; this.name = name; this.subject = subject; } public Teacher() { super(); } public String allTea() { return "编号:" + id + ", 姓名:" + name + ", 所教科目:" + subject; } }
班级类
import java.util.*; public class Clazz { private Teacher teacher; private List<Student> stu = new ArrayList<>(); private int id; public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } public List<Student> getStu() { return stu; } public void setStu(List<Student> stu) { this.stu = stu; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Clazz(Teacher teacher, List<Student> stu, int id) { super(); this.teacher = teacher; this.stu = stu; this.id = id; } public Clazz() { super(); } }
准备好这三个类以后我们要考虑运行界面,这个界面是体现在操作台上的简单界面,所以我们需要靠判断用户输入的数字来执行功能,至于为什么没有炫酷的界面,因为在写这个程序的时候博主还没有学习炫酷的界面怎么做(其实我现在也还不知道怎么做!嘿嘿嘿~)
import java.time.LocalDate; import java.util.*; import org.lanqiao.text0413_0416Cla.*; import org.lanqiao.text0413_0416Services.*; public class TestMain { // 班级容器 static List<Clazz> cla = new ArrayList<Clazz>(); // 学生容器 static List<Student> ostu = new ArrayList<Student>(); // 键盘输入对象 static Scanner sc = new Scanner(System.in); static Scanner sl = new Scanner(System.in); static Scanner sk = new Scanner(System.in); static{ // 老师对象 Teacher Bob = new Teacher(1, "Bob,Jasoh", "English"); // 学生对象 Student ost1 = new Student(1, "王强", "wangqiang@lanqiao.org", 89.2, LocalDate.of(1996, 2, 21)); Student ost2 = new Student(2, "张三", "zhangsan@lanqiao.org", 90, LocalDate.of(1996, 8, 11)); Student ost3 = new Student(3, "王二", "wanger@lanqiao.org", 43, LocalDate.of(1996, 7, 05)); Student ost4 = new Student(4, "麻子", "mazi@lanqiao.org", 5, LocalDate.of( 1996, 3, 01)); // 将学生对象添加入学生容器 ostu.add(ost1); ostu.add(ost2); ostu.add(ost3); ostu.add(ost4); // 班级对象 Clazz one = new Clazz(Bob, ostu, 01); // 将班级对象添加到容器 cla.add(one); } public static void main(String[] args) { // 操作界面 try { while (true) { System.out.println("========班级管理系统======="); System.out.println("1、班级信息管理"); System.out.println("2、老师信息管理"); System.out.println("3、学生信息管理"); System.out.println("4、退出程序"); int oneinput = sc.nextInt(); switch (oneinput) { case 1: a: while (true) { System.out.println("1、查看所有班级信息"); System.out.println("2、查看指定班级信息"); System.out.println("3、增加班级"); System.out.println("4、删改班级"); System.out.println("5、返回上一级"); int twoinput = sc.nextInt(); switch (twoinput) { case 1: ClazzServices.findClazz(cla); break; case 2: ClazzServices.findOneClazz(cla); break; case 3: ClazzServices.addClazz(cla); break; case 4: ClazzServices.deleteClazz(cla); break; case 5: break a; default: System.out.println("没有此功能!"); break; } } break; case 2: b: while (true) { System.out.println("1、查看所有老师信息"); System.out.println("2、修改老师信息"); System.out.println("3、返回上一级"); int threeinput = sc.nextInt(); switch (threeinput) { case 1: TeaServices.findTea(cla); break; case 2: TeaServices.updateTea(cla); break; case 3: break b; default: break; } } break; case 3: b: while (true) { System.out.println("1、增加一个学生"); System.out.println("2、删除一个学生"); System.out.println("3、更新学生个人信息"); System.out.println("4、学生转班"); System.out.println("5、返回上一级"); int fourinput = sc.nextInt(); switch (fourinput) { case 1: StuService.addStu(cla); break; case 2: StuService.deleteStu(cla); break; case 3: StuService.updateStu(cla); break; case 4: StuService.stuClazz(cla); break; case 5: break b; default: break; } } break; case 4: System.out.println("谢谢使用"); System.exit(0); break; default: System.out.println("没有此功能!"); break; } } } catch (Exception e) { System.out.println("输入有误!!"); } } }
可以看出来在界面运行之前我们手动往集合里添加了一些数据,还是那句话没有数据库我只能写一点本地数据。可以看出我这个界面是靠判断用户输入的数字来决定执行哪个类的哪个方法,由于Scanner多次获取int类型会出现多次输入的内容出现错误,所以博主选择多创建了几个Scanner对象(其实我也不知道其他解决办法QAQ)。
接下来是班级、老师、学生这对象的信息操作,
班级:
import java.time.LocalDate; import java.util.*; import org.lanqiao.text0413_0416.*; import org.lanqiao.text0413_0416Cla.Clazz; import org.lanqiao.text0413_0416Cla.Student; import org.lanqiao.text0413_0416Cla.Teacher; public class ClazzServices { static Scanner sc = new Scanner(System.in); static Scanner sl = new Scanner(System.in); static Scanner sk = new Scanner(System.in); //删除方法 public static void deleteClazz(List<Clazz> cla) { // 输入要删除的班级编号 System.out.println("请输入要删除的班级编号!"); int id = sl.nextInt(); // 遍历班级容器,若id相同直接删除 for (int i = 0; i < cla.size(); i++) { if (cla.get(i).getId() == id) { cla.remove(i); System.out.println("删除成功!"); } else if (i == cla.size() - 1 && cla.get(i).getId() != id) { System.out.println("删除失败!"); return; } } } //添加方法 public static void addClazz(List<Clazz> cla) { // 请输入新班级的编号 System.out.println("请输入新班级的编号"); int id = sc.nextInt(); // 如果班级编号已经存在,则不能添加 for (Clazz a : cla) { if (a.getId() == id) { System.out.println("该班级已存在,请核对信息!"); return; } } System.out.println("请输入新班级的班主任信息"); System.out.println("请按以下格式输入:3 Davi,Jasoh Math"); // 先获得一个老师信息,并创建这个对象 String tinfo = sl.nextLine(); String[] tinfos = tinfo.split(" "); Teacher nt = new Teacher(Integer.parseInt(tinfos[0]), tinfos[1], tinfos[2]); // 若果老师编号重复则不能创建 for (Clazz s : cla) { if (s.getTeacher().getId() == nt.getId()) { System.out.println("该老师编号已存在,请重新输入"); return; } } // 拿到一个学生的总数作为循环的范围 System.out.println("请输入新班级的学生数量"); int num = sl.nextInt(); // 拿到学生信息,以便创建学生对象 System.out.println("请输入每个学生的信息"); System.out.println("格式如:“1 王强 wangqiang@lanqiao.org 89.2 1996 2 21”"); // 清空学生容器 List<Student> nstu = new ArrayList<>(); // 定义一个变量用于记录循环中创建成功的学生数量 int snum = 0; a: while (snum < num) { // 拿到学生的信息后分割输入的字符串,用于创建学生对象 String info = sk.nextLine(); String[] infos = info.split(" "); if (infos.length < 7) { // 若输入的信息错误则重新输入 System.out.println("信息输入错误!请重新输入!"); continue a; } // 用分割后的信息创建学生对象1 Student stus = new Student(Integer.parseInt(infos[0]), infos[1], infos[2], Double.parseDouble(infos[3]), LocalDate.of( Integer.parseInt(infos[4]), Integer.parseInt(infos[5]), Integer.parseInt(infos[6]))); // 判断学生学号是否重复 for (Clazz s : cla) { for (int i = 0; i < s.getStu().size(); i++) { if (s.getStu().get(i).getId() == stus.getId()) { System.out.println("该学生信息已存在,请重新输入"); continue a; } } } // 添加入集合 nstu.add(stus); snum++; } // 创建班级对象,并添加入班级容器 Clazz ncla = new Clazz(nt, nstu, id); cla.add(ncla); System.out.println("添加成功!"); } //查看班级信息 public static void findClazz(List<Clazz> cla) { // 用于记录公有多少个学生 int total = 0; System.out.println("本校共有:" + cla.size() + "个班,班级信息如下:"); for (Clazz a : cla) { System.out.println(a.getId() + "班共有" + a.getStu().size() + "个学生。"); System.out.println("班主任是:" + a.getTeacher().allTea()); for (int i = 0; i <= a.getStu().size() - 1; i++) { // allStu是写在学生类中的打印方法 System.out.println(a.getStu().get(i).allStu()); } total += a.getStu().size(); } System.out.println("本校共有:" + total + "个学生!"); } //查看某个班级的信息 public static void findOneClazz(List<Clazz> cla) { System.out.println("请输入一个班级id"); int id = sc.nextInt(); for (Clazz a : cla) { // 如果输入的班级id相同则打印这个班级的信息 if (a.getId() == id) { System.out.println(a.getId() + "班共有" + a.getStu().size() + "个学生。"); for (int i = 0; i <= a.getStu().size() - 1; i++) { System.out.println(a.getStu().get(i).allStu()); } } } } }学生:
package org.lanqiao.text0413_0416Services; import java.time.LocalDate; import java.util.List; import java.util.Scanner; import org.lanqiao.text0413_0416Cla.Clazz; import org.lanqiao.text0413_0416Cla.Student; public class StuService { static Scanner sc = new Scanner(System.in); static Scanner sl = new Scanner(System.in); static Scanner sk = new Scanner(System.in); //学生转班 public static void stuClazz(List<Clazz> cla) { // 获取学生所在的班级id System.out.println("输入要转班的学生原班级的编号:"); int id = sc.nextInt(); // 获取学生学号 System.out.println("输入要转班的学生学号:"); int sid = sl.nextInt(); // 获取学生要转到的班级编号 System.out.println("输入学生要转到的班级的编号:"); int cid = sc.nextInt(); // 创建一个新的学生对象用于接收这个学生信息 Student nstu = new Student(); // 遍历班级找出学生所在班级 a: for (int j = 0; j < cla.size(); j++) { if (cla.get(j).getId() == id) { for (int i = 0; i <= cla.get(j).getStu().size(); i++) { // 遍历学生所在班级,找出学生信息 if (cla.get(j).getStu().get(i).getId() == sid) { // 找到学生信息后将它赋给事先创建好的学生对象 nstu = cla.get(j).getStu().get(i); // 删除这个班级学生容器中这个学生的信息 cla.get(j).getStu().remove(cla.get(j).getStu().get(i)); break a; // 如果没有找到就表示学生信息输入错误 } else if (i == cla.get(j).getStu().size() - 1 && cla.get(j).getStu().get(i).getId() != sid) { System.out.println(cla.get(j).getStu().size()); System.out.println("1没有找到要转班的学生信息!"); return; } } // 如果没有找到学生所在班级,说明班级编号输入有误 } else if (j == cla.size() - 1 && cla.get(j).getId() != id) { System.out.println("2没有找到学生所在的班级信息!"); return; } } for (int j = 0; j < cla.size(); j++) { // 找到学生要转入的班级 if (cla.get(j).getId() == cid) { // 找到后将这个学生信息添加至此班级的学生容器中 cla.get(j).getStu().add(nstu); System.out.println("转班成功!"); // 没有找到表示班级编号输入有误 } else if (j == cla.size() - 1 && cla.get(j).getId() != cid) { System.out.println("3没有找到学生要转到的班级信息!"); return; } } } //更新学生信息 public static void updateStu(List<Clazz> cla) { // 先获取学生所在班级的编号 System.out.println("输入学生所在班级的编号:"); int id = sk.nextInt(); // 获取学生的id System.out.println("输入学生的学号:"); int sid = sk.nextInt(); // 找到学生所在的班级,再通过学号找到要修改的学生信息 for (Clazz a : cla) { if (a.getId() == id) { for (Student s : a.getStu()) { if (s.getId() == sid) { System.out.println("要修改的学生信息是:" + s.allStu()); System.out.println("请输入修改后的学生信息"); System.out .println("如王强 wangqiang@lanqiao.org 89.2 1996 2 21 (学号不可变)"); String info = sl.nextLine(); String[] infos = info.split(" "); // 修改学生信息 s.setName(infos[0]); s.setEmail(infos[1]); s.setSorce(Double.parseDouble(infos[2])); s.setBerthday(LocalDate.of(Integer.parseInt(infos[3]), Integer.parseInt(infos[4]), Integer.parseInt(infos[5]))); System.out.println("修改成功!"); } } } } } //删除学生 public static void deleteStu(List<Clazz> cla) { // 先获取该生所在的班级 System.out.println("输入学生所在班级的编号:"); int id = sl.nextInt(); // 获取该生的学号 System.out.println("输入学生的学号"); int sid = sl.nextInt(); // 查找学生信息反馈给用户 for (Clazz a : cla) { if (!cla.contains(a.getId() == id)) { System.out.println("班级信息有误!"); return; } if (a.getId() == id) { for (int i = 0; i < a.getStu().size(); i++) { if (a.getStu().get(i).getId() == sid) { // 若id相同则询问用户是否删除 System.out.println(a.getStu().get(i).allStu()); a.getStu().remove(i); System.out.println("删除成功!"); } else if (i == a.getStu().size() - 1 && a.getStu().get(i).getId() != sid) { System.out.println("删除失败!查无此人!"); return; } } } } } //增加一个学生 public static void addStu(List<Clazz> cla) { // 首先输入一个学生所在班级的id System.out.println("输入学生所在班级的id:"); int id = sl.nextInt(); try { // 输入添加的学生信息 System.out.println("输入要添加的学生信息"); System.out.println("1 王强 wangqiang@lanqiao.org 89.2 1996 2 21"); String info = sk.nextLine(); String[] infos = info.split(" "); // 将输入的信息分割后用于创建对象 Student stu = new Student(Integer.parseInt(infos[0]), infos[1], infos[2], Double.parseDouble(infos[3]), LocalDate.of( Integer.parseInt(infos[4]), Integer.parseInt(infos[5]), Integer.parseInt(infos[6]))); // 找到要添加的学生所在的班级 for (int i = 0; i < cla.size(); i++) { if (cla.get(i).getId() == id) { // 找到学生所在的班级后遍历这个班级中的学生,若学生编号重复则不可创建 for (int j = 0; j < cla.get(i).getStu().size(); j++) { if (cla.get(i).getStu().get(j).getId() == stu.getId()) { System.out.println("学号重复,该生信息已存在"); return; } } // 遍历后若无学号相同的学生则将学生对象添加进班级 cla.get(i).getStu().add(stu); System.out.println("学生信息添加成功!"); } } } catch (NumberFormatException e) { // TODO Auto-generated catch block System.out.println("输入信息有误!"); } } }
老师:
package org.lanqiao.text0413_0416Services;
import java.util.List;
import java.util.Scanner;
import org.lanqiao.text0413_0416Cla.Clazz;
public class TeaServices {
static Scanner sc = new Scanner(System.in);
static Scanner sl = new Scanner(System.in);
static Scanner sk = new Scanner(System.in);
//删除老师信息
public static void updateTea(List<Clazz> cla) {
// 输入老师的id以获取这个老师的信息
System.out.println("输入要修改的老师编号:");
int id = sl.nextInt();
// 输入更新后的信息
System.out.println("输入更新后的信息:");
System.out.println("如:Macal,Jasoh English (编号不可变!)");
String info = sk.nextLine();
String[] infos = info.split(" ");
for (int i = 0; i < cla.size(); i++) {
if (cla.get(i).getTeacher().getId() == id) {
cla.get(i).getTeacher().setName(infos[0]);
cla.get(i).getTeacher().setSubject(infos[1]);
} else if ((i == cla.size() - 1)
&& (cla.get(i).getTeacher().getId() != id)) {
System.out.println("修改失败!查无此人!");
return;
}
}
}
//查询所有老师信息
public static void findTea(List<Clazz> cla) {
System.out.println("本校一共有:" + cla.size() + "名老师。");
for (Clazz a : cla) {
System.out.println(a.getTeacher().allTea());
}
}
}
总结:这个项目是学习完集合以后的一次练习,一切围绕着对学生集合、班级集合、老师集合的操作展开,因为对于集合的操作和对于面向对象的运用比较多故将其写入博客中,希望其他Java的入门者能写出比我更漂亮的代码,也欢迎大家讨论并指出错误。