计算机毕业设计选题推荐-家政保洁预约系统-Python项目实战

作者主页:IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

一、前言

随着社会经济的发展和城市化进程的加速,人们对家政保洁服务的需求日益增长。然而,传统的家政保洁预约方式往往存在着信息不对称、服务质量不稳定等问题,无法满足现代人对便捷、安全的服务需求。因此,开发一款基于B/S架构的家政保洁预约系统,对于提高家政保洁服务的效率和质量,增进家政保洁服务的信息化建设具有迫切性和必要性。
尽管市面上已有一些家政保洁预约系统,但它们往往存在以下问题:
功能性不足:无法满足用户对多元化服务的需求,如清洁类型、服务时间、保洁人员等。
数据安全性不高:用户信息与保洁服务信息的安全性无法得到保障。
使用不便:操作流程复杂,用户界面不友好,导致用户体验较差。
这些问题进一步强调了开发新的家政保洁预约系统的必要性。
本课题旨在开发一款功能完善、数据安全、操作便捷、具有数据分析与优化功能的家政保洁预约系统。该系统将具备以下功能:
家政保洁服务信息管理:用户可以实时查询各类清洁服务的详细信息,包括服务类型、评价等。
预约管理:用户可以根据自身需求预约合适的清洁服务,并可对预约进行修改和取消。
合同签订:系统将提供电子合同签订功能,方便用户与服务提供者进行合同确认和签署。
服务质量监控与评价:系统将提供在线评价功能,用户可对已完成的服务进行评价和反馈,有助于提升服务质量。
用户账户管理:用户可以创建和管理自己的账户,包括个人信息、历史预约记录等。
安全性保障:系统将采取必要的安全措施,保障用户信息和保洁服务信息的安全性。
通过这些功能,该系统能够提高家政保洁预约的效率和质量,增进家政保洁服务的信息化建设。同时,该系统还可以为用户提供更加便捷和安全的服务体验,使用户能够更加满意和放心地选择家政保洁服务。
本课题的意义在于解决现有家政保洁预约方式的不足,推动家政保洁服务的信息化和现代化。同时,该研究还具有以下价值:
提高服务效率和质量:通过家政保洁预约系统的推广和应用,可以实现对各类清洁服务的信息化管理,提高服务效率和质量。
增进服务安全性:系统采取的安全措施可以保障用户信息和保洁服务信息的安全性,使用户更加放心地选择家政保洁服务。

二、开发环境

  • 开发语言:Java/Python两个版本
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SSM(Spring+SpringMVC+Mybatis)/SpringBoot/Django三个版本
  • 前端:Vue

三、系统界面展示

  • 家政保洁预约系统界面展示:
    家政保洁预约系统-服务介绍
    家政保洁预约系统-家政预约管理-管理员
    家政保洁预约系统-服务类型管理
    家政保洁预约系统-家政合同管理-用户
    家政保洁预约系统-家政服务管理-家政人员
    家政保洁预约系统-家政预约管理-用户

四、部分代码设计

  • Python项目实战-代码参考:
def login(request):#登录
    return render(request, 'login.html')

def customer_register(request):  # 客户注册
    if request.method == "GET":
        return render(request, 'customer_register.html')
    else:
        customer_name = request.POST.get("customer_name")  # 获取客户输入的姓名
        customer_sex = request.POST.get("customer_sex")  # 获取客户输入的性别
        customer_age = request.POST.get("customer_age")  # 获取客户输入的年龄
        customer_telephone = request.POST.get("customer_telephone")  # 获取客户输入的电话
        customer_address = request.POST.get("customer_address")
        customer_id = request.POST.get("customer_id")
        customer_password = request.POST.get("customer_password")
        result1 = User.objects.filter(user_telephone=customer_telephone)  # 在用户表中搜索该用户名的记录
        result2 = Customer.objects.filter(customer_id=customer_id)  # 在客户表中搜索该身份证号的使用记录
        context = {}
        if len(result1) == 1:  # 判断该账户是否存在(即判断是否注册过),如果后台存在记录,则返回相应的提示语句
            context["info"] = "该账户已注册!!!"
            context["status"] = 0  #零表示注册失败
            return render(request, 'customer_register.html', context=context)
        else:  #该账户是新用户
            if len(result2) == 1:#判断该身份证号是否有客户已注册
                context["info"] = "该身份证号已占用!!!"
                context["status"] = 4
                return render(request, 'customer_register.html', context=context)
            else:
                User.objects.create(user_telephone=customer_telephone, user_password=customer_password,user_identity='客户')#用create为user表添加一条记录
                Customer.objects.create(customer_name=customer_name,customer_id=customer_id,customer_address=customer_address,customer_sex=customer_sex,customer_age=customer_age,customer_telephone=customer_telephone)#用create为Patient表添加一条记录
                return render(request, 'login.html')

