简介
这篇博客参考
学生管理系统要实现的功能
整段源码
student_main.java主函数
package student_lei;
import java.util.Scanner;
import java.util.ArrayList;
public class student_main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//定义一个集合,装入student类 ArrayList arr = new ArrayList<>();
//定义初使页面,并使用死循环,退出使用system.exit(0) 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("输入你的选择:");
int n = sc.nextInt();
switch (n) {
//按照输入的数字调用对应的函数 case 1 -> addStudent(arr);
case 2 -> deleteStudent(arr);
case 3 -> updateStudent(arr);
case 4 -> showStudent(arr);
case 5 -> System.exit(0);
}
}
}
//添加学生函数 public static void addStudent(ArrayList arr) {
Scanner sc = new Scanner(System.in);
//定义在外面,使后面的print能够调用 String sid;
//用死循环配合isUsed函数判断是否输入相同学号 while (true) {
System.out.println("学号");
sid = sc.nextLine();
if (isUsed(arr, sid)) {
System.out.println("学号输入重复,请重新输入");
} else break;
}
System.out.println("姓名");
String name = sc.nextLine();
System.out.println("年龄");
String age = sc.nextLine();
System.out.println("居住地");
String address = sc.nextLine();
//装进student类中 student s = new student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//把类装到集合中 arr.add(s);
System.out.println("添加学生成功!");
}
//删除学生函数 public static void deleteStudent(ArrayList arr) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除学生的学号:");
String sid = sc.nextLine();
//用boolean来判断是否删除成功,Java中不能把0当作false boolean index = true;
for (int j = 0; j < arr.size(); j++) {
student s = arr.get(j);
//遍历加if,删除对应的学生 if (s.getSid().equals(sid)) {
arr.remove(j);
index = false;
System.out.println("删除成功!");
break;
}
}
if (index) {
System.out.println("学号输入错误");
}
}
//修改学生函数 public static void updateStudent(ArrayList arr) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的学生学号");
String n = sc.nextLine();
int temp = 0;
for (int j = 0; j < arr.size(); j++) {
if (arr.get(j).getSid().equals(n)) {
temp = j;
break;
}
}
//修改学生功能菜单 System.out.println("-----------");
System.out.println("1.修改学号");
System.out.println("2.修改姓名");
System.out.println("3.修改年龄");
System.out.println("4.修改居住地");
System.out.println("请输入你的选择");
int s = sc.nextInt();
switch (s) {
case 1 -> {
System.out.println("输入新的学号");
//与which连用时,删除缓存 sc.nextLine();
String newSid = sc.nextLine();
arr.get(temp).setSid(newSid);
System.out.println("修改成功");
}
case 2 -> {
System.out.println("输入新姓名");
sc.nextLine();
String newName = sc.nextLine();
arr.get(temp).setName(newName);
System.out.println("修改成功");
}
case 3 -> {
System.out.println("输入新年龄");
sc.nextLine();
String newAge = sc.nextLine();
arr.get(temp).setAge(newAge);
System.out.println("修改成功");
}
case 4 -> {
System.out.println("输入新居住地");
sc.nextLine();
String newAddress = sc.nextLine();
arr.get(temp).setAddress(newAddress);
System.out.println("修改成功");
}
}
}
//展示学生函数 public static void showStudent(ArrayList arr) {
//判断是否有数据存入其中 if (arr.size() == 0) {
System.out.println("无数据,请先输入数据");
return;
}
//使用制表符制作表格,更好的展示 System.out.println("学号" + "\t" + "姓名" + "\t" + "年龄" + "\t" + "地址");
//可以使用增强for循环,针对只对数组,集合中对象单一遍历操作的函数 for (student s : arr) {
System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "\t"+ s.getAddress());
}
}
//判断是否有相同学号的函数,传入集合和输入的新学号,在studentAdd函数中使用,返回值根据情况有所不同 public static boolean isUsed(ArrayList arr, String sid) {
boolean n = false;
for (student s : arr) {
if (s.getSid().equals(sid)) {
n = true;
break;
}
}
return n;
}
}
student.java类
package student_lei;
public class student {
//学号 private String sid;
//姓名 private String name;
//年龄 private String age;
//居住地 private String address;
public student() {}
//使用command + n 自动生成构造函数,配合shift,还能生成get,set函数 public student(String sid, String name, String age, String address) {
this.sid = sid;
this.name = name;
this.age = age;
this.address = address;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
如何利用IntelliJ自动生成构造函数,set(),get()函数
相信大家都很厌倦写构造函数和get,set函数了,如果你使用的是intellij,那么可以用一个快捷键来快速解决哦,用完之后我直接感动,以后再也不用像个 一样自己写了
Mac快捷键command + n
Mac我会配合自己的截图,如果使用Windows,我查到快捷键的是alt + insert,用windows的小伙伴如果不清楚的话,可以搜索一下哦
先创建一个Java类,然后随便定义几个变量,按下command + n 后,会有这个界面
选你想选的,这里我选Getter + Setter,然后会有这个界面
一般来说,你只能点一个,但是如果按下shift的同时点击,就能达到我这样的多选效果
最后成果图
省时又省力,芜湖
学生管理系统初始化界面书写
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("输入你的选择:");
int n = sc.nextInt();
switch (n) {
//按照输入的数字调用对应的函数 case 1 -> addStudent(arr);
case 2 -> deleteStudent(arr);
case 3 -> updateStudent(arr);
case 4 -> showStudent(arr);
case 5 -> System.exit(0);
}
}
前面一大段输出函数,用来输出一开始的选择界面
这没说明好说的,到后面的switch(
添加学生函数
isUsed函数
使用这个函数,是为了完成添加学生类的附加功能,判断学号是否重合
public static boolean isUsed(ArrayList arr, String sid) {
boolean n = false;
for (student s : arr) {
if (s.getSid().equals(sid)) {
n = true;
break;
}
}
return n;
}
}
要用一个函数来判断,可以使用boolean来定义,代码中的for循环为
添加学生
public static void addStudent(ArrayList arr) {
Scanner sc = new Scanner(System.in);
//定义在外面,使后面的print能够调用 String sid;
//用死循环配合isUsed函数判断是否输入相同学号 while (true) {
System.out.println("学号");
sid = sc.nextLine();
if (isUsed(arr, sid)) {
System.out.println("学号输入重复,请重新输入");
} else break;
}
System.out.println("姓名");
String name = sc.nextLine();
System.out.println("年龄");
String age = sc.nextLine();
System.out.println("居住地");
String address = sc.nextLine();
//装进student类中 student s = new student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//把类装到集合中 arr.add(s);
System.out.println("添加学生成功!");
}
重点在为什么把String sid放到while循环定义外,而不是直接使用
String sid = sc.nextLine()
因为定义在while循环内的变量循环外是无法访问到的,这也是我们容易忽视的一点
删除学生函数
public static void deleteStudent(ArrayList arr) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除学生的学号:");
String sid = sc.nextLine();
//用boolean来判断是否删除成功,Java中不能把0当作false boolean index = true;
for (int j = 0; j < arr.size(); j++) {
student s = arr.get(j);
//遍历加if,删除对应的学生 if (s.getSid().equals(sid)) {
arr.remove(j);
index = false;
System.out.println("删除成功!");
break;
}
}
if (index) {
System.out.println("学号输入错误");
}
}
这个函数中,比较重要的是对于index的使用,我是第一次碰到,删除成功很好输出,跟在remove的后面就行了,但是输出失败(学号输入错误)的提示该放在哪呢,如果直接放在for循环外,那么输出成功后也会提示输出失败,所以,需要把加一个判断条件index,如果输出成功,就把index赋值为false,这样就不会在输出成功后也提示输出失败了
修改学生函数
public static void updateStudent(ArrayList arr) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的学生学号");
String n = sc.nextLine();
int temp = 0;
for (int j = 0; j < arr.size(); j++) {
if (arr.get(j).getSid().equals(n)) {
temp = j;
break;
}
}
//修改学生功能菜单 System.out.println("-----------");
System.out.println("1.修改学号");
System.out.println("2.修改姓名");
System.out.println("3.修改年龄");
System.out.println("4.修改居住地");
System.out.println("请输入你的选择");
int s = sc.nextInt();
switch (s) {
case 1 -> {
System.out.println("输入新的学号");
//与which连用时,删除缓存 sc.nextLine();
String newSid = sc.nextLine();
arr.get(temp).setSid(newSid);
System.out.println("修改成功");
}
case 2 -> {
System.out.println("输入新姓名");
sc.nextLine();
String newName = sc.nextLine();
arr.get(temp).setName(newName);
System.out.println("修改成功");
}
case 3 -> {
System.out.println("输入新年龄");
sc.nextLine();
String newAge = sc.nextLine();
arr.get(temp).setAge(newAge);
System.out.println("修改成功");
}
case 4 -> {
System.out.println("输入新居住地");
sc.nextLine();
String newAddress = sc.nextLine();
arr.get(temp).setAddress(newAddress);
System.out.println("修改成功");
}
}
}
看起来有一大段代码,但是重要的只有一行代码,就是
sc.nextLine();
在switch中用nextLine(),需要先用上面的代码,否则在运行的时候会直接当你输入的值为空,具体为什么我没查到,但我猜跟
展示学生函数
public static void showStudent(ArrayList arr) {
//判断是否有数据存入其中 if (arr.size() == 0) {
System.out.println("无数据,请先输入数据");
return;
}
//使用制表符制作表格,更好的展示 System.out.println("学号" + "\t" + "姓名" + "\t" + "年龄" + "\t" + "地址");
//可以使用增强for循环,针对只对数组,集合中对象单一遍历操作的函数 for (student s : arr) {
System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "\t"+ s.getAddress());
}
}
比较重要的就是制表符的使用,在学C语言时就把\t叫制表符,这次使用\t按表格输出数据,会有更好的展示效果
后记
到此,需要注意的点都讲完了,这个管理系统虽然简单,但是在写它的过程中,我还是发现了许多我之前不知道的知识,算是有所收获吧,我也会经常拿这篇文章看看,复习一下,如果太长时间不敲,也会忘记,我一般复习的时候,会同时打开intellij和sublime,先用sublime敲一下代码中比较重要的部分,在对照intellij看看写错没有,只需要敲比较重要,容易出错的地方就行,希望大家也能多多复习哦