基于SSM 的图书馆管理系统的设计与实现 (含源码+sql+视频导入教程+文档)

基于SSM的图书馆管理系统 概述 基于Spring + Spring MVC + MyBatis的图书馆管理系统,使用Maven进行包管理。主要功能包括:图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 环境配置 开发环境:Windows 10,IntelliJ IDEA 运行配置 首先安装Mysql5.7,设置用户名为root,密码为123456,并保证其在运行状态,并执行library.sql文件导入数据。 然后再配置Maven到环境变量中,在源代码目录下运行 # mvn jetty:run 使 阅读详情

👉文末查看项目功能视频演示+获取源码+sql脚本+视频导入教程视频

1 、功能描述

  基于SSM 的图书馆管理系统拥有两个角色,分别为管理员和学生。具体功能如下:

管理员:查看、添加图书,查看添加学生,借还管理,修改密码等

学生:查加检索图书、查看个人信息、查看个人借阅情况、修改密码

1.1 背景描述

  图书馆管理系统是一种针对图书馆设计的软件系统,旨在简化和改进图书馆资源的管理、借阅和归还流程。该系统通常包括图书信息管理、借阅记录跟踪、预约服务、罚款管理以及读者信息管理等功能。通过该系统,图书管理员能够更有效地管理图书馆藏书,包括采购、编目和库存管理,同时帮助读者更便捷地查找并借阅所需图书。此外,系统还提供了自助借还书服务,缩短了借书排队时间,提高了用户体验。一些系统还整合了电子书馆功能,允许用户在线阅读或下载电子书籍。另外,通过数据分析功能,系统可以为图书馆提供借阅趋势、流行书籍等信息,帮助图书馆优化资源配置。图书馆管理系统的使用不仅提高了图书馆工作效率,也为读者提供了更便捷的服务,促进了图书馆的数字化发展。

2、项目技术

后端框架:SSM(Spring、SpringMVC、Mybatis)

前端框架:bootstrap、jsp

2.1 SSM

  SSM(Spring+SpringMVC+MyBatis)是目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。其中,Spring就像是整个项目中的粘合剂,负责装配bean并管理其生命周期,实现控制反转(IoC)的功能。SpringMVC负责拦截用户请求,通过DispatcherServlet将请求匹配到相应的Controller并执行。而MyBatis则是对JDBC的封装,让数据库底层操作变得透明,通过配置文件关联到各实体类的Mapper文件,实现了SQL语句映射。

2.2 mysql

  MySQL是一款Relational Database Management System,直译过来的意思就是关系型数据库管理系统,MySQL有着它独特的特点,这些特点使他成为目前最流行的RDBMS之一,MySQL想比与其他数据库如ORACLE、DB2等,它属于一款体积小、速度快的数据库,重点是它符合本次毕业设计的真实租赁环境,拥有成本低,开发源码这些特点,这也是选择它的主要原因。

3、开发环境

mysql5-8、tomcat8-10、JDK1.8+

4、功能截图+视频演示+文档目录

4.1 登录

在这里插入图片描述

管理员和学生读者均可以通过此页面的登录系统,登录模块会自动检测签前端是否完整填写账号和密码,再经过后台数据库查询校验并通过后,会分别登录至不同的操作端。

4.2管理员-学生管理

在这里插入图片描述

管理员学生管理模块可以对学生进行查看、编辑、删除等功能。

4.3管理员-图书管理

管理员-图书管理

图书详细信息

管理员-图书管理模块中,管理员可以对图书进行增加、编辑、删除和详情查看等功能,还可以通过图书名字搜索图书,详情可以观看下方视频。管理员读者日志模块同上。

4.4用户学生-图书借阅

用户学生-图书借阅

学生图书查看模块中,可以根据图书名搜索图书,并能查看图书详情和借阅图书。

4.5学生个人借还日志

在这里插入图片描述

学生可以通过我的借还日志功能模块查看自己借阅记录。

4.6 ER图

ER图

5 、核心代码实现

5.1 配置代码

#mysql jdbc
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/library?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

5.2 其它核心代码

package com.library.controller;

import com.library.bean.Admin;
import com.library.bean.ReaderCard;
import com.library.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;

@Controller
public class LoginController {

    private LoginService loginService;


    @Autowired
    public void setLoginService(LoginService loginService) {
        this.loginService = loginService;
    }


    @RequestMapping(value = {"/", "/login.html"})
    public String toLogin(HttpServletRequest request) {
        request.getSession().invalidate();
        return "index";
    }

