基于python的电子图书销售商城系统的设计与实现

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻

💖🔥作者主页计算机毕设木哥🔥 💖

一、项目介绍

随着互联网技术的不断发展,电子图书市场逐渐成为人们获取知识和信息的重要途径。越来越多的读者开始青睐于电子图书的便捷性和环保性。然而,当前的电子图书销售市场仍然存在一些问题,如资源不丰富、分类不清晰、价格不透明等。因此,研究并开发一个基于Python的电子图书销售商城系统具有重要的现实意义和价值。

本课题的研究背景在于,随着人们阅读习惯的改变和电子设备的普及,电子图书市场呈现出快速增长的趋势。然而,当前的电子图书销售平台存在一些问题,无法满足读者的需求。在这种情况下,开发一个基于Python的电子图书销售商城系统将有助于提高电子图书的销售效率和用户体验。

二、项目功能介绍

1、个人中心:个人中心是用户的独立空间,包括用户的基本信息、购物车、已购买图书、账户设置等部分。用户可以在个人中心查看和编辑个人信息,管理自己的购物车和购买记录,以及进行账户设置,如修改密码、绑定邮箱等。
2、 用户管理:用户管理模块涵盖了所有与用户账户相关的操作和功能。系统支持多种用户角色的创建和管理,包括普通用户、管理员和卖家。管理员可以管理用户,包括创建新用户、编辑用户信息和删除用户。同时,系统还支持对用户行为进行分析,帮助管理员更好地理解用户需求和行为。
3、 图书分类管理:该模块用于管理电子图书的分类。管理员可以添加新的图书分类,也可以编辑和删除现有的分类。此外,分类支持多级,可以更精确地定位图书的位置,方便用户查找。
4、 图书信息管理:在图书信息管理模块中,管理员可以添加新的电子图书信息,包括书名、作者、出版社、简介等。同时,也可以编辑和删除现有的图书信息,以及进行库存管理和价格调整。此外,系统还支持多种排序和筛选方式,使用户可以快速找到所需的图书。
5、 系统管理:系统管理模块用于进行系统的设置和维护。管理员可以设置系统参数、调整数据库连接、备份和恢复数据等。此外,还可以进行日志管理和异常处理,保证系统的稳定性和安全性。
6、 订单管理:订单管理模块涉及订单的创建、编辑、删除以及用户支付状态的追踪。管理员可以查看订单详情,包括商品信息、买家信息、支付状态等,也可以对订单进行发货和确认收货等操作。此外,还支持对订单进行统计和分析,帮助管理员了解销售额和销售趋势。

三、开发环境

  • 开发语言:Python
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:Django
  • 前端:Vue+HTML+CSS+JavaScript+jQuery
  • 工具:PyCharm

四、项目展示

注册登录页面:
在这里插入图片描述
首页模块:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
管理员模块:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、代码展示

def smsSend():
    accounts = json.loads(request.get_data())
    phones = []
    for account in accounts:
        phones.append(account['phone'])
    phones = list(set(phones))
    for phone in phones:
        print(phone)
        # 解注释即可发短信
        # send_sms(phone, "{'code':'你于5.1借阅的百年孤独逾期未归还,请于5.2下午17.30之前归还!'}")
    return jsonify(phones)


@book.route('/book/storage', methods=['GET', 'POST'])
def storage():
    if request.method == 'GET':
        form = StoreForm()
        return render_template('storage.html', form=form)
    elif request.method == 'POST':
        form = StoreForm()
        if form.validate_on_submit():
            book = BookModel.query.filter_by(isbn=request.form.get('isbn')).first()
            exist = InventoryModel.query.filter_by(barcode=request.form.get('barcode')).first()
            if book is None:
                flash(u'添加失败,请注意本书信息是否已经录入,若未登记,请在‘新书入库’窗口登入信息')
            else:
                if len(request.form.get('barcode')) != 6:
                    flash(u'图书编码长度错误')
                else:
                    if exist is not None:
                        flash(u'该编号已经存在!')
                    else:
                        inventory = InventoryModel()
                        inventory.barcode = request.form.get('barcode')
                        inventory.isbn = request.form.get('isbn')
                        inventory.admin_id = g.account.id
                        inventory.number = request.form.get('number')
                        inventory.borrowable_number = request.form.get('number')
                        inventory.location = request.form.get('location')
                        inventory.status = True
                        inventory.withdraw = False
                        today_date = datetime.date.today()
                        today_str = today_date.strftime("%Y-%m-%d")
                        today_stamp = time.mktime(time.strptime(today_str + ' 00:00:00', '%Y-%m-%d %H:%M:%S'))
                        inventory.storage_date = int(today_stamp) * 1000
                        db.session.add(inventory)
                        db.session.commit()
                        flash(u'入库成功!')
            return redirect(url_for('book.storage'))
        return render_template('storage.html', form=form)


