java粗略版图书管理系统
2021-02-12 14:19
标签:dom print false 回车 adl ddb 价格 exception gb2312 需求:编写“图书管理”程序,能支持对书的增加,删除,查看操作,并支持退出程序功能。 每本书应包括编号,书名,价格。删除书必须输入书的编号,若输入书编号无对应的书则用提示输入有误,若有并删除且提示删除成功。 这个程序我采用IO流去实现,用txt文件存储书籍信息。 一、第一步:创建一个书的类Book.java 二、第二步:创建增删修改、查询功能的接口类BookDao.java 三、第三步:创建接口的实现类BookDaoImpl.java 四、最后一步:测试类Test.java 结果: 小结: java小白,没怎么优化,代码有点长。这个程序做了差不多一周,因为卡在修改书籍那里了,修改书籍采用了RandomAccessFile(随机访问流),可以在当前文件修改内容,不用修改一次就重新创建一个新文件。接下来想跟安卓一起结合起来,做一个登录图书管理系统页面。希望可以做出来。 java粗略版图书管理系统 标签:dom print false 回车 adl ddb 价格 exception gb2312 原文地址:https://www.cnblogs.com/panqiaoyan/p/12730804.htmlpackage 图书管理程序升级版;
public class Book {
private String ID;//书的编号
private String Name;//书名
private String price;//书的价格
public Book() {
super();
}
public Book(String iD, String name, String price) {
super();
ID = iD;
Name = name;
this.price = price;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Book other = (Book) obj;
if (ID == null) {
if (other.ID != null)
return false;
} else if (!ID.equals(other.ID))
return false;
if (Name == null) {
if (other.Name != null)
return false;
} else if (!Name.equals(other.Name))
return false;
if (price == null) {
if (other.price != null)
return false;
} else if (!price.equals(other.price))
return false;
return true;
}
@Override
public String toString() {
return "Book [ID=" + ID + ", Name=" + Name + ", price=" + price + "]";
}
}
package 图书管理程序升级版;
/**
* 图书馆管理程序的接口
* @author Asus
*
*/
interface BookDao {
public void addBook(Book book);//增添书籍
public void findBook(String bookName);//查询书籍
public boolean alterBook(String BookName,String newstr);//修改书籍内容
public void cancelBook(String bookName,String ID);//删除书籍
}
package 图书管理程序升级版;
import java.io.BufferedReader;
//import static net.mindview.util.Print.print;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
public class BookDaoImpl implements BookDao{
private static File file=new File("bookUser.txt");
private static File file1=new File("temp.txt");
static {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println("用户创建信息文件失败");
}
}
/**增添书籍
* @param Book 书籍信息
*
* */
public void addBook(Book book) {
BufferedWriter bw=null;
try {
bw=new BufferedWriter(new FileWriter(file,true));//true代表将数据写入文件末尾处,而不是文件开始处
bw.write("\r\n");//因为文件最后一行的末尾没有回车换行符,如果不先加回车换行符,就会直接在最后一行写,不会新增一行
bw.write(book.getID()+"-"+book.getName()+"-"+book.getPrice());
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(bw!=null) {
try {
bw.close();
} catch (IOException e) {
System.out.println("用户释放资源失败");
}
}
}
}
/**查询书籍信息
* @param bookName 用户要查询的书籍名称
*
*/
public void findBook(String bookName) {
BufferedReader br=null;
try {
br=new BufferedReader(new FileReader(file));
String readLine = "";
while((readLine = br.readLine()) != null){
String list[]=readLine.split("-");
if(list[1].equals(bookName)) {
System.out.println("ID:"+list[0]+"\n书名:"+list[1]+"\n价格:"+list[2]);
System.out.println("--------------------");
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(br!=null) {
try {
br.close();
} catch (IOException e) {
System.out.println("用户释放资源失败");
}
}
}
}
/**修改书籍信息
* @param oldstr 原书籍信息
* @param newstr 修改后的书籍信息
* @return
*/
public boolean alterBook(String oldName,String buffer) {
File file=new File("bookUser.txt");
RandomAccessFile raf=null;
try {
raf=new RandomAccessFile(file, "rw");
String Line=null;
//System.out.println(raf.length());
while((Line=raf.readLine())!=null) {
String changeLine=new String(Line.getBytes("ISO-8859-1"), "gb2312"); //gb2312是你文本编码格式。
//查找要替换的内容
if(changeLine.contains(oldName)) {
//得到当前指针的位置,如果不是最后一行,就应该是在oldName\r\n后面;
//如果是最后一行,则就在oldName后面
long lastpoint=raf.getFilePointer();
//如果是最后一行
if(lastpoint==raf.length()) {
//指针回到行首
raf.seek(lastpoint-changeLine.getBytes().length);
int currentLength=changeLine.getBytes().length;//原字符串的字节长度,1个中文字符占2字节
int targeLength=buffer.getBytes().length;//替换后字符串的字节长度
//替换的字符串字节数比源字符串小
if(currentLength>targeLength) {
int tempLength=currentLength-targeLength;
StringBuilder sb=new StringBuilder(buffer);
//目的是防止修改的内容没有没全替换掉
for(int a=0;a
package 图书管理程序升级版;
import java.util.Scanner;
public class Test {
public static void main(String args[]) {
String str="y";
Scanner sc=new Scanner(System.in);
BookDao ud=new BookDaoImpl();
//欢迎界面
while(str.equals("y")) {
System.out.println("----------欢迎光临-----------");
System.out.println("1 增添书籍");
System.out.println("2 查询书籍");
System.out.println("3 修改书籍");
System.out.println("4 删除书籍");
//键盘录入选择项目
System.out.println("请输入你的选项:");
String choice=sc.nextLine();
switch (choice) {
case "1": {
System.out.println("请输入书籍的编号:");
String ID=sc.nextLine();
System.out.println("请输入书籍名称:");
String name=sc.nextLine();
System.out.println("请输入书籍价钱:");
String price=sc.nextLine();
Book book=new Book(ID,name,price);
ud.addBook(book);
break;
}
case "2":
System.out.println("请输入要查询的书籍名称:");
String findName=sc.nextLine();
ud.findBook(findName);
break;
case "3":
StringBuffer buffer=new StringBuffer();
System.out.println("请输入你要修改的书籍名称:");
String oldName=sc.nextLine();
ud.findBook(oldName);
System.out.println("修改后的书籍编号是:");
String new1=sc.nextLine();
System.out.println("修改后的书籍名称是:");
String new2=sc.nextLine();
System.out.println("修改后的书籍价格是:");
String new3=sc.nextLine();
buffer.append(new1).append("-").append(new2).append("-").append(new3);
if(ud.alterBook(oldName,buffer.toString())) {
System.out.println("修改成功!修改后的信息是:");
ud.findBook(new2);
}
break;
case "4":
System.out.println("请输入你要删除的书籍名称:");
String name=sc.nextLine();
System.out.println("请输入该书籍的编号:");
String id=sc.nextLine();
ud.cancelBook(name, id);
break;
default:
System.out.println("欢迎下次光临");
System.exit(0);
}
System.out.println("是否继续查询:y/n");
str=sc.nextLine();
if(str.equals("n")) {
System.out.println("欢迎下次光临");
break;
}
}
}
}
下一篇:Javascript编程技巧