[TOC]

功能概述:

  • 每个Student 对象存储一个学生的信息
  • 查询功能:
    • 通过姓名查询(考虑重名情况)
    • 通过学号查询
  • 修改功能:
    • 修改姓名
    • 修改学号
    • 修改年龄
    • 修改班级信息
  • 增删信息:
    • 增加/删除条目
  • 展示全部:
    • 展示当前全部信息

项目结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
src
└─com
└─stu_info_manage
├─controller
│ main.java
│ UserInput.java

├─data
│ Add_rm.java
│ Change_info.java
│ Info_Stroage.java
│ Search.java
│ Student.java

└─service
Add_rm.java
ChangeInfo.java
Search.java

实现:

首先创建一个Student标准JavaBean,包含各个get,set方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.stu_info_manage.data;

public class Student {
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getId_num() {

return this.id_num;
}

public void setId_num(String id_num) {
this.id_num = id_num;
}

public String getClass_info() {
return class_info;
}

public void setClass_info(String class_info) {
this.class_info = class_info;
}


private String name;
private int age;
private String id_num;
private String class_info;


}

然后,根据标准Java管理系统结构,分出3个package:

  • 表层:controller
  • 服务层:service
  • 数据层:dao(我写的data)

表层中,使用Userinputt类处理用户的输入输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
package com.stu_info_manage.controller;
import com.stu_info_manage.data.Student;
import com.stu_info_manage.service.Search;

import java.util.ArrayList;
import java.util.Scanner;

public class UserInput {

public void print_init_info(){
while(true){
System.out.println("Welcome,输入你的操作");
System.out.println("1:查询\n2.修改\n3.添加\\删除\n4.列出所有");
Scanner init_sc = new Scanner(System.in);
int init_choice = init_sc.nextInt();

if (init_choice ==1)
{
choice1_init();

} else if (init_choice == 2) {

choice2_init();


} else if (init_choice == 3) {

add_rm_stu_init();
} else if (init_choice == 4) {

show_all();

} else{
System.out.println("请重新输入");
}
}


}



public void choice1_init(){

stu = new Student();
System.out.println("你想通过什么查询?,输入\n1.姓名\n2.学号");
Scanner choice1_sc = new Scanner(System.in);
int choice1_choice = choice1_sc.nextInt();
if(choice1_choice == 1)
{
System.out.println("你选择从姓名查询");
garbage_char = choice1_sc.nextLine();
name = choice1_sc.nextLine();
stu_list = new ArrayList<>();
stu_list = Search.search_form_name(name);
}
if(choice1_choice == 2)
{
System.out.println("你选择从学号查询");
garbage_char = choice1_sc.nextLine();
id_num = choice1_sc.nextLine();
stu_list = new ArrayList<>();
stu_list = Search.search_form_id_num(id_num);
}
System.out.println("你的查询结果:");
for (int i = 0; i < stu_list.size(); i++) {
stu = stu_list.get(i);
System.out.println("name:"+stu.getName()+" id:"+stu.getId_num()+" age:"+stu.getAge()+" class:"+stu.getClass_info());
}

}


public void choice2_init(){
System.out.println("输入你想修改的人的学号");
Scanner choice2_sc = new Scanner(System.in);
id_num = choice2_sc.nextLine();
System.out.println("你选择了学号为:"+id_num+" 的人");
System.out.println("请输入你想修改的信息:\n 1.姓名 \n 2.学号 \n 3.年龄 \n 4.班级");
int choice = choice2_sc.nextInt();
if(choice == 1){
System.out.println("你要将姓名改成什么:");
String trash = choice2_sc.nextLine();
String rename = choice2_sc.nextLine();
System.out.println("你想将姓名修改为 "+rename);

com.stu_info_manage.service.ChangeInfo changeInfo = new com.stu_info_manage.service.ChangeInfo();

boolean renamed = changeInfo.Rename(rename,id_num);
if(renamed){
System.out.println("success!");

}else {
System.out.println("error!");
}




} else if (choice == 2) {
System.out.println("你想将学号改成什么?");
String trash = choice2_sc.nextLine();
String re_id_num = choice2_sc.nextLine();
System.out.println("你想将学号改成:"+re_id_num);

com.stu_info_manage.service.ChangeInfo changeInfo = new com.stu_info_manage.service.ChangeInfo();
System.out.println("before: "+id_num+" after: "+re_id_num);
boolean re_id_numed = changeInfo.Re_id_num(id_num,re_id_num);
if(re_id_numed){
System.out.println("success!");

}else {
System.out.println("error!");
}



} else if (choice == 3) {
System.out.println("你想将年龄改成什么?");
String trash = choice2_sc.nextLine();
int reage = choice2_sc.nextInt();
System.out.println("你想将年龄改为"+reage);
com.stu_info_manage.service.ChangeInfo changeInfo = new com.stu_info_manage.service.ChangeInfo();
boolean reaged = changeInfo.Reage(reage,id_num);
if(reaged){
System.out.println("success!");

}else {
System.out.println("error!");
}


} else if (choice == 4) {
System.out.println("你想将班级改成什么?");
String trash = choice2_sc.nextLine();
String reclass= choice2_sc.nextLine();
System.out.println("你想将班级改为"+reclass);
com.stu_info_manage.service.ChangeInfo changeInfo = new com.stu_info_manage.service.ChangeInfo();
boolean reclassed = changeInfo.Reclass(reclass,id_num);
if(reclassed){
System.out.println("success!");

}else {
System.out.println("error!");
}
}else {


}
}
public void add_rm_stu_init(){
System.out.println("加成员按1,减成员按2");
Scanner choice3_sc = new Scanner(System.in);
int add_or_rm = choice3_sc.nextInt();
if(add_or_rm==1){
System.out.println("输入姓名");
String trush = choice3_sc.nextLine();
String add_name = choice3_sc.nextLine();
System.out.println("输入学号");
String add_id = choice3_sc.nextLine();
System.out.println("输入年龄");
int add_age = choice3_sc.nextInt();
System.out.println("输入班级");
trush = choice3_sc.nextLine();
String add_class = choice3_sc.nextLine();
System.out.println("你想添加:"+add_name+" "+add_id+" "+add_age+" "+add_class);
com.stu_info_manage.service.Add_rm add_rm = new com.stu_info_manage.service.Add_rm();
boolean added = add_rm.add_item(add_name,add_id,add_age,add_class);
if(added){
System.out.println("success!");
}else {
System.out.println("error!");
}


} else if (add_or_rm==2) {
System.out.println("输入你要删除的学号");
String trush = choice3_sc.nextLine();
String rm_id = choice3_sc.nextLine();
System.out.println("你想删除:"+rm_id);
com.stu_info_manage.service.Add_rm add_rm = new com.stu_info_manage.service.Add_rm();
boolean rmed = add_rm.rm_item(rm_id);
if(rmed){
System.out.println("success!");
}else {
System.out.println("error!");
}


}


}
public void show_all()
{
com.stu_info_manage.data.Info_Stroage.show_all();
}


private String name;
private int age;
private String id_num;
private Student stu;
private String garbage_char;
private ArrayList<Student> stu_list;
}

