前言

随着数字技术的快速发展,图书馆管理系统正从传统的纸质记录向智能化、数据化方向转型。本文将详细介绍如何使用Vue.js 3、Flask和相关技术栈构建一个功能完整的智能图书馆管理系统,该系统包含借还书管理、数据统计分析、AI智能推荐等核心功能。

该系统经调试,可真实运行,最大的亮点是集成了AI功能,智能推荐图书等。

一、技术栈介绍

前端技术栈

  • Vue.js 3:渐进式JavaScript框架

  • Vue Router 4:前端路由管理

  • Axios:HTTP客户端

  • Vite:现代化前端构建工具

后端技术栈

  • Flask:轻量级Python Web框架

  • Flask-CORS:跨域资源共享支持

AI集成

  • DeepSeek API:用于智能问答和图书推荐

二、项目结构设计

librarysys/
├── backend/                 # Flask后端
│   ├── app.py             # 主应用文件
│   └── data/              # JSON数据存储
│       ├── books.json
│       ├── readers.json
│       └── borrowRecords.json
├── src/                    # Vue前端源码
│   ├── components/         # 组件目录
│   │   ├── BorrowForm.vue  # 借书表单
│   │   ├── ReturnForm.vue  # 还书表单
│   │   ├── DataAnalysis.vue # 数据分析
│   │   ├── AIAssistant.vue # AI助手
│   │   └── Sidebar.vue     # 侧边栏
│   ├── App.vue            # 根组件
│   └── main.js            # 入口文件
├── package.json           # 项目配置
├── vite.config.js         # Vite配置
└── index.html            # HTML模板

三、环境搭建与配置

3.1 项目初始化

# 创建项目目录
mkdir librarysys
cd librarysys

# 初始化npm项目
npm init -y

# 安装前端依赖
npm install vue@^3.4.0 vue-router@^4.3.0 axios@^1.6.0

# 安装开发依赖
npm install -D @vitejs/plugin-vue@^5.0.0 vite@^5.0.0

3.2 Vite配置

创建 vite.config.js 文件:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
  plugins: [vue()],
  server: {
    port: 3000,
    open: true,
    proxy: {
      '/api': {
        target: 'http://localhost:5000',
        changeOrigin: true
      }
    }
  },
  build: {
    outDir: 'dist',
    assetsDir: 'assets'
  }
})

3.3 Flask后端环境

# 安装Python依赖
pip install flask flask-cors requests

四、核心功能模块实现

4.1 数据模型设计

图书模型(books.json)

{
  "id": "20210201",
  "title": "小王子",
  "author": "安托万·德·圣-埃克苏佩里",
  "isbn": "9787544260011",
  "category": "童话",
  "summary": "一部写给大人的童话,关于爱与责任。"
}

读者模型(readers.json)

{
  "readerId": "20200112",
  "name": "张三",
  "borrowLimit": 5,
  "booksBorrowed": 2
}

4.2 借书功能实现

前端组件(BorrowForm.vue)

<template>
  <div class="form-container">
    <h2>借书</h2>
    <div class="input-group">
      <label>条形码:</label>
      <input v-model="barcode" placeholder="请输入条形码" />
    </div>
    <div class="input-group">
      <label>读者证号:</label>
      <input v-model="readerId" placeholder="请输入读者证号" />
    </div>
    <button @click="borrowBook()">借书</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      barcode: '',
      readerId: ''
    }
  },
  methods: {
    async borrowBook() {
      try {
        const response = await this.$http.post('/borrow', {
          bookId: this.barcode,
          readerId: this.readerId
        })
        
        if (response.data.success) {
          alert(response.data.message)
          this.barcode = ''
          this.readerId = ''
        }
      } catch (error) {
        alert(error.response?.data?.error || '借书失败')
      }
    }
  }
}
</script>

后端API(app.py)

