学生管理系统包括了两部分,一部分是登录页面,一部分是管理系统的内容
具体图示如下
用的都是java的基础知识,适用于初学者或者巩固基础,没有很复杂的内容,
管理系统
登录主页面
public static void startstudentststem() {
ArrayList<student> list = new ArrayList<>();
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("请输入你的选择:");
Scanner sc = new Scanner(System.in);
String choose = sc.next();
switch (choose) {
case "1":
addStudent(list);
break;
case "2":
deleteStudent(list);
break;
case "3":
updatesStudent(list);
break;
case "4":
queryStudent(list);
break;
case "5":
System.out.println("退出");
break loop;
//或者System.exit(0);//停止虚拟机运行
default:
System.out.println("没有这个选项");
}//选择需要的操作
}
}
用arraylist来储存学生的信息
增加信息
//添加学生
public static void addStudent(ArrayList<student> list) {
//创建学生对象
student stu = new student();
//输入并且添加信息
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入学生编号");
String id = sc.next();
//判断唯一性,不唯一重新输入
if (contains(list, id)) {
System.out.println("学生编号重复,请重新输入");
} else {
stu.setId(id);
break;
}
}
System.out.println("请输入学生姓名");
stu.setName(sc.next());
System.out.println("请输入学生年龄");
stu.setAge(sc.nextInt());
System.out.println("请输入学生家庭住址");
stu.setAddress(sc.next());
list.add(stu);
System.out.println("添加成功");
}
删除信息
public static void deleteStudent(ArrayList<student> list) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要删除的学生id");
String id=sc.next();
int num=rnum(list,id);
if(num>=0){
list.remove(num);
System.out.println("id为"+id+"的同学删除成功");
}
else{
System.out.println("删除失败");
}
}
修改信息
public static void updatesStudent(ArrayList<student> list) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要修改学生的id");
String id=sc.next();
//判断是否存在
int num=rnum(list,id);
//不存在返回主菜单
if(num==-1){
System.out.println("id不存在");
return ;
}
//存在修改
student stu=list.get(num);
System.out.println("请输入要修改学生姓名");
stu.setName(sc.next());
System.out.println("请输入要修改学生年龄");
stu.setAge(sc.nextInt());
System.out.println("请输入要修改学生地址");
stu.setAddress(sc.next());
System.out.println("修改成功");
}
查询学生
public static void queryStudent(ArrayList<student> list) {
//查询为空的情况
if (list.isEmpty()) {
System.out.println("当前无学生信息,请添加后再查询");
return;
}
//查询不为空的情况
System.out.println("id\t姓名\t年龄\t家庭住址");
for (student stu : list) {
System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress());
}
}
判断id是否存在
public static boolean contains(ArrayList<student> list, String id) {
int k=rnum(list,id);
return k>=0;
}
返回id对应索引
public static int rnum(ArrayList<student> list,String id){
//遍历
//存在返回索引,否则返回-1
for (int i = 0; i < list.size(); i++) {
String sid=list.get(i).getId();
if(sid.equals(id)){
return i;
}
}
return -1;
}
登录页面
页面
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<User> list = new ArrayList<>();
loop:
while (true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作:1登录 2注册 3忘记密码 4退出 ");
//输入操作
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("谢谢使用,再见");
break loop;
default:
System.out.println("操作不存在,请重新选择");
}
}
}
登录
//登录
private static void login(ArrayList<User> list) {
Scanner sc=new Scanner(System.in);
//输入用户名
int cnt=3;
while (true) {
System.out.println("请输入用户名");
String username = sc.next();
//判断用户名是否注册
boolean flg1 = contains(list, username);
if (flg1) {
System.out.println("当前用户" + username + "未注册,请先注册");
continue;
}
//输入密码
System.out.println("请输入密码");
String password = sc.next();
//输入验证码
String rightcode = getCode();
System.out.println("正确验证码是" + rightcode + ",请输入验证码");
String code = sc.next();
if (!code.equalsIgnoreCase(rightcode)) {
System.out.println("验证码错误,请重新输入");
}
//验证账号密码是否正确
//可以将零散的数据重新new一个对象
User us = new User(username,password,null,null);
boolean flg2=checkIf(us,list);
if(flg2) {
System.out.println("用户名密码正确,登录成功");
//创建对象,调用学生管理系统
StudentSystem stu=new StudentSystem();
stu.startstudentststem();
break;
}
else{
System.out.println("用户名或者密码错误,还有"+(cnt)+"次机会");
cnt--;
}
//判断是否还有机会
if(cnt==0){
System.out.println("登录失败,用户已经锁定");
break;
}
}
}
注册
private static void register(ArrayList<User> list) {
Scanner sc = new Scanner(System.in);
User us = new User();
//设置用户名
while (true) {
//键盘录入用户名
System.out.println("请输入用户名");
String username = sc.next();
//验证格式是否正确
//长度在3-15之间,
//组合为字母加数字,不能为纯数字
boolean flg1 = checkusername(username);
if (!flg1) {
System.out.println("格式不正确,请重新输入");
continue;
}
//验证用户名唯一
boolean flg2 = contains(list, username);
if (!flg2) {
System.out.println("用户名不唯一,请重新输入");
continue;
}
us.setUsername(username);
break;
}
//设置密码
//两次输入一致
while (true) {
System.out.println("请输入密码");
String password1 = sc.next();
System.out.println("请二次输入密码");
String password2 = sc.next();
if (password1.equals(password2)) {
System.out.println("密码设置成功");
us.setPassword(password1);
break;
} else {
System.out.println("两次密码输入不同,请重新输入");
}
}
//设置身份证号码
//长度为18位
//不能以0开头
//前十七位必须为数字
//最后一位可以是数字,也可以是大写X或者小写x
while (true) {
System.out.println("请输入身份证号码");
String personid = sc.next();
//验证格式是否正确
boolean flg = checkpersonid(personid);
if (!flg) {
System.out.println("格式错误,请重新输入身份证号");
} else {
us.setPersonID(personid);
break;
}
}
//设置手机号码
//长度为11位
//不能以0开头
//必须都是数字
while (true) {
System.out.println("请输入电话号码");
String phonenumber = sc.next();
//检查格式
boolean flg = checkphonernumber(phonenumber);
if (flg) {
us.setPhoneNumber(phonenumber);
break;
} else {
System.out.println("格式错误,请重新输入");
}
}
list.add(us);
System.out.println("注册成功");
System.out.println("用户名\t密码\t身份证号\t手机号");
System.out.println(us.getUsername() + "\t" + us.getPassword() + "\t" + us.getPersonID() + "\t" + us.getPhoneNumber());
}
忘记密码
private static void forgetPassword(ArrayList<User> list) {
Scanner sc=new Scanner(System.in);
//输入用户名
String username= sc.next();
//判断是否注册
boolean flg1=contains(list,username);
if(flg1){
System.out.println("用户名"+username+"为注册");
return ;
}
//输入身份证号
System.out.println("请输入身份证号");
String personid= sc.next();
//输入手机号
System.out.println("请输入手机号码");
String phonenumber=sc.next();
//判断手机号码,身份证号是否一致
User us=new User(null,null,personid,phonenumber);
int flg2=getppindex(us,list);
if(flg2 >=0){
System.out.println("信息正确,请输入密码");
String password=sc.next();
//修改密码
list.remove(flg2);
User usu=new User(username,password,personid,phonenumber);
list.add(usu);
System.out.println("修改成功,新的密码为"+password);
}
else{
System.out.println("信息不匹配,修改失败");
}
}
判断用户名是否存在
private static boolean contains(ArrayList<User> list, String username) {
for (User user : list) {
String un = user.getUsername();
if (un.equals(username)) {
return false;
}
}
return true;
}
验证用户名格式是否正确
private static boolean checkusername(String username) {
//长度在3-15之间,
int len = username.length();
if (len < 3 || len > 15) {
return false;
}
//组合为字母加数字,不能为纯数字
for (int i = 0; i < len; i++) {
char c = username.charAt(i);
//只能为字母或者数字
if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))) {
return false;
}
}
验证身份证格式是否正确
private static boolean checkpersonid(String personid) {
//长度为18位
int len = personid.length();
if (len != 18) return false;
//不能以0开头
char num1 = personid.charAt(0);
if (num1 == '0') return false;
//前十七位都是数字
for (int i = 1; i < 17; i++) {
char c = personid.charAt(i);
if (!(c >= '0' && c <= '9')) return false;
}
//最后一位可以是数字或者X,x
char num18 = personid.charAt(0);
if (!((num18 >= '0' && num18 <= '9') || num18 == 'X' || num18 == 'x')) return false;
return true;
}
验证手机号码格式是否正确
private static boolean checkphonernumber(String phonenumber) {
//长度为11
int len = phonenumber.length();
if (len != 11) return false;
//不能以0开头
char num1 = phonenumber.charAt(0);
if (num1 == '0') return false;
//必须都是数字
for (int i = 1; i < phonenumber.length(); i++) {
char c = phonenumber.charAt(i);
if (!(c >= '0' && c <= '9')) return false;
}
return true;
}
生成验证码
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());
sb.append(list.get(index));
}
//随机抽取一位数字
int num=r.nextInt(10);//包头不包尾
sb.append(num);
//把他变为字符数组
//随机选择字符数组的一位与最后一位交换位置
char[] arr=sb.toString().toCharArray();
int index=r.nextInt(sb.length());
char c=arr[index];
arr[index]=arr[4];
arr[4]=c;
return new String(arr);
}
判断账号密码是否相同
private static boolean checkIf(User us,ArrayList<User> list){
for(int i=0;i<list.size();i++){
User sus=list.get(i);
if(us.getUsername().equals(sus.getUsername())&&us.getPassword().equals(sus.getPassword())) return true;
}
return false;
}
判断手机号码,身份证号是否一致,返回下标
private static int getppindex(User us,ArrayList<User> list){
for (int i = 0; i < list.size(); i++) {
User usu=list.get(i);
if(us.getPersonID().equals(usu.getPersonID())&&us.getPhoneNumber().equals(usu.getPhoneNumber())) return i;
}
return -1;
}
总结概括
这里拿来总结一下用到的我学到的比较有用的知识点
零散数据的比较
可以把他们放入一个类中,然后进行比较
获取验证码的时候打乱数据
可以先将StringBuilder 转化为字符数字类型,随机生成一个位置与最后一个位置交换
character表示每一个字符串的地址
arrayList只能存储地址,如果要生成字符的集合,要用character
while循环内部变量作用域
作用域终止于while循环,变量在while外部不能使用