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. Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/lock

    推荐博客:http://blog.sina.com.cn/s/blog_5c1450a8010188ju.html Ubuntu 使用apt-get时提示错误:无法获得锁 /var/lib/dpkg/ ...

  2. SQL 判断字段中指定字符出现的次数

    原文地址:SQL 判断字段中指定字符出现的次数 原理:将指定字符转换为空,原长度减去转换后的长度就是指定字符的次数. 在做数据处理时遇到一个SQL操作的问题就是有一列关键词字段,字段中包含各种乱七八糟 ...

  3. java基础(十六)集合(三)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  4. 常用的Git命令

    我的常用的Git命令 Git仓库配置常用 1. clone 克隆一份远程的Git版本库 git clone git://github.com/someone/some_project.git some ...

  5. Bzoj 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 动态规划

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1006  Solved: ...

  6. 如何让虚拟目录里面的webconfig不继承网站的设置

    在一个网站 中国红木网 下 建一个虚拟目录,结果虚拟目录系统会调用 中国红木网 上的web.config, 在网上找到以下解决方案 在(如根目录)所在的Web.config加上 如:<locat ...

  7. Compress、tar、gzip、zcat、bzip2、bzcat、打包解压命令行

    讲解内容: Linux环境中,压缩文件案的扩展名大多是*.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2. *.z             compress程序亚索的文件: *.g ...

  8. Spark Repl过程分析(源码)

  9. 解析Qt4.7.3编译MySql数据库驱动,存中文乱码、过滤转义字符问题

    问题:使用QSqlDataBase类建立连接MySql数据库驱动加载失败 QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available ...

  10. Android中shape属性详解

    一.简单使用 刚开始,就先不讲一堆标签的意义及用法,先简单看看shape标签怎么用. 1.新建shape文件 首先在res/drawable文件夹下,新建一个文件,命名为:shape_radius.x ...