创建对象
创建一个为User用于登录的对象
package StudentManagementSystem;
public class User {
private String username;
private String password;
private String nameid;
private String phonenumber;
//空参构造
public User() {
}
//带参构造
public User(String username, String password, String nameid, String phonenumber) {
this.username = username;
this.password = password;
this.nameid = nameid;
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 getnameid(){
return nameid;
}
public void setnameid(String nameid){
this.nameid = nameid;
}
public String getphonenumber(){
return phonenumber;
}
public void setphonenumber(String phonenumber){
this.phonenumber = phonenumber;
}
}
创建另一个Student用于学生管理的对象
package StudentManagementSystem;
public class Student {
//变量私有化
private int id;
private String name;
private int age;
public Student(){
}
//带参构造
public Student(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
//各个变量的处理
public int getid(){
return id;
}
public void setid(int 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;
}
}
代码主体
//用控制台实现学生管理系统的简单增删改查
package StudentManagementSystem;
//导入键盘输入包,集合包
import java.util.Scanner;
import java.util.ArrayList;
//导包,用于生成验证码,五位随机的数据
import java.util.Random;
public class StudentManagementSystem {
public static void main(String[] args) {
//创建对象,并对学生管理系统的使用说明打印
Scanner sc = new Scanner(System.in);
//创建一个集合,用于存放已注册的用户信息
ArrayList<User> users = new ArrayList<>();
User user = new User("user123" , "qwer123"
, "123456789012345678" , "12233334444");
users.add(user);
//学生系统的使用需要先进行登录
circulate : while (true) {
printinfo1();
int num = sc.nextInt();
switch(num){
case 1 :{
if(denglu(users)){
System.out.println("登录成功!");
break circulate;
}
System.out.println("登录失败,请重新选择");
}
case 2 :{
users = register(users);
}
case 3 :{
users = reset(users);
}
default :{
System.out.println("你所输入的功能不存在,请重新输入");
}
}
}
System.out.println("--------欢迎使用本学生管理系统!--------");
//创建集合来记录数据
ArrayList<Student> stu = new ArrayList<>();
Student stu1 = new Student(001 , "小明" , 18);
Student stu2 = new Student(002 , "王刚" , 20);
Student stu3 = new Student(003 , "张三" , 21);
Student stu4 = new Student(004 , "李四" , 19);
Student stu5 = new Student(005 , "王五" , 22);
//添加数据
stu.add(stu1);
stu.add(stu2);
stu.add(stu3);
stu.add(stu4);
stu.add(stu5);
//定义flag来中止循环
boolean flag = true;
while (flag) {
printinfo2();
int num = sc.nextInt();
switch(num){
//增加学生信息
case 1 -> addStudent(stu);
case 2 -> deleteStudent(stu);
case 3 -> changeStudent(stu);
case 4 -> queryStudent(stu);
//如果使用break,在嵌套中需要把你想要跳出的循环进行命名
//System.exit(0);退出虚拟机的意思
//break 循环名;
case 5 -> flag = false;
default -> System.out.println("你所输入的功能不存在,请重新输入");
}
}
System.out.println("感谢你使用本系统,再见!");
}
//重置密码
public static ArrayList<User> reset(ArrayList<User> users){
//登录需要手动输入信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的username");
String username = sc.next();
System.out.println("请输入你的nameid");
String nameid = sc.next();
System.out.println("请输入你的phonenumber");
String phonenumber = sc.next();
//进行比对
int count = -1;
for (int i = 0; i < users.size(); i++) {
//查询是否在数据库中存在该username
if(users.get(i).getusername().equals(username)){
//当username存在时count != 0,且用count记录了在user中的索引
count = i;
//判断nameid是否正确
if(users.get(i).getnameid().equals(nameid)){
//判断phonenumber是否正确
if(users.get(i).getphonenumber().equals(phonenumber)){
}else{
System.out.println("你输入phonenumber不正确");
return users;
}
}else{
System.out.println("你输入nameid不正确");
return users;
}
}
}
if(count == -1){
System.out.println("你输入username不存在");
return users;
}
System.out.println("请输入你的新password");
String password1 = sc.next();
System.out.println("请再次输入你的新password");
String password2 = sc.next();
//判断两次密码一致
if(password1.equals(password2) == false){
System.out.println("两次的password不一致!");
return users;
}
//当账号可以重置密码时,发送验证码
String yanzhen = yanzhen();
System.out.println(yanzhen);
System.out.println("请输入你的yanzhen");
String youryanzhen = sc.next();
//对比验证码,相同则重置密码成功
if(youryanzhen.equals(yanzhen)){
User us = new User(username , password1 , nameid , phonenumber);
users.set(count , us);
System.out.println("重置密码成功!");
}else{
System.out.println("验证码错误,重置密码失败!");
}
return users;
}
//注册学生系统
public static ArrayList<User> register(ArrayList<User> users){
//输入注册信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的username");
String username = sc.next();
System.out.println("请输入你的password");
String password1 = sc.next();
System.out.println("请再次输入你的password");
String password2 = sc.next();
System.out.println("请输入你的nameid");
String nameid = sc.next();
System.out.println("请输入你的phonenumber");
String phonenumber = sc.next();
//判断username的合法性
if(username.length() < 3 || username.length() > 16){
System.out.println("username过长!");
return users;
}else if(judgmentusername(username) == false){
System.out.println("username只能为字母和数字,且不能完全为数字!");
return users;
}
//判断两次密码一致
if(password1.equals(password2) == false){
System.out.println("两次的password不一致!");
return users;
}
//判断身份证号必须为18位,且第一位不为0,且前17为数字,最后一位为数字或者X和x
if(nameid.length() == 18){
for (int i = 0; i < username.length() - 1; i++) {
char ch = username.charAt(i);
//前面只能是纯数字
if(ch < '0' || ch > '9'){
System.out.println("身份证前17位只能为数字!");
return users;
}
}
char ch1 = username.charAt(0);
char ch2 = username.charAt(username.length() - 1);
//身份证第1位不能为0
if(ch1 == '0'){
System.out.println("身份证第1位不能为0!");
return users;
}
//身份证最后1位为数字,X,x
if((ch2 < '0' || ch2 > '9') && (ch2 != 'x') && (ch2 != 'X')){
System.out.println("身份证最后1位为数字,X,x!");
return users;
}
}else{
System.out.println("身份证的位数为18位!");
return users;
}
//判断手机号的正确性,只能为数字,长度为11,开头不能为0
if(phonenumber.length() == 11){
for (int i = 0; i < username.length() ; i++) {
char ch = username.charAt(i);
//只能是纯数字
if(ch < '0' || ch > '9'){
System.out.println("手机号只能为数字!");
return users;
}
}
char ch = username.charAt(0);
//手机号第1位不能为0
if(ch == '0'){
System.out.println("手机号第1位不能为0!");
return users;
}
}
//判断账号是否已经存在
if(judgmentusername(users , username)){
System.out.println("该账号已存在,请勿重复注册!");
}else{
//当账号可以注册时,发送验证码
String yanzhen = yanzhen();
System.out.println(yanzhen);
System.out.println("请输入你的yanzhen");
String youryanzhen = sc.next();
//对比验证码,相同则注册成功
if(youryanzhen.equals(yanzhen)){
User us = new User(username , password1 , nameid , phonenumber);
users.add(us);
System.out.println("注册成功!");
}else{
System.out.println("验证码错误,注册失败!");
}
}
return users;
}
//登录学生系统
public static boolean denglu(ArrayList<User> users){
//登录需要手动输入信息
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的username");
String username = sc.next();
System.out.println("请输入你的password");
String password = sc.next();
String yanzhen = yanzhen();
System.out.println(yanzhen);
System.out.println("请输入你的yanzhen");
String youryanzhen = sc.next();
//登录需要查询id的唯一性,只有不唯一才能继续判断
if(judgmentusername(users , username ,password)){
if(yanzhen.equals(youryanzhen)){
return true;
}
}
return false;
}
//生成验证码
public static String yanzhen(){
//创建对象
Random rand = new Random();
//创建随机的大小写字母的数字的范围字符串
StringBuilder sb = new StringBuilder();
//将大小写字母,放入sb中
for (int i = 0; i < 26; i++) {
char c1 = 'A';
char c2 = 'a';
sb.append((char) (c1 + i));
sb.append((char) (c2 + i));
}//AaBb.....
//在字符串的末尾加入0-9
for (int i = 0; i < 10; i++) {
char c1 = '0';
sb.append((char) (c1 + i));
}
//创建一个reuslt来存放验证码
StringBuilder result = new StringBuilder();
//生成随机的验证码
for (int i = 0; i < 5; i++) {
int num = rand.nextInt(sb.length());
result.append(sb.charAt(num));
}
return result.toString();
}
//查询学生操作
public static void queryStudent(ArrayList<Student> list){
//查询的信息需要手动输入id
Scanner sc = new Scanner(System.in);
System.out.println("你正在使用查询学生信息功能!");
System.out.println("请选择你要执行的功能:");
System.out.println("1:查询所有学生");
System.out.println("other:查询单个学生");
int num = sc.nextInt();
if(num == 1){
//遍历集合
printassemble(list);
}else{
System.out.println("请输入你要查询学生信息的学生id");
int id = sc.nextInt();
if(judgmentid(list , id)){
System.out.println("你要查询学生信息的学生id不存在,正在返回主菜单!");
}else{
Student stu = list.get(id);
System.out.println("ID" + "\t" + "姓名" + "\t" + "年龄");
System.out.println(stu.getid() + "\t" + stu.getname() + "\t" + stu.getage());
}
}
}
//修改学生操作,修改失败时退回主菜单
public static ArrayList<Student> changeStudent(ArrayList<Student> list){
//修改的信息需要手动输入id
Scanner sc = new Scanner(System.in);
System.out.println("你正在使用修改学生信息功能!");
System.out.println("请输入你要修改学生信息的学生id");
//记录输入数据的变量初始化
int id = sc.nextInt();
//judgmentid方法有重复的返回false,无重复返回true
if(judgmentid(list , id)){
System.out.println("你要修改学生信息的学生id不存在,正在返回主菜单!");
}else{
System.out.println("请输入你要修改学生信息的学生name");
String name = sc.next();
System.out.println("请输入你要修改学生信息的学生age");
int age = sc.nextInt();
int index = foundid(list , id);
Student stu = new Student(id , name , age);
list.set(index , stu);
System.out.println("修改成功,正在返回主菜单!");
}
//遍历集合验证结果
printassemble(list);
return list;
}
//删除学生操作,删除失败时退回主菜单
public static ArrayList<Student> deleteStudent(ArrayList<Student> list){
//删除的信息需要手动输入id
Scanner sc = new Scanner(System.in);
System.out.println("你正在使用删除学生信息功能!");
System.out.println("请输入你要删除学生信息的学生id");
//记录输入数据的变量初始化
int id = sc.nextInt();
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
if(id == stu.getid()){
list.remove(i);
System.out.println("删除成功!");
break;
}
if(i == list.size() - 1){
System.out.println("删除失败,数据中不存在id为" + id +
"的学生,正在返回主菜单!");
}
}
//遍历集合验证结果
printassemble(list);
return list;
}
//增加学生的操作
public static ArrayList<Student> addStudent(ArrayList<Student> list){
//添加的信息需要手动输入
Scanner sc = new Scanner(System.in);
System.out.println("你正在使用增加学生信息功能!");
//记录输入数据的变量初始化
int id = 0;
String name = ("");
int age = 0;
while(true){
System.out.println("请输入学生id");
id = sc.nextInt();
System.out.println("请输入学生姓名");
name = sc.next();
System.out.println("请输入学生年龄");
age = sc.nextInt();
//对输入的数据进行合法性判断
if(judgmentid(list , id)){
if(age >= 0 && age <= 200){
break;
}else{
System.out.println("你所输入的学生年龄不合理,请重新输入");
}
}else{
System.out.println("你所输入的学生id已重复,请重新输入");
}
}
//将数据放入数组
Student stu = new Student(id , name , age);
list.add(stu);
System.out.println("添加成功!");
//遍历集合验证结果
printassemble(list);
return list;
}
//遍历集合
public static void printassemble(ArrayList<Student> list){
System.out.println("ID" + "\t" + "姓名" + "\t" + "年龄");
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
if(stu != null){
System.out.println(stu.getid() + "\t" + stu.getname() + "\t" + stu.getage());
}else{
System.out.println("当前无学生信息!");
}
}
}
//返回重复id的索引
public static int foundid(ArrayList<Student> list , int id){
int index = 0;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getid() == id){
index = i;
break;
}
}
return index;
}
//判断字符串中是否只包含字母和数字
public static boolean judgmentusername(String username){
for (int i = 0; i < username.length(); i++) {
char ch = username.charAt(i);
//不能是纯数字
int count = 0;
if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')
|| (ch >= '0' && ch <= '9')){
if(ch >= '0' && ch <= '9'){
count++;
}
if(count == username.length()){
return false;
}
return true;
}
}
return false;
}
//账号密码判断
public static boolean judgmentusername(ArrayList<User> list
, String username , String password){
for (int i = 0; i < list.size(); i++) {
//查询是否在数据库中存在该username
if(list.get(i).getusername().equals(username)){
//判断密码是否正确
if(list.get(i).getpassword().equals(password)){
//账号密码都正确
return true;
}
}
}
return false;
}//只有重复才能证明有该用户
//账号唯一判断
public static boolean judgmentusername(ArrayList<User> list , String username){
for (int i = 0; i < list.size(); i++) {
//查询是否在数据库中存在该username
if(list.get(i).getusername().equals(username)){
return true;
}
}
return false;
}
//id唯一性判断
public static boolean judgmentid(ArrayList<Student> list , int id){
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getid() == id){
return false;
}
}
return true;
}
//打印使用说明
public static void printinfo1(){
System.out.println("1:登录");
System.out.println("2:注册");
System.out.println("3:忘记密码");
System.out.println("请根据提示输入数字");
}
public static void printinfo2(){
System.out.println("1:增加学生信息");
System.out.println("2:删除学生信息");
System.out.println("3:修改学生信息");
System.out.println("4:查询学生信息");
System.out.println("5:退出该系统");
System.out.println("请根据提示输入数字");
}
}