设计并实现一个综合性的数据库系统,用于管理连锁销售公司的门店、商品(包括图书)、供货商、客户(包括会员)、销售记录及统计数据。
Artifact | Version |
---|---|
MySQL | 8.0.23 |
Python | 3.7.10 |
Navicat Premium | 15.0.023 |
Django | 3.2.3 |
Pymysql | 1.0.2 |
Bootstrap | 4.5 |
BookStoreDB works on Windows 10&11. Chrome is recommended to have the best experience.
- Git clone through Git CMD or download the project through Github Desktop to your direction:
git clone https://github.com/duolaCmengaa/database.git
cd database-main
- Enter the root file "BookStoreDB/" and install dependencies:
pip install -r requirements.txt
- Set up database and replace my username and password in project root file "BookStoreDB/settings.py" containing something like:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "BookStoreDB",
'USER': username,
'PASSWORD': password,
'HOST': '127.0.0.1',
'PORT': '3306'
}
}
- Apply migrations and create superuser:
python manage.py migrate
python manage.py createsuperuser # Not necessarily required.
- To avoid starting the system with empty database, run in command line:
python data.py
- Start server at local host:
python manage.py runserver # Following message will occur.
System check identified no issues (0 silenced).
June 25, 2024 - 21:14:51
Django version 4.2.13, using settings 'BookStoreDB.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
-
Enter server: http://127.0.0.1:8000/
-
Database being polluted, you may:
python manage.py flush
python data.py # This simply reset everything including your login info.
进入BookStoreDB导航页,点击Start按钮,进如用户注册/登录界面。
如果没有账号可以先进行注册,填写完id、邮箱、密码后进行注册,注册完成后返回登录界面,已有账号的用户可以直接进行登录。
通过连接 http://127.0.0.1:8000/admin ,进入超级管理员登录界面。通过输入在“python manage.py createsuperuser”命令后设置的账户和密码,进入超管控制面板。在超级管理员控制面板可以对管理员、书籍、门店、供货商等进行编辑。
在BookStoreDB主页,可以获取新订单,每次获得的订单数在5-10之间。此外点击不同标签页可以获取不同信息。
在Users标签页,可以浏览当前所有用户,用户分为VIP和普通用户,可以对每个用户进行编辑和删除。除此之外,可以通过输入用户id、地址、邮箱、姓名等进行查找,并可通过ID、姓名的等对用户进行排序(升序/降序)。
在Publishers界面可以查看出版商信息,包含出版商名称、联系电话、邮箱、联系人、地址,并可对出版商信息进行编辑和删除。另外,可以根据出版商名称、地址、邮件、id等进行查找和升降序排序。
在Writers页面可以查看作者信息,包含作家姓名和类别(作者/译者)。可以通过姓名和ID进行查找和排序、根据作家类别进行分类。同时可以对每条作家信息进行编辑和删除。
在Books标签页可以看到每本书的标题、作者、价格(普通价格/VIP价格)、出版商、图书类别/子类别、出版日期、版本、库存等信息,可以根据图书的ID、标题、作者、出版商、类别、子类等进行查找和分类,并且可以对每本书的信息进行编辑和删除
在Orders标签页可以看到每条订单的ID、订单日期、门店、订单客户、订单书籍以及相对应的数量和单价。每条订单可以被确认,未被确认的订单可以被修改或删除以防止恶意订单,被确认的订单会显示确认订单的用户名。可以通过OrderID、订单客户、订单日期、门店名以及确认订单的用户名进行查找,通过是否被确认进行分类筛选,以及根据各个指标对订单进行排序。
除此之外,可以通过“Order Summary and Analysis”按钮进入订单汇总界面。里面展示时间段内的订单总数、售出图书总量以及总销售额,同时会显示在时间段内每个门店的总图书销量和销售额,图书的销量排行榜,用户的购买量的排行榜,可以选择汇总的开始、结束日期以进行筛选。
在Stores标签页可以看到每个门店的ID、名称、地址、联系电话、经理姓名和对应供货商。可以通过门店名、地址、联系电话和经理姓名对门店进行查找和排序。同时可以对每个门店的信息进行编辑和删除。
在Suppliers标签页可以看到每个供货商的ID、名称、联系电话、电子邮箱、联系人和地址。可以通过供货商名称、联系电话、联系人、电子邮件进行查找和排序。可以对每条门店的信息进行单独编辑和删除。
- 乔一宸
- 马骎
- 李波
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
username | varchar(40) | NO | NULL | ||
varchar(40) | NO | NULL | |||
pwd | varchar(128) | NO | NULL | ||
ip | varchar(40) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
name | varchar(40) | NO | NULL | ||
sex | varchar(6) | NO | NULL | ||
phone | varchar(20) | NO | NULL | ||
varchar(40) | NO | NULL | |||
vip | tinyint(1) | NO | NULL | ||
address | varchar(100) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
name | varchar(100) | NO | NULL | ||
phone_number | varchar(20) | NO | NULL | ||
varchar(254) | NO | NULL | |||
contacts | varchar(40) | NO | NULL | ||
address | varchar(60) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
name | varchar(40) | NO | NULL | ||
author_type | varchar(20) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
title | varchar(64) | NO | MUL | NULL | |
price | decimal(6,2) | NO | NULL | ||
price_vip | decimal(6,2) | NO | NULL | ||
publish_date | date | NO | NULL | ||
edition | longtext | YES | NULL | ||
storage | int unsigned | NO | NULL | ||
classification_id | bigint | NO | MUL | NULL | |
publishers_id | bigint | NO | MUL | NULL | |
sub_classification_id | bigint | NO | MUL | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
books_id | bigint | NO | MUL | NULL | |
writers_id | bigint | NO | MUL | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
class_name | varchar(20) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
class_name | varchar(20) | NO | NULL | ||
ancestor_class_name_id | bigint | NO | MUL | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | varchar(64) | NO | PRI | NULL | |
last_edit | datetime(6) | NO | NULL | ||
date | date | NO | NULL | ||
user_id | bigint | NO | MUL | NULL | |
store_id | int | NO | MUL | NULL | |
confirm | varchar(1) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
price | decimal(6,2) | NO | NULL | ||
count | int unsigned | NO | NULL | ||
book_id | bigint | NO | MUL | NULL | |
order_id | varchar(64) | NO | MUL | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int | NO | PRI | NULL | auto_increment |
name | varchar(100) | NO | NULL | ||
location | varchar(200) | NO | NULL | ||
phone_number | varchar(20) | NO | NULL | ||
manager | varchar(100) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int | NO | PRI | NULL | auto_increment |
name | varchar(100) | NO | NULL | ||
phone_number | varchar(20) | NO | NULL | ||
varchar(40) | NO | NULL | |||
contact_person | varchar(40) | NO | NULL | ||
address | varchar(200) | NO | NULL |
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | bigint | NO | PRI | NULL | auto_increment |
store_id | int | NO | MUL | NULL | |
supplier_id | int | NO | MUL | NULL |
The URL tree should be constructed as follows:
1. admin/
2. accounts/
3. home/
4.
5. users/
6. books/
7. publishers/
8. writers/
9. orders/
10.suppliers/
11.stores/
本项目是基于Django来实现的,
对于一个综合书店销售数据库来说,整个系统的后端 API 说明可以概述如下:
文件说明:
- _init_.py
用于将包含的目录标记为一个 Python 包。通常为空,但可以用于包的初始化设置。
- admin.py
注册数据库模型以便通过 Django 管理界面进行管理和操作。这可以包括书籍、订单、客户、出版社等模型。
- apps.py
配置应用程序的元数据,如应用名称和配置类,确保应用程序正确加载和配置。
- models.py
定义数据库模型,描述书店的各种数据结构。这些模型包括书籍、作者、分类、订单、客户、出版社等。每个模型对应数据库中的一张表,包含字段和数据类型定义。
- urls.py
定义 URL 路由,将不同的 URL 路径映射到相应的视图函数或类。这使得系统能够正确处理不同的 HTTP 请求,如查看书籍详情、下订单等。
- views.py
包含处理请求的视图函数或类,这些函数或类负责处理来自前端的请求并返回相应的响应。它们执行业务逻辑,如查询数据库、处理表单数据、返回 HTML 页面或 JSON 数据。
数据库访问逻辑主要通过 Django 的 ORM 实现,以下是一些关键点:
- 模型查询
使用模型类来查询数据库。例如,查询所有书籍、某个分类下的书籍或某个客户的订单等。
模型实例操作
- 创建、更新和删除模型实例。
例如,添加新书籍、更新订单状态、删除客户信息等。
- 关联查询
处理模型之间的关系查询。例如,获取某本书的作者信息,获取某个订单的所有书籍明细等。
- 事务管理
在处理复杂操作时,使用数据库事务确保数据一致性。例如,在下订单时,同时减少库存数量和记录订单信息,确保两个操作要么同时成功要么同时失败。
我们使用的是Bootstrap框架,Bootstrap 是一个用于开发响应式和移动优先网页的前端框架, 包含了大量的 CSS 和 JavaScript 组件,使得开发者可以快速构建现代、响应式的网站和应用。 我们使用template来渲染动态内容。利用Bootstrap进行响应式和现代化的UI设计。包含导航(navigation)和交互元素以与后端数据进行交互。
数字化时代的来临改变了人们获取信息和购物的方式,传统的线下书店销售模式显然已经无法满足当代消费者的需求,“亚马逊”,“当当网”逐渐步入人们的生活。因此,建立网上综合书店销售数据库至关重要。数据驱动决策,建立销售数据库可以收集并分析客户行为数据,为书店提供精准的营销策略和个性化的推荐服务。此外,通过网上销售,书店可以跨越地域限制,拓展潜在客户群体,实现更广泛的市场覆盖。总之,建立网上综合书店销售数据库是适应数字化时代趋势的重要举措,所以,本小组设计网上综合书店销售数据库BookStoreDB来作为此次课程项目内容。
首先作为信息管理系统,BookStoreDB将会储存各种数据,包括门店,供货商,商品,图书,客户,会员,销售记录,出版社信息,此外,图书还将被分类,每一类图书还设有子类,作者和译者可能由多人组成,因而还需要额外的作者-译者信息
管理员有更多的权限和责任,他们拥有独立的登录窗口,可以管理供应商信息,门店信息,出版社信息,商品信息,包括添加、修改、查询和删除,以及查看并修改商品库存。管理员还需要管理图书的分类、出版社及作者信息。管理员还可以管理销售记录,包括查看订单信息并审核是否通过,而且他们有权限实现客户信息及会员信息的增加、删除、修改和查询功能。并且管理员需要实现销售记录的录入、修改和查询功能,提供销售数据的汇总和分析。此外设置超管员,拥有最高权限,可以管理管理员信息。
用户具有独立的信息(用户名、姓名、联系电话、e-mail、地址、密码),而且分为会员与非会员两种类型,会员能够享受自己的优惠政策。用户可以在网上浏览商品信息,搜索商品,使用筛选器分类查找目标商品,将商品添加到购物车并进行购买,但是购买的商品量不能超过物品的库存。用户也能够管理自己的个人信息和查看订单历史。综上所述,用户可以通过网上平台轻松完成购物并管理个人信息。
-
会员
- {用户名,用户的唯一编号,char(30)}
- {会员姓名,varchar(10)}
- {性别,ENUM(“男”, ”女”, ”保密”)}
- {手机号码,varchar(20)}
- {email,varchar(30)}
- {地址,varchar(50)}
- {会员,ENUM(“是”, ”否”)}
-
管理员
- {用户名,管理员的唯一编号,char(30)}
- {email,varchar(30)}
- {登陆密码,char(128)}
-
订单信息
- {订单号,唯一确定订单的编号,char(10)}
- {订单日期,DATETIME}
- {收货人姓名,varchar(10)}
- {发货状态,ENUM(“未发货”, ”已发货”)}
- {图书编号,char(20)}
- {订购数量,int(4)}
- {单价,int(4)}
-
图书信息
- {图书编号,唯一标识图书的编号,char(20)}
- {图书名,varchar(30)}
- {出版时间,DATETIME}
- {版本号,char(30)}
- {出版社编号,int(4)}
- {作者/译者编号,int(4)}
- {图书类别编号,int(4)}
- {图书子类编号,int(4)}
- {库存量,int(4)}
- {单价,int(4)}
- {会员单价,int(4)}
-
作者/译者
- {作者/译者编号,唯一标识作者/译者的编号,int(4),AUTO_INCREMENT}
- {作者/译者名字,varchar(30)}
- {作者/译者,SET(“作者“,”译者”)}
-
出版社信息
- {出版社编号,唯一标识出版社的编号,int(4),AUTO_INCREMENT}
- {出版社,varchar(30)}
- {出版社地址,varchar(50)}
- {出版社email,char(30)}
- {出版社联系方式,varchar(20)}
-
分类信息1
- {图书类别编号,唯一标识分类的编号,int(4),AUTO_INCREMENT}
- {类别,varchar(10)}
-
分类信息2
- {图书子类编号,唯一标识子类的编号,int(4),AUTO_INCREMENT}
- {子类,varchar(10)}
管理员将可以自行录入,设置密码、用户名、email等个人信息,并且密码将使用加密算法,以提高系统的安全性等级。此外设置超级管理员,以对管理员账户及其他信息进行管理。
管理员将被允许使用过滤器、搜索栏,按照分类、关键词、作者、出版社等重要信息对图书进行检索,同时还可以按照销售量、访问量、价格等参数升序或降序排列。管理员还可以单独访问作者、译者以及出版社的具体信息,以便更好地查询信息。
管理员将被允许新增、删除、修改客户、图书、作者、出版社等信息。
订单将会成交当且仅当管理员审核并通过订单,否则可能会导致恶意订单的提交。管理员还被允许根据实际情况增删库存信息以及图书信息。