1、功能介绍:

     首先,这个小案例没有使用数据库,用集合的形式暂时保存数据,做测试!

     功能:

        增加学生信息

        删除学生信息

        修改学生信息

        查询学生信息:  按照学号(精确查询)  按照姓名(模糊查询)

        打印展示

        备份数据到磁盘

        退出      

2、代码块:(作为一个小案例,代码有点多了,我就不一一分析了,直接上代码!)

(1):Model层

----------学生实体类:

 package cn.jason.db;

 /**
* 学生实体类
* Created by Jason 2016-7-15 上午8:36:20
*/
public class StudentBean { private String sno;
private String name;
private String sex;
private int age;
private String address; public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
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;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} }

----------存放学生实体数据的仓库集合:

 package cn.jason.db;

 import java.util.ArrayList;
import java.util.List; /**
* 学生数据存放集合
* Created by Jason 2016-7-15 上午8:38:50
*/
public abstract class DBUtils { private static List<StudentBean> list=null; static{
list=new ArrayList<StudentBean>();
} private DBUtils(){} public static List<StudentBean> getList() {
return list;
}
}

----------数据操作(接口)定义规则:

 package cn.jason.daos;

 import java.util.List;

 import cn.jason.db.StudentBean;

 /**
* 定义数据操作规则
* Created by Jason 2016-7-15 上午8:43:55
* @param <StudentBean>
*/
public interface StudentDBDAOInf { //查询所有
List<StudentBean> getAllStudent();
//学号 精确查找
List<StudentBean> getStudentBySno(String sno);
//姓名 模糊查找
List<StudentBean> getStudentByName(String name); //判断非空性
boolean isEmpty(); //新增
boolean insertStudentDB(StudentBean bean); //删除
boolean deleteStudentDB(StudentBean bean); //修改
boolean updateStudentDB(StudentBean bean); }

----------数据操作(接口实现子类)实现规则:

 package cn.jason.daos;

 import java.util.ArrayList;
import java.util.List; import cn.jason.db.DBUtils;
import cn.jason.db.StudentBean; /**
* 数据操作实现子类
* Created by Jason 2016-7-15 上午8:55:08
*/
public class StudentDBDAOImpl implements StudentDBDAOInf { private static List<StudentBean> list=null;
static{
list=DBUtils.getList();
} /**
* 得到所有信息
*/
public List<StudentBean> getAllStudent() {
return new ArrayList<StudentBean>(list);
} /**
* 根据学号查找
*/
public List<StudentBean> getStudentBySno(String sno) {
ArrayList<StudentBean> rList=new ArrayList<StudentBean>();
for (StudentBean s : list) {
if(s.getSno().equals(sno)){
rList.add(s);
}
}
return rList;
} /**
* 根据姓名查找
*/
public List<StudentBean> getStudentByName(String name) {
ArrayList<StudentBean> rList=new ArrayList<StudentBean>();
for (StudentBean s : list) {
if(s.getName().indexOf(name)!=-){
rList.add(s);
}
}
return rList;
} /**
* 判断是否为空
*/
public boolean isEmpty() {
return list.isEmpty();
} /**
* 新增数据
*/
public boolean insertStudentDB(StudentBean bean) {
return list.add(bean);
} /**
* 删除操作:按学号删
*/
public boolean deleteStudentDB(StudentBean bean) {
for ( StudentBean s: list) {
if(s.getSno().equals(bean.getSno())){
return list.remove(s);
}
}
return false;
} /**
* 修改操作
*/
public boolean updateStudentDB(StudentBean bean) {
boolean bool=false;
int i=;
for (StudentBean s : list) {
if(s.getSno().equals(bean.getSno())){
list.set(i, bean);
bool=true;
break;
}
i++;
}
return bool;
} }

(2): Control层

----------逻辑控制操作(接口)控制规则:

 package cn.jason.services;

 import java.util.List;

 import cn.jason.db.StudentBean;

 /**
* 逻辑控制层的借口
* Created by Jason 2016-7-15 上午8:51:43
*/
public interface StudentServiceInf { //增删查改操作 boolean insertStudent(); boolean deleteStudent(); boolean updateStudent(); List<StudentBean> searchStudent(int index);//查询模式 1、姓名 2、学号 }

----------逻辑控制操作(接口实现子类)实现控制规则:

 package cn.jason.services;

