当前位置:   article > 正文

基于Python的校园影院系统 影院订票选座系统django框架 前后端分离【Python毕业设计.课程设计·文档报告·代码讲解·安装调试】

基于Python的校园影院系统 影院订票选座系统django框架 前后端分离【Python毕业设计.课程设计·文档报告·代码讲解·安装调试】

博主介绍:⚡全栈开发工程师,精通Web前后端技术、数据库、架构设计。专注于Java、Python、机器学习、大数据、爬虫等技术领域和小程序领域的开发,毕业设计课程设计项目中主要包括定制化开发、源代码、代码讲解、文档报告辅导、安装调试等

✅文末获取联系✅

目录

1 项目介绍 

2 技术选型 

3 功能需求分析 

4 系统总体设计 

5 项目效果图

6 代码实现  

7 总结  

8 源码获取或咨询 

1 项目介绍 

随着社会的不断进步与发展,人们对生活质量要求逐步提升。如果开发一款柚子校园影院,可以让管理员和用户在最短的时间里享受到最好的服务;而开发本系统,又能够提高系统整体工作水平,简化工作程序,这对管理员和用户来说都是一件非常乐意的事情。

本论文针对柚子校园影院的特点,以Python为核心,以MySQL为数据库,B/S为系统构架,对柚子校园影院进行设计和开发。通过使用本系统可有效地减少运营成本,提高管理效率。

柚子校园影院主要分为用户管理和管理员管理。

用户可以查看到首页,进行登录注册,查询影院信息,查询电影信息并进行选座预订,公告信息等功能进行操作。

管理员主要功能为首页,个人中心,用户管理,影院信息管理,电影类型管理,电影信息管理,系统管理,订单管理等功能。

2 技术选型 

此系统基于Python平台,采用B/S架构模式,使用技术有Python+Django+Vue、爬虫等,数据库使用的是MySQL,采用Maven构建工具,可使用开发软件有 PyCharm/navicat/vscode,都能够正常运行。 

3 功能需求分析 

(1)管理员用例分析图

(2)用户用例分析图

4 系统总体设计 

4.1系统功能模块设计 

 4.2 数据库概念结构设计

 (1)用户信息实体属性图

 (2)电影信息评论实体属性图

(3)影院信息实体属性图

 (4)公告信息实体属性图

(5)订单实体属性图 

3.3 数据库逻辑结构设计  

 表3.1收藏表

表3.2订单表

表3.3公告信息表

表3.4电影信息评论表

表3.5电影信息表

表3.6电影类型表

表3.7影院信息表 

表3.8用户表   

 5 项目效果图

(1)用户注册界面

​ (2)系统首页

 (3)影院信息界面

 (4)影院详情界面

 (5)电影信息界面

 (6)电影信息详情界面

 (7)确认下单界面

 (8)我的订单界面

 (9)用户管理界面

 (10)影院信息管理界面

 (11)电影类型管理界面

(12)电影信息管理界面 

(13)公告信息管理界面  

