上门家教 app 用户端系统模块设计
一、逻辑分析
- 用户需求角度:上门家教 APP 用户端的核心需求是能够方便快捷地找到合适的家教老师。这就要求系统具备强大的教师信息展示与筛选功能。用户希望可以根据科目、教学经验、所在区域、价格等多种条件筛选出符合自己需求的老师。同时,用户也需要了解老师的详细信息,如教学资质、过往评价等,以此来评估老师的教学水平。
- 业务流程角度:用户首先需要注册登录 APP,之后进入主界面浏览家教服务。当用户找到感兴趣的老师后,可以发起预约请求。老师收到预约请求后进行确认,双方达成一致后则预约成功。在教学完成后,用户可以对老师进行评价,评价信息将作为其他用户选择老师的参考依据。整个业务流程围绕着用户寻找老师、预约教学以及后续评价展开。
- 系统功能完整性角度:为了保证系统的正常运行和用户良好的体验,除了核心的找老师和预约功能外,还需要设计其他辅助功能。比如消息通知功能,用于及时告知用户预约状态的变化;支付功能,支持用户支付家教费用;个人中心功能,方便用户管理自己的个人信息、订单记录等。
二、程序框架结构化输出
(一)用户注册登录模块
- 注册功能
- 用户通过输入手机号码、设置密码等信息完成注册流程。在输入手机号码后,系统发送验证码到用户手机,用户输入正确验证码后完成注册。
- 数据库设计:在用户表中存储用户的手机号码、密码、注册时间等信息。用户表结构如下:
sql
CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,phone_number VARCHAR(11) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL,registration_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
- 代码示例(以 Python + Django 为例):
python
from django.db import modelsclass User(models.Model):phone_number = models.CharField(max_length=11, unique=True)password = models.CharField(max_length=255)registration_time = models.DateTimeField(auto_now_add=True)
- 代码解释:这段代码定义了一个 Django 的模型类 User,用于表示用户信息。其中 phone_number 字段存储手机号码,设置为唯一;password 字段存储密码;registration_time 字段自动记录用户注册时间。
- 登录功能
- 用户输入手机号码和密码进行登录验证。系统查询数据库中是否存在匹配的用户信息,若存在且密码正确,则登录成功,生成并返回用户令牌(token)用于后续的身份验证。
- 代码示例(以 Python + Django 为例):
python
from django.contrib.auth import authenticate
from rest_framework.authtoken.models import Token
from rest_framework.views import APIView
from rest_framework.response import Responseclass LoginView(APIView):def post(self, request):phone_number = request.data.get('phone_number')password = request.data.get('password')user = authenticate(request, phone_number=phone_number, password=password)if user:token, created = Token.objects.get_or_create(user=user)return Response({'token': token.key})else:return Response({'error': 'Invalid credentials'}, status=400)
- 代码解释:这段代码定义了一个登录视图 LoginView,在用户发送 POST 请求时,获取请求中的手机号码和密码,使用 authenticate 方法进行用户验证。如果验证成功,获取或创建用户令牌并返回给用户;如果验证失败,则返回错误信息。
(二)家教老师展示与筛选模块
- 老师信息展示
- 从数据库中获取所有老师的基本信息,包括姓名、头像、教授科目、教学经验等,并展示在 APP 界面上。
- 数据库设计:创建教师表存储老师信息,表结构如下:
sql
CREATE TABLE tutors (tutor_id INT AUTO_INCREMENT PRIMARY KEY,tutor_name VARCHAR(50) NOT NULL,avatar_url VARCHAR(255),subject VARCHAR(50) NOT NULL,teaching_experience INT NOT NULL
);
- 代码示例(以 Python + Django 为例):
python
from django.db import modelsclass Tutor(models.Model):tutor_name = models.CharField(max_length=50)avatar_url = models.CharField(max_length=255, blank=True)subject = models.CharField(max_length=50)teaching_experience = models.IntegerField()
- 代码解释:定义了 Tutor 模型类,用于存储家教老师的信息。tutor_name 字段存储老师姓名;avatar_url 字段存储老师头像链接;subject 字段存储教授科目;teaching_experience 字段存储教学经验(以年为单位)。
- 筛选功能
- 支持用户根据科目、教学经验、所在区域、价格等条件进行筛选。系统根据用户选择的条件构建查询语句,从数据库中获取符合条件的老师信息。
- 代码示例(以 Python + Django 为例):
python
from django.db.models import Qdef filter_tutors(subject=None, teaching_experience=None, area=None, price=None):query = Q()if subject:query &= Q(subject=subject)if teaching_experience:query &= Q(teaching_experience__gte=teaching_experience)if area:query &= Q(area=area)if price:query &= Q(price__lte=price)return Tutor.objects.filter(query)
- 代码解释:定义了一个 filter_tutors 函数,根据用户传入的筛选条件构建查询对象 query。使用 Q 对象进行条件组合,最后通过 Tutor.objects.filter 方法从数据库中获取符合条件的老师信息。
(三)预约模块
- 预约请求发送
- 用户在选择好老师后,填写预约时间、教学地点等信息,向老师发送预约请求。预约请求信息存储在预约表中。
- 数据库设计:创建预约表,表结构如下:
sql
CREATE TABLE appointments (appointment_id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,tutor_id INT NOT NULL,appointment_time DATETIME NOT NULL,teaching_location VARCHAR(255) NOT NULL,status ENUM('pending', 'confirmed', 'cancelled') DEFAULT 'pending',FOREIGN KEY (user_id) REFERENCES users(user_id),FOREIGN KEY (tutor_id) REFERENCES tutors(tutor_id)
);
- 代码示例(以 Python + Django 为例):
python
from django.db import models
from django.utils import timezoneclass Appointment(models.Model):user = models.ForeignKey('User', on_delete=models.CASCADE)tutor = models.ForeignKey('Tutor', on_delete=models.CASCADE)appointment_time = models.DateTimeField()teaching_location = models.CharField(max_length=255)status = models.CharField(max_length=10, choices=[('pending', 'Pending'), ('confirmed', 'Confirmed'), ('cancelled', 'Cancelled')], default='pending')created_time = models.DateTimeField(default=timezone.now)
- 代码解释:定义了 Appointment 模型类,用于存储预约信息。user 和 tutor 字段分别通过外键关联用户表和教师表;appointment_time 字段存储预约时间;teaching_location 字段存储教学地点;status 字段存储预约状态,默认为 'pending'(待确认);created_time 字段自动记录预约创建时间。
- 预约请求确认
- 老师在收到预约请求后,在 APP 端可以查看请求详情并选择确认或拒绝。如果老师确认预约,系统将预约状态更新为 'confirmed';如果拒绝,则更新为 'cancelled'。
- 代码示例(以 Python + Django 为例):
python
def confirm_appointment(appointment_id):try:appointment = Appointment.objects.get(id=appointment_id)appointment.status = 'confirmed'appointment.save()return Trueexcept Appointment.DoesNotExist:return Falsedef reject_appointment(appointment_id):try:appointment = Appointment.objects.get(id=appointment_id)appointment.status = 'cancelled'appointment.save()return Trueexcept Appointment.DoesNotExist:return False
- 代码解释:定义了 confirm_appointment 和 reject_appointment 两个函数,分别用于确认和拒绝预约请求。通过获取指定 id 的预约记录,修改其 status 字段并保存,来更新预约状态。
(四)消息通知模块
- 通知功能实现
- 当预约状态发生变化(如预约被确认、拒绝)时,系统向用户发送消息通知。可以使用第三方消息推送平台(如极光推送)来实现消息推送功能。
- 以 Python + Django + 极光推送为例,安装极光推送 SDK:
bash
pip install jpush-sdk
- 代码示例:
python
import jpush as jpush
from jpush import commonAPP_KEY = 'your_app_key'
MASTER_SECRET = 'your_master_secret'_jpush = jpush.JPush(APP_KEY, MASTER_SECRET)
push = _jpush.create_push()def send_notification(user_id, message):try:push.audience = jpush.audience(jpush.registration_id(user_id))push.notification = jpush.notification(alert=message)push.platform = jpush.all_response = push.send()return Trueexcept common.Unauthorized:raise common.Unauthorized('Unauthorized')except common.APIConnectionException:raise common.APIConnectionException('Connection error')except common.JPushFailure:raise common.JPushFailure('JPushFailure')except Exception:raise Exception('Other Exception')
- 代码解释:这段代码定义了一个 send_notification 函数,用于向指定用户发送消息通知。通过配置极光推送的 APP_KEY 和 MASTER_SECRET,创建推送对象 push,设置推送的目标用户(通过 registration_id)、通知内容和平台,最后调用 push.send 方法发送通知。
(五)支付模块
- 支付功能集成
- 集成第三方支付平台(如微信支付、支付宝支付),实现用户在线支付家教费用的功能。以微信支付为例,需要在微信开放平台注册并获取相关的商户号、密钥等信息。
- 在 Django 项目中安装微信支付 SDK:
bash
pip install wechatpy
- 代码示例:
python
from wechatpy import WeChatClient
from wechatpy.client.api import WeChatOrderAPPID = 'your_appid'
MCHID = 'your_mchid'
API_KEY = 'your_api_key'client = WeChatClient(APPID, API_KEY)
order_api = WeChatOrder(client)def create_wx_order(appointment_id, total_fee):try:order = order_api.create(out_trade_no=appointment_id,total_fee=total_fee,body='Home tutoring service',trade_type='APP',notify_url='your_notify_url')return orderexcept Exception as e:print(f"Error creating WeChat order: {e}")return None
- 代码解释:定义了 create_wx_order 函数,用于创建微信支付订单。通过初始化微信支付客户端 WeChatClient 和订单 API 对象 WeChatOrder,调用 create 方法创建订单。传入订单号(使用预约 id)、总费用、商品描述、交易类型和通知回调地址等参数。
(六)个人中心模块
- 个人信息管理
- 用户可以在个人中心查看和修改自己的个人信息,如昵称、头像等。数据库表结构在用户表基础上添加昵称和头像字段:
sql
ALTER TABLE users ADD COLUMN nickname VARCHAR(50);
ALTER TABLE users ADD COLUMN avatar_url VARCHAR(255);
- 代码示例(以 Python + Django 为例):
python
from django.db import modelsclass User(models.Model):phone_number = models.CharField(max_length=11, unique=True)password = models.CharField(max_length=255)registration_time = models.DateTimeField(auto_now_add=True)nickname = models.CharField(max_length=50, blank=True)avatar_url = models.CharField(max_length=255, blank=True)
- 代码解释:在 User 模型类中添加了 nickname 和 avatar_url 字段,分别用于存储用户昵称和头像链接。用户可以在个人中心对这两个字段进行修改。
- 订单记录查看
- 用户可以查看自己的预约订单记录,包括订单状态、预约时间、老师信息等。通过关联预约表和教师表获取相关信息。
- 代码示例(以 Python + Django 为例,使用 Django 的视图和序列化器):
python
from rest_framework.views import APIView
from rest_framework.response import Response
from.models import Appointment, Tutor
from rest_framework.serializers import ModelSerializerclass AppointmentSerializer(ModelSerializer):tutor_name = models.CharField(source='tutor.tutor_name')class Meta:model = Appointmentfields = ['appointment_id', 'appointment_time', 'teaching_location','status', 'tutor_name']class UserAppointmentView(APIView):def get(self, request, user_id):appointments = Appointment.objects.filter(user_id=user_id)serializer = AppointmentSerializer(appointments, many=True)return Response(serializer.data)
- 代码解释:定义了 AppointmentSerializer 序列化器类,用于将预约信息序列化为 JSON 格式,并添加了 tutor_name 字段来获取关联的教师姓名。UserAppointmentView 视图类用于处理用户获取自己预约订单记录的请求,通过过滤出指定用户的预约记录,并使用序列化器进行序列化后返回给用户。
三、总结
上门家教 APP 用户端系统模块设计涵盖了多个重要功能模块,从用户注册登录开始,到寻找合适的家教老师、发起预约、消息通知、支付费用以及个人中心管理,各个模块紧密协作,共同为用户提供便捷的家教服务体验。在设计过程中,我们通过合理的数据库设计和代码实现,确保系统的功能完整性和稳定性。同时,对于涉及到的第三方服务(如消息推送、支付平台),也提供了相应的集成方案。在实际开发中,还需要根据具体的业务需求和技术选型进行进一步的优化和完善,以打造出高质量的上门家教 APP 用户端系统。