完成的资源项目位于资源中:链接地址:开发时间:2022/5/23

资源名称写错了,内容就是图书馆座位预约系统(Django框架)
图书管理系统,PythonwebDjango-Python文档类资源-CSDN下载3系统功能设计3.1登录,注册(增查)该功能的的设计和实现主要是基于数据库的增查实现的,注册更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_47112287/85441921?spm=1001.2014.3001.5501

1 前言

图书馆预约系统是为了缓解高校图书馆座位紧缺,为大学生提供及时的座位供其使用。本系统可以实现用户座位预约,管理员可以对在用户的预约信息进行管理,查询用户的预约记录,用户可以自行注册,也可对密码进行更改。

2 系统分析

在本系统中用户需先自行注册,拥有用户名,然后以用户名和密码登录系统,自行选择预约时段和座位进行预约。一个座位在一个预约时段只允许一个用户对其进行预约,该用户预约后即对该座位进行锁定,座位信息后方显示“不可预约”。

管理员可查看用户的预约信息对其进行管理,用户也可自行登录查看预约记录或取消预约,在离开时进行签离。

3 系统功能设计

3.1登录,注册(增查)

该功能的的设计和实现主要是基于数据库的增查实现的,注册时获取用户输入的相关信息,对于提交的信息作出相关的逻辑验证(1.账户是否存在2.两次密码是否非空且一致3.其他)若符合相关的条件限制,写入到数据库用户表的相关信息中;登录时获取用户输入的相关的信息,对于提交的信息做出相关的业务逻辑验证(1.用户账号是否存在2.账户密码是否一致3.其他)若符合相关的条件限制,跳转页面,不符合相关的业务逻辑设计,返回错误信息;

3.2用户管理(增删改查)

该功能主要是基于数据库的增删改查实现的,当用户的相关操作,符合相关的业务逻辑设计的情况之下,可以对数据库的用户表实现增删改查的操作,实现相关的业务;

3.3座位管理(增删改查)

该功能主要是基于数据库的增删改查实现的,当用户的相关操作,符合相关的业务逻辑设计的时候,可以对数据库的座位表实现增删改查的操作,实现相关的业务;

3.4座位预约(查改)

该功能是基于数据库信息的改查操作实现的:

1.将座位ID更新到用户表中

2.更新座位表中的座位状态

3.查询用户表中的座位的ID,根据ID查询座位表,将相关信息展示到个人页面

由此即可完成预约操作,取消预约操作与此一致:

1.将用户的座位ID置为默认值

2.更新座位表中的座位状态

3.5个人信息(查改)

该操作主要基于数据库的改查操作实现的,查询用户表中的座位的ID,根据ID查询座位表,将相关信息展示到个人页面,完成个人信息的展示;充值功能则是获取用户输入的信息,当用户提交的信息符合相关的业务逻辑(1.信息非空2.金额>=0),根据当前用户的账号,查询对应余额,并在此基础上更新余额为账号余额+充值余额,完成账户余额充值的操作;

3.6其他(中间件、轮播图)

中间件:利用条件判断,判断相关路径,其符合预定的业务逻辑的时候,进行相关的页面跳转操作;

轮播图:主要是基于js和css技术现实的;

4 关键技术

我们的系统具有一定的框架性,因此对关键技术的复用性较高,用到关键技术的模块主要包括注册登录、用户的增删改查、座位的增删改查、座位预约以及个人信息。

4.1注册登录模块

首先当数据库中未保存信息时需要进行注册,注册时要输入两次密码,如果前后不一致时则报错;账号不能重复,如果重复则报错,涉及到对数据库的增加操作。相关代码如下:

def register(request):if request.method=="GET":form = RegisterForm()return render(request,"register.html",{"form":form})form = RegisterForm(data=request.POST)if form.is_valid():account=request.POST.get("account")password=request.POST.get("password")password2=request.POST.get("password2")print(password)print(password2)wo=user.objects.filter(account=account).first()if not wo:if password2==password:passowrd3=md5(password2)         user.objects.create(account=account,password=passowrd3,money=0,seat=0,registime="1999-09-09")return render(request, "registrationSuccess.html")form.add_error("password2","密码不一致")form.add_error("password","密码不一致")return render(request, "register.html", {"form": form})form.add_error("account","账号已经存在")return render(request, "register.html", {"form": form})return render(request, "register.html", {"form": form})

用户名密码需要与数据库中的信息进行匹配验证,如果不一致则报错,如果一致则进行图片验证码的验证,验证通过则可以登录跳转到下一个界面。关键代码如下:

def image_code(request):# 调用pillow 生成验证码img,code = check_code()print(code)# 把验证码字符串存到session中,便于登录验证request.session["image_code"] = code# session超时60秒request.session.set_expiry(60)stream = BytesIO()img.save(stream, 'png')return HttpResponse(stream.getvalue())def login(request):if request.method=="GET":form = LoginForm()return render(request,"login.html",{"form":form})form = LoginForm(data=request.POST)if form.is_valid():#       print(form.cleaned_data)code = form.cleaned_data.pop("code")image_code = request.session.get("image_code","")if code.upper() != image_code.upper():form.add_error("code","验证码错误")return render(request, "login.html", {"form": form})# 使错误回显admin_obj = models.user.objects.filter(**form.cleaned_data).first()if not admin_obj:form.add_error("password","用户名或密码错误")return render(request,"login.html",{"form":form})# 用户名和密码正确# 网站随机生成字符串写到浏览器,再写到session。保存到数据库中的表中request.session["name"]=admin_obj.accountprint(admin_obj.account)print("****************************************")request.session["info"]={"id":admin_obj.id,"name":admin_obj.account}#在重新设置session超时时间为7天request.session.set_expiry(60 * 60 * 24 * 7)return redirect("/index")return render(request, "login.html", {"form": form})

4.2增删改查模块

对增删改查技术我们进行了复用,主要包括对注册用户的增删改查以及对图书馆座位的增删改查,这里我们以图书馆座位为例,进行技术代码展示。

在座位预约界面进行座位信息的总体展示,主要为查询数据库中的信息,由于数据信息较多因此我们使用了分页技术与查询技术,用户可以通过查询书库代号来选择座位。相关代码如下:

#座位管理def seat_list(request):#拿到搜索的值 如果没有设置为空data_dict = {}search_data = request.GET.get("q","")if search_data:data_dict["kind__contains"] = search_data  #kind__contains,按照kind进行检索pagenum = int(request.GET.get("page", 1))pagesize = 10  # 每页显示10条数据start_count = (pagenum - 1) * pagesizeend_count = pagenum * pagesize# order_byseat_data = seatReservation.objects.all().filter(**data_dict).order_by("floor")seat_data = seat_data[start_count:end_count]#数据总条数total_count = seatReservation.objects.all().filter(**data_dict).order_by("floor").count()# 总页码计算 c(商),d(余数) = divmod(a,b)total_page, div = divmod(total_count, pagesize)if div:total_page += 1# 计算前5页和后5页plus = 5# 设置不要出现负值if total_page <= 2 * plus + 1:# 当数据库记录小于11start_page = 1end_page = total_pageelse:# 大于11,数据库数据较多if pagenum <= plus:# 不能有负值start_page = 1end_page = 2 * plus + 1else:# 设置不要超出总页码if (pagenum + plus) > total_page:start_page = pagenum - 2 * plusend_page = total_pageelse:start_page = pagenum - plusend_page = pagenum + pluspage_str_list = []page_str_list.append(' <li><a href="?page={}">首页</a></li>'.format(1))# 上一页if pagenum > 1:page_str_list.append(' <li><a href="?page={}">上一页</a></li>'.format(pagenum - 1))else:page_str_list.append(' <li><a href="?page={}">上一页</a></li>'.format(1))#range()左闭右开for i in range(start_page, end_page + 1):# ele='<li ><a href="?page={}">{}</a></li>'.format(i,i)if i == pagenum:ele = '<li class="active"><a href="?page={}">{}</a></li>'.format(i, i)else:ele = '<li><a href="?page={}">{}</a></li>'.format(i, i)page_str_list.append(ele)# 下一页if pagenum < total_page:page_str_list.append(' <li><a href="?page={}">下一页</a></li>'.format(pagenum + 1))else:page_str_list.append(' <li><a href="?page={}">下一页</a></li>'.format(total_page))# 尾页page_str_list.append(' <li><a href="?page={}">尾页</a></li>'.format(total_page))page_string = mark_safe("".join(page_str_list))return render(request, "seat_list.html", {"seat_data": seat_data, "search_data": search_data, "page_string": page_string})

图书馆管理员可以对座位进行增加、修改座位信息、删除座位这三项操作,主要是对数据库信息的修改。相关代码如下:

def seat_add(request):if request.method == "GET":form = seatModleForm()return render(request, "seat_add.html", {"form":form})elif request.method == "POST":#用户post请求提交数据,数据校验form = seatModleForm(request.POST)if form.is_valid():  #判断是否合法form.save()return redirect("/seat/list")#校验失败return render(request, "seat_list.html", {"form":form})#用ModelForm实现class seatModleForm(forms.ModelForm):number = forms.CharField(max_length=2, label="座位号")class Meta:model = seatReservationfields = "__all__"def seat_edit(request,nid):row_data = seatReservation.objects.filter(id=nid).first()if request.method == "GET":form = seatModleForm(instance=row_data)return render(request, "seat_edit.html", {"form": form})elif request.method == "POST":#用户post请求提交数据,数据校验form = seatModleForm(data=request.POST, instance=row_data)if form.is_valid():  #判断是否合法form.save()return redirect('/seat/list')#校验失败return render(request, "seat_edit.html", {"form": form})def seat_delete(request,nid):seatReservation.objects.filter(id=nid).delete()return redirect("/seat/list")