 import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List; import cn.jason.daos.StudentDBDAOImpl;
import cn.jason.db.StudentBean; /**
* 逻辑控制实现子类
* Created by Jason 2016-7-15 上午9:19:37
*/
public class StudentServiceImpl implements StudentServiceInf { private StudentDBDAOImpl dao=null;
private BufferedReader br=null ;
public StudentServiceImpl(BufferedReader br){
dao=new StudentDBDAOImpl();
this.br=br;
} /**
* 数据显示处理
*/
private StudentBean getData(){ StudentBean student=null;
try {
System.out.println("请输入姓名:");
String name=br.readLine();
System.out.println("请输入性别:");
String sex=br.readLine();
if("男".equals(sex)||"女".equals(sex)){ }else{
System.out.println("性别输入有误!");
return student;
}
System.out.println("请输入年龄:");
String age=br.readLine();
int sage=;
if(Integer.parseInt(age)< || Integer.parseInt(age)>){
System.out.println("请设置年龄区段为:0-100 岁");
return student;
}else{
sage=Integer.parseInt(age);
}
System.out.println("请输入地址:");
String address=br.readLine(); student=new StudentBean();
student.setName(name);
student.setSex(sex);
student.setAge(sage);
student.setAddress(address); } catch (IOException e) {
e.printStackTrace();
}
return student;
} /**
* 新增操作
*/
public boolean insertStudent() {
boolean bool=false;
try {
System.out.println("请输入学号:");
String sno=br.readLine();
if(dao.getStudentBySno(sno).size()>){
System.out.println("当前学号已存在,不能做新增操作!");
return false;
}
StudentBean bean=getData();
if(bean==null){
return bool;
}
bean.setSno(sno);
bool= dao.insertStudentDB(bean); } catch (IOException e) {
e.printStackTrace();
return false;
}
return bool;
} /**
* 删除操作
*/
public boolean deleteStudent() {
boolean bool=false;
System.out.println("请输入要删除的学生学号");
try {
String sno = br.readLine();
StudentBean bean=null;
if(dao.getStudentBySno(sno).size()==){
System.err.println("没有找到这个学生,不能删除!");
}else{
bean=new StudentBean();
bean.setSno(sno);
bool=dao.deleteStudentDB(bean);
}
} catch (IOException e) {
e.printStackTrace();
} return bool;
} /**
* 修改操作
*/
public boolean updateStudent() {
boolean bool=false;
try {
System.out.println("请输入要修改的学生学号:");
String sno=br.readLine();
if(dao.getStudentBySno(sno).size()==){
System.out.println("当前学号不存在,不能做修改操作!");
return false;
}
StudentBean bean=getData();
if(bean==null){
return bool;
}
bean.setSno(sno);
bool= dao.updateStudentDB(bean); } catch (IOException e) {
e.printStackTrace();
return false;
}
return bool;
} /**
* 查询操作
*/
public List<StudentBean> searchStudent(int index) {
List<StudentBean> rlist=null;
switch (index) {//1、姓名 2、学号
case :
rlist=searchByName();
break;
case :
rlist=searchBySno();
break; }
return rlist;
} /**
*按学号查(精确查)
*/
private List<StudentBean> searchBySno() {
List<StudentBean> rList=null;
try {
System.out.println("请输入学号:");
String sno=br.readLine();
rList=dao.getStudentBySno(sno);
PrintData(rList);
} catch (IOException e) {
System.err.println("输入学号处发生错误");
return rList;
}
return rList;
} /**
*按姓名查(模糊查)
*/
private List<StudentBean> searchByName() {
List<StudentBean> rList=null;
try {
System.out.println("请输入姓名:");
String sname=br.readLine();
rList=dao.getStudentByName(sname);
PrintData(rList);
} catch (IOException e) {
System.err.println("输入姓名处发生错误");
return rList;
}
return rList;
} /**
* 显示查询的数据
*/
private void PrintData(List<StudentBean> rList){
System.out.println("姓名\t学号\t性别\t年龄\t地址");
for (StudentBean s : rList) {
System.out.println(s.getName()+"\t"+s.getSno()+"\t"+s.getSex()+"\t"+s.getAge()+"\t"+s.getAddress());
}
} /**
* 打印所有信息
*/
public void ShowData(){
System.out.println("姓名\t学号\t性别\t年龄\t地址");
for (StudentBean s : dao.getAllStudent()) {
System.out.println(s.getName()+"\t"+s.getSno()+"\t"+s.getSex()+"\t"+s.getAge()+"\t"+s.getAddress());
}
} /**
* 备份数据
*/
public boolean BakData(){ boolean bool=false;
BufferedOutputStream bos=null;
try{
File file=new File("testData.bak");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file,true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
bos=new BufferedOutputStream(fos); SimpleDateFormat sdf=new SimpleDateFormat("yyyy年-MM月-dd日 HH:mm:ss");
String date=sdf.format(System.currentTimeMillis());
bos.write(date.getBytes());
bos.write("姓名\t学号\t性别\t年龄\t地址".getBytes());
for (StudentBean s : dao.getAllStudent()) {
bos.write((s.getName()+"\t"+s.getSno()+"\t"+s.getSex()+"\t"+s.getAge()+"\t"+s.getAddress()).getBytes());
}
bool=true;
}catch(IOException e){
return false;
}
finally{
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return bool;
} }

(3): Views层

----------视图界面(在控制台展示)

