采取控制台的方式去书写学生管理系统。
"-------------学生管理系统----------------" "1:添加学生" "2:删除学生" "3:修改学生" "4:查询学生" "5:退出" "请输入您的选择:"
属性:id、姓名、年龄、家庭住址
键盘录入每一个学生信息并添加,需要满足以下要求:
id唯一
键盘录入要删除的学生id,需要满足以下要求:
id存在删除
id不存在,需要提示不存在,并回到初始菜单
键盘录入要修改的学生id,需要满足以下要求
id存在,继续录入其他信息
id不存在,需要提示不存在,并回到初始菜单
打印所有的学生信息,需要满足以下要求
如果没有学生信息,提示:当前无学生信息,请添加后再查询
如果有学生信息,需要按照以下格式输出。
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
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
//Student.java
package student.manage.system;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
/**
* 定义学生类,包含以下成员变量
* private String sid // 学生id
* private String name // 学生姓名
* private String age // 学生年龄
* private String address // 学生所在地
*/
public class Student {
private String sid; // 学生id
private String name; // 学生姓名
private int age; // 学生年龄
private String address; // 学生所在地
@Override
public String toString() {
return sid + "\t\t" + name + "\t\t" + age + "\t\t" + address;
}
}
//User
package student.manage.system;
import lombok.*;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class User {
private String username;
private String password;
private String ID;
private String phone;
}
//Logon
package student.manage.system;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class Logon extends User {
public boolean loggedIn = false;
List list = new ArrayList<>();
//登录
public void logon() {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("请输入用户名:");
String user = sc.nextLine();
System.out.println("请输入密码:");
String pwd = sc.nextLine();
System.out.println("验证码:");
String a = Code();
System.out.println("请输入验证码:");
String code = sc.nextLine();
//集合长度不为0;
if (list.isEmpty()) {
System.out.println("目前没有任何用户,请先添加在登陆");
break;
}
boolean isUserFound = false;
for (User us : list) {
//判断用户名和密码是否一致
if (us.getUsername().equals(user)) {
isUserFound = true;
if (us.getPassword().equals(pwd)) {
//判断验证码
if (a.equals(code)) {
System.out.println("登录成功");
loggedIn = true;
return;
} else {
System.out.println("验证不对,请重新输入");
}
} else {
System.out.println("密码错误,请重新输入");
}
break;
}
}
if (!isUserFound) {
System.out.println("用户名未注册,请先注册");
break;
} else {
System.out.println("登录失败,你还有" + (2 - i) + "此机会");
}
}
}
//忘记密码
public void forgotPwd() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要找回的用户名:");
String name = sc.nextLine();
User st = new User();
int count = 0;
//判断用户是否存在
boolean userExists = false; // 标记是否存在用户
for (int i = 0; i < list.size(); i++) {
st = list.get(i);
if (st.getUsername().equals(name)) {
userExists = true;
count = i;
break;
}
}
if (!userExists) {
System.out.println("没有此用户");
return;
}
System.out.println("请输入身份证号码:");
String id = sc.nextLine();
System.out.println("请输入手机号码:");
String phone = sc.nextLine();
//判断身份证号码和手机号码是否匹配
if (!(st.getID().equals(id) || st.getPhone().equals(phone))) {
System.out.println("账号信息不匹配,修改失败");
} else {
System.out.println("请输入新的密码");
String pwd = sc.nextLine();
st.setPassword(pwd);
list.set(count, st);
System.out.println("修改成功");
}
}
//注册
public void register() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的用户名");
String username = sc.nextLine();
for (User user : list) {
if (username.equals(user.getUsername())) {
return;
}
}
//验证用户名是否符合规则
String regex = "^(?=.*[a-zA-Z])(?=.*\\d)[a-zA-Z\\d]{3,15}$";
if (!username.matches(regex)) {
System.out.println("用户名不符合要求");
return;
}
//判断2次密码是否一致
//输入密码
System.out.println("请输入你的密码");
String password = sc.nextLine();
//再次确认密码
System.out.println("请再次输入你的密码");
String password1 = sc.nextLine();
if (!password.equals(password1)) {
System.out.println("你两次输入的密码不一致");
return;
}
//判断身份证号码是否规则
String idRegex = "\\d{17}[\\dXx]";
System.out.println("请输入身份证号码:");
String id = sc.nextLine();
if (!id.matches(idRegex)) {
System.out.println("你输入的身份证号码有误,请重新输入");
return;
}
//判断手机号码是否符合规则
String phoneRegex = "1[345789]\\d{9}";
System.out.println("请输入手机号码:");
String phone;
phone = sc.nextLine();
if (!phone.matches(phoneRegex)) {
System.out.println("你输入的手机号码有误,请重新输入");
return;
}
//创建对象,把对象信息添加到集合
User newUser = new User(username, password, id, phone);
list.add(newUser);
System.out.println("添加成功");
}
//验证码
public String Code() {
StringBuilder sb = new StringBuilder();
Random r = new Random();
//随机生成大小写字母
for (int i = 0; i < 4; i++) {
int a = r.nextInt(52);
if (a < 26) {
sb.append((char) (a + 'A'));
} else {
sb.append((char) ((a - 26) + 'a'));
}
}
//随机生成0-9数字,并且随机插入验证码中
int num = r.nextInt(10);
int position = r.nextInt(4);
sb.insert(position, num);
String code = String.valueOf(sb);
System.out.println(sb);
return code;
}
//登录界面
public void log() {
Scanner sc = new Scanner(System.in);
while (!loggedIn) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
String in = sc.nextLine();
switch (in) {
case "1":
logon();
break;
case "2":
register();
break;
case "3":
forgotPwd();
break;
default:
System.out.println("没有这个选项");
}
}
}
}
/*
isEmpty()是一个用于判断集合是否为空的方法
*/
//StudentDome
package student.manage.system;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class StudentDome {
public static void main(String[] args) {
//调用登录
Logon l = new Logon();
l.log();
//创建集合保存学生信息
List list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//打印操作展示界面
logt:
while (true) {
System.out.println("-------------欢迎来到学生管理系统-------------");
System.out.print("1.添加学生\n2.删除学生\n3.修改学生\n4.查看学生\n5.退出系统" + "\n请输入你的选择:");
String in = sc.nextLine();
switch(in){
case "1":
addStudent(sc,list);
break;
case "2":
deleteStudent(sc,list);
break;
case "3":
modifyStudent(sc,list);
break;
case "4":
seekStudent(sc,list);
break;
case "5":
break logt;
default:
System.out.println("你输入的选项有误,请重新输入");
break;
}
}
}
//添加学生
public static void addStudent(Scanner sc,List list) {
System.out.println("请输入要添加的学生信息:");
System.out.print("请输入学号:");
String sid = sc.nextLine();
//判断学号是否存在,存在:提示存在;不存在:录入信息
for (Student stu : list) {
if (stu.getSid().equals(sid)) {
System.out.println("此学号已经存在,请重新输入");
return;
}
}
System.out.print("请输入姓名:");
String name = sc.nextLine();
int age;
try{
System.out.print("请输入年龄:");
age = sc.nextInt();
sc.nextLine();
//判断年龄是否正常
if(age < 0){
System.out.println("年龄有误");
return;
}
}catch(InputMismatchException e){
System.out.println("你输入的不是数字,请重新输入");
sc.nextLine();
return;
}
System.out.print("请输入地址:");
String address = sc.nextLine();
Student student = new Student(sid,name,age,address);
list.add(student);
System.out.println("添加学生成功!");
}
//删除学生
public static void deleteStudent(Scanner sc,List list) {
System.out.println("请输入要删除的学生学号");
System.out.print("请输入学号:");
String sid = sc.nextLine();
//1.遍历集合查看要删除的学生是否存在
for(int i = 0; i list) {
//判断有无学生信息,有就下一个,没有就结束
if(list.isEmpty()){
System.out.println("当前无学生信息,请添加后再查询");
return;
}
//判断查询所有学生还是查询某个学生
while (true) {
System.out.println("请输入查询选项:\n1.查询所有的学生信息,\n2.按学号查询");
int in = sc.nextInt();
sc.nextLine();
switch(in){
case 1:
System.out.println("学号: " + "\t姓名: " + "\t年龄: " + "\t地址: ");
for(Student key : list){
System.out.println(key);
}
return;
case 2:
System.out.println("请输入要查询的学生的学号");
System.out.print("请输入学号:");
String sid = sc.nextLine();
//判断此学号是否存在
for (Student stu : list) {
if (stu.getSid().equals(sid)) {
System.out.println("学号: " + "\t姓名: " + "\t年龄: " + "\t地址: ");
System.out.println(stu.toString());
return;
}
}
System.out.println("未找到匹配的学生信息");
return;
default:
System.out.println("你输入的选项有误,请重新输入");
}
}
}
//修改学生
public static void modifyStudent(Scanner sc,List list) {
System.out.println("请输入要修改的学生的学号");
System.out.print("请输入学号:");
String sid = sc.nextLine();
for(int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
//学生信息存在
if(stu.getSid().equals(sid)){
System.out.print("请输入新的姓名:");
String name = sc.nextLine();
int age;
try{
System.out.print("请输入新的年龄:");
age = sc.nextInt();
sc.nextLine();
//判断年龄是否正常
if(age < 0){
System.out.println("年龄有误");
return;
}
}catch(InputMismatchException e){
System.out.println("你输入的不是数字,请重新输入");
sc.nextLine();
return;
}
System.out.print("请输入新的地址:");
String address = sc.nextLine();
Student student = new Student(sid,name,age,address);
list.set(i,student);
System.out.println("学生信息修改成功!");
return;
}
}
//学生信息不存在
System.out.println("未找到学生信息,请重新输入");
}
}
/*
1.拥有增删改查功能
2.判断了年龄为负数的情况,还有可能用户输入的不是数字,此时会出现InputMismatchException异常
3.如果使用了int in = sc.nextInt();可能要加sc.nextLine();
因为Scanner.nextInt()方法会读取用户输入的整数,但它不会读取换行符。
当你在接下来的代码中再次调用Scanner.nextLine()时,它会读取上一次输入中的换行符(即空字符串),而不是你期望的下一行输入。
为了解决这个问题,可以在调用Scanner.nextInt()之后立即调用Scanner.nextLine()方法,以消耗掉剩余的换行符。
这样,下一个Scanner.nextLine()调用就会正确地读取到用户的下一行输入
*/