目录
前言
完成了学生管理系统已经学生管理系统的升级需求
一、需求
分析:
初始菜单:
"-------------欢迎来到学生管理系统----------------"
"1:添加学生"
"2:删除学生"
"3:修改学生"
"4:查询学生"
"5:退出"
"请输入您的选择:"
学生类:
属性: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
功能模块
1.工具类
主要内容是
1.对输入的值是否为int类型进行判断
2.非零验证,主要配合代码起到缓冲的作用
import java.util.Scanner;
public class Util {
//整数判断
public static int isInt(String s){
Scanner input = new Scanner(System.in);
int i;
while (true) {
System.out.print(s);
if (input.hasNextInt()){
i = input.nextInt();
break;
}else {
System.out.println("请输入一个整数,");
input.next();
}
}
return i;
}
//非零验证,主要配合代码起到缓冲的作用
public static void isZero(String s){
Scanner input = new Scanner(System.in);
int i;
while (true) {
System.out.print(s);
if (input.hasNextInt()){
i = input.nextInt();
if (i==0){
return;
}else {
System.out.println("输入错误,请重新输入");
}
}else {
System.out.println("请输入一个整数,");
input.next();
}
}
}
}
2.学生类和用户类
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;
}
/**
* 获取
* @return id
*/
public int getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
}
}
public class User {
private String username;
private int password;
private String ID_card;
private String phone_num;
public User() {
}
public User(String username, int password, String ID_card, String phone_num) {
this.username = username;
this.password = password;
this.ID_card = ID_card;
this.phone_num = phone_num;
}
/**
* 获取
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
/**
* 获取
* @return password
*/
public int getPassword() {
return password;
}
/**
* 设置
* @param password
*/
public void setPassword(int password) {
this.password = password;
}
/**
* 获取
* @return ID_card
*/
public String getID_card() {
return ID_card;
}
/**
* 设置
* @param ID_card
*/
public void setID_card(String ID_card) {
this.ID_card = ID_card;
}
/**
* 获取
* @return phone_num
*/
public String getPhone_num() {
return phone_num;
}
/**
* 设置
* @param phone_num
*/
public void setPhone_num(String phone_num) {
this.phone_num = phone_num;
}
public String toString() {
return "User{username = " + username + ", password = " + password + ", ID_card = " + ID_card + ", phone_num = " + phone_num + "}";
}
}
3.实现类,一个实现基础功能,一个实现升级版功能
import java.util.ArrayList;
import java.util.Scanner;
//基础功能
public class Function {
//添加功能
public Student add(ArrayList<Student> list){
Student st= new Student();
Scanner input = new Scanner(System.in);
Student student = list.get(list.size() - 1);
int id = student.getId();
st.setId(id+1);
System.out.print("请输入姓名:");
st.setName(input.next());
st.setAge(Util.isInt("请输入年龄:"));
System.out.print("请输入地址:");
st.setAddress(input.next());
return st;
}
//删除功能
public int delete(ArrayList<Student> list,int id){
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int id1 = student.getId();
if (id==id1){
System.out.println("删除成功");
return i;
}
}
System.out.println("删除失败");
return 0;
}
//修改功能
public Student update(ArrayList<Student> list,int id){
boolean flag = false;
Student student = new Student();
Student student1 = new Student();
Scanner input = new Scanner(System.in);
while (true) {
for (int i = 0; i < list.size(); i++) {
student = list.get(i);
int id1 = student.getId();
if (id1==id){
student1=student;
System.out.println("您要修改的信息列为:");
flag=true;
System.out.println(student);
}
}
if (flag){
break;
}else {
return null;
}
}
System.out.println("请选择您要修改的信息");
int anInt = Util.isInt("请输入(1.姓名,2.年龄,3.地址):");
if (anInt==1){
System.out.print("请输入姓名:");
student1.setName(input.next());
}else if (anInt==2){
student1.setAge(Util.isInt("请输入年龄:"));
}else if (anInt==3){
System.out.print("请输入地址:");
student1.setAddress(input.next());
}
return student1;
}
//根据id查询
public ArrayList<Student> select(ArrayList<Student> list, int id){
ArrayList<Student> list1 = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int id1 = student.getId();
if (id1==id){
list1.add(list.get(i));
}
}
return list1;
}
}
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
//升级版功能
public class Account {
//登录功能
public boolean dengLu(ArrayList<User> list, String username, int password) {
Scanner input = new Scanner(System.in);
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
String name = user.getUsername();
int ps = user.getPassword();
if (name.equals(username)) {
int num = 3;
while (num>1){
if (ps==password){
int password1 = Util.isInt("请再次输入密码:");
if (password1 == ps) {
System.out.println("密码正确");
//验证码
String val = "";
Random random = new Random();
//用循环输出六个字符进行拼接
for (int j = 0; j < 5; j++) {
// 本次循环是数字还是字母
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "number";
// 字母
if ("char".equalsIgnoreCase(charOrNum)) {
// 本次字母为大写还是小写(ASCII)
int choice = random.nextInt(2) % 2 == 0 ? 65 : 97;
//生成这个字符
val += (char) (choice + random.nextInt(26));
}
// 数字
else if ("number".equalsIgnoreCase(charOrNum)) {
//数字可以直接生成
val += String.valueOf(random.nextInt(10));
}
}
System.out.println("5位验证码为:" + val);
System.out.print("请输入验证码:");
String s = input.next();
while (true) {
if (s.equals(val)){
System.out.println("登录成功");
return true;
}else {
System.out.println("验证码错误,请重新输入");
s=input.next();
}
}
} else {
System.out.println("两次密码输入不一致,请重新输入");
return false;
}
}else {
num--;
System.out.println("您还有"+num+"次机会");
password=Util.isInt("密码错误,请重新输入:");
}
}
System.out.println("次数已用完,请重新登录");
return false;
}
}
System.out.println("用户名未注册,请先注册");
return false;
}
//注册功能
public User zhuCe(ArrayList<User> list) {
User user = list.get(list.size() - 1);
Scanner input = new Scanner(System.in);
String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{3,15}$";
System.out.print("请输入用户名:");
String s = input.next();
for (int i = 0; i < list.size(); i++) {
User user1 = list.get(i);
String username = user1.getUsername();
while (true) {
if (s.equals(username)){
System.out.print("用户名已注册,请重新输入用户名:");
s=input.next();
}else {
break;
}
}
}
while (true) {
if (s.matches(regex)){
user.setUsername(s);
break;
}else {
System.out.print("输入的用户名不符合规范,请重新输入:");
s=input.next();
}
}
while (true) {
int ps1 = Util.isInt("请输入密码:");
int ps2 = Util.isInt("请再次输入密码:");
if (ps1==ps2){
user.setPassword(ps1);
break;
}else {
System.out.println("两次密码输入不一致,请重新输入");
}
}
String regExp = "^[1-9]\\d{5}(18|19|20|(3\\d))\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
System.out.print("请输入身份证号:");
String s1 = input.next();
while (true) {
if (s1.length()==18) {
if (s1.matches(regExp)){
user.setID_card(s1);
break;
}else {
System.out.print("输入的身份证号不符合规范,请重新输入:");
s1=input.next();
}
}else {
System.out.print("输入的身份证号不符合规范,请重新输入:");
s1=input.next();
}
}
String phNum="^1[3|4|5|7|8][0-9]\\d{4,8}$";
System.out.print("请输入手机号:");
String s2 = input.next();
while (true){
if (s2.length()==11){
if (s2.matches(phNum)){
user.setPhone_num(s2);
break;
}else {
System.out.print("输入的手机号不符合规范,请重新输入:");
s2=input.next();
}
}else {
System.out.print("输入的手机号不符合规范,请重新输入:");
s2=input.next();
}
}
System.out.println("注册成功");
return user;
}
//忘记密码
public int[] zhaoHui(ArrayList<User> list){
Scanner input = new Scanner(System.in);
System.out.print("请输入用户名:");
int []a= {-1,0};
String s = input.next();
for (int i = 0; i < list.size(); i++) {
User user1 = list.get(i);
String username = user1.getUsername();
if (s.equals(username)){
String id_card = user1.getID_card();
String phone_num = user1.getPhone_num();
System.out.print("请输入身份证号码:");
String s1 = input.next();
System.out.print("请输入手机号码:");
String s2 = input.next();
if (s1.equals(id_card)&&s2.equals(phone_num)){
int miMa = Util.isInt("请输入要修改的密码:");
a[0]=i;
a[1]=miMa;
return a;
}else {
System.out.println("账号信息不匹配,修改失败");
}
}
}
System.out.println("输入的用户名未注册");
return a;
}
}
4.测试类
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Student st1 = new Student(101, "小张", 19, "岳阳");
Student st2 = new Student(102, "小李", 21, "长沙");
Student st3 = new Student(103, "小张", 22, "江西");
ArrayList<Student> list = new ArrayList<>();
list.add(st1);
list.add(st2);
list.add(st3);
User us1 = new User("admin1",123456,"360502212111352210","15344521621");
User us2 = new User("admin2",123456,"360502212111352210","15344521621");
ArrayList<User> users = new ArrayList<>();
users.add(us1);
users.add(us2);
Function fu = new Function();
Account ac = new Account();
boolean flag = true;
Scanner input = new Scanner(System.in);
while (true) {
if(flag){
System.out.println("欢迎来到学生管理系统");
int ad = Util.isInt("请选择操作:1登录 2注册 3忘记密码 4退出系统:");
if (ad==1){
System.out.print("请输入用户名:");
String name = input.next();
int password = Util.isInt("请输入密码:");
if (ac.dengLu(users, name, password)){
flag=false;
}
} else if (ad==2){
User user = ac.zhuCe(users);
users.add(user);
} else if (ad==3){
int a[]=ac.zhaoHui(users);
if (a[0]!=-1){
User user = users.get(a[0]);
user.setPassword(a[1]);
System.out.println("修改密码成功");
}else {
System.out.println("修改密码失败");
}
} else if (ad==4){
System.out.println("退出系统");
return;
}else {
}
}else {
System.out.println("--------------------欢迎来到学生信息管理系统--------------------");
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("-----------------------------------------------------------");
int num = Util.isInt("请输入1-5中的任意一个数:");
switch (num) {
//添加功能
case 1:
System.out.println("您选择了添加功能");
list.add(fu.add(list));
System.out.println("添加成功");
break;
//删除功能
case 2:
System.out.println("您先择了删除功能");
int id1 = Util.isInt("请输入id:");
int id = fu.delete(list, id1);
if (id != 0) {
list.remove(id);
}
break;
//修改功能
case 3:
System.out.println("您先择了修改功能");
while (true) {
int id2 = Util.isInt("请输入要修改学生的id:");
Student student = fu.update(list, id2);
if (student == null) {
System.out.println("修改失败!");
System.out.println("未找到输入的id,请重新输入");
} else {
System.out.println("修改成功!");
break;
}
}
break;
//查询功能
case 4:
System.out.println("您先择了查询功能");
System.out.println("请选择要查询的类型(1.根据id查询,2.查询全部信息):");
while (true) {
int le = Util.isInt("请输入1或者2:");
if (le == 1) {
System.out.println("已选择根据id查询学生信息");
int id3 = Util.isInt("请输入id:");
ArrayList<Student> list1 = fu.select(list, id3);
if (list1.size() == 0) {
System.out.println("未查询到结果");
break;
} else {
System.out.println("已选择查询所有学生信息");
System.out.println(list1);
break;
}
} else if (le == 2) {
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
System.out.println(student);
}
break;
} else {
System.out.println("输入错误,请重新输入");
}
}
break;
//注销账号
case 5:
System.out.println("注销成功");
flag=true;
break;
default:
System.out.println("请输入1-5以内的数:");
break;
}
}
Util.isZero("请输入0返回:");
}
}
}
知识点:
1.熟悉并运用ArrayList
2.学习正则表达式
3.学会对输入的值进行数据验证
总结
这个小项目作为练习并掌握面向对象的知识还是非常不错的,也算是本人学习Java的一个小里程碑
版权声明:本文为m0_60844009原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。