要求: 创建简单的学生管理系统:功能包括学生增添,修改,删除,查询全部学生信息,按照学号查找学生信息,密码登录,退出时按照一定的格式获取邮箱。
为了实现以上功能,我创建了3个类
第一个类代码如下:
package student;
public class Insertin {
private int id; //学号
private String name; //学生姓名
private String classes;//学生班级
public Insertin(int id, String name, String classes) {
//构造参数int id, String name, String classes的方法
this.id = id;
this.name = name;
this.classes = classes;
}
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 String getClasses() {
return classes;
}
public void setClasses(String classes) {
this.classes = classes;
}
此类的主要目的是声明学生这个对象,并且声明其学号,姓名,班级等属性,并为其构造set,get方法
第二个类的代码如下:
package student;
import java.util.Scanner;
public class Studentt {
public static void main(String[] args) {
Insert Inn = new Insert();
Inn.zhujie(); //调用欢迎使用界面方法
Inn.check(); //调用密码输入的方法
boolean flag = true;
do {
System.out.println("功能菜单:");
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("6、退出系统");
System.out.println("提示:为了您的方便使用,请在使用系统前,最大化控制台。");
System.out.println("---------------------------------------------");
System.out.println("请输入对应的数字进行操作:");
Scanner sc = new Scanner(System.in);
int choose = sc.nextInt();
switch (choose) {
case 1:
Inn.selectall(); //调用查询全部学生信息的代码
break;
case 2:
Inn.selectid(); //调用按学号查询学生信息的方法
break;
case 3:
Inn.add(); //调用添加学生信息的方法
break;
case 4:
Inn.delete(); //调用根据学号删除学生信息的方法
break;
case 5:
Inn.update(); //调用根据学号修改学生信息的方法
break;
case 6:
Inn.e_mail(); //调用判断邮箱的输入格式是否正确的方法
flag = false;
break;
}
} while (flag);
}}
此类主要是把主菜单描述出来,并调用第三个类中的方法实现上述功能
第三个类的代码如下:
package student;
import java.util.ArrayList;
import java.util.Scanner;
import student.Insertin;
public class Insert {
ArrayList list = new ArrayList(); //创建一个数组,属于全局变量
Scanner sc = new Scanner(System.in); //实例化一个对象,实现从控制台输入信息
String username = "Admin"; //设置用户名
String password = "123b"; //设置密码
public void zhujie() {
System.out.println("---------------------------------------------");
System.out.println("\t\t欢迎进入学生管理系统");
System.out.println("---------------------------------------------");
} //主界面中欢迎进入的调用方法
public void check() {
boolean flag=true;
while (flag) {
System.out.print("请输入用户名:");
String nname = sc.next(); //从控制台输入用户名
System.out.print("请输入密码:");
String pwdd = sc.next(); //从控制台输入密码
if ((username.equalsIgnoreCase(nname)) && password.equals(pwdd)) {
//equalsIgnoreCase()表示不区分大小写,equals()大小写必须完全一致
System.out.println("登录成功!");
flag=false; //用户名密码都正确,则退出该方法
} else {
System.out.println("用户名或密码错误!");
flag=true; //用户名或密码若错误,将一直重复该方法,直至用户名,密码都正确
}
if (!flag) {
break;
}
}
} //用户登录的调用方法
public void add() {
System.out.print("请输入你要添加几个学生信息:");
int number = sc.nextInt();
System.out.println("-----------------------------------------");
for (int i = 0; i < number; i++) {
Insertin inw = new Insertin();
/*实例化一个对象,必须写在for循环内部,因为在外部只声明了一个对象,
当添加的学生信息大 于1时,后输入的学生 信息会覆盖前面所输
入的信息,最终只能得到最后一次输入的学生信息,而放在for内部时
,每输入一个学生信息时,都会实例化 一个对象*/
System.out.print("请添加学生信息\n");
System.out.println("-----------------------------------------");
System.out.print("请输入学生姓名:");
inw.setName(sc.next());
System.out.print("请输入学生班级:");
inw.setClasses(sc.next());
inw.setId(list.size() + 1);
System.out.print("添加成功!\n");
System.out.print("-----------------------------------------\n");
list.add(inw);//每得到一个学生信息,就将其输入到数组中去
}}
public void selectall() {
System.out.println("学生信息表:");
System.out.println("-----------------------------------");
if(list.size()==0){
System.out.println("未插入学生信息\n");
} //当数组长度为0时,未插入学生信息
else{
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
//依次输出学生信息
}}
} //查找全部的学生信息
public void selectid() {
System.out.println("请输入你要查找的学生学号:");
Scanner sc = new Scanner(System.in);
int id = sc.nextInt();
if (id > list.size()) {
System.out.println("没有该学生信息!");
} else {
for (int i = 0; i < list.size(); i++) {
if (i == id - 1) {
//注意学号和数组调用的关系
System.out.println(list.get(i).toString());
break;
}
}
}
} //根据学号显示学生信息
public void delete() {
boolean flag = true;
System.out.print("请输入你要删除学生学号:");
int num = sc.nextInt();
for (int i = 0; i < list.size(); i++) {
if (num == (list.get(i).getId())) {
list.remove(i); //remove是数组中的删除方法
System.out.print("删除成功!");
for (int j = 0; j < list.size(); j++) {
list.get(j).setId(j + 1);
//删除成功后,要重置学的学号生信息,以免再次添加学生信息时,按照数组的长 度 自动添加学 号时,学号的重复
}
flag = false;
break;
}
}
if (flag) {
System.out.println("您所删除的学生不存在");
}
} //根据学号删除学生信息
public void update() {
System.out.print("请输入你要修改的学生学号:");
int numm = sc.nextInt();
boolean flag = true;
for (int i = 0; i < list.size(); i++) {
if (numm == (list.get(i).getId())) {
System.out.println("此学生原信息:" + list.get(i).toString());
System.out.println("请修改此学生的信息:");
System.out.println("-----------------------------------");
System.out.println("请重新输入学生姓名:");
list.get(i).setName(sc.next()); //通过覆盖更新新的学生姓名
System.out.print("请重新输入学生班级:");
list.get(i).setClasses(sc.next());//通过覆盖更新新的学生班级
System.out.println("修改成功。");
flag = false;
break;
}
}
if (flag) {
System.out.println("您所更新的学生信息不存在");
}
} //通过学号修改学生信息
public void e_mail(){
System.out.println("请输入你的邮箱:");
boolean flag = true;
while(flag){
String mail=sc.next();
if(mail.matches( "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.com")){
/*我们当时规定的格式时[email protected]
* 即@前必须有字符,@和.com之间必须有字符,.com必须在末尾
* 这里我用的是String类中的正则表达式方法,因为我本人也不是很熟悉该方法,这里我就不写了
*/
System.out.println("学生录入信息已发送至"+ mail+"邮箱");
System.out.println("系统已退出,欢迎下次使用。。。");
flag = false;
}
else{
System.out.println("请重新输入你的邮箱:");
flag = true;
}
if (!flag) {
break;
}
}
}
} //判断邮箱的格式是否符合规范