    @RequestMapping("/logout.html")
    public String logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return "redirect:/login.html";
    }


    //负责处理loginCheck.html请求
    //请求参数会根据参数名称默认契约自动绑定到相应方法的入参中
    @RequestMapping(value = "/api/loginCheck", method = RequestMethod.POST)
    public @ResponseBody
    Object loginCheck(HttpServletRequest request) {
        long id = Long.parseLong(request.getParameter("id"));
        String passwd = request.getParameter("passwd");
        boolean isReader = loginService.hasMatchReader(id, passwd);
        boolean isAdmin = loginService.hasMatchAdmin(id, passwd);
        HashMap<String, String> res = new HashMap<>();
        if (isAdmin) {
            Admin admin = new Admin();
            admin.setAdminId(id);
            admin.setPassword(passwd);
            String username = loginService.getAdminUsername(id);
            admin.setUsername(username);
            request.getSession().setAttribute("admin", admin);
            res.put("stateCode", "1");
            res.put("msg", "管理员登陆成功!");
        } else if (isReader) {
            ReaderCard readerCard = loginService.findReaderCardByReaderId(id);
            request.getSession().setAttribute("readercard", readerCard);
            res.put("stateCode", "2");
            res.put("msg", "读者登陆成功!");
        } else {
            res.put("stateCode", "0");
            res.put("msg", "账号或密码错误!");
        }
        return res;
    }

    @RequestMapping("/admin_main.html")
    public ModelAndView toAdminMain(HttpServletResponse response) {
        return new ModelAndView("admin_main");
    }

    @RequestMapping("/reader_main.html")
    public ModelAndView toReaderMain(HttpServletResponse response) {
        return new ModelAndView("reader_main");
    }

    @RequestMapping("/admin_repasswd.html")
    public ModelAndView reAdminPasswd() {
        return new ModelAndView("admin_repasswd");
    }

    @RequestMapping("/admin_repasswd_do")
    public String reAdminPasswdDo(HttpServletRequest request, String oldPasswd, String newPasswd, String reNewPasswd, RedirectAttributes redirectAttributes) {
        Admin admin = (Admin) request.getSession().getAttribute("admin");
        long id = admin.getAdminId();
        String password = loginService.getAdminPassword(id);
        if (password.equals(oldPasswd)) {
            if (loginService.adminRePassword(id, newPasswd)) {
                redirectAttributes.addFlashAttribute("succ", "密码修改成功!");
                return "redirect:/admin_repasswd.html";
            } else {
                redirectAttributes.addFlashAttribute("error", "密码修改失败!");
                return "redirect:/admin_repasswd.html";
            }
        } else {
            redirectAttributes.addFlashAttribute("error", "旧密码错误!");
            return "redirect:/admin_repasswd.html";
        }
    }

    @RequestMapping("/reader_repasswd.html")
    public ModelAndView reReaderPasswd() {
        return new ModelAndView("reader_repasswd");
    }

    @RequestMapping("/reader_repasswd_do")
    public String reReaderPasswdDo(HttpServletRequest request, String oldPasswd, String newPasswd, String reNewPasswd, RedirectAttributes redirectAttributes) {
        ReaderCard reader = (ReaderCard) request.getSession().getAttribute("readercard");
        long id = reader.getReaderId();
        String password = loginService.getReaderPassword(id);
        if (password.equals(oldPasswd)) {
            if (loginService.readerRePassword(id, newPasswd)) {
                redirectAttributes.addFlashAttribute("succ", "密码修改成功!");
                return "redirect:/reader_repasswd.html";
            } else {
                redirectAttributes.addFlashAttribute("error", "密码修改失败!");
                return "redirect:/reader_repasswd.html";
            }
        } else {
            redirectAttributes.addFlashAttribute("error", "旧密码错误!");
            return "redirect:/reader_repasswd.html";
        }
    }

    //配置404页面
    @RequestMapping("*")
    public String notFind() {
        return "404";
    }

}

6 、功能视频演示

图书馆管理2

7 、 获取方式

👇 大家点赞、收藏、关注、评论啦 👇🏻获取联系方式,后台回复关键词:图书馆👇🏻

请添加图片描述

SSM框架的图书管理系统 在磁盘、网络和数据库等方面做出优化,降低数据库查询和页面响应时间,让用户可以快速记录和查询图书信息,提高用户的满意度和信任度。为了方便图书管理员的操作,减少图书管理员的工作量并使其能更有效的管理书库中的图书,实现了传统的图书管理工作的信息化建设。包括读者的借阅申请、借阅记录统计、图书逾期管理、图书续借等。包括图书的增、删、改、查等基本操作,对每一本书籍的基本信息进行管理,包括书名、作者、出版社、价格、库存量等。系统包含了图书的添加、删除、修改、查询等基本功能,满足了用户对图书管理的基本需求。 阅读详情

