学生公寓管理系统-python+Django+Mysql(附视图代码)
一、系统开发平台............................................................................................................ 3
二、数据库规划............................................................................................................... 4
2.1 任务陈述............................................................................................................ 4
2.2 任务目标............................................................................................................ 4
三、系统定义................................................................................................................... 6
3.1 系统边界............................................................................................................ 6
3.2 用户视图............................................................................................................ 8
四、需求分析................................................................................................................... 9
4.1 用户需求说明................................................................................................... 10
4.1.1 数据需求............................................................................................... 10
4.1.2 事务需求............................................................................................... 10
4.2 系统需求说明................................................................................................... 12
五、数据库逻辑设计...................................................................................................... 13
5.1 ER图:............................................................................................................. 13
5.2 数据字典........................................................................................................... 14
六、数据库物理设计...................................................................................................... 16
6.1 索引.................................................................................................................. 16
6.2 安全机制.......................................................................................................... 17
七、应用程序设计.......................................................................................................... 17
7.1 功能模块.......................................................................................................... 17
7.2 界面设计.......................................................................................................... 19
7.3 事务设计........................................................................................................... 77
八、测试和运行............................................................................................................ 114
九、总结...................................................................................................................... 171
9.1 系统优点......................................................................................................... 171
9.2 系统不足......................................................................................................... 172
9.3 系统改进......................................................................................................... 172
9.4 经验与收获...................................................................................................... 172
附. 参考文献............................................................................................................... 172
前言
随着我校逐级扩招,学生越来越多,学生公寓楼房越来越多,宿管人员越来越多。随着高校后勤社会化改革,学生住宿条件得到了很大改善,宿舍内的贵重设施、电器等越来越多,宿舍安排上打破了原来按专业班级强制集中住宿的限制,可供学生选择的余地也越来越大;同学们可以根据自己的合理要求申请调换宿舍,同时,由于学生越来越多,学生宿舍也越来越多,宿舍内硬件出现的故障也自然会增多。至今为止,某某大学故障报修仍为仍共笔录上报,不仅物业得知学生需求的速度慢,甚至有时还会出现物业错漏报修的问题,导致学生的住宿体验变差。对于学生人际交往逐渐增多,学生之间在没有联系方式的情况下想要知道一个同学在哪一个宿舍只能通过打听等不准确不确切的方式获得,十分的不便。对于班内同学逐个分发物品时,也必须知道班内的每一个同学所在宿舍号,因此,对于班内同学的宿舍情况也是一项需求。且某某大学宿管查宿舍卫生也只是纸面记录,且学生们根本不知道宿舍的卫生检查情况,所以对于这一方面也有疏漏。宿舍同学们作息习惯的不同,很可能导致影响其他同学的休息,由于不好意思开口,挂在‘表白墙’又很难达到效果且有暴露其他宿舍的隐私和损坏名誉问题,所以对于同学们对于其他宿舍的意见反馈也是一件需求。
一、系统开发平台
本项目开发的学生公寓管理系统采用B-S架构,使用基于phthon的技术开发路线,使用Django后端开发MVT框架,连接起数据库与前端,实现交互。
用python更加易于使用和阅读,并且python丰富的包十分便于开发;python的编程方法也更少限制,丰富成熟的基于python的后端开发框架也更便于我们使用开发。
1.3 开发工具:Navicat for Mysql、VS2019、Pycharm
MySQL是业界领先的开源数据库,在开源产品中具有仅次于Apache服务器的市场占有率。本数据库开放源代码,具有免费使用,比较稳定的特点,适合于小型系统的持久性存储。
二、数据库规划
2.1 任务陈述
个人信息页、班级信息情况页、宿舍查询页、卫生管理页、报修系统页、投诉系统页、访问申请页、离校登记页。
个人信息页、宿舍查询页、卫生管理页、宿舍反馈页、访问审批页、故障审批页。
2.2 任务目标
模块 |
功能 |
个人信息 |
查看个人的基本信息 |
班级情况 |
班级的所有成员宿舍信息可以查看 |
宿舍查询 |
查找具体个人的宿舍信息,学号、姓名。宿管可以根据学号、姓名或者宿舍直接查询,权限比学生高 |
卫生管理 |
宿管更新检查结果,学生查看结果,学生页面留有以往的检查结果 |
投诉系统 |
匿名反馈意见给指定宿舍,指定宿舍会有记录,只能自己宿舍人员看到。宿管可以发送警告内容到指定宿舍,警告信息会特别提示。 |
报修系统 |
宿管阿姨受理报修信息。学生上报报修信息。学生会有保修信息的反馈 |
访问申请 |
学生访问非自己所在的公寓楼需要申请,对应宿舍楼的宿管需要审批。 |
离校邓丽 |
学生离校进行系统登记,对应宿舍楼的宿管可以看到自己宿舍楼学生的离校登记信息。 |
三、系统定义
3.1 系统边界
系统边界描述数据库系统和企业信息系统的其他部分的接口,是信息系统内部构成元素与外部有联系实体之间的信息关系的描述与分割。它并不需要在它们之间划一条物理边界,而只需要弄清它们之间信息输入与输出的分割。
用户范围边界:
支持学生学号登录、管理员账号登录,即只支持宿舍管理员以及学生使用。
系统功能边界
- 此系统对于学生忘记密码的操作不设置管理员管理,直接由代码层进行操作。
- 此系统不设置提醒模式,即未打开系统时不会收到消息提醒。
- 此系统不支持具体的报修流程,只负责上报与管理员已读未读的状态。
- 此系统不设置优先显示特别页面以及未读消息提醒,即每次登录都是个人信息页,新的卫生结果同之或者投诉建议也不会显示未读,只有点击之后才会看到。
3.2 用户视图
管理员用户视图
学生用户视图
四、需求分析
4.1 用户需求说明
4.1.1 数据需求
学生学号sid、学生姓名sname、学生性别sex、学生年龄age、学生班级、学生宿舍楼id、学生宿舍id、学生学院信息、学生户籍、学生身份证号、学生手机号、学生邮箱、学生专业信息
历史访问申请记录、访问人姓名、访问人学号、访问人宿舍楼id、访问人宿舍id、访问人目标宿舍楼id、访问人申请事由、访问人访问时间、管理员审批状态、宿管历史审批记录
历史报修记录、申报人姓名、申报人学号、申报人宿舍楼id、申报人宿舍id、故障信息、宿管审批状态、宿管回复信息、宿管历史审批记录
学生学号、学生姓名、宿舍楼id、宿舍号id、离校理由、离校时间、返校时间。
4.1.2 事务需求
宿管:地面整洁、厕所卫生、窗户卫生、异味杂物、厕所卫生、物品整齐分数
- 学生的联系方式更新/删除
- 学生匿名提醒信息更新
- 学生卫生成绩更新
- 学生访问申请历史记录更新
- 学生故障上报历史记录更新
- 宿管联系方式更新
- 宿管更新学生卫生考核成绩
- 宿管更新学生警告信息
- 宿管待处理访问申请信息更新/删除
- 宿管待处理故障信息更新/删除
- 学生离校登记信息更新
4.2 系统需求说明
该学生公寓管理系统需要较强的数据处理功能,理论上应该能够容纳上万人的数据资料,并且在搜索方面理应具有较快的响应速度,能够处理多方面的数据请求。系统能够有效的处理各种异常,具有较好的健壮性。
- 查看本人基本个人信息
- 查看历史访问审批表单
- 查看历史故障审批表单
- 查看学生离校登记信息表单
- 查看个人基本信息
- 查看本班级所有人员信息
- 查看本宿舍卫生历史成绩以及本次成绩信息
- 查看本宿舍受到的匿名提醒信息
- 查看申请的访问记录信息
- 查看上报的故障处理信息
- 查看历史离校登记信息
- 5个宿管账号
- 15个左右宿舍
- 15条左右卫生信息
- 10条左右故障报修、访问申请、离校登记信息
五、数据库逻辑设计
5.1 ER图:
5.2 数据字典
六、数据库物理设计
6.1 索引
表名 |
主键 |
索引 |
stu |
sid |
1、`sid` 2、`dorm_id`, `dorm_building_id` |
manager |
mid |
1、`mid` 2、`mid`, `mdorm` |
Mfback |
num |
`dorm_id`, `dorm_building_id` |
fback |
num |
`dorm_id`, `dorm_building_id` |
Score |
`dorm_id`, `dorm_building_id` |
`dorm_id`, `dorm_building_id` |
Historyscore |
num |
`dorm_building_id`, `dorm_id` |
Svisit |
num |
`target`, `ac` |
Wrong |
num |
`dorm_id`, `dorm_building_id` |
Leave |
num |
1、`sid` 2、`dorm_building_id` |
6.2 安全机制
1、学生用户的注册只有系统中有了对应的学号才能进行注册,否则会提示是否是某某大学的学生:
2、对于所有输入异常,如空白输入(未输入)、学号不满12位注册、其他功能未选择宿舍楼id、宿舍id、时间都会有相应的异常处理。
1、登陆界面输入的账号密码信息只有到了数据库内系统设计者(我)才能看到,其他所有信息也只有系统设计者才能进行无条件修改,数据不会被随意更改。
2、个人信息中学号身份证号宿舍号等不可动数据无论宿管还是学生都无条件修改,只有系统设计者才能更改,确保数据不会被学生或宿管更改而出现bug。
3、对于匿名提醒或申请访问或故障处理宿管与学生的信息处理之间确保了原子性,
七、应用程序设计
7.1 功能模块
④(学生)展示所有离校登记的信息,上报新的离校登记信息。(宿管)查看所有本宿舍楼的离校登记信息。
⑤(学生)要进行离校登记,则必须选择时间和填写理由,其中离校时间必须小于返校时间,否则登记失败,不上传数据,进行异常处理。
7.2 界面设计
- 判断登陆账户类型(学生、宿管)
- 查询数据、展示所有班级成员信息
3、查看卫生信息
① 检测登陆状态
② 检测登陆账户
- 判断登陆账户类型(学生、宿管)
- (学生)查询数据、展示所属宿舍所有历史卫生信息、当次卫生检查信息
- (宿管)选择相应的宿舍,对应分数填入,检测是否正确填入信息或分数。
- 更新对应数据库信息
- 更新页面信息
- 判断登陆账户类型(学生、宿管)
- 查询数据、展示所有收到的匿名信息
- 若对其他宿舍进行匿名投诉,检查是否正确选择宿舍号并填入提醒信息
- 更新对应数据库信息
- 更新页面信息
- 判断登陆账户类型(学生、宿管)
- (学生)查询数据、展示所有历史访问申请信息。(宿管)查询数据、展示所有历史审批记录,展示未审批记录的一条。
- (学生)若要申请访问,检测是否正确选择时间、目标宿舍楼、事由。(宿管)点击同意或者拒绝。
- 更新对应数据库信息
- 更新页面信息
6、查看更新故障报修信息
① 检测登陆状态
② 检测登陆账户
- 判断登陆账户类型(学生、宿管)
- (学生)查询数据、展示所有历史故障上报信息。(宿管)查询数据、展示所有历史审批记录,展示一个待审批信息表。
- (学生)若要上报故障信息,检测是否正确填写故障信息。(宿管)点击选择回复,检查是否正确填写。
- 更新对应数据库信息
- 更新页面信息
- 判断登陆账户类型(学生、宿管)
- 用户若首次入学没有账号,则可以使用自己的学号对应注册;管理员会已经分
配账号。用户在登录界面输入用户名和密码,经过系统验证后会根据账号类型进入学生或管理员界面。
学生注册
.
学生账号
管理员账号
7.2.2 登陆后的页面操作:
默认首先显示个人信息页面:
宿管页面:
学生页面:
7.2.3宿舍查询页面
下面是学生的宿舍查询页面,比宿管要缺少一项按照宿舍号查询的权限
下面是宿管的查询页面,权限高于学生,有三项查询方式:
7.2.4 学生专属的班级信息查询:
显示男女人数、显示班级总人数、展示所有班级成员信息
7.2.5 卫生信息页面
学生页面:
宿管页面,可以选择宿舍号进行打分
7.2.6 宿舍反馈(警告)
宿管页面,可以向指定宿舍发送警告内容,可选择的宿舍号已经过滤到所管理的宿舍楼
学生页面:可查看收到的私信以及宿管的警告,可匿名向指定宿舍发送提醒私信,可选择的宿舍号已经过滤到所住的宿舍楼
7.2.7访问申请、审批:
学生页面,可进行审批,查看历史申请及通过状态
宿管页面,展示需要处理的审批单和已经审批过的审批单
7.2.8 宿舍故障上报、审批
学生页面,可进行审批,查看历史申请及通过状态
宿管页面,展示需要处理的审批单和已经审批过的审批单
7.2.8 离校登记
学生页面:登记离校信息、展示历史登记信息
宿管页面:查看本宿舍楼的离校登记信息
7.2.9 退出登录
返回登录页面
7.3 事务设计
该系统中,稍微复杂的查询利用sql进行raw查询,其他简单的增删改查利用filter和.save以及.delete完成。
7.3.1 登录注册事务
有关于登录注册时的查询判断增删如下:
def to_login(request):
num = Logininfo.objects.filter().count()
if num >= 1:
u = Logininfo.objects.filter()
u.delete()
return render(request, 'login.html')
def to_reg(request):
return render(request, 'register.html')
def judge_login(request):
u = request.POST.get("user", '')
p = request.POST.get("pwd", '')
msg = "请正确输入账号密码"
if u and p:
c = Stu_Idpwd.objects.filter(sid=u, password=p).count()
if c >= 1:
state = Logininfo(id=u, password=p)
state.save()
if len(u) < 12:
c = Logininfo.objects.filter().count()
if c >= 1:
u = Logininfo.objects.get()
infodb = Manager.objects.get(mid=u.id)
else:
msg = "请先登录!"
return render(request, 'login.html', locals())
return render(request, 'manageinfo.html', locals())
infodb = Stu.objects.get(sid=u)
return render(request, 'info.html', locals())
else:
msg = "账号或密码错误!"
return render(request, 'login.html', locals())
else:
return render(request, 'login.html', locals())
def judge_reg(request):
u = request.GET.get("user", '')
p = request.GET.get("pwd", '')
msg = ""
if u and p:
c = Stu_Idpwd.objects.filter(sid=u).count()
if c >= 1:
msg = "账号已存在,如忘记密码,请联系系统管理员"
return render(request, 'register.html', locals())
else:
cc = Stu.objects.filter(sid=u).count()
if cc >= 1:
msg = "注册成功"
newaccount = Stu_Idpwd(sid=u, password=p)
newaccount.save()
return render(request, 'login.html', locals())
else:
msg = "系统没有您的学号,请确认您是否是山大学生"
return render(request, 'register.html', locals())
else:
return render(request, 'register.html', locals())
7.3.2 个人信息事务
def info(request):
c = Logininfo.objects.filter().count()
if c >= 1:
u = Logininfo.objects.get()
infodb = Stu.objects.get(sid=u.id)
else:
msg = "请先登录!"
return render(request, 'login.html', locals())
return render(request, 'info.html', locals())
def infomove(request):
c = Logininfo.objects.filter().count()
if c >= 1:
u = Logininfo.objects.get()
infodb = Stu.objects.get(sid=u.id)
newphone = request.GET.get('phone', '')
newemail = request.GET.get('ema', '')
if newemail or newphone:
if newemail:
infodb.email = newemail
infodb.save()
if newphone:
infodb.phone = newphone
infodb.save()
infomsg = "修改成功!"
else:
infomsg = "请正确填写手机号或邮箱!"
return render(request, 'info.html', locals())
else:
msg = "请先登录!"
return render(request, 'login.html', locals())
def minfomove(request):
c = Logininfo.objects.filter().count()
if c >= 1:
u = Logininfo.objects.get()
infodb = Manager.objects.get(mid=u.id)
newphone = request.GET.get('phone', '')
newemail = request.GET.get('ema', '')
if newemail or newphone:
if newemail:
infodb.email = newemail
infodb.save()
if newphone:
infodb.phone = newphone
infodb.save()
infomsg = "修改成功!"
else:
infomsg = "请正确填写手机号或邮箱!"
return render(request, 'manageinfo.html', locals())
else:
msg = "请先登录!"
return render(request, 'login.html', locals())
7.3.3 班级信息事务
def classs(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
classinfo = Stu.objects.get(sid=num.id)
membercount = Stu.objects.filter(classs=classinfo.classs).count()
mancount = Stu.objects.filter(classs=classinfo.classs, sex='男').count()
womancount = membercount - mancount
allmember = Stu.objects.filter(classs=classinfo.classs)
return render(request, 'classs.html', locals())
7.3.4 宿舍查询事务
def dormSearch(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
return render(request, 'dormSearch.html', locals())
def search(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
name = request.GET.get('searchname', '')
ssid = request.GET.get('searchsid', '')
sdormnum = Stu.objects.filter(sname=name).count()
siddormnum = Stu.objects.filter(sid=ssid).count()
msg = " "
if siddormnum >= 1:
sdorm = Stu.objects.filter(sid=ssid)
elif sdormnum >= 1:
sdorm = Stu.objects.filter(sname=name)
else:
msg = "请输入姓名或学号!"
return render(request, 'dormSearch.html', locals())
def managedormsearch(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
now = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=now.id)
sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
listmm = []
for m in dorminfo:
if m.dorm_id not in listmm:
listmm.append(m.dorm_id)
dormid = request.GET.get('dormid', '')
name = request.GET.get('searchname', '')
ssid = request.GET.get('searchsid', '')
dormidnum = Stu.objects.filter(dorm_id=dormid, dorm_building_id=nowinfo.mdorm).count()
sdormnum = Stu.objects.filter(sname=name).count()
siddormnum = Stu.objects.filter(sid=ssid).count()
msg = " "
if dormidnum >= 1:
sdorm = Stu.objects.filter(dorm_id=dormid, dorm_building_id=nowinfo.mdorm)
elif siddormnum >= 1:
sdorm = Stu.objects.filter(sid=ssid)
elif sdormnum >= 1:
sdorm = Stu.objects.filter(sname=name, dorm_building_id=nowinfo.mdorm)
else:
msg = "请输入宿舍号或姓名或学号!"
return render(request, 'managedormsearch.html', locals())
7.3.5 卫生信息事务
def day(request):
c = Logininfo.objects.filter().count()
if c >= 1:
num = Logininfo.objects.get()
dorminfo = Stu.objects.get(sid=num.id)
sdorm_id = dorminfo.dorm_id
sbuil_id = dorminfo.dorm_building_id
lii = dict()
lii['dorm_building_id'] = sbuil_id
lii['dorm_id'] = sdorm_id
ct = Score.objects.filter(**lii).count()
if ct < 1:
newscore = Score(dorm_building_id=sbuil_id, dorm_id=sdorm_id, ground=0, bathroom=0, tidness=0, smell=0,
windows=0)
newscore.save()
dormscore = Score.objects.filter(**lii)[0]
hsc = Historyscore.objects.filter(**lii).count()
if hsc >= 1:
oldscore = Historyscore.objects.filter(**lii)
else:
msg = "请先登录!"
return render(request, 'login.html', locals())
return render(request, 'dormClean.html', locals())
def manageday(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
now = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=now.id)
sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
listmm = []
for m in dorminfo:
if m.dorm_id not in listmm:
listmm.append(m.dorm_id)
return render(request, 'manageday.html', locals())
def managedaysubmit(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
now = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=now.id)
sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
listmm = []
for m in dorminfo:
if m.dorm_id not in listmm:
listmm.append(m.dorm_id)
d = request.GET.get('dormid', '')
g = request.GET.get('ground', '')
b = request.GET.get('bathroom', '')
w = request.GET.get('windows', '')
t = request.GET.get('tidness', '')
s = request.GET.get('smell', '')
if d and g and b and w and t and s:
oldnum = Score.objects.filter(dorm_building_id=nowinfo.mdorm, dorm_id=d).count()
if oldnum >= 1:
old = Score.objects.get(dorm_building_id=nowinfo.mdorm, dorm_id=d)
tohistory = Historyscore(dorm_building_id=old.dorm_building_id, dorm_id=old.dorm_id, ground=old.ground,
bathroom=old.bathroom, tidness=old.tidness, smell=old.smell,
windows=old.windows)
tohistory.save()
old = Score.objects.get(dorm_building_id=nowinfo.mdorm, dorm_id=d).delete()
newscore = Score(dorm_building_id=nowinfo.mdorm, dorm_id=d, ground=g, bathroom=b, tidness=t, smell=s,
windows=w)
newscore.save()
msg = "打分数据上传成功!"
else:
msg = "请选择宿舍并且正确打分!"
return render(request, 'manageday.html', locals())
7.3.6 宿舍反馈事务
def errorr(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid=num.id)
sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
listmm = []
for m in dorminfo:
if m.dorm_id not in listmm:
listmm.append(m.dorm_id)
fbinfocount = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
mfbinfocount = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
if fbinfocount >= 1:
fbmsg = ""
feedbinfo = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
else:
fbmsg = "当前没有收到同学的投诉信息哦"
if mfbinfocount >= 1:
mfbmsg = "以下是来自宿管的警告!"
mfeedbinfo = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
else:
mfbmsg = "当前没有收到来自宿管的警告哦"
return render(request, 'errorr.html', locals())
def feedback(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid=num.id)
sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
listmm = []
for m in dorminfo:
if m.dorm_id not in listmm:
listmm.append(m.dorm_id)
fbinfocount = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
if fbinfocount >= 1:
fbmsg = ""
feedbinfo = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
else:
fbmsg = "当前没有收到投诉信息哦"
mfbinfocount = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
if mfbinfocount >= 1:
mfbmsg = "以下是来自宿管的警告!"
mfeedbinfo = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
else:
mfbmsg = "当前没有收到来自宿管的警告哦"
dormid = request.GET.get('dormid', '')
judge = request.GET.get('message', '')
if judge:
dbmsg = request.GET.get('message', '')
dormnum = request.GET.get('dormid', '')
dormbuildid = nowinfo.dorm_building_id
newmsg = Fback(dorm_id=dormid, dorm_building_id=dormbuildid, fbinfo=dbmsg)
newmsg.save()
msg = "消息已发送"
else:
msg = "请正确填写消息"
return render(request, 'errorr.html', locals())
def managefeedback(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=num.id)
sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
listmm = []
for m in dorminfo:
if m.dorm_id not in listmm:
listmm.append(m.dorm_id)
dormid = request.GET.get('dormid', '')
judge = request.GET.get('message', '')
if judge:
dbmsg = request.GET.get('message', '')
dormnum = request.GET.get('dormid', '')
dormbuildid = nowinfo.dorm_building_id
newmsg = Mfback(dorm_id=dormid, dorm_building_id=dormbuildid, mfbinfo=dbmsg)
newmsg.save()
msg = "警告已送达"
else:
msg = "请选择宿舍并填写消息"
return render(request, 'manageerror.html', locals())
def manageerror(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=num.id)
sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
listmm = []
for m in dorminfo:
if m.dorm_id not in listmm:
listmm.append(m.dorm_id)
msg = ""
return render(request, 'manageerror.html', locals())
7.3.7 访问审批事务
def visit(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid=num.id)
sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
listmm = []
for m in dorminfo:
if m.dorm_building_id not in listmm:
listmm.append(m.dorm_building_id)
dormid = request.GET.get('dormid', '')
judge = request.GET.get('message', '')
if judge:
dbmsg = request.GET.get('message', '')
dormnum = request.GET.get('dormid', '')
visitTime = request.GET.get('time', '')
newmsg = Svisit(time=visitTime, target=dormnum, why=dbmsg, sno=nowinfo.sid, sname=nowinfo.sname, ac=0,
dorm_building_id=nowinfo.dorm_building_id, dorm_id=nowinfo.dorm_id)
newmsg.save()
msg = "请求单已送达"
else:
msg = "请正确填写"
reqnum = Svisit.objects.filter(sno=nowinfo.sid).count()
if reqnum >= 1:
reqform = Svisit.objects.filter(sno=nowinfo.sid)
fbmsg = ''
else:
fbmsg = '您还没有上交过请求'
return render(request, 'visit.html', locals())
def visitt(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid=num.id)
sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
listmm = []
for m in dorminfo:
if m.dorm_building_id not in listmm:
listmm.append(m.dorm_building_id)
dormid = request.GET.get('dormid', '')
judge = request.GET.get('message', '')
reqnum = Svisit.objects.filter(sno=nowinfo.sid).count()
if reqnum >= 1:
reqform = Svisit.objects.filter(sno=nowinfo.sid)
fbmsg = ''
else:
fbmsg = '您还没有上交过请求'
return render(request, 'visit.html', locals())
def mvisit(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
now = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=now.id)
waitinfonum = Svisit.objects.filter(ac=0, target=nowinfo.mdorm).count()
sql = "select * from svisit where target = %s and ac != 0"
alreadyinfo = Svisit.objects.raw(sql, [nowinfo.mdorm])
if alreadyinfo:
hvmsg = ""
else:
hvmsg = "您还没有处理过申请信息"
if waitinfonum < 1:
vmsg = "当前没有需要处理的申请"
else:
waitinfo = Svisit.objects.filter(ac=0, target=nowinfo.mdorm)[0]
stuinfo = Stu.objects.get(sid=waitinfo.sno)
return render(request, 'managevisit.html', locals())
def mvisitt(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
now = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=now.id)
waitinfo = Svisit.objects.filter(ac=0, target=nowinfo.mdorm)[0]
res = request.GET.get('res', '')
waitinfo.ac = res
waitinfo.save()
waitinfonum = Svisit.objects.filter(ac=0, target=nowinfo.mdorm).count()
if waitinfonum < 1:
vmsg = "当前没有需要处理的申请"
else:
waitinfo = Svisit.objects.filter(ac=0, target=nowinfo.mdorm)[0]
stuinfo = Stu.objects.get(sid=waitinfo.sno)
sql = "select * from svisit where target = %s and ac != 0"
alreadyinfo = Svisit.objects.raw(sql, [nowinfo.mdorm])
if alreadyinfo:
hvmsg = ""
else:
hvmsg = "您还没有处理过申请信息"
return render(request, 'managevisit.html', locals())
7.3.7 故障报修事务
def wrong(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid=num.id)
sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
listmm = []
for m in dorminfo:
if m.dorm_building_id not in listmm:
listmm.append(m.dorm_building_id)
dormid = request.GET.get('dormid', '')
judge = request.GET.get('message', '')
if judge:
dbmsg = request.GET.get('message', '')
newmsg = Wrong(dorm_building_id=nowinfo.dorm_building_id, dorm_id=nowinfo.dorm_id, wronginfo=dbmsg,
sid=nowinfo.sid, sname=nowinfo.sname, ac=0)
newmsg.save()
msg = "故障单已送达"
else:
msg = "请正确填写"
reqnum = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
if reqnum >= 1:
reqform = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
fbmsg = ''
else:
fbmsg = '您的宿舍还没有上交过故障信息'
return render(request, 'wrong.html', locals())
def wrongg(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid=num.id)
sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
listmm = []
for m in dorminfo:
if m.dorm_building_id not in listmm:
listmm.append(m.dorm_building_id)
dormid = request.GET.get('dormid', '')
judge = request.GET.get('message', '')
reqnum = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
if reqnum >= 1:
reqform = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
fbmsg = ''
else:
fbmsg = '您的宿舍还没有上交过请求'
return render(request, 'wrong.html', locals())
def mwrong(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
now = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=now.id)
waitinfonum = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm).count()
sql = "select * from wrong where dorm_building_id = %s and ac != 0"
alreadyinfo = Wrong.objects.raw(sql, [nowinfo.mdorm])
if alreadyinfo:
hvmsg = ""
else:
hvmsg = "您还没有处理过申请信息"
if waitinfonum < 1:
vmsg = "当前没有需要处理的申请"
else:
waitinfo = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm)[0]
stuinfo = Stu.objects.get(sid=waitinfo.sid)
return render(request, 'managewrong.html', locals())
def mwrongg(request):
c = Logininfo.objects.filter().count()
if c < 1:
msg = "请先登录!"
return render(request, 'login.html', locals())
else:
now = Logininfo.objects.get()
nowinfo = Manager.objects.get(mid=now.id)
waitinfo = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm)[0]
res = request.GET.get('res', '')
mes = request.GET.get('message', '')
waitinfo.ac = res
waitinfo.reply = mes
waitinfo.save()
waitinfonum = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm).count()
if waitinfonum < 1:
vmsg = "当前没有需要处理的申请"
else:
waitinfo = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm)[0]
stuinfo = Stu.objects.get(sid=waitinfo.sid)
sql = "select * from wrong where dorm_building_id = %s and ac != 0"
alreadyinfo = Wrong.objects.raw(sql, [nowinfo.mdorm])
if alreadyinfo:
hvmsg = ""
else:
hvmsg = "您还没有处理过申请信息"
return render(request, 'managewrong.html', locals())
7.3.8 离校登记事务
def leavee(request) :
c = Logininfo.objects.filter().count()
if c < 1 :
msg = "请先登录!"
return render(request, 'login.html', locals())
else :
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid = num.id)
reqnum = Leave.objects.filter(sid = nowinfo.sid).count()
if reqnum >= 1 :
reqform = Leave.objects.filter(sid = nowinfo.sid)
fbmsg = ''
else:
fbmsg = '您还没有过离校登记'
return render(request, 'leave.html', locals())
def leave(request) :
c = Logininfo.objects.filter().count()
if c < 1 :
msg = "请先登录!"
return render(request, 'login.html', locals())
else :
num = Logininfo.objects.get()
nowinfo = Stu.objects.get(sid = num.id)
judge = request.GET.get('message', '')
bbtime = request.GET.get('btime', '')
eetime = request.GET.get('etime', '')
if eetimeand bbtimeand judge:
if eetime >= bbtime :
newmsg = Leave(btime = bbtime, etime = eetime, why = judge, sid = nowinfo.sid, sname = nowinfo.sname,
dorm_building_id = nowinfo.dorm_building_id, dorm_id = nowinfo.dorm_id)
newmsg.save()
msg = "报备成功!"
else:
lmsg = "返校时间必须大于离校时间!"
else:
msg = "请正确填写"
reqnum = Leave.objects.filter(sid = nowinfo.sid).count()
if reqnum >= 1 :
reqform = Leave.objects.filter(sid = nowinfo.sid)
fbmsg = ''
else:
fbmsg = '您还没有上交过请求'
return render(request, 'leave.html', locals())
def mleave(request) :
c = Logininfo.objects.filter().count()
if c < 1 :
msg = "请先登录!"
return render(request, 'login.html', locals())
else :
m = Logininfo.objects.get()
minfo = Manager.objects.get(mid = m.id)
num = Leave.objects.filter(dorm_building_id = minfo.mdorm).count()
if num < 1 :
msg = "您管理的宿舍楼目前还没有学生进行离校登记过哦"
else:
msg = ""
allmember = Leave.objects.filter(dorm_building_id = minfo.mdorm)
return render(request, 'mleave.html', locals())
学生公寓管理系统-python+Django+Mysql(附视图代码)相关推荐
- java计算机毕业设计学生公寓管理系统源码+mysql数据库+lw文档+系统+调试部署
java计算机毕业设计学生公寓管理系统源码+mysql数据库+lw文档+系统+调试部署 java计算机毕业设计学生公寓管理系统源码+mysql数据库+lw文档+系统+调试部署 本源码技术栈: 项目架构 ...
- 学生信息管理系统——python版(附流程图)
声明 本篇代码对新手十分友好.我大一的期末考试作业,今天分享出来.当时写的时候也是一个新手,现在也不想再去修改了(一是太懒,二还是懒),所以有很多地方可能不足,但是运行完全没问题.我用的是列表加循环这 ...
- java与sql学生考勤管理系统_SSM实现学生考勤管理系统、javaweb+mysql
需求分析 设计并实现一个用于学校学生考勤用途的管理系统, 采用SSM(spring, springmvc, mybatis) 技术进行开发, 实现管理员, 辅导员, 教师, 学生 四种权限的权限系统, ...
- (附源码)Python学生公寓管理系统的设计与实现 毕业设计181047
Python学生公寓管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的 ...
- Python学生公寓管理系统的设计与实现 毕业设计-附源码181047
Python学生公寓管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的 ...
- 【附源码】计算机毕业设计JAVA学生公寓管理系统
[附源码]计算机毕业设计JAVA学生公寓管理系统 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Inte ...
- java公寓管理系统设计与实现,学生公寓管理系统的设计与实现(MySQL)
学生公寓管理系统的设计与实现(MySQL)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文10000字,程序代码,MySQL数据库) 学生公寓是每一位在校学生生活.学习.相互交流的主要场所 ...
- 计算机毕业设计Java学生公寓管理系统(源码+系统+mysql数据库+lw文档
计算机毕业设计Java学生公寓管理系统(源码+系统+mysql数据库+lw文档 计算机毕业设计Java学生公寓管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 ...
- 基于Java毕业设计学生公寓管理系统源码+系统+mysql+lw文档+部署软件
基于Java毕业设计学生公寓管理系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计学生公寓管理系统源码+系统+mysql+lw文档+部署软件 项目架构:B/S架构 开发语言:Java ...
最新文章
- DataBinding初探 数据绑定的用法 ,import 集合类型,绑定的表达式,访问集合类型2...
- python wxpython_python GUI wxPython
- 内聚的极限: 软件开发的不确定性原理
- Delphi控件的“拿来主义”
- java 如何跟多个字符串比较_Stack Overflow上370万浏览量的一个问题:如何比较Java的字符串...
- DataTables基本搭建攻略(后台分页)
- C++ tbb unsafe_erase() 并发访问 解决方案
- 同比 数据模型 环比_同比环比累计
- 【USACO】 录制唱片
- 如何打开后缀为.xps的文件?
- Java 11中文版 API参考文档(收藏)
- ScrollView 吸顶效果
- 解决网页文字不能复制的方法
- 算法_二叉树_二叉树的最大深度
- Sqoop常用命令回顾
- 人工智能以及图形图像处理领域CCFA类期刊汇总与个人评价
- eNSP启动一直出#号的一种参考方法
- 一段C语言写的病毒代码
- 新媒体运营需要做些什么
- 京东又有AI科学家加盟:加拿大大数据教授裴健入职,向刘强东汇报