一、前言
在今天的数字时代,信息管理系统在工作和学习中发挥着重要作用,无论是储存、管理还是检索信息。因此,我决定构建一个基于Java的学生信息管理系统来帮助教师和学生更好地管理学生数据。
这个系统的主要目标是提供一个平台来管理学生课程和成绩信息。它包括添加学生信息、更新成绩信息以及检索学生信息等功能。
我利用面向对象的编程思想来实现以上目标,通过创建不同的类和对象来封装和管理数据。系统主要设计包括两个部分:用户登录模块和学生信息管理模块。
二、用户登录模块
登录模块包含两种用户类型:教师和学生。在这部分,我创建了一个“UserLogin”包,该类包含用户名和密码属性并进行封装。我在系统中嵌入了默认的教师和学生账户,并在用户尝试登录时进行信息验证。如果登录失败,系统将会提示用户重新尝试或者找管理员修改信息。
1.源代码 UserText
代码如下(示例):
package UserLogin; import java.util.ArrayList; import java.util.Scanner; public class UserText { public static int main(String[] args) { ArrayList<User> arrayList = new ArrayList<>(); System.out.println("----------欢迎进入学生信息管理系统----------"); System.out.println("请输入您的用户选项:"); System.out.println("1.管理员(教师)\t 2.普通用户(学生)"); Scanner sc = new Scanner(System.in); int choose = sc.nextInt(); // 判断用户选择的账户类型 if (choose == 1) { Login x = new Login(); int y = x.judge(arrayList); // 判断登录结果 if (y == 1) { // 教师进入管理系统页面 教师选择进入哪个页面 oper(arrayList); return 1; // 返回1 表示教师登录成功 } } else if (choose == 2) { Login x = new Login(); int y = x.judge(arrayList); // 判断登录结果 if (y == 1) { // 进入学生信息网页页面 return 2; // 返回2 表示学生登录成功 } } return 0; // 表示登录失败 } // 教师进入学生管理系统选项的方法 public static void oper(ArrayList<User> arrayList) { // 当教师登录以后,可以进行添加用户操作 Scanner scanner = new Scanner(System.in); // 注册多个用户 for (; ; ) { System.out.println("请选择对应的操作:"); System.out.println("1. 学生信息网页 \t 2.添加教师登录账户 \t 3.添加学生登录账户"); int choose= scanner.nextInt(); // 判断选择选项 Login t=new Login(); switch (choose){ case 1: return; case 2: t.add(arrayList); break; case 3: t.add(arrayList); break; default: System.out.println("输入有误,请重新操作"); break; } } } }
2.源代码 User
代码如下(示例):
package UserLogin; public class User { private String username;//用户名 private String password;//密码 public User() { } public User(String username, String password) { this.username = username; this.password = password; } @Override public String toString() { return "User{" + "用户名='" + username + '\'' + ", 密码='" + password + '\'' + '}'; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
3.源代码 Login
代码如下(示例):
package UserLogin; import java.util.ArrayList; import java.util.Scanner; public class Login { //登录 public static int judge(ArrayList<User> arrayList) { //添加默认账户 //教师账户 User u1 = new User("李佳梦", "959595"); User u2 = new User("宋浩", "959595"); //学生账户 User u3 = new User("小明", "20051204"); User u4 = new User("小李", "20040601"); //储存用户信息 arrayList.add(u1); arrayList.add(u2); arrayList.add(u3); arrayList.add(u4); //输入用户名与信息 System.out.println("-------欢迎进入登录界面-------\n 账户:"); Scanner sc = new Scanner(System.in); String name = sc.next(); System.out.println(" 密码:"); String password = sc.next(); boolean flag =false; //验证用户信息 for (int i = 0; i < arrayList.size(); i++) { if (arrayList.get(i).getUsername().equals(name) && arrayList.get(i).getPassword().equals(password)) { flag = true; break; } } if (flag){ System.out.println("登录成功!欢迎"+name+"使用本系统!"); return 1; }else { System.out.println("账户或密码有误,请找管理员进行修改后重试!"); return 0; } } //注册 public static void add (ArrayList<User> arrayList){ System.out.println("新增账户号:"); Scanner sc =new Scanner(System.in); String name =sc.next(); System.out.println("新增密码"); String password =sc.next(); //核实 boolean flag=false; for (int i = 0; i < arrayList.size(); i++) { if (arrayList.get(i).getUsername().equals(name)){ flag=true; break; } } // 如果账户已存在,提示重新注册 if (flag){ System.out.println("此账户已存在,请重新注册"); } else { // 不存在,创建用户,存储用户信息 User u = new User(); u.setUsername(name); u.setPassword(password); arrayList.add(u); } } }
三、学生信息管理模块
学生信息管理模块包含了查找、添加、修改、删除和打印学生信息功能。我创建了一个“StudentManage”包专门处理这些操作,其中所有的方法都通过接口来实现。Student类负责储存学生的基础信息与成绩信息,StudentDemo类为实现类负责实现个功能的调用同时也是项目启动的类。
1.源代码 Student
代码如下(示例):
package StudentManage; public class Student { //学号,名称,性别,年龄,手机号 private String id; private String name; private String sex; private int age; private String phonenum; private double chinese; private double math; private double english; private double java; private double total; @Override public String toString() { return " 学号= " + id + '\n' + " 姓名= " + name + '\n' + " 性别= " + sex + '\n' + " 年龄= " + age +'\n' + " 手机号= " + phonenum + '\n' + " 语文= " + chinese +'\n' + " 数学= " + math +'\n' + " 英语= " + english +'\n' + " java= " + java +'\n' + " 总成绩= " + total +'\n' ; } public Student() { } public Student(String id, String name, String sex, int age, String phonenum, double chinese, double math, double english, double java, double total) { this.id = id; this.name = name; this.sex = sex; this.age = age; this.phonenum = phonenum; this.chinese = chinese; this.math = math; this.english = english; this.java = java; this.total = total; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPhonenum() { return phonenum; } public void setPhonenum(String phonenum) { this.phonenum = phonenum; } public double getChinese() { return chinese; } public void setChinese(double chinese) { this.chinese = chinese; } public double getMath() { return math; } public void setMath(double math) { this.math = math; } public double getEnglish() { return english; } public void setEnglish(double english) { this.english = english; } public double getJava() { return java; } public void setJava(double java) { this.java = java; } public double getTotal() { return total; } public void setTotal(double total) { this.total = total; } }
2.源代码 StudentDemo
代码如下(示例):
package StudentManage; import UserLogin.UserText; import java.util.ArrayList; import java.util.Scanner; public class StudentDemo { public static void main(String[] args) { ArrayList<Student> arrayList = new ArrayList<>(); Scanner scanner =new Scanner(System.in); Student s1 =new Student("20231714100","胡万","男",26,"152654865", 56,89,45,45,586); Student s2 =new Student("20231714101","武举人","男",36,"1565241814", 56,89,45,45,586); Student s3 =new Student("20231714102","黄老爷","男",31,"19552654865", 56,89,45,45,586); arrayList.add(s1); arrayList.add(s2); arrayList.add(s3); UserText userText =new UserText(); //登录 //该方法表示管理神马 while (true) { int i = UserText.main(args); if (i==1){ while (true) { //管理界面 //screan(); System.out.println("请选择对应的操作:"); System.out.println("1.查找学生信息 2.添加用户信息 3.修改用户信息 4.删除用户信息 5.打印用户信息 6.退出系统"); int choose =scanner.nextInt(); switch (choose){ case 1:{ //查找学生信息 FindOperation findOperation =new FindOperation(); findOperation.operation(arrayList); break; } case 2:{ //添加用户信息 AddOperation addOperation =new AddOperation(); addOperation.operation(arrayList); break; } case 3:{ //修改用户信息 UpdataOperation updataOperation =new UpdataOperation(); updataOperation.operation(arrayList); break; } case 4:{ //删除用户信息 DeleteOperation shanchuOperation =new DeleteOperation(); shanchuOperation.operation(arrayList); break; } case 5:{ //打印用户信息 ShowOperation dayinOperation =new ShowOperation(); dayinOperation.operation(arrayList); break; } case 6:{ return; //退出系统 } default:{ System.out.println("您输错了,请再次输入"); } } } }else if (i==2){ while (true) { //管理界面 //screan(); System.out.println("请选择对应的操作:"); System.out.println("1.查找学生信息 2.退出系统"); int choose = scanner.nextInt(); switch (choose) { case 1: { //查找学生信息 FindOperation findOperation = new FindOperation(); findOperation.operation(arrayList); break; } case 2: { return; //退出系统 } } } }else { System.out.println("登录失败"); System.out.println("请再次登录"); } } } public static void screan () { System.out.println("------欢迎进入登陆界面-------"); } }
教师可以执行查找、添加、修改、删除和打印信息功能,而学生只可以查找信息。系统会根据用户登录的状态执行相应的操作。
所有的学生信息都储存在ArrayList中,我采用了FindOperation、AddOperation、UpdateOperation、DeleteOperation和ShowOperation这五个类(接口Operation的实现类)来处理对学生信息的操作。
3.源代码 Operation
代码如下(示例):
package StudentManage; import java.util.ArrayList; public interface Operation { public abstract void operation(ArrayList<Student> array); }
4.源代码 FindOperation
代码如下(示例):
package StudentManage; import java.util.ArrayList; import java.util.Scanner; public class FindOperation implements Operation { @Override //查找学生信息 public void operation(ArrayList<Student> array) { // 可以通过学生的学号、姓名或者电话号来查找学生信息 System.out.println("请输入学生的学号(姓名或电话号)"); Scanner scanner=new Scanner(System.in); String num=scanner.next(); int index=-1; // 遍历存储学生信息的集合 for (int i = 0; i < array.size(); i++) { Student s=array.get(i); // 判断输入的学生信息是不是我们要找的那个学生 if (s.getId().equals(num) || s.getName().equals(num) || s.getPhonenum().equals(num)){ // 找到对应的学生以后,把这个对象在集合中的下标进行存储 index=i; break; } } // 判断查找的学生存不存在 if (index==-1){ System.out.println("找不到该学生"); } else { System.out.println("该学生的信息为:"); //Student student =array.get(index); //System.out.println("学号"+student.getId()+"\t\t\t\t\t姓名\t\t\t\t\t性别\t\t\t\t\t年龄\t\t\t\t\t手机号\t\t\t\t\t" + // "语文\t\t\t数学\t\t\t英语\t\t\tJava\t\t\t总成绩"); // 打印相关学生信息 Student s=array.get(index); s.toString(); System.out.println(s); } } }
5.源代码 AddOperation
代码如下(示例):
package StudentManage; import java.util.ArrayList; import java.util.Scanner; public class AddOperation implements Operation{ @Override public void operation(ArrayList<Student> array){ Scanner sc =new Scanner(System.in); boolean flon =false; char input = '是'; do { System.out.println("------添加学生用户信息系统启动------"); System.out.println("请输入学号"); boolean flag =false; String id =sc.next(); for (int i = 0; i <array.size() ; i++) { if (array.get(i).getId().equals(id)){ flag =true; break; } } if (flag){ System.out.println("您输入的学生用户以存在,请再次输入"); }else { //不存在,继续输入信息 System.out.println("请输入学生姓名"); String name = sc.next(); System.out.println("请输入学生性别"); String sex = sc.next(); System.out.println("请输入学生年龄"); int age =sc.nextInt(); System.out.println("请输入学生的电话号码"); String phonrnum= sc.next(); System.out.println("请输入学生语文,数学,英语,java成绩"); double chinese =sc.nextDouble(),math =sc.nextDouble(),english = sc.nextDouble(),java =sc.nextDouble(); double total =chinese+math+english+java; Student s = new Student(id,name,sex,age,phonrnum,chinese,math,english,java,total); array.add(s); System.out.println("是否继续添加"); input =sc.next().charAt(0); break; } }while (input=='是');//是Y继续 } }
6.源代码 UpdataOperation
代码如下(示例):
package StudentManage; import java.util.ArrayList; import java.util.Scanner; public class UpdataOperation implements Operation{ public void operation(ArrayList<Student> array){ Scanner sc =new Scanner(System.in); System.out.println("------修改学生用户信息系统启动------"); System.out.println("请输入要被修改的学生信息"); String id =sc.next(); int index = -1; for (int i = 0; i < array.size(); i++) { Student s =array.get(i); if (s.getId().equals(id)){ index = i; break; } } if (index==-1){ System.out.println("此学号不存在"); }else { System.out.println("该学生信息为"); Student s=array.get(index); s.toString(); System.out.println(s); System.out.println("请选择要修改的学生信息"); System.out.println("1.修改学生基本信息 2.修改学生成绩信息"); int ages =sc.nextInt(); if (ages==1) { System.out.println("请输入学生姓名"); String name = sc.next(); s.setName(name); System.out.println("请输入学生性别"); String sex = sc.next(); s.setSex(sex); System.out.println("请输入学生年龄"); int age =sc.nextInt(); s.setAge(age); System.out.println("请输入学生电话号码"); String phonrnum= sc.next(); s.setPhonenum(phonrnum); } else if (ages==2){ System.out.println("请输入学生语文,数学,英语,java成绩"); double chinese = sc.nextDouble(), math = sc.nextDouble(), english = sc.nextDouble(), java = sc.nextDouble(); double total = chinese + math + english + java; s.setChinese(chinese); s.setMath(math); s.setEnglish(english); s.setJava(java); s.setTotal(total); }else { System.out.println("您输错了"); return; } System.out.println( "修改成功"); System.out.println("新的信息如下"); s.toString(); System.out.println(s); } } }
7.源代码 DeleteOperation
代码如下(示例):
package StudentManage; import java.util.ArrayList; import java.util.Scanner; public class DeleteOperation implements Operation{ public void operation(ArrayList<Student> array){ Scanner sc =new Scanner(System.in); System.out.println("------删除学生用户信息系统启动------"); System.out.println("请输入要被删除的学生信息"); String id =sc.next(); int index = -1; char inpex = '否'; for (int i = 0; i < array.size(); i++) { Student s =array.get(i); if (s.getId().equals(id)){ index = i; break; } } if (index==-1){ System.out.println("此学号不存在"); }else { System.out.println("是否真的要删除学生信息"); inpex =sc.next().charAt(0); if (inpex=='否') { }else if (inpex=='是'){ array.remove(index); System.out.println("删除成功"); }else { System.out.println("您输错了"); } } } }
8.源代码 ShowOperation
代码如下(示例):
package StudentManage; import java.util.ArrayList; import java.util.Scanner; public class ShowOperation implements Operation{ public void operation(ArrayList<Student> array){ Scanner sc =new Scanner(System.in); System.out.println("------打印学生用户信息系统启动------"); System.out.println("请选择要修改的学生信息"); System.out.println("1.打印单个学生信息 2.打印全部学生信息"); int ages =sc.nextInt(); if (ages==1) { System.out.println("请输入要被打印的学生信息"); String id =sc.next(); int index = -1; for (int i = 0; i < array.size(); i++) { Student s =array.get(i); if (s.getId().equals(id)){ index = i; break; } } if (index==-1){ System.out.println("此学号不存在"); }else { System.out.println("该学生信息为"); Student s = array.get(index); s.toString(); System.out.println(s); } } else if(ages==2){ String id =sc.next(); for (int i = 0; i < array.size(); i++) { Student s =array.get(i); s.toString(); System.out.println(s); } }else { System.out.println("您输错了"); } } }
四、总结
设计和实现这个学生信息管理系统是一次很有挑战性也很有收获的经验。它不仅帮助我理解了Java面向对象的基本概念,也锻炼了我解决实际问题的能力。我必须要说,我还需要更多的改进,比如把系统的两大部分(用户登录模块和学生信息管理模块)合并在一个包内,或者在不改变包结构的情况下实现数据交互。我期待在未来的项目中进一步强化和巩固我在这方面的技能。
在构建这个系统的过程中,我遇到了许多困难,但也找到了解决方法。我很期待在未来的项目中更好地利用我在这个项目中学到的知识和技巧,同时希望我的这份经验能对其他开发者们有所帮助。