[零基础学JAVA]Java SE应用部分-31.Java IO操作(05)IO操作实例讲解之实现简单MIS

简介:
定义一个Person类,产生一个对象,要求里面有姓名、年龄、成绩属性,之后把此对象保存在文件之中,可以在屏幕上显示人员的信息,也可以修改信息,但是要求有一个完整的菜单出现。 
如果完成此程序需要有几个类呢? 
1、Person类 
2、文件的操作类 
3、输入数据的类 
4、具体的操作Person的类
使用Eclipse进行开发
image
image
image
先分别定义以下几个类:
Person类
image
image
定义Person类属性
image
PersonOperate类
image
image
InputData输入数据类
image
定义三个方法:
image
Menu菜单显示类:
image
image
FileOperate文件操作类
image
image
Main主类测试客户端:
image
image
 
定义好这五个类后我们就要分别写代码哈~
首先是Person类
我们要写上Setter和Getter方法
image
image
image
然后写上两个构造方法
image
image
image
去掉黄色警告CTRL+1
image
image
这样Person类就写完了哈~~~
InputData类写代码
所有的输入数据的代码实际上都是很相似的,所以在此处设计一个InputData类,此类专门用于取得输入的各种数据类型。
image
这样就完成了输入数字的功能,我们在Test中进行验证
image
image
Person类完整代码:
package org.redking.demo.vo;    

import java.io.Serializable;    