相关推荐

基于SSM的图书管理系统的设计与实现

摘要随着互联网技术的迅速发展和数字化时代的到来,图书管理系统在各类图书馆、学术机构和企事业单位中发挥着越来越重要的作用。然而,传统的图书管理系统在功能上存在局限性,且难以满足现代化信息管理的需求。因此,探讨基于SSM框架的图书管理系统的设计与实现具有重要的现实意义,旨在提高图书管理效率和用户体验。图书管理系统采用Java技术开发,后台基于SSM框架搭建,数据库选用MySQL。系统实现了以下功能:个人中心、用户管理、图书分类管理、图书信息管理、借书信息管理、还书信息管理、图书评分管理、留言板以及系统管理等。

2301_79097739的博客 970

基于SSM的图书管理系统

一、系统简介 该项目是基于Java的SSM框架实现的图书管理系统 二、技术实现 1.后台框架:Spring、SpringMVC、MyBatis、Ajax 2.UI界面:BootStrap 3.数据库:MySQL 5.7 4.加密:md5+随机盐 运行环境: JDK 8 IntelliJ IDEA Tomcat 9.0 MySQL 5.7 三、系统功能 系统共分为三种用户: 1.普通用户 书籍列表显示、书籍借阅、书籍归还, 2.管理员 用户...

SayBlog 2万+

【面试经验】大疆笔试-计算机视觉算法B卷

3、a=np.random.randn(3,3) b=np.random.randn(3,1) ,那么c=a*b的维度应该是:*是元素乘法或者torch.mul,@才是矩阵乘法或者torch.matmul,不会触发广播机制;8、将分辨率降低一半时,精标定内参(fx、fy、cx、cy、k1、k2、k3)焦距、光心、畸变系数将分别变成(fx、fy、cx/2、cy/2、k1、k2、k3),只能搜到光心变成一半,畸变系数不变。12、KLT算法在频闪光源、重复纹理、高速机动、环境照度低的情况下效果显著下降。

litterfinger的博客 1444

基于SSM图书管理系统2

1,项目功能:1)用户管理用户包括为用户分配账号,修改密码,用户安全退出功能。此模块只能由系统管理员统一配置,用户不能自行注册,用户密码要进行加密处理。支持excel读者数据的导入。2)图书管理对需要图书进行增删改查操作,要提供完善的检索功能,以便于读者使用该系统进行图书检索,支持excel图书数据导入。3)借还管理每位读者要先交纳100元押金。每位读者最多可以同时借阅2本图书。读者借书后,若在30天内没有看完,则可以续借一次,续借之后若超出30天则进行扣款处罚。每延迟一天扣款1元钱。读者归还图书后,要进行天数清零。图书的借阅状态分为3种,分别是:已借出、已入库、延迟。4)系统管理本系统角色共分为3种:系统管理员、图书馆管理员、读者。由于各个角色的使用功能不一样,所以要加入权限控制使不同的角色登陆系统后所拥有的权限不同。5)出版社管理对出版社进行维护,便于在录入图书信息时进行快速选择。6)系统监控记录登陆用户的登陆时间、推出时间及在系统内进行的所有操作。7)数据分析提供图书种类的数据分析。      适合做毕业设计参考项目。2,涉及技术:SSM框架,Tomcat3,开发环境:IDEA,MySQL数据库4,讲解方式:从环境安装,项目搭建,以及项目介绍等进行讲解5,包含资料:项目源码(含数据库文件),环境安装包,项目文档。

微信支付开发之平台给用户转账到零钱的功能

请求消息中应包含商家批次单号、转账名称、appid、转账总金额、转账总笔数、转账openid、收款用户姓名等信息。批次已受理成功,若发起批量转账的30分钟后,转账批次单仍处于该状态,可能原因是商户账户余额不足等。【转账场景ID】 该批次转账使用的转账场景,如不填写则使用商家的默认场景,如无默认场景可为空,可前往“商家转账到零钱-前往功能”中申请。【转账总笔数】 一个转账批次单最多发起一千笔转账。【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一。

程序员weixin_sodomany的博客 3448

告别卡顿!手把手教你用北鲲云超算平台图形化提交COMSOL仿真任务(附RDP连接技巧)

