题目需求:
学生类:
属性 :id、姓名、年龄、家庭住址
添加功能
键盘录入每一个学生信息并添加,需要满足以下要求:
*id唯一
删除功能
键盘录入要删除的学生id,需要满足以下要求:
*id存在才能删除
*id不存在,需要提示不存在,并回到初始菜单
修改功能
键盘录入要修改的学生id,需要满足以下要求:
*id存在,继续录入需要修改的信息
*id不存在,需要提示不存在,并回到初始菜单
查询功能
打印所有学生信息,需要满足以下要求:
*如果没有学生信息,提示:当前无学生信息,请添加后再查询
用户类
属性:用户名、密码、身份证号、手机号
注册功能:
1.用户名需要满足一下要求:
*用户名唯一
*用户名长度必须在3~15位之间
*只能是字母加数字组合,但是不能是纯数字或者纯字母
2.密码键盘输入两次,两次一致才可以进行注册
3.身份证号码需要验证
*长度为18位
*不能以0开头
*前17位,必须是数字
*最后一位可以是数字、大小写的x
4.手机号验证
*长度为11位
*不能以0开头
*必须为纯数字
登录功能
1.键盘录入用户名
2.键盘录入密码
3.键盘录入验证码
验证要求:
*用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
*判断验证码是否正确,如果不正确,重新输入
*判断用户名和密码是否正确
忘记密码
1.键盘录入用户名,判断用户名是否存在,如果不存在,直接结束方法并提示未注册
2.键盘录入身份证号码和手机号
3.判断当前用户的身份证号码和手机号码是否一致
*如果一致,则提示输入密码,进行修改
*如果不一致,则提示:账号信息不匹配,修改失败
验证码规则:
长度4~6位之间,随机
随机包含大小写字母或数字
比如:xpO8Yh
学生类
package com.iweb.list.test1.StudentSystem;
/**
* @author Caesar
* @date 2022 11 2022/11/14 15:50
* @description 类的描述与介绍
*/
public class Student {
private int id;
private String name;
private int age;
private String address;
public Student() {
}
public Student(int id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
用户类
package com.iweb.list.test1.StudentSystem;
/**
* @author Caesar
* @date 2022 11 2022/11/15 9:05
* @description 类的描述与介绍
*/
public class User {
private String userName;
private String password;
private String idCard;
private String phoneNumber;
public User() {
}
public User(String userName, String password, String idCard, String phoneNumber) {
this.userName = userName;
this.password = password;
this.idCard = idCard;
this.phoneNumber = phoneNumber;
}
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;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
测试类
package com.iweb.list.test1.StudentSystem;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* @author Caesar
* @date 2022 11 2022/11/14 16:01
* @description 类的描述与介绍
*/
public class StudentSystem {
public static void main(String[] args) {
// 定义一个集合,用于存储学生对象
ArrayList<Student> list = new ArrayList<>();
// 定义一个集合用于存储用户对象
ArrayList<User> userList = new ArrayList<>();
// 开始菜单
loginPage(userList,list);
}
// 登录页面
public static void loginPage(ArrayList<User> userList,ArrayList<Student> list){
while (true){
System.out.println(">>>>>>>>>>欢迎来到某某大学学生管理系统<<<<<<<<<<");
System.out.println(">>>>>>>>>>>>>>>>>>1:登录<<<<<<<<<<<<<<<<<<<<<");
System.out.println(">>>>>>>>>>>>>>>>>>2:注册<<<<<<<<<<<<<<<<<<<<<");
System.out.println(">>>>>>>>>>>>>>>>>>3:找回密码<<<<<<<<<<<<<<<<<");
System.out.println(">>>>>>>>>>>>>>>>>>4:退出<<<<<<<<<<<<<<<<<<<<");
Scanner scr = new Scanner(System.in);
String chose = scr.next();
switch (chose){
case "1":
login(userList,list);
break;
case "2":
registered(userList);
break;
case "3":
updatePassword(userList);
break;
case "4":
System.out.println("谢谢惠顾");
System.exit(0);
default:
System.out.println("输入有误,请重新输入!");
}
}
}
// 登录后的菜单
public static String homePage(ArrayList<Student> list,ArrayList<User> userList){
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:退出登录<<<<<<<<<<<<<<<<<<<");
Scanner scr = new Scanner(System.in);
String chose = scr.next();
switch (chose) {
case "1":
addStudents(list);
break;
case "2":
deleteStudent(list);
break;
// for (int i = 0; i < list.size(); i++) {
// System.out.println(list.get(i).getId());
// }
case "3":
updateStudent(list);
break;
case "4":
searchStudent(list);
break;
case "5":
System.out.println("谢谢惠顾!!!");
// break loop;
// 这里的loop用于给while循环起名
// 结束指定循环,才会结束
// 若直接break,只能跳出switch case这个循环,不能跳出外面的while循环
// 退出的第二种写法:
loginPage(userList,list);
// 表示虚拟机停止运行
default:
System.out.println("没有这个选项!请重新输入");
}
}
}
// 学生信息管理模块————————————————————————————
// 用于添加学生
public static void addStudents(ArrayList<Student> list) {
Scanner scr = new Scanner(System.in);
Student stu = new Student();
// 利用空参构造创建学生对象
System.out.println("请输入学生id");
int sid = scr.nextInt();
stu.setId(sid);
boolean flag = contains(list, sid);
if (flag) {
// 表示id已经存在
System.out.println("学生信息已存在!");
} else {
// 表示id不存在,并插入学生信息
System.out.println("请输入学生姓名");
String sname = scr.next();
stu.setName(sname);
System.out.println("请输入学生年龄");
int sage = scr.nextInt();
stu.setAge(sage);
System.out.println("请输入学生地址");
String saddress = scr.next();
stu.setAddress(saddress);
list.add(stu);
System.out.println("学生信息添加成功!");
}
}
// 学生删除模块
public static void deleteStudent(ArrayList<Student> list) {
Scanner scr = new Scanner(System.in);
System.out.println("请输入要删除的学生id");
int sid = scr.nextInt();
int index = getIndex(list, sid);
// 调用下面的getIndex方法获取集合的索引
// 如果索引>=0,则表示对象存在,反之不存在
if (index >= 0) {
// 添加确认删除
// Y:确认删除,N:取消删除
System.out.println("确认删除:Y,取消删除:N");
String delete = scr.next();
if (delete.equals("Y") || delete.equals("y")) {
list.remove(index);
System.out.println("删除成功!");
} else if (delete.equals("N") || delete.equals("n")) {
System.out.println("已取消删除!");
} else {
System.out.println("输入有误!");
}
} else {
System.out.println("你要删除的id不存在!");
}
}
// 学生信息修改模块
public static void updateStudent(ArrayList<Student> list) {
Scanner scr = new Scanner(System.in);
Student stu = new Student();
System.out.println("请输入需要修改信息的学生id");
int sid = scr.nextInt();
int index = getIndex(list, sid);
if (index >= 0) {
list.remove(index);
stu.setId(sid);
System.out.println("请输入需要求改的姓名");
String sname = scr.next();
stu.setName(sname);
System.out.println("请输入需要修改的年龄");
int sage = scr.nextInt();
stu.setAge(sage);
System.out.println("请输入需要求改的地址");
String saddress = scr.next();
stu.setAddress(saddress);
System.out.println("您要修改的信息为:");
System.out.println("姓名:" + sname);
System.out.println("年龄:" + sage);
System.out.println("地址:" + saddress);
System.out.println("确认修改:Y,取消修改:N");
String comfirm = scr.next();
if (comfirm.equals("Y") || comfirm.equals("y")) {
System.out.println("修改成功!");
list.add(stu);
} else if (comfirm.equals("N") || comfirm.equals("n")) {
System.out.println("已取消!");
} else {
System.out.println("输入有误!");
}
} else {
System.out.println("学生信息不存在!");
}
}
// 查询学生
public static void searchStudent(ArrayList<Student> list) {
if (list.size() == 0) {
System.out.println("当前无学生信息,请添加后再查");
// 结束方法
return;
} else {
System.out.println("id\t姓名\t年龄\t家庭住址");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getId() + "\t" + list.get(i).getName() +
"\t" + list.get(i).getAge() + "\t\t" + list.get(i).getAddress());
}
}
}
// 写一个方法用于判断id是否在集合中存在
public static boolean contains(ArrayList<Student> list, int id) {
int index = getIndex(list, id);
if (index >= 0) {
return true;
}
return false;
// 3.存在,true,不存在,false
}
// 写一个方法用于获取学生对象的索引
public static int getIndex(ArrayList<Student> list, int id) {
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
int sid = stu.getId();
if (id == sid) {
return i;
}
}
return -1;
}
// 注册模块——————————————————————————————————————————
// 注册registered
public static void registered(ArrayList<User> userList) {
User user = new User();
Scanner scr = new Scanner(System.in);
System.out.println("欢迎来到注册界面:");
System.out.println("请输入您要注册的用户名:");
String userName = scr.next();
int dicide = containsUser(userList, userName);
if (dicide >= 0) {
System.out.println("用户已存在!");
} else {
// 判断用户名
int decide = containsUserName(userName);
if (decide == 1) {
user.setUserName(userName);
System.out.println("请输入您的密码");
String firstPassword = scr.next();
// 判断两次密码是否一致
while (true) {
System.out.println("请再次输入密码确认");
String secondPassword = scr.next();
if (firstPassword.equals(secondPassword)) {
user.setPassword(secondPassword);
break;
}else {
System.out.println("两次密码不一致");
}
}
// 判断身份证号是否满足要求
while (true) {
System.out.println("请输入您的身份证号");
String idCard=scr.next();
int check=chechIdCard(idCard,userList);
if(check==-1){
System.out.println("身份证号输入有误!");
}else if(check==-2){
System.out.println("身份证号已存在!");
}else if(check==1){
user.setIdCard(idCard);
break;
}
}
while (true){
System.out.println("请输入您的手机号");
String phoneNumber=scr.next();
int check=checkPhoneNumber(phoneNumber,userList);
if(check==-1){
System.out.println("手机号输入有误!");
}else if(check==-2){
System.out.println("手机号已存在!");
}else if(check==1) {
user.setPhoneNumber(phoneNumber);
break;
}
}
userList.add(user);
System.out.println("注册成功!");
} else {
System.out.println("注册失败!");
}
}
}
// 用于判断用户是否存在
public static int containsUser(ArrayList<User> userList, String userName) {
for (int i = 0; i < userList.size(); i++) {
if (userName.equals(userList.get(i).getUserName())) {
return i;
}
}
return -1;
}
// 判断用户名长度和组成
public static int containsUserName(String userName) {
String name = userName;
if (name.length() <= 15 && name.length() >= 3) {
// 这里判断用户名长度是否是在3~15位之间
int countNum = 0;
int countLeter = 0;
for (int i = 0; i < name.length(); i++) {
char uname = name.charAt(i);
// 判断用户名是否为数字和字母
if ((uname >= 'a' && uname <= 'z') || (uname >= 'A' && uname <= 'Z') || (uname >= '0' && uname <= '9')) {
if (uname >= '0' && uname <= '9') {
// 这里用于判断字符是否为数字
countNum++;
} else if ((uname >= 'a' && uname <= 'z') || (uname >= 'A' && uname <= 'Z')) {
countLeter++;
}
} else {
System.out.println("用户名只能为字母加数字");
break;
}
}
if (countNum == name.length()) {
System.out.println("用户名不能为纯数字!");
} else if (countLeter == name.length()) {
System.out.println("用户名不能为纯字母");
} else {
return 1;
}
} else {
System.out.println("用户名长度不符合要求!");
return -1;
}
return -1;
}
// 检验身份证号是否符合要求!
public static int chechIdCard(String idCard,ArrayList<User> userList) {
// 先判断长度是否为18位
if (idCard.length() == 18) {
// 判断不能以0开头
if (idCard.charAt(0)=='0') {
return -1;
// 身份证号开头为0,返回-1
} else {
// 判断身份证号最后一位,最后一位是数字或者大写x或者小写x
if ((idCard.charAt(idCard.length() - 1) >= '0' && idCard.charAt(idCard.length() - 1) <= '9') ||
idCard.charAt(idCard.length() - 1) == 'x' || idCard.charAt(idCard.length() - 1) == 'X') {
// 判断身份证前17位为数字
for (int i = 0; i < idCard.length() - 1; i++) {
char idcard = idCard.charAt(i);
if (idcard >= '0' && idcard <= '9') {
int dicideIdcard=decideIdCard(idCard,userList);
if(dicideIdcard==1){
return 1;
}else {
return -2;
}
}else {
return -1;
}
}
}else {
return -1;
}
}
} else {
return -1;
}
// 身份证号满足要求返回1,不满足返回-1
return -1;
}
// 检验身份证号是否已存!
public static int decideIdCard(String IdCard,ArrayList<User> userList){
for (int i = 0; i < userList.size(); i++) {
if(IdCard.equals(userList.get(i).getIdCard())){
return -1;
}
}
return 1;
}
// 检验手机号是否满足
public static int checkPhoneNumber(String phone,ArrayList<User> userList){
if(phone.length()==11){
if(phone.charAt(0)=='0'){
return -1;
}else {
int decidePhoneNumber=decidePhoneNumber(phone,userList);
if(decidePhoneNumber==1){
return 1;
}else if(decidePhoneNumber==-1){
return -2;
// 返回2表示手机号已存在
}
}
}
return -1;
}
// 判断手机号是否已注册!
public static int decidePhoneNumber(String phone,ArrayList<User> userList){
for (int i = 0; i < userList.size(); i++) {
String thisPhone=userList.get(i).getPhoneNumber();
if(phone.equals(thisPhone)){
return -1;
// 如果手机号码已存在,则返回-1
}
}
return 1;
// 如果手机号码不存在,则返回1
}
// 登录模块——————————————————————————————————————————————
// 登录
public static int login(ArrayList<User> userList,ArrayList<Student> list){
Scanner scr=new Scanner(System.in);
System.out.println("请输入用户名:");
String userName=scr.next();
int check=containsUser(userList,userName);
// 用于判断用户是否已注册
if(check==-1){
System.out.println("用户不存在,请先注册!");
}else {
// 如果用户存在,containsUser这个方法返回的是用户对象的索引
loop:for (int i = 0; i <3;) {
System.out.println("请输入密码:");
String password=scr.next();
if(userList.get(check).getUserName().equals(userName)&&userList.get(check).getPassword().equals(password)){
String autoCodeFirst=autoCode();
System.out.println(autoCodeFirst);
System.out.println("请输入验证码");
String autoCodeSecond=scr.next();
if(autoCodeFirst.equals(autoCodeSecond)){
System.out.println("登录成功!");
homePage(list,userList);
return 1;
}else {
System.out.println("验证码输入有误!");
i++;
continue loop;
}
}else {
System.out.println("用户名或账号错误!");
i++;
continue loop;
}
}
System.out.println("密码输错次数过多,请找回密码!");
}
return -1;
}
// 生成验证码
public static String autoCode(){
// 定义一个长度为大写字母+小写字母+数字的char类型数组
char[] arrLeter=new char[62];
for (int i = 0; i <arrLeter.length ; i++) {
if(i<10){
// 存0~9的数字
arrLeter[i]= (char) (48+i);
}else if(i>=10&&i<36){
arrLeter[i]=(char)(55+i);
}else if(i>=36){
arrLeter[i]=(char)(61+i);
}
}
// 定义一个字符串,随机从char类型数组中抽取4~6个字符存进字符串例
Random r=new Random();
// 用于定义验证码长度,验证码长度为4~6
int autoCodeLength=r.nextInt(3)+4;
// 定义一个字符串,用于在下面存抽取到的字符
String result="";
for (int i = 0; i < autoCodeLength; i++) {
// for循环没执行依次,便从数组里面抽取一个字符存进字符串里面
int letterNum=r.nextInt(arrLeter.length);
result=result+arrLeter[letterNum];
}
return result;
}
// 忘记密码————————————————————————————————————
// 先判断用户名是否存在,存在则执行下一步,反之提醒未注册
// 若用户存在,则让用户输入手机号和身份证号,若都正确,返回该用户的索引
// 调用下面的方法用于修改用户密码
public static int getUserIndex(ArrayList<User> userList,String userName,String phoneNumber,String idCard){
int checkUser=containsUser(userList,userName);
if(checkUser>=0){
// 判断用户是否存在
int checkPhone=decidePhoneNumber(phoneNumber,userList);
int checkIdCard=decideIdCard(idCard,userList);
if(checkIdCard==-1&&checkPhone==-1){
return checkUser;
}else {
System.out.println("手机号或身份证号有误!");
}
}else if(checkUser==-1){
System.out.println("用户不存在,请注册!");
}
return -1;
}
// 修改密码
public static void updatePassword(ArrayList<User> userList){
Scanner scr=new Scanner(System.in);
User user=new User();
System.out.println("请输入您要找回的用户名:");
String userName=scr.next();
int userIndex=containsUser(userList,userName);
if(userIndex>=0){
System.out.println("请输入您的手机号:");
String phone=scr.next();
System.out.println("请输入您的身份证号:");
String idCard=scr.next();
System.out.println("请输入新密码");
String newPassword=scr.next();
int indexIn=getUserIndex(userList,userName,phone,idCard);
userList.remove(indexIn);
user.setUserName(userName);
user.setPassword(newPassword);
user.setPhoneNumber(phone);
user.setIdCard(idCard);
userList.add(user);
System.out.println("修改成功!");
}else {
System.out.println("用户名不存在,请先注册!");
registered(userList);
}
}
}
1万+

被折叠的 条评论
为什么被折叠?