@app.route('/api/borrow', methods=['POST'])
def borrow_book():
    data = request.json
    book_id = data.get('bookId')
    reader_id = data.get('readerId')
    
    # 验证读者借书限制
    if reader['booksBorrowed'] >= reader['borrowLimit']:
        return jsonify({'error': '借书数量已达上限'}), 400
    
    # 创建借书记录
    new_record = {
        'recordId': f'R{datetime.now().strftime("%Y%m%d%H%M%S")}',
        'bookId': book_id,
        'readerId': reader_id,
        'borrowDate': datetime.now().isoformat(),
        'dueDate': (datetime.now() + timedelta(days=30)).isoformat(),
        'returned': False
    }
    
    return jsonify({
        'success': True,
        'message': f'借出成功,应还日期:{(datetime.now() + timedelta(days=30)).strftime("%Y-%m-%d")}'
    })

4.3 数据分析模块

数据统计看板(DataAnalysis.vue)

<template>
  <div class="analysis-container">
    <h2>📊 数据分析</h2>
    
    <div class="stats-grid">
      <div class="stat-card">
        <h3>总藏书量</h3>
        <div class="stat-number">{{ summary.totalBooks }}</div>
      </div>
      <div class="stat-card">
        <h3>注册读者</h3>
        <div class="stat-number">{{ summary.totalReaders }}</div>
      </div>
      <div class="stat-card">
        <h3>总借阅量</h3>
        <div class="stat-number">{{ summary.totalBorrows }}</div>
      </div>
      <div class="stat-card">
        <h3>在借图书</h3>
        <div class="stat-number">{{ summary.activeBorrows }}</div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      summary: {}
    }
  },
  async mounted() {
    await this.loadAnalysisData()
  },
  methods: {
    async loadAnalysisData() {
      const response = await this.$http.get('/analyze')
      this.summary = response.data.summary
    }
  }
}
</script>

4.4 AI智能助手集成

AI助手组件(AIAssistant.vue)

<template>
  <div class="ai-assistant">
    <h2>🤖 AI 图书助手</h2>
    
    <div class="chat-section">
      <div class="message-list">
        <div v-for="(msg, index) in messages" :key="index" 
             :class="['message', msg.role]">
          <div class="message-content">{{ msg.content }}</div>
        </div>
      </div>
      
      <div class="input-section">
        <input 
          v-model="userInput" 
          placeholder="询问借书情况、图书统计等信息..."
          @keyup.enter="sendMessage"
        />
        <button @click="sendMessage">发送</button>
      </div>
    </div>
  </div>
</template>

DeepSeek API集成

@app.route('/api/ai/recommend', methods=['POST'])
def ai_recommend():
    data = request.json
    query = data.get('query', '')
    
    # 调用DeepSeek API
    deepseek_response = requests.post(
        'https://api.deepseek.com/v1/chat/completions',
        headers={
            'Authorization': f'Bearer {DEEPSEEK_API_KEY}',
            'Content-Type': 'application/json'
        },
        json={
            'model': 'deepseek-chat',
            'messages': [
                {
                    'role': 'system',
                    'content': '你是一个图书管理助手...'
                },
                {
                    'role': 'user',
                    'content': query
                }
            ]
        }
    )
    
    return jsonify({
        'answer': deepseek_response.json()['choices'][0]['message']['content']
    })

五、项目运行与部署

5.1 启动开发服务器

bash

# 启动前端开发服务器
npm run dev

# 启动后端Flask服务器
python backend/app.py

5.2 生产环境构建

bash

# 构建前端资源
npm run build

# 配置生产环境服务器
# 将dist目录下的文件部署到Web服务器
# 配置Nginx或Apache反向代理

5.3 启动脚本

创建 start.bat(Windows)或 start.sh(Linux):

bash

@echo off
echo 启动图书馆管理系统...

REM 启动前端
start cmd /k "npm run dev"

REM 启动后端
start cmd /k "python backend/app.py"

echo 系统启动完成!
echo 前端访问:http://localhost:3000
echo 后端API:http://localhost:5000

PS:先写到这儿,后续再上传源码。

2026年1月12更新代码下载地址:

https://download.csdn.net/download/huzhangka7378/92555235

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