这个是基于系统需求写的
【有道云笔记】学生管理系统升级版需求.md
https://note.youdao.com/s/EcEsKxO1
思路:首先定义了两个JavaBean类Student和User类,来封装学生和用户属性以及成员变量的方法,接着就是根据需求一个一个实现方法,我们在测试类里面一般才会用到静态方法。
这里再多说一点就是静态方法使用的另一个场景,用作工具类。定义工具类时,它是一个抽象的概念,我们不需要去创建对象,而且也不能,此时我们就会使用private的构造器,不允许外界来调用它生成实列对象。这时我们就会使用static修饰的静态方法,静态方法是与类一起同时加载的,可以通过类名直接调用。
public class Student {
private String id;
private String name;
private int age;
private String adrress;
public Student() {
}
public Student(String id, String name, int age, String adrress) {
this.id = id;
this.name = name;
this.age = age;
this.adrress = adrress;
}
public String getId() {
return id;
}
public void setId(String 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 getAdrress() {
return adrress;
}
public void setAdrress(String adrress) {
this.adrress = adrress;
}
}
public class User {
private String userName;
private String password;
private String idNumber;
private String phoneNumber;
public User() {
}
public User(String userName) {
this.userName = userName;
}
public User(String userName, String password, String idNumber, String phoneNumber) {
this.userName = userName;
this.password = password;
this.idNumber = idNumber;
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 getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
//登录用户之后的主界面
package studentsystemplus;
import studentsystem.Student;
import java.util.ArrayList;
import java.util.Scanner;
public class stusystem_copy {
private ArrayList<Student> list;
public stusystem_copy() {
}
public stusystem_copy(ArrayList<Student> list) {
this.list = list;
}
public ArrayList<Student> getList() {
return list;
}
public void setList(ArrayList<Student> list) {
this.list = list;
}
public void menu(stusystem_copy stusystemCopy){
Scanner sc=new Scanner(System.in);
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("请输入选择:");
/*字符串类型容错率更高,如果用户输成其他字符,不会报错*/
String choice=sc.next();
switch (choice){
case "1" -> stusystemCopy.addStudent(stusystemCopy.getList());
case "2" -> stusystemCopy.deleteStudent(stusystemCopy.getList());
case "3" -> stusystemCopy.modifyStudent(stusystemCopy.getList());
case "4" -> stusystemCopy.searchStudent(stusystemCopy.getList());
case "5"->System.exit(0);
default -> System.out.println("输入数据错误,请重新输入");
}
}
}
public void addStudent(ArrayList<Student> list){
Scanner sc=new Scanner(System.in);
String id;
while(true){
System.out.println("请输入学生id:");
id=sc.next();
if(contains(list,id)){
System.out.println("该id已存在,请重新输入id:");
}else{
break;
}
}
System.out.println("请输入学生姓名:");
String name=sc.next();
System.out.println("请输入学生年龄:");
int age=sc.nextInt();
System.out.println("请输入学生家庭地址:");
String address=sc.next();
Student student=new Student(id,name,age,address);
list.add(student);
System.out.println("添加成功");
}
public void deleteStudent(ArrayList<Student> list){
System.out.println("请输入要删除学生id");
Scanner sc=new Scanner(System.in);
String id=sc.next();
int index=getIndex(list,id);
if(index!=-1){
list.remove(index);
System.out.println("删除成功");
}else{
System.out.println("该学生不存在");
}
}
public void modifyStudent(ArrayList<Student> list){
System.out.println("请输入要修改学生的id:");
Scanner sc=new Scanner(System.in);
String id=sc.next();
int index=getIndex(list,id);
Student student;
if(index!=-1){
student=list.get(index);
System.out.println("请输入修改年龄");
int age=sc.nextInt();
student.setAge(age);
System.out.println("请输入修改家庭地址");
String address=sc.next();
student.setAdrress(address);
System.out.println("修改成功");
}else{
System.out.println("该学生不存在");
return;
}
}
public void searchStudent(ArrayList<Student> list){
if(list.isEmpty()){
System.out.println("当前无学生信息,请添加后再查询");
return;
}
System.out.println("id\t姓名\t年龄\t家庭住址");
for(Student student:list){
System.out.println(student.getId()+"\t"+student.getName()+"\t"
+student.getAge()+"\t"+student.getAdrress());
}
}
//判断集合中
public boolean contains(ArrayList<Student> list,String id){
return getIndex(list,id)>=0;
}
public int getIndex(ArrayList<Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student student=list.get(i);
if(student.getId().equals(id)){
return i;
}
}
return -1;
}
}
//登录界面,以及对登录时可能出现情况的判断
package studentsystemplus;
import studentsystem.Student;
import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StudentSystemPlus {
public static void main(String[] args) {
ArrayList<User> list=new ArrayList<>();
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择:操作1登录 操作2注册 操作3忘记密码");
String choice=sc.next();
switch (choice){
case "1"-> login(list);
case "2"-> enroll(list);
case "3"-> forgetPassWord(list);
case "4"-> System.exit(0);
default-> System.out.println("输入错误,请重新输入");
}
}
}
public static void enroll(ArrayList<User> list){
Scanner sc=new Scanner(System.in);
//1、用户名
String userName;
while(true){
System.out.println("请输入用户名");
userName=sc.next();
if(userName.length()>=3&&userName.length()<=15){
if(judge_NumberandLetter(userName)){
//判断用户名是否存在,若存在,那么重新输入
if(contains(list,userName)){
System.out.println("该用户名已存在,请重新输入");
}else{
break;
}
}else{
System.out.println("用户名只能由字母或字母和数字组合组成,请重新输入");
}
}else{
System.out.println("用户名过长或过短,请重新输入");
}
}
//2、密码的校验
String password;
while(true){
System.out.println("请输入密码");
password=sc.next();
System.out.println("第二次输入密码");
String pw=sc.next();
if(password.equals(pw)){
break;
}else{
System.out.println("前后两次密码不同,请重新输入密码");
}
}
//3、验证身份证号码
String idNumber;
while(true){
System.out.println("请输入身份证号码");
idNumber=sc.next();
if(checkIdNumber(idNumber)){
break;
}else{
System.out.println("身份证号码错误,请重新输入");
}
}
//4、手机号验证
String phoneNumber;
while(true){
System.out.println("请输入手机号码");
phoneNumber=sc.next();
if(checkPhoneNumber(phoneNumber)){
break;
}else{
System.out.println("手机号码错误,请重新输入");
}
}
User user=new User(userName,password,idNumber,phoneNumber);
list.add(user);
System.out.println("注册成功");
}
public static void login(ArrayList<User> list){
Scanner sc=new Scanner(System.in);
System.out.println("用户名");
String userName=sc.next();
if(!contains(list,userName)){
System.out.println("用户名未注册,请先注册");
return;
}
String password;
for (int i = 0; i < 3; i++) {
System.out.println("密码");
password=sc.next();
int index=getIndex(list,userName);
if(list.get(index).getPassword().equals(password)){
while(true){
String aimCaptcha=getCaptcha();
System.out.println(aimCaptcha);
System.out.println("请输入验证码");
String captcha=sc.next();
if(aimCaptcha.equals(captcha)){
break;
}else{
System.out.println("验证码错误,请重新输入");
}
}
System.out.println("登录成功");
ArrayList<Student> studentArrayList=new ArrayList<>();
stusystem_copy stusystemCopy=new stusystem_copy(studentArrayList);
stusystemCopy.menu(stusystemCopy);
}else{
if(i==2){
System.out.println("该账号已被锁定,请通过验证修改密码");
}else{
System.out.println("还有"+(2-i)+"次机会");
}
}
}
}
public static void forgetPassWord(ArrayList<User> list){
System.out.println("请输入用户名");
Scanner sc=new Scanner(System.in);
String userName=sc.next();
if(contains(list,userName)){
System.out.println("身份证号码");
String idNumber=sc.next();
System.out.println("手机号码");
String phoneNumber=sc.next();
for(User user:list){
if(user.getIdNumber().equals(idNumber)&&user.getPhoneNumber().equals(phoneNumber)){
System.out.println("请输入密码");
String newPassWord=sc.next();
user.setPassword(newPassWord);
System.out.println("修改密码成功");
return;
}
}
System.out.println("账号信息不匹配,修改失败");
}else{
System.out.println("未注册");
return;
}
}
public static boolean contains(ArrayList<User> list,String userName){
return getIndex(list,userName)>=0;
}
public static boolean judge_NumberandLetter(String userName){
boolean flag=true;
int numCount=0;
int letterCount=0;
for (int i = 0; i < userName.length(); i++) {
char ch=userName.charAt(i);
if(ch>='0'&&ch<='9'){
numCount++;
}
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
letterCount++;
}
}
if(letterCount+numCount<userName.length()||numCount==userName.length()){
flag=false;
}
return flag;
}
public static boolean checkIdNumber(String idNumber){
if(idNumber.length()!=18){
return false;
}else{
for (int i = 0; i < idNumber.length()-1; i++) {
if(!(idNumber.charAt(i)>='0'&&idNumber.charAt(i)<='9')){
return false;
}
}
if(idNumber.charAt(0)=='0'){
return false;
}
String str=idNumber.substring(idNumber.length()-1);
return (str.charAt(0) >= '0' && str.charAt(0) <= '9') || str.equalsIgnoreCase("x");
}
}
public static boolean checkPhoneNumber(String phoneNumber){
if(phoneNumber.length()!=11){
return false;
}else{
for (int i = 0; i < phoneNumber.length(); i++) {
char ch=phoneNumber.charAt(i);
if(!(ch>='0'&&ch<='9')){
return false;
}
}
return phoneNumber.charAt(0)!='0';
}
}
public static String getCaptcha(){
int length=5;
char[] chs=new char[52];
for (int i = 0; i < chs.length; i++) {
if(i<=25){
chs[i]=(char)('A'+i);
}else{
chs[i]=(char)('A'+32+i-26);
}
}
Random r=new Random();
StringBuilder sb=new StringBuilder();
for (int i = 0; i < length-1; i++) {
sb.append(chs[r.nextInt(52)]);
}
char ch=(char)(r.nextInt(10)+'0');
sb.insert(r.nextInt(5),ch);
return sb.toString();
}
public static int getIndex(ArrayList<User> list,String userName){
for (int i = 0; i < list.size(); i++) {
User user=list.get(i);
if(user.getUserName().equals(userName)){
return i;
}
}
return -1;
}
}
上述整体是一个使用控制台来模仿登录界面的代码。
收获与反思:在写代码量较大的小项目时,一定是写一个功能测试一个,保证代码的完整性和健壮性。