看视频看到的,然后就自己手打了,完全自己手打,自己打的感觉非常的繁琐,也是希望再学习一段时间,在后面升级一下这个第一个完整的纯个人手打的系统吧。
回归正题,学生管理系统分为:1.登录界面 2.操作界面
登录界面包括:登录,注册,忘记密码
操作界面包括:添加学生,删除学生,修改学生,查询学生
首先对于这个学生管理系统来说,我们可以先看做两个大的模块:1.登录界面 2.操作界面
登录界面:1.登录功能 2.注册 3.忘记密码
操作界面: 1.添加学生 2.删除学生 3.修改学生 4.查询学生
(这些看起来有些多余,毕竟太明显了)
关于此系统我们要明确——涉及到的对象有哪些:
学生管理系统,学生对象得有吧,使用系统的用户对象得有吧(当然肯定还有其他的一些对象,由于加上那些太过复杂,咱们就不去涉及了)
用户对象的基本信息(属性)如下:
package Student_Management_System;
public class User {
private String username;
private String password;
private String IdentifyNumber;
private String PhoneNumber;
public User() {};
public User(String username,String password,String IdentifyNumber,String PhoneNumber) {
this.username=username;
this.password=password;
this.IdentifyNumber=IdentifyNumber;
this.PhoneNumber=PhoneNumber;
}
public void setusername(String username) {
this.username=username;
}
public void setpassword(String password) {
this.password=password;
}
public void setIdentifyNumber(String IdentifyNumber) {
this.IdentifyNumber=IdentifyNumber;
}
public void setPhoneNumber(String PhoneNumber) {
this.PhoneNumber=PhoneNumber;
}
public String getusername() {
return username;
}
public String getpassword() {
return password;
}
public String getIdentifyNumber() {
return IdentifyNumber;
}
public String getPhoneNumber() {
return PhoneNumber;
}
}
学生对象的基本信息(属性)如下:
package Student_Management_System;
public class Student {
private String id;
private String name;
private int age;
private String address;
public Student() {
}
public Student(String id,String name,int age,String address) {
this.id=id;
this.name=name;
this.age=age;
this.address=address;
}
public void setid(String id) {
this.id=id;
}
public void setname(String name) {
this.name=name;
}
public void setage(int age) {
this.age=age;
}
public void setaddress(String address) {
this.address=address;
}
public String getid() {
return id;
}
public String getname() {
return name;
}
public int getage() {
return age;
}
public String getaddress() {
return address;
}
}
对象类完成了,接下来就要开始真正的操作技术了!
首先,我们要考虑好,我们这个系统要以什么样的形式去实现,我比较笨,我就一股脑地全塞在一个里面了(另一个原因是:写这么多行代码,这不是很酷吗?)
首先,我考虑的是main方法当中我如何去实现(根据我个人的观点),当然是越简单越好了,因此我使用的是调用方法的方式。
"LoginInterface(user_t,stu_t);"我只使用了这一个方法来实现我整个学生管理系统的所有功能,看起来是不是很NB啊!(其中user_t是用户对象的表,stu_t是学生对象的表)。当然可以连接数据库来获得,但是我没有,我直接在main方法当中添加了相关的数据。
其次,明确完成模块的顺序,并且粗略明确如何来实现这些模块的功能,做一个难易程度的粗略判断,然后来进行代码的实现。(直接总结:操作界面要比登录界面要简单}
这就有人问了,为什么啊?4个功能怎么可能比三个功能的要简单呢?
首先我们要明确:添加(数据储存),删除(数据移除)修改(数据修改) 查看(数据读取)
登录(数据匹配) 注册(数据规格,数据储存) 忘记密码(数据查询,修改规则,数据修改)
现在一看,是不是操作界面的功能更简单了呢?(我要吐槽一点,注册的数据规格要求太麻烦,注册这一功能模块,是我这好几个模块当中投入时间最多的)
在代码实现之前,要首先建好一个test类来进行测试,做一个测试一个,不要一股脑写下去,导致最后的时候到处都是问题。(当然你厉害,当我没说过)(别问我为啥要插一句,因为有个男人也是这样做过来的-------此刻一位猛男眼角泛起了小珍珠)
操作界面代码实现如下:
//---------------------------------------系统操作-----------------------------------//
//添加学生方法;------------------------------1
//id唯一
public static void AddStudent(ArrayList<Student> stu_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入添加学生的id:");
String id=sc.next();
//id查重
boolean result=IdCheck(stu_t,id);
if(result) {
Student s=new Student();
s.setid(id);
System.out.println("请输入添加学生的姓名:");
String name=sc.next();
s.setname(name);
System.out.println("请输入添加学生的年龄:");
int age=sc.nextInt();
s.setage(age);
System.out.println("请输入添加学生的住址:");
String address=sc.next();
s.setaddress(address);
stu_t.add(s);
System.out.println("添加完成!");
//是否继续添
System.out.println("是否继续添加?");
System.out.println("继续添加请输入1,结束请输入2:");
int a=sc.nextInt();
if(a==1) {
AddStudent(stu_t);
}else if(a==2) {
InitialMenu(stu_t);
}else {
System.out.println("输入错误,默认返回初始菜单:");
InitialMenu(stu_t);
}
}else {
System.out.println("id已存在,请重新输入一个新的id:");
AddStudent(stu_t);
}
}
//删除学生方法:----------------------------2
//id存在删除 不存在,需要提示不存在 并 返回初始菜单
public static void RemoveStudent(ArrayList<Student> stu_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要删除学生的id:");
String id =sc.next();
//id确认
boolean result=IdCheck(stu_t,id);
if(!result) {
Student rs=new Student();
for(int i=0;i<stu_t.size();i++) {
Student s=stu_t.get(i);
if(s.getid().equals(id)) {
stu_t.get(i).setid(rs.getid());
stu_t.get(i).setname(rs.getname());
stu_t.get(i).setage(rs.getage());
stu_t.get(i).setaddress(rs.getaddress());
System.out.println("删除完成!");
//是否继续删除
System.out.println("是否继续删除?");
System.out.println("继续删除请输入1,结束请输入2:");
int a=sc.nextInt();
if(a==1) {
RemoveStudent(stu_t);
}else if(a==2) {
InitialMenu(stu_t);
}else {
System.out.println("输入错误,默认返回初始菜单:");
InitialMenu(stu_t);
}
}
}
}
else {
System.out.println("学生id不存在,自动返回初始菜单。");
InitialMenu(stu_t);
}
}
//修改学生方法:--------------------------3
//id存在,继续录入其他信息 不存在,需要提示不存在,并返回初始菜单
public static void TransformStudent(ArrayList<Student> stu_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要修改学生的id:");
String id =sc.next();
//id确认
boolean result=IdCheck(stu_t,id);
if(result==false) {
for(int i=0;i<stu_t.size();i++) {
Student s=stu_t.get(i);
if(s.getid().equals(id)) {
System.out.println("温馨提示:需要修改的请输入要修改的信息,不需要修改的请输入原本的信息。");
System.out.println("请输入修改后的id:");
String newid=sc.next();
boolean result2=IdCheck(stu_t,newid);
if(result2) {
stu_t.get(i).setid(newid);
System.out.println("请输入修改后的姓名:");
String newname=sc.next();
stu_t.get(i).setname(newname);
System.out.println("请输入修改后的年龄:");
int newage=sc.nextInt();
stu_t.get(i).setage(newage);
System.out.println("请输入修改后的住址:");
String newaddress=sc.next();
stu_t.get(i).setaddress(newaddress);
System.out.println("修改完成!");
//是否继续修改
System.out.println("是否继续修改?");
System.out.println("继续修改请输入1,结束请输入2:");
int a=sc.nextInt();
if(a==1) {
TransformStudent(stu_t);
}else if(a==2) {
InitialMenu(stu_t);
}else {
System.out.println("输入错误,默认返回初始菜单:");
InitialMenu(stu_t);
}
}else {
System.out.println("要修改的id已存在,请重新输入!");
TransformStudent(stu_t);
}
}
}
}else {
System.out.println("学生id不存在,请重新输入:");
InitialMenu(stu_t);
}
}
//查询学生方法:------------------------4
//如果没有学生信息,提示:无该学生信息,请添加后再查询! 如果有学生信息,需要按照类似表格方式输出
public static void SearchStudent(ArrayList<Student> stu_t) {
Scanner sc=new Scanner(System.in);
System.out.println("查询所有学生信息请输入:1");
System.out.println("查询单个学生信息请输入:2");
int abc=sc.nextInt();
if(abc==1) {
System.out.println("id"+"\t"+"姓名"+"\t"+"年龄"+"\t"+"住址");
for(int i=0;i<stu_t.size();i++) {
Student sb=stu_t.get(i);
System.out.println(sb.getid()+"\t"+sb.getname()+"\t"+sb.getage()+"\t"+sb.getaddress());
}
System.out.println();
System.out.println("是否继续查询?");
System.out.println("继续查询请输入1,结束请输入2:");
int a=sc.nextInt();
if(a==1) {
SearchStudent(stu_t);
}else if(a==2) {
InitialMenu(stu_t);
}else {
System.out.println("输入错误,默认返回初始菜单:");
InitialMenu(stu_t);
}
}else if(abc==2) {
System.out.println("请输入要查询学生的id:");
String id =sc.next();
//id确认
boolean result=IdCheck(stu_t,id);
if(result==true) {
System.out.println("无该学生信息,请添加后再查询!");
System.out.println("添加学生请输入:1");
System.out.println("返回菜单请输入:2");
int a=sc.nextInt();
if(a==1) {
AddStudent(stu_t);
}else if(a==2) {
InitialMenu(stu_t);
}
else {
System.out.println("输入错误,默认返回初始菜单");
InitialMenu(stu_t);
}
}else {
for(int i=0;i<stu_t.size();i++) {
Student s=stu_t.get(i);
if(s.getid().equals(id)) { // "\t" 自动补齐到8为字节
System.out.println("id"+"\t"+"姓名"+"\t"+"年龄"+"\t"+"住址");
System.out.println(s.getid()+"\t"+s.getname()+"\t"+s.getage()+"\t"+s.getaddress());
System.out.println();
System.out.println("是否继续查询?");
System.out.println("继续查询请输入1,结束请输入2:");
int a=sc.nextInt();
if(a==1) {
SearchStudent(stu_t);
}else if(a==2) {
InitialMenu(stu_t);
}else {
System.out.println("输入错误,默认返回初始菜单:");
InitialMenu(stu_t);
}
}
}
}
}
}
// 初始菜单-----------------------------
public static void InitialMenu(ArrayList<Student> stu_t) {
Scanner sc=new Scanner(System.in);
System.out.println("”--------------欢迎来到NB学校的学生管理系统--------------“");
System.out.println("”1:添加学生“");
System.out.println("”2:删除学生“");
System.out.println("”3:修改学生“");
System.out.println("”4:查询学生“");
System.out.println("”5:退出系统“");
System.out.println("”请输入您的选择:“");
int number=sc.nextInt();
switch(number) {
case 1:
//添加学生
AddStudent(stu_t);
break;
case 2:
//删除学生
RemoveStudent(stu_t);
break;
case 3:
//修改学生
TransformStudent(stu_t);
break;
case 4:
//查询学生
SearchStudent(stu_t);
break;
case 5:
System.out.println("退出系统!");
System.exit(0); //关闭虚拟机-----结束程序运行
default :
System.out.println("输入错误,请重新输入:");
System.out.println();
InitialMenu(stu_t);
break;
}
}
//id查重-------------------------
public static boolean IdCheck(ArrayList<Student> stu_t,String id) {
boolean result=true;//不存在为 true
for(int i=0;i<stu_t.size();i++) {
Student s=stu_t.get(i);
if(s.getid().equals(id)) {
result=false;// 存在为 false
}
}
return result;
}
登录界面代码实现如下:
//----------------------------------------------登录系统:------------------------------//
public static void LoginInterface(ArrayList<User> user_t,ArrayList<Student> stu_t) {
System.out.println("欢迎来到NB学校学生管理系统");
System.out.println("请选择操作:1-登录 2-注册 3-忘记密码");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
switch(a) {
case 1:
//登录
Login(user_t,stu_t);
break;
case 2:
//注册
Enroll(user_t,stu_t);
break;
case 3:
//忘记密码
ForgetPassword(user_t,stu_t);
break;
default :
System.out.println("输入错误,请重新输入:");
LoginInterface(user_t,stu_t);
break;
}
}
//登录----------------------------
public static void Login(ArrayList<User> user_t,ArrayList<Student> stu_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输用户名:");
String username=sc.next();
System.out.println("请输入密码:");
String password=sc.next();
//收取验证码:
String VC=VerificationCode();
System.out.println(VC);
System.out.println("请输入验证码");
String vc=sc.next();
boolean result=UserNameCheck(user_t,username);
if(result) {//确认
int count=0;//记录登录次数
while(count!=3) {
//验证码判断
if(VC.equals(vc)) {
//用户,密码判断
int aaa=UserName(user_t,username);
if(user_t.get(aaa).getusername().equals(username)&&user_t.get(aaa).getpassword().equals(password)) {
System.out.println("登录成功!");
InitialMenu(stu_t);
}
else {
System.out.println("用户名或密码错误,请重新输入:");
System.out.println("还有"+(3-count)+"次机会!");
count++;
System.out.println("请输用户名:");
username=sc.next();
System.out.println("请输入密码:");
password=sc.next();
}
}
else {
System.out.println("验证码错误,请重新输入:");
System.out.println("还有"+(3-count)+"次机会!");
vc=sc.next();
count++;
}
}
}
else {
System.out.println("未注册");
System.out.println("自动返回登录页面");
LoginInterface(user_t,stu_t);
}
System.out.println("账号已被锁定,30min后尝试!");
System.exit(0);
}
//登录---验证码
public static String VerificationCode() {
StringBuilder number=new StringBuilder();
Random r=new Random();
int a=r.nextInt(5);//获得数字位置
char[] word=new char[52];//字母a-z A-Z
for(int i=0;i<word.length/2;i++) {
word[i]=(char) (97+i);//(强转数据类型) (数值)
}
for(int i=word.length/2,j=0;i<word.length;i++,j++) {
word[i]=(char) (65+j);//(强转数据类型) (数值)
}
char[] number2=new char[10];// 数字0-9
for(int i=0;i<number2.length;i++) {
number2[i]=(char) (48+i);
}
for(int i=0;i<5;i++) {
int b=r.nextInt(52);
//添加数字
if(i==a) {
int c=r.nextInt(10);
number.append(number2[c]);
}//添加字母
else {
number.append(word[b]);
}
}
//转为 String类
String newnumber=number.toString();
return newnumber;
}
//注册------------------------------
public static void Enroll(ArrayList<User> user_t,ArrayList<Student> stu_t) {
//创建一个新对象,便于添加
User newuser=new User();
//注册用户名
String username=UserNameRules(user_t);
newuser.setusername(username);
//注册密码
String password=PsswordRules(user_t);
newuser.setpassword(password);
//身份证号码
String IN=IdentifyNumber(user_t);
newuser.setIdentifyNumber(IN);
//手机号
String PN=Phone(user_t);
newuser.setPhoneNumber(PN);
//注册成功
user_t.add(newuser);
System.out.println("注册成功!");
System.out.println("自动返回登录界面");
LoginInterface(user_t,stu_t);
}
//-----用户名规则
public static String UserNameRules(ArrayList<User> user_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要注册用户名:");
String username=sc.next();
while(true) {
//长度判断
if(username.length()>=3&&username.length()<=15) {
//组成判断
boolean result1=UserNameCompose(username);
if(result1) {
//唯一性判断
boolean result=UserNameCheck(user_t,username);
if(result) {
System.out.println("用户名已存在,请重新输入:");
System.out.println();
UserNameRules(user_t);
}else {
break;
}
}else {
System.out.println();
UserNameRules(user_t);
}
}
else {
System.out.println("用户名长度不合法,请重新输入:");
System.out.println();
UserNameRules(user_t);
}
}
return username;
}
//用户名规则--用户名组成判断
public static boolean UserNameCompose(String username) {
boolean result=false;
char[] word=new char[62];//字母a-z A-Z 0-9
for(int i=0;i<26;i++) {
word[i]=(char) (97+i);//a-z
}
for(int i=26,j=0;i<52;i++,j++) {
word[i]=(char) (65+j);//A-Z
}
for(int i=52,j=0;i<word.length;i++,j++) {
word[i]=(char)(48+j); //0-9
}
char[] number=new char[10];//单独0-9
for(int i=0;i<number.length;i++) {
number[i]=(char)(48+i); //0-9
}
//是否为英文字母或数字
boolean result1=ComposeRules(word,username);
//是否存在至少一个数字
boolean result2=ComposeRules2(number,username);
if(result1&&result2) {
result=true;
}else {
System.out.println("用户名输入不合法,请重新输入:");
result=false;
}
return result;
}
//组成规则----判定规则---字母数字组成
public static boolean ComposeRules(char[] c,String username) {
boolean result=true;
boolean result2=true;
for(int j=0;j<username.length();j++) {
int i=0;
char number=username.charAt(j);//获取username当中的每个元素 //c b
while(i<c.length) {
if(c[i]==number) {//找到一样的返回false
result2 =false;
break;
}
i++;
}
if(result2) {
result=false;
break;
}
else {
continue;
}
}
if(result2) {
}
else {
result=true;
}
return result;
}
//组成规则----判定规则---至少存在一个数字
public static boolean ComposeRules2(char[] c,String username) {
boolean result=false;
for(int i=0;i<username.length();i++) {
char a=username.charAt(i);
int j=0;
while(j<c.length) {
if(c[j]==a){//找到一个就结束循环,输出返回值
result=true;
break;
}
j++;
}if(result) {
break;
}
}
return result;
}
//------密码规则
public static String PsswordRules(ArrayList<User> user_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入密码:");
String password=sc.next();
System.out.println("请再输入一次密码:");
String newpassword=sc.next();
if(password.equals(newpassword)) {
}else {
System.out.println("两次密码输入不一致,请重新输入:");
System.out.println();
PsswordRules(user_t);
}
return newpassword;
}
//------身份证号规则
public static String IdentifyNumber(ArrayList<User> user_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入身份账号:");
String IN=sc.next();
//长度
boolean result1=I_length(IN);
//不以0开头
boolean result2=I_zero(IN);
//组成
boolean result3=I_compose(IN);
if(result1&&result2&&result3) {
} else {
System.out.println("身份证号信息不正确,请重新输入:");
System.out.println();
IdentifyNumber(user_t);
}
return IN;
}
//身份证--长度判断
public static boolean I_length(String IN) {
boolean result=false;
if(IN.length()==18) {
result=true;
}
return result;
}
//身份证---0开头
public static boolean I_zero(String IN) {
boolean result=true;
char c='0';
if(IN.charAt(0)==c) {
result=false;
}
return result;
}
//身份证--组成
public static boolean I_compose(String IN) {
boolean result=true;
boolean result2=false;
char[] number={'0','1','2','3','4','5','6','7','8','9'};
char[] lastnumber={'0','1','2','3','4','5','6','7','8','9','x','X'};
for(int i=0;i<IN.length()-1;i++) {
char c=IN.charAt(i); //身份证号第i个元素
int j=0;
while(j<number.length) {
if(c==number[j]) {//
result2=true;
break;
}
j++;
}
if(result2) {
result2=false;
continue;
}else {
result=false;
break;
}
}
char a=IN.charAt(IN.length()-1);
int i=0;
while(i<lastnumber.length) {
if(a==lastnumber[i]) {
break;
}
i++;
if(i==lastnumber.length) {
result=false;
}
}
return result;
}
//-------手机号规则
public static String Phone(ArrayList<User> user_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入手机号:");
String PN=sc.next();
//长度
boolean result1=P_length(PN);
//0开头
boolean result2=P_zero(PN);
//组成
boolean result3=P_compose(PN);
if(result1&&result2&&result3) {
}else {
System.out.println("手机号输入不合法,请重新输入:");
System.out.println();
Phone(user_t);
}
return PN;
}
//手机号--长度
public static boolean P_length(String IN) {
boolean result=false;
if(IN.length()==11) {
result=true;
}
return result;
}
//手机号---0开头
public static boolean P_zero(String IN) {
boolean result=true;
char c='0';
if(IN.charAt(0)==c) {
result=false;
}
return result;
}
//手机号--组成
public static boolean P_compose(String IN) {
boolean result=true;
boolean result2=false;
char[] number={'0','1','2','3','4','5','6','7','8','9'};
for(int i=0;i<IN.length();i++) {
char c=IN.charAt(i);
int j=0;
while(j<number.length) {
if(c==number[j]) {
result2=true;
break;
}
j++;
if(j==number.length) {
result=false;
}
}
if(result2) {
result2=false;
continue;
}else {
result=false;
break;
}
}
return result;
}
//忘记密码---------------------------
public static void ForgetPassword(ArrayList<User> user_t,ArrayList<Student> stu_t) {
Scanner sc=new Scanner(System.in);
System.out.println("请输用户名:");
String username=sc.next();
boolean result=UserNameCheck(user_t,username);
if(result) {
int a=UserName(user_t,username);
User u=user_t.get(a);
System.out.println("需要确认信息后才可进行更改");
System.out.println();
System.out.println("请输入身份证号码:");
String in=sc.next();
System.out.println("请输入手机号:");
String pn=sc.next();
if(u.getIdentifyNumber().equals(in)&&u.getPhoneNumber().equals(pn)) {//身份确认成功
System.out.println("请输入新密码:");
String newpassword=sc.next();
u.setpassword(newpassword);
System.out.println("修改成功");
System.out.println();
System.out.println("自动返回登录页面");
LoginInterface(user_t,stu_t);
}//身份确认失败
else {
System.out.println("账号信息不匹配,修改失败!");
System.out.println("自动返回登录页面");
LoginInterface(user_t,stu_t);
}
}
else {
System.out.println("未注册!");
System.out.println("自动返回登录页面");
LoginInterface(user_t,stu_t);
}
}
//用户名是否存在
public static boolean UserNameCheck(ArrayList<User> user_t,String username) {
boolean result=false; //无重复----false
for(int i=0;i<user_t.size();i++) {
User u=user_t.get(i);
if(u.getusername().equals(username)){
result=true; //重复----true
}
}
return result;
}
//获取username 具体位置
public static int UserName(ArrayList<User> user_t,String username) {
int result=0;
for(int i=0;i<user_t.size();i++) {
User u=user_t.get(i);
if(u.getusername().equals(username)){
result=i;
}
}
return result;
}
剩下的main方法部分,我个人感觉是没有必要搬上来的,但发都发了,别的都上了,那我也就雨露均沾吧。
package Student_Management_System;
import java.util.*;
public class StudentSystem {
public static void main(String[] args) {
//======================================用户初始信息载入======================================//
//创建集合
ArrayList<User> user_t=new ArrayList<>();
//创建初始对象:
User u1=new User("Liu666","123456","370704666666666666","16666666666");
User u2=new User("Zhao888","12345678","371721888888888888","17888888888");
//将对象录入集合
user_t.add(u1);
user_t.add(u2);
//======================================学生初始信息载入======================================//
//创建集合
ArrayList<Student> stu_t=new ArrayList<>();
// 创建初始对象
Student stu1=new Student("nb001","王博",24,"山东省济南市历下区");
Student stu2=new Student("nb002","王二牛",20,"山东省菏泽市牡丹区");
Student stu3=new Student("nb003","李威",22,"山东省聊城市单县");
Student stu4=new Student("nb004","刘不凡",21,"山东省青岛市黄岛区");
Student stu5=new Student("nb005","张丰年",23,"山东省日照市五莲县");
Student stu6=new Student("nb006","神秘人",18,"**省**市**区");
//将对象录入集合
stu_t.add(stu1);
stu_t.add(stu2);
stu_t.add(stu3);
stu_t.add(stu4);
stu_t.add(stu5);
stu_t.add(stu6);
//======================================NB学校学生管理系统======================================//
LoginInterface(user_t,stu_t);
}
身份证号,手机号都是瞎编的,如有雷同,立马删除,影响到他人,我表示抱歉。
以上就是我用3天时间写出来的学生管理系统了,感谢阅读。