服务层中,分出 增删条目 / 修改信息 / 查找条目 三块,因为这个小系统服务层不用处理什么东西,所以基本是一个转接头的作用,不过还是写出来了框架:

  • 增删条目:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.stu_info_manage.service;

public class Add_rm {
public boolean add_item(String add_name,String add_id_num,int add_age,String add_class)
{
boolean added = false;
if(add_age>30)
{
added = false;
}else {
com.stu_info_manage.data.Add_rm add_rm = new com.stu_info_manage.data.Add_rm();
added = add_rm.add_item(add_name,add_id_num,add_age,add_class);
}
return added;



}

public boolean rm_item(String rm_id_num){
boolean rmed = false;
com.stu_info_manage.data.Add_rm add_rm = new com.stu_info_manage.data.Add_rm();
rmed = add_rm.rm_item(rm_id_num);

return rmed;
}

}

  • 修改信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.stu_info_manage.service;

public class ChangeInfo {
public boolean Rename(String rename,String id_num)
{
this.rename = rename;
this.id_num = id_num;
com.stu_info_manage.data.Change_info change_info = new com.stu_info_manage.data.Change_info();
boolean renamed = change_info.Rename(this.id_num,this.rename);

return renamed;

}

public boolean Re_id_num(String id_num,String id_num_aft)
{
this.id_num = id_num;
this.id_num_aft = id_num_aft;
com.stu_info_manage.data.Change_info change_info = new com.stu_info_manage.data.Change_info();
boolean re_id_numed = change_info.Re_id_numed(this.id_num,this.id_num_aft);

return re_id_numed;

}
public boolean Reage(int reage,String id_num)
{
this.reage = reage;
this.id_num = id_num;
com.stu_info_manage.data.Change_info change_info = new com.stu_info_manage.data.Change_info();
boolean reaged = change_info.Reage(this.id_num,this.reage);

return reaged;

}
public boolean Reclass(String reclass,String id_num)
{
this.reclass = reclass;
this.id_num = id_num;
com.stu_info_manage.data.Change_info change_info = new com.stu_info_manage.data.Change_info();
boolean reclassed = change_info.Reclass(this.id_num,this.reclass);

return reclassed;

}

private String rename;
private String reclass;
private int reage;
private String id_num;
private String id_num_aft;

}




  • 查找条目:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.stu_info_manage.service;
import com.stu_info_manage.data.Student;

import java.util.ArrayList;

public class Search {
public static ArrayList<Student> search_form_name(String name)
{
Search sh = new Search();
sh.name = name;
com.stu_info_manage.data.Search sh_data = new com.stu_info_manage.data.Search();
sh.stu_list = new ArrayList<>();
sh.stu_list = sh_data.search_form_name(sh.name);

return sh.stu_list;

}
public static ArrayList<Student> search_form_id_num(String id_num)
{
Search sh = new Search();
sh.id_num = id_num;
com.stu_info_manage.data.Search sh_data = new com.stu_info_manage.data.Search();
sh.stu_list = new ArrayList<>();
sh.stu_list = sh_data.search_form_id_num(sh.id_num);

return sh.stu_list;

}
private String name;
private String id_num ;
private int age;
static private Student stu;
private ArrayList<Student> stu_list;
}