4.3座位预约模块

用户通过点击座位预约按钮来预约座位,我们通过捕获座位的ID值来收到被预约座位的信息,从数据库中抓取相关信息并显示在相关界面上,同时对座位状态更改为“已占用”、“预约”按钮更改为“不可预约”、扣除用户余额。用户可以选择取消预约,则再次更改数据库状态,释放座位。相关代码如下:

def my_reserve(request,nid):row_data = seatReservation.objects.filter(id=nid).first()user1 = request.session.get("name")user_data=user.objects.filter(account=user1).first()user.objects.filter(account=user1).update(seat=nid)  #更新数据库用户座位信息user.objects.filter(account=user1).update(money=user_data.money-5)  #更新数据库用户余额信息seatReservation.objects.filter(id=nid).update(state=1)  #更新数据库座位状态为已占用return render(request, "my_reserve.html", {"row_data": row_data})
def reserve(request):user1 = request.session.get("name")print(user1)user_data=user.objects.filter(account=user1).first()print(user_data.seat)if user_data.seat == "0":suhao=0return render(request, "my_reserve.html", {"sunhao": suhao})print(user_data)seat_data = seatReservation.objects.filter(id=user_data.seat).first()return render(request, "my_reserve.html", {"row_data": seat_data})

4.4个人信息模块

用户点击“个人信息”后可以在一个界面上显示信息,并可以对自己的账户进行充值操作。用户输入一定的金额,点击充值按钮,账户余额自动增加,主要涉及到了数据库更新与类型转换的技术。相关代码如下:

class userform1(forms.ModelForm):class Meta:model=models.userfields=["account","money","seat","registime"]class recharge(forms.Form):# 此处可以规定文本框的内容moneyC = forms.DecimalField(label="充值金额", widget=forms.NumberInput(attrs={"class":"form-control"}))def personalInformation(request):user1 = request.session.get("name")user_money = user.objects.filter(account=user1).first()if request.method=="POST":# 用户post请求提交数据,数据校验#form3 = recharge(data=request.POST)form3 = request.POST.get("moneyC")print(user_money.money)print("11111111111111111111111")print(Decimal(form3))user.objects.filter(account=user1).update(money=user_money.money + Decimal(form3))return redirect("/personal/information")user_data = user.objects.filter(account=user1).first()form = userform1()form2 = recharge()return render(request, "personal_information.html", {'form': form, 'data': user_data, "form2": form2})

5 测试

5.1系统安全测试

系统为安全保密,运行系统需要管理员登录系统身份验证,口令修改权限为管理员本身。系统按操作权限分为管理员、用户俩个等级,进入必须进行身份验证。

5.2 功能测试

在这个图书馆的座位预约系统中我们小组实现了登录注册、注册用户的增删改查以及对图书馆座位的增删改查、座位预约和个人信息模块中的充值功能。

5.2.1 注册登录模块

首先当数据库中未保存信息时需要进行注册,注册时要输入两次密码,如果前后不一致时则报错;账号不能重复,如果重复则报错,实现效果如图5-2-1注册登录

图5-2-1注册登录

5.2.2 增删改查模块

增删改查中主要包括对注册用户的增删改查以及对图书馆座位的增删改查,这里我们以图书馆座位为例,在座位预约界面进行座位信息的总体展示,用户可以通过查询书库代号来选择座位。实现效果如图5-2-2座位添加

图5-2-2座位添加

5.2.3 座位预约模块

用户通过点击座位预约按钮来预约座位,我们通过捕获座位的ID值来收到被预约座位的信息,同时对座位状态更改为“已占用”、“预约”按钮更改为“不可预约”。实现效果如图5-2-3座位预约

图5-2-3座位预约

5.2.4 个人信息模块

用户点击“个人信息”后可以在一个界面上显示信息,并可以对自己的账户进行充值操作。用户输入一定的金额,点击充值按钮,账户余额自动增加,实现效果如图5-2-4余额充值。

图5-2-4余额充值

6 结论