def worker_register(request):  # 员工注册
    if request.method == "GET":
        types = Type.objects.all()
        return render(request, 'worker_register.html',context={"types":types})
    else:
        types = Type.objects.all()
        worker_name = request.POST.get("worker_name")  # 获取员工输入的姓名
        worker_id = request.POST.get("worker_id") # 获取员工输入的工号
        worker_sex = request.POST.get("worker_sex")
        worker_age = request.POST.get("worker_age")
        worker_telephone = request.POST.get("worker_telephone")
        worker_type = request.POST.get("worker_type")
        worker_idcard = request.POST.get("worker_idcard")
        worker_password = request.POST.get("worker_password")
        type = Type.objects.filter(type_id=int(worker_type)).first()
        result1 = User.objects.filter(user_telephone=worker_telephone)  # 在用户表中搜索该用户名的记录
        result2 = Worker.objects.filter(worker_id=worker_id)  # 在员工表中搜索该工号的使用记录
        context = {}
        if len(result1) == 1:  # 判断该账户是否存在(即判断是否注册过),如果后台存在记录,则返回相应的提示语句
            context["info"] = "该账户已注册!!!"
            context["status"] = 0  #零表示注册失败
            context["types"] = types
            return render(request, 'worker_register.html',context=context)
        else:  #该账户是新用户
            if len(result2) == 1:#判断该工号号是否有员工已使用
                context["info"] = "该工号已占用!!!"
                context["status"] = 5
                context["types"] = types
                return render(request, 'worker_register.html', context=context)
            else:
                User.objects.create(user_telephone=worker_telephone, user_password=worker_password,user_identity='员工')#用create为user表添加一条记录
                Worker.objects.create(worker_name=worker_name,worker_telephone=worker_telephone,worker_type=type, worker_id=worker_id, worker_sex=worker_sex, worker_age=worker_age,
                                      worker_idcard=worker_idcard)#用create为Doctor表添加一条记录
                return render(request, 'login.html')

def login_judge(request):#登入判定
    global user_telephone ,global_cname,global_wname #定义全局变量user_telephone,存储当前登入用户的账户,global_cname保存一下该客户的姓名,global_wname保存一下该员工的姓名
    user_telephone = request.POST.get("telephone")#获取前端输入的账户
    user_password = request.POST.get("password")
    print(user_telephone)
    result1 = User.objects.filter(user_telephone=user_telephone)#在user表里检索是否存在该账户
    if len(result1) == 1:  # 判断后台是否存在该用户,有则进一步判断密码是否正确
        password = result1[0].user_password  # 获取后台的密码
        identity = result1[0].user_identity  # 获取该账户的身份信息
        if user_password == password:  # 将用户输入的密码和后台密码进行比对,如何正确,判断该账户身份
            if identity == '客户':
                result2 = Customer.objects.filter(customer_telephone=user_telephone)
                global_cname = result2[0].customer_name  # 用全局变量保存一下该客户的姓名
                context = {
                    "customer_id": result2[0].customer_id,
                    "customer_name": result2[0].customer_name,
                    "customer_sex": result2[0].customer_sex,
                    "customer_age": result2[0].customer_age,
                    "customer_telephone": result2[0].customer_telephone,
                    "customer_address": result2[0].customer_address,
                    "name":global_cname
                }
                return render(request, 'customer/customer_information.html', context)  # 跳转到客户主页界面
            elif identity == '员工':
                result = Worker.objects.filter(worker_telephone=user_telephone)  # user_telephone为全局变量
                global_wname = result[0].worker_name  # 用全局变量保存一下该员工的姓名
                types = Type.objects.all()
                context = {
                    "worker_id": result[0].worker_id,
                    "worker_name": result[0].worker_name,
                    "worker_sex": result[0].worker_sex,
                    "worker_age": result[0].worker_age,
                    "worker_address": result[0].worker_address,
                    "worker_idcard": result[0].worker_idcard,
                    "worker_experience": result[0].worker_experience,
                    "worker_salary": result[0].worker_salary,
                    "worker_information": result[0].worker_information,
                    "worker_type": result[0].worker_type.type_name,
                    "worker_telephone": result[0].worker_telephone,
                    "name":global_wname,
                    "types":types
                }
                return render(request, 'worker/worker_information.html', context)  # 跳转到客户主页界面
            elif identity == '管理员':#若为管理员,则直接跳转到管理员界面
                workers = Worker.objects.all()
                return render(request, 'manager/docotr_manage.html', context={"workers": workers})# 跳转到管理员界面
            else:
                return render(request, 'login.html')  # 密码错误回到登入界面
        else:  # 如果不一致则返回相应提示语句
            context = {
                "info": "密码错误!!!",
                "status": 2
            }
            return render(request, 'login.html', context=context)  # 密码错误回到登入界面
    else:  # 如果不存在该用户则返回相应的提示语句
        context = {
            "info": "该账户不存在!!!",
            "status": 3
        }
        return render(request, 'login.html', context=context)  # 账户不存在则继续回到登入界面

