目标:掌握Java类的创建,Java  I/O操作,Java集合类的使用等

内容:

王老师非常喜欢读书,为了便于查阅,他每次买书回家后就在笔记本上登记每本书的详细信息(书名、作者、出版社、出版日期、价格),采用这种手工记录方式管理,检索书籍非常不方便。请你试着用Java编程,帮助他进行计算机管理。要求如下:

(1)  把每本书的信息存到文件“D:/BookList.txt”中,格式如下:

Java 2大全,Herbert Schildt,电子工业出版社, 2003/01,86

面向对象软件工程,Stephen R.Schach,机械工业出版社,2002/08,56

软件工程,Roger S. Pressman,清华大学出版社,2001/01,42

Design Patterns,Erich Gamma,机械工业出版社,2002/09,98

软件工程,张海藩,人民邮电出版社,2002/07,37

现代软件工程,孙涌,北京希望电子出版社,2002/08,42

面向对象技术UML教程,王少锋,清华大学出版社,2004/02,54

(2)    设计“书”类,包括属性:书名、作者、出版社版号、出版日期、价格;和设置、得到这些属性值的方法,并用Java实现;

(3)    设计“书包”类,包括一个TreeSet属性,代表所有书的集合,和向书包中加书的方法,从书包中拿出书的方法,以及得到所有书价格的方法,并用Java实现;

(4)    设计“图书管理员”类,包括一个“书包”类属性,代表对所有书的管理,和从数据文件“D:/BookList.txt”中读取每本书的信息加入书包中的方法,和在屏幕上打印所有书的信息(格式如下)的main方法,并用Java实现

书名              作者           出版社版号    出版日期   价格

-------------------------------------------------------------

Java 2大全  Herbert Schildt   电子工业出版社   2003/01   86

实现代码清单:Book.java(Book的类模型)SchoolBag.java(书包的类模型)BookManager.java(图书管理员类模型)

代码一:Book.java

public class Book implements Comparable{
private String bookname;
private String author;
private String press;
private String date;
private int price; public Book (){ }
public Book (String bookname,String author,String press,String date,int price) {
this.bookname = bookname;
this.author = author;
this.press = press;
this.date = date;
this.price = price;
} public void setBookname (String bookname) {
this.bookname = bookname;
}
public void setAuthor (String author) {
this.author = author;
}
public void setPress (String press) {
this.press = press;
}
public void setDate(String date) {
this.date = date;
}
public void setPrice(int price) {
this.price = price;
} public String getBookname() {
return bookname;
}
public String getAuthor() {
return author;
}
public String getpress() {
return press;
}
public int getPrice() {
return price;
}
public String toString(){
return bookname+" "+author+" "+press+" "+date+" "+price;
}
public int compareTo(Object o){
Book b = (Book)o;
if((this.bookname.compareTo(b.bookname))>0){
return 1;
}
else if((this.bookname.compareTo(b.bookname))==0){
return 0;
}
else return -1;
} public static void main(String[] args){
Book myBook= new Book("ff","yy","love you","haha",712);
System.out.println(myBook);
}
}

代码2:BookManager.java

import java.util.*;

public class SchoolBag {
private TreeSet<Book> booklist = new TreeSet<Book>(); public SchoolBag() { }
public SchoolBag (Book book) {
booklist.add(book);
}
public ArrayList<Integer> getAllPrice(){
ArrayList<Integer> bookprices = new ArrayList<Integer> ();
for(Book element: booklist) {
bookprices.add(element.getPrice());
}
return bookprices;
} public boolean add(Book book) { return booklist.add(book);
} public <E extends TreeSet<Book>> void setBooklist(E treeBook){
this.booklist = treeBook;
} //泛型方法,将泛型放在函数放回类型之前
public TreeSet<Book> getBooklist(){
return booklist;
}
public boolean remove(Book book) {
if(booklist.isEmpty()) {
System.out.println("Warning ,SchoolBag is Empty!");
return false;
}
else{
booklist.remove(book);
return true;
}
}
public static void main(String[] args){
Book mybook = new Book("xx","ff","geg","fege",12);
Book herbook = new Book("ss","ll","hh","rr",712);
//测试构造方法
SchoolBag sb = new SchoolBag(mybook);
//测试add
sb.add(herbook);
System.out.println(sb.booklist);
TreeSet<Book> bl = sb.getBooklist();
System.out.println(bl);
//测试remove
sb.remove(mybook);
System.out.println(bl);
//测试setBooklist
Book hisbook = new Book("hh","ss","nn","gg",464);
Book itsbook = new Book("ff","hh","KK","tt",375);
TreeSet<Book> b2 = new TreeSet<Book>();
b2.add(hisbook);
b2.add(itsbook);
sb.setBooklist(b2);
System.out.println("-----------------------");
System.out.println(sb.booklist);
//测试printAllPrice
ArrayList al = sb.getAllPrice();
System.out.println(al); } }

代码3:BookManager.java

