1.目的本文使用单链表(SinglyList)制作学生信息管理系统(以下简称系统),本系统简单实现对学生信息的添加,修改,删除,查找的功能。
注1:没有单链表,可直接使用列表(ArrrayList)替代
注2:附详细代码
2.主要模块 3.次要模块简单实现对系统的增删改查功能
4.组成结构 代码实现 1.创建学生信息类(Students)
- 学生信息类(Students)
- 中文性别输入判断类 (DetermineGenderException)
public class Students {
private String name;
private String sex;
private int age;
public Students(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Students msg:" +
"name='" + name + ''' +
", sex='" + sex + ''' +
", age=" + age +
'.';
}
}
2.创建添加学生信息类(AddStudentsInformation)
import demo04.SinglyList; //没有可导入ArrayList
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class AddStudentsInformation extends SearchStudentInformation{
private String name;
private String sex;
private int age;
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
public SinglyList addStudents(SinglyList students) throws Exception {
System.out.println("************添加学生信息**************");
System.out.println("根据提示添加,退出请在姓名处输入exit");
while (true){
try{
System.out.print("学生姓名:");
name=reader.readLine();
if(name.equals("exit")){
break;
}
setSex();
System.out.print("学生年龄:");
age=Integer.parseInt(reader.readLine());
Students student=new Students(name,sex,age);
students.insert(student);
}catch (Exception e){
System.out.println("输入有误,请重新输入....");
}
}
return students;
}
public String setSex() throws IOException {
while (true){
try{
System.out.print("学生性别:");
sex=reader.readLine();
GenderException(sex);
if(sex.equals("男")|| sex.equals("女")){
break;
}
}catch (DetermineGenderException e){
System.out.println(e.getMessage());
}
}
return sex;
}
public static void GenderException(String sex) throws DetermineGenderException{ //判断输入性别是否是"男'or"女'
if(sex.equals("男") || sex.equals("女")){
}else {
throw new DetermineGenderException("输入错误.....");
}
}
}
3.创建修改学生信息类(UpdateStudentInformation)
import demo04.SinglyList; //没有记得修改
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class UpdateStudentInformation extends AddStudentsInformation{
private int index;
private int selectNum;
private String newName;
private String newSex;
private int newAge;
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
public SinglyList updateStudent(SinglyList students) throws IOException {
System.out.println("************修改学生信息**************");
while (true){
System.out.print("请根据编号选择要修改的信息,退出请输入0:");
index=Integer.parseInt(reader.readLine()); //为防止有bug这里用try-catch,我就不加了
if(index==0){
break;
}
Students student=students.get(index-1);
if(student==null){
System.out.println("请重新输入......");
}else {
System.out.println("所要修改项:");
System.out.println(student);
System.out.print("所要修改信息:(n" +
"修改姓名选1,n" +
"修改性别选2,n" +
"修改年龄选3,n" +
"修改姓名和性别选4,n" +
"修改姓名和年龄选5n" +
"修改性别和年龄选6n" +
"重新输入选7n" +
"退出请选9):");
selectNum=Integer.parseInt(reader.readLine()); //这里也一样用try-catch,我懒就不加了,
// 总之就是输入数字的时候用try-catch,就是无bug版本....
if(selectNum==0){
break;
}
if(selectNum==1){
setName();
students.get(index-1).setName(newName);
}else if(selectNum==2){
setSex();
students.get(index-1).setSex(newSex);
}else if(selectNum==3){
setAge();
students.get(index-1).setAge(newAge);
}else if(selectNum==4){
setName();
students.get(index-1).setName(newName);
setSex();
students.get(index-1).setSex(newSex);
}else if(selectNum==5){
setName();
students.get(index-1).setName(newName);
setAge();
students.get(index-1).setAge(newAge);
}else if(selectNum==6){
setSex();
students.get(index-1).setSex(newSex);
setAge();
students.get(index-1).setAge(newAge);
}else if(selectNum==7){
setName();
students.get(index-1).setName(newName);
setSex();
students.get(index-1).setSex(newSex);
setAge();
students.get(index-1).setAge(newAge);
}else if(selectNum==9){
System.out.println("退出程序中.....");
break;
}
}
}
return students;
}
public String setName() throws IOException{
System.out.print("学生姓名:");
newName=reader.readLine();
return newName;
}
@Override
public String setSex() throws IOException {
return newSex=super.setSex();
}
public int setAge() throws IOException{
System.out.print("学生年龄:");
newAge=Integer.parseInt(reader.readLine());
return newAge;
}
}
4.创建查找学生信息类(searchStudent)
import demo04.SinglyList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SearchStudentInformation {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
public void searchStudent(SinglyList students) throws IOException {
System.out.println("************查找学生信息**************");
while (true){
System.out.print("请输入要查找的信息(退出输入exit):");
String s=reader.readLine();
if(s.equals("exit")) break;
System.out.println("查找结果如下...");
for (int i = 0; i
5.创建删除学生信息类(DeleteStudentsInformation)
import demo04.SinglyList;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class DeleteStudentsInformation {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
public SinglyList deleteStudent(SinglyList students) throws IOException {
System.out.println("************删除学生信息**************");
System.out.println("学生信息如下:");
for (int i = 0; i < students.size(); i++) {
System.out.println((i + 1) + ":" + students.get(i));
}
while (true) {
System.out.print("请选择要删除的学生信息的编号,退出请按0:");
int index = Integer.parseInt(reader.readLine());
if (index==0){
break;
}else if(index > students.size()){
System.out.println("没有这个编号....");
}
System.out.print("确定是否删除以下信息:(Y/N)n" + students.get(index - 1)+":");
while (true) {
String op = reader.readLine();
if (op.equals("Y")) {
students.remove(index - 1);
System.out.println("删除完毕....");
break;
}else if(op.equals("N")){
break;
}
System.out.print("确定是否删除以下信息:(Y/N)n" + students.get(index - 1)+":");
}
}
return students;
}
}
6.创建学生主界面(StudentSystem)
import demo04.SinglyList;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StudentSystem {
static BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws Exception {
Students student1=new Students("张三","男",12);
Students student2=new Students("王五","女",21);
Students student3=new Students("李四","男",12);
SinglyList students = new SinglyList<>();
students.insert(student1);
students.insert(student2);
students.insert(student3);
studentSystem(students);
}
public static void studentSystem(SinglyList students){
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.print("请选择需要的功能:(退出请选0):");
try{
int index= Integer.parseInt(reader.readLine());
if(index==0){
break;
}
if(index==1){
SearchStudentInformation searchStudentInformation=new SearchStudentInformation();
searchStudentInformation.searchStudent(students);
}
if(index==2){
AddStudentsInformation addStudentsInformation=new AddStudentsInformation();
students=addStudentsInformation.addStudents(students);
}
if(index==3){
UpdateStudentInformation updateStudentInformation=new UpdateStudentInformation();
students=updateStudentInformation.updateStudent(students);
}
if(index==4){
DeleteStudentsInformation deleteStudentsInformation=new DeleteStudentsInformation();
students=deleteStudentsInformation.deleteStudent(students);
}
if(index==5){
System.out.println("学生信息如下:");
for (int i = 0; i
7.其他附加类(DetermineGenderException)
public class DetermineGenderException extends Exception{
public DetermineGenderException(String message) {
super(message);
}
}
注1:修改类(update)可通过继承添加类(add)继承查找类(search),重写查找方法,修改update类
注2:附加类(DetermineGenderException)可移动到添加类(add)
项目总结
系统基本实现了增删改查,且bug较少。具体如下:
- 添加类基本实现学生的信息添加,但是是单项添加,不能够做到单条添加。
- 修改类能够修改学生的信息,通过继承查找类可改进
- 查找类能够通过学生年龄,性别,姓名查找学生信息,但是对于输入详细信息查找会出现年龄不正确的问题
- 删除类能够实现删除信息功能,但不能单项删除,后来想一想单项删除没有意义。



