基于小程序的篮球场馆预订系统【app开发、H5开发、安卓app客户端等】 【附源码+文档报告+代码讲解】

65 阅读7分钟

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

@TOC

基于小程序的篮球场馆预订系统介绍

基于小程序的篮球场馆预订系统是一套专门针对篮球场馆管理与预约服务的数字化解决方案,采用现代化的技术架构实现高效便捷的场馆预订管理。系统支持Java和Python两套后端技术方案,Java版本基于SpringBoot框架(集成Spring+SpringMVC+MyBatis),Python版本采用Django框架,前端使用uni-app跨平台开发框架结合微信小程序和安卓应用,数据存储采用MySQL数据库,整体架构为C/S+B/S混合模式。系统功能模块完善,包含系统首页展示、用户管理、场馆类型分类、场馆信息维护、场馆预约功能、取消预约操作、失物招领服务、系统管理后台、公告信息分类管理、公告信息发布、轮播图管理、在线客服支持、个人中心以及密码修改等核心功能。通过该系统,用户可以便捷地浏览不同类型的篮球场馆信息,实时查看场馆可用时间段,进行在线预约和取消操作,同时享受失物招领、公告通知等贴心服务。管理员则可通过后台系统对场馆资源、用户信息、预约订单进行统一管理,通过轮播图和公告系统发布最新资讯,提供在线客服支持,确保整个预订流程的顺畅运行。

基于小程序的篮球场馆预订系统演示视频

演示视频

基于小程序的篮球场馆预订系统演示图片

场馆类型.png

场馆信息.png

场馆预约.png

取消预约.png

失物招领.png

用户管理.png

基于小程序的篮球场馆预订系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from datetime import datetime, timedelta
import hashlib
import json

spark = SparkSession.builder.appName("BasketballCourtBookingSystem").config("spark.sql.adaptive.enabled", "true").getOrCreate()

def user_registration_handler(username, password, phone, email):
   existing_user = spark.sql(f"SELECT COUNT(*) as count FROM users WHERE username='{username}' OR phone='{phone}'").collect()[0]['count']
   if existing_user > 0:
       return {"status": "error", "message": "用户名或手机号已存在"}
   password_hash = hashlib.md5(password.encode()).hexdigest()
   current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
   user_id = spark.sql("SELECT COALESCE(MAX(user_id), 0) + 1 as next_id FROM users").collect()[0]['next_id']
   spark.sql(f"INSERT INTO users (user_id, username, password, phone, email, create_time, status) VALUES ({user_id}, '{username}', '{password_hash}', '{phone}', '{email}', '{current_time}', 1)")
   user_profile_data = {"user_id": user_id, "nickname": username, "avatar": "default.jpg", "gender": 0, "birthday": None, "address": "", "points": 0}
   spark.sql(f"INSERT INTO user_profiles (user_id, nickname, avatar, gender, birthday, address, points, update_time) VALUES ({user_id}, '{username}', 'default.jpg', 0, NULL, '', 0, '{current_time}')")
   welcome_message = f"欢迎{username}加入篮球场馆预订平台!"
   spark.sql(f"INSERT INTO system_notifications (user_id, title, content, create_time, is_read) VALUES ({user_id}, '欢迎消息', '{welcome_message}', '{current_time}', 0)")
   user_behavior_log = {"user_id": user_id, "action": "register", "ip_address": "127.0.0.1", "device_info": "mobile", "timestamp": current_time}
   spark.sql(f"INSERT INTO user_behavior_logs (user_id, action, ip_address, device_info, create_time) VALUES ({user_id}, 'register', '127.0.0.1', 'mobile', '{current_time}')")
   registration_stats = spark.sql("SELECT COUNT(*) as daily_count FROM users WHERE DATE(create_time) = CURRENT_DATE()").collect()[0]['daily_count']
   if registration_stats % 10 == 0:
       spark.sql(f"INSERT INTO system_statistics (stat_type, stat_value, record_date) VALUES ('daily_registration', {registration_stats}, '{datetime.now().date()}')")
   return {"status": "success", "message": "注册成功", "user_id": user_id, "token": hashlib.md5(f"{user_id}_{current_time}".encode()).hexdigest()}

