目标:掌握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. 【BZOJ-1179】Atm Tarjan + SPFA

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 2407  Solved: 993[Submit][Status ...

  2. codeforces 723F : st-Spanning Tree

    Description There are n cities and m two-way roads in Berland, each road connects two cities. It is ...

  3. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)

    catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...

  4. Linux 下进程的内存空间分配

    这里主要是以 C 语言为例,其他语言开发的程序,每个进程都会有一个类似的空间.下面是一段 C 代码: #include <stdlib.h> #include <stdio.h> ...

  5. iOS 自定义对象转NSDictionary

    我们在向后台Post数据的时候,常常需要把某个对象作为参数,比如在AF的框架中,我们进行Post时,其中的para参数就是需要NSdictionary的 Alamofire.request(.POST ...

  6. CentOS设置防火墙开放端口

    1. iptables是linux下的防火墙,同时也是服务的名称. service iptables status service iptables start service iptables st ...

  7. JavaScript中的事件对象

    JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有 ...

  8. JS-Date对象

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

  9. win 2012 关闭IE增强设置

  10. 自然语言15.1_Part of Speech Tagging 词性标注

    QQ:231469242 欢迎喜欢nltk朋友交流 https://en.wikipedia.org/wiki/Part-of-speech_tagging In corpus linguistics ...