zoukankan      html  css  js  c++  java
  • 图书馆接口设计

    任务需求:实现图书1.预定2.下单3.准备4.借书5.还书6.收藏几个相关功能接口;

    一。需要的几个实体:

    1.图书:本数据库中没有图书,每当预定或者收藏以及借书的时候,从数据库中看是否有,没有的话就往数据库中添加一本书。

    2.借书卡:借书卡里面主要有userid,还有自身主键id,数据是从一卡通添加时添加(主要userID以及cardid)预定收藏以及其他的时候是通过userid获取的借书卡

    3.订单:订单是下单后也就是提交预定时生成的订单。

    4.预定:相当于购物车,在提交预定的时候购物车状态设为失效

    5.借书:维护当前正在出借尚未归还的书,主要是一个cardID一个bookID

    6.还书:当还书时,删除借书表对应信息,还书表中插入对应字段

    没有用收藏表,直接把收藏的书id拼串到借书卡表里了

    二。具体实现

    (1)预定:分为1.添加预定。2.删除预定。3.预定列表。

    添加预定:初始化购物车状态生效,书籍信息拼装id串放入购物车表也就是预定表中,可重复,考虑到借多本同一样书情况

    预定列表:直接将书串查到对应信息拼装成接口需要的信息,传出;

    (2)下单:就是提交预定,具体作用:生成订单,插入订单表,失效购物车。判断订单书数目与已借书数量和是否大于5

    (3)准备:准备书的过程,管理员操作,当订单所有书籍都准备状态改为已处理,有的书籍可能馆藏没有(未准备好),未处理状态的订单也可提交借书,只不过没有准备好的书籍不能出借,但是订单状态改为已借出。具体策略:书本id前加标识位,想了想为方便用0。

    (4)借书:两种状态,一种提交订单号借书,另外一种状态管理员直接提交书籍信息借书,订单要判断id有标识位的出借,没有的不借。每个借书卡最多只能借5本,需要效验。

    (5)还书:从借书表移除,还书表添加。

    (6)收藏:添加收藏,删除收藏,收藏列表

    添加收藏:注意判断重复添加。

    注:模糊查询均查最新一条数据。

    数据库相关结构:

    转载请附带网址:http://www.cnblogs.com/handsomecui

    主要功能代码演示:

    /**
         * 拼装id去重
         * @param bookIds
         * @param s
         * @return
         */
        private String handleBookIds(String bookIds, String s) {
            if(bookIds == null || "".equals(bookIds)){
                bookIds = s;
            }else{
                String[] needAdds = s.split(",");
                String[] bs = bookIds.split(",");
                for(int i = 0; i < needAdds.length; i++){
                    boolean flag = true;
                    for(int j = 0; j < bs.length; j++){
                        if(needAdds[i].equals(bs[j])){
                            flag = false;
                            break;
                        }
                    }
                    if(flag){
                        bookIds += needAdds[i]+",";
                    }
                }
            }
            return bookIds;
        }
        
        /**
         * 获取借书卡id
         * @return
         */
        private String getCardId() {
            Card card = new Card();
            String user_ID = this.user.getUserId();
            card.setUserId(user_ID);
            Card card2 = cardService.selectBySelective(card);
            if(card2 == null){
                return null;
            }
            else{
                return card2.getId();
            }
        }
        
        /**
         * 拼装Book为book对象
         * @param bookMap
         * @return
         */
        private Book getBookObject(Map<String, Object> bookMap) {
            String title = (String)bookMap.get("title");
            String author = (String)bookMap.get("author");
            String number = (String)bookMap.get("number");
            String hold = (String)bookMap.get("hold");
            Book book = new Book();
            book.setAuther(author);
            book.setTitle(title);
            book.setNumber(number);
            book.setHold(hold);
            Book book2 = bookService.selectBySelective(book);
            return book2;
        }
        
        /**
         * 处理图书馆是否有这本书
         * @param bookMap
         */
        private void handleIsHaveBook(Map<String, Object> bookMap) {
            String title = (String)bookMap.get("title");
            String author = (String)bookMap.get("author");
            String number = (String)bookMap.get("number");
            String hold = (String)bookMap.get("hold");
            Book book = new Book();
            book.setAuther(author);
            book.setTitle(title);
            book.setNumber(number);
            book.setHold(hold);
            Book book2 = bookService.selectBySelective(book);
            if(book2 != null){//有书
                book2.setHold(hold);
                bookService.updateByPrimaryKey(book2);
            }else{//
                bookService.insert(book);
            }
            
        }
        
        
        /**
         * 通过借书卡号获取预定信息
         * @param cardId
         * @return
         */
        private Reserve getReservebyCardId(String cardId) {
            Reserve reserve = new Reserve();
            reserve.setCardId(cardId);
            Reserve reserve2 = reserveService.selectBySelective(reserve);
            return reserve2;
        }
        
        /**
         * 通过id封装Book
         * @param bookIds
         * @return
         */
        private List<Map<String, Object>> putBookByIds(String bookIds) {
            List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();
            if(bookIds != null){
                String[] ids = bookIds.split(",");
                for(String id : ids){
                    Book book = bookService.selectByPrimaryKey(Long.valueOf(id));
                    Map<String,Object> BOOK = new HashMap<String, Object>();
                    BOOK.put("title", book.getTitle());
                    BOOK.put("author", book.getAuther());
                    BOOK.put("number", book.getNumber());
                    BOOK.put("hold", book.getHold());
                    list.add(BOOK);
                }
            }
            return list;
        }
        
        /**
         * 添加标识位,判断是否全部准备
         * @param order
         * @param bookId
         * @return 未准备书数量
         */
        private int addFlagToBookIdsAndJudgeIsFinish(Order order, Long bookId) {
            String bookIds = order.getBookIds();
            String[] split = bookIds.split(",");
            String newBookIds = "";
            int num = 0;
            boolean isFinish = true;
            if(split != null){
                boolean flag = false;
                for(String e : split){
                    if(e.length() <= 1 || e.charAt(0) != '0'){
                        num++;
                        isFinish = false;
                    }
                    String bookid = e;
                    if(!flag&&(e.length() <= 1 || e.charAt(0) != '0')){
                        Long bid = Long.valueOf(e);
                        if(bid == bookId){
                            bookid = "0"+bookid;
                            flag = true;
                        }
                    }
                    newBookIds += bookid+",";
                }
                order.setBookIds(newBookIds);
            }
            if(isFinish){
                order.setType("1");
            }
            orderService.updateByPrimaryKeyWithBLOBs(order);
            return num;
        }
  • 相关阅读:
    SCU 4439 Vertex Cover|最小点覆盖
    SCU 4438 Censor|KMP变形题
    BZOJ 2152: 聪聪可可|点分治
    暑假集训-8.18总结
    AcWing 252. 树|点分治
    Proj THUDBFuzz Paper Reading: Field-aware Evolutionary Fuzzing Based on Input Specifications and Vulnerablity Metrics
    Proj THUDBFuzz Paper Reading: Semantic Fuzzing with Zest
    Proj THUDBFuzz Paper Reading: Smart Greybox Fuzzing
    Proj THUDBFuzz Paper Reading: Language-Agnostic Generation of Compilable Test Programs
    Proj THUDBFuzz Paper Reading: Fuzzing JS Engines with Aspect-preserving Mutation
  • 原文地址:https://www.cnblogs.com/handsomecui/p/7375429.html
Copyright © 2011-2022 走看看