#客户界面
def customer_information(request):#个人信息
    if request.method == "GET":  #此部分是当每次点击横向导航栏的“个人信息”选项时,都重新显示该用户的个人资料
        result = Customer.objects.filter(customer_telephone=user_telephone)  #user_telephone为全局变量
        context = {
            "customer_id": result[0].customer_id,
            "customer_name": result[0].customer_name,
            "customer_sex": result[0].customer_sex,
            "customer_age": result[0].customer_age,
            "customer_telephone": result[0].customer_telephone,
            "customer_address": result[0].customer_address,
            "name": global_cname
        }
        return render(request, 'customer/customer_information.html', context)#将该用户的个人信息再次传到前端页面
    else:  #在customer_information.html页面中通过post方式的“保存”按钮跳转到此处,即完成更新数据操作(保存)
        customer_age = request.POST.get("customer_age")  # 获取年龄
        customer_address = request.POST.get("customer_address")  # 获取地址
        Customer.objects.filter(customer_telephone=user_telephone).update(customer_age=customer_age,customer_address=customer_address)#更新数据
        result = Customer.objects.filter(customer_telephone=user_telephone)  # user_telephone为全局变量   此处再次传值到前端
        context = {
            "customer_id": result[0].customer_id,
            "customer_name": result[0].customer_name,
            "customer_sex": result[0].customer_sex,
            "customer_age": result[0].customer_age,
            "customer_telephone": result[0].customer_telephone,
            "customer_address": result[0].customer_address,
            "name": global_cname
        }
        return render(request, 'customer/customer_information.html', context)  # 将该用户的个人信息再次传到前端页面

def customer_appoint(request):#家政选聘
    if request.method == "GET":#此部分是当用户每次点击侧边导航栏的“家政市场”选项时,都要显示出所有家政人员信息
        workers = Worker.objects.all()
        types = Type.objects.all()
        return render(request, 'customer/customer_appoint.html',context={"workers": workers,"types":types,"name":global_cname })
    else:#customer/customer_appoint.html页面中通过post方式的“搜索”按钮跳转到此处,即完成搜索操作
        type_id = request.POST.get("type_id")
        types = Type.objects.all()
        workers = Worker.objects.all()
        if type_id and type_id!="0":
            rusults = Worker.objects.filter(worker_type=int(type_id))
            if rusults:#如果找到的结果集非空,则输出
                return render(request,'customer/customer_appoint.html',context={"workers":rusults,"types":types,"name":global_wname})
            else:#若搜索的结果集为0,那么输出未找到该类型的家政人员!
                return render(request,'customer/customer_appoint.html',context={"workers":workers,"types":types,"name":global_wname,"status":0})
        else:
            return render(request, 'customer/customer_appoint.html',
                          context={"workers": workers, "types": types, "name": global_wname})

