针对目前我们的所学内容,完成一个综合案例:学生管理系统。该系统主要功能如下:
主页面功能
-
添加学生信息:通过键盘录入学生信息,添加到集合中
-
删除学生信息:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
-
修改学生信息:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
-
查询全部学生信息:将集合中的所有学生对象信息进行展示
-
查询某个学生信息:通过键盘录入要查询学生的学号,将该学生对象信息进行展示
-
退出系统:结束程序
登录页面功能
-
用户登录:录入学号,密码完成登录功能
-
退出系统:结束程序
1、学生类Student
1.学生属性
设置学生对象,包含学号(sid),姓名(name),密码(pass),年龄(age)和住址(address)等属性
public class Student {
private int sid;
private String name;
private String pss;
private int age;
private String address;
public Student() {
}
public Student(int sid, String name, String pss, int age, String address) {
this.sid = sid;
this.name = name;
this.pss = pss;
this.age = age;
this.address = address;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPss() {
return pss;
}
public void setPss(String pss) {
this.pss = pss;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2、操作类StudentOperation
2.1添加学生
从键盘上接收参数, 封装一个学生对象, 再将对象保存到集合中 1 定义一个集合,用于保存学生信息 2 定义一个add方法, 方法内完成添加学生的功能 ①创建学生对象 ②键盘录入学生信息,给学生对象赋值 ③将学生对象添加到集合中 ④提示添加成功信息 3 在添加学生的选项里调用添加学生的方法 学生的初始密码:1234 生成一个6位数字的学号,保证唯一
/**
* 添加学生add():无参数和返回值
*/
public void addStudent(){
//1.提示用户输入姓名
System.out.println("请输入学生姓名:");
String name = sc.next();
//2.提示用户输入年龄
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
//3.提示用户输入所在地
System.out.println("请输入学生所在地:");
String address = sc.next();
//4.构造学生对象
//4.1 随机一个6位数字的学号(学号不能重复)
Random r = new Random();
int sid = r.nextInt(999999 - 100001 + 1)+100001;
//4.2 创建学生对象
Student student = new Student(sid,name,"1234",age,address);
//5.将学生对象,存入list集合中
list.add(student);
System.out.println("恭喜您,添加学生成功,学号" + sid + ",姓名" + name + ",地址为" + address);
}
2.2 删除学生
键盘上接收学号, 然后根据学号查询学生, 然后删除 1 定义一个delete方法 2 方法中从键盘上接收要删除学生的学号 3 遍历集合,获取每个学生对象 4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生对象从集合中删除 5 在删除学生选项里调用删除学生的方法
/**
* 删除学生delete():
*/
public void deleteStudentById(){
//提示用户输入要删除的学生学号
System.out.println("请输入您要删除的学生学号:");
int deleteId = sc.nextInt();
//循环list集合
for (int i = 0; i < list.size(); i++) {
//获取每一个student对象
Student student = list.get(i);
//获取每个学生对象的id
int studentSid = student.getSid();
//比较学生id和待删除id是否一致
if(studentSid == deleteId){
//从集合中,将此条数据删除
list.remove(i);
System.out.println("删除" + student.getName() + "学生成功~~");
return;
}
}
System.out.println("不存在该学号的学生~~~");
}
2.3修改学生
先从键盘上接收学号, 判断学号是否存在, 存在的情况下再接收其他属性, 执行修改 1 定义一个update方法 2 方法中从键盘上接收要修改学生的学号,并根据学号查询到要修改的学生 3 通过键盘录入学生对象所需的信息,赋值到对象中 4 在修改学生选项里调用修改学生的方法
/**
* 修改学生update():两种方法
*/
//方法2:
public void updateStudentById2(){
//提示用户输入要修改的学生学号
System.out.println("请输入您要修改学生学号:");
int updateId = sc.nextInt();
Student stu = null;
//根据学号查询学生
//循环list
int i;
for (i = 0; i < list.size(); i++) {
//获取每个学生对象
Student student = list.get(i);
//获取学生对象的id
int studentSid = student.getSid();
//比较id是否一致
if(studentSid == updateId){
stu = student;
}
}
//若比较id一致
if(stu != null) {
//提示输入学号
System.out.println("请您输入修改后的学生学号:");
//判断修改后的学号是否存在,若存在则重新输入
while (true) {
int inputID = sc.nextInt();
if (!exist(inputID)) {
stu.setSid(inputID);
break;
} else {
System.out.println("该学号已存在~~~");
System.out.println("请您重新输入修改后的学生学号:");
}
}
//提示输入姓名
System.out.println("请您输入修改后的学生姓名:");
stu.setName(sc.next());
//提示输入年龄
System.out.println("请您输入修改后的学生年龄:");
stu.setAge(sc.nextInt());
//提示输入所在地
System.out.println("请您输入修改后的学生所在地:");
stu.setAddress(sc.next());
//提示修改成功
System.out.println("恭喜您,修改学生信息成功,修改后的信息为:学号:" + stu.getSid() + ",姓名:" + stu.getName() +
",年龄:" + stu.getAge() + ",所在地:" + stu.getAddress());
}
//若比较id不一致,输出提示
else {
System.out.println("学号输入错误,不存在该学号的学生~~~");
}
}
//方法1:
public void updateStudentById(){
//提示用户输入要修改的学生学号
System.out.println("请输入您要修改学生学号:");
int updateId = sc.nextInt();
//根据学号查询学生
//循环list
for (int i = 0; i < list.size(); i++) {
//获取每个学生对象
Student student = list.get(i);
//获取学生对象的id
int studentSid = student.getSid();
//比较id是否一致
if(studentSid == updateId){
System.out.println("请您输入修改后的学生学号:");
//判断修改后的学号是否存在,若存在则重新输入
while (true){
int inputID = sc.nextInt();
if(!exist(inputID)){
student.setSid(inputID);
break;
}else {
System.out.println("该学号已存在~~~");
System.out.println("请您重新输入修改后的学生学号:");
}
}
//提示输入学生姓名
System.out.println("请您输入修改后的学生姓名:");
student.setName(sc.next());
//提示输入学生年龄
System.out.println("请您输入修改后的学生年龄:");
student.setAge(sc.nextInt());
//提示输入学生所在地
System.out.println("请您输入修改后的学生所在地:");
student.setAddress(sc.next());
//在集合中修改学生对象
list.set(i,student);
System.out.println("恭喜您,修改学生信息成功,修改后的信息为:学号:" + student.getSid() + ",姓名:" + student.getName() +
",年龄:" + student.getAge() + ",所在地:" + student.getAddress());
return;
}
}
//若比较id不一致,输出提示
System.out.println("学号输入错误,不存在该学号的学生~~~");
}
//判断学号是否已经存在
public boolean exist(int num){
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int studentSid = student.getSid();
if(studentSid == num){
return true;
}
}
return false;
}
2.4查询学生
将集合中所有的学生查询打印出来 1 定义一个show方法 2 方法内遍历集合,将学生信息进行输出 3 在查看所有学生选项里调用查看学生方法
/**
* 查看所有学生findAll():
*/
public void findAll(){
System.out.println("==========展示当前系统中的" + list.size() + "位学生的信息==========");
System.out.println("学生编号" + " " + "学生姓名" + " " +
"学生年龄" + " " + "学生地址");
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
System.out.println(" " + student.getSid() + " " + student.getName() + " "
+ student.getAge() + " " + student.getAddress());
}
}
2.5查看某个学生信息
先从键盘上接收学号, 判断学号是否存在, 存在的情况下, 执行查询 1 定义一个find方法 2 方法中从键盘上接收要查询学生的学号,并根据学号查询到要查询的学生 3 找到该学生对象,获取其他属性信息,并打印 4 不存在返回提示
/**
* 根据学号查看某个学生信息findById():
*/
public void findStudentById(){
System.out.println("请您输入想要查询的学生id:");
int findId = sc.nextInt();
System.out.println("==========展示当前系统中学号为" + findId + "的学生的信息==========");
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int studentSid = student.getSid();
if(studentSid == findId){
System.out.println("学生编号" + " " + "学生姓名" + " "
+ "学生年龄" + " " + "学生地址");
System.out.println(" " + student.getSid() + " " + student.getName() + " "
+ student.getAge() + " " + student.getAddress());
return;
}
}
System.out.println("学号输入错误,不存在该学号的学生~~~");
}
2.6管理员登录
根据用户输入的学号和密码完成登录 登录成功进入个人页面
登录成功
登录失败页面
/**
* 用户登录:
* 返回值:true:登录成功
* false:登录失败
*/
public boolean login2(){
for (int j = 1; j <= 3; j++) {
//提示用户输入账号
System.out.println("请输入您的账号:");
int myId = sc.nextInt();
//提示用户输入密码
System.out.println("请输入您的密码:");
String myPass = sc.next();
//使用账号查询学生
Student stu = null;//需要查找的学生
//查询是否存在该id
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int studentSid = student.getSid();
if(studentSid == myId){
stu = student;
}
}
if(stu != null && stu.getPss().equals(myPass)){
System.out.println("登录成功,欢迎您," + stu.getName());
return true;
}else {
if(j<3){
System.out.println("用户名或密码输入有误,请重新输入,您还有" + (3-j) + "次机会!");
}
}
}
System.out.println("次数已用完,登录失败~~~");
return false;
}
3、测试类StudentOperationTest
3.1登录页面
修改代码,完成用户登录的操作
用输出语句完成主界面的编写 ----------欢迎来到用户管理系统---------- 1.用户登录 2.退出系统 请您输入要进行的操作: 用Scanner实现键盘输入 用switch语句完成选择的功能 用循环完成功能结束后再次回到主界面
/**
*在测试类的主方法中实现登录页面
*/
public static void main(String[] args) {
//创建操作类
StudentOperation studentOperation = new StudentOperation();
//登录页面
Scanner sc = new Scanner(System.in);
while (true){
//2.通过输出语句,构造页面展示效果
System.out.println("----------欢迎来到用户管理系统----------");
System.out.println("1.用户登录");
System.out.println("2.退出系统");
System.out.println("请您输入要进行的操作:");
//3.通过scanner,获取键盘输入
int option = sc.nextInt();
//4.通过switch,判断进入不同的处理分支
switch (option){
case 1:
System.out.println("----------用户登录----------");
boolean login = studentOperation.login();
if(login){
//登录成功进入主页面
homePage(studentOperation);
}
break;
case 2:
System.out.println("----------退出系统----------");
return;
default:
System.out.println("您输入的操作命令有误~~~");
}
}
}
3.2欢迎页面
用输出语句完成主界面的编写 ==========欢迎来到XXXX高校学生管理系统========== 1.添加学生信息 2.删除学生信息 3.修改学生信息 4.查询全部学生信息 5.查询某个学生信息 6.退出系统 请您输入要进行的操作: 用Scanner实现键盘输入 用switch语句完成选择的功能 用循环完成功能结束后再次回到主界面
/**
*在测试类中写一个子方法实现主页面操作
* 静态方法:主页面
*/
public static void homePage(StudentOperation studentOperation){
Scanner sc = new Scanner(System.in);
//1.死循环
while (true){
//2.通过输出语句,构造页面展示效果
System.out.println("==========欢迎来到XXXX高校学生管理系统==========");
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("请您输入要进行的操作:");
//3.通过scanner,获取键盘输入
int option = sc.nextInt();
//4.通过switch,判断进入不同的处理分支
switch (option){
case 1:
System.out.println("==========添加学生信息==========");
studentOperation.addStudent();
break;
case 2:
System.out.println("==========删除学生信息==========");
studentOperation.deleteStudentById();
break;
case 3:
System.out.println("==========修改学生信息==========");
studentOperation.updateStudentById2();
break;
case 4:
studentOperation.findAll();
break;
case 5:
studentOperation.findStudentById();
break;
case 6:
System.out.println("==========退出XXXX高校学生管理系统==========");
System.out.println("欢迎下次使用~~~");
return;
default:
System.out.println("您输入的操作命令有误~~~");
}
}
}
4、操作类完整代码
public class StudentOperation {
//模拟数据库,使用ArrayList模拟存取学生数据
private ArrayList<Student> list = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
//为了方便测试,通过构造器,模拟学生数据
public StudentOperation() {
//System.out.println("通过构造器,模拟学生数据");
list.add(new Student(1001,"张三","1234",20,"河北省张家口市"));
list.add(new Student(1002,"李四","1234",21,"河北省石家庄市"));
list.add(new Student(1003,"王五","1234",22,"河北省保定市"));
list.add(new Student(1004,"赵六","1234",20,"北京市顺义区"));
}
/**
* 添加学生add():无参数和返回值
*/
public void addStudent(){
//1.提示用户输入姓名
System.out.println("请输入学生姓名:");
String name = sc.next();
//2.提示用户输入年龄
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
//3.提示用户输入所在地
System.out.println("请输入学生所在地:");
String address = sc.next();
//4.构造学生对象
//4.1 随机一个6位数字的学号(学号不能重复)
Random r = new Random();
int sid = r.nextInt(999999 - 100001 + 1)+100001;
//4.2 创建学生对象
Student student = new Student(sid,name,"1234",age,address);
//5.将学生对象,存入list集合中
list.add(student);
System.out.println("恭喜您,添加学生成功,学号" + sid + ",姓名" + name + ",地址为" + address);
}
/**
* 删除学生delete():
*/
public void deleteStudentById(){
//提示用户输入要删除的学生学号
System.out.println("请输入您要删除的学生学号:");
int deleteId = sc.nextInt();
//循环list集合
for (int i = 0; i < list.size(); i++) {
//获取每一个student对象
Student student = list.get(i);
//获取每个学生对象的id
int studentSid = student.getSid();
//比较学生id和待删除id是否一致
if(studentSid == deleteId){
//从集合中,将此条数据删除
list.remove(i);
System.out.println("删除" + student.getName() + "学生成功~~");
return;
}
}
System.out.println("不存在该学号的学生~~~");
}
/**
* 修改学生update():
*/
public void updateStudentById(){
//提示用户输入要修改的学生学号
System.out.println("请输入您要修改学生学号:");
int updateId = sc.nextInt();
//根据学号查询学生
//循环list
for (int i = 0; i < list.size(); i++) {
//获取每个学生对象
Student student = list.get(i);
//获取学生对象的id
int studentSid = student.getSid();
//比较id是否一致
if(studentSid == updateId){
System.out.println("请您输入修改后的学生学号:");
//判断修改后的学号是否存在,若存在则重新输入
while (true){
int inputID = sc.nextInt();
if(!exist(inputID)){
student.setSid(inputID);
break;
}else {
System.out.println("该学号已存在~~~");
System.out.println("请您重新输入修改后的学生学号:");
}
}
//提示输入学生姓名
System.out.println("请您输入修改后的学生姓名:");
student.setName(sc.next());
//提示输入学生年龄
System.out.println("请您输入修改后的学生年龄:");
student.setAge(sc.nextInt());
//提示输入学生所在地
System.out.println("请您输入修改后的学生所在地:");
student.setAddress(sc.next());
//在集合中修改学生对象
list.set(i,student);
System.out.println("恭喜您,修改学生信息成功,修改后的信息为:学号:" + student.getSid() + ",姓名:" + student.getName() +
",年龄:" + student.getAge() + ",所在地:" + student.getAddress());
return;
}
}
//若比较id不一致,输出提示
System.out.println("学号输入错误,不存在该学号的学生~~~");
}
//判断学号是否已经存在
public boolean exist(int num){
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int studentSid = student.getSid();
if(studentSid == num){
return true;
}
}
return false;
}
/**
* 查看所有学生findAll():
*/
public void findAll(){
System.out.println("==========展示当前系统中的" + list.size() + "位学生的信息==========");
System.out.println("学生编号" + " " + "学生姓名" + " " +
"学生年龄" + " " + "学生地址");
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
System.out.println(" " + student.getSid() + " " + student.getName() + " "
+ student.getAge() + " " + student.getAddress());
}
}
/**
* 根据学号查看某个学生信息findById():
*/
public void findStudentById(){
System.out.println("请您输入想要查询的学生id:");
int findId = sc.nextInt();
System.out.println("==========展示当前系统中学号为" + findId + "的学生的信息==========");
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int studentSid = student.getSid();
if(studentSid == findId){
System.out.println("学生编号" + " " + "学生姓名" + " "
+ "学生年龄" + " " + "学生地址");
System.out.println(" " + student.getSid() + " " + student.getName() + " "
+ student.getAge() + " " + student.getAddress());
return;
}
}
System.out.println("学号输入错误,不存在该学号的学生~~~");
}
/**
* 用户登录:
* 返回值:true:登录成功
* false:登录失败
*/
public boolean login2(){
for (int j = 1; j <= 3; j++) {
//提示用户输入账号
System.out.println("请输入您的账号:");
int myId = sc.nextInt();
//提示用户输入密码
System.out.println("请输入您的密码:");
String myPass = sc.next();
//使用账号查询学生
Student stu = null;//需要查找的学生
//查询是否存在该id
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
int studentSid = student.getSid();
if(studentSid == myId){
stu = student;
}
}
if(stu != null && stu.getPss().equals(myPass)){
System.out.println("登录成功,欢迎您," + stu.getName());
return true;
}else {
if(j<3){
System.out.println("用户名或密码输入有误,请重新输入,您还有" + (3-j) + "次机会!");
}
}
}
System.out.println("次数已用完,登录失败~~~");
return false;
}
}
5、测试类完整代码
public class StudentOperationTest {
public static void main(String[] args) {
//创建操作类
StudentOperation studentOperation = new StudentOperation();
//登录页面
Scanner sc = new Scanner(System.in);
while (true){
//2.通过输出语句,构造页面展示效果
System.out.println("----------欢迎来到用户管理系统----------");
System.out.println("1.用户登录");
System.out.println("2.退出系统");
System.out.println("请您输入要进行的操作:");
//3.通过scanner,获取键盘输入
int option = sc.nextInt();
//4.通过switch,判断进入不同的处理分支
switch (option){
case 1:
System.out.println("----------用户登录----------");
boolean login = studentOperation.login();
if(login){
//主页面
homePage(studentOperation);
}
break;
case 2:
System.out.println("----------退出系统----------");
return;
default:
System.out.println("您输入的操作命令有误~~~");
}
}
}
/**
* 静态方法:主页面
*/
public static void homePage(StudentOperation studentOperation){
Scanner sc = new Scanner(System.in);
//1.死循环
while (true){
//2.通过输出语句,构造页面展示效果
System.out.println("==========欢迎来到XXXX高校学生管理系统==========");
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("请您输入要进行的操作:");
//3.通过scanner,获取键盘输入
int option = sc.nextInt();
//4.通过switch,判断进入不同的处理分支
switch (option){
case 1:
System.out.println("==========添加学生信息==========");
studentOperation.addStudent();
break;
case 2:
System.out.println("==========删除学生信息==========");
studentOperation.deleteStudentById();
break;
case 3:
System.out.println("==========修改学生信息==========");
studentOperation.updateStudentById2();
break;
case 4:
studentOperation.findAll();
break;
case 5:
studentOperation.findStudentById();
break;
case 6:
System.out.println("==========退出XXXX高校学生管理系统==========");
System.out.println("欢迎下次使用~~~");
return;
default:
System.out.println("您输入的操作命令有误~~~");
}
}
}
}