@SuppressWarnings( "serial")    
public  class Person  implements Serializable{    
         private String name;    
         private  int age;    
         private  float score;    
         public Person(){}    
         public Person(String name,  int age,  float score) {    
                 super();    
                 this.name = name;    
                 this.age = age;    
                 this.score = score;    
        }    

         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  float getScore() {    
                 return score;    
        }    
         public  void setScore( float score) {    
                 this.score = score;    
        }    
         public String toString(){    
                 return  "姓名:"+ this.name+ ",年龄:"+ this.age+ ",成绩:"+ this.score;    
        }    

PersonOperate类完整代码:
package org.redking.demo.op;    

import org.redking.demo.util.FileOperate;    
import org.redking.demo.util.InputData;    
import org.redking.demo.vo.Person;    

public  class PersonOperate {    
         private InputData input =  null;    
         public PersonOperate(){    
                 this.input =  new InputData();    
        }    
         //完成具体的Person对象操作    
         public  void add(){    
                 //要使用输入数据的类    
                String name =  null;    
                 int age = 0;    
                 float score = 0.0f;    
                System.out.print( "输入姓名:");    
                name =  this.input.getString();    
                System.out.print( "输入年龄:");    
                age =  this.input.getInt();    
                System.out.print( "输入成绩:");    
                score =  this.input.getFloat();    
                 //生成Person对象,把对象保存在文件中    
                Person p =  new Person(name,age,score);    
                 try{    
                         new FileOperate().save(p);    
                        System.out.println( "数据保存成功!");    
                } catch(Exception e){    
                        System.out.println( "数据保存失败!");    
                }    
        }    
         public  void show(){    
                 //从文件中把内容读进来    
                Person p =  null;    
                 try{    
                        p = (Person)  new FileOperate().read();    
                } catch(Exception e){    
                        System.out.println( "内容显示失败,请确定数据是否存在!");    
                }    
                 if(p !=  null){    
                        System.out.println(p);    
                }    
        }    
         public  void update(){    
                 //先将之前的信息查出来    
                Person p =  null;    
                 try{    
                        p = (Person)  new FileOperate().read();    
                } catch(Exception e){    
                        System.out.println( "内容显示失败,请确定数据是否存在!");    
                }    
                 if(p !=  null){    
                        String name =  null;    
                         int age = 0;    
                         float score =0.0f;    
                        System.out.print( "请输入新的姓名(原姓名:"+p.getName()+ ")");    
                        name =  this.input.getString();    
                        System.out.print( "请输入新的年龄(原年龄:"+p.getAge()+ ")");    
                        age =  this.input.getInt();    
                        System.out.print( "请输入新的成绩(原成绩:"+p.getScore()+ ")");    
                        score =  this.input.getFloat();    
                         //信息重新设置    
                        p.setName(name);    
                        p.setAge(age);    
                        p.setScore(score);    
                         try{    
                                 new FileOperate().save(p);    
                                System.out.println( "数据更新成功!");    
                        } catch(Exception e){    
                                System.out.println( "数据更新失败!");    
                        }    
                }    
        }    

InputData类完整代码:
package org.redking.demo.util;    

import java.io.BufferedReader;    
import java.io.IOException;    
import java.io.InputStreamReader;    

public  class InputData {    
         private BufferedReader buf = null;    
         public InputData(){    
                buf =  new BufferedReader( new InputStreamReader(System.in));    
        };    
         public String getString(){    
                String str =  null;    
                 try {    
                        str = buf.readLine();    
                }  catch (IOException e) {}    
                 return str;    
        }    
         public  int getInt(){    
                 int temp = 0;    
                 //如果输入的不是数字,至少应该有一个提示,告诉用户输入错了~    
                 //可以使用正则验证    
                String str =  null;    
                 boolean flag =  true;    
                 while(flag){    
                         //输入数据    
                        str =  this.getString();    
                         if (!(str.matches( "\\d+"))){    
                                 //如果输入的不是一个数字,则必须重新输入    
                                System.out.print( "输入的内容必须是整数,请重新输入:");    
                        } else{    
                                 //输入的是一个正确的数字,则可以进行转换    
                                temp = Integer.parseInt(str);    
                                 //表示退出循环    
                                flag =  false;    
                        }    
                }    
                 return temp;    
        }    
         public  float getFloat(){    
                 float f = 0.0f;    
                 //如果输入的不是数字,至少应该有一个提示,告诉用户输入错了~    
                 //可以使用正则验证    
                String str =  null;    
                 boolean flag =  true;    
                 while(flag){    
                         //输入数据    
                        str =  this.getString();    
                         if (!(str.matches( "\\d+.?\\d{1,2}"))){    
                                 //如果输入的不是一个数字,则必须重新输入    
                                System.out.print( "输入的内容必须是小数(小数点后两位),请重新输入:");    
                        } else{    
                                 //输入的是一个正确的数字,则可以进行转换    
                                f = Float.parseFloat(str);    
                                 //表示退出循环    
                                flag =  false;    
                        }    
                }    
                 return f;    
        }    

 
FileOperate文件操作类完整代码:
package org.redking.demo.util;    

import java.io.File;    
import java.io.FileInputStream;    
import java.io.FileOutputStream;    
import java.io.ObjectInputStream;    
import java.io.ObjectOutputStream;    

public  class FileOperate {    
         public  static  final String FILENAME =  "E:\\person.ser";    
         //把对象保存在文件之中    
         public  void save(Object obj){    
                ObjectOutputStream out =  null;    
                 try {    
                        out =  new ObjectOutputStream( new FileOutputStream( new File(FILENAME)));    
                         //写入对象    
                        out.writeObject(obj);    
                } catch(Exception e){    
                         try {    
                                 throw e;    
                        }  catch (Exception e1) {}    
                } finally {    
                         try {    
                                out.close();    
                        } catch(Exception e){}    
                }    
        }    
         //把对象从文件之中读出来    
         public Object read()  throws Exception{    
                Object obj =  null;    
                ObjectInputStream input = null;    
                 try {    
                        input =  new ObjectInputStream( new FileInputStream( new File(FILENAME)));    
                        obj = input.readObject();    
                }  catch (Exception e) {    
                         throw e;    
                } finally{    
                         try{    
                                input.close();                                 
                        } catch(Exception e){}    
                }    
                 return obj;    
        }    

 
  Menu菜单类完整代码:
package org.redking.demo.menu;    

import org.redking.demo.op.PersonOperate;    
import org.redking.demo.util.InputData;    

public  class Menu {    
        InputData input =  null;    
         public Menu(){    
                 this.input =  new InputData();    
                 //循环出现菜单    
                 while( true){    
                         this.show();    
                }    
        }    
         //需要定义的菜单内容    
         public  void show(){    
                System.out.println( "\t\t\t1、增加人员信息");    
                System.out.println( "\t\t\t2、浏览人员信息");    
                System.out.println( "\t\t\t3、修改人员信息");    
                System.out.println( "\t\t\t4、退出系统");    
                System.out.print( "\n\n请选择要使用的操作:");    
                 int temp = input.getInt();    
                 switch(temp){    
                 case 1:{    
                         new PersonOperate().add();    
                         break;    
                }    
                 case 2:{    
                         new PersonOperate().show();    
                         break;    
                }    
                 case 3:{    
                         new PersonOperate().update();    
                         break;    
                }    
                 case 4:{    
                        System.out.println( "选择的是退出系统");    
                        System.out.println( "系统退出!");    
                        System.exit(1);    
                }    
                 default:{    
                        System.out.println( "输入的内容不正确");    
                         break;    
                }    
                }    
        }    

 
Test测试类完整代码:
package org.redking.demo.main;    

import org.redking.demo.menu.Menu;    

public  class Test {    
         public  static  void main(String[] args) {    
                 new Menu();    
        }    


  测试: 
image
测试成功~~~
image
总结 
在整个程序中某一块的修改不会影响其他部分。 
注意: 
在编写代码中,类的形成是逐步完成的,不是一下子就一定可以设计一个非常完美的类。
########################################








本文转自redking51CTO博客,原文链接: http://blog.51cto.com/redking/134645 ,如需转载请自行联系原作者
相关文章
|
14天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
23天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
16天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
29 3
|
26天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
31 7
|
24天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
39 3
|
24天前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
44 2
|
25天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
13 1
|
28天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
29天前
|
SQL 监控 Java
Java性能优化:提升应用效率与响应速度的全面指南
【10月更文挑战第21】Java性能优化:提升应用效率与响应速度的全面指南
|
26天前
|
Java 开发者
Java中的多线程基础与应用
【10月更文挑战第24天】在Java的世界中,多线程是提高效率和实现并发处理的关键。本文将深入浅出地介绍如何在Java中创建和管理多线程,以及如何通过同步机制确保数据的安全性。我们将一起探索线程生命周期的奥秘,并通过实例学习如何优化多线程的性能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编程的大门。
17 0
下一篇
无影云桌面