Web前端最全图书馆系统项目(完整版+简单版)_图书管理系统项目,2024年最新详解Web前端架构进阶面试题

算法

  1. 冒泡排序

  2. 选择排序

  3. 快速排序

  4. 二叉树查找: 最大值、最小值、固定值

  5. 二叉树遍历

  6. 二叉树的最大深度

  7. 给予链表中的任一节点,把它删除掉

  8. 链表倒叙

  9. 如何判断一个单链表有环

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

            return false;
        }
        res = bookDao.updateBook(bk, conn);//更新数据库的书籍
        if(!res) {
            try {
                conn.rollback();//数据库的返回
                conn.commit();//数据库的提交
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {//关闭连接
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return false;
        } else {
            try {
                conn.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return true;
        }
    }
    //设计一个方法--查询所有书籍--返回所有书籍的属性
    public Object[][] queryAllBooks() {
        List<Book> list = bookDao.queryAllBooks();//将查询出来的书籍存在list
        Object[][] obj = new Object[list.size()][7];//书籍的长度
        int i = 0;
        for (Book book: list) {//遍历所有书籍的属性
            obj[i][0] = book.getHasLended() < book.getCount() ? CAN : CANT;
            obj[i][1] = book.getName();
            obj[i][2] = book.getCount() - book.getHasLended();
            obj[i][3] = book.getType();
            obj[i][4] = book.getAuthor();
            obj[i][5] = book.getDiscount();
            obj[i][6] = book.getAddress();
            i++;
        }
        return obj;
    }
    //设计一个方法--查询书籍
    public Object[][] queryBooks() {
        List<Book> list = bookDao.queryAllBooks();
        Object[][] obj = new Object[list.size()][8];
        int i = 0;
        for (Book book: list) {//循环输出书籍的属性
            obj[i][0] = book.getId();
            obj[i][1] = book.getName();
            obj[i][2] = book.getCount() - book.getHasLended();
            obj[i][3] = book.getType();
            obj[i][4] = book.getAuthor();
            obj[i][5] = book.getDiscount();
            obj[i][6] = book.getAddress();
            obj[i][7] = book.getBookDate();
            i++;
        }
        return obj;
    }
    //增加书籍
    public boolean insertBook(String name, int count, String type,

String author, String address) {
if (bookDao.searchBook(name).getId() > 0) {//判断书籍的id是否大于0
return false;
}
return bookDao.insertBook(name, count, type, author, address);
}
}



package service;
import util.ShowMessageUtil;
import dao.AdminDaoImpl;
import dao.UserDaoImpl;
import modle.Admin;
import modle.User;
public class LoginService {//描述登录的业务逻辑
//属性
private static LoginService loginService;
private UserDaoImpl userDao;
private AdminDaoImpl admDao;
private RemindService remindService;
//静态块
static {
loginService = new LoginService();
}
//获取当前对象方法
public static LoginService getInstance() {
return loginService;
}
//无参构造方法
private LoginService() {
userDao = UserDaoImpl.getInstance();//获取用户数据
admDao = AdminDaoImpl.getInstance();//获取管理员数据
remindService = RemindService.getInstance();//获取提醒数据
}
//设计一个用户登录的方法
public User userLogin(int id, String password) {
User u = userDao.queryUser(id, password);//查询用户信息
if (u != null) {//判断是否为空
//通过id提示
String remind = remindService.getRemindByUid(id);
if(remind != null && !remind.equals(“”)) {//判断是否要提示
ShowMessageUtil.winMessage(“您预约的书” + remind + “需要尽快归还!\n赶紧去看看吧!”);
}
}
return u;
}
//设计一个方法查找用户数据
public Admin adminLogin(int id, String password) {
return admDao.queryAdmin(id, password);
}
}



package service;
import java.util.List;
import modle.Book;
import dao.RemindDaoImpl;
public class RemindService {//描述提醒用户归还书籍的业务逻辑
//属性
public static final String PRE = “《”;
public static final String TAIL = “》”;
public static final String SPACE = “、”;
public static final String SPLIT = “,”;
private static RemindService remindService;
//静态块
static {
remindService = new RemindService();
}
//提醒的数据作为属性
private RemindDaoImpl remindDao;
//获取提醒类对象
private RemindService() {
remindDao = RemindDaoImpl.getInstance();
}
//获取提醒业务逻辑的对象
public static RemindService getInstance() {
return remindService;
}
//设计一个通过id提醒用户的方法
public String getRemindByUid(int id) {
//获取书籍
List books = remindDao.getRemindByUid(id);
StringBuilder str = new StringBuilder();
StringBuilder ids = new StringBuilder();
if (books.size() > 0) {//判断是否还有书籍
str.append(PRE).append(books.get(0).getName()).append(TAIL);
ids.append(books.get(0).getId());
}
for(int j = 1; j < books.size(); j++) {
str.append(SPACE).append(PRE);
str.append(books.get(j).getName()).append(TAIL);
ids.append(SPLIT);
ids.append(books.get(j).getId());
}
//判断书籍是否被阅读的状态
if (ids.length() > 0) {
remindDao.updateRemindBatch(ids.toString());
}
return str.toString();
}
}


dao类:



package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import modle.*;

public class AdminDaoImpl {//描述用户的数据类
//私有的静态属性
private static AdminDaoImpl adminDaoImpl;
//静态块–用来创建对象
static {
adminDaoImpl = new AdminDaoImpl();
}
//无参构造
private AdminDaoImpl() {}
//静态方法获取对象
public static AdminDaoImpl getInstance() {
return adminDaoImpl;
}
//设计一个查找用户的方法–参数要id和密码。返回一个用户对象
public Admin queryAdmin(int id, String password) {
//根据id和密码在管理员里面找用户
String sql = “select * from Administrator where id = ? and password = ?”;
Connection conn = BaseDaoImpl.getConn();//获取连接
// 创建一个结果集
ResultSet rs = null;
Admin admin = null;
PreparedStatement psts = null;
try {
psts = conn.prepareStatement(sql); // 对sql语句进行预处理
// 简单防sql注入攻击,传入参数
psts.setObject(1, id);
psts.setObject(2, password);
// 执行
rs = psts.executeQuery();
while (rs.next()) {//循环判断是否有下一个
int return_id = rs.getInt(“id”);
String return_password = rs.getString(“password”);
admin = new Admin(return_id, return_password);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {//关闭
try {
conn.close();
psts.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return admin;
}

}



package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modle.Book;

public class BookDaoImpl {//描述书籍的数据
//属性
private static BookDaoImpl bookDao;
//静态的程序块
static {
bookDao = new BookDaoImpl();
}
//无参构造方法
private BookDaoImpl() {}
//获取本类的对象
public static BookDaoImpl getInstance() {
return bookDao;
}

    //设计增加图书的方法--参数是书名,几本,类型,作者,地址。返回值是布尔类型的
    public boolean insertBook(String name, int count, String type,

String author, String address) {
String sql = "insert into " +
“Book(name, count, type, author, discount, hasLended, address)” +
“values(?,?,?,?,?,?,?)”;
Connection conn = BaseDaoImpl.getConn();//创建数据库的连接
PreparedStatement psts = null;

        try {
            //设置列表
            psts = conn.prepareStatement(sql);
            psts.setObject(1, name);
            psts.setObject(2, count);
            psts.setObject(3, type);
            psts.setObject(4, author);
            psts.setObject(5, 0);
            psts.setObject(6, 0);
            psts.setObject(7, address);
            return psts.executeUpdate() > 0;// 执行 ,返回值为int
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {//关闭
            try {
                conn.close();
                psts.close();// 关闭预编译
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    // 设计一个查询所有书籍的方法
    public List<Book> queryAllBooks() {
        String sql = "select \* from Book";
        Connection conn = BaseDaoImpl.getConn();//连接数据库
        ResultSet rs = null;//创建结果集
        List<Book> list = new ArrayList<Book>();//将所有书籍存在arraylist集合里面
        PreparedStatement psts = null;
        try {
            psts = conn.prepareStatement(sql);
            rs = psts.executeQuery(); // 执行
            while (rs.next()) {//循环判断是否有下一个
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int count = rs.getInt("count");
                String type = rs.getString("type");
                String author = rs.getString("author");
                int discount = rs.getInt("discount");
                int hasLended = rs.getInt("hasLended");
                String address = rs.getString("address");
                String book_date = rs.getString("book\_date");
                Book book = new Book(id, name, count,type,author,discount,hasLended,address,book_date);
                list.add(book);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {//关闭
            try {
                conn.close();
                psts.close();
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return list;
    }

    //设计一个删除书籍的方法--根据书名删除书籍
    public boolean delBook(String name) {
        String sql="delete from Book where name = '" + name + "'";
        Connection conn = BaseDaoImpl.getConn();//连接数据库
        PreparedStatement psts = null;
        try {
            psts = conn.prepareStatement(sql);
            int res = psts.executeUpdate();
            if(res > 0) {
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {//关闭连接
            try {
                conn.close();
                psts.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    //设计一个增加书籍的方法
    public boolean updateBook(Book book, Connection conn) {
        boolean isRelease = false;
        String sql = "update Book set ";
        if (book.getCount() != 0) {
            sql += "count="+book.getCount() + ",";
        }
        if (book.getDiscount() != 0) {
            sql += "discount="+book.getDiscount() + ",";
        }
        if (book.getHasLended() != 0) {
            sql += "hasLended="+book.getHasLended() + ",";
        }
        if (book.getType() != null) {
            sql += "type='"+book.getType() + "',";
        }
        if (book.getAddress() != null) {
            sql += "address='"+book.getAddress() + "' ,";
        }
        if (book.getAuthor() != null) {
            sql += "author='"+book.getAuthor() + "' ,";
        }
        sql = sql.substring(0, sql.length() - 1);
        sql += " where name='" + book.getName() + "'";
        System.out.println(sql);
        if(conn == null) {
            conn = BaseDaoImpl.getConn();
            isRelease = true;
        }
        PreparedStatement psts = null;
        try {
            psts = conn.prepareStatement(sql);
            int res = psts.executeUpdate();
            if(res > 0) return true;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            try {
                if (isRelease && conn != null) conn.close();
                if (psts != null) psts.close();//关闭预编译

自学几个月前端,为什么感觉什么都没学到??


这种现象在很多的初学者和自学前端的同学中是比较的常见的。

因为自学走的弯路是比较的多的,会踩很多的坑,学习的过程中是比较的迷茫的。

最重要的是,在学习的过程中,不知道每个部分该学哪些知识点,学到什么程度才算好,学了能做什么。

很多自学的朋友往往都是自己去找资料学习的,资料上有的或许就学到了,资料上没有的或许就没有学到。

这就会给人一个错误的信息就是,我把资料上的学完了,估计也-就差不多的了。

但是真的是这样的吗?非也,因为很多人找的资料就是很基础的。学完了也就是掌握一点基础的东西。分享给你一份前端分析路线,你可以参考。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

还有很多的同学在学习的过程中一味的追求学的速度,很快速的刷视频,写了后面忘了前面,最后什么都没有学到,什么都知道,但是什么都不懂,要具体说,也说不出个所以然。

所以学习编程一定要注重实践操作,练习敲代码的时间一定要多余看视频的时间。

的,资料上有的或许就学到了,资料上没有的或许就没有学到。

这就会给人一个错误的信息就是,我把资料上的学完了,估计也-就差不多的了。

但是真的是这样的吗?非也,因为很多人找的资料就是很基础的。学完了也就是掌握一点基础的东西。分享给你一份前端分析路线,你可以参考。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

还有很多的同学在学习的过程中一味的追求学的速度,很快速的刷视频,写了后面忘了前面,最后什么都没有学到,什么都知道,但是什么都不懂,要具体说,也说不出个所以然。

所以学习编程一定要注重实践操作,练习敲代码的时间一定要多余看视频的时间。

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值