利用Java编写的图书管理程序

说明

本项目是一个简单的Java程序,利用maven就行构建和ideaj社区版以及jdk11进行编写。项目地址为:图书管理系统,本程序具有增加、删除、查询的功能,其中查询功能支持模糊查询,但是删除功能不支持。利用文本文件来充当数据库程序会自动跳过第一行的表头。如果想自行添加数据记得用中文逗号隔开,程序是通过每一行读取来计算书的数量的。

首先是目录结构

在这里插入图片描述

Run类

package tushuguanli;
//作者:我把名字打长就会有人跟着念

public class Run {
    public static void main(String a [])
    {
        GongNeng gongNeng=new GongNeng();
        gongNeng.run();
    }
}

GongNeng类

package tushuguanli;

import java.util.Scanner;
public class GongNeng {

    public static void run()
    {
        System.out.println("---------------------图书管理系统1.0----------------------------");
        ChaXun chaXun=new ChaXun();
        chaXun.DuQu();
        System.out.println("1、查找");
        System.out.println("2、插入");
        System.out.println("3、删除");
        System.out.println("4、退出");
        System.out.println(">>>>请输入你想要的功能所对应的相应数字(列如输入数字1进入到查询功能):");
        Scanner scanner=new Scanner(System.in);
        String chooseStr=scanner.next();
        if (chooseStr.equals("1"))
        {
            chaXun.choose();
            run();
        }
        else if (chooseStr.equals("2"))
        {
            ChaRu chaRu=new ChaRu();
            chaRu.read();
            run();
        }
        else if (chooseStr.equals("3"))
        {
            ShanChu shanChu=new ShanChu();
            shanChu.choosegonneng();
            run();
        }
        else if (chooseStr.equals("4"))
                System.exit(0);
        else
              run();
    }
}

DuQuWenJian类

package tushuguanli;

import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class DuQuWenJian {
    ArrayList<String> librarylist=new ArrayList<>() ;
    static String[] ISBN;//数组要使用静态变量否则新建对象是重新分配内存会把变量里的数据清零
    static String[] bookname;
    static String[] bookprice;
    RandomAccessFile randomAccessFile;
    void read(){
        int n=-1;
        try {
            File file;
            file = new File("src/main/resources","book.txt");//如果该目录下没有book.txt文件那就会自动创建一个
            randomAccessFile=new RandomAccessFile(file,"rw");//参数r代表读取,w代表写入,rw代表既可以读取也可以写入
            long length=randomAccessFile.length();//获取文件的长度
            long position=0;
            randomAccessFile.seek(position);//将读取位置定位到文件的起始位0
            while (position<length)//当读取到小于文件的长度的位置是执行下面的代码
            {
                String str=randomAccessFile.readLine();
                if (str.equals(""))//如果是空白行就跳过
                {
                    position=randomAccessFile.getFilePointer();//当读取到空行时获得当前读取文件的位置
                    continue;//继续循环但是不执行下面的循环语句
                }
                else
                {
                    byte b[]=str.getBytes("ISO_8859_1");//用ISO_8859_1重新编码,不要使用utf-8进行重新编码否则会乱码
                    String str2=new String(b);//使用当前机器默认编码将字节数组转换为字符串
                    String strrepl=str2.replaceAll("\t","");//利用替换函数将\t删除
                    String strrepl2=strrepl.replaceAll(" ","");//删除空格
                    StringTokenizer st=new StringTokenizer(strrepl2,",");//分割字符串
                    while(st.hasMoreTokens()){
                        librarylist.add(st.nextToken());//将分割的字符串添加到list里
                    }
                }
                n++;//书的本数
                position=randomAccessFile.getFilePointer();//获得当前读取文件的位置
            }
            randomAccessFile.close();
            ISBN(n);
            bookname(n);
            bookprice(n);
            if ((ISBN!=null)&&(bookname!=null))
            {
                System.out.println("<----读取文件成功,一共有:"+n+"本书---->");
            }
        } catch (IOException e) {
            System.out.println(e);
        }
    }
    public void ISBN(int n)
    {

        int n1=0;
        ISBN=new String[n];//设置数组长度为书本的数量
        for ( int i=3;i<librarylist.size();i+=3)//循环向list获取ISBN码,前三个list数据是表头所以从3开始
        {
                String ISBNex = librarylist.get(i);
                ISBN[n1]=ISBNex;//赋值
                n1++;
        }
    }
    public void bookname(int n)
    {
        int x,y=0;
        bookname=new String[n];
        for (x=4;x<librarylist.size();x+=3)
        {
            bookname[y]=librarylist.get(x);
            y++;
        }
    }
    public void bookprice(int n)
    {
        int x,y=0;
         bookprice= new String[n];
        for (x=5;x<librarylist.size();x+=3)
        {
            bookprice[y]=librarylist.get(x);
            y++;
        }
    }
}

