集合综合案例——图书管理系统

集合综合案例——图书管理系统

一、图书管理系统业务分析

目标:图书管理系统的开发。

业务需求分析:
    (1)查看全部书籍。query
    (2)添加书本信息。add
    (3)删除书本信息。delete
    (4)修改书本信息。update
    (5)退出系统。 exit

书本信息的结构:
    类型                书名            价格        作者
    ---------------------------------------------------
    言情小说
                     《金瓶梅》         99.9        阿猫
                     《红楼梦》         198.2       曹雪芹
    武侠小说
                     《三少爷的剑》      98.2        古龙
                     《神雕侠侣》        98.2        金庸
    ------------------------------------------------------
分析:
    (1)定义一个书本类。
    (2)定义一个集合表示图书馆用于存储书本信息数据:Map<String,List<Book>>。
    (3)展示操作界面。
    (4)完成相应功能。

1.查看全部书籍

1.定义一个书本类封装属性和方法
public class Book {
    //书名
    private String name;
	//价格
	private double price;
    //作者
    private String author;

    public Book() {
    }

    public Book(String name, double price, String author) {
        this.name = name;
        this.price = price;
        this.author = author;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

}
2.定义一个集合表示图书馆存储图书信息

因为有书所属的橱窗信息,List集合集不能满足要求,采用Map集合。

键作为书本的橱窗,值是List集合对象存储基本的书籍信息。

public static final Map<String, List<Book>> BOOK_STORE = new HashMap<>();

定义一个扫描器完成对输入的扫描

public static final Scanner SYS_SCANNER = new Scanner(System.in);
3.展示操作界面
private static void showCommand() {
    System.out.println("===============欢迎您进入系统===================");
    System.out.println("(1)查看全部书籍。query");
    System.out.println("(2)添加书本信息。add");
    System.out.println("(3)删除书本信息。delete");
    System.out.println("(4)修改书本信息。update");
    System.out.println("(5)退出系统。 exit");
    System.out.print("请您输入您的操作命令:");
    String command = SYS_SCANNER.nextLine();
    // 判断用户的命令是想干啥
    switch (command){
        case "query":
            // 查看全部书籍
            queryBooks();
            break;
        case "add":
            // 添加书籍
            addBook();
            break;
        case "delete":
            // 删除书籍
            deleteBooke();
            break;
        case "update":
            // 修改书籍
            updateBook();
            break;
        case "exit":
            // 退出系统
            System.out.println("退出成功,期待您下次光临!");
            System.exit(0);
            break;
        default:
            System.err.println("您的命令输入有无,请重新确认!");
    }
    showCommand(); // 调用自己,实现循环的效果
}
4.查询全部书本信息的方法

先查看存储书籍信息的Map集合是否为空,为空提示补充书籍,反之遍历该类型下的橱柜中的全部书本对象

/**
 查询全部书本信息
 Map<String, List<Book>> BOOK_STORE = {type1=[b1, b2, b3] , type2=[b1] }
 */
private static void queryBooks() {
    System.out.println("===============欢迎您进入查询书本业务=================");
    //查看存储书籍信息的Map集合是否为空
    if(BOOK_STORE.size() == 0){
        //为空提示补充书籍
        System.out.println("您的图书馆一本书都没有,请补充书籍!");
    }else{
        System.out.println("类型\t\t\t\t书名\t\t\t\t\t价格\t\t\t作者");
        //使用lambda表达式来遍历
        BOOK_STORE.forEach((type , books) -> {
            System.out.println(type);
            // 反之遍历该类型下的橱柜中的全部书本对象
            for (Book book : books) {
                System.out.println("\t\t\t\t"+book.getName()+"\t\t\t"+book.getPrice()+"\t\t"+book.getAuthor());
            }
        });
    }
}

2.添加书本信息

添加本信息要知道添加到哪个橱柜里,所以先定义一个List集合用于指向栏目的橱柜,用于存储在这个栏目中的书籍信息,这个橱柜要根据栏目是否存在来确定是使用已经存在的橱柜还是创建一个新橱柜。如果栏目存在,则直接得到该栏目存在的橱柜对象,然后输入新的书本信息,再把书本信息封装到一个书本类对象里,再把书本对象添加到List集合中。如不存在该栏目,则为该栏目创建一个新的橱柜对象,再把新栏目和书添加进去。由于采用List集合存储书籍信息,所以会出现书籍信息重复。本例并未做去重。

/**
 添加书本信息数据
 Map<String, List<Book>> BOOK_STORE = {type1=[] , }
 */
private static void addBook() {
    //提示已经进入添加书本业务
    System.out.println("===============欢迎您进入添加书本业务=================");

    System.out.print("请您输入添加书本的栏目:");

    String type = SYS_SCANNER.nextLine();
    // 定义一个List集合用于指向栏目的橱柜
    // 这个橱柜变量要根据栏目是否存在来确定是用已经存在的橱柜,还是创建一个新橱柜!
    List<Book> books = null ;
    // 1.判断是否存在该栏目。
    if(BOOK_STORE.containsKey(type)) {
        // 3.存在该栏目
        // 直接得到该栏目存在的橱柜对象
        books = BOOK_STORE.get(type);
    }else{
        // 2.该栏目是第一次添加。
        // 为该栏目创建一个橱柜对象(List<Book>)
        books = new ArrayList<>();
        // 新橱柜和新栏目必须手工加入到图书馆!
        BOOK_STORE.put(type , books);
    }
    System.out.println("请您输入添加书本的名称:");
    String name = SYS_SCANNER.nextLine();
    System.out.println("请您输入添加书本的价格:");
    String price = SYS_SCANNER.nextLine();
    System.out.println("请您输入添加书本的作者:");
    String author = SYS_SCANNER.nextLine();
    // 定义一个书本对象封装用户输入的书本信息。
    Book book = new Book(name , Double.valueOf(price) , author);
    books.add(book);
    System.out.println("您添加在"+type+"下的书本"+book.getName()+"成功!");
}

3.删除书本信息

删除书本之前,遍历一下所有书籍。

删除过程:判断需要删除的书籍存在的栏目是否存在,如果栏目存在,则根据栏目和书名找到那本书,再判断该书是否为null,如果该书为null,提示该书不存在,反之取出这个栏目所在橱柜的集合,找出那本书然后删掉。如果栏目不存在,则提示重新输入栏目。

/**
 * 在某个栏目下,根据书名查询出这本书对象返回!
 * @param type  栏目名称
 * @param name  书名称
 * @return 书本对象
 */
public static Book getBookByTypeAndName(String type , String name){
    // 1.先提取这个栏目的橱柜,根据栏目提取它的值
    List<Book> books = BOOK_STORE.get(type);
    for (Book book : books) {
        // 如果本书的名称与要找的名称一样,该书就是我们要的,直接返回!
        if(book.getName().equals(name)){
            return book;
        }
    }
    return null;// 没有这本书
}
/**
 * 删除书本信息
 * */
private static void deleteBooke(){
    System.out.println("==============删除书本业务==============");
    queryBooks();
    System.out.print("请输入你要删除的书所在的栏目:");
    String type= SYS_SCANNER.nextLine();
    //判断是否有栏目
    if (BOOK_STORE.containsKey(type)) {
        while (true) {
            //栏目存在
            //根据栏目取值,找到那本想要删除的书
            System.out.println("你要删除哪本书?");
            String name = SYS_SCANNER.nextLine();
            //根据栏目和书名找到这本书
            Book book = getBookByTypeAndName(type, name);
            //判断这本书是否为null
            if (book == null) {
                System.out.println("这本书不存在!");
            } else {
                //书存在
                //取出这个栏目的橱柜集合,找出那本书然后删除
                List<Book> books = BOOK_STORE.get(type);
                books.remove(book);
                System.out.println("删除成功!");
                //删除成功再查一遍
                queryBooks();
                return;
            }
        }
        }else{
            //输入栏目不存在
            System.out.println("输入栏目不存在,请重新输入");
        }
    }

4.修改书本信息

修改之前判断Map集合中是否有信息存在,如不存在信息则无法修改。

如果有信息存在,再判断存放书籍的栏目是否存在,不存在则提示重新输入栏目。如栏目存在,输入需要修改的栏目名,再输入书名,接着根据栏目和书名对书进行判断,是否存在该书信息。不存在该书就返回消息提示重新输入,该书存在就修改其信息。随后将新的信息存入到该List集合中,结束修改。

/**
    修改书本信息。
 */
private static void updateBook() {
    if(BOOK_STORE.size() == 0 ){
        System.out.println("您现在根本没有任何栏目可以修改!");
    }else{
        queryBooks();
        System.out.println("===============欢迎您进入修改书本业务=================");
        while(true){
            System.out.print("请您输入修改书本的栏目:");
            String type = SYS_SCANNER.nextLine();
            // 1.判断是否存在该栏目
            if(BOOK_STORE.containsKey(type)){
                while(true){
                    // 存在该栏目
                    // 2.请输入要修改的书名
                    System.out.print("请您输入修改书本的名称:");
                    String name = SYS_SCANNER.nextLine();
                    // 3.判断该栏目下是否存在该书本对象。
                    // 根据栏目和书名去栏目下查询出这本书对象
                    Book book = getBookByTypeAndName(type , name);
                    if(book == null){
                        System.err.println("您的输入的书名不存在,请重新确认!");
                    }else{
                        // 书名正确了,开始正式修改
                        System.out.println("请您输入修改书本的新名称:");
                        String newName = SYS_SCANNER.nextLine();
                        System.out.println("请您输入修改书本的新价格:");
                        String newPrice = SYS_SCANNER.nextLine();
                        System.out.println("请您输入修改书本的新作者:");
                        String newAuthor = SYS_SCANNER.nextLine();
                        book.setName(newName);
                        book.setPrice(Double.valueOf(newPrice));
                        book.setAuthor(newAuthor);
                        queryBooks();
                        System.out.println("您修改的书本成功,请看如上信息确认!");
                        return; // 结束修改的方法!
                    }
                }
            }else{
                // 不存在该栏目
                System.err.println("您输入的栏目不存在,请重新确认!");
            }
        }
    }

}

5.退出系统

在switch中的一个退出系统功能分支下使用System.exit(0);来中断系统运行。

二、完整代码

/**
    目标:图书管理系统的开发。

    业务需求分析:
        (1)查看全部书籍。query
        (2)添加书本信息。add
        (3)删除书本信息。delete
        (4)修改书本信息。update
        (5)退出系统。 exit

    书本信息的结构:
        类型                书名            价格        作者
        ---------------------------------------------------
        言情小说
                         《金瓶梅》         99.9        阿猫
                         《红楼梦》         198.2       曹雪芹
        武侠小说
                         《三少爷的剑》      98.2        古龙
                         《神雕侠侣》        98.2        金庸
        ------------------------------------------------------
    分析:
        (1)定义一个书本类。
        (2)定义一个集合表示图书馆用于存储书本信息数据:Map<String,List<Book>>。
        (3)展示操作界面。
        (4)完成相应功能。
 */
public class BookSystem {
    /**
        1.定义一个集合表示图书馆用于存储书本信息数据:Map<String,List<Book>>。
        使用Map集合,键是橱柜的栏目类型名称,值是橱柜的List集合对象存储书本信息
     */
    public static final Map<String, List<Book>> BOOK_STORE = new HashMap<>();
    public static final Scanner SYS_SCANNER = new Scanner(System.in);