@book.route('/book/new_store', methods=['GET', 'POST'])
def new_store():
    if request.method == 'GET':
        form = NewStoreForm()
        return render_template('new-store.html', form=form)
    elif request.method == 'POST':
        form = NewStoreForm()
        if form.validate_on_submit():
            if len(request.form.get('isbn')) != 13:
                flash(u'ISBN长度错误')
            else:
                exist = BookModel.query.filter_by(isbn=request.form.get('isbn')).first()
                if exist is not None:
                    flash(u'该图书信息已经存在,请核对后再录入,或者填写入库表')
                else:
                    book = BookModel()
                    book.isbn = request.form.get('isbn')
                    book.book_name = request.form.get('book_name')
                    book.press = request.form.get('press')
                    book.author = request.form.get('author')
                    book.type = request.form.get('class_name')
                    book.price = request.form.get('price')
                    book.isLib = 1
                    db.session.add(book)
                    db.session.commit()
                    flash(u'图书信息添加成功')
            return redirect(url_for('book.storage'))
        return render_template('new-store.html', form=form)


@book.route('/book/borrow', methods=['GET', 'POST'])
def borrow():
    return render_template('borrow.html')


@book.route('/book/return', methods=['GET', 'POST'])
def return_book():
    return render_template('return.html')


@book.route('/book/find_stu_book', methods=['GET', 'POST'])
def find_stu_book():
    today_date = datetime.date.today()
    today_str = today_date.strftime("%Y-%m-%d")
    today_stamp = time.mktime(time.strptime(today_str + ' 00:00:00', '%Y-%m-%d %H:%M:%S'))
    data = [today_stamp]
    return jsonify(data)


@book.route('/book/find_not_return_book', methods=['GET', 'POST'])
def find_not_return_book():
    data = []
    return jsonify(data)


@book.route('/book/change_info', methods=['GET', 'POST'])
def change_info():
    return render_template('change-info.html')


@book.route('/book/search_book', methods=['GET', 'POST'])
def search_book():  # 这个函数里不再处理提交按钮,使用Ajax局部刷新
    if request.method == 'GET':
        form = SearchBookForm()
        return render_template('search-book.html', form=form)


@book.route('/book/search_student', methods=['GET', 'POST'])
def search_student():
    if request.method == 'GET':
        form = SearchStudentForm()
        return render_template('search-student.html', form=form)


@book.route('/books', methods=['GET', 'POST'])
def find_book():
    if request.method == 'GET':
        books = db.session.query(BookModel).join(InventoryModel).filter(InventoryModel.withdraw == False).all()
        data = []
        for book in books:
            inventories = InventoryModel.query.filter_by(isbn=book.isbn, status=True).all()
            for inventory in inventories:
                item = {'isbn': book.isbn, 'book_name': book.book_name, 'press': book.press, 'author': book.author,
                        'class_name': book.type, 'location': inventory.location, 'count': inventory.number,
                        'available': inventory.borrowable_number}
                data.append(item)
        return jsonify(data)
    elif request.method == 'POST':
        def find_name():
            return db.session.query(BookModel).join(InventoryModel).filter(
                BookModel.book_name.like('%' + request.form.get('content') + '%'),
                InventoryModel.withdraw == False).all()
            # return BookModel.query.filter(BookModel.book_name.like('%' + request.form.get('content') + '%')).all()

        def find_author():
            return db.session.query(BookModel).join(InventoryModel).filter(
                BookModel.author.contains(request.form.get('content')), InventoryModel.withdraw == False).all()
            # return BookModel.query.filter(BookModel.author.contains(request.form.get('content'))).all()

        def find_class():
            return db.session.query(BookModel).join(InventoryModel).filter(
                BookModel.type.contains(request.form.get('content')), InventoryModel.withdraw == False).all()
            # return BookModel.query.filter(BookModel.type.contains(request.form.get('content'))).all()

        def find_isbn():
            return db.session.query(BookModel).join(InventoryModel).filter(
                BookModel.isbn.contains(request.form.get('content')), InventoryModel.withdraw == False).all()
            # return BookModel.query.filter(BookModel.isbn.contains(request.form.get('content'))).all()

        methods = {
            'book_name': find_name,
            'author': find_author,
            'class_name': find_class,
            'isbn': find_isbn
        }
        books = methods[request.form.get('method')]()
        data = []
        for book in books:
            inventories = InventoryModel.query.filter_by(isbn=book.isbn, status=True).all()
            for inventory in inventories:
                item = {'isbn': book.isbn, 'book_name': book.book_name, 'press': book.press, 'author': book.author,
                        'class_name': book.type, 'location': inventory.location, 'count': inventory.number,
                        'available': inventory.borrowable_number}
                data.append(item)
        return jsonify(data)