本文详细介绍了如何利用北鲲云超算平台图形化提交COMSOL仿真任务,解决本地计算资源不足导致的卡顿问题。通过云端高性能计算,用户可轻松配置多核CPU和大内存资源,实现高效仿真计算,并附有RDP连接优化技巧,提升远程操作体验。

weixin_42519781的博客 378

基于SSM的图书馆管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)

基于SSM的图书馆管理系统7拥有两种角色:管理员和用户 管理员:图书管理、类型管理、借阅管理、续借管理、归还管理、罚金管理、留言管理等 学生用户:借阅图书、续借图书、归还图书、缴纳罚金等

coderWangbuer的博客 1148

从USB相机标定到Aruco码精准定位:基于aruco-ros的机器人视觉实践

本文详细介绍了基于aruco-ros的机器人视觉实践,从USB相机标定到Aruco码精准定位的全流程。通过实战案例和优化技巧,展示了Aruco码在机器人导航中的高精度位姿识别能力,帮助开发者快速实现毫米级视觉定位系统。

weixin_27310417的博客 487

基于SSM的图书馆管理系统的设计与实现 (含源码+sql+视频导入教程)

 基于SSM的图书馆管理系统1实现了图书管理、用户管理、类别管理、给用户借书和还书、借书记录等

coderWangbuer的博客 1451

LLC型自驱动半桥谐振变换器:电压电流变化与自然换向解析

变换器的工作状态经历了多个阶段,从模态一的关断状态,到模态二和三的电流供电状态,每个阶段都得到了合理的设计和优化。的工作原理,尤其是在半个周期内的电压和电流变化。上图 展示了该变换器在工作时的电压和电流波形,它为我们揭示了变换器如何通过精确的电流和电压控制,优化性能并实现高效能转换。,并根据负载情况调整电流和电压的工作模式,能够极大提升变换器的效率,尤其是在零电压开通和自然换向的设计中,发挥着关键作用。这意味着,电流会随着时间周期的变化,呈现典型的振荡波形,从而达到良好的电流控制。是两个关键的电流变量。

weixin_43199439的博客 279

把消息说清楚:OData V2 的 sap-message、错误体 errordetails 与 ABAP 端落地实践(Gateway Foundation / RAP)

OData V2消息机制解析:SAP业务系统的结构化通信设计 本文深入剖析了SAP系统中OData V2协议的消息传递机制。该设计通过双通道(成功时使用sap-message响应头,失败时采用error响应体)实现业务数据与提示信息的结构化分离,解决了企业级应用中"只返回业务数据"或"简单报错"的不足。文章详细解读了消息结构中的关键要素:target字段实现精准UI定位、severity级别控制交互流程、transition标记区分状态消息与过渡消息。同时揭示了SAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 849

基于SSM的图书馆管理系统(源码+sql脚本+文档PPT+导入视频教程)

基于SSM的图书馆管理系统1实现了图书管理、用户管理、类别管理、给用户借书和还书、借书记录等

wangbuerCoder的博客 409

MicroPython学习:在STM32上进行移植

本文将介绍如何在STM32上移植MicroPython,并提供相应的源代码。通过以上步骤,你已经成功地将MicroPython移植到STM32上,并可以使用MicroPython语言编写和运行代码。你可以进一步探索MicroPython的功能和API,以利用STM32的各种外设和功能。使用STM32CubeProgrammer或其他适当的烧录工具,将编译生成的MicroPython固件烧录到STM32微控制器中。打开该文件,并根据你的STM32微控制器类型进行必要的配置更改。模块来控制STM32的LED。

JeeVue的博客 1236

基于SSM的图书馆管理系统(含源码+sql+视频导入教程+文档+PPT)

基于SSM的图书馆管理系统5拥有两个角色,分别为管理员和学生,具体功能如下: 管理员:图书管理、分类管理、图书借阅管理、图书归还管理、借阅查询、学生管理 学生:图书借阅、借阅信息

wangbuerCoder的博客 747

D19: OpenClaw 安全性配置指南

在 OpenClaw 的 30 天探索旅程中,我们已经探讨了邮件自动化(D18)。今天进入安全专题,我将分享一个至关重要的话题:OpenClaw 安全性配置指南。 随着 OpenClaw 深入工作流核心,它掌握了越来越多的敏感信息: API Keys(GitHub、飞书、Notion、Jira...) 企业数据(代码库、文档、聊天记录) 个人数据(日历、邮件、任务) 系统权限(文件读写、命令执行、网络访问) 安全不是可选项,而是必选项。一次配置失误可能导致: API Key 泄露 → 账号被盗用权限

