学生信息管理系统
一、项目介绍
这是一个基于JAVA开发的学生管理系统,旨在帮助教师和学生更好的管理学生数据,包括学生信息、课程信息和成绩信息等,支持多种操作,包括添加学生信息、录入和更新成绩信息、查询学生信息和成绩信息等。该系统采用面向对象的思想,通过类和对象的方式进行数据的封装和管理。
二、项目介绍
- 实现不同身份账户的登陆系统;
- 实现用户分为教师账户和学生账户;
- 学生信息管理系统实现查找、添加、修改、删除、打印信息功能;
- 学生信息包括学号、姓名、性别、年龄、手机号、语文成绩、数学成绩、英语成绩、java成绩、总分成绩;)
三、总体设计
首先输入账号密码登录,根据身份选择教师账号或学生账号。正确则进入系统,错误则退出。教师可选择学生系统或添加账号。在学生系统中,教师可查找、添加、修改、删除和打印学生信息。学生仅可查找学生信息,无其他操作权限。
四、详细设计
创建StudentManage包,用所有的操作方法放入StudentManage包中,所有的方法都用接口来实现。添加一个Syudent类将Syudent类的属性,用private封装起来。用集合(ArrayList类Student型数据)来存储所有的学生信息。设计用户操作,每种操作都设置成一个类,每个操作类中都有一个operation方法.
查找学生信息(FindOperation)、添加学生信息(AddOperation)、修改学生信息(UpdataOperation)、删除学生信息(DeleteOperation)、打印学生信息(ShowOperation)五个类是接口Operatiion的实现类,重写接口中的operation操作方法。测试实现类(StudentDemo)main方法里存储学生信息用Switch实现引用五个操作实例类选着对应的操作,用screan方法为显示系统界面的菜单。
创建UserLogin包,新增登录、注册模块。我们的用户User类,包含用户名、密码属性并封装。用集合(HashSet类User型数据)来存储所有的登录账户信息(教师账户+学生账户)。添加一个返回值类型intde的登录操作类(Login),用judge方法实现登录系统操作和用集合存储账户信息登录成功返回1,用add方法实现添加账户信息。添加测试实现类(UserText),在int返回型main方法实现显示登陆账号类型选择登陆并引用Login类的登录操作。如果是老师登陆成功调用本类的oper方法,选择进入学生系统系统或注册账户操作,选择进入系统则maind方法返回值1;如果是学生登陆成功返回值2;
StudentManage包中的测试实现类(StudentDemo)main方法中用变量被赋值UserLogin包UserText类main返回值,根据返回值实现登陆账户的不同操作。
五、设计实现
这个登陆系统分为两个包来实现各种功能,第一个包UserLogin用于登陆系统实现登录注册功能。
我们的用户User类,包含用户名、密码属性并封装。代码不再展示
登录实现类存放用户账号信息以及登录检测登录账号是否准确
package UserLogin;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
public class Login{
public static int judge(Set<User> set) {
User u1=new User("ZTBU","123456");//教师账户
User u2=new User("黄老师","111111");
User u3=new User("张三","05001"); //学生用户账户
User u4=new User("李四","05002");
User u5=new User("王五","05003");
set.add(u1);
set.add(u2);
set.add(u3);
set.add(u4);
set.add(u5);
System.out.print("====教师登陆页面====\n->账户号:");
Scanner scan=new Scanner(System.in);
String name=scan.next();
System.out.print("->密码:");
String password=scan.next();
boolean flag=false;
Iterator<User>it =set.iterator();
while (it.hasNext()) {
User s1 = it.next();
if(s1.getUsername().equals(name)&&s1.getPassword().equals(password)) { flag = true;//验证账号密码是否正确
break;
}
} // while
if (flag) {
System.out.println("登录成功!欢迎"+name+"登录!");
return 1;
}else {System.out.print("账户/密码错误请找管理员申请修改");
return 0;}
}
public static void add(Set<User> set) {//注册用户
System.out.print("新增加账户号:");
Scanner scan=new Scanner(System.in);
String name=scan.next();
System.out.print("新增加密码:");
String password=scan.next();
boolean flag=false;
Iterator<User>it =set.iterator();
while (it.hasNext()) {
User s1 = it.next();
if (s1.getUsername().equals(name)&&s1.getPassword().equals(password)) {
flag = true;
break;
}
} // while
if(flag)System.out.println("此账户以存在");
else {
User u=new User();
u.setUsername(name);
u.setPassword(password);
set.add(u);
}
}
在登录页面的测试类中实现不同用户登录通过main返回值给学生系统判断老师或者学生是否登录成功,下面是部分核心代码
package UserLogin;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set
public class UserText {
public static int main(String[] args) {
Set<User> set =new HashSet();
Scanner scan = new Scanner(System.in);
System.out.println("====欢迎登录学生信息管理系统!====");
System.out.println("==请输入您的用户选项:\n==1 -> 管理员\n==2 -> 普通用户");
int choose = scan.nextInt();
if (choose == 1) {
Login t = new Login();
int j = t.judge(set);
if (j == 1) {
oper(set);// 教师选择进入哪个页面
return 1;
} /// 返回1表示学生登录成功
} else if (choose == 2) {
Login t = new Login();
int j = t.judge(set);
if (j == 1) {
return 2;
} // 返回2表示学生登录成功
}
return 0;//返回2登录失败
}
public static void oper(Set<User> set) {//进入学生管理系统或者添加系统登录账户
Scanner scan=new Scanner(System.in);
for(;;) {
System.out.println("请选择操作:\n1 -> 学生信息网页\n2 -> 添加教师登录账户\n3 -> 添加学生登录账户");
int choose=scan.nextInt();
switch(choose) {
case 1:return;
case 2:
case 3:Login t = new Login();
t.add(set); break;
default:System.out.println("输入错误");break;
}
}
}
}
在StudentManage包中测试实现类(StudentDemo)main方法里存储学生信息和根据在登录测试类接收的返回值的不同实现引用五个操作实例类选着对应的操作。下面是部分核心代码
package StudentManage
import java.util.ArrayList;
import java.util.Scanner;
public class StudentDemo {
public static void main(String[] args) {
ArrayList<Student> array = new ArrayList();
Scanner scan = new Scanner(System.in);
Student s1 = new Student("21050605001", "张三", "男", 21, "18336140001", 90, 90, 90, 90, 360);
Student s2 = new Student("21050605002", "李四", "女", 20, "18336140002", 91, 92, 93, 94, 370);
Student s3 = new Student("21050605003", "王五", "男", 22, "18336140003", 92, 93, 94, 95, 374);
array.add(s1);
array.add(s2);
array.add(s3);
int i = UserLogin.UserText.main(args);
if (i == 1) {
for (;;) {
screan();
int choose = scan.nextInt();
省略Switch语句实现增删改查打印退出六种操作部分代码
} // for
} else if (i == 2) {
System.out.println("查询分数");
FindOperation f = new FindOperation();
f.operation(array);
;
} else
System.out.println("登录失败");
}
查找学生信息(FindOperation)、添加学生信息(AddOperation)、修改学生信息(UpdataOperation)、删除学生信息(DeleteOperation)、打印学生信息(ShowOperation)五个类是接口Operatiion的实现类。下列是五个实现操作类的操作方法部分代码
@Override
public void operation(ArrayList<Student> array) {//添加学生信息
Scanner scan = new Scanner(System.in);
boolean flag = false;
char c;
do {
System.out.println("请输入学生学号");
String num = scan.next();
Iterator<Student> it = array.iterator();
while (it.hasNext()) {
Student s = it.next();
if (s.getId().equals(num)) {
flag = true;
break; }
} // while
if (flag) {
System.out.println("该学号已存在");
return;
} else {
String id = num;
System.out.println("请输入学生姓名:");
String name = scan.next();
System.out.println("请输入学生性别:");
String sex = scan.next();
System.out.println("请输入学生年龄:");
int age = scan.nextInt();
System.out.println("请输入学生手机号:");
String phonenum= scan.next();
System.out.println("请输入学生语文、数学、英语、java成绩:");
double chinese=scan.nextDouble();
double math=scan.nextDouble();
double english=scan.nextDouble();
double java=scan.nextDouble();
double total=chinese+math+english+java;
Student s = new Student(id, name, sex,age,phonenum,chinese,math,english,java,total);
array.add(s);
System.out.println("添加成功!");
}
System.out.println("是否继续添加?Y/N");
c = scan.next().charAt(0);
} while (c == 'Y');
}
删除信息:利用for循环找到需要删除的学生信息,再次询问用户是否确定删除学生信息
public void operation(ArrayList<Student> array) {//查找学生信息
Scanner scan = new Scanner(System.in);
int index = -1;
System.out.println("请输入学生的学号(姓名或者电话)");
String num = scan.next();
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("此学生的信息:");
System.out.println("学号" + "\t\t姓名" + "\t性别" + "\t年龄" + "\t手机号"
+ "\t\t语文" + "\t数学" + "\t英语" + "\tjava" + "\t总成绩");
Student s = array.get(index);
System.out.println(s);
}
}
}
public void operation(ArrayList<Student> array) {//修改学生信息
Scanner scan = new Scanner(System.in);
int index = -1;
System.out.println("请输入要修改的学生学号");
String num = scan.next();
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
if (s.getId().equals(num)) {
index = i;
break;
}
}
if (index == -1)
System.out.println("此学号没有学生");
else {
System.out.println("学生的原始信息:");
System.out.println("学号" + "\t\t姓名" + "\t性别" + "\t年龄" + "\t手机号"
+ "\t\t语文" + "\t数学" + "\t英语" + "\tjava" + "\t总成绩");
Student s = array.get(index);
System.out.println(s);
System.out.print("修改信息内容:\n1.学生个人信息\n2.学生学习成绩\n请选择:");
int choose=scan.nextInt();
if(choose==1) {
System.out.println("请输入修改后学生学号、姓名、性别、年龄、手机号:");
String id = scan.next();
String name = scan.next();
String sex = scan.next();
int age = scan.nextInt();
String phonenum= scan.next();
s.setId(id);
s.setName(name);
s.setSex(sex);
s.setAge(age);
s.setPhonenum(phonenum);
}else if(choose==2) {
System.out.println("请输入修改后学生语文、数学、英语、java成绩:");
double chinese=scan.nextDouble();
double math=scan.nextDouble();
double english=scan.nextDouble();
double java=scan.nextDouble();
double total=chinese+math+english+java;
s.setChinses(chinese);
s.setMath(math);
s.setEnglish(english);
s.setJava(java);
s.setTotal(total);
}else {System.out.println("输入错误");
return;}
System.out.println("修改成功");
System.out.println("修改后的此学生的信息");
System.out.println("学号" + "\t\t姓名" + "\t性别" + "\t年龄" + "\t手机号"
+ "\t\t语文" + "\t数学" + "\t英语" + "\tjava" + "\t总成绩");
System.out.println(s);
}
}
打印学生信息:通过迭代接口遍历集合输出所有学生信息
六、运行效果
七、总结
本系统划分较多的模块,每种操作都是一个类,通过一系列的调用和引用函数将其联接形成整个系统。好处是在程序出现问题时能够快速找到出问题的模块,直接对其进行修改,不再进行从全部代码检索查找问题,缩短了修改代码的时间。此学生信息管理系统添加了登录系统实现了不同用户的登录和注册,在信息管理页面可以实现查找学生信息、添加学生信息、修改学生信息、删除学生信息、打印学生信息、退出系统六种功能。同时使登录系统的教师操作页面和信息管理页面的操作实现用户可以循环操作,学生管理系统接收登陆系统的返回值,确定用户是否登录成功。待改进之处:两个系统的各在一个包里,各自的数据无法在另一个包调用;JAVA的Geto关键字但这个关键字没有任何作用,无法实现跳出某个循环的作用。
点击连接下载项目源码