def worker_detail(request):#点击详情时调用此函数
    global worker_id
    if request.method == "GET":
        worker_id = request.GET.get("worker_id")
        result = Worker.objects.filter(worker_id = worker_id)
        context = {
            "worker_name": result[0].worker_name,
            "worker_sex": result[0].worker_sex,
            "worker_age": result[0].worker_age,
            "worker_address": result[0].worker_address,
            "worker_idcard": result[0].worker_idcard,
            "worker_experience": result[0].worker_experience,
            "worker_salary": result[0].worker_salary,
            "worker_information": result[0].worker_information,
            "worker_type": result[0].worker_type,
            "worker_telephone": result[0].worker_telephone,
            "name": global_cname
        }
        return render(request, 'customer/worker_detail.html',context)  # 向前端传递所有预约记录的集合
    else:
        workers = Worker.objects.all()
        types = Type.objects.all()
        worker=Worker.objects.filter(worker_id=worker_id).first()
        customer=Customer.objects.filter(customer_telephone =user_telephone ).first()
        order_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
        price = worker.worker_salary
        Order.objects.create(worker=worker,customer=customer,order_price=worker.worker_salary,order_time=order_time)
        order = Order.objects.filter(order_time=order_time).first()
        platform_cost = float(price) * 0.1
        income = float(price)-platform_cost
        Finance.objects.create(order = order,platform_cost=platform_cost,income=income,worker=worker)
        return render(request, 'customer/customer_appoint.html',
                      context={"workers": workers, "types": types, "name": global_cname})


def appoint_record(request):#订单记录
    if request.method == "GET":#此部分是当用户每次点击横向导航栏的“订单记录”选项时
        customer = Customer.objects.filter(customer_telephone=user_telephone).first()
        records = Order.objects.filter(customer=customer)
        return render(request, 'customer/appoint_record.html',context={"records":records,"name":global_cname })  # 向前端传递所有订单记录的集合


def change_customer_password(request):#修改密码
    result = User.objects.filter(user_telephone=user_telephone).first()
    password = result.user_password
    if request.method == "GET": #此部分是当每次点击横向导航栏的“修改密码”选项时,显示该界面
        return render(request,'customer/change_customer_password.html',context={"password":password,"name":global_cname})
    else:#此部分是在change_customer_password.html页面中点击保存按钮时完成修改密码的操作
        oldPassword = request.POST.get("oldPassword")
        newPassword = request.POST.get("newPassword")
        reNewPassword = request.POST.get("reNewPassword")#以下是先判断输入的旧密码是否正确,并且两次输入的密码是否一致且都不为空
        if password == oldPassword and newPassword == reNewPassword and newPassword and reNewPassword:
            User.objects.filter(user_telephone=user_telephone).update(user_password = newPassword)#更新该用户的密码
            password = newPassword
        return render(request, 'customer/change_customer_password.html', context={"password": password, "name": global_cname})

#员工界面
def worker_information(request):#个人信息
    if request.method == "GET":  #此部分是当每次点击横向导航栏的“个人信息”选项时,都重新显示该用户的个人资料
        result = Worker.objects.filter(worker_telephone=user_telephone)  #user_telephone为全局变量
        types = Type.objects.all()
        context = {
            "worker_id": result[0].worker_id,
            "worker_name": result[0].worker_name,
            "worker_sex": result[0].worker_sex,
            "worker_age": result[0].worker_age,
            "worker_address": result[0].worker_address,
            "worker_idcard": result[0].worker_idcard,
            "worker_experience": result[0].worker_experience,
            "worker_salary": result[0].worker_salary,
            "worker_information": result[0].worker_information,
            "worker_type": result[0].worker_type.type_name,
            "worker_telephone": result[0].worker_telephone,
            "name": global_wname,
            "types": types
        }
        return render(request, 'worker/worker_information.html', context)#将该用户的个人信息再次传到前端页面

    else:  #在worker_information.html页面中通过post方式的“保存”按钮跳转到此处,即完成更新数据操作(保存)
        worker_name = request.POST.get("worker_name")  # 获取年龄
        worker_sex = request.POST.get("worker_sex")
        worker_age = request.POST.get("worker_age")
        worker_address = request.POST.get("worker_address")
        worker_idcard = request.POST.get("worker_idcard")
        worker_experience = request.POST.get("worker_experience")
        worker_salary = request.POST.get("worker_salary")
        worker_information = request.POST.get("worker_information")
        worker_type = request.POST.get("worker_type")
        type = Type.objects.filter(type_name = worker_type).first()
        flag=0
        result = Worker.objects.filter(worker_telephone=user_telephone)  # user_telephone为全局变量   此处再次传值到前端
        if worker_salary.isdigit():
            flag = 1
            Worker.objects.filter(worker_telephone=user_telephone).update(worker_name=worker_name,worker_sex=worker_sex,worker_age=worker_age,
            worker_address=worker_address,worker_idcard=worker_idcard,worker_experience=worker_experience,worker_salary=int(worker_salary),worker_information=worker_information,worker_type=type)#更新数据
        types = Type.objects.all()
        context = {
            "worker_id": result[0].worker_id,
            "worker_name": result[0].worker_name,
            "worker_sex": result[0].worker_sex,
            "worker_age": result[0].worker_age,
            "worker_address": result[0].worker_address,
            "worker_idcard": result[0].worker_idcard,
            "worker_experience": result[0].worker_experience,
            "worker_salary": result[0].worker_salary,
            "worker_information": result[0].worker_information,
            "worker_type": result[0].worker_type.type_name,
            "worker_telephone": result[0].worker_telephone,
            "name": global_wname,
            "types": types,
            "status": flag
        }
        return render(request, 'worker/worker_information.html', context)  # 跳转到客户主页界面