近年来,随着大学生数量逐渐增多学生的就业压力越来越大,越来越多的学生选择在课余时间去图书馆补充自己的专业知识,以提高自己的竞争力。图书馆在配合学校的教学工作的情况下,面临着很多的困难,其中很重要的一方面就是图书馆学生占座乱问题,不方便图书馆工作人员进行管理。所以我们组这次做的是一个图书馆的作为预约系统,我们对于这个系统是比较熟悉的,我们小组实现了登录注册、注册用户的增删改查以及对图书馆座位的增删改查、座位预约和个人信息模块中的充值功能,在这次课程设计中我们也遇到了各种各样的问题,最终通过上网查询和同学探讨完成。我们也发现对于许多知识,我们并没有完全掌握,还是存在知识上的漏洞。在今后的学习中,我们也会要不断提高自身的能力,不仅仅局限于课本上的知识,还要综合运用到实践中。

图书馆座位预约系统(Django框架)相关推荐

  1. 基于python下django框架 实现校园教室图书馆座位预约系统详细设计

    前言介绍(开发目的和意义) 本课题主要目标是设计并能够实现一个基于web网页的教室图书馆座位预约系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管 ...

  2. python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(4)开题报告

    python教室图书馆座位预约 django教室图书馆座位预约 python毕业设计作品成品 django毕业设计作品成品 整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + ...

  3. 图书馆座位预约系统,图书馆座位管理系统,图书馆座位预约毕业设计

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的教室图书馆座位预约系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息 ...

  4. 软件工程毕业设计课题(15)基于python的毕业设计python教室图书馆座位预约系统毕设作品源码

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的教室图书馆座位预约系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息 ...

  5. 计算机毕业设计(15)python毕设作品之校园教室图书馆座位预约系统

    项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的教室图书馆座位预约系统,整个网站项目使用了B/S架构,基于python的Django框架下开发:管理员通过后台录入信息.管理信息 ...

  6. 图书馆座位预约系统管理/基于微信小程序的图书馆座位预约系统

    随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受学生的喜爱,图书馆座位预约系统被学生普遍使用,为方便学生能够可以随 ...

  7. 【计算机毕业设计】基于微信小程序的图书馆座位预约系统

    毕设帮助.源码交流及技术指导,见文末. 图书馆作为高校的学习宝地,有着不可替代的地位.但是在信息化时代,传统模式下的图书馆管理并不能满足用户需求.为解决图书馆学生占座问题严重.座位资源紧张的问题,设计 ...

  8. 基于微信小程序的图书馆座位预约系统的设计与实现

    1. 系统开发背景 图书馆因有良好的学习氛围.大量的学习资源吸引大家前来学习,图书馆还未开馆就有大量的同学在门口排队等待,有限的座位与日益增加的自主学习者之间形成了供不应求的现象,再加上不了解图书馆的 ...

  9. 基于Java毕业设计疫情状态下的图书馆座位预约系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计疫情状态下的图书馆座位预约系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计疫情状态下的图书馆座位预约系统源码+系统+mysql+lw文档+部署软件 本源码技术栈 ...

最新文章

  1. 检测用户命令序列异常——使用LSTM分类算法【使用朴素贝叶斯,类似垃圾邮件分类的做法也可以,将命令序列看成是垃圾邮件】...
  2. call、apply、bind
  3. optparse接受带空格的参数值时,需要加双引号
  4. SAP CRM商机页面上赢单原因的字段是怎么配出来的
  5. Solr+Hbase多条件查(优劣互补)
  6. e-mobile帐号状态存在异常_一文掌握异常检测的实用方法 | 技术实践
  7. 如何让程序异常退出后重启
  8. POJ3619 Speed Reading【水题】
  9. 阿里云祝顺民:未来的网络是云网一体,应用感知不到网络的存在
  10. 【线上课程】4节课8小时培训,《白话区块链》作者蒋勇教你快速掌握区块链智能合约开发...
  11. 注意力缺陷障碍可以通过​训练大脑来管理
  12. java vscode跳转类定义_快速使用 vscode 进行 Java 编程
  13. javascript 代码转换为 typescript 代码
  14. Assigning Workstations
  15. 微观经济学--第4章 供给与需求的市场力量
  16. IOS-内存泄漏检测工具Instruments中的Leaks
  17. 小白入门Git详细教程
  18. #4306. 贪玩蓝月
  19. 微信小程序1.1.3
  20. 使用python下载网站漫画

热门文章

  1. 安卓手机反应慢又卡怎么办_手机变卡怎么办?简单一招叫教你解决!
  2. 怎样找回相册里删除的照片呢?
  3. java计算机毕业设计ssm智慧餐厅点餐管理系统(源码+系统+mysql数据库+Lw文档)
  4. 自动|unswap|夹子机器人|部署
  5. python实时播放音频和录音_基于python的实时音频信号处理
  6. rpm安装软件时提示warning::Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
  7. 挖掘机哪家强?不找蓝翔找AI!
  8. Speedoffice(word)里面怎样输入空白下划线
  9. 苹果手机充电口接触不良怎么办_成都iPhone手机充电口接触不良怎么办
  10. word使用mathtype后改变行距的解决方法