    public static void main(String[] args) {
        /**
         * 2.展示操作界面 :独立功能建立封装成方法调用 方便互相之间的逻辑调用 */
        showCommand();
    }

    /**
     * 展示操作界面的命令
     */
    private static void showCommand() {
        System.out.println("===============欢迎您进入系统===================");
        System.out.println("(1)查看全部书籍。query");
        System.out.println("(2)添加书本信息。add");
        System.out.println("(3)删除书本信息。delete");
        System.out.println("(4)修改书本信息。update");
        System.out.println("(5)退出系统。 exit");
        System.out.print("请您输入您的操作命令:");
        String command = SYS_SCANNER.nextLine();
        // 判断用户的命令是想干啥
        switch (command){
            case "query":
                // 查看全部书籍
                queryBooks();
                break;
            case "add":
                // 添加书籍
                addBook();
                break;
            case "delete":
                // 删除书籍
                deleteBooke();
                break;
            case "update":
                // 修改书籍
                updateBook();
                break;
            case "exit":
                // 退出系统
                System.out.println("退出成功,期待您下次光临!");
                System.exit(0);
                break;
            default:
                System.err.println("您的命令输入有无,请重新确认!");
        }
        showCommand(); // 调用自己,实现循环的效果
    }

    /**
     添加书本信息数据
     Map<String, List<Book>> BOOK_STORE = {type1=[] , }
     */
    private static void addBook() {
        //提示已经进入添加书本业务
        System.out.println("===============欢迎您进入添加书本业务=================");

        System.out.print("请您输入添加书本的栏目:");

        String type = SYS_SCANNER.nextLine();
        // 定义一个List集合用于指向栏目的橱柜
        // 这个橱柜变量要根据栏目是否存在来确定是用已经存在的橱柜,还是创建一个新橱柜!
        List<Book> books = null ;
        // 1.判断是否存在该栏目。
        if(BOOK_STORE.containsKey(type)) {
            // 3.存在该栏目
            // 直接得到该栏目存在的橱柜对象
            books = BOOK_STORE.get(type);
        }else{
            // 2.该栏目是第一次添加。
            // 为该栏目创建一个橱柜对象(List<Book>)
            books = new ArrayList<>();
            // 新橱柜和新栏目必须手工加入到图书馆!
            BOOK_STORE.put(type , books);
        }
        System.out.println("请您输入添加书本的名称:");
        String name = SYS_SCANNER.nextLine();
        System.out.println("请您输入添加书本的价格:");
        String price = SYS_SCANNER.nextLine();
        System.out.println("请您输入添加书本的作者:");
        String author = SYS_SCANNER.nextLine();
        // 定义一个书本对象封装用户输入的书本信息。
        Book book = new Book(name , Double.valueOf(price) , author);
        books.add(book);
        System.out.println("您添加在"+type+"下的书本"+book.getName()+"成功!");
    }

