我的学生管理系统已经写好了,可是总感觉少点东西怎么办,诶,登录界面他来了!本来以为昨天一个晚自习就能写完,没想到又多写了一个晚自习,虽然说不难,但真的好繁琐。
登录界面由三个功能组成
注册
登录
忘记密码
既然功能不同,输入1,2,3对应到不同的值,那就要搬出我那万能的switch了!
把不同的选项对应不同的函数。
如果有什么差错我还要重新开始一遍选择的过程,所以在switch上套一个名为log的while也是理所应当的了
log:
while (true) {
System.out.println("-----欢迎来到兵器谱的登录界面-----");
System.out.println("请选择操作:1注册 2登录 3忘记密码 4退出");
String str = sc.next();
switch (str) {
case "1":
logon(use);
continue log;//注册成功之后当然要让人家在登录界面登陆一次了
case "2":
boolean flag = false;
if (signIn(use, flag)) {
System.out.println("请重新登录");
continue log;//登陆失败要重新登录哦
}
System.out.println("登陆成功");
break log;
case "3":
forgetenPa(use);
continue log;
case "4":
System.exit(0);
default:
System.out.println("你输入的数不符合规矩哦,少侠");
}
}
接下来是注册
用户名唯一
1. 用户名长度必须在3~15位之间
只能是字母加数字的组合,但是不能是纯数字
2. 密码键盘输入两次,两次一致才可以进行注册。
3. 身份证号码需要验证。
既然要对用户操作了,自然要写一个用户类,在里面填上用户所有的属性了:
public class user {
private String username;
private String password;
private String usernum;
private String phonenum;
public user(){
}
public user(String username, String password, String usernum, String phonenum) {
this.username = username;
this.password = password;
this.usernum = usernum;
this.phonenum = phonenum;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsernum(String usernum) {
this.usernum = usernum;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getUsernum() {
return usernum;
}
public String getPhonenum() {
return phonenum;
}
public void setPhonenum(String phonenum) {
this.phonenum = phonenum;
}
}
用户名先判断长短的合法性,再判断唯一性,唯一性用 use.get(i).getUsername().equals(username)判断,用for循环把每一个用户的用户名get出来再和新起的比较,一样就让他换一个。
然后设置密码和验证身份证号是否合法,简单的判断就可以实现。
身份证验证要求:长度为18位 不能以0为开头 前17位,必须都是数字
最为一位可以是数字,也可以是大写X或小写x
密码要输入两次验证
//用户注册
public static void logon(ArrayList use) {
Scanner sc = new Scanner(System.in);
String usernum = null;
String phonenum = null;
String password = null;
ch:
while (true) {
//这个循环判断用户名的合法性
System.out.println("请输入用户名:");
String username = sc.next();
cn:
while (true) {
if (username.length() < 3) {
System.out.println("用户名太短,请重新输入");
continue ch;
}
if (username.length() > 15) {
System.out.println("用户名太长,请重新输入");
continue ch;
}
for (int i = 0; i < username.length(); i++) {
char ch = username.charAt(i);
if (!((ch >= 'A' && ch <= 'z') || ch >= '0' && ch <= '0')) {//让他一定是数字和字母的组合
System.out.println("用户名只能由数字和字母组成,请重新输入");
continue ch;
}
//只要有一个字母就合法
if (ch >= 'A' && ch <= 'z') break cn;
}
System.out.println("用户名不能是纯数字,请重新输入:");
}
for (int i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {
System.out.println("给爷重新选一个用户名!!!");
continue ch;
}
}
while (true) {
System.out.println("请设置阁下的密码:");
password = sc.next();
System.out.println("请确认阁下的密码:");
String password1 = sc.next();
if (password.equals(password1)) break;
else System.out.println("您两次输入的密码不一样,请重新设置");
}
pn:
while (true) {
System.out.println("请告知阁下手机号码:");
phonenum = sc.next();
if (phonenum.length() != 11) {
System.out.println("这是手机号码吗?");
continue;
}
if (phonenum.charAt(0) != '1') {
System.out.println("这是手机号码吗?");
continue;
}
for (int i = 0; i < phonenum.length(); i++) {
char ch = phonenum.charAt(i);
if (ch > '9' || ch < '0') {
System.out.println("这是手机号码吗?");
continue pn;
}
}
break;
}
un:
while (true) {
System.out.println("请告知阁下身份证号码:");
usernum = sc.next();
if (usernum.length() != 18) continue;
if (usernum.charAt(0) == '0') continue;
if ((usernum.charAt(17) > '9' || usernum.charAt(17) < '0')
&& (usernum.charAt(17) != 'x' && usernum.charAt(17) != 'X'))
continue;
for (int i = 0; i < usernum.length(); i++) {
char ch = usernum.charAt(i);
if (usernum.charAt(i) > '9' || usernum.charAt(i) < '0') {
System.out.println("你输入的是身份证号吗?");
continue un;
}
}
user us = new user(username, password, usernum, phonenum);
use.add(us);
return;
}
}
}
接下来是登录操作
判断用户名是否存在,不存在直接return false,存在输入密码,设置计数器cnt=3
当cnt=0时直接退出程序,当密码正确时进入验证码阶段
public static boolean signIn(ArrayList use, boolean flag) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
//看看有没有这个用户,有就继续,没就返回让他注册
for (int i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {
flag = true;
}
if (!flag) {
System.out.println("未查询到该用户名");
return true;
}
}
int cnt = 3;
//密码验证
pa:
while (true) {
System.out.println("请输入您的密码:");
String password = sc.next();
for (int i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {//找到那个用户
if (use.get(i).getPassword().equals(password)) {//密码正确
System.out.println("密码正确");
break pa;
} else {
cnt--;
System.out.println("密码错误,您还有" + cnt + "次机会");
if (cnt == 0) {
System.out.println("您的账号已被冻结,请重新注册");
System.exit(0);
}
continue pa;
}
}
}
}
//验证码验证
while (true) {
String ra = ra();
System.out.println("请输入验证码:");
System.out.println(ra);
String str = sc.next();
if (str.equals(ra)) {//输入验证码与输入是否相同
System.out.println("验证码正确");
return false;
} else {
System.out.println("验证码错误");
continue;
}
}
}
随机生成验证码的函数如下:
public static String ra() {
Random r = new Random();
StringBuilder sb = new StringBuilder();//建了个StringBuilder对象
for (int i = 0; i < 4; i++) {
int f = r.nextInt(2);//随机数字或小写字母
if (f == 1) {
int ch = r.nextInt(26) + 97;
char c = (char) ch;
sb.append(c);//字母添加入容器sb中
} else {
int ch = r.nextInt(10);
sb.append(ch);//数字添加到容器sb中
}
}
return sb.toString();//换回String字符串
}
最后一步,忘记密码怎么办,当然是先翻用户名再翻手机号和身份证了,判断的时候还是用链式编程了。ps:链式编程yyds
到最后直接setpassword就行了
//忘记密码
public static void forgetenPa(ArrayList use) {
Scanner sc = new Scanner(System.in);
boolean flag = false;
System.out.println("请输入用户名:");
String username = sc.next();
int i;
for (i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {
flag = true;
break;
}
}
if (!flag) {
System.out.println("没有此用户名,请重新选择");
return;
}
flag = false;
System.out.println("现在验证你的手机号,请输入:");
String phonenum = sc.next();
if (use.get(i).getPhonenum().equals(phonenum))
flag = true;
if (!flag) {
System.out.println("手机号错误请重新选择");
return;
}
flag = false;
System.out.println("现在验证你的身份证号,请输入:");
String usernum = sc.next();
if (use.get(i).getUsernum().equals(usernum)) {
flag = true;
}
if (!flag) {
System.out.println("身份证号错误,请重新输入");
return;
}
System.out.println("身份验证成功!请输入新密码");
String password = sc.next();
use.get(i).setPassword(password);
System.out.println("密码修改成功");
}
大功告成 (叉腰)(得意)最后把昨天的合在一起,一个完美的学生信息登记系统就完成了
下面是完整代码(除了学生JavaBean)
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class studentTest {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
ArrayList use = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//登陆界面
log:
while (true) {
System.out.println("-----欢迎来到兵器谱的登录界面-----");
System.out.println("请选择操作:1注册 2登录 3忘记密码 4退出");
String str = sc.next();
switch (str) {
case "1":
logon(use);
continue log;
case "2":
boolean flag = false;
if (signIn(use, flag)) {
System.out.println("请重新登录");
continue log;
}
System.out.println("登陆成功");
break log;
case "3":
forgetenPa(use);
continue log;
case "4":
System.exit(0);
default:
System.out.println("你输入的数不符合规矩哦,少侠");
}
}
//学生信息管理界面
quit:
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 choose = sc.next();
switch (choose) {
case "1":
addStudent(list);
break;
case "2":
deleteStudent(list);
break;
case "3":
change(list);
break;
case "4":
look(list);
break;
case "5":
System.out.println("退出成功");
break quit;
default:
System.out.println("你输入的什么玩意");
}
}
}
//添加学生信息
public static void addStudent(ArrayList list) {
Scanner sc = new Scanner(System.in);
String id = null;
re:
while (true) {
System.out.println("请输入高手的绰号:");
id = sc.next();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
System.out.println("已经有高手起这个绰号了,给爷重新起");
continue re;
}
}
break;
}
list.add(gai(list, id));
}
//删除学生信息
public static void deleteStudent(ArrayList list) {
if (list.size() == 0) {
System.out.println("一个高手也没,你除个锤子名");
return;
}
System.out.println("请输入要除名的高手绰号:");
Scanner sc = new Scanner(System.in);
String id = sc.next();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
list.remove(i);
System.out.println("除名成功");
return;
}
}
System.out.println("你tm故意找茬是吧!!!");
}
//查看学生信息
public static void look(ArrayList list) {
if (list.size() == 0) {
System.out.println("还有没有高手你心里没有点ac数?");
return;
}
System.out.println("绰号" + '\t' + '\t' + "姓名" + '\t' + '\t' + "年龄" + '\t' + '\t' + "籍贯");
for (int i = 0; i < list.size(); i++) {
System.out.printf(list.get(i).getId() + "\t\t");
System.out.printf(list.get(i).getName() + "\t\t");
System.out.printf(list.get(i).getAge() + "\t\t");
System.out.printf(list.get(i).getPlace() + "\t\t");
System.out.println("");
}
}
//更改学生信息
public static void change(ArrayList list) {
Scanner sc = new Scanner(System.in);
if (list.size() == 0) {
System.out.println("一个高手也没,你改个锤子名");
return;
}
System.out.println("请输入要替换的高手绰号:");
String id = sc.next();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId().equals(id)) {
System.out.println("请输入高手的新绰号:");
id = sc.next();
list.set(i, gai(list, id));
System.out.println("替换成功");
return;
}
}
System.out.println("查无此人");
}
//重复代码方法化,建立新的学生对象
public static student gai(ArrayList list, String id) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入高手的姓名:");
String name = sc.next();
System.out.println("请输入高手的籍贯:");
String place = sc.next();
System.out.println("请输入高手的年龄:");
int age = sc.nextInt();
student a = new student(name, id, age, place);
return a;
}
//用户注册
public static void logon(ArrayList use) {
Scanner sc = new Scanner(System.in);
String usernum = null;
String phonenum = null;
String password = null;
ch:
while (true) {
//这个循环判断用户名的合法性
System.out.println("请输入用户名:");
String username = sc.next();
cn:
while (true) {
if (username.length() < 3) {
System.out.println("用户名太短,请重新输入");
continue ch;
}
if (username.length() > 15) {
System.out.println("用户名太长,请重新输入");
continue ch;
}
for (int i = 0; i < username.length(); i++) {
char ch = username.charAt(i);
if (!((ch >= 'A' && ch <= 'z') || ch >= '0' && ch <= '0')) {//让他一定是数字和字母的组合
System.out.println("用户名只能由数字和字母组成,请重新输入");
continue ch;
}
//只要有一个字母就合法
if (ch >= 'A' && ch <= 'z') break cn;
}
System.out.println("用户名不能是纯数字,请重新输入:");
}
for (int i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {
System.out.println("给爷重新选一个用户名!!!");
continue ch;
}
}
while (true) {
System.out.println("请设置阁下的密码:");
password = sc.next();
System.out.println("请确认阁下的密码:");
String password1 = sc.next();
if (password.equals(password1)) break;
else System.out.println("您两次输入的密码不一样,请重新设置");
}
pn:
while (true) {
System.out.println("请告知阁下手机号码:");
phonenum = sc.next();
if (phonenum.length() != 11) {
System.out.println("这是手机号码吗?");
continue;
}
if (phonenum.charAt(0) != '1') {
System.out.println("这是手机号码吗?");
continue;
}
for (int i = 0; i < phonenum.length(); i++) {
char ch = phonenum.charAt(i);
if (ch > '9' || ch < '0') {
System.out.println("这是手机号码吗?");
continue pn;
}
}
break;
}
un:
while (true) {
System.out.println("请告知阁下身份证号码:");
usernum = sc.next();
if (usernum.length() != 18) continue;
if (usernum.charAt(0) == '0') continue;
if ((usernum.charAt(17) > '9' || usernum.charAt(17) < '0')
&& (usernum.charAt(17) != 'x' && usernum.charAt(17) != 'X'))
continue;
for (int i = 0; i < usernum.length(); i++) {
char ch = usernum.charAt(i);
if (usernum.charAt(i) > '9' || usernum.charAt(i) < '0') {
System.out.println("你输入的是身份证号吗?");
continue un;
}
}
user us = new user(username, password, usernum, phonenum);
use.add(us);
return;
}
}
}
//用户登录
public static boolean signIn(ArrayList use, boolean flag) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
//看看有没有这个用户,有就继续,没就返回让他注册
for (int i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {
flag = true;
}
if (!flag) {
System.out.println("未查询到该用户名");
return true;
}
}
int cnt = 3;
//密码验证
pa:
while (true) {
System.out.println("请输入您的密码:");
String password = sc.next();
for (int i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {
if (use.get(i).getPassword().equals(password)) {
System.out.println("密码正确");
break pa;
} else {
cnt--;
System.out.println("密码错误,您还有" + cnt + "次机会");
if (cnt == 0) {
System.out.println("您的账号已被冻结,请重新注册");
System.exit(0);
}
continue pa;
}
}
}
}
//验证码验证
while (true) {
String ra = ra();
System.out.println("请输入验证码:");
System.out.println(ra);
String str = sc.next();
if (str.equals(ra)) {
System.out.println("验证码正确");
return false;
} else {
System.out.println("验证码错误");
continue;
}
}
}
//忘记密码
public static void forgetenPa(ArrayList use) {
Scanner sc = new Scanner(System.in);
boolean flag = false;
System.out.println("请输入用户名:");
String username = sc.next();
int i;
for (i = 0; i < use.size(); i++) {
if (use.get(i).getUsername().equals(username)) {
flag = true;
break;
}
}
if (!flag) {
System.out.println("没有此用户名,请重新选择");
return;
}
flag = false;
System.out.println("现在验证你的手机号,请输入:");
String phonenum = sc.next();
if (use.get(i).getPhonenum().equals(phonenum))
flag = true;
if (!flag) {
System.out.println("手机号错误请重新选择");
return;
}
flag = false;
System.out.println("现在验证你的身份证号,请输入:");
String usernum = sc.next();
if (use.get(i).getUsernum().equals(usernum)) {
flag = true;
}
if (!flag) {
System.out.println("身份证号错误,请重新输入");
return;
}
System.out.println("身份验证成功!请输入新密码");
String password = sc.next();
use.get(i).setPassword(password);
System.out.println("密码修改成功");
}
//随机产生验证码函数
public static String ra() {
Random r = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
int f = r.nextInt(2);
if (f == 1) {
int ch = r.nextInt(26) + 97;
char c = (char) ch;
sb.append(c);
} else {
int ch = r.nextInt(10);
sb.append(ch);
}
}
return sb.toString();
}
}
明天尝试用c写一下系统,挑战一下自己(笑)