6 代码实现  

  1. #coding:utf-8
  2. __author__ = "计算机编程吧"
  3. import base64, copy, logging, os, sys, time, xlrd, json, datetime
  4. from django.http import JsonResponse
  5. from django.apps import apps
  6. from django.db.models.aggregates import Count,Sum
  7. from .models import dianyingleixing
  8. from util.codes import *
  9. from util.auth import Auth
  10. from util.common import Common
  11. import util.message as mes
  12. from django.db import connection
  13. import random
  14. from django.core.mail import send_mail
  15. from django.conf import settings
  16. from django.shortcuts import redirect
  17. from django.db.models import Q
  18. from util.baidubce_api import BaiDuBce
  19. from .config_model import config
  20. def dianyingleixing_register(request):
  21. if request.method in ["POST", "GET"]:
  22. msg = {'code': normal_code, "msg": mes.normal_code}
  23. req_dict = request.session.get("req_dict")
  24. error = dianyingleixing.createbyreq(dianyingleixing, dianyingleixing, req_dict)
  25. if error != None:
  26. msg['code'] = crud_error_code
  27. msg['msg'] = "用户已存在,请勿重复注册!"
  28. return JsonResponse(msg)
  29. def dianyingleixing_login(request):
  30. if request.method in ["POST", "GET"]:
  31. msg = {'code': normal_code, "msg": mes.normal_code}
  32. req_dict = request.session.get("req_dict")
  33. datas = dianyingleixing.getbyparams(dianyingleixing, dianyingleixing, req_dict)
  34. if not datas:
  35. msg['code'] = password_error_code
  36. msg['msg'] = mes.password_error_code
  37. return JsonResponse(msg)
  38. try:
  39. __sfsh__= dianyingleixing.__sfsh__
  40. except:
  41. __sfsh__=None
  42. if __sfsh__=='是':
  43. if datas[0].get('sfsh')!='是':
  44. msg['code']=other_code
  45. msg['msg'] = "账号已锁定,请联系管理员审核!"
  46. return JsonResponse(msg)
  47. req_dict['id'] = datas[0].get('id')
  48. return Auth.authenticate(Auth, dianyingleixing, req_dict)
  49. def dianyingleixing_logout(request):
  50. if request.method in ["POST", "GET"]:
  51. msg = {
  52. "msg": "登出成功",
  53. "code": 0
  54. }
  55. return JsonResponse(msg)
  56. def dianyingleixing_resetPass(request):
  57. '''
  58. '''
  59. if request.method in ["POST", "GET"]:
  60. msg = {"code": normal_code, "msg": mes.normal_code}
  61. req_dict = request.session.get("req_dict")
  62. columns= dianyingleixing.getallcolumn( dianyingleixing, dianyingleixing)
  63. try:
  64. __loginUserColumn__= dianyingleixing.__loginUserColumn__
  65. except:
  66. __loginUserColumn__=None
  67. username=req_dict.get(list(req_dict.keys())[0])
  68. if __loginUserColumn__:
  69. username_str=__loginUserColumn__
  70. else:
  71. username_str=username
  72. if 'mima' in columns:
  73. password_str='mima'
  74. else:
  75. password_str='password'
  76. init_pwd = '123456'
  77. recordsParam = {}
  78. recordsParam[username_str] = req_dict.get("username")
  79. records=dianyingleixing.getbyparams(dianyingleixing, dianyingleixing, recordsParam)
  80. if len(records)<1:
  81. msg['code'] = 400
  82. msg['msg'] = '用户不存在'
  83. return JsonResponse(msg)
  84. eval('''dianyingleixing.objects.filter({}='{}').update({}='{}')'''.format(username_str,username,password_str,init_pwd))
  85. return JsonResponse(msg)
  86. def dianyingleixing_session(request):
  87. '''
  88. '''
  89. if request.method in ["POST", "GET"]:
  90. msg = {"code": normal_code,"msg": mes.normal_code, "data": {}}
  91. req_dict={"id":request.session.get('params').get("id")}
  92. msg['data'] = dianyingleixing.getbyparams(dianyingleixing, dianyingleixing, req_dict)[0]
  93. return JsonResponse(msg)
  94. def dianyingleixing_default(request):
  95. if request.method in ["POST", "GET"]:
  96. msg = {"code": normal_code,"msg": mes.normal_code, "data": {}}
  97. req_dict = request.session.get("req_dict")
  98. req_dict.update({"isdefault":"是"})
  99. data=dianyingleixing.getbyparams(dianyingleixing, dianyingleixing, req_dict)
  100. if len(data)>0:
  101. msg['data'] = data[0]
  102. else:
  103. msg['data'] = {}
  104. return JsonResponse(msg)
  105. def dianyingleixing_page(request):
  106. '''
  107. '''
  108. if request.method in ["POST", "GET"]:
  109. msg = {"code": normal_code, "msg": mes.normal_code, "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}
  110. req_dict = request.session.get("req_dict")
  111. #获取全部列名
  112. columns= dianyingleixing.getallcolumn( dianyingleixing, dianyingleixing)
  113. #当前登录用户所在表
  114. tablename = request.session.get("tablename")
  115. #authColumn=list(__authTables__.keys())[0]
  116. #authTable=__authTables__.get(authColumn)
  117. # if authTable==tablename:
  118. #params = request.session.get("params")
  119. #req_dict[authColumn]=params.get(authColumn)
  120. '''__authSeparate__此属性为真,params添加userid,后台只查询个人数据'''
  121. try:
  122. __authSeparate__=dianyingleixing.__authSeparate__
  123. except:
  124. __authSeparate__=None
  125. if __authSeparate__=="是":
  126. tablename=request.session.get("tablename")
  127. if tablename!="users" and 'userid' in columns:
  128. try:
  129. req_dict['userid']=request.session.get("params").get("id")
  130. except:
  131. pass
  132. #当项目属性hasMessage为”是”,生成系统自动生成留言板的表messages,同时该表的表属性hasMessage也被设置为”是”,字段包括userid(用户id),username(用户名),content(留言内容),reply(回复)
  133. #接口page需要区分权限,普通用户查看自己的留言和回复记录,管理员查看所有的留言和回复记录
  134. try:
  135. __hasMessage__=dianyingleixing.__hasMessage__
  136. except:
  137. __hasMessage__=None
  138. if __hasMessage__=="是":
  139. tablename=request.session.get("tablename")
  140. if tablename!="users":
  141. req_dict["userid"]=request.session.get("params").get("id")
  142. # 判断当前表的表属性isAdmin,为真则是管理员表
  143. # 当表属性isAdmin=”是”,刷出来的用户表也是管理员,即page和list可以查看所有人的考试记录(同时应用于其他表)
  144. __isAdmin__ = None
  145. allModels = apps.get_app_config('main').get_models()
  146. for m in allModels:
  147. if m.__tablename__==tablename:
  148. try:
  149. __isAdmin__ = m.__isAdmin__
  150. except:
  151. __isAdmin__ = None
  152. break
  153. # 当前表也是有管理员权限的表
  154. if __isAdmin__ == "是" and 'dianyingleixing' != 'forum':
  155. if req_dict.get("userid") and 'dianyingleixing' != 'chat':
  156. del req_dict["userid"]
  157. else:
  158. #非管理员权限的表,判断当前表字段名是否有userid
  159. if tablename!="users" and 'dianyingleixing'[:7]!='discuss'and "userid" in dianyingleixing.getallcolumn(dianyingleixing,dianyingleixing):
  160. req_dict["userid"] = request.session.get("params").get("id")
  161. #当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的
  162. try:
  163. __authTables__=dianyingleixing.__authTables__
  164. except:
  165. __authTables__=None
  166. if __authTables__!=None and __authTables__!={}:
  167. try:
  168. del req_dict['userid']
  169. # tablename=request.session.get("tablename")
  170. # if tablename=="users":
  171. # del req_dict['userid']
  172. except:
  173. pass
  174. for authColumn,authTable in __authTables__.items():
  175. if authTable==tablename:
  176. params = request.session.get("params")
  177. req_dict[authColumn]=params.get(authColumn)
  178. username=params.get(authColumn)
  179. break
  180. q = Q()
  181. msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \
  182. msg['data']['pageSize'] =dianyingleixing.page(dianyingleixing, dianyingleixing, req_dict, request, q)
  183. return JsonResponse(msg)
  184. def dianyingleixing_autoSort(request):
  185. '''
  186. .智能推荐功能(表属性:[intelRecom(是/否)],新增clicktime[前端不显示该字段]字段(调用info/detail接口的时候更新),按clicktime排序查询)
  187. 主要信息列表(如商品列表,新闻列表)中使用,显示最近点击的或最新添加的5条记录就行
  188. '''
  189. if request.method in ["POST", "GET"]:
  190. msg = {"code": normal_code, "msg": mes.normal_code, "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}
  191. req_dict = request.session.get("req_dict")
  192. if "clicknum" in dianyingleixing.getallcolumn(dianyingleixing,dianyingleixing):
  193. req_dict['sort']='clicknum'
  194. elif "browseduration" in dianyingleixing.getallcolumn(dianyingleixing,dianyingleixing):
  195. req_dict['sort']='browseduration'
  196. else:
  197. req_dict['sort']='clicktime'
  198. req_dict['order']='desc'
  199. msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \
  200. msg['data']['pageSize'] = dianyingleixing.page(dianyingleixing,dianyingleixing, req_dict)
  201. return JsonResponse(msg)
  202. }

7 总结  

基于Hadoop的物品租赁系统在经过系统的开发后,已经成功完成搭建。在搭建过程中,最开始的工作是从查阅相关资料开始的,通过在互联网的物品租赁系统资料查询和阅读,对整个物品租赁系统有了整体的概念了解,然后对本物品租赁系统进行分析设计,本次物品租赁系统的诉求是实现用户的基本需求,所以在设计时,整个系统功能模块十分简洁,系统为管理员和用户两大模块。在系统具体实现过程中,先把系统数据库搭建,然后进行功能模块的代码编译,最后将所有模块进行整合,形成完整的物品租赁系统。最后对系统进行了测试,测试结果符合预期。

系统仍然存在很多不足,各环节的流程没有做到非常精密的联系,逻辑上还有漏洞。从这些问题中吸取经验教训积累宝贵。 

8 源码获取或咨询 

 关注公众号:计算机编程吧

关注后 会不定时更新学习资源,发放福利哟!

 感谢大家能够积极点赞、收藏、关注、评论哦 ,更多推荐:计算机毕业设计

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/1021752
推荐阅读
相关标签