刘一说的IT专栏 203

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

基于SSM 的图书馆管理系统(源码+sql脚本+文档PPT+导入视频教程)

基于SSM 的图书馆管理系统拥有两个角色,分别为管理员和学生。具体功能如下: **管理员**:查看、添加图书,查看添加学生,借还管理,修改密码等 **学生**:查加检索图书、查看个人信息、查看个人借阅情况、修改密码

wangbuerCoder的博客 382

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

基于SSM的图书借阅系统12(含源码+sql+视频导入教程+文档+PPT)

基于SSM的图书借阅系统12拥有两种角色:管理员和用户 管理员:图书管理、借阅管理、归还管理、续借管理、证件挂失管理等 用户:登录注册、借书、还书、续借、挂失等

wangbuerCoder的博客 615

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于SSM 的图书馆管理系统(含源码+sql+视频导入教程+文档+PPT)

基于SSM 的图书馆管理系统拥有两个角色,分别为管理员和学生。具体功能如下: 管理员:查看、添加图书,查看添加学生,借还管理,修改密码等 学生:查加检索图书、查看个人信息、查看个人借阅情况、修改密码

wangbuerCoder的博客 735

基于java的SpringBoot/SSM+Vue+uniapp的阿博图书馆管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

🌞博主介绍:✌全网粉丝15W+,优快云特邀作者、211毕业、高级全栈开发程序员、大厂多年工作经验、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导✌🌞👇🏻精彩专栏 推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐✅Java精品实战案例《500套》

hwx20010805的博客 839

java源码案例-基于Java的图书馆管理系统的设计与实现(源码+文档+远程调试等)

java源码案例-基于Java的图书馆管理系统的设计与实现(源码+文档+远程调试等)

项目帮 957

ssm基于VUE的图书馆管理系统的设计与实现+vue(10670)

该项目提供基于Java的完整前后端系统源代码及配套文档,包含SQL脚本、论文、PPT和开题报告。技术栈采用SpringBoot+SSM+Vue框架,使用MySQL数据库,支持JSP页面和IDEA/Eclipse开发环境。项目提供演示视频、远程调试服务及运行包,适合Java开发者学习参考。需要完整资料的同学可通过文末联系方式获取。

m0_72438098的博客 366

基于SpringBoot+人脸识别的图书馆管理系统的设计与实现(源码+lw+部署文档+讲解等)

在智慧图书馆建设与服务效率提升的背景下,传统图书馆管理存在明显短板:证件借阅易出现冒用,身份核验效率低;书籍借还依赖人工操作,高峰时段排队拥堵;读者行为监管滞后,占座与逾期问题突出;馆藏资源利用数据模糊,难以精准优化。 基于SpringBoot+人脸识别的图书馆管理系统,可破解上述问题。技术上,SpringBoot后端实现数据交互与人脸算法集成,前端构建便捷操作界面,通过摄像头采集人脸特征实现身份绑定,支持离线识别与活体检测,构建“智能门禁-自助借还-行为管理-资源调度”全流程体系。 应用上,系统贴合图

1051

java源码案例-基于Java的图书馆管理系统,图书推荐,图书借阅与归还管理(源码+文档+远程调试等)

java源码案例-基于Java的图书馆管理系统,图书推荐,图书借阅与归还管理(源码+文档+远程调试等)

项目帮 996

基于SpringBoot的图书馆管理系统(源码+lw+部署文档+讲解等)

基于 SpringBoot 的图书馆管理系统,针对传统图书馆借阅流程繁琐、库存管理低效等问题,构建集图书管理、读者服务、借阅流通于一体的智能化平台。系统采用 SpringBoot 框架搭建后端服务,整合 MyBatis 优化数据库操作,通过 Spring Security 实现管理员、读者等多角色权限控制。 核心模块包括:图书管理支持多维度分类(学科、出版社、馆藏地),实现图书信息录入、编目、状态更新(在馆、借出、预约),关联 ISBN 码自动匹配元数据;借阅系统支持图书扫码借还,自动计算应还日期,超期前推

879

java源码案例-基于JavaWeb的图书馆管理系统(源码+文档+远程调试等)

java源码案例-基于JavaWeb的图书馆管理系统(源码+文档+远程调试等)

项目帮 876
上一篇: 基于SSM的图书馆管理系统的设计与实现 (含源码+sql+视频导入教程)
下一篇: 家庭理财管理系统(含源码+sql+视频导入教程+文档)
coderWangbuer
博客等级 码龄2年 1355粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值