2018-11-06

作者: CLJnong | 来源:发表于2018-11-06 19:07 被阅读5次

    简易图书借阅管理系统-总结

    mybook7.png

    一、需求分析

    image.png
    image.png

    二、项目结构图

    13333.PNG

    三、项目概要

    项目主题:图书借阅管理系统

    项目时间:2018年10月29日—2018年11月3日

    项目功能:①用户模块:登录、注册、查看图书信息、借书、还书、修改密码、切换账号;②管理员模块:登录、图书查询(所有图书信息、指定图书ID、指定书名的模糊查询、刷新)、历史借阅记录查询、管理图书(添加图书、图书下架、更新图书、刷新)、管理用户(添加用户、更新用户、刷新)、切换账号。

    项目技术实现:

    数据库:Mysql

    JDBC工具:DBUtils

    层与层之间解耦合:工厂设计模式
    数据展示控件:JTable

    访问数据库的查询方法封装使用技术:泛型,反射机制

    四、项目技术要点总结:

    ①窗体 架构分析: 继承了JFrame

    ② 窗体的方法:init()

    • 窗体中各控件显示出来的方法

    • 1.把各个控件实例化

    • 2.控件组装起来,大的套小的,里面先装,再到外面

    private void init() { }

    ③设置字体,字体大小:lab控件.setFont(new Font("幼圆", Font.PLAIN, 48));

    ④为按钮注册事件侦听器

    private void registerActionListener() {
    
               button_login.addActionListener(new ActionListener() {
            
        @Override
        public void actionPerformed(ActionEvent e) {
        
                        代码块
                     }
    

    ⑥登录功能:

    • 1.获取用户输入的用户名和密码

    • 2.进行非空判断,如果为空则提示用户输入,并程序返回

    • 3.如果都不为空,那么调用底层代码访问数据库查询账户信息是否存在,如存在则登 录;不存在则登录失败,提示用户。

    底层代码dao层:view层要先调用service层

    UsersDao usersDao=new UsersDaoImpl();//不可以new UsersDao(),要new接口 。

    ⑦注册功能:

    • 1.获取用户输入的用户名和密码

    • 2.进行非空判断,如果为空则提示用户输入,并程序返回

    • 3.如果都不为空,那么添加到底层代码中去?

    • 4.注册成功,返回登录界面

    ⑧网格布局、方位布局

    new BorderLayout()?给大容器添加方位布局---东西南北的

    • GridLayout是网格布局

    ⑨修改密码(暂时缺少与之前代码相比较的判断!!!!)

    ⑩给table增加事件侦听器

    //给table控件加事件监听器

                table.addMouseListener(new MouseListener() {
                    
                    @Override
                    public void mouseReleased(MouseEvent e) {
                        
                    }
                    
                    @Override
                    public void mousePressed(MouseEvent e) {
                        
                    }
                    
                    @Override
                    public void mouseExited(MouseEvent e) {
                        
                    }
                    
                    @Override
                    public void mouseEntered(MouseEvent e) {
                        
                    }
                    
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        
                        
                        /**
                         * 鼠标点击:选定的行
                         * table.getSelectedRow();---得到的是行的索引
                         */
                        int row=table.getSelectedRow();
                        
                        System.out.println(row);
                        
                        book_id=(Integer)table.getValueAt(row, 0);
                        System.out.println("book_id:"+book_id);
                    }
                });
    

    ⒒数据显示模型-----------------适配器模式

    /**
    * 内部类:定义数据模型
    */
    private class BookDataModel implements TableModel{

        /**
         * 我的数据来自于集合,定义一个私有的List集合
         * List<Book> list
         * list是一个属性
         */
        private List<Book> list;
        
        /**
         * 给属性list赋值的方法setList()
         * 
         */
        public void setList(List<Book> list) {
            this.list=list;
        }
        
        /**
         * 下面的方法是从BookDataModel实现类中创建出来的
         */
        @Override
        public int getRowCount() {
            //得到行数
            return list.size();
        }
    
        @Override
        public int getColumnCount() {
            return 4;//写死,4列
        }
    
        @Override
        public String getColumnName(int columnIndex) {
            
            //指定表格表头部分每列的名称
            if(columnIndex==0) {
                return "图书编号";
            }else if(columnIndex==1) {
                return "图书名称";
            }else if(columnIndex==2) {
                return "借阅次数";
            }else if(columnIndex==3) {
                return "是否可借";
            }else {
                return "出错";
            }
        }
    
        @Override
        public Class<?> getColumnClass(int columnIndex) {
    
            //得到列的数据类型,我们都返回String,字符串 
            return String.class;
        }
    
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            //对单元格编辑,不可编辑
            return false;
        }
    
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            /**
             * 非常重要,指定表格中某行某列的值,如果不写,表格中看不到数据
             * rowIndex行号
             * 
             */
            Book book=list.get(rowIndex);
            if(columnIndex==0) {
                return book.getBook_id();
                
            }else if(columnIndex==1) {
                return book.getBook_name();
                
            }else if(columnIndex==2) {
                return book.getBook_count();
                
            }else if(columnIndex==3) {
                //把数字转换成字符串
                return (book.getStatus()==1)?"可借":"不可借";
                
            }else {
                return "出错";
            }
            
        }
    
        @Override
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            
            
        }
    
        @Override
        public void addTableModelListener(TableModelListener l) {
            
        }
    
        @Override
        public void removeTableModelListener(TableModelListener l) {
            
        }
        
        
    }
    

    12.把数字转换成字符串

    return (book.getStatus()==1)?"可借":"不可借";

    五、收获

    通过一个星期的项目经历,我完成了JavaSe的项目,第一次做项目,态度认真,比较积极。说说开始的想法吧:看了老师发的ppt需求分析,我分别整理了用户、管理员他们对应的功能,再从用户使用一个系统的角度出发,加上老师带着我们完成了用户的一些功能模块,仿照代码,就实现了其他的功能模块,当中肯定遇到很多的小bug的,怎么办呢?有异常,就找异常,处理异常,Debug就好了,不行就问百度,或者问其他的同学。其中有一些功能的实现有参考谭伟亮的“更新”,更改密码的参考了林学亮同学,等。周末做的更新功能,似乎是我比较满意的一个地方了,可以把信息显示出来,用户体验效果较好,其中添加了“刷新”的功能,也就是查询,不用切换屏幕即可看到变化,让用户使用方便。总的来说,就是考虑的比较周到,功能方面比较全面。因为我记住了廖老师的一句话:“你严格要求自己,严格要求自己的代码,以后会有帮助的。”

    六、不足之处

    1、界面结构不够美观

    2、完成时间较长

    3、代码能力还需要加强

    4、缺乏创新型的想法

    七、改进

    针对于不足之处,会相对应的去努力,一步一步的敲好代码,争取向高薪工作靠齐。不骄傲,不气馁,继续加油。

    相关文章

      网友评论

        本文标题:2018-11-06

        本文链接:https://www.haomeiwen.com/subject/oifpxqtx.html