学生信息管理系统
- 1.学生信息系统功能:
- (1.)添加学生信息
- (2.)删除学生信息
- (3.)修改学生信息
- (4.)查询学生信息
- 2.程序运行结果图
- 3.该程序分为两个类:
- (1.)Student类
- (2.)TestMain类(增、删、改、查功能都写在了测试类TestMain类中)
- 4.编程中遇到的问题和解决方法
1.学生信息系统功能:
(1.)添加学生信息
(2.)删除学生信息
(3.)修改学生信息
(4.)查询学生信息
2.程序运行结果图
3.该程序分为两个类:
(1.)Student类
package studentmanagement;
public class Student {
//定义变量学号、姓名、住址
private String no;
private String name;
private String add;
private String sex;
private int tel;
private int age;
public Student() {
}
public Student(String no, String name, String sex,int age,String add,int tel) {
this.no = no;
this.name = name;
this.sex = sex;
this.age = age;
this.add = add;
this.tel = tel;
}
//学号
public void setSNo(String no) {
this.no = no;
}
public String getNo() {
return no;
}
//姓名
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
//性别
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
//年龄
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
//住址
public void setAdd(String add) {
this.add = add;
}
public String getAdd() {
return add;
}
//电话
public void setTel(int tel) {
this.tel = tel;
}
public int getTel() {
return tel;
}
}
(2.)TestMain类(增、删、改、查功能都写在了测试类TestMain类中)
package studentmanagement;
import java.util.ArrayList;
import java.util.Scanner;
public class TestMain {
public static void main(String[] args) {
// ArrayList<参数化类型> list = new ArrayList<参数化类型>();
// 使用泛型ArrayList<Student>之后,表示ArrayList集合中只允许存储Student类型的数据
// 用泛型指定集合中存储的数据类型
// 创建ArrayList集合存储student对象
ArrayList<Student> array = new ArrayList<Student>();
// 当前可查学生信息
Student s1 = new Student("01", "蒋丞", "男", 20,"辽宁",135256);
Student s2 = new Student("02", "顾飞", "男", 21,"辽宁",155234);
Student s3 = new Student("03", "顾淼", "女", 18,"辽宁",167235);
array.add(s1);
array.add(s2);
array.add(s3);
// while(true)无限循环语句,语句块中有break语句才都能跳出循环。
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("请选择系统功能: ");
// 输入管理系统选项
Scanner sc = new Scanner(System.in);
String choice = sc.nextLine();
switch (choice) {
case "1":
addStudent(array); // 增
break;
case "2":
removeStudent(array); // 删
break;
case "3":
updateStudent(array); // 改
break;
case "4":
findAllStudent(array); // 查
break;
case "5": // 退出
default:
System.out.println("谢谢您的使用");
System.exit(0);// java虚拟机退出
// break;
}
}
}
// 1.添加学生信息
// public static void main(String[] args) {
// ArrayList<Student> array = new ArrayList<Student>();
public static void addStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
String No;
System.out.println("请输入学生学号:");
// String No=sc.nextLine();
No = sc.nextLine(); // 输入学号No nextLine返回string类型
// 定义标记,判断学生学号是否被占用
boolean flag = true;
for (int i = 0; i < array.size(); i++) {
// 遍历学生信息返回给学生对象
Student s = array.get(i);
// 获取该学生的学号,和键盘录入的学号进行比较
if (s.getNo().equals(No)) {
flag = false;// 说明学号被占用
System.out.println("该学生已存在,请重新输入!");
break;
}
}
if (flag) {
System.out.println("请输入学生姓名:");
String Name = sc.nextLine();
System.out.println("请输入学生住址:");
String Add = sc.nextLine();
System.out.println("请输入学生性别:");
String Sex = sc.nextLine();
System.out.println("请输入学生年龄:");
int Age = sc.nextInt();
System.out.println("请输入学生电话:");
int Tel = sc.nextInt();
//nextInt必须在nextLine后面
// 创建学生对象
Student s = new Student();
s.setSNo(No);
s.setName(Name);
s.setAdd(Add);
s.setSex(Sex);
s.setAge(Age);
s.setTel(Tel);
// 把学生对象作为元素添加到集合
array.add(s);
System.out.println("添加成功!");
}
}
// 2.删除学生信息
public static void removeStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要删除的学生的学号: ");
String No = sc.nextLine(); // 键盘录入的学号返回给No
// 作为索引
int index = -1;
// 遍历学生信息
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
// 获取该学生的学号,和键盘录入的学号进行比较
if (s.getNo().equals(No)) {
index = i; // 124行 array.remove(index);
break;
}
}
if (index == -1) {
System.out.println("您要删除的学生信息不存在,请重新选择: ");
} else {
array.remove(index); // 删除获取的学生信息
System.out.println("删除学生信息成功");
}
}
// 3.修改学生信息
public static void updateStudent(ArrayList<Student> array) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要修改的学生的学号: ");
String No = sc.nextLine();
// 作为索引
int index = -1;
// 遍历学生信息
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
// 获取该学生的学号,和键盘录入的学号进行比较
if (s.getNo().equals(No)) {
index = i;
break;
}
}
if (index == -1) {
System.out.println("您要修改的学生信息不存在,请您重新选择: ");
} else { // index = i;的时候
System.out.println("请输入学生新姓名:");
String Name = sc.nextLine();
System.out.println("请输入学生性别:");
String Sex = sc.nextLine();
System.out.println("请输入学生新住址:");
String Add = sc.nextLine();
System.out.println("请输入学生年龄:");
int Age = sc.nextInt();
System.out.println("请输入学生电话:");
int Tel = sc.nextInt();
// 创建学生对象
Student s = new Student();
// 学生对象s不调用set方法,则修改后的值为null
s.setSNo(No);
s.setName(Name);
s.setSex(Sex);
s.setAge(Age);
s.setTel(Tel);
s.setAdd(Add);
// 修改学生中的集合对象
// Arraylist集合中set方法,set(int index,Object o)覆盖元素。
array.set(index, s);
System.out.println("修改学生信息成功!!");
}
}
// 4.查询学生信息
public static void findAllStudent(ArrayList<Student> array) {
// 判断学生信息集合的长度,如果等于0,学生信息为空,程序结束
if (array.size() == 0) {
System.out.println("对不起,当前学生信息为空,请您重新选择: ");
return;// 不让程序往下执行
}
// 学生信息列表
System.out.println("学号:\t姓名:\t性别:\t年龄:\t住址:\t电话:");// \t是一个tab键的位置
// 遍历集合
for (int i = 0; i < array.size(); i++) {
Student student = array.get(i);//
System.out.println(
student.getNo() + "\t" + student.getName() + "\t" + student.getSex() + "\t" +student.getAge() + "\t" + student.getAdd()+ "\t" + student.getTel());
}
}
}
4.编程中遇到的问题和解决方法
①管理系统使用完其中一个功能后不能继续选择使用其他功能,需要重新运行才能再次使用其他功能。
解决方法:加入while(true)无限循环语句,语句块中有break语句才都能跳出循环。
②在添加学生信息功能中,添加信息相同的学生时,没有信息重复的提示。
解决方法:定义标记boolean flag = true;然后根据判断学生学号是否被占用。先遍历学生信息,获取添加学生的学号,再和键盘输入的学号进行比较,如果输入的学号和获取的学生学号一样,则标记flag=false;,表示学生信息已经存在。如果添加不重复,代码后加上if(flag),里面写要添加学生的相关信息。
③在解决问题①无法循环利用管理系统后,发现退出管理系统功能无法使用,选择退出后还是会弹出学生信息管理系统界面。
解决方法:添加System.exit(0); System是一个Java类,调用exit(0)方法终止虚拟机也就是退出你的Java程序,括号里面的是参数,进程结束的返回值。
④在查询学生信息是否存在中,如果没有查找到要修改或者删除的学生信息该怎么返回给程序
解决方法:添加变量名为index(int index = -1;)作为索引,在数组遍历时,如果没有查到键盘输入信息,返回-1,结束程序,进行下一次循环。
⑤修改学生信息后,再次查询学生信息,发现信息没有改变,修改无效。
解决方法:array.set(index, s);
⑥查询学生信息为空的时候,程序依然向下执行,弹出学号: 姓名: 住址:为空的内容。
解决方法:提示学生信息为空代码后一行加上ruturn;不让程序继续向下执行。
⑦在提供输入管理系统选项的代码中,用到switch方法,返回类型为String,但后面的case语句一直写的是case 1;case 2;…导致代码一直出错
解决方法:switch 使用字符串 String 类型时,同时 case 标签必须为字符串常量或字面 量,将case 1;等改为case “1”;等。
⑧在修改学生信息时,在输入学号、姓名、性别、年龄四项后,直接连续弹出要修改的地址、电话两条信息,先输入要修改的地址,抛出Exception in thread “main” java.util.InputMismatchException的异常。
解决方法:在修改学生信息代码块中自己nextLine()写在了nextInt后,抛出异常。
System.out.println(“请输入学生年龄:”); int Age = sc.nextInt();
System.out.println(“请输入学生新住址:”); String Add = sc.nextLine();
原因:nextLine()不能用在nextInt后面。因为nextLine()方法是返回的是Enter键之前的所有字符,在使用了nextInt() 方法之后在其后输入的空格键、Tab键或Enter键等视为分隔符或结束符,其仍在缓冲区内;若紧接着使用nextLine() ,则nextLine() 自动读取Enter等作为其结束符,则无法从键盘输入值,强行输入会报出InputMismatchException异常。