要求
编写一个保存书店每日交易记录的程序,使用字节流将书店的交易信息记录在本地的 csv文件中。当用户输入图书编号时,后台会根据图书编号查询到相应图书信息,并返回打印出来。用户紧接着输入购买数量,系统会判断库存是否充足,如果充足则将信息保存至本地的csv文件中,其中,每条信息包含了“图书编号”“图书名称”“购买数量”“单价”“总价”“出版社”等数据,每个数据之间用英文逗号或空格分割,每条数据之间由换行符分割。保存的时候需要判断本地是否存在当天的数据,如果存在则追加,不存在则新建。文件命名格式为“销售记录”加上当天日期加上“.csv”后缀,如“销售记录20160321.csv”。
思路
创建一个book类,你可以重写他的tostring方法,这样打印book的时候就可以显示图书信息了。
package Laberry;
import javax.swing.text.DateFormatter;
import java.io.*;
import java.text.DateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
public class Book {
String no;
String name;
String chu_ban_she;
int price;
int numb;
public Book() {
}
public Book(String no, String name, String chu_ban_she, int price, int numb) {
this.no = no;
this.name = name;
this.chu_ban_she = chu_ban_she;
this.price = price;
this.numb = numb;
// book_map.put(no, book); //创建一个数组来存储其他信息。通过key找到所有其他信息。
}
public boolean is_book_full(){
return numb >= 0 ;
}
public static void save(Book book, LocalDate date) throws IOException {
// BufferedOutputStream outputStream = new BufferedOutputStream();//保存的时候需要判断本地是否存在当天的数据,如果存在则追加,不存在则新建。文件命名格式为“销售记录”加上当天日期加上“.csv”后缀,如“销售记录20160321.csv”。保存的时候需要判断本地是否存在当天的数据,如果存在则追加,不存在则新建。文件命名格式为“销售记录”加上当天日期加上“.csv”后缀,如“销售记录20160321.csv”。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");//MM要大些 2024-03-03
String filename = "销售记录" + date.format(formatter) + ".csv";
String filepath = "E:\\桌面\\Library\\";
File file = new File(filepath + filename);
BufferedWriter writer = new BufferedWriter(new FileWriter(file,true));
System.out.println(file);
if(file.exists()){
writer.flush();
writer.write("书号,书名,出版社,价格,数量\n");
writer.flush();
}
writer.flush();
//写去哪个路径,程序没说,是指写在该项目下嘛?
writer.write(book.no + ","+book.name+"," + book.chu_ban_she + ","+book.price+book.numb+"\n");
System.out.println("交易成功,记录已保存,期待您的下次光临!");
writer.flush();
}
}
Library类
你可以理解为main主类
package Laberry;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Scanner;
public class Library {
Book book1 = new Book("001", "java基础程序设计", "清华大学出版社", 88, 100);
Book book2 = new Book("002", "python", "清华大学出版社", 666, 100);
public Library() {
}
public static void main(String[] args) throws IOException {
Library library = new Library();
library.sales();
}
public void sales() throws IOException {
HashMap<String, Book> book_map = new HashMap<String, Book>();
book_map.put(book1.no, book1);
book_map.put(book2.no, book2);
Scanner scanner = new Scanner(System.in);
System.out.println("please write down you want book number");
String user_want_no = scanner.nextLine();
// System.out.println(user_want_no + " 的信息:" + book_map.get(user_want_no));这样打印的是地址
Book user_want_book = book_map.get(user_want_no);
System.out.println(user_want_no + " 的信息:" + user_want_book.name + ", 出版社: " + user_want_book.chu_ban_she + ", 价格: " + user_want_book.price+",剩余数量:"+user_want_book.numb);
if (user_want_book.is_book_full()) {
System.out.println("您要的书籍还有剩余!请问您要购买多少本?");
int user_want_buy_numb = scanner.nextInt();
user_want_book.numb = user_want_book.numb - user_want_buy_numb;
try{LocalDate now_date = LocalDate.now();
user_want_book.save(user_want_book,now_date);}
catch (IOException e){
System.err.println("保存错误"+e.getMessage());
e.printStackTrace();
}
}else {
System.out.println("抱歉您想要的书籍已经卖完啦!");
}
}
}