目錄
一、學生管理系統(tǒng):
1.創(chuàng)建學生對象Student的javabean類:
2.創(chuàng)建出學生管理系統(tǒng)?StudentSystem類:
1.addStudent方法:添加學生
2.ifOne方法,用來判斷我們輸入的學生id是否唯一(如果存在學生就不用再添加此學生):
3.queryStudent方法,把我們表中的所有學生顯示出來
4.getIndex()如果想修改或者刪除特定的學生,先獲取要獲取學生的索引
5.deletStudent()刪除指定學生:
6.updateStudent()修改指定學生
二、注冊系統(tǒng)
1.首先創(chuàng)建出User的javabean類
2.注冊功能
?2.contains()檢查用戶名是否存在:
?2.登錄功能
1.驗證碼生成的實現(xiàn),getcode()
2.checkUserInfo()檢查學生的信息是否正確
3.忘記密碼功能
?文章來源地址http://www.zghlxwxcb.cn/news/detail-503874.html
一、學生管理系統(tǒng):
1.創(chuàng)建學生對象Student的javabean類:
public class Student {
private String name;
private int id;
private String sex;
private String adress;
public Student() {
}
public Student(String name, int id, String sex, String adress) {
this.name = name;
this.id = id;
this.sex = sex;
this.adress = adress;
}
/**
* 獲取
* @return name
*/
public String getName() {
return name;
}
/**
* 設置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 獲取
* @return id
*/
public int getId() {
return id;
}
/**
* 設置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 獲取
* @return sex
*/
public String getSex() {
return sex;
}
/**
* 設置
* @param sex
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* 獲取
* @return adress
*/
public String getAdress() {
return adress;
}
/**
* 設置
* @param adress
*/
public void setAdress(String adress) {
this.adress = adress;
}
public String toString() {
return "Student{name = " + name + ", id = " + id + ", sex = " + sex + ", adress = " + adress + "}";
}
}
2.創(chuàng)建出學生管理系統(tǒng)?StudentSystem類:
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public void StartSystem() {
ArrayList<Student> list = new ArrayList<>();
while (true) {
System.out.println("-------歡迎來到學生管理系統(tǒng)-------");
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 choose = sc.next();
switch (choose) {
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);
break;
}
default:
System.out.println("沒有這個選項");
}
}
}
此處還是使用最基礎的switch-case進行不同功能的選擇,并且此處的儲存學生對象的容器選擇用Arraylist容器進行書寫,此處也可以用Student[]數(shù)組進行儲存Student的對象?。?
1.addStudent方法:添加學生
public static void addStudent(ArrayList<Student> list){//此處傳入我們所創(chuàng)建出來的容器list Student s = new Student(); Scanner sc = new Scanner(System.in); System.out.println("請輸入學生的id"); int id = 0; while(true) { id = sc.nextInt(); boolean flag = ifOne(list, id);//學生對象是否唯一,用ifOne()方法進行判斷 if (flag) { System.out.println("id已經(jīng)存在請重新錄入"); }else{ s.setId(id); break; } } System.out.println("請輸入學生的姓名"); String name = sc.next(); s.setName(name); System.out.println("請輸入學生的性別"); String sex = sc.next(); s.setSex(sex); System.out.println("請輸入學生的家庭住址"); String adress = sc.next(); s.setAdress(adress); list.add(s); System.out.println("添加成功"); }
2.ifOne方法,用來判斷我們輸入的學生id是否唯一(如果存在學生就不用再添加此學生):
public static boolean ifOne(ArrayList<Student> list,int id){ for (int i = 0; i < list.size(); i++) { Student s = list.get(i); int sid = s.getId(); if(sid==id){ return true; } } return false; }
3.queryStudent方法,把我們表中的所有學生顯示出來
public static void queryStudent(ArrayList<Student> list){ if(list.size()==0){ System.out.println("當前無學生信息,請?zhí)砑雍蟛樵?); return; } System.out.println("id\t\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.getSex()+"\t"+stu.getAdress()); } }
4.getIndex()如果想修改或者刪除特定的學生,先獲取要獲取學生的索引
public static int getIndex(ArrayList<Student> list,int id){ for (int i = 0; i < list.size(); i++) { Student stu = list.get(i); int sid = stu.getId(); if (sid==id) { return i; } } return -1; } }
這里我們通過id來獲取我們所需要要的索引
5.deletStudent()刪除指定學生:
public static void deleteStudent(ArrayList<Student> list){ Scanner sc = new Scanner(System.in); System.out.println("請輸入您要刪除的學生的id"); int id = sc.nextInt(); int index = getIndex(list,id);//我們通過getIndex方法來獲取所需要刪除的下標 //直接刪除:remove list.remove(index); }
6.updateStudent()修改指定學生
public static void updateStudent(ArrayList<Student> list){ Scanner sc = new Scanner(System.in); System.out.println("請輸入您要修改的學生的id"); int id = sc.nextInt(); //再次獲取下標 int index = getIndex(list,id); //開始修改學生的信息 System.out.println("請輸入學生姓名"); list.get(index).setName(sc.next()); System.out.println("請輸入學生id"); list.get(index).setId(sc.nextInt()); System.out.println("請輸入學生性別"); list.get(index).setSex(sc.next()); System.out.println("請輸入學生地址"); list.get(index).setAdress(sc.next()); System.out.println("修改成功"); }
學生管理系統(tǒng)制作完畢,接下來可以制作管理系統(tǒng)的登錄系統(tǒng)。如果只需要學生管理系統(tǒng),可以把?StudentSystem類中的的startSystem方法改成main方法,可以直接運行學生管理系統(tǒng)。
二、注冊系統(tǒng)
1.首先創(chuàng)建出User的javabean類
package StudentManagerSys;
public class User {
private String userName;
private String passWord;
private String personId;
private String phoneNumber;
public User() {}
public User(String userName, String passWord, String personId, String phoneNumber) {
this.userName = userName;
this.passWord = passWord;
this.personId = personId;
this.phoneNumber = phoneNumber;
}
/**
* 獲取
* @return userName
*/
public String getUserName() {
return userName;
}
/**
* 設置
* @param userName
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* 獲取
* @return passWord
*/
public String getPassWord() {
return passWord;
}
/**
* 設置
* @param passWord
*/
public void setPassWord(String passWord) {
this.passWord = passWord;
}
/**
* 獲取
* @return personId
*/
public String getPersonId() {
return personId;
}
/**
* 設置
* @param personId
*/
public void setPersonId(String personId) {
this.personId = personId;
}
/**
* 獲取
* @return phoneNumber
*/
public String getPhoneNumber() {
return phoneNumber;
}
/**
* 設置
* @param phoneNumber
*/
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String toString() {
return "User{userName = " + userName + ", passWord = " + passWord + ", personId = " + personId + ", phoneNumber = " + phoneNumber + "}";
}
}
2.注冊功能
注冊所需要的具體要求:
1.用戶名有以下要求:
? 驗證要求:
?? ?用戶名唯一。
?? ?用戶名長度必須在3-15位之間。
?? ?只能是字母加數(shù)字的組合,不能是純數(shù)字。
2.鍵盤輸入兩次,兩次一致可以注冊。
3.身份證號碼需要驗證。
? ? ?驗證要求:
?? ?長度為18位。
?? ?不能以0開頭。
?? ?前17位必須是數(shù)字。
?? ?最后一位可以是數(shù)字也可以是大寫X或小寫x
4.手機號驗證:
?? ?驗證要求:
?? ??? ?長度為11位
?? ??? ?不能以0開頭
?? ??? ?必須是純數(shù)字
private static void register(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
String username;
while (true) {
System.out.println("請輸入用戶名");
username = sc.next();
// 用戶名唯一。
// 用戶名長度必須在3-15位之間。
// 只能是字母加數(shù)字的組合,不能是純數(shù)字。
boolean flag = checkUsername (username);
if(!flag) {
System.out.println("用戶名格式不滿足請重新輸入");
continue;
}
//校驗用戶名是否唯一
boolean flag1 = contains(list,username);
if(flag1){
System.out.println("用戶名"+username+"重復,請重新輸入");
continue;
}else
break;
}
//鍵盤錄入密碼
//兩次輸入的密碼一致可成功注冊
String password;
while (true) {
System.out.println("請輸入要注冊的密碼");
password = sc.next();
System.out.println("請再輸入一遍您的密碼");
String aginPassword = sc.next();
if(!password.equals(aginPassword)){
System.out.println("兩次密碼輸入不一致,請重新輸入");
continue;
}else{
System.out.println("兩次密碼一致,繼續(xù)錄入");
break;
}
}
//鍵盤錄入身份證號碼
// 長度為18位。
// 不能以0開頭。
// 前17位必須是數(shù)字。
// 最后一位可以是數(shù)字也可以是大寫X或小寫x
String personId;
while (true) {
System.out.println("請輸入身份證號碼");
personId = sc.next();
boolean flag2 = checkPersonId(personId);
if(flag2){
System.out.println("身份證號碼滿足要求");
break;
}else{
System.out.println("請重新輸入");
continue;
}
}
//鍵盤錄入手機號碼
// 驗證要求:
// 長度為11位
// 不能以0開頭
// 必須是純數(shù)字
String phoneNumber;
while (true) {
System.out.println("請輸入手機號碼");
phoneNumber = sc.next();
boolean flag3 = checkPhonenumber(phoneNumber);
if(flag3){
System.out.println("手機號滿足要求");
break;
}else{
System.out.println("不滿足要求,請重新輸入");
continue;
}
}
User u = new User(username,password,personId,phoneNumber);
list.add(u);
System.out.println("注冊成功");
}
1.checkUsername():檢查用戶名是否符合要求
private static boolean checkUsername(String username) {
int length = username.length();
if(length<3||length>15){
return false;
}
//只能是字母加數(shù)字的組合,不能是純數(shù)字
//循環(huán)得到每一個字符,如果有一個不是字母或者數(shù)字,return false
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if(!((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c>='0'&&c<='9'))) {
return false;
}
}
//用戶名滿足長度內(nèi)容滿足要求
//統(tǒng)計再用戶名中有多少個字母
int cnt = 0;
for (int i = 0; i <length; i++) {
char c = username.charAt(i);
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) {
cnt++;
break;
}
}
return cnt>0;
}
?2.contains()檢查用戶名是否存在:
private static boolean contains(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getUserName().equals(username)){
return true;
}
}
return false;
}
3.checkPersonId()檢查身份證號是否符合要求:
private static boolean checkPersonId(String personId) {
int length = personId.length();
//不是0開頭,并且18位
if(length!=18||personId.charAt(0)==0){
return false;
}
//判斷前十七位
for (int i = 0; i < personId.length()-1; i++) {
if(!(personId.charAt(i)>='0'&&personId.charAt(i)<='9'))
{
return false;
}
}
if(!((personId.charAt(length-1)>='0'&&personId.charAt(length-1)<='9')||(personId.charAt(length-1)=='X'||personId.charAt(length-1)=='x')))
{
return false;
}
return true;
}
4.checkPhoneNumber()檢查手機號是否符合要求:
private static boolean checkPhonenumber(String phoneNumber) {
int length = phoneNumber.length();
//不是0開頭,并且18位
if(length!=11||phoneNumber.charAt(0)==0){
return false;
}
for (int i = 0; i < phoneNumber.length(); i++) {
if(!(phoneNumber.charAt(i)>='0'&&phoneNumber.charAt(i)<='9'))
{
return false;
}
}
return true;
}
?2.登錄功能
1.鍵盤錄入用戶名
?? ?2.鍵盤錄入密碼
?? ?3.鍵盤錄入驗證碼
? ? 驗證要求
?? ?用戶名如果未注冊,直接結(jié)束方法,并提示:用戶名未注冊,請先注冊
?? ?判斷驗證碼是否正確,如果不正確,請重新輸入。
?? ?再判斷用戶名和密碼是否正確,有3次機會
? ? 忘記密碼
?? ?1.鍵盤錄入用戶名,判斷當前用戶名是否存在,如果不存在,直接結(jié)束,提示:未注冊
?? ?2.鍵盤錄入身份證號碼和手機號碼
?? ?3.判斷當前用戶的身份證號碼和手機號碼是否一致。
?? ??? ?如果一致,提示輸入密碼,進行修改
?? ??? ?如果不一致,賬號信息不匹配,修改失敗
?? ?驗證碼規(guī)則:
?? ??? ?長度為5
?? ??? ?由4位大寫或者小寫字母和1位數(shù)字組成,同一個字母可重復。
?? ??? ?數(shù)字可以出現(xiàn)在任何位置
?? ? 比如
?? ??? ?aQa1k1
private static void login(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("請輸入用戶名");
String username = sc.next();
boolean flag = contains(list, username);
if (!flag) {
System.out.println("用戶名" + username + "未注冊,請先注冊再登錄");
return;
}
System.out.println("請輸入密碼");
String password = sc.next();
while (true) {
String rightcode = getCode();
System.out.println("當前正確的驗證碼為" + rightcode);
System.out.println("請輸入驗證碼");
String code = sc.next();
if (code.equalsIgnoreCase(rightcode)) {
System.out.println("驗證碼正確");
break;
} else {
System.out.println("驗證碼錯誤");
continue;
}
}
//驗證用戶名密碼是否正確
//封裝思想,把一些零散的數(shù)據(jù),封裝成一個對象
//傳遞一個整體,不用傳零散的數(shù)據(jù)
User userInfo = new User(username, password, null, null);
boolean flag1 = checkUserInfo(list, userInfo);
if (flag1) {
System.out.println("登錄成功,可以開始使用學生管理系統(tǒng)");
StudentSystem ss = new StudentSystem();
ss.StartSystem();
} else {
if(i==2) {
System.out.println("當前賬號"+username+"被鎖定,請聯(lián)系客服人員");
return;
}else{
System.out.println("用戶名或密碼錯誤,還剩下"+(2-i)+"次機會");
}
}
}
}
?總共有三次登陸的機會,機會用完退出程序:用for循環(huán)控制。
切記不能把getcode重復使用,這樣會與前面的rightCode不一致,導致驗證碼無論如何都是錯誤的,寫成上方的形式
while (true) { String rightcode = getCode(); System.out.println("當前正確的驗證碼為" + getCode()); System.out.println("請輸入驗證碼"); String code = sc.next(); if (code.equalsIgnoreCase(rightcode)) { System.out.println("驗證碼正確"); break; } else { System.out.println("驗證碼錯誤"); continue; } }
1.驗證碼生成的實現(xiàn),getcode()
private static String getCode(){
ArrayList<Character> list=new ArrayList<>();
for (int i = 0; i < 26; i++) {
list.add((char)('a'+i));//小寫
list.add((char)('A'+i));//大寫
}
StringBuilder sb = new StringBuilder();
Random r = new Random();
for (int i = 0; i < 4; i++) {
int index = r.nextInt(list.size());
char c = list.get(index);
sb.append(c);
}
int number = r.nextInt(10);
sb.append(number);
char[] arr = sb.toString().toCharArray();
int randomIndex = r.nextInt(arr.length);
char temp = arr[randomIndex];
arr[randomIndex] = arr[arr.length-1];
arr[arr.length-1] = temp;
return new String(arr);
}
}
先用Arraylist容器把所有的字母大小寫存入list中,再通過StringBuilder將字母重新排序,單獨的數(shù)字在進行交換,最后獲得驗證碼字符串。
2.checkUserInfo()檢查學生的信息是否正確
private static boolean checkUserInfo(ArrayList<User> list,User userInfo) {
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getUserName().equals(userInfo.getUserName())&&list.get(i).getPassWord().equals(userInfo.getPassWord())){
return true;
}
}
return false;
}
登錄成功就可以創(chuàng)建StudentSystem對象,調(diào)用startSystem方法,啟動學生管理系統(tǒng)了??!
3.忘記密碼功能
三、忘記密碼
?? ?1.鍵盤錄入用戶名,判斷當前用戶名是否存在,如果不存在,直接結(jié)束方法,并提示未注冊。
?? ?2.鍵盤錄入身份證號和手機號碼
?? ?3.判斷當前用戶的身份證號和手機號是否一致。
?? ??? ?如果一致,提示輸入密碼,進行修改
?? ??? ?如果不一致,提示:賬號信息不匹配,修改失敗
private static void forgetpassword(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入用戶名");
String username = sc.next();
boolean flag = contains(list,username);
if (!flag){
System.out.println("當前用戶"+username+"未注冊,請先注冊");
return;
}
//鍵盤錄入身份證號碼和手機號碼
System.out.println("請輸入身份證號碼");
String personId = sc.next();
System.out.println("請輸入手機號碼");
String phoneNumber = sc.next();
//判斷是否和用戶對象中的身份證號碼和手機號碼是否相同
//用戶對象通過索引獲取出來
int index = findIndex(list,username);
User user = list.get(index);
if(!(user.getPersonId().equalsIgnoreCase(personId)&&user.getPhoneNumber().equals(phoneNumber))){
System.out.println("身份證號或手機號輸入不正確");
return;
}
//所有的數(shù)據(jù)驗證成功,直接修改
String passWord;
while (true) {
System.out.println("請輸入新的密碼");
passWord =sc.next();
System.out.println("請重新輸入一遍");
String aginPassword = sc.next();
if(passWord.equals(aginPassword)){
System.out.println("兩次密碼輸入一致");
break;
}else{
System.out.println("輸入不一致");
continue;
}
}
user.setPassWord(passWord);
System.out.println("密碼修改成功!");
}
完整的代碼:
Student類javabean類:
package StudentManagerSys;
public class Student {
private String name;
private int id;
private String sex;
private String adress;
public Student() {
}
public Student(String name, int id, String sex, String adress) {
this.name = name;
this.id = id;
this.sex = sex;
this.adress = adress;
}
/**
* 獲取
* @return name
*/
public String getName() {
return name;
}
/**
* 設置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 獲取
* @return id
*/
public int getId() {
return id;
}
/**
* 設置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 獲取
* @return sex
*/
public String getSex() {
return sex;
}
/**
* 設置
* @param sex
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* 獲取
* @return adress
*/
public String getAdress() {
return adress;
}
/**
* 設置
* @param adress
*/
public void setAdress(String adress) {
this.adress = adress;
}
public String toString() {
return "Student{name = " + name + ", id = " + id + ", sex = " + sex + ", adress = " + adress + "}";
}
}
User類的javabean類:
package StudentManagerSys;
public class User {
private String userName;
private String passWord;
private String personId;
private String phoneNumber;
public User() {}
public User(String userName, String passWord, String personId, String phoneNumber) {
this.userName = userName;
this.passWord = passWord;
this.personId = personId;
this.phoneNumber = phoneNumber;
}
/**
* 獲取
* @return userName
*/
public String getUserName() {
return userName;
}
/**
* 設置
* @param userName
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* 獲取
* @return passWord
*/
public String getPassWord() {
return passWord;
}
/**
* 設置
* @param passWord
*/
public void setPassWord(String passWord) {
this.passWord = passWord;
}
/**
* 獲取
* @return personId
*/
public String getPersonId() {
return personId;
}
/**
* 設置
* @param personId
*/
public void setPersonId(String personId) {
this.personId = personId;
}
/**
* 獲取
* @return phoneNumber
*/
public String getPhoneNumber() {
return phoneNumber;
}
/**
* 設置
* @param phoneNumber
*/
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String toString() {
return "User{userName = " + userName + ", passWord = " + passWord + ", personId = " + personId + ", phoneNumber = " + phoneNumber + "}";
}
}
StudentSystem類:
package StudentManagerSys;
import java.util.ArrayList;
import java.util.Scanner;
public class StudentSystem {
public void StartSystem() {
ArrayList<Student> list = new ArrayList<>();
while (true) {
System.out.println("-------歡迎來到學生管理系統(tǒng)-------");
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 choose = sc.next();
switch (choose) {
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);
break;
}
default:
System.out.println("沒有這個選項");
}
}
}
//添加學生
public static void addStudent(ArrayList<Student> list){
Student s = new Student();
Scanner sc = new Scanner(System.in);
System.out.println("請輸入學生的id");
int id = 0;
while(true) {
id = sc.nextInt();
boolean flag = ifOne(list, id);
if (flag) {
System.out.println("id已經(jīng)存在請重新錄入");
}else{
s.setId(id);
break;
}
}
System.out.println("請輸入學生的姓名");
String name = sc.next();
s.setName(name);
System.out.println("請輸入學生的性別");
String sex = sc.next();
s.setSex(sex);
System.out.println("請輸入學生的家庭住址");
String adress = sc.next();
s.setAdress(adress);
list.add(s);
System.out.println("添加成功");
}
public static void deleteStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("請輸入您要刪除的學生的id");
int id = sc.nextInt();
int index = getIndex(list,id);//我們通過getIndex方法來獲取所需要刪除的下標
//直接刪除:remove
list.remove(index);
System.out.println("刪除成功");
}
public static void updateStudent(ArrayList<Student> list){
Scanner sc = new Scanner(System.in);
System.out.println("請輸入您要修改的學生的id");
int id = sc.nextInt();
//再次獲取下標
int index = getIndex(list,id);
//開始修改學生的信息
System.out.println("請輸入學生姓名");
list.get(index).setName(sc.next());
System.out.println("請輸入學生id");
list.get(index).setId(sc.nextInt());
System.out.println("請輸入學生性別");
list.get(index).setSex(sc.next());
System.out.println("請輸入學生地址");
list.get(index).setAdress(sc.next());
System.out.println("修改成功");
}
//查詢學生
public static void queryStudent(ArrayList<Student> list){
if(list.size()==0){
System.out.println("當前無學生信息,請?zhí)砑雍蟛樵?);
return;
}
System.out.println("id\t\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.getSex()+"\t"+stu.getAdress());
}
}
public static boolean ifOne(ArrayList<Student> list,int id){
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
int sid = s.getId();
if(sid==id){
return true;
}
}
return false;
}
public static int getIndex(ArrayList<Student> list,int id){
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
int sid = stu.getId();
if (sid==id) {
return i;
}
}
return -1;
}
}
App類:
package StudentManagerSys;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<User> list = new ArrayList<>();
while (true) {
System.out.println("歡迎來到學生管理系統(tǒng)");
System.out.println("請選擇:1登錄 2.注冊 3.忘記密碼");
String choose = sc.next();
switch(choose){
case "1":
login(list);
break;
case "2":
register(list);
break;
case "3":
forgetpassword(list);
break;
case "4": {
System.out.println("感謝使用");
System.exit(0);
}
default:
System.out.println("沒有此選項");
break;
}
}
}
private static void forgetpassword(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入用戶名");
String username = sc.next();
boolean flag = contains(list,username);
if (!flag){
System.out.println("當前用戶"+username+"未注冊,請先注冊");
return;
}
//鍵盤錄入身份證號碼和手機號碼
System.out.println("請輸入身份證號碼");
String personId = sc.next();
System.out.println("請輸入手機號碼");
String phoneNumber = sc.next();
//判斷是否和用戶對象中的身份證號碼和手機號碼是否相同
//用戶對象通過索引獲取出來
int index = findIndex(list,username);
User user = list.get(index);
if(!(user.getPersonId().equalsIgnoreCase(personId)&&user.getPhoneNumber().equals(phoneNumber))){
System.out.println("身份證號或手機號輸入不正確");
return;
}
//所有的數(shù)據(jù)驗證成功,直接修改
String passWord;
while (true) {
System.out.println("請輸入新的密碼");
passWord =sc.next();
System.out.println("請重新輸入一遍");
String aginPassword = sc.next();
if(passWord.equals(aginPassword)){
System.out.println("兩次密碼輸入一致");
break;
}else{
System.out.println("輸入不一致");
continue;
}
}
user.setPassWord(passWord);
System.out.println("密碼修改成功!");
}
private static int findIndex(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
User u = list.get(i);
if(u.getUserName().equals(username)){
return i;
}
}
return -1;
}
private static void register(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
String username;
while (true) {
System.out.println("請輸入用戶名");
username = sc.next();
// 用戶名唯一。
// 用戶名長度必須在3-15位之間。
// 只能是字母加數(shù)字的組合,不能是純數(shù)字。
boolean flag = checkUsername (username);
if(!flag) {
System.out.println("用戶名格式不滿足請重新輸入");
continue;
}
//校驗用戶名是否唯一
boolean flag1 = contains(list,username);
if(flag1){
System.out.println("用戶名"+username+"重復,請重新輸入");
continue;
}else
break;
}
//鍵盤錄入密碼
//兩次輸入的密碼一致可成功注冊
String password;
while (true) {
System.out.println("請輸入要注冊的密碼");
password = sc.next();
System.out.println("請再輸入一遍您的密碼");
String aginPassword = sc.next();
if(!password.equals(aginPassword)){
System.out.println("兩次密碼輸入不一致,請重新輸入");
continue;
}else{
System.out.println("兩次密碼一致,繼續(xù)錄入");
break;
}
}
//鍵盤錄入身份證號碼
// 長度為18位。
// 不能以0開頭。
// 前17位必須是數(shù)字。
// 最后一位可以是數(shù)字也可以是大寫X或小寫x
String personId;
while (true) {
System.out.println("請輸入身份證號碼");
personId = sc.next();
boolean flag2 = checkPersonId(personId);
if(flag2){
System.out.println("身份證號碼滿足要求");
break;
}else{
System.out.println("請重新輸入");
continue;
}
}
//鍵盤錄入手機號碼
// 驗證要求:
// 長度為11位
// 不能以0開頭
// 必須是純數(shù)字
String phoneNumber;
while (true) {
System.out.println("請輸入手機號碼");
phoneNumber = sc.next();
boolean flag3 = checkPhonenumber(phoneNumber);
if(flag3){
System.out.println("手機號滿足要求");
break;
}else{
System.out.println("不滿足要求,請重新輸入");
continue;
}
}
User u = new User(username,password,personId,phoneNumber);
list.add(u);
System.out.println("注冊成功");
}
private static boolean checkPhonenumber(String phoneNumber) {
int length = phoneNumber.length();
//不是0開頭,并且18位
if(length!=11||phoneNumber.charAt(0)==0){
return false;
}
for (int i = 0; i < phoneNumber.length(); i++) {
if(!(phoneNumber.charAt(i)>='0'&&phoneNumber.charAt(i)<='9'))
{
return false;
}
}
return true;
}
private static boolean checkPersonId(String personId) {
int length = personId.length();
//不是0開頭,并且18位
if(length!=18||personId.charAt(0)==0){
return false;
}
//判斷前十七位
for (int i = 0; i < personId.length()-1; i++) {
if(!(personId.charAt(i)>='0'&&personId.charAt(i)<='9'))
{
return false;
}
}
if(!((personId.charAt(length-1)>='0'&&personId.charAt(length-1)<='9')||(personId.charAt(length-1)=='X'||personId.charAt(length-1)=='x')))
{
return false;
}
return true;
}
private static boolean contains(ArrayList<User> list, String username) {
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getUserName().equals(username)){
return true;
}
}
return false;
}
//判斷用戶名是否符合要求
private static boolean checkUsername(String username) {
int length = username.length();
if(length<3||length>15){
return false;
}
//只能是字母加數(shù)字的組合,不能是純數(shù)字
//循環(huán)得到每一個字符,如果有一個不是字母或者數(shù)字,return false
for (int i = 0; i < username.length(); i++) {
char c = username.charAt(i);
if(!((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c>='0'&&c<='9'))) {
return false;
}
}
//用戶名滿足長度內(nèi)容滿足要求
//統(tǒng)計再用戶名中有多少個字母
int cnt = 0;
for (int i = 0; i <length; i++) {
char c = username.charAt(i);
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) {
cnt++;
break;
}
}
return cnt>0;
}
private static void login(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("請輸入用戶名");
String username = sc.next();
boolean flag = contains(list, username);
if (!flag) {
System.out.println("用戶名" + username + "未注冊,請先注冊再登錄");
return;
}
System.out.println("請輸入密碼");
String password = sc.next();
while (true) {
String rightcode = getCode();
System.out.println("當前正確的驗證碼為" + rightcode);
System.out.println("請輸入驗證碼");
String code = sc.next();
if (code.equalsIgnoreCase(rightcode)) {
System.out.println("驗證碼正確");
break;
} else {
System.out.println("驗證碼錯誤");
continue;
}
}
//驗證用戶名密碼是否正確
//封裝思想,把一些零散的數(shù)據(jù),封裝成一個對象
//傳遞一個整體,不用傳零散的數(shù)據(jù)
User userInfo = new User(username, password, null, null);
boolean flag1 = checkUserInfo(list, userInfo);
if (flag1) {
System.out.println("登錄成功,可以開始使用學生管理系統(tǒng)");
StudentSystem ss = new StudentSystem();
ss.StartSystem();
} else {
if(i==2) {
System.out.println("當前賬號"+username+"被鎖定,請聯(lián)系客服人員");
return;
}else{
System.out.println("用戶名或密碼錯誤,還剩下"+(2-i)+"次機會");
}
}
}
}
private static boolean checkUserInfo(ArrayList<User> list,User userInfo) {
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getUserName().equals(userInfo.getUserName())&&list.get(i).getPassWord().equals(userInfo.getPassWord())){
return true;
}
}
return false;
}
//生成一個驗證碼
// 驗證碼規(guī)則:
// 長度為5
// 由4位大寫或者小寫字母和1位數(shù)字組成,同一個字母可重復。
// 數(shù)字可以出現(xiàn)在任何位置
private static String getCode(){
ArrayList<Character> list=new ArrayList<>();
for (int i = 0; i < 26; i++) {
list.add((char)('a'+i));//小寫
list.add((char)('A'+i));//大寫
}
StringBuilder sb = new StringBuilder();
Random r = new Random();
for (int i = 0; i < 4; i++) {
int index = r.nextInt(list.size());
char c = list.get(index);
sb.append(c);
}
int number = r.nextInt(10);
sb.append(number);
char[] arr = sb.toString().toCharArray();
int randomIndex = r.nextInt(arr.length);
char temp = arr[randomIndex];
arr[randomIndex] = arr[arr.length-1];
arr[arr.length-1] = temp;
return new String(arr);
}
}
有幫助的話,大家可以點個贊鼓勵一下,這也是我的第一個博客
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??文章來源:http://www.zghlxwxcb.cn/news/detail-503874.html
?
到了這里,關(guān)于用JAVA實現(xiàn)一個學生管理系統(tǒng)和登錄系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!