def order_record(request):#员工界面的订单记录
    if request.method == "GET":  # 此部分是当用户每次点击横向导航栏的“订单记录”选项时
        worker = Worker.objects.filter(worker_telephone=user_telephone).first()
        records = Order.objects.filter(worker=worker)
        return render(request, 'worker/order_record.html',
                      context={"records": records, "name": global_wname})  # 向前端传递所有订单记录的集合


def finance_infomation(request):#财务信息页面
    worker = Worker.objects.filter(worker_telephone=user_telephone).first()
    records = Finance.objects.filter(worker=worker)
    rest=0.0
    for i in records:
        rest = rest + i.income
    print(rest)
    return render(request, 'worker/finance_infomation.html',
                  context={"records": records, "name": global_wname,"rest_money":rest})  # 向前端传递所有财务信息的集合


def change_worker_password(request):#修改密码
    result = User.objects.filter(user_telephone=user_telephone).first()
    password = result.user_password
    if request.method == "GET": #此部分是当每次点击横向导航栏的“修改密码”选项时,显示该界面
        return render(request,'worker/change_worker_password.html',context={"password":password,"name":global_wname})
    else:#此部分是在change_worker_password.html页面中点击保存按钮时完成修改密码的操作
        oldPassword = request.POST.get("oldPassword")
        newPassword = request.POST.get("newPassword")
        reNewPassword = request.POST.get("reNewPassword")#以下是先判断输入的旧密码是否正确,并且两次输入的密码是否一致且都不为空
        if password == oldPassword and newPassword == reNewPassword and newPassword and reNewPassword:
            User.objects.filter(user_telephone=user_telephone).update(user_password = newPassword)#更新该用户的密码
            password = newPassword
        return render(request, 'worker/change_worker_password.html', context={"password": password, "name": global_wname})

五、论文参考

  • 计算机毕业设计选题推荐-家政保洁预约系统-论文参考:
    计算机毕业设计选题推荐-家政保洁预约系统-论文参考

六、系统视频

家政保洁预约系统-项目视频:

计算机毕业设计选题推荐-家政保洁预约系统-Python项目

结语

计算机毕业设计选题推荐-家政保洁预约系统-Python项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计选题系统是一个用于管理学生毕业设计选题的系统,在该系统中,学生可以浏览和选择感兴趣的毕业设计选题,并向指导教师提交选题申请。为了更好地理解和设计该系统,可以使用E-R图进行建模。 E-R图是一种用于描述实体与实体之间关系的图形化工具。对于毕业设计选题系统,可以识别出以下实体和关系: 1. 实体:学生、选题、指导教师、系部 - 学生是该系统的一个重要实体,具有属性如学号、姓名、专业等; - 选题是学生选择的某个毕业设计主题,具有属性如题目、描述、难度等; - 指导教师是负责指导学生进行毕业设计的教师,具有属性如工号、姓名、职称等; - 系部是学校的一个组织机构,负责管理学生的毕业设计,具有属性如系号、名称、联系方式等。 2. 关系:选择、指导 - 选择关系表示学生与选题之间的选择关系,一个学生可以选择一个或多个选题,一个选题也可以被多个学生选择; - 指导关系表示指导教师与学生之间的指导关系,一个指导教师可以指导一个或多个学生,一个学生也可以被一个或多个指导教师指导。 通过以上实体和关系的识别,可以绘制E-R图。图中使用方框表示实体,菱形表示关系,箭头表示关系的方向。 在系统的逻辑设计和数据库建模阶段,E-R图可以帮助开发人员更好地理解和设计系统的实体和关系,从而进行数据库表的设计和系统流程的优化。 总之,通过E-R图对毕业设计选题系统进行建模可以帮助开发人员从宏观角度把握系统的核心实体、关系和流程,为后续的系统设计开发提供了指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值