1、功能介绍:
首先,这个小案例没有使用数据库,用集合的形式暂时保存数据,做测试!
功能:
增加学生信息
删除学生信息
修改学生信息
查询学生信息: 按照学号(精确查询) 按照姓名(模糊查询)
打印展示
备份数据到磁盘
退出
2、代码块:(作为一个小案例,代码有点多了,我就不一一分析了,直接上代码!)
(1):Model层
----------学生实体类:
1 package cn.jason.db;
2
3 /**
4 * 学生实体类
5 * Created by Jason 2016-7-15 上午8:36:20
6 */
7 public class StudentBean {
8
9 private String sno;
10 private String name;
11 private String sex;
12 private int age;
13 private String address;
14
15 public String getSno() {
16 return sno;
17 }
18 public void setSno(String sno) {
19 this.sno = sno;
20 }
21 public String getName() {
22 return name;
23 }
24 public void setName(String name) {
25 this.name = name;
26 }
27 public String getSex() {
28 return sex;
29 }
30 public void setSex(String sex) {
31 this.sex = sex;
32 }
33 public int getAge() {
34 return age;
35 }
36 public void setAge(int age) {
37 this.age = age;
38 }
39 public String getAddress() {
40 return address;
41 }
42 public void setAddress(String address) {
43 this.address = address;
44 }
45
46
47
48 }
----------存放学生实体数据的仓库集合:
1 package cn.jason.db;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 /**
7 * 学生数据存放集合
8 * Created by Jason 2016-7-15 上午8:38:50
9 */
10 public abstract class DBUtils {
11
12 private static List<StudentBean> list=null;
13
14 static{
15 list=new ArrayList<StudentBean>();
16 }
17
18 private DBUtils(){}
19
20 public static List<StudentBean> getList() {
21 return list;
22 }
23 }
----------数据操作(接口)定义规则:
1 package cn.jason.daos;
2
3 import java.util.List;
4
5 import cn.jason.db.StudentBean;
6
7
8 /**
9 * 定义数据操作规则
10 * Created by Jason 2016-7-15 上午8:43:55
11 * @param <StudentBean>
12 */
13 public interface StudentDBDAOInf {
14
15 //查询所有
16 List<StudentBean> getAllStudent();
17 //学号 精确查找
18 List<StudentBean> getStudentBySno(String sno);
19 //姓名 模糊查找
20 List<StudentBean> getStudentByName(String name);
21
22
23 //判断非空性
24 boolean isEmpty();
25
26 //新增
27 boolean insertStudentDB(StudentBean bean);
28
29 //删除
30 boolean deleteStudentDB(StudentBean bean);
31
32 //修改
33 boolean updateStudentDB(StudentBean bean);
34
35 }
----------数据操作(接口实现子类)实现规则:
1 package cn.jason.daos;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import cn.jason.db.DBUtils;
7 import cn.jason.db.StudentBean;
8
9 /**
10 * 数据操作实现子类
11 * Created by Jason 2016-7-15 上午8:55:08
12 */
13 public class StudentDBDAOImpl implements StudentDBDAOInf {
14
15 private static List<StudentBean> list=null;
16 static{
17 list=DBUtils.getList();
18 }
19
20
21 /**
22 * 得到所有信息
23 */
24 public List<StudentBean> getAllStudent() {
25 return new ArrayList<StudentBean>(list);
26 }
27
28 /**
29 * 根据学号查找
30 */
31 public List<StudentBean> getStudentBySno(String sno) {
32 ArrayList<StudentBean> rList=new ArrayList<StudentBean>();
33 for (StudentBean s : list) {
34 if(s.getSno().equals(sno)){
35 rList.add(s);
36 }
37 }
38 return rList;
39 }
40
41 /**
42 * 根据姓名查找
43 */
44 public List<StudentBean> getStudentByName(String name) {
45 ArrayList<StudentBean> rList=new ArrayList<StudentBean>();
46 for (StudentBean s : list) {
47 if(s.getName().indexOf(name)!=-1){
48 rList.add(s);
49 }
50 }
51 return rList;
52 }
53
54 /**
55 * 判断是否为空
56 */
57 public boolean isEmpty() {
58 return list.isEmpty();
59 }
60
61 /**
62 * 新增数据
63 */
64 public boolean insertStudentDB(StudentBean bean) {
65 return list.add(bean);
66 }
67
68 /**
69 * 删除操作:按学号删
70 */
71 public boolean deleteStudentDB(StudentBean bean) {
72 for ( StudentBean s: list) {
73 if(s.getSno().equals(bean.getSno())){
74 return list.remove(s);
75 }
76 }
77 return false;
78 }
79
80 /**
81 * 修改操作
82 */
83 public boolean updateStudentDB(StudentBean bean) {
84 boolean bool=false;
85 int i=0;
86 for (StudentBean s : list) {
87 if(s.getSno().equals(bean.getSno())){
88 list.set(i, bean);
89 bool=true;
90 break;
91 }
92 i++;
93 }
94 return bool;
95 }
96
97 }
(2): Control层
----------逻辑控制操作(接口)控制规则:
1 package cn.jason.services;
2
3 import java.util.List;
4
5 import cn.jason.db.StudentBean;
6
7 /**
8 * 逻辑控制层的借口
9 * Created by Jason 2016-7-15 上午8:51:43
10 */
11 public interface StudentServiceInf {
12
13 //增删查改操作
14
15 boolean insertStudent();
16
17 boolean deleteStudent();
18
19 boolean updateStudent();
20
21 List<StudentBean> searchStudent(int index);//查询模式 1、姓名 2、学号
22
23
24 }
----------逻辑控制操作(接口实现子类)实现控制规则:
1 package cn.jason.services;
2
3 import java.io.BufferedOutputStream;
4 import java.io.BufferedReader;
5 import java.io.File;
6 import java.io.FileNotFoundException;
7 import java.io.FileOutputStream;
8 import java.io.IOException;
9 import java.text.SimpleDateFormat;
10 import java.util.List;
11
12 import cn.jason.daos.StudentDBDAOImpl;
13 import cn.jason.db.StudentBean;
14
15 /**
16 * 逻辑控制实现子类
17 * Created by Jason 2016-7-15 上午9:19:37
18 */
19 public class StudentServiceImpl implements StudentServiceInf {
20
21 private StudentDBDAOImpl dao=null;
22 private BufferedReader br=null ;
23 public StudentServiceImpl(BufferedReader br){
24 dao=new StudentDBDAOImpl();
25 this.br=br;
26 }
27
28 /**
29 * 数据显示处理
30 */
31 private StudentBean getData(){
32
33 StudentBean student=null;
34 try {
35 System.out.println("请输入姓名:");
36 String name=br.readLine();
37 System.out.println("请输入性别:");
38 String sex=br.readLine();
39 if("男".equals(sex)||"女".equals(sex)){
40
41 }else{
42 System.out.println("性别输入有误!");
43 return student;
44 }
45 System.out.println("请输入年龄:");
46 String age=br.readLine();
47 int sage=0;
48 if(Integer.parseInt(age)<0 || Integer.parseInt(age)>100){
49 System.out.println("请设置年龄区段为:0-100 岁");
50 return student;
51 }else{
52 sage=Integer.parseInt(age);
53 }
54 System.out.println("请输入地址:");
55 String address=br.readLine();
56
57 student=new StudentBean();
58 student.setName(name);
59 student.setSex(sex);
60 student.setAge(sage);
61 student.setAddress(address);
62
63 } catch (IOException e) {
64 e.printStackTrace();
65 }
66 return student;
67 }
68
69 /**
70 * 新增操作
71 */
72 public boolean insertStudent() {
73 boolean bool=false;
74 try {
75 System.out.println("请输入学号:");
76 String sno=br.readLine();
77 if(dao.getStudentBySno(sno).size()>0){
78 System.out.println("当前学号已存在,不能做新增操作!");
79 return false;
80 }
81 StudentBean bean=getData();
82 if(bean==null){
83 return bool;
84 }
85 bean.setSno(sno);
86 bool= dao.insertStudentDB(bean);
87
88 } catch (IOException e) {
89 e.printStackTrace();
90 return false;
91 }
92 return bool;
93 }
94
95 /**
96 * 删除操作
97 */
98 public boolean deleteStudent() {
99 boolean bool=false;
100 System.out.println("请输入要删除的学生学号");
101 try {
102 String sno = br.readLine();
103 StudentBean bean=null;
104 if(dao.getStudentBySno(sno).size()==0){
105 System.err.println("没有找到这个学生,不能删除!");
106 }else{
107 bean=new StudentBean();
108 bean.setSno(sno);
109 bool=dao.deleteStudentDB(bean);
110 }
111 } catch (IOException e) {
112 e.printStackTrace();
113 }
114
115 return bool;
116 }
117
118 /**
119 * 修改操作
120 */
121 public boolean updateStudent() {
122 boolean bool=false;
123 try {
124 System.out.println("请输入要修改的学生学号:");
125 String sno=br.readLine();
126 if(dao.getStudentBySno(sno).size()==0){
127 System.out.println("当前学号不存在,不能做修改操作!");
128 return false;
129 }
130 StudentBean bean=getData();
131 if(bean==null){
132 return bool;
133 }
134 bean.setSno(sno);
135 bool= dao.updateStudentDB(bean);
136
137 } catch (IOException e) {
138 e.printStackTrace();
139 return false;
140 }
141 return bool;
142 }
143
144 /**
145 * 查询操作
146 */
147 public List<StudentBean> searchStudent(int index) {
148 List<StudentBean> rlist=null;
149 switch (index) {//1、姓名 2、学号
150 case 1:
151 rlist=searchByName();
152 break;
153 case 2:
154 rlist=searchBySno();
155 break;
156
157 }
158 return rlist;
159 }
160
161 /**
162 *按学号查(精确查)
163 */
164 private List<StudentBean> searchBySno() {
165 List<StudentBean> rList=null;
166 try {
167 System.out.println("请输入学号:");
168 String sno=br.readLine();
169 rList=dao.getStudentBySno(sno);
170 PrintData(rList);
171 } catch (IOException e) {
172 System.err.println("输入学号处发生错误");
173 return rList;
174 }
175 return rList;
176 }
177
178 /**
179 *按姓名查(模糊查)
180 */
181 private List<StudentBean> searchByName() {
182 List<StudentBean> rList=null;
183 try {
184 System.out.println("请输入姓名:");
185 String sname=br.readLine();
186 rList=dao.getStudentByName(sname);
187 PrintData(rList);
188 } catch (IOException e) {
189 System.err.println("输入姓名处发生错误");
190 return rList;
191 }
192 return rList;
193 }
194
195 /**
196 * 显示查询的数据
197 */
198 private void PrintData(List<StudentBean> rList){
199 System.out.println("姓名\t学号\t性别\t年龄\t地址");
200 for (StudentBean s : rList) {
201 System.out.println(s.getName()+"\t"+s.getSno()+"\t"+s.getSex()+"\t"+s.getAge()+"\t"+s.getAddress());
202 }
203 }
204
205 /**
206 * 打印所有信息
207 */
208 public void ShowData(){
209 System.out.println("姓名\t学号\t性别\t年龄\t地址");
210 for (StudentBean s : dao.getAllStudent()) {
211 System.out.println(s.getName()+"\t"+s.getSno()+"\t"+s.getSex()+"\t"+s.getAge()+"\t"+s.getAddress());
212 }
213 }
214
215 /**
216 * 备份数据
217 */
218 public boolean BakData(){
219
220 boolean bool=false;
221 BufferedOutputStream bos=null;
222 try{
223 File file=new File("testData.bak");
224 FileOutputStream fos = null;
225 try {
226 fos = new FileOutputStream(file,true);
227 } catch (FileNotFoundException e) {
228 e.printStackTrace();
229 }
230 bos=new BufferedOutputStream(fos);
231
232 SimpleDateFormat sdf=new SimpleDateFormat("yyyy年-MM月-dd日 HH:mm:ss");
233 String date=sdf.format(System.currentTimeMillis());
234 bos.write(date.getBytes());
235 bos.write("姓名\t学号\t性别\t年龄\t地址".getBytes());
236 for (StudentBean s : dao.getAllStudent()) {
237 bos.write((s.getName()+"\t"+s.getSno()+"\t"+s.getSex()+"\t"+s.getAge()+"\t"+s.getAddress()).getBytes());
238 }
239 bool=true;
240 }catch(IOException e){
241 return false;
242 }
243 finally{
244 if(bos!=null){
245 try {
246 bos.close();
247 } catch (IOException e) {
248 e.printStackTrace();
249 }
250 }
251 }
252 return bool;
253 }
254
255
256
257 }
(3): Views层
----------视图界面(在控制台展示)
1 package cn.jason.views;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6
7 import com.sun.org.apache.xml.internal.security.Init;
8
9 import cn.jason.services.StudentServiceImpl;
10
11 /**
12 * 控制台显示效果
13 * Created by Jason 2016-7-15 上午10:36:36
14 */
15 public class MainView {
16
17 private StudentServiceImpl control=null;
18 private BufferedReader br=null ;
19
20 public MainView(){
21 br=new BufferedReader(new InputStreamReader(System.in));
22 control=new StudentServiceImpl(br);
23
24 //初始化界面
25 init();
26 }
27
28 /**
29 *初始化界面
30 */
31 private void init() {
32 System.out.println("学生关系系统测试版");
33 boolean bool=true;
34 while(bool){
35 System.out.println("信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出");
36 String order;
37 try {
38 order = br.readLine();
39 if("0".equals(order)){
40 if(control.deleteStudent()){
41 System.out.println("删除成功!");
42 }else{
43 System.out.println("删除失败!");
44 }
45 }else if("1".equals(order)){
46 if(control.insertStudent()){
47 System.out.println("新增成功!");
48 }else{
49 System.out.println("新增失败!");
50 }
51 }else if("2".equals(order)){
52 if(control.updateStudent()){
53 System.out.println("修改成功!");
54 }else{
55 System.out.println("修改失败!");
56 }
57 }else if("3".equals(order)){
58 checkKindSearch();
59 }else if("4".equals(order)){
60 control.ShowData();
61 }else if("5".equals(order)){
62 if(control.BakData()){
63 System.out.println("打印完成,请注意查看!");
64 }else{
65 System.out.println("打印操作失败!");
66 }
67 }else if("6".equals(order)){
68
69 if(br!=null){
70 try {
71 br.close();
72 } catch (IOException e) {
73 e.printStackTrace();
74 }
75 }
76 System.exit(0);
77 }else{
78 System.out.println("抱歉!请输入正确的操作指令!");
79 }
80 } catch (IOException e) {
81 e.printStackTrace();
82 }
83 }
84
85 }
86
87 /**
88 *查询细分类
89 */
90 private void checkKindSearch() {
91
92 try {
93 System.out.println("查询条件:1、姓名 2、学号");
94 String index=br.readLine();
95 if("1".equals(index)){
96 control.searchStudent(1);
97 }else if("2".equals(index)){
98 control.searchStudent(2);
99 }else{
100 System.err.println("输入有误,请核对后再输入");
101 }
102
103 } catch (IOException e) {
104 e.printStackTrace();
105 }
106
107 }
108 }
(4): 启动程序:main
1 package cn.jason.start;
2
3 import cn.jason.views.MainView;
4
5 /**
6 * 程序启动类:
7 * Created by Jason 2016-7-15 上午10:50:49
8 */
9 public class Start {
10
11
12 public static void main(String[] args) {
13 new MainView();
14 }
15
16 }
3、运行测试结果:
1 学生关系系统测试版
2 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
3 1
4 请输入学号:
5 s001
6 请输入姓名:
7 Jason
8 请输入性别:
9 男
10 请输入年龄:
11 20
12 请输入地址:
13 长沙市 岳麓区
14 新增成功!
15 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
16 1
17 请输入学号:
18 s002
19 请输入姓名:
20 Jask
21 请输入性别:
22 男
23 请输入年龄:
24 20
25 请输入地址:
26 北京
27 新增成功!
28 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
29 1
30 请输入学号:
31 s003
32 请输入姓名:
33 Rose
34 请输入性别:
35 女
36 请输入年龄:
37 20
38 请输入地址:
39 纽约
40 新增成功!
41 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
42 4
43 姓名 学号 性别 年龄 地址
44 Jason s001 男 20 长沙市 岳麓区
45 Jask s002 男 20 北京
46 Rose s003 女 20 纽约
47 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
48 3
49 查询条件:1、姓名 2、学号
50 1
51 请输入姓名:
52 Jason
53 姓名 学号 性别 年龄 地址
54 Jason s001 男 20 长沙市 岳麓区
55 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
56 3
57 查询条件:1、姓名 2、学号
58 2
59 请输入学号:
60 s002
61 姓名 学号 性别 年龄 地址
62 Jask s002 男 20 北京
63 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
64 5
65 打印完成,请注意查看!
66 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
67 2
68 请输入要修改的学生学号:
69 s002
70 请输入姓名:
71 Jack_2
72 请输入性别:
73 女
74 请输入年龄:
75 20
76 请输入地址:
77 暂无详细住址信息
78 修改成功!
79 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
80 4
81 姓名 学号 性别 年龄 地址
82 Jason s001 男 20 长沙市 岳麓区
83 Jack_2 s002 女 20 暂无详细住址信息
84 Rose s003 女 20 纽约
85 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
86 1
87 请输入学号:
88 s004
89 请输入姓名:
90 测试人物
91 请输入性别:
92 男
93 请输入年龄:
94 20
95 请输入地址:
96 暂无
97 新增成功!
98 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
99 0
100 请输入要删除的学生学号
101 s005
102 没有找到这个学生,不能删除!
103 删除失败!
104 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
105 4
106 姓名 学号 性别 年龄 地址
107 Jason s001 男 20 长沙市 岳麓区
108 Jack_2 s002 女 20 暂无详细住址信息
109 Rose s003 女 20 纽约
110 测试人物 s004 男 20 暂无
111 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
112 0
113 请输入要删除的学生学号
114 s004
115 删除成功!
116 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出
117 4
118 姓名 学号 性别 年龄 地址
119 Jason s001 男 20 长沙市 岳麓区
120 Jack_2 s002 女 20 暂无详细住址信息
121 Rose s003 女 20 纽约
122 信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出