用java编写一个,图书管理系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java编写一个,图书管理系统相关的知识,希望对你有一定的参考价值。
图书管理系统
主要描述:
一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息。此系统功能分为面向学生和面向管理员两部分,其中学生可以进行借阅、续借、归还和查询书籍等操作,管理员可以完成书籍和学生的增加,删除和修改以及对学生,借阅、续借、归还的确认。
如:
图书室有各种图书一万多册。
每种图书都有书名、书号(ISBN)、一名或多名作者(译者)、出版社、定价和内容简介。
借书证记录有借阅者的姓名、所在单位、职业等。
凭借书证借书,每次最多能借8本书。借书期限最长为30天。
实现新进图书的数据录入。
实现对所有购进图书的分类查询和分类统计。
能够按书名、作者等分类查询现有图书的数量。
记录借阅者的个人资料和所借图书的书名、书号数据等。
有空能搞定你无法解决的题目
如果你有类似的要求也能联系我
ES:\\F3BE205E98C61E3942B3CDFC44D10E6F
交易提醒:预付定金有风险
交易提醒:用户名中包含联系方式勿轻信 参考技术B CSDN上找去 参考技术C
我有,上CSDN的话应该也不好找,很多代码不完整。楼主要的话可以微星关注或者PC访问RT
参考技术D 。。。LZ这个要看你自己写了,估计没人给你写java粗略版图书管理系统
需求:编写“图书管理”程序,能支持对书的增加,删除,查看操作,并支持退出程序功能。
每本书应包括编号,书名,价格。删除书必须输入书的编号,若输入书编号无对应的书则用提示输入有误,若有并删除且提示删除成功。
这个程序我采用IO流去实现,用txt文件存储书籍信息。
一、第一步:创建一个书的类Book.java
package 图书管理程序升级版; 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 + "]"; } }
二、第二步:创建增删修改、查询功能的接口类BookDao.java
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);//删除书籍 }
三、第三步:创建接口的实现类BookDaoImpl.java
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<tempLength;a++) { sb.append(" "); } raf.writeBytes(new String(sb.toString().getBytes("gb2312"), "ISO-8859-1")); }else { //替换的字符串字节数比源字符串大或两者相等 raf.writeBytes(new String(buffer.getBytes("gb2312"), "ISO-8859-1")); } }else {//不是最后一行 //回到行首,减去2的原因是行末有\\r\\n,占2字节 raf.seek(lastpoint-changeLine.getBytes().length-2); int currentLength=changeLine.getBytes().length;//原字符串的长度 int targeLength=buffer.getBytes().length;//替换后字符串的长度 //替换的字符串字节数比源字符串小,目的是防止修改的内容没有没全替换掉 if(currentLength>targeLength) { int tempLength=currentLength-targeLength; StringBuilder sb=new StringBuilder(buffer); //源字符串没替换的字符用空格代替 for(int a=0;a<tempLength;a++) { sb.append(" "); } raf.writeBytes(new String(sb.toString().getBytes("gb2312"), "ISO-8859-1")); }else { //替换的字符串比源字符串大或两者相等 raf.writeBytes(new String(buffer.getBytes("gb2312"), "ISO-8859-1")); } } break; } } } catch (Exception e) { e.printStackTrace(); }finally{ if(raf!=null) { try { raf.close(); } catch (IOException e) { System.out.println("用户释放资源失败"); } } } return true; } /**删除书籍信息 * @param bookName 用户要删除的书籍名称 * @param ID 用户输入该书籍的编号 */ public void cancelBook(String bookName,String ID) { boolean flag=false; BufferedWriter bw=null; BufferedReader br=null; StringBuilder sb=null; try { bw=new BufferedWriter(new FileWriter(file1)); br=new BufferedReader(new FileReader(file)); String line=null; sb=new StringBuilder(); while((line=br.readLine())!=null) { //要删除的那一行 if(line.contains(bookName)) { String []data=line.split("-");//将书籍编号、书籍名、书籍价格存在数组中 if(!ID.equals(data[0])) System.out.println("输入编号不正确"); else //如果删除的书籍信息都匹配成功 flag=true; }else {
//不是要删除的那一行 sb.append(line).append("\\r\\n");//存储没有被删的书籍信息 } }
int lastindex=sb.lastIndexOf("\\r\\n");//获取最后一行书籍信息的回车换行符索引
sb.delete(lastindex,sb.length());//删除最后一行书籍信息的回车换行符
//如果输入的删除信息都匹配成功,就开始删除信息 if(flag) { bw.write(sb.toString());//将字符串写进新的文件中 //重命名文件必须先关闭流 bw.close(); br.close(); if(file.delete())//重命名前必须删除同名文件 file1.renameTo(file); } }catch (Exception e) { e.printStackTrace(); }finally{ if(br!=null&bw!=null) { try { bw.close(); br.close(); } catch (IOException e) { System.out.println("用户释放资源失败"); } } } } }
四、最后一步:测试类Test.java
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; } } } }
结果:
小结:
java小白,没怎么优化,代码有点长。这个程序做了差不多一周,因为卡在修改书籍那里了,修改书籍采用了RandomAccessFile(随机访问流),可以在当前文件修改内容,不用修改一次就重新创建一个新文件。接下来想跟安卓一起结合起来,做一个登录图书管理系统页面。希望可以做出来。
以上是关于用java编写一个,图书管理系统的主要内容,如果未能解决你的问题,请参考以下文章
用java编写一个简单的图书管理系统。 要求:实现浏览,借书,还书,查询,退出等功能(每次最多能借