@book.route('/interloan_books', methods=['POST'])
def find_interloan_book():
    def find_name():
        return db.session.query(BookModel).join(InventoryModel).join(InterloanBookModel).filter(
            BookModel.book_name.like('%' + request.form.get('content') + '%'),
            InventoryModel.withdraw == False, BookModel.isLib == 0).all()

    def find_author():
        return db.session.query(BookModel).join(InventoryModel).filter(
            BookModel.author.contains(request.form.get('content')), InventoryModel.withdraw == False,
                                                                    BookModel.isLib == 0).all()

    def find_class():
        return db.session.query(BookModel).join(InventoryModel).filter(
            BookModel.type.contains(request.form.get('content')), InventoryModel.withdraw == False,
                                                                  BookModel.isLib == 0).all()

    def find_isbn():
        return db.session.query(BookModel).join(InventoryModel).filter(
            BookModel.isbn.contains(request.form.get('content')), InventoryModel.withdraw == False,
                                                                  BookModel.isLib == 0).all()

    methods = {
        'book_name': find_name,
        'author': find_author,
        'class_name': find_class,
        'isbn': find_isbn
    }
    books = methods[request.form.get('method')]()
    data = []
    for book in books:
        lenders = InterloanBookModel.query.filter_by(isbn=book.isbn).all()
        for lender in lenders:
            item = {'isbn': book.isbn, 'book_name': book.book_name, 'press': book.press, 'author': book.author,
                    'class_name': book.type, 'fee': book.price, 'lender': lender.lender}
            data.append(item)
    return jsonify(data)


@book.route('/book/logoff', methods=['GET', 'POST'])
def logoff():
    if request.method == 'GET':
        form = LogoffForm()
        return render_template('book-logoff.html', form=form)
    if request.method == 'POST':
        form = LogoffForm()
        if form.validate_on_submit():
            inventories = InventoryModel.query.filter_by(isbn=form.isbn.data, withdraw=False).all()
            if inventories is None or inventories == []:
                flash(u'请输入正确的isbn号!')
                return render_template('book-logoff.html', form=form)
            else:
                for inventory in inventories:
                    inventory.withdraw = True
                db.session.commit()
                flash(u'注销成功!')
                return redirect(url_for('book.logoff'))
        return render_template('book-logoff.html', form=form)


@book.route('/book/system_message', methods=['GET', 'POST'])
def system_message():
    return render_template('system-message.html')


@book.route('/book/reader_letter', methods=['GET', 'POST'])
def reader_letter():
    return render_template('reader-letter.html')


六、项目总结

随着互联网技术的快速发展,电子商务逐渐成为人们购物的主要方式。电子图书作为电子商务的一个重要分支,也得到了快速发展。然而,传统的电子图书销售平台存在资源不丰富、分类不清晰、价格不透明等问题。针对这些问题,本文提出并实现了一个基于Python的电子图书销售商城系统。

本文的主要目的是设计并实现一个功能完善的电子图书销售商城系统。通过需求分析,我们明确了系统的基本功能模块,包括用户管理、电子图书上传与分类、推荐与下载、订单管理、库存管理等功能模块。在系统设计阶段,我们采用了前后端分离的架构,使用Python语言和Django框架进行开发,同时使用MySQL等关系型数据库存储和管理电子图书信息。在代码实现阶段,我们对各个功能模块进行了详细设计和实现。在系统测试阶段,我们对系统进行了功能测试、性能测试、安全测试等,确保系统的稳定性和可用性。

大家可以帮忙点赞、收藏、关注、评论啦👇🏻👇🏻👇🏻👇🏻

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
【资源说明】 课程设计基于Django+Python开发图书销售管理系统源码+项目说明.zip Sales_system:主应用程序目录,这里用来调控整个项目 **__pycache__**:缓存文件夹,不用在意 **__init__**.py:初始化文件,不用在意 asgi.py:控制网关接口,与实验无关 settings.py:这是整个项目的设置文件,比较重要 urls.py:url接口文件,这里控制所有url访问 wsgi.py:控制网关接口,与实验无关 ss_env:这个文件夹用于创建虚拟环境,方便部署到服务器上,与实验无关 static:静态文件文件夹,用于存储所有静态文件 css:css文件目录 images:图片目录 migrations:迁移数据文件夹,用于将建好的模型迁移至数据库,使数据库创建相应table templates/system:页面目录,所有系统相关html文件都在这里 about.html:网站介绍页面 base.html:导航栏 books_display.html:书库页面 bookshop.html:书城页面 finance.html:财务页面 home.html:主页 info_detail:书籍详情页面 new_book_for_stock.html:进货时新建图书页面 new_book.html:新建图书页面 stock.html:进货页面 stockbills.html:货单页面 **__init__**.py:初始化文件,不用在意 admin.py:管理网站注册页面,在这里注册管理网站的模型,与实验无关 apps.py:应用程序文件,本项目没有用到 forms.py:表单文件,这里创建了需要使用到的表单模型 models.py:模型文件,这里定义了数据库模型,在迁移后数据库会根据模型建表 tests.py:测试文件,本项目没有用到 └── views.py:视图文件,这里编写了所有页面对应的后端视图,后端代码的处理都在这个地方 Userinfo:用户应用程序目录,这里实现了所有用户相关页面及其功能 **__pycache__**:缓存文件夹,不用在意 migrations:迁移数据文件夹,用于将建好的模型迁移至数据库,使数据库创建相应table templates:页面目录,所有用户相关html文件都在这里 registration logged_out.html:登出页面 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,也适用于小白学习入门进阶。当然也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机毕业设计木哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值