    /**
     查询全部书本信息
     Map<String, List<Book>> BOOK_STORE = {type1=[b1, b2, b3] , type2=[b1] }
     */
    private static void queryBooks() {
        System.out.println("===============欢迎您进入查询书本业务=================");
        if(BOOK_STORE.size() == 0){
            System.out.println("您的图书馆一本书都没有,请赶紧买书去!");
        }else{
            System.out.println("类型\t\t\t\t书名\t\t\t\t\t价格\t\t\t作者");
            BOOK_STORE.forEach((type , books) -> {
                System.out.println(type);
                // 遍历该类型下的橱柜中的全部书本对象
                for (Book book : books) {
                    System.out.println("\t\t\t\t"+book.getName()+"\t\t\t"+book.getPrice()+"\t\t"+book.getAuthor());
                }
            });
        }
    }

    /**
        修改书本信息。
     */
    private static void updateBook() {
        if(BOOK_STORE.size() == 0 ){
            System.out.println("您现在根本没有任何栏目可以修改!");
        }else{
            queryBooks();
            System.out.println("===============欢迎您进入修改书本业务=================");
            while(true){
                System.out.print("请您输入修改书本的栏目:");
                String type = SYS_SCANNER.nextLine();
                // 1.判断是否存在该栏目
                if(BOOK_STORE.containsKey(type)){
                    while(true){
                        // 存在该栏目
                        // 2.请输入要修改的书名
                        System.out.print("请您输入修改书本的名称:");
                        String name = SYS_SCANNER.nextLine();
                        // 3.判断该栏目下是否存在该书本对象。
                        // 根据栏目和书名去栏目下查询出这本书对象
                        Book book = getBookByTypeAndName(type , name);
                        if(book == null){
                            System.err.println("您的输入的书名不存在,请重新确认!");
                        }else{
                            // 书名正确了,开始正式修改
                            System.out.println("请您输入修改书本的新名称:");
                            String newName = SYS_SCANNER.nextLine();
                            System.out.println("请您输入修改书本的新价格:");
                            String newPrice = SYS_SCANNER.nextLine();
                            System.out.println("请您输入修改书本的新作者:");
                            String newAuthor = SYS_SCANNER.nextLine();
                            book.setName(newName);
                            book.setPrice(Double.valueOf(newPrice));
                            book.setAuthor(newAuthor);
                            queryBooks();
                            System.out.println("您修改的书本成功,请看如上信息确认!");
                            return; // 结束修改的方法!
                        }
                    }
                }else{
                    // 不存在该栏目
                    System.err.println("您输入的栏目不存在,请重新确认!");
                }
            }
        }

    }

