一. 需求
登录系统需求
需求:
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
分析:
登录界面:
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 深圳
二. 登录系统的代码实现
通用代码
因为编程过程中需要大量遍历list进行查询操作,所以我们可以把这一部分进行模块化。
通过这个代码的返回值与0的大小关系,我们可以知道用户名是否存在
//查询索引
public static int findIndex(ArrayList<User> list , String name){
for (int i = 0; i < list.size(); i++) {
if(name.equals(list.get(i).getName())){
return i;
}
}
return -1;
}
}
主函数编写
这里主要是框架,实现功能的代码放到方法中,这部分要先写,这样才可以理清思路
public static void main(String[] args) {
ArrayList<User> appList = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
String choose = sc.next();
switch(choose){
case "1" -> logIn(appList);
case "2" -> signIn(appList);
case "3" -> forgetPassword(appList);
default -> {
System.out.println("所选项不合法,请重新选择");
break;
}
}
}
User类
public class User {
private String name;
private String password;
private String PIN;
private String phoneNumber;
public User() {
}
public User(String name, String password, String PIN, String phoneNumber) {
this.name = name;
this.password = password;
this.PIN = PIN;
this.phoneNumber = phoneNumber;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return password
*/
public String getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 获取
* @return PIN
*/
public String getPIN() {
return PIN;
}
/**
* 设置
* @param PIN
*/
public void setPIN(String PIN) {
this.PIN = PIN;
}
/**
* 获取
* @return phoneNumber
*/
public String getPhoneNumber() {
return phoneNumber;
}
/**
* 设置
* @param phoneNumber
*/
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
注册
主体框架
//注册
public static void signIn( ArrayList<User> appList){
System.out.println("注册");
Scanner sc = new Scanner(System.in);
while(true){
//输入用户名
System.out.println("请输入用户名:");
String name = sc.next();
if(!nameCheck(name, appList)){
continue;
}
//输入密码
System.out.println("请输入密码:");
String passWord1 = sc.next();
System.out.println("请再次输入密码:");
String passWord2 = sc.next();
if(!passwordCheck(passWord1,passWord2)){
System.out.println("输入的两次密码不相同,请重新输入");
continue;
}
//输入身份证
System.out.println("请输入身份证:");
String PIN = sc.next();
if(!PINCheck(PIN)){
continue;
}
//输入电话号码
System.out.println("请输入电话号码:");
String phoneNumber = sc.next();
if(!phoneNumberCheck(phoneNumber)){
continue;
}
User u = new User(name,passWord1,PIN,phoneNumber);
appList.add(u);
break;
}
}
用户名验证
//用户名验证
public static boolean nameCheck(String name, ArrayList<User> appList){
int index = findIndex(appList, name);
if(index >= 0){
System.out.println("用户名已经存在,请重新输入");
return false;
}else{
if(name.length() <= 3 || name.length() >= 15){
System.out.println("用户名长度错误,请重新输入");
return false;
}else{
if(!nameCheck(name)){
System.out.println("用户名应该由字母和数字组成,请重新输入");
return false;
}
}
}
return true;
}
判断用户名是否是数字加字母
//判断用户名是否是数字加字母
public static boolean nameCheck(String name){
char a = '0';
int numberCount = 0;
int letterCount = 0;
for (int i = 0; i < name.length(); i++) {
a = name.charAt(i);
if(a >= '0' && a <= '9'){
numberCount++;
}else if((a >= 'A' && a <= 'Z') || (a >= 'a' && a <= 'z')){
letterCount++;
}else{
return false;
}
}
if(numberCount > 0 && letterCount > 0){
return true;
}
return false;
}
密码验证
//密码验证
public static boolean passwordCheck(String password1 , String password2){
if(password1.equals(password2)){
return true;
}
return false;
}
身份证验证
//身份证验证
public static boolean PINCheck(String PIN){
if(PIN.length() == 18 ){
if(PIN.charAt(0) != '0'){
if(PINNumberCheck(PIN)){
return true;
}else{
System.out.println("身份证号码前17位,必须都是数字 ,最为一位可以是数字,也可以是大写X或小写x");
}
}else{
System.out.println("身份证号码不能以0开头");
}
}else{
System.out.println("身份证号码应为18位");
}
return false;
}
判断身份证前17是否是数字,最后一位是否是数字或x或X
//判断身份证前17是否是数字,最后一位是否是数字或x或X
public static boolean PINNumberCheck(String PIN){
for (int i = 0; i < PIN.length(); i++) {
char a = PIN.charAt(i);
if(a < '0' || a > '9'){
if(i == 17){
if(a == 'x' || a == 'X'){
break;
}
}
return false;
}
}
return true;
}
电话号码验证
//电话号码验证
public static boolean phoneNumberCheck(String phoneNumber){
if(phoneNumber.length() != 11){
System.out.println("电话号码应为11位,请重新输入");
return false;
}else if(phoneNumber.charAt(0) == '0'){
System.out.println("电话号码第一位不能是0,请重新输入");
return false;
}else if(!NumberCheck(phoneNumber)){
System.out.println("电话号码必须全是数字,请重新输入");
return false;
}
return true;
}
判断是否全是数字
//判断是否全是数字
public static boolean NumberCheck(String phoneNumber){
for (int i = 0; i < phoneNumber.length(); i++) {
char c = phoneNumber.charAt(i);
if(c < '0' || c >'9'){
return false;
}
}
return true;
}
登录
产生验证码
(1) 先将1~9放在一个数组中,在将大小写放在另一个数组中。
(2)在随机产生索引,将四个字母放前面,最后放数字。
(3)最后将最后一个数字与任意一个字母或数组换位置
//产生验证码
public static String produceCheckNumber(){
int[] num = {1,2,3,4,5,6,7,8,9,0};
char[] letter = new char[52];
//将大小写字母添加到数组里
for (int i = 0; i < letter.length; i++) {
if(i <= 25){
letter[i] = (char)(i + 65);
}else{
letter[i] = (char)(i + 71);
}
}
Random r = new Random();
int count = 4;
StringBuilder sb = new StringBuilder();
while(count > 0){
int n = r.nextInt(51);
char c = letter[n];
sb.append(c);
count--;
}
int n = r.nextInt(10);
sb.append(num[n]);
String s = sb.toString();
//让数值与任意一位交换
char[] chars = s.toCharArray();
n = r.nextInt(5);
char t = 0;
t = chars[n];
chars[n] = chars[4];
chars[4] = t;
return new String(chars);
}
登录主方法
//登录
public static void logIn(ArrayList<User> appList){
System.out.println("登录");
int count = 0;
Scanner sc = new Scanner(System.in);
//输入用户名
System.out.println("请输入用户名");
String name = sc.next();
int index = findIndex(appList, name);
if(index < 0){
System.out.println("用户名未注册,请先注册");
return;
}
User u = appList.get(index);
//输入密码
System.out.println("请输入密码");
String password = sc.next();
//输入验证码
while(true){
String s = produceCheckNumber();
System.out.println("验证码为" + s);
System.out.println("请输入验证码");
String checkNumber = sc.next();
if(!s.equals(checkNumber)){
System.out.println("验证码错误,请重新输入");
}else{
break;
}
}
//判断密码是否正确
while(count < 3){
if(count != 0){
password = sc.next();
}
if(!u.getPassword().equals(password)){
System.out.println("密码或用户名错误请重新输入");
count++;
System.out.println("还剩" + (3-count) + "次机会");
if(count == 3){
System.out.println("输入任意值返回开始页面");
sc.next();
}
}else{
System.out.println("密码正确");
studentSystem.startStudentSystem();
break;
}
}
}
忘记密码
//忘记密码
public static void forgetPassword(ArrayList<User> appList){
Scanner sc = new Scanner(System.in);
System.out.println("忘记密码");
System.out.println("请输入用户名");
String name = sc.next();
//判断用户名是否存在
int index = findIndex(appList, name);
if(index < 0){
System.out.println("用户名不存在");
return;
}
User u = appList.get(index);
System.out.println("请输入身份证号码");
String PIN = sc.next();
System.out.println("请输入电话号码");
String phoneNumber = sc.next();
if(PIN.equals(u.getPIN()) && phoneNumber.equals(u.getPhoneNumber())){
System.out.println("请输入新密码");
String passWord = sc.next();
u.setPassword(passWord);
System.out.println("修改密码成功");
}else {
System.out.println("用户信息不正确,修改密码错误");
}
}
三. 学生管理系统的代码实现
这个之前就已经分享过了,大家可以去看一下这一条博客