前言
博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV17F411T7Ao
学生管理系统
需求:
采取控制台的方式去书写学生管理系统。
分析:
初始菜单:
“-------------欢迎来到黑马学生管理系统----------------”
“1:添加学生”
“2:删除学生”
“3:修改学生”
“4:查询学生”
“5:退出”
“请输入您的选择:”
学生类:
属性:id、姓名、年龄、家庭住址
添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
- id唯一
删除功能:
键盘录入要删除的学生id,需要满足以下要求:
- id存在删除
- id不存在,需要提示不存在,并回到初始菜单
修改功能:
键盘录入要修改的学生id,需要满足以下要求
- id存在,继续录入其他信息
- id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有的学生信息,需要满足以下要求
如果没有学生信息,提示:当前无学生信息,请添加后再查询
如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
id 姓名 年龄 家庭住址
heima001 张三 23 南京
heima002 李四 24 北京
heima003 王五 25 广州
heima004 赵六 26 深圳
-
为学生管理系统书写一个登陆、注册、忘记密码的功能。
-
只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作。
登录界面:
System.out.println(“欢迎来到学生管理系统”);
System.out.println(“请选择操作1登录 2注册 3忘记密码”);
用户类:
属性:用户名、密码、身份证号码、手机号码
注册功能:
1,用户名需要满足以下要求(验证要求):
-
用户名唯一
-
用户名长度必须在3~15位之间
-
只能是字母加数字的组合,但是不能是纯数字
-
密码键盘输入两次,两次一致才可以进行注册。
-
身份证号码需要验证。
身份证 验证要求:
- 长度为18位
- 不能以0为开头
- 前17位,必须都是数字
- 最为一位可以是数字,也可以是大写X或小写x
手机号 验证要求:
-
长度为11位
-
不能以0为开头
-
必须都是数字
登录功能:
1,键盘录入用户名
2,键盘录入密码
3,键盘录入验证码
验证要求:
-
用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
-
判断验证码是否正确,如不正确,重新输入
-
再判断用户名和密码是否正确,有3次机会
忘记密码:
1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
2,键盘录入身份证号码和手机号码
3,判断当前用户的身份证号码和手机号码是否一致,
-
如果一致,则提示输入密码,进行修改。
-
如果不一致,则提示:账号信息不匹配,修改失败。
验证码规则:
-
长度为5
-
由4位大写或者小写字母和1位数字组成,同一个字母可重复
-
数字可以出现在任意位置
比如: aQa1K
实现代码:
package com.itheima.StudentSystemDemo;
public class MainSystem {
public static void main(String[] args) {
UserLogin userLogin = new UserLogin();
userLogin.login();
}
}
package com.itheima.StudentSystemDemo;
public class Student {
private int studentId;
private String studentName;
private int studentAge;
private String familyAddress;
private boolean logicDelete;
public Student() {
this.studentId = 0;
this.studentName = "default";
this.studentAge = 0;
this.familyAddress = "default";
logicDelete = true;
}
public Student(int studentId, String studentName, int studentAge, String familyAddress) {
this.studentId = studentId;
this.studentName = studentName;
this.studentAge = studentAge;
this.familyAddress = familyAddress;
logicDelete = false;
}
public String getFamilyAddress() {
return familyAddress;
}
public void setFamilyAddress(String familyAddress) {
this.familyAddress = familyAddress;
}
public boolean isLogicDelete() {
return logicDelete;
}
public void setLogicDelete(boolean logicDelete) {
this.logicDelete = logicDelete;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getStudentAge() {
return studentAge;
}
public void setStudentAge(int studentAge) {
this.studentAge = studentAge;
}
}
package com.itheima.StudentSystemDemo;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public static void MainSystem() {
ArrayList<Student> studentArrayList = new ArrayList<>();
Scanner sc = new Scanner(System.in);
boolean flag = false;
int j = 0;
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:退出");
System.out.println("请输入您的选择:");
mainSwitch:
switch (sc.next()) {
case "1":
try {
int newStudentId = 0;
String newStudentName;
int newStudentAge = 0;
String newStudentAddress;
System.out.println("添加学生:");
System.out.println("请输入id(数字):");
newStudentId = sc.nextInt();
if (studentArrayList.size() > 0) {
for (Student i : studentArrayList) {
if (i.getStudentId() == newStudentId) {
System.out.println("ID重复,退回主菜单");
break mainSwitch;
}
}
}
if (newStudentId == 0) {
System.out.println("学生ID不可以为0,返回主菜单");
break mainSwitch;
}
System.out.println("请输入姓名:");
newStudentName = sc.next();
System.out.println("请输入年龄:");
newStudentAge = sc.nextInt();
System.out.println("请输入家庭住址:");
newStudentAddress = sc.next();
studentArrayList.add(new Student(newStudentId, newStudentName, newStudentAge, newStudentAddress));
System.out.println("添加成功");
break;
} catch (Exception e) {
System.out.println("无效输入,返回主菜单");
break ;
}
case "2":
try {
if (studentArrayList.size() == 0) {
System.out.println("目前表中没有学生,返回主菜单");
break;
}
System.out.println("删除学生:");
System.out.println("请输入学生ID:");
int delStudentId = sc.nextInt();
flag = false;
j = 0;
if (studentArrayList.size() > 0) {
for (Student i : studentArrayList) {
if (i.getStudentId() == delStudentId) {
flag = true;
studentArrayList.remove(j);
System.out.println("删除完成,返回主菜单");
}
j++;
}
}
if (flag) {
break;
} else {
System.out.println("没有发现该学生,返回主菜单");
break mainSwitch;
}
} catch (Exception e) {
System.out.println("无效输入,返回主菜单");
break ;
}
case "3":
try {
if (studentArrayList.size() == 0) {
System.out.println("目前表中没有学生,返回主菜单");
break;
}
System.out.println("修改学生:");
System.out.println("请输入学生ID:");
int altStudentId = sc.nextInt();
flag = false;
j = 0;
if (studentArrayList.size() > 0) {
for (Student i : studentArrayList) {
if (i.getStudentId() == altStudentId) {
flag = true;
loop2:
while (true) {
System.out.println("请输入需要修改的信息");
System.out.println("1:学生ID");
System.out.println("2:学生姓名");
System.out.println("3:学生年龄");
System.out.println("4:学生住址");
System.out.println("其他:返回主菜单");
subSwitch:
switch (sc.next()) {
case "1":
System.out.println("请输入更改后的id(数字):");
int secondStudentId = sc.nextInt();
if (studentArrayList.size() > 0) {
for (Student x : studentArrayList) {
if (x.getStudentId() == secondStudentId) {
System.out.println("ID重复,退回主菜单");
break mainSwitch;
}
}
}
studentArrayList.get(j).setStudentId(secondStudentId);
System.out.println("修改成功,返回主菜单");
break mainSwitch;
case "2":
System.out.println("请输入更改后的姓名:");
studentArrayList.get(j).setStudentName(sc.next());
System.out.println("修改成功,返回主菜单");
break mainSwitch;
case "3":
System.out.println("请输入更改后的年龄:");
studentArrayList.get(j).setStudentAge(sc.nextInt());
System.out.println("修改成功,返回主菜单");
break mainSwitch;
case "4":
System.out.println("请输入更改后的住址:");
studentArrayList.get(j).setFamilyAddress(sc.next());
System.out.println("修改成功,返回主菜单");
break mainSwitch;
default:
System.out.println("返回主菜单");
break mainSwitch;
}
}
}
j++;
}
}
if (flag) {
break;
} else {
System.out.println("没有发现该学生,返回主菜单");
break mainSwitch;
}}catch (Exception e) {
System.out.println("无效输入,返回主菜单");
break ;
}
case "4":
try{
if (studentArrayList.size() == 0) {
System.out.println("目前表中没有学生,返回主菜单");
break;
}
System.out.println("查询学生:");
System.out.println("输入学生ID,或输入0以查询全体学生");
flag = false;
int selectStudentId = sc.nextInt();
System.out.println("id\t\t姓名\t年龄\t家庭住址");
if (selectStudentId == 0) {
for (Student k : studentArrayList) {
System.out.println(String.format("%d\t\t%s\t%d\t\t%s", k.getStudentId(), k.getStudentName(), k.getStudentAge(), k.getFamilyAddress()));
}
System.out.println("输入任意键返回主菜单");
if (sc.next() != null) {
break mainSwitch;
}
} else {
for (Student k : studentArrayList) {
if (k.getStudentId() == selectStudentId) {
flag = true;
System.out.println(String.format("%d\t\t%s\t%d\t\t%s", k.getStudentId(), k.getStudentName(), k.getStudentAge(), k.getFamilyAddress()));
System.out.println("输入任意键返回主菜单");
if (sc.next() != null) {
break mainSwitch;
}
}
}
if (flag) {
break;
} else {
System.out.println("没有发现该学生,返回主菜单");
break mainSwitch;
}
}
break;
}catch (Exception e) {
System.out.println("无效输入,返回主菜单");
break ;
}
case "5":
System.out.println("退出至登陆界面:");
System.out.println("系统关闭后,所有数据将清除,确定退出请输入 1,返回主菜单请输入任意值");
if (sc.next().equals("1")) {
System.out.println("exit");
break loop;
} else {
System.out.println("back");
break;
}
default:
System.out.println("无效输入,返回主菜单");
break;
}
}
}
}
package com.itheima.StudentSystemDemo;
public class User {
private String userName;
private String passWord;
private String personNum;
private String phoneNum;
public User() {
this.userName = "default";
this.passWord = "123456";
this.personNum = "123456123456123456";
this.phoneNum = "12345678910";
}
public User(String userName, String passWord, String personNum, String phoneNum) {
this.userName = userName;
this.passWord = passWord;
this.personNum = personNum;
this.phoneNum = phoneNum;
}
public String getPersonNum() {
return personNum;
}
public void setPersonNum(String personNum) {
this.personNum = personNum;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
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;
}
}
package com.itheima.StudentSystemDemo;
import java.util.ArrayList;
import java.util.Scanner;
public class UserLogin {
public static void login() {
ArrayList<User> userArrayList = new ArrayList<>();
Scanner sc = new Scanner(System.in);
loop:
while (true) {
System.out.println("-----------欢迎来到学生管理系统------------");
System.out.println("请选择操作:\n1.登录 \n2.注册 \n3.忘记密码 \n4.退出 ");
System.out.println("请输入:");
boolean flag = false;//判断是否存在
int j = 0;//计数当前索引
mainSwitch:
switch (sc.next()) {
case "1":
if (userArrayList.size() == 0) {
System.out.println("尚未添加用户,请先注册");
break;
}
System.out.println("请输入用户名:");
String loginUserName = sc.next();
for (User i : userArrayList) {
if (loginUserName.equals(i.getUserName())) {
flag = true;
break;
}
j++;
}
if (flag) {
for (int i = 0; i < 3; i++) {
System.out.println("请输入密码:");
String loginUserPassword = sc.next();
while (true) {
System.out.println("请输入以下验证码,输入0则返回主菜单:");
VerifyCode trueLoginVerifyCode = new VerifyCode();
String trueCode = trueLoginVerifyCode.verify();
String loginVerifyCode = sc.next();
if (loginVerifyCode.equals("0")) {
break mainSwitch;
}
if (trueCode.equals(loginVerifyCode)) {
System.out.println("验证码正确");
break;
} else {
System.out.println("验证码错误");
}
}
if (userArrayList.get(j).getPassWord().equals(loginUserPassword)) {
System.out.println("登录成功");
StudentSystem studentSystem = new StudentSystem();
studentSystem.MainSystem();
break mainSwitch;
} else {
System.out.println("密码错误,还有" + (2 - i) + "次机会");
}
}
System.out.println("登录多次失败,返回主菜单");
}
System.out.println("该用户不存在,返回主菜单");
break;
case "2":
String newUserName = "";
String newPassWord = "";
String newPersonNum = "";
String newPhoneNum = "";
while (true) {
boolean invalidLengthFlag = false;
boolean allNum = false;
boolean specialChar = false;
int num = 0;
System.out.println("请输入想要使用的用户名:");
newUserName = sc.next();
if (newUserName.length() < 3 || newUserName.length() > 15) {
System.out.println("用户名长度需要在3-15之间");
invalidLengthFlag = true;
} else {
for (int i = 0; i < newUserName.length(); i++) {
char t = newUserName.charAt(i);
if (((t >= 'a') && (t <= 'z')) || ((t >= 'A') && (t <= 'Z')) || ((t >= '0') && (t <= '9'))) {
if ((t >= '0') && (t <= '9')) {
num++;
}
} else {
specialChar = true;
}
}
if (num == newUserName.length()) {
System.out.println("用户名不可以是纯数字");
allNum = true;
}
}
if (invalidLengthFlag || specialChar || allNum) {
if(specialChar) {
System.out.println("用户名只能包含英文大小写或数字");
}
System.out.println("输入0以重新键入用户名,输入其他则返回主菜单");
if (!sc.next().equals("0")) {
break mainSwitch;
}
} else {
break;
}
}
if (userArrayList.size() > 0) {
for (User i : userArrayList) {
if (i.getUserName().equals(newUserName)) {
System.out.println("用户名重复,退回主菜单");
break mainSwitch;
}
}
}
while (true) {
System.out.println("请输入密码:");
newPassWord = sc.next();
System.out.println("请再次输入密码:");
if (newPassWord.equals(sc.next())) {
break;
} else {
System.out.println("两次的输入不同,重试请按0,退出请按其他键");
if (!sc.next().equals("0")) {
break mainSwitch;
}
}
}
while (true) {
boolean invalidLengthFlag = false;
boolean specialCharin17 = false;
boolean spcialLastChar = false;
boolean zoreHead = false;
System.out.println("请输入身份证号:");
newPersonNum = sc.next();
if (newPersonNum.length() != 18) {
System.out.println("身份证号需要18位");
invalidLengthFlag = true;
} else {
if (newPersonNum.charAt(0) == '0') {
System.out.println("首位不能为0");
zoreHead = true;
} else {
for (int i = 0; i < newPersonNum.length() - 1; i++) {
char t = newPersonNum.charAt(i);
if ((t < '0') || (t > '9')) {
specialCharin17 = true;
break ;
}
}
char t = newPersonNum.charAt(newPersonNum.length() - 1);
if ((t == 'X') || (t == 'x') || ((t >= '0') && (t <= '9'))) {
} else {
System.out.println("最后一位只能是数字或者大小写X");
spcialLastChar = true;
}
}
}
if (invalidLengthFlag || spcialLastChar || specialCharin17 || zoreHead) {
if (specialCharin17) {
System.out.println("身份证号前17位只能为数字");
}
System.out.println("输入0以重新键入用户名,输入其他则返回主菜单");
if (!sc.next().equals("0")) {
break mainSwitch;
}
} else {
break;
}
}
while (true) {
boolean invalidLengthFlag = false;
boolean specialCharin11 = false;
boolean zoreHead = false;
System.out.println("请输入手机号:");
newPhoneNum = sc.next();
if (newPhoneNum.length() != 11) {
System.out.println("手机号要求11位");
invalidLengthFlag = true;
} else {
if (newPhoneNum.charAt(0) == '0') {
System.out.println("首位不能为0");
zoreHead = true;
} else {
for (int i = 0; i < newPhoneNum.length(); i++) {
char t = newPhoneNum.charAt(i);
if ((t < '0') || (t > '9')) {
specialCharin11 = true;
break ;
}
}
}
}
if (invalidLengthFlag || specialCharin11 || zoreHead) {
if (specialCharin11) {
System.out.println("手机号只能为数字");
}
System.out.println("输入0以重新键入手机号,输入其他则返回主菜单");
if (!sc.next().equals("0")) {
break mainSwitch;
}
} else {
break;
}
}
userArrayList.add(new User(newUserName, newPassWord, newPersonNum, newPhoneNum));
System.out.println("注册成功");
break;
case "3":
if (userArrayList.size() == 0) {
System.out.println("尚未注册用户,请先注册");
break;
} else {
System.out.println("请输入用户名:");
String forgetUserName = sc.next();
int k = 0;
for (User i : userArrayList) {
if (i.getUserName().equals(forgetUserName)) {
while (true) {
System.out.println("请输入身份证号:");
String forgetPersonNum = sc.next();
System.out.println("请输入手机号:");
String forgetPhoneNum = sc.next();
boolean truePersonNum = false;
boolean truePhoneNum = false;
if (userArrayList.get(k).getPersonNum().equals(forgetPersonNum)) {
truePersonNum = true;
} else {
System.out.println("身份证号不符合,请重新输入");
}
if (userArrayList.get(k).getPhoneNum().equals(forgetPhoneNum)) {
truePhoneNum = true;
}else {
System.out.println("手机号不符合,请重新输入");
}
if (truePersonNum && truePhoneNum) {
System.out.println("请输入新的密码:");
userArrayList.get(k).setPassWord(sc.next());
System.out.println("设置成功,返回主菜单");
break mainSwitch;
}
}
}
k++;
}
System.out.println("该用户尚未注册,返回主菜单");
}
break;
case "4":
System.out.println("退出:");
System.out.println("系统关闭后,所有数据将清除,确定退出请输入 1,返回主菜单请输入任意值");
if (sc.next().equals("1")) {
System.out.println("exit");
break loop;
} else {
System.out.println("back");
break;
}
default:
System.out.println("无效输入,返回登陆界面");
break;
}
}
}
}
package com.itheima.StudentSystemDemo;
import java.util.Random;
public class VerifyCode {
public static String verify() {
char[] verChar = new char[5];
for(int i = 0; i < 5; i++) {
Random radmChar = new Random();
int j = radmChar.nextInt(2);
if(j == 0){
verChar[i] = (char)('a' +radmChar.nextInt(26 ));
} else {
verChar[i] = (char)('A' +radmChar.nextInt(26 ));
}
}
Random radmChar = new Random();
verChar[radmChar.nextInt(5)] = (char)(radmChar.nextInt(10) + '0');
String str = new String(verChar);
System.out.println(str);
return str;
}
}
总结
不难但是类,写到凌晨4点,感觉回到了学生时代。
好熟悉又好陌生的学生管理系统,当时还是用C写的,后来JAVA+数据库写了一个。
纯JAVA写还是第一次。
各种逻辑总是出错,然后因为考虑各种地方的输入判定也花了很多时间。
当然我觉得让我写到这么晚最大的原因是IDEA噶了两次,直接给我倒档白花了几个小时。
渐渐熟悉起来吧,这速度肯定是太慢了。
好累,该休息了。
因为是很简单的项目就不写注释了,如果对这个项目有疑问或者改进建议可以评论区留言,谢谢。