数据层同样分出三层,也相当于转接头,不予列出

最终数据处理在Info_stroage类中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package com.stu_info_manage.data;
import java.util.ArrayList;
import java.util.Arrays;

public class Info_Stroage {
public static void init_example()
{
stu_null = new Student();
stu_null .setName("null");
stu_null.setAge(000);
stu_null.setId_num("000");

students = new Student[100];
for (int i = 0; i < students.length; i++) {
students[i] = new Student();
}
students[0].setName("ctx");
students[0].setAge(20);
students[0].setId_num("2023211949");
students[0].setClass_info("23dx0211");

students[2].setName("ctx");
students[2].setAge(21);
students[2].setId_num("2023211950");
students[2].setClass_info("23dx0211");

students[1].setName("zwc");
students[1].setAge(20);
students[1].setId_num("2023211940");
students[1].setClass_info("23dx0210");

stu_num = 3;
}

public static ArrayList<Student> getStudents_name(String name) {
stu_list = new ArrayList<>();
int stu_num = 0;
for (int i = 0; i < students.length; i++) {

if (students[i].getName()!=null&&students[i].getName().equals(name))
{
System.out.println("find the studrent:"+i);
stu_list.add(students[i]);
stu_num ++ ;
}

}

if(stu_num==0){
System.out.println("stu_name_is_null");
stu_list.add(stu_null);
}

return stu_list;
}

public static ArrayList<Student> getStudents_id_num(String id_num) {
stu_list = new ArrayList<>();
int stu_num = 0;
for (int i = 0; i < students.length; i++) {

if (students[i].getId_num()!=null && students[i].getId_num().equals(id_num))
{
System.out.println("find the studrent:"+i);
stu_list.add(students[i]);
stu_num++;
}

}
if(stu_num == 0)
{
System.out.println("the student is null");
stu_list.add(stu_null);
}

return stu_list;
}

public static boolean Rename(String id_num,String rename)
{
boolean renamed = false;
for (int i = 0; i < students.length; i++) {
if(students[i].getId_num()!=null&&students[i].getId_num().equals(id_num))
{
students[i].setName(rename);
renamed = true;

}

}
return renamed;
}
public static boolean Re_id_num(String id_num_pre,String id_num_aft)
{
boolean re_id_numed = false;
for (int i = 0; i < students.length; i++) {
if(students[i].getId_num()!=null&&students[i].getId_num().equals(id_num_pre))
{
System.out.println("find_stu"+i);
students[i].setId_num(id_num_aft);
re_id_numed = true;

}

}
System.out.println(re_id_numed);
return re_id_numed;
}
public static boolean Reage(String id_num,int reage)
{
boolean reaged = false;
for (int i = 0; i < students.length; i++) {
if(students[i].getId_num()!=null&&students[i].getId_num().equals(id_num))
{
students[i].setAge(reage);
reaged = true;

}

}
return reaged;
}
public static boolean Reclass(String id_num,String reclass)
{
boolean reclassed = false;
for (int i = 0; i < students.length; i++) {
if(students[i].getId_num()!=null&&students[i].getId_num().equals(id_num))
{
students[i].setClass_info(reclass);
reclassed = true;

}

}
return reclassed;
}

public static boolean add_item(String add_name,String add_id_num,int add_age,String add_class)
{
boolean added = false;
students[stu_num].setName(add_name);
students[stu_num].setId_num(add_id_num);
students[stu_num].setAge(add_age);
students[stu_num].setClass_info(add_class);
stu_num++;
added = true;
return added;
}

public static boolean rm_item(String rm_id_num){
boolean rmed = false;
int loc = 0;
for (int i = 0; i < students.length; i++) {
if(students[i].getId_num().equals(rm_id_num)) {
loc = i;
break;
}

}
for (int i = loc; i < stu_num; i++) {
students[i] = students[i+1];
}

stu_num--;
rmed = true;
return rmed;
}

public static void show_all()
{
System.out.println("total: "+stu_num);
for (int i = 0; i < stu_num; i++) {
System.out.println("name: "+students[i].getName()+" age: "+students[i].getAge()+" id: "+students[i].getId_num()+" class: "+students[i].getClass_info());
}
}
private static Student[] students;
private static Student stu_null;
private static ArrayList<Student> stu_list;
private static int stu_num;

}

开发记录

1.ArrayList 的使用

在存储对象的时候,一开始想把对象存储在数组中,也就是对象数组,当然最后也是这么存的,但在查找类的构建过程中,意识到可能存在重名情况,因此不能固定返回一个Student对象,而应该返回一个数组

然而,数组的长度是不确定的,所以引入ArrayList可变长数组来进行对象的动态数目存储

1
2
3
4
5
6
7
8
9
10
11
// new ArrayList 对象:
ArrayList<Student> stu_list = new ArrayList();

//增加元素:
stu_list.add(stu_example);

//作为函数返回值:
public ArrayList<stduent> method()
{

}