ChaRu类

package tushuguanli;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class ChaRu {
    String Str1;
    String Str2;
    String Str3;
    FileOutputStream fileOutputStream;
    public void read()  {
        try {
            File file;
            file = new File("src/main/resources","book.txt");//如果该目录下没有book.txt文件那就会自动创建一个
            fileOutputStream=new FileOutputStream(file,true);//如果第二个参数设置为TRUE,那么write方法将从文件的末尾写入数据
            System.out.println(">输入书本ISBN:");
            Scanner scanner=new Scanner(System.in);
            Str1=scanner.next();
            System.out.println(">输入书名称:");
            Scanner scanner1=new Scanner(System.in);
            Str2=scanner1.next();
            System.out.println(">输入书本价格:");
            Scanner scanner2=new Scanner(System.in);
            Str3=scanner2.next();
            String infoStr="\n"+Str1+",    "+Str2+"     ,     "+Str3;
            Writerinfo(infoStr);
        }
       catch (IOException e)
       {
           System.out.println(e);
       }

    }
    public void Writerinfo(String writeStr)  {
            String writeStr2;
            writeStr2=writeStr;
        try {
            byte[] c =writeStr2.getBytes("UTF-8");
            fileOutputStream.write(c);//插入数据
            fileOutputStream.close();
            System.out.println("插入成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

ShanChu类

package tushuguanli;

import java.io.*;
import java.util.Scanner;
import java.util.regex.Pattern;
public class ShanChu {
    int bookname_num=0;
    int bookISBN_num=0;
    DuQuWenJian duQuWenJian=new DuQuWenJian();
    public void choosegonneng()
    {
        duQuWenJian.read();//读取文件
        System.out.println(">>>>请选择要按照什么信息来删除书本:(输入1按照书本名称来删除书本信息,输入2按照书本ISBN来删除书本信息,输入数字3重新选择功能,输入其他退出程序)");
        Scanner scanner=new Scanner(System.in);
        String chooseStr=scanner.next();
        if (chooseStr.equals("1"))//选择功能
        {
            ShuRu_bookname();
        }
        else if (chooseStr.equals("2"))
        {
            ShuRu_bookISBN();
        }
        else if (chooseStr.equals("3"))
        {
            GongNeng.run();
        }
        else
        {
            System.exit(0);
        }
    }
    public void ShuRu_bookname()
    {
        System.out.println("请输入要删除书本的名称:");
        Scanner scanner=new Scanner(System.in);
        String bookname=scanner.next();
        for (int i=0;i<DuQuWenJian.bookname.length;++i)
        {
            boolean isMatch = Pattern.matches(bookname, DuQuWenJian.bookname[i]);
            if (isMatch==false)
            {
                bookISBN_num++;//计算匹配的失败次数
                continue;
            }
            else//成功匹配后
            {
                String deleteStr =DuQuWenJian.ISBN[i]+","+DuQuWenJian.bookname[i]+","+DuQuWenJian.bookprice[i];//获取需要删除书本的一行信息
                XieRu(deleteStr);//将需要删除的那行信息传入XieRu函数
                break;
            }
        }
        if (bookISBN_num==DuQuWenJian.bookname.length)
        {
            System.err.println("未查找到需要删除的书本信息");
            //失败次次数超过书的数量
        }
    }
    public void ShuRu_bookISBN()
    {
        System.out.println("请输入要删除书本的ISBN码:");
        Scanner scanner=new Scanner(System.in);
        String bookname=scanner.next();
        for (int i=0;i<DuQuWenJian.ISBN.length;++i)
        {
            boolean isMatch = Pattern.matches(bookname, DuQuWenJian.ISBN[i]);
            if (isMatch==false)
            {
                bookISBN_num++;//计算匹配的失败次数
                continue;
            }
            else//成功匹配后
            {
                String deleteStr=DuQuWenJian.ISBN[i]+","+DuQuWenJian.bookname[i]+","+DuQuWenJian.bookprice[i];
                XieRu(deleteStr);
                break;
            }
        }
        if (bookname_num==DuQuWenJian.ISBN.length)
        {
            System.err.println("未查找到需要删除的书本信息");
            //失败次次数超过书的数量
        }
    }
    public void XieRu(String deleteStr2)
    {
        String deletestr3;
        deletestr3=deleteStr2;
        File file = new File("src/main/resources","book.txt");//设置要读取文件的位置,如果没有该文件程序会自动新建一个
        String rl;
        try {
            StringBuffer bf = new StringBuffer();
            FileReader fileReader=new FileReader(file);//读取文件
            BufferedReader br = new BufferedReader(fileReader);//建立缓冲流
            while(( rl = br.readLine()) != null)
            {
                String r2=rl.replaceAll("\t","");
                String r3=r2.replaceAll(" ","");
                if (r3.equals(deletestr3))//删除匹配到的书本信息
                {
                    System.out.println("删除成功!");
                    continue;//如果匹配到需要删除的信息那就跳过这一行,添加下一行的数据
                }
                else   if (r3.equals(""))//删除多余的空白行
                    continue;
                bf.append(rl+"\n");//添加书本信息
            }
            br.close();
            FileWriter fileWriter=new FileWriter(file);//读取文件
            BufferedWriter out = new BufferedWriter(fileWriter);//建立缓冲流
            out.write(bf.toString());//写入文本
            out.flush();
            out.close();
        }catch (IOException e)
        {
            System.out.println(e);
        }

    }
}

ChaXun类

package tushuguanli;
import java.util.Scanner;
import java.util.regex.Pattern;
public class ChaXun {
    int z1=0;
    int z2=0;
    int i=0;
    int j=0;
    public void DuQu()
    {
        DuQuWenJian duQuWenJian=new DuQuWenJian();
        duQuWenJian.read();//读取文件
    }
    public void choose(){
        int booknum=0;//找到的书的数量
        DuQu();//开始读取文件
        System.out.println("请选择查询方式(支持模糊查询):");
        System.out.println(">>>>输入数字1通过书名来查询,输入数字2通过ISBN码来查询,输入数字3重新选择功能,输入其他退出:");
        Scanner scanner=new Scanner(System.in);
        String chooseStr=scanner.next();
        if (chooseStr.equals("1"))
        {
            System.out.println("请输入要查询的书本名称:");
            Scanner scanner2=new Scanner(System.in);
            String y= scanner2.next();
            String pattern=".*"+y+".*";//使用正则表达式来进行模糊查询

            for (;i<DuQuWenJian.bookname.length;++i)
            {
                boolean isMatch = Pattern.matches(pattern, DuQuWenJian.bookname[i]);
                if (isMatch==false)
                {
                    z1++;//计算匹配的失败次数
                    continue;
                }
                else//成功匹配后
                {
                    ++booknum;
                    System.out.println("--------成功匹配到一本书!书的信息为:");
                    System.out.println("*ISBN:" +DuQuWenJian.ISBN[i]);
                    System.out.println("*书名:"+DuQuWenJian.bookname[i]);
                    System.out.println("*价格:"+DuQuWenJian.bookprice[i]);
                }

            }
            System.out.println("||||一共查询到"+booknum+"本书名为(或包含)"+"《"+y+"》"+"的书||||");
            if (z1==DuQuWenJian.bookname.length)//失败次次数超过书的数量
            {
                System.err.println("查询失败!没有该书的数据!");
            }
        }
        else if (chooseStr.equals("2"))
        {
            System.out.println("请输入要查询的书本的ISBN码:");
            Scanner scanner3=new Scanner(System.in);
            String y2= scanner3.next();
            String pattern=".*"+y2+".*";//使用正则表达式来进行模糊查询
            for (;j<DuQuWenJian.ISBN.length;++j)
            {
                boolean isMatch = Pattern.matches(pattern, DuQuWenJian.ISBN[j]);
                if (isMatch==false)
                {
                    z2++;
                    continue;
                }
                else
                {
                    ++booknum;
                    System.out.println("--------成功匹配到一本书!书的信息为:");
                    System.out.println("*ISBN:" +DuQuWenJian.ISBN[j]);
                    System.out.println("*书名:"+DuQuWenJian.bookname[j]);
                    System.out.println("*价格:"+DuQuWenJian.bookprice[j]);
                }
            }
            System.out.println("||||一共查询到"+booknum+"本ISBN码为(或包含)"+"【"+y2+"】"+"的书||||");
            if (z2==DuQuWenJian.ISBN.length)
            {
                System.err.println("查询失败!没有该书的数据!");
            }
        }
        else if (chooseStr.equals("3"))
        {
            GongNeng.run();
        }
        else
            System.exit(0);
    }
}

book.txt

ISBN,	        书名,	             		定价
9787302257646, 	程序设计基础		,	    25
9787302219972 ,	单片机技术及应用,		    32
9787302203513 ,	编译原理		,	        46
9787811234923 ,	汇编语言程序设计教程,		21
9787512100831 ,	计算机操作系统		,	    17
9787302265436 ,	计算机导论实验指导	,	    18
9787302180630 ,	实用数据结构		,	    29
9787302225065 ,	数据结构(C语言版)	,	    38
9787302171676C#面向对象程序设计	,	    39
9787302250692C语言程序设计		,	    42
9787302150664 ,	数据库原理		,	    35
9787302260806Java编程与实践	,		56
9787302252887Java程序设计与应用教程,	39
9787302198505 ,	嵌入式操作系统及编程,		25
9787302169666 ,	软件测试			,       24
9787811231557Eclipse基础与应用,		35

运行结果

在这里插入图片描述

基于JAVA图书管理系统 开发软件的一个目的是针对目前普遍的图书馆借阅管理系统存在的功能不全,操作复杂,系统要求高等一系列问题,而设想一个具有个性化的图书馆借阅管理系统。该管理系统与MIS系统相联系,在图书馆内部建成可靠,方便,并且功能齐全的MIS系统。从而在图书馆对新旧书的反应;对书籍借阅的管理能力;对读者和图书馆工作人员的管理能力;对图书馆管理人员软件操作的适应时间和操作感觉这些方面都将大大的提高。当然对该软件的态度是渴望获得显著的社会效益。 开发软件的另一个目的是使其具有强大的实用价值,即它可以满足中小型图书馆的借阅与管理的需要。在一般的学校与科研机构,其下属的很多分支的研究中心,试验中心,各个学院,它们往往都有着自己的规模较大的图书资料室。而这些图书资料室由于本身规模不大因此其对书籍或资料的管理模式一般都比较旧,而且在没有能力也没有必要引进大型的图书馆管理软硬件的基础上,寻求一个针对中小型图书资料室的管理软件是必要的。   这种管理软件对硬件的要求很低,一般有一个比较简单的服务器与PC机组成的网络即可,再加上使用比较廉价、性能不错的软件,这样就可以以较低的成本来实现一个足够使用的功能,而这种模式也正满足了那种中小型资料室,图书馆的要求。但是目前对这种管理软件的开发还处于一种比较原始的阶段。开发者往往都是出于资金和时间的顾虑使用比较陈旧的技术,并且各为己见,并且很少涉及网络。可是当今是一个网络化的社会,像资料室,图书馆这样的信息机构不能与网络联系起来岂不可惜,再加上如今单机版的图书管理软件多如牛毛,去开发一个类似的软件无疑是一种在时间上、精神上和资源上的极大浪费。所以出于多方面的考虑觉得有必要为这种有需要的中小型图书馆,资料室开发一种基于网络的图书资料管理软件。
图书资料管理信息系统,带源代码、数据库sql文件、课设报告,具备如下基本功能: 1、 系统管理功能有:角色管理、用户管理、修改密码。主要实现系统的安全管理,不同的操作者有不同的权限,可以执行不同的操作。普通读者的权限只能是查询图书及自己的借阅情况;而图书馆管理员可以对图书信息进行管理,如对新书入库,也可以管理用户,如添加新用户和删除不用的账号等。 2、 进书管理功能有:登记基本的图书信息。这部分的功能用于登记新书的书名、作者、出版社、价格、进书的册数、进书日期、ISBN等。 3、 图书入库管理功能有:对新书分类编目,及时更新图书库中的图书信息。这部分的功能用于对所购进的新书,按其种类学科进行编目,给与唯一的书号;及时更新书库中的图书信息,包括书名、书号、作者、出版社、价格、库存位置和库存册数这些信息,方便读者查询借阅。 4、 查询功能功能有:查询图书的信息,查询读者的借阅情况。这部分的功能主要提供多种方式的查询服务。读者可以根据书名、作者或关键字模糊查询图书信息;读者也可以根据自己的借书证号查询自己的借阅情况,如已借了几本书,借书日期,还书日期,有没有续借等。 5、 借书/还书管理功能有:借书管理、还书管理。这部分的功能是当读者借书时,系统根据借书证号识别读者身份,核对读者的借书信息,做出判断如可不可以借、还可借几本,成功借阅后记录在借书信息并修改书库图书信息。当读者还书时,系统根据借书证号识别读者身份,核对读者的借书信息,做出判断如有没有超期,要不要罚款,需要罚多少等,最后还书成功,修改书库图书信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值