史迪奇的java之旅 | day 05 项目:学生管理系统
我这次设计的学生管理系统,主要的设想是可以完成对学生的基本信息的增、删、改、查,从控制台输入相应的内容来选择相应的功能。
首先先定义2个类,一个学生类,一个学生管理类。其中学生类定义学生的基本信息,如学生的学号,姓名,年龄,居住地。然后通过设置构造函数,来完成实例化对象,并为对象属性赋值。代码如下:
package com.str1;
/*
* 学生类
*/
public class Student {
//学号;
private String sid;
//姓名;
private String name;
//年龄;
private String age;
//居住地;
private String address;
public Student() {
//super();
// TODO Auto-generated constructor stub
}
public Student(String sid, String name, String age, String address) {
//super();
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;
}
}
这里的年龄age,我也是用string来定义的主要是为了方便后面使用。因为我要实例化对象并为属性赋值,我们可以直接访问对象的属性或者调setXxx()方法。
注:构造方法时类的一个特殊方法,他在实例化的时候会被自动调用。
然后,我在另一个包com.str2中设置了学生管理类,它是主要的功能类。类中实现了main方法,添加方法,删除方法,修改方法,查看方法。为了实现学号是否重复特地设置的一个是否重名方法。
main方法主要实现主菜单的选择,让用户选择相应的方法来使用,首先先完成主菜单的设置,使用输出语句来展示出来。效果为:
然后再用scanner语句完成数据的录入。
//2、用Scanner完成数据的录入
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
接下来再选择用switch语句,进行方法的选择,switch后面的取值可以跟字符串。
switch(line) {
case "1":
System.out.println("添加学生:");
addStudent(array);
break;
case "2":
System.out.println("删除学生:");
deleteStudent(array);
break;
case "3":
System.out.println("修改学生:");
updataStudent(array);
break;
case "4":
System.out.println("查看学生:");
findAllStudent(array);
break;
case "5":
System.out.println("谢谢使用!");
//break;
System.exit(0);//JVM虚拟机
}
一、添加方法addStudent()
我设计的添加方法时想通过集合储存学生的学号,姓名,年龄,居住地,创建学生对象,把录入的数据赋给类的成员变量,然后再将学生对象添加到集合中,从而实现数据的添加。
public static void addStudent(ArrayList<Student> array){
}
具体代码如下:
public static void addStudent(ArrayList<Student> array) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
//为了能让sid可以在while循环中使用,因此在外部循环
String sid;
while(true) {
System.out.println("请输入学生学号:");
sid=s.nextLine();
boolean flag=isUsed(array,sid);
if(flag) {
System.out.println("您输入的学号已重复,请重新输入!");
}else {
break;
}
}
System.out.println("请输入学生姓名:");
String name=s.nextLine();
System.out.println("请输入学生年龄:");
String age=s.nextLine();
System.out.println("请输入学生居住地:");
String address=s.nextLine();
//创建学生对象,把录入的数据赋给类的成员变量;
Student s1=new Student();
s1.setSid(sid);
s1.setName(name);
s1.setAge(age);
s1.setAddress(address);
//将学生对象添加到集合中;
array.add(s1);
System.out.println("添加学生成功!");
}
首先我们先设置一个while循环来检验输入的学号,判断是否已经存入了相同的学号,如果存入相同的学号就会提示你学号已重复请重新输入,循环会再执行一次,通过设置一个boolean类型的标记flag来判断是否重复,实现代码在下一个方法。如果不重复,则break退出循环。然后再用nextline()接受相关的信息,然后创建学生对象,把录入的成绩赋给成员变量,再把学生对象添加到集合中。检验重名的方法:
public static boolean isUsed(ArrayList<Student> array,String sid) {
boolean flag=false;
for(int i=0;i<array.size();i++) {
Student s1=array.get(i);
if(s1.getSid().equals(sid)) {
flag=true;
break;
}
}
return flag;
}
二、查看方法
查看方法主要就是为了把集合中的信息遍历一遍然后再打印出来。先用一个if判断是否为空,如果为空就提示信息并返回,需要加一个return。然后再用for循环打印出数据。具体代码如下:
public static void findAllStudent(ArrayList<Student> array) {
//判断如果没有信息,输出提示信息。
if(array.size()==0) {
System.out.println("无信息,请输入信息!");
//为了程序不再往下执行,给出return
return;
}
//显示表头信息
System.out.println("学号\t\t姓名\t\t年龄\t\t居住地");
//从集合中数据取出对应格式显示学生信息,年龄显示补充“岁”
for(int i=0;i<array.size();i++) {
Student s1=array.get(i);
System.out.println(s1.getSid()+"\t"+s1.getName()+"\t\t"+s1.getAge()+"岁\t\t"+s1.getAddress());
}
}
三、删除方法
我们首先还是用到for循环,遍历集合把数据删去,用到的是remove()方法,需要注意的是需要判断是否有对应的学号在集合里,定义一个索引,然后用equals判断是否相同,如果相同给索引赋值,继续执行删除功能。如果不相同,则索引值不变,那么提示无此信息返回重新选择,具体代码如下:
public static void deleteStudent(ArrayList<Student> array) {
//键盘录入学生信息;
Scanner sc=new Scanner(System.in);
System.out.println("请输入删除学生的学号:");
String sid=sc.nextLine();
//定义一个索引
int index=-1;
//遍历集合把学生对象从集合中删去
for(int i=0;i<array.size();i++) {
Student s=array.get(i);
if(s.getSid().equals(sid)) {
index=i;
break;
}
}
if(index==-1) {
System.out.println("无此信息,请重新输入!");
}else {
array.remove(index);
System.out.println("删除成功!");
}
}
四、修改方法
修改功能跟删除功能类似,开始都要设置一个索引,来判断是否具有相同的学号,来保证功能的进行。也是用一个while循环来保证又一个正确的学号输入。然后就是常规的接受信息,接下来创建一个新的学生对象,然后使用一个for循环来进行数据的更新,使用set()方法进行。
具体代码:
public static void updataStudent(ArrayList<Student> array) {
Scanner sc=new Scanner(System.in);
String sid;
while(true) {
System.out.println("请输入要修改的学生学号:");
sid=sc.nextLine();
int index1=-1;
for(int i=0;i<array.size();i++) {
Student s1 = array.get(i);
if(s1.getSid().equals(sid)) {
index1=i;
break;
}
}
if(index1==-1) {
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 s=new Student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//定义一个索引
for(int i=0;i<array.size();i++) {
Student s1=array.get(i);
if(s.getSid().equals(sid)) {
array.set(i, s);
break;
}
}
System.out.println("修改成功!");
}