 package cn.jason.views;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; import com.sun.org.apache.xml.internal.security.Init; import cn.jason.services.StudentServiceImpl; /**
* 控制台显示效果
* Created by Jason 2016-7-15 上午10:36:36
*/
public class MainView { private StudentServiceImpl control=null;
private BufferedReader br=null ; public MainView(){
br=new BufferedReader(new InputStreamReader(System.in));
control=new StudentServiceImpl(br); //初始化界面
init();
} /**
*初始化界面
*/
private void init() {
System.out.println("学生关系系统测试版");
boolean bool=true;
while(bool){
System.out.println("信息操作指令:0、删除 1、新增 2、修改 3、查询 4、打印 5、备份 6、退出");
String order;
try {
order = br.readLine();
if("".equals(order)){
if(control.deleteStudent()){
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
}else if("".equals(order)){
if(control.insertStudent()){
System.out.println("新增成功!");
}else{
System.out.println("新增失败!");
}
}else if("".equals(order)){
if(control.updateStudent()){
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
}
}else if("".equals(order)){
checkKindSearch();
}else if("".equals(order)){
control.ShowData();
}else if("".equals(order)){
if(control.BakData()){
System.out.println("打印完成,请注意查看!");
}else{
System.out.println("打印操作失败!");
}
}else if("".equals(order)){ if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.exit();
}else{
System.out.println("抱歉!请输入正确的操作指令!");
}
} catch (IOException e) {
e.printStackTrace();
}
} } /**
*查询细分类
*/
private void checkKindSearch() { try {
System.out.println("查询条件:1、姓名 2、学号");
String index=br.readLine();
if("".equals(index)){
control.searchStudent();
}else if("".equals(index)){
control.searchStudent();
}else{
System.err.println("输入有误,请核对后再输入");
} } catch (IOException e) {
e.printStackTrace();
} }
}

(4): 启动程序:main

 package cn.jason.start;

 import cn.jason.views.MainView;

 /**
* 程序启动类:
* Created by Jason 2016-7-15 上午10:50:49
*/
public class Start { public static void main(String[] args) {
new MainView();
} }

3、运行测试结果:

 学生关系系统测试版
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 请输入学号:
s001
请输入姓名:
Jason
请输入性别:

请输入年龄: 请输入地址:
长沙市 岳麓区
新增成功!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 请输入学号:
s002
请输入姓名:
Jask
请输入性别:

请输入年龄: 请输入地址:
北京
新增成功!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 请输入学号:
s003
请输入姓名:
Rose
请输入性别:

请输入年龄: 请输入地址:
纽约
新增成功!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 姓名 学号 性别 年龄 地址
Jason s001 男 长沙市 岳麓区
Jask s002 男 北京
Rose s003 女 纽约
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 查询条件:、姓名 、学号 请输入姓名:
Jason
姓名 学号 性别 年龄 地址
Jason s001 男 长沙市 岳麓区
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 查询条件:、姓名 、学号 请输入学号:
s002
姓名 学号 性别 年龄 地址
Jask s002 男 北京
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 打印完成,请注意查看!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 请输入要修改的学生学号:
s002
请输入姓名:
Jack_2
请输入性别:

请输入年龄: 请输入地址:
暂无详细住址信息
修改成功!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 姓名 学号 性别 年龄 地址
Jason s001 男 长沙市 岳麓区
Jack_2 s002 女 暂无详细住址信息
Rose s003 女 纽约
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 请输入学号:
s004
请输入姓名:
测试人物
请输入性别:

请输入年龄: 请输入地址:
暂无
新增成功!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 请输入要删除的学生学号
s005
没有找到这个学生,不能删除!
删除失败!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 姓名 学号 性别 年龄 地址
Jason s001 男 长沙市 岳麓区
Jack_2 s002 女 暂无详细住址信息
Rose s003 女 纽约
测试人物 s004 男 暂无
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 请输入要删除的学生学号
s004
删除成功!
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出 姓名 学号 性别 年龄 地址
Jason s001 男 长沙市 岳麓区
Jack_2 s002 女 暂无详细住址信息
Rose s003 女 纽约
信息操作指令:、删除 、新增 、修改 、查询 、打印 、备份 、退出

Java小例子(学习整理)-----学生管理系统-控制台版的更多相关文章