import java.util.*;
import java.io.*; public class BookManager {
private SchoolBag schoolBag = new SchoolBag(); public BookManager(){ }
public BookManager(SchoolBag s){ } public void readData() { try {
File data = new File("BookList.txt");
FileReader fr = new FileReader(data);
BufferedReader br = new BufferedReader(fr); String[] content = new String[5];
Book book;
String str;
while((str = br.readLine())!=null){
content = str.trim().split(",|,");
book = new Book();
book.setBookname(content[0].trim());
book.setAuthor(content[1].trim());
book.setPress(content[2].trim());
book.setDate(content[3].trim());
book.setPrice(Integer.parseInt(content[4].trim()));
schoolBag.add(book);
}
br.close();
}catch(IOException e) {
e.printStackTrace();
}
} public void print() {
System.out.println("------------------------------------------------------------------------");
System.out.println("书名 作者 出版号 出版日期 价格 ");
System.out.println("------------------------------------------------------------------------");
TreeSet<Book> treeBook = schoolBag.getBooklist();
for(Book book:treeBook){
System.out.println(book.toString());
} } public static void main(String[] args) {
BookManager bm = new BookManager();
bm.readData();
bm.print(); }
}

程序运行后的结果(使用JDK在DOS下运行的控制台界面)

Java实验1-文件IO的更多相关文章

  1. 3,Java中的文件IO流

    1,File类 ··· 概念:File对象可以表示一个文件或目录.可以对其进行增删改查. ··· 常用方法:     File f = new File(".");     判断是 ...

  2. Java学习笔记--文件IO

    简介 对于任何程序设计语言,输入和输出(Input\Output)都是系统非常核心的功能,程序运行需要数据,而数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备 ...

  3. 文件IO操作

    前言 本文介绍使用java进行简单的文件IO操作. 操作步骤 - 读文件 1. 定义一个Scanner对象 2. 调用该对象的input函数族进行文件读取 (参见下面代码) 3. 关闭输入流 说明:其 ...

  4. 使用Java的多线程和IO流写一个文件复制功能类

    创建一个复制功能类,继承Thread类,重写run()方法,把FileInputStream和FileOutputStream输入输出流写在run()方法内.示例代码如下: import java.i ...

  5. Java文件IO操作应该抛弃File拥抱Paths和Files

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream;import java.nio.file.FileSystem; ...

  6. Java 文件IO续

    文件IO续 File类    用来将文件和文件夹封装成对象 方便对文件和文件夹的属性信息进行操作    File对象可以作为参数传递给流的构造函数 Demo1 File的构造方法 public cla ...

  7. Java 文件IO

    文件IO Java IO    IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中    按操作数据分为 字节流和字符流        字符流的 ...

  8. Java 之文件IO编程 之写入

    package com.sun; /* * 操作对文件IO的写 * 2014-08-10 */ import java.io.*; public class File_Write { public s ...

  9. Java 之文件IO编程 之读取

    package com.sun; /* * 这里是对文件IO流读取的操作 * 2014-08-10 */ import java.io.*; public class File_test { publ ...

随机推荐

  1. CSS文件开头到底声明@charset "utf-8"

    @charset "utf-8" 这个声明是告诉浏览器[我的CSS文件是UTF-8编码的],但实际上这个文件可以不用是UTF-8编码的,所以这个声明能达到欺骗浏览器的作用. 但实践 ...

  2. ecshop /search.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP商城系统Search.php页面过滤不严导致SQL注入漏洞 ...

  3. dedeCMS /plus/ad_js.php、/plus/mytag_js.php Vul Via Injecting PHP Code By /plus/download.php Into DB && /include/dedesql.class.php

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对于这个漏洞,我们可以简单概括如下 . "/plus/download. ...

  4. 数据结构算法C语言实现(二十)--- 6.3.1遍历二叉树

    一.简述 二叉树的遍历主要是先序.中序.后序及对应的递归和非递归算法,共3x2=6种,其中后序非递归在实现上稍复杂一些.二叉树的遍历是理解和学习递归及体会栈的工作原理的绝佳工具! 此外,非递归所用的栈 ...

  5. python抓取网页过程

    准备过程 1.抓取网页的过程 准备好http请求(http request)->提交对应的请求->获得返回的响应(http response)->获得网页源码 2.GET还是POST ...

  6. 【Alpha阶段】第四次Scrum例会

    会议信息 时间:2016.10.20 21:00 时长:20min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 个人任务报告 姓名 今日已完成Issue 明日计划Issue 今日已做事务 ...

  7. Enlisting multiple 1-phase aware participants in the same transaction

    In some cases it may be necessary to enlist participants that aren't two-phase commit aware into a t ...

  8. Android shell 下 busybox,clear,tcpdump、、众多命令的移植

    http://my.oschina.net/mopidick/blog/167372 作为一名Android开发者,经常需要进入Android 的shell终端运行一些命令.但是我们发现Android ...

  9. python 安装包总结

    PIL安装(Centos6.6) 1. 安装PIL所需的系统库 (centos6.6)yum install zlib zlib-devel -yyum install libjpeg libjpeg ...

  10. Java数据库——处理大数据对象

    处理大数据对象 CLOB中可以存储海量文字 BLOB中可以存储海量二进制数据 如果程序中要想处理这样的大对象操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本 ...