学生信息管理系统
前言
该程序已上线GitHub,也算是自己独立写的第一个Java程序,当个课设还是不错的,程序基本功能都可以实现,不过大家也别要求太高,毕竟是初学者; https://github.com/pulumusita/StudemtsSystem
这个系统相比大家都很熟悉,在大学课程肯定会有老师带着大家去开发这个程序,因为我之前没写过,所以这里就简单的再复习一下这个系统的写法
如果想去看原视频的,老师分析的更好更全面,大家可以去看看学习一下。
bilibili.com/video/BV17F411T7Ao?p=116&vd_source=94fb2114c3889338d33bcb41c3e25538
代码结构
App.java:主入口及登录界面
getVerificationCode.java:生成验证码程序
StudentsSystem.java:学生信息管理系统主程序,从App.java登录成功后跳转到这个程序
User.java:JavaBean程序
Students.java:JavaBean程序
学生管理系统登录界面需求文档
需求:
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
分析:
登录界面:
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
用户类:
属性:用户名、密码、身份证号码、手机号码
注册功能:
1,用户名需要满足以下要求:
验证要求:
用户名唯一
用户名长度必须在3~15位之间
只能是字母加数字的组合,但是不能是纯数字
2,密码键盘输入两次,两次一致才可以进行注册。
3,身份证号码需要验证。
验证要求:
长度为18位
不能以0为开头
前17位,必须都是数字
最为一位可以是数字,也可以是大写X或小写x
4,手机号验证。
验证要求:
长度为11位
不能以0为开头
必须都是数字
登录功能:
1,键盘录入用户名
2,键盘录入密码
3,键盘录入验证码
验证要求:
用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
判断验证码是否正确,如不正确,重新输入
再判断用户名和密码是否正确,有3次机会
忘记密码:
1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
2,键盘录入身份证号码和手机号码
3,判断当前用户的身份证号码和手机号码是否一致,
如果一致,则提示输入密码,进行修改。
如果不一致,则提示:账号信息不匹配,修改失败。
验证码规则:
长度为5
由4位大写或者小写字母和1位数字组成,同一个字母可重复
数字可以出现在任意位置
比如:
aQa1K
学生管理系统主程序需求文档
需求:
采取控制台的方式去书写学生管理系统。
分析:
初始菜单:
"-------------欢迎来到黑马学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:
属性:id、姓名、年龄、家庭住址
添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
- id唯一
删除功能:
键盘录入要删除的学生id,需要满足以下要求:
- id存在删除
- id不存在,需要提示不存在,并回到初始菜单
修改功能:
键盘录入要修改的学生id,需要满足以下要求
- id存在,继续录入其他信息
- id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有的学生信息,需要满足以下要求
- 如果没有学生信息,提示:当前无学生信息,请添加后再查询
- 如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳
两个主程序
代码太多了我就不在这贴了,大家如果想看完整程序可以移步GitHub:https://github.com/pulumusita
登录主程序App.java
package Students;
import java.util.ArrayList;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
ArrayList<User> list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("----------------黑马学生信息管理系统登录系统----------------");
System.out.println("1:登录");
System.out.println("2:注册");
System.out.println("3:忘记密码");
System.out.println("4:退出程序");
System.out.println("请输入你的选择:");
String choose = sc.next();
loop:
switch (choose) {
case "1":
login(list);
break;
case "2":
register(list);
break;
case "3":
forgetPassword(list);
break;
case "4":
break loop;
default:
System.out.println("该选项不存在,请重新选择");
}
}
}
//注册账号
public static void register(ArrayList<User> list) {
User user = new User();
Scanner sc = new Scanner(System.in);
//录入用户名
while (true) {
System.out.println("请输入你想注册的用户名:");
String username = sc.next();
boolean flag = checkUsername(list, username);
if (flag == false) {
continue;
}
System.out.println("添加成功");
user.setUsername(username);
break;
}
//录入密码
while (true) {
System.out.println("请输入密码:");
String password = sc.next();
System.out.println("请再次输入密码:");
String password1 = sc.next();
boolean flag = checkPassword(password, password1);
if (!flag) {
continue;
}
System.out.println("设置密码成功");
user.setPassword(password);
break;
}
//录入身份证号
while (true) {
System.out.println("请输入身份证号:");
String identityNumber = sc.next();
boolean flag = checkIdentityNumber(identityNumber);
if (!flag) {
continue;
}
System.out.println("身份证符合要求,添加成功");
user.setIdentityNumber(identityNumber);
break;
}
//录入手机号
while (true) {
System.out.println("请输入手机号码");
String phoneNumber = sc.next();
boolean flag = checkPhoneNumber(phoneNumber);
if (!flag) {
continue;
}
System.out.println("手机号添加成功");
user.setPhoneNumber(phoneNumber);
break;
}
//添加用户对象到数组中
list.add(user);
}
//登录系统
public static void login(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String username = sc.next();
int flag = containsIndex(list, username);
if (flag < 0) {
System.out.println("用户未注册,请先注册");
return;
}
System.out.println("请输入您的密码:");
String password = sc.next();
while (true) {
//调取生成验证码方法获取验证码
getVerificationCode code = new getVerificationCode();
String rightCode = code.getIdentifying();
System.out.println("正确的验证码为:" + rightCode + "\n请输入验证码");
String userCode = sc.next();
//判断验证码是否正确
if (userCode.equalsIgnoreCase(rightCode)) {
System.out.println("验证码正确");
break;
} else {
System.out.println("验证码输入错误,请重新输入");
continue;
}
}
//检查用户名和密码是否正确,封装一下username和password
User userInfo = new User(username, password, null, null);
boolean flagLogin = checkLogin(list, userInfo);
if (flagLogin) {
System.out.println("登录成功,欢迎使用学生管理系统");
//进入学生信息管理系统
StudentsSystem sy = new StudentsSystem();
sy.app();
return;
} else {
if (i == 2) {
System.out.println("登录失败,当前用户名或密码错误,用户被锁定,请联系工作人员");
return;
} else {
System.out.println("登录失败,当前用户名或密码错误,请重新输入,还剩下" + (2 - i) + "次机会");
}
}
}
}
//检查键盘录入用户名是否符合规定
public static boolean checkUsername(ArrayList<User> list, String username) {
if (containsIndex(list, username) > 0) {
System.out.println("您输入的用户名已经存在,请重新输入");
return false;
}
int len = username.length();
if (len < 3 || len > 15) {
System.out.println("username长度需要在3-15之间,您输入的用户名长度不符合,请重新输入");
return false;
}
int count = 0;
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9')) {
count++;
}
}
if (count > 0) {
System.out.println("您输入的用户名存在符号或您输入的用户名为纯数字,不符合要求,请重新输入");
return false;
}
int count1 = 0;
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {
count1++;
}
}
if (count1 <= 0) {
System.out.println("您输入的用户名存在符号或您输入的用户名为纯数字,不符合要求,请重新输入");
return false;
}
return true;
}
//判断集合中是否有
public static int containsIndex(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String username1 = user.getUsername();
if (username1.equals(username)) {
return i;
}
}
return -1;
}
//检查密码格式
public static boolean checkPassword(String p, String p1) {
if (!(p.equals(p1))) {
System.out.println("两次输入密码不一致,请重新输入");
return false;
}
return true;
}
//检查身份证信息
public static boolean checkIdentityNumber(String identityNumber) {
if (!(identityNumber.length() == 18)) {
System.out.println("你输入的身份证长度不符合18位,请重新输入");
return false;
}
char c = identityNumber.charAt(0);
if (c == '0') {
System.out.println("身份证号不能以0开头,请重新输入");
return false;
}
for (int i = 0; i < identityNumber.length() - 1; i++) {
char c1 = identityNumber.charAt(i);
if (c1 < '0' || c1 > '9') {
System.out.println("身份证号只能为纯数字,您输入的身份证不合法,请重新输入");
return false;
}
}
char lastC = identityNumber.charAt(identityNumber.length() - 1);
if (!(lastC >= '0' && lastC <= '9' || lastC == 'X' || lastC == 'x')) {
System.out.println("您输入的身份证最后一位不符合要求,请重新输入(最后一位可以为数字以及Z和z)");
return false;
}
return true;
}
//检查手机号格式
public static boolean checkPhoneNumber(String phoneNumber) {
char c = phoneNumber.charAt(0);
if (c == '0') {
System.out.println("手机号格式错误,第一位不能为0,请重新输入");
return false;
}
for (int i = 0; i < phoneNumber.length(); i++) {
char c1 = phoneNumber.charAt(i);
if (!(c1 >= '0' && c1 <= '9')) {
System.out.println("手机号格式错误,请重新输入");
return false;
}
}
return true;
}
//检查集合中是否存在与用户输入的username以及password一样数据
public static boolean checkLogin(ArrayList<User> list, User userInfo) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
//集合中的username和password与用户输入的username和password进行比较
if (user.getUsername().equals(userInfo.getUsername()) && user.getPassword().equals(userInfo.getPassword())) {
return true;
}
}
return false;
}
//忘记密码功能
public static void forgetPassword(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
System.out.println(
"请输入你想找回密码的账号: "
);
String username = sc.next();
int index = containsIndex(list, username);
if (index < 0) {
System.out.println("该用户不存在,请先注册");
return;
}
while (true) {
System.out.println("请输入身份证号");
String personID = sc.next();
System.out.println("请输入手机号码:");
String phoneNumber = sc.next();
User user = list.get(index);
if (!(user.getIdentityNumber().equals(personID) && user.getPhoneNumber().equals(phoneNumber))) {
System.out.println("身份证号或密码错误,请重新输入");
continue;
} else {
break;
}
}
User user = list.get(index);
while (true) {
System.out.println("请输入修改后的密码");
String p1 = sc.next();
System.out.println("请再次输入修改后的密码: ");
String p = sc.next();
boolean flag = checkPassword(p, p1);
if (!flag) {
System.out.println("两次输入密码不一致,请重新输入");
}
System.out.println("密码修改成功");
user.setPassword(p1);
break;
}
}
}
学生信息管理系统主程序StudentsSystem.java
package Students;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentsSystem {
public static void app() {
ArrayList<Students> list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
loop:
while (true) {
System.out.println("----------------黑马学生信息管理系统----------------");
System.out.println("1:添加学生信息");
System.out.println("2:删除学生信息");
System.out.println("3:修改学生信息");
System.out.println("4:查询学生信息");
System.out.println("5:退出学生信息管理系统");
System.out.println("请输入您的选择:");
String choose = sc.next();
switch (choose) {
case "1":
addStudents(list);
break;
case "2":
deleteStudents(list);
break;
case "3":
changeStudents(list);
break;
case "4":
queryStudents(list);
break;
case "5":
System.out.println("退出\n");
break loop;
default:
System.out.println("没有这个选项,请重新输入\n");
}
}
}
//添加学生信息
public static ArrayList<Students> addStudents(ArrayList<Students> list) {
Scanner sc = new Scanner(System.in);
Students s = new Students();
while (true) {
System.out.println("请输入学生的id");
String id = sc.next();
//如果id存在,则接着循环,用户重新输入
if (contains(list, id)) {
System.out.println("当前录入id已经存在,请重新输入id");
}
//id不存在,跳出循环
else {
s.setId(id);
break;
}
}
System.out.println("请输入学生的姓名");
String name = sc.next();
s.setName(name);
System.out.println("请输入学生的年龄");
int age = sc.nextInt();
s.setAge(age);
System.out.println("请输入学生的家庭住址");
String address = sc.next();
s.setAddress(address);
list.add(s);
System.out.println("添加成功\n");
return list;
}
public static void deleteStudents(ArrayList<Students> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想删除的学生的id");
String id = sc.next();
//这里if判断以及remove中不能使用id,因为id为String类型,我第一次踩坑了,大家注意
if (containsIndex(list, id) >= 0) {
list.remove(containsIndex(list, id));
System.out.println("删除" + containsIndex(list, id) + "的信息成功");
} else {
System.out.println(
"该学生信息不存在,删除失败"
);
}
}
//查询学生信息
public static void queryStudents(ArrayList<Students> list) {
Scanner sc = new Scanner(System.in);
//判断集合中是否有信息
if (list.size() == 0) {
System.out.println("系统中无数据,请先添加后再查询\n");
return;
}
System.out.println("**************学生信息列表**************");
System.out.println("id\t\t姓名\t\t年龄\t\t家庭住址");
for (int i = 0; i < list.size(); i++) {
Students s = list.get(i);
System.out.println(s.getId() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getAddress());
}
}
//修改学生信息
public static void changeStudents(ArrayList<Students> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想修改的学生id:");
String id = sc.next();
//这里用containsIndex方法进行判断吗,如果不存在需要重新输入
if (containsIndex(list, id) == -1) {
System.out.println("id为 " + id + " 的学生不存在,请重新输入");
return;
}
Students s = list.get(containsIndex(list, id));
loop:
while (true) {
System.out.println("**************学生信息修改系统**************");
System.out.println("1:修改学生id");
System.out.println("2:修改学生姓名");
System.out.println("3:修改学生年龄");
System.out.println("4:查询学生家庭住址");
System.out.println("5:退出修改系统");
System.out.println("请选择你想修改的选项");
String choose = sc.next();
switch (choose) {
case "1":
System.out.println("请输入修改后的id");
String sid = sc.next();
s.setId(sid);
break;
case "2":
System.out.println("请输入修改后的姓名");
String name = sc.next();
s.setName(name);
break;
case "3":
System.out.println("请输入修改后的年龄");
int age = sc.nextInt();
s.setAge(age);
break;
case "4":
System.out.println("请输入修改后的家庭住址");
String address = sc.next();
s.setAddress(address);
break;
case "5":
break loop;
default:
System.out.println("没有这个选项,请重新输入\n");
}
System.out.println("修改信息成功\n");
}
}
//判断id在集合中是否存在
public static boolean contains(ArrayList<Students> list, String id) {
for (int i = 0; i < list.size(); i++) {
Students stu = list.get(i);
String sid = stu.getId();
if (id.equals(sid)) {
return true;
}
}
return false;
}
//查询集合中是否存在该id的学生,存在返回该学生id,不存在返回-1
public static int containsIndex(ArrayList<Students> list, String id) {
for (int i = 0; i < list.size(); i++) {
Students s = list.get(i);
String sid = s.getId();
if (sid.equals(id)) {
return i;
}
}
return -1;
}
}