  1. Java学习笔记-学生管理系统

    Java学习笔记 一个Student类 public class Student { private String sid; private String name; private String a ...

  2. Java实现功能简单的学生管理系统(附带源代码)

    这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...

  3. Java设计模式(学习整理)---命令模式

    设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...

  4. 使用Java MVC模式设计一个学生管理系统

    最近在做web实验,要求是用jsp+servlet+mysql实现一个学生管理系统,完成对数据库的增删改查. 效果图:   代码: package dao; import java.util.List ...

  5. Java线程(学习整理)--4---一个简单的生产者、消费者模型

     1.简单的小例子: 下面这个例子主要观察的是: 一个对象的wait()和notify()使用情况! 当一个对象调用了wait(),那么当前掌握该对象锁标记的线程,就会让出CPU的使用权,转而进入该对 ...

  6. 模拟斗地主和学生管理系统 IO 版

    1.模拟斗地主 public class PlayCards { public static void main(String[] args) { String[] color = {"黑桃 ...

  7. Java线程(学习整理)--3--简单的死锁例子

    1.线程死锁的概念: 简单地理解下吧! 我们都知道,线程在执行的过程中是占着CPU的资源的,当多个线程都需要一个被锁住的条件才能结束的时候,死锁就产生了! 还有一个经典的死锁现象: 经典的“哲学家就餐 ...

  8. Java设计模式(学习整理)---策略模式

       1. 模式定义         把会变化的内容取出并封装起来,以便以后可以轻易地改动或扩充部分,而不影响不需要变化的其他部分: 2.模式本质:  少用继承,多用组合,简单地说就是:固定不变的信息 ...

  9. Java基础15-数组实例学生管理系统

    import java.util.Scanner; public class Student{ public static void main(String[] args){ Scanner in=n ...

随机推荐

  1. vijosP1629 八

    vijosP1629 八 链接:https://vijos.org/p/1629 [思路] 暴力容斥(看他们都这么叫=_=)+精度选择. 总体思路是先统计LR区间内满足是8倍数的数目ans,再从ans ...

  2. 4 weekend110的hdfs&mapreduce测试 + hdfs的实现机制初始 + hdfs的shell操作 + 无密登陆配置

    Hdfs是根/目录,windows是每一个盘符, 1  从Linux里传一个到,hdfs里去 2  从hdfs里下一个到,linux里去 想从hdfs里,下载到linux, 涨知识,记住,hdfs是建 ...

  3. 【转】shell 教程——06 Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编 ...

  4. PTA 06-图3 六度空间 (30分)

    "六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:"你和任何一个陌生人之间所间隔 ...

  5. final、抽象类、接口、多态、

       final———最终.作为一个修饰符 可以修饰类. 函数. 变量: 被final修饰的类不可以被继承: 被final修饰的方法不可以被重写: 被final修饰的变量只能够被赋值一次,既可以修饰成 ...

  6. Prof UIS相关

    Prof UIS 一款国外的VC++仿XP系统风格的免费界面库控件,含有近20个应用实例,每一个都可以顺利编译,用它生成的菜单类似OFFICE菜单一样,比起传统的窗体视觉舒服多了,VC编程的朋友对照文 ...

  7. gitbook 制作 beego 参考手册

    安装gitbook工具 npm install -g gitbook-cli 从github 下载beego文档 https://github.com/beego/beedoc 创建目录 在 zh-c ...

  8. centos中使用python遇到的几个问题

    用python搞了一个从excel中读取cobbler节点信息并加入cobbler中的脚本,运行的过程中出了不少问题,这里记录下来,方便日后查找! 一.yum install python,我通过这个 ...

  9. 二维码URL自己主动辨别Android和ISO设备,以便扫码后倒入不同的下载链接

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 【转】android的startActivityForResult学习心得

    http://blog.csdn.net/yanzi1225627/article/details/7800529 从昨晚到现在终于调试通了一个startActivityForResult的例子,网上 ...