    /**
     * 在某个栏目下,根据书名查询出这本书对象返回!
     * @param type  栏目名称
     * @param name  书名称
     * @return 书本对象
     */
    public static Book getBookByTypeAndName(String type , String name){
        // 1.先提取这个栏目的橱柜,根据栏目提取它的值
        List<Book> books = BOOK_STORE.get(type);
        for (Book book : books) {
            // 如果本书的名称与要找的名称一样,该书就是我们要的,直接返回!
            if(book.getName().equals(name)){
                return book;
            }
        }
        return null;// 没有这本书
    }

/**
 * 删除书本信息
 * */
private static void deleteBooke(){
    System.out.println("==============删除书本业务==============");
    queryBooks();
    System.out.print("请输入你要删除的书所在的栏目:");
    String type= SYS_SCANNER.nextLine();
    //判断是否有栏目
    if (BOOK_STORE.containsKey(type)) {
        while (true) {
            //栏目存在
            //根据栏目取值,找到那本想要删除的书
            System.out.println("你要删除哪本书?");
            String name = SYS_SCANNER.nextLine();
            //根据栏目和书名找到这本书
            Book book = getBookByTypeAndName(type, name);
            //判断这本书是否为null
            if (book == null) {
                System.out.println("这本书不存在!");
            } else {
                //书存在
                //取出这个栏目的橱柜集合,找出那本书然后删除
                List<Book> books = BOOK_STORE.get(type);
                books.remove(book);
                System.out.println("删除成功!");
                //删除成功再查一遍
                queryBooks();
                return;
            }
        }
        }else{
            //输入栏目不存在
            System.out.println("输入栏目不存在,请重新输入");
        }
    }
}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书馆管理系统使用说明书 配置源程序 附加MYSQL数据库 将TM\02\ Database\db_librarySys文件夹拷贝到mysql\data文件夹下即可,如图1.1所示。 图1.1 拷贝MYSQL数据库 将程序发布到Tomcat下 (1)将“TM\02”文件夹拷贝到Tomcat安装路径下的webapps文件夹中。 (2)选择开始菜单中的“所有程序\Apache Tomcat 6.0\Monitor Tomcat”命令,这时在windows的系统托盘中会显示标识Tomcat服务器启动状态的图标,如果显示为 ,则说明Tomcat服务器没有启动,这时可以在该图标上单击鼠标右键在弹出的快捷菜单中选择“Start Service”菜单项启动Tomcat服务器,启动后将显示为 。 (3)打开IE浏览器,在地址栏中输入http://localhost:8080/,进入“Tomcat软件管理”页面。 注意:8080为安装Tomcat时设置的端口号。 (4)单击Tomcat Manager超链接,弹出“连接到 localhost”对话框。 (5)在用户名及密码处输入登录Tomcat的用户名和密码,单击【确定】按钮。 (6)进入“Tomcat应用程序管理”页面,在此页面中单击“02”,进入本程序主页面,完成Tomcat配置。 导入所应用的包 在运行本程序时,需要将Struts 1.2和MySQL数据库驱动包拷贝到Tomcat安装路径下的webapps文件夹中的02\WEB-INF\lib文件夹中。 使用说明 系统介绍 图书馆管理系统主要的目的是实现图书馆的信息化管理。图书馆的主要业务就是新书的借阅和归还,因此系统最核心的功能便是实现图书的借阅和归还。此外,还需要提供图书的信息查询、读者图书借阅情况的查询等功能。项目实施后,能够提高图书馆的图书借阅、归还流程,提高工作效率。整个项目需要在两个月的时间内交付用户使用。 操作注意事项 (1)本系统的用户名为:tsoft,密码为:111 (2)读者类型不同,可借图书的本数也有所区别。 操作流程 (1)用户登录图书馆管理系统后,可看到图书借阅排行榜,通过排行榜可以看出借阅图书的名称、图书类型、借阅次数等相关信息。 (2)单击“系统设置”/“图书馆信息”命令,对图书馆信息进行设置操作。 (3)单击“系统设置”/“管理员设置”命令,对管理员信息进行添加、权限设置、查询及删除操作。 (4)单击“系统设置”/“参数设置”命令,对办证费用及有效期限信息进行添加操作。 (5)单击“系统设置”/“书架设置”命令,对书架信息进行添加、修改及删除操作。 (6)单击“读者管理”/“读者类型管理”命令,对读者类型信息进行添加、修改及删除操作。 (7)单击“读者管理”/“读者档案管理”命令,对读者信息进行添加、修改及删除操作。 (8)单击“图书管理”/“图书类型设置”命令,对图书类型信息进行添加、修改及删除操作。 (9)单击“图书管理”/“图书档案管理”命令,对图书信息进行添加、修改及删除操作。 (10)单击“图书借还”/“图书借阅”命令,对图书借阅信息添加操作。 (11)单击“图书借还”/“图书续借”命令,对图书续借信息进行添加操作。 (12)单击“图书借还”/“图书归还”命令,对图书归还信息进行添加操作。 (13)单击“系统查询”/“图书档案查询”命令,对图书档案信息进行查询操作。 (14)单击“系统查询”/“图书借阅查询”命令,对借阅的图书信息进行查询操作。 (15)单击“系统查询”/“借阅到期提醒”命令,对借阅到期提醒信息进行查询操作。 (16)单击“更改口令”按钮,对当前的用户密码进行修改操作。 (17)单击“退出系统”按钮,退出当前操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值