def court_booking_handler(user_id, court_id, booking_date, start_time, end_time, booking_type):
   court_info = spark.sql(f"SELECT * FROM courts WHERE court_id={court_id} AND status=1").collect()
   if not court_info:
       return {"status": "error", "message": "场馆不存在或已关闭"}
   court_data = court_info[0]
   booking_datetime = f"{booking_date} {start_time}"
   end_datetime = f"{booking_date} {end_time}"
   current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
   if datetime.strptime(booking_datetime, "%Y-%m-%d %H:%M") <= datetime.now():
       return {"status": "error", "message": "预订时间不能早于当前时间"}
   conflicted_bookings = spark.sql(f"SELECT COUNT(*) as count FROM bookings WHERE court_id={court_id} AND booking_date='{booking_date}' AND status IN (1,2) AND ((start_time<='{start_time}' AND end_time>'{start_time}') OR (start_time<'{end_time}' AND end_time>='{end_time}') OR (start_time>='{start_time}' AND end_time<='{end_time}'))").collect()[0]['count']
   if conflicted_bookings > 0:
       return {"status": "error", "message": "该时间段已被预订"}
   booking_duration = (datetime.strptime(end_time, "%H:%M") - datetime.strptime(start_time, "%H:%M")).seconds / 3600
   total_price = float(court_data['hourly_rate']) * booking_duration
   if booking_type == "member":
       total_price *= 0.8
   booking_id = spark.sql("SELECT COALESCE(MAX(booking_id), 0) + 1 as next_id FROM bookings").collect()[0]['next_id']
   spark.sql(f"INSERT INTO bookings (booking_id, user_id, court_id, booking_date, start_time, end_time, booking_type, total_price, status, create_time) VALUES ({booking_id}, {user_id}, {court_id}, '{booking_date}', '{start_time}', '{end_time}', '{booking_type}', {total_price}, 1, '{current_time}')")
   user_bookings_count = spark.sql(f"SELECT COUNT(*) as count FROM bookings WHERE user_id={user_id} AND status IN (1,2,3)").collect()[0]['count']
   if user_bookings_count == 1:
       spark.sql(f"UPDATE user_profiles SET points = points + 10 WHERE user_id = {user_id}")
   booking_notification = f"您已成功预订{court_data['court_name']},时间:{booking_date} {start_time}-{end_time}"
   spark.sql(f"INSERT INTO system_notifications (user_id, title, content, create_time, is_read) VALUES ({user_id}, '预订成功', '{booking_notification}', '{current_time}', 0)")
   court_usage_stats = spark.sql(f"SELECT COUNT(*) as usage_count FROM bookings WHERE court_id={court_id} AND status=3").collect()[0]['usage_count']
   spark.sql(f"UPDATE courts SET total_bookings = total_bookings + 1, last_booking_time = '{current_time}' WHERE court_id = {court_id}")
   daily_revenue = spark.sql(f"SELECT COALESCE(SUM(total_price), 0) as revenue FROM bookings WHERE DATE(create_time) = CURRENT_DATE() AND status IN (2,3)").collect()[0]['revenue']
   spark.sql(f"INSERT INTO daily_statistics (stat_date, total_bookings, total_revenue, active_users) VALUES ('{datetime.now().date()}', 1, {total_price}, 1) ON DUPLICATE KEY UPDATE total_bookings = total_bookings + 1, total_revenue = total_revenue + {total_price}")
   return {"status": "success", "message": "预订成功", "booking_id": booking_id, "total_price": total_price}

def booking_cancellation_handler(user_id, booking_id, cancellation_reason):
   booking_info = spark.sql(f"SELECT * FROM bookings WHERE booking_id={booking_id} AND user_id={user_id}").collect()
   if not booking_info:
       return {"status": "error", "message": "预订记录不存在"}
   booking_data = booking_info[0]
   if booking_data['status'] not in [1, 2]:
       return {"status": "error", "message": "该预订无法取消"}
   booking_datetime = datetime.strptime(f"{booking_data['booking_date']} {booking_data['start_time']}", "%Y-%m-%d %H:%M")
   current_time = datetime.now()
   time_difference = (booking_datetime - current_time).total_seconds() / 3600
   if time_difference < 2:
       return {"status": "error", "message": "距离预订时间不足2小时,无法取消"}
   refund_amount = float(booking_data['total_price'])
   cancellation_fee = 0
   if time_difference < 24:
       cancellation_fee = refund_amount * 0.1
       refund_amount = refund_amount * 0.9
   elif time_difference < 48:
       cancellation_fee = refund_amount * 0.05
       refund_amount = refund_amount * 0.95
   current_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S")
   spark.sql(f"UPDATE bookings SET status = 4, cancellation_reason = '{cancellation_reason}', cancellation_time = '{current_time_str}', refund_amount = {refund_amount} WHERE booking_id = {booking_id}")
   cancellation_id = spark.sql("SELECT COALESCE(MAX(cancellation_id), 0) + 1 as next_id FROM booking_cancellations").collect()[0]['next_id']
   spark.sql(f"INSERT INTO booking_cancellations (cancellation_id, booking_id, user_id, cancellation_reason, cancellation_fee, refund_amount, process_status, create_time) VALUES ({cancellation_id}, {booking_id}, {user_id}, '{cancellation_reason}', {cancellation_fee}, {refund_amount}, 1, '{current_time_str}')")
   user_profile = spark.sql(f"SELECT points FROM user_profiles WHERE user_id={user_id}").collect()[0]
   penalty_points = 5 if time_difference < 24 else 2
   spark.sql(f"UPDATE user_profiles SET points = GREATEST(points - {penalty_points}, 0) WHERE user_id = {user_id}")
   cancellation_notification = f"您的预订已成功取消,退款金额:{refund_amount}元"
   if cancellation_fee > 0:
       cancellation_notification += f",手续费:{cancellation_fee}元"
   spark.sql(f"INSERT INTO system_notifications (user_id, title, content, create_time, is_read) VALUES ({user_id}, '取消预订', '{cancellation_notification}', '{current_time_str}', 0)")
   user_cancellation_count = spark.sql(f"SELECT COUNT(*) as count FROM booking_cancellations WHERE user_id={user_id} AND DATE(create_time) >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)").collect()[0]['count']
   if user_cancellation_count >= 3:
       spark.sql(f"INSERT INTO user_warnings (user_id, warning_type, warning_reason, create_time) VALUES ({user_id}, 'frequent_cancellation', '30天内频繁取消预订', '{current_time_str}')")
   court_cancellation_stats = spark.sql(f"SELECT COUNT(*) as cancel_count FROM booking_cancellations bc JOIN bookings b ON bc.booking_id = b.booking_id WHERE b.court_id = {booking_data['court_id']}").collect()[0]['cancel_count']
   spark.sql(f"UPDATE courts SET cancellation_rate = {court_cancellation_stats} / GREATEST(total_bookings, 1) * 100 WHERE court_id = {booking_data['court_id']}")
   return {"status": "success", "message": "取消成功", "refund_amount": refund_amount, "cancellation_fee": cancellation_fee}

基于小程序的篮球场馆预订系统文档展示

文档.png

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目