登录界面
需求:
为学生管理系统书写一个登陆、注册、忘记密码的功能。
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
分析:
登录界面:
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
学生管理系统
-
案例需求
针对目前我们的所学内容,完成一个综合案例:学生管理系统。该系统主要功能如下:
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序 -
实现步骤
-
定义学生类,包含以下成员变量
private String sid // 学生id
private String name // 学生姓名
private String age // 学生年龄
private String address // 学生所在地 -
学生管理系统主界面的搭建步骤
2.1 用输出语句完成主界面的编写
2.2 用Scanner实现键盘输入
2.3 用switch语句完成选择的功能
2.4 用循环完成功能结束后再次回到主界面 -
学生管理系统的添加学生功能实现步骤
3.1 定义一个方法,接收ArrayList集合
3.2 方法内完成添加学生的功能
①键盘录入学生信息
②根据录入的信息创建学生对象
③将学生对象添加到集合中
④提示添加成功信息
3.3 在添加学生的选项里调用添加学生的方法 -
学生管理系统的查看学生功能实现步骤
4.1 定义一个方法,接收ArrayList集合
4.2 方法内遍历集合,将学生信息进行输出
4.3 在查看所有学生选项里调用查看学生方法 -
学生管理系统的删除学生功能实现步骤
5.1 定义一个方法,接收ArrayList集合
5.2 方法中接收要删除学生的学号
5.3 遍历集合,获取每个学生对象
5.4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生对象从集合中删除
5.5 在删除学生选项里调用删除学生的方法 -
学生管理系统的修改学生功能实现步骤
6.1 定义一个方法,接收ArrayList集合
6.2 方法中接收要修改学生的学号
6.3 通过键盘录入学生对象所需的信息,并创建对象
6.4 遍历集合,获取每一个学生对象。并和录入的修改学生学号进行比较.如果相同,则使用新学生对象替换当前学生对象
6.5 在修改学生选项里调用修改学生的方法 -
退出系统
使用System.exit(0);退出JVM
-
用户类User
package com.itheima;
public class User {
private String name;
private String password;
private String id;
private String phoneNumber;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public User()
{
}
public User(String name, String password, String id, String phoneNumber) {
this.name = name;
this.password = password;
this.id = id;
this.phoneNumber = phoneNumber;
}
}
学生类Student
package com.itheima;
public class Student {
private String id;
private String name;
private int age;
private String address;
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;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public Student() {
}
}
主函数
package com.itheima;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//用户类的集合
ArrayList<User> Userlist = new ArrayList<>();
System.out.println("欢迎来到黑马学生管理系统");
//当登录成功后,跳出while循环
boolean flag=true;
while (flag) {
System.out.println("请选择操作:");
System.out.println("1:登录");
System.out.println("2:注册");
System.out.println("3:忘记密码");
System.out.println("请输入您的选择:");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose){
case "1": //登录
denglu(Userlist);
flag=false;
break;
case "2": //注册
zhuce(Userlist);
break;
case "3": //忘记密码
forgetPassword(Userlist);
break;
default:
System.out.println("您的输入长度或格式有误,请重新输入");
}
}
//学生类的集合
ArrayList<Student> list = new ArrayList<>();
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("请输入您的选择:");
Scanner sc = new Scanner(System.in);
String choice = sc.next();
switch (choice){
case "1":
addStudent(list);
break;
case "2":
deleteStudent(list);
break;
case "3":
updateStudent(list);
break;
case "4":
queryStudent(list);
break;
case "5":
System.out.println("退出");
//终止系统
System.exit(0);
default:
System.out.println("您的输入有误,请重新输入");
break;
}
}
}
//忘记密码。输入用户名,以身份证号和手机号做验证,最后修改改用户名下的密码。
private static void forgetPassword(ArrayList<User> userlist) {
//1.输入用户名,判断是否存在
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的用户名");
String name = sc.next();
//判断用户名是否注册UserContains
boolean flag = UserContains(userlist, name);
if(!flag){
System.out.println("用户名未注册,请先注册");
return;
}
//根据用户名获取用户在集合中的索引getUserIndex
int index = getUserIndex(userlist, name);
User user = userlist.get(index);
//2.输入身份证号和手机号,判断是否匹配
System.out.println("请输入您的身份证号");
String id = sc.next();
System.out.println("请输入您的手机号");
String phoneNumber = sc.next();
if(!user.getId().equals(id) || !user.getPhoneNumber().equals(phoneNumber)){
System.out.println("账号信息不匹配,修改失败");
return;
}else{
//3.修改密码
updatePassword(userlist,name);
}
}
//修改密码。根据传入的用户类集合和用户名,修改该用户名下的密码。
private static void updatePassword(ArrayList<User> userlist, String name) {
//1.获取用户在集合中的索引
Scanner sc = new Scanner(System.in);
int index = getUserIndex(userlist, name);
//2.获取用户的新密码,并覆盖掉老密码
if(name.equals(userlist.get(index).getName())){
System.out.println("请输入您的新密码");
String newPassword = sc.next();
userlist.get(index).setPassword(newPassword);
System.out.println("修改成功");
}
}
//登录:需要输入用户名,密码,验证码,验证码是随机生成的,需要输入三次密码输入错误,则退出系统。
private static void denglu(ArrayList<User> userlist) {
//1.获取用户名并判断是否存在
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入您的用户名");
String name = sc1.next();
boolean flag1 = UserContains(userlist, name);
if(!flag1){
System.out.println("用户名未注册,请先注册");
return;
}
//2.根据索引查出对应的类对象信息,并拿出来
int index = getUserIndex(userlist, name);
User user = userlist.get(index);
//3.验证码
while (true) {
String YanZhengMa = createYanZhengMa();
System.out.println("验证码为:"+YanZhengMa);
System.out.println("请输入验证码");
Scanner sc = new Scanner(System.in);
String inputYanZhengMa = sc.next();
if(!inputYanZhengMa.equals(YanZhengMa)){
System.out.println("验证码输入错误,请重新输入");
}else{
break;
}
}
//4.循环三次,判断密码是否正确
for (int i = 0; i < 3; i++) {
System.out.println("请输入您的密码");
Scanner sc = new Scanner(System.in);
String password = sc.next();
if(!password.equals(user.getPassword())){
System.out.println("密码输入错误,你还有"+(3-i)+"次机会,请重新输入");
}else{
System.out.println("登录成功");
return;
}
}
}
//根据用户名获取用户在集合中的索引
private static int getUserIndex(ArrayList<User> list, String name) {
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals(name)){
return i;
}
}
return -1;
}
//生成验证码:先生成验证码字符数组allChar,将随机出来的验证码放到yanzhengma数组中,最后打乱转为字符串
private static String createYanZhengMa() {
//1.生成验证码字符数组
char[] allChar = new char[62];
for (int i = 0; i < allChar.length; i++) {
if(i<=25){
allChar[i] = (char) ('a'+i);
}else if(i<=51){
allChar[i] = (char) ('A'+(i-26));
}else{
allChar[i] = (char) ('0'+(i-52));
}
}
//2.生成验证码数组
char[] yanzhengma = new char[5];
Random random = new Random();
//加入数字
for(int i = 0; i < 4; i++){
int index = random.nextInt(52);
yanzhengma[i] = allChar[index];
}
//3.打乱验证码:随机一个数字,用来表示验证码中各个字符向后移动的位数。
int numberIndex = random.nextInt(10)+52;
char number = allChar[numberIndex];
int insertIndex = random.nextInt(5);
for(int i=4;i>=insertIndex+1;i--){
yanzhengma[i]=yanzhengma[i-1];
}
yanzhengma[insertIndex]=number;
//4.转为字符串
return new String(yanzhengma);
}
//注册:需要输入用户名,密码,身份证号,手机号,并判断是否规范
private static void zhuce(ArrayList<User> list) {
//1.创建User对象
User user = new User();
Scanner sc = new Scanner(System.in);
//2.输入用户名
while (true) {
System.out.println("用户名输入要求:1.长度必须在3~15位之间;2.只能是字母加数字的组合");
System.out.println("请输入您的用户名");
String name = sc.next();
boolean flag1 = UserContains(list, name);
boolean flag2 = panDuanYongHuMing(name);
if(flag1){
System.out.println("用户名已经存在,请重新录入");
}else if(!flag2){
System.out.println("用户名长度或格式输入错误,请重新录入");
}else{
user.setName(name);
break;
}
}
//3.输入密码
while (true) {
System.out.println("请输入密码:");
String password1 = sc.next();
System.out.println("请再输入一次密码:");
String password2 = sc.next();
if(!password1.equals(password2)){
System.out.println("两次密码不一致,请重新输入");
}else{
user.setPassword(password1);
break;
}
}
//4.输入身份证号
while (true) {
System.out.println("身份证号输入要求:1.长度必须18位;2.不能以0开头;3.前17位,必须都是数字;4.最后一位可以是数字,也可以是大写X或小写x");
System.out.println("请输入身份证号:");
String id = sc.next();
boolean flag3 = panDuanShenFenZhengHao(id);
if(flag3){
user.setId(id);
break;
}
}
//5.输入手机号
while (true) {
System.out.println("手机号号输入要求:1.长度必须11位;2.不能以0开头;3.必须都是数字");
System.out.println("请输入手机号:");
String phoneNumber = sc.next();
boolean flag4 = panDuanPhoneNumber(phoneNumber);
if(flag4){
user.setPhoneNumber(phoneNumber);
break;
}
}
//6.添加到集合中
list.add(user);
System.out.println("注册成功");
}
//判断手机号是否规范
private static boolean panDuanPhoneNumber(String phoneNumber) {
if(phoneNumber.length() != 11){
System.out.println("手机号长度有误,请重新输入");
return false;
}
char firstNum = phoneNumber.charAt(0);
if(firstNum=='0'){
System.out.println("手机号第一位不能为0,请重新输入");
return false;
}
for (int i = 0; i < phoneNumber.length(); i++) {
char temp = phoneNumber.charAt(i);
if(temp >= '0' && temp <= '9'){
continue;
}else{
System.out.println("手机号格式有误,请重新输入");
return false;
}
}
return true;
}
//判断身份证号是否规范
private static boolean panDuanShenFenZhengHao(String id) {
if(id.length() != 18){
System.out.println("身份证长度有误,请重新输入");
return false;
}
char firstNum = id.charAt(0);
if(firstNum=='0'){
System.out.println("身份证第一位不能为0,请重新输入");
return false;
}
for (int i = 0; i < id.length(); i++) {
char temp = id.charAt(i);
if(temp >= '0' && temp <= '9'){
continue;
}else if((temp == 'x' || temp == 'X') && i== 17){
return true;
}else{
System.out.println("身份证格式有误,请重新输入");
return false;
}
}
return true;
}
//判断用户名是否规范
private static boolean panDuanYongHuMing(String name) {
int numberCount = 0;
int wordCount = 0;
int otherCount = 0;
for (int i = 0; i < name.length(); i++) {
char ch = name.charAt(i);
if(ch >= '0' && ch <= '9'){
numberCount++;
}else if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
wordCount++;
}else{
otherCount++;
}
}
if(name.length()>=3 && name.length()<=10 && numberCount > 0 && wordCount > 0 && otherCount == 0){
return true;
}
return false;
}
//根据用户名判断是否在集合中
private static boolean UserContains(ArrayList<User> list, String name) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String userName = user.getName();
if(userName.equals(name)){
return true;
}
}
return false;
}
//查询学生信息
private static void queryStudent(ArrayList<Student> list) {
if (list.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
//结束方法
return;
}
System.out.println("id\t姓名\t年龄\t家庭住址");
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
}
}
//修改学生信息
private static void updateStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改学生的id:");
String id = sc.next();
int index = getIndex(list, id);
if(index == -1){
System.out.println("要修改的id" + id + "不存在,请重新输入");
return;
}
Student stu = list.get(index);
System.out.println("请输入要修改的学生姓名");
String newName = sc.next();
stu.setName(newName);
System.out.println("请输入要修改的学生年龄");
int newAge = sc.nextInt();
stu.setAge(newAge);
System.out.println("请输入要修改的学生家庭住址");
String newAddress = sc.next();
stu.setAddress(newAddress);
System.out.println("学生信息修改成功");
}
//删除学生信息
private static void deleteStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学生id:");
String id = sc.next();
int index = getIndex(list, id);
if(index >= 0){
list.remove(index);
System.out.println("id为:" + id + "的学生删除成功");
}else{
System.out.println("id不存在,删除失败");
}
}
//根据学生id获取索引
private static int getIndex(ArrayList<Student> list, String id) {
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String sid = stu.getId();
if(sid.equals(id)){
return i;
}
}
return -1;
}
//添加学生信息
private static void addStudent(ArrayList<Student> list) {
Student s = new Student();
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入学生id:");
String id = sc.next();
boolean flag = contains(list, id);
if(flag){
System.out.println("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("添加学生成功");
}
//判断学生id是否在集合中
private static boolean contains(ArrayList<Student> list, String id) {
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
String uid = stu.getId();
if(uid.equals(id)){
return true;
}else{
return false;
}
}
return false;
}
}