quot;健身会员管理系统:一键注册预约全攻略quot;

张开发
2026/4/21 5:36:28 15 分钟阅读

分享文章

quot;健身会员管理系统:一键注册预约全攻略quot;
功能具体要求功能 说明注册新会员 输入手机号、姓名、卡类型1月卡/2季卡/3年卡。若手机号已存在则提示错误并重新输入。根据卡类型设置初始剩余天数月卡30天季卡90天年卡365天。初始积分为0。注册成功后显示提示信息。查看所有会员 按手机号顺序打印每个会员的手机号、姓名、卡类型、剩余天数、积分。若无会员则提示“暂无会员信息”。查询会员信息 输入手机号若存在则显示该会员的详细信息和当前积分。若不存在则提示“会员不存在”。续费会员卡 输入手机号若不存在则提示错误若存在则显示当前卡类型和剩余天数然后输入续费类型1/2/3。续费后叠加对应的天数并增加积分月卡50分季卡150分年卡600分。续费成功后显示更新后的信息。添加新课程 输入课程编号、课程名称、教练姓名、容量上限。若编号已存在则提示错误并重新输入。容量必须为正整数初始已预约人数为0。添加成功后显示提示。查看所有课程 按课程编号顺序打印每门课程的编号、名称、教练、容量、已预约人数、剩余名额。若无课程则提示“暂无课程信息”。预约课程 输入会员手机号若不存在则提示错误并返回若存在但剩余天数 ≤ 0 则提示“会员卡已过期无法预约”否则继续输入课程编号。若课程不存在则提示错误若课程已预约人数等于容量则提示“该课程已约满”否则预约成功课程已预约人数加1会员积分增加10分并记录一条预约日志到 reservations 列表中日期输入格式 YYYY-MM-DD。成功后显示“预约成功积分10”。统计信息 输出以下统计内容- 会员总数以及各卡类型月卡/季卡/年卡的会员人数- 积分最高的会员信息手机号、姓名、积分若有多人并列则显示第一个- 预约率最高的课程信息课程编号、名称、预约率即 booked/capacity若无课程则跳过- 剩余名额为0的课程列表编号、名称若无则提示“所有课程均有空位”显示预约日志 按时间顺序打印 reservations 中的每条记录格式清晰。若无日志则提示“暂无预约记录”。退出系统 结束程序。二、函数设计约束重点考察部分必须按以下函数划分来组织代码每个函数负责明确的功能主程序仅负责菜单调度与用户交互。pythondef register_member(members: dict) - None:处理注册新会员逻辑更新 members 字典passdef show_all_members(members: dict) - None:打印所有会员信息若无会员则输出提示passdef query_member(members: dict) - None:按手机号查询并打印会员详细信息passdef renew_membership(members: dict) - None:处理会员卡续费逻辑更新剩余天数和积分passdef add_course(courses: dict) - None:处理添加新课程逻辑更新 courses 字典passdef show_all_courses(courses: dict) - None:打印所有课程信息若无课程则输出提示passdef reserve_course(members: dict, courses: dict, reservations: list) - None:处理课程预约逻辑更新课程已约人数、会员积分并记录预约日志passdef get_statistics(members: dict, courses: dict) - dict:返回统计信息字典包含- total_members: 会员总数- type_counts: {月卡: 人数, 季卡: 人数, 年卡: 人数}- top_points_member: (手机号, 姓名, 积分) 或 None- top_booking_course: (课程编号, 名称, 预约率) 或 None- full_courses: 预约满的课程列表元素为 (编号, 名称)passdef show_statistics(members: dict, courses: dict) - None:调用 get_statistics 并格式化打印统计结果passdef show_reservations(reservations: list) - None:打印所有预约操作日志passdef main():主菜单循环pass额外要求使用类型注解如函数签名中所示增强代码可读性。在适当位置使用 if/elif/else 进行条件判断例如菜单分支、手机号存在性、课程容量判断。在统计信息计算、遍历容器时必须使用循环如 for 遍历字典的 items()。对用户输入的卡类型和容量等进行合法性校验非数字或超出范围时提示重新输入。日期格式不要求严格校验但需按字符串正确记录。 功能具体要求 功能 说明 注册新会员 输入手机号、姓名、卡类型1月卡/2季卡/3年卡。若手机号已存在则提示错误并重新输入。根据卡类型设置初始剩余天数月卡30天季卡90天年卡365天。初始积分为0。注册成功后显示提示信息。 查看所有会员 按手机号顺序打印每个会员的手机号、姓名、卡类型、剩余天数、积分。若无会员则提示“暂无会员信息”。 查询会员信息 输入手机号若存在则显示该会员的详细信息和当前积分。若不存在则提示“会员不存在”。 续费会员卡 输入手机号若不存在则提示错误若存在则显示当前卡类型和剩余天数然后输入续费类型1/2/3。续费后叠加对应的天数并增加积分月卡50分季卡150分年卡600分。续费成功后显示更新后的信息。 添加新课程 输入课程编号、课程名称、教练姓名、容量上限。若编号已存在则提示错误并重新输入。容量必须为正整数初始已预约人数为0。添加成功后显示提示。 查看所有课程 按课程编号顺序打印每门课程的编号、名称、教练、容量、已预约人数、剩余名额。若无课程则提示“暂无课程信息”。 预约课程 输入会员手机号若不存在则提示错误并返回若存在但剩余天数 ≤ 0 则提示“会员卡已过期无法预约”否则继续输入课程编号。若课程不存在则提示错误若课程已预约人数等于容量则提示“该课程已约满”否则预约成功课程已预约人数加1会员积分增加10分并记录一条预约日志到 reservations 列表中日期输入格式 YYYY-MM-DD。成功后显示“预约成功积分10”。 统计信息 输出以下统计内容 - 会员总数以及各卡类型月卡/季卡/年卡的会员人数 - 积分最高的会员信息手机号、姓名、积分若有多人并列则显示第一个 - 预约率最高的课程信息课程编号、名称、预约率即 booked/capacity若无课程则跳过 - 剩余名额为0的课程列表编号、名称若无则提示“所有课程均有空位” 显示预约日志 按时间顺序打印 reservations 中的每条记录格式清晰。若无日志则提示“暂无预约记录”。 退出系统 结束程序。 二、函数设计约束重点考察部分 必须按以下函数划分来组织代码每个函数负责明确的功能主程序仅负责菜单调度与用户交互。 python def register_member(members: dict) - None: 处理注册新会员逻辑更新 members 字典 pass def show_all_members(members: dict) - None: 打印所有会员信息若无会员则输出提示 pass def query_member(members: dict) - None: 按手机号查询并打印会员详细信息 pass def renew_membership(members: dict) - None: 处理会员卡续费逻辑更新剩余天数和积分 pass def add_course(courses: dict) - None: 处理添加新课程逻辑更新 courses 字典 pass def show_all_courses(courses: dict) - None: 打印所有课程信息若无课程则输出提示 pass def reserve_course(members: dict, courses: dict, reservations: list) - None: 处理课程预约逻辑更新课程已约人数、会员积分并记录预约日志 pass def get_statistics(members: dict, courses: dict) - dict: 返回统计信息字典包含 - total_members: 会员总数 - type_counts: {月卡: 人数, 季卡: 人数, 年卡: 人数} - top_points_member: (手机号, 姓名, 积分) 或 None - top_booking_course: (课程编号, 名称, 预约率) 或 None - full_courses: 预约满的课程列表元素为 (编号, 名称) pass def show_statistics(members: dict, courses: dict) - None: 调用 get_statistics 并格式化打印统计结果 pass def show_reservations(reservations: list) - None: 打印所有预约操作日志 pass def main(): 主菜单循环 pass 额外要求 使用类型注解如函数签名中所示增强代码可读性。 在适当位置使用 if/elif/else 进行条件判断例如菜单分支、手机号存在性、课程容量判断。 在统计信息计算、遍历容器时必须使用循环如 for 遍历字典的 items()。 对用户输入的卡类型和容量等进行合法性校验非数字或超出范围时提示重新输入。 日期格式不要求严格校验但需按字符串正确记录。 # 添加字符串实现功能 str1 1. 注册新会员 2. 查看所有会员 3. 查询会员信息 4. 续费会员卡 5. 添加新课程 6. 查看所有课程 7. 预约课程 8. 统计信息 9. 显示预约日志 10. 退出系统 # 使用一个字典 members 作为会员主数据容器键为会员手机号字符串11位值为另一个字典包含 # # name姓名字符串 # # type卡类型月卡、季卡、年卡字符串 # # remain_days剩余有效天数整数 # # points积分余额整数 menbers { 15209060630:{ name:李一桐, type:年卡, remain_days:53, points:90, }, 15210140713:{ name:田曦薇, type:年卡, remain_days:35, points:96, } } # 使用一个字典 courses 作为课程主数据容器键为课程编号字符串格式如 C101值为另一个字典包含 # # name课程名称字符串 # # coach教练姓名字符串 # # capacity课程容量上限整数 # # booked当前已预约人数整数 courses { A001:{ name:跳绳, coach:碳纤维, capacity:40, booked:0, }, A002:{ name:跑步, coach:李雪, capacity:40, booked:0, } } # 使用一个列表 reservations 记录每一次预约操作的日志每条日志为元组格式为 # (预约, 会员手机号, 会员姓名, 课程编号, 课程名称, 预约日期) reservations [] # 注册新会员 输入手机号、姓名、卡类型1月卡/2季卡/3年卡。若手机号已存在则提示错误并重新输入。 # 根据卡类型设置初始剩余天数月卡30天季卡90天年卡365天。初始积分为0。注册成功后显示提示信息。 def register_member(members: dict) - None: 处理注册新会员逻辑更新 members 字典 global remain_days while True: print(新会员注册开始) phone input(请输入手机号码) if phone in members: print(f{phone}会员已存在) else: new_name input(请输入名字) new_type input(请输入需要办理的会员卡类型卡类型1月卡/2季卡/3年卡) if new_type 1: new_remain_days 30 new_points 0 elif new_type 2: new_remain_days 90 new_points 0 elif new_type 3: new_remain_days 365 new_points 0 else: print(输入错误请重新输入) dict1 {name: new_name, type: new_type, remain_days: new_remain_days, points: new_points } members[phone] dict1 print(f会员{new_name}已添加成功) # 查看所有会员 按手机号顺序打印每个会员的手机号、姓名、卡类型、剩余天数、积分。 # 若无会员则提示“暂无会员信息”。 def show_all_members(members: dict) - None: 打印所有会员信息若无会员则输出提示 if len(members)0: print(暂无会员信息) else: for phone, member in members.items(): print(f会员号{phone},姓名为{member[name]},办卡类型{member[type]},剩余天数{member[remain_days]},积分为{member[points]}) # 查询会员信息 输入手机号若存在则显示该会员的详细信息和当前积分。若不存在则提示“会员不存在”。 def query_member(members: dict) - None: 按手机号查询并打印会员详细信息 phone input(请输入手机号) if phone in members: print( f会员号{phone},姓名为{members[name]},办卡类型{members[type]},剩余天数{members[remain_days]},积分为{members[points]}) else: print(会员不存在) # 续费会员卡 输入手机号若不存在则提示错误若存在则显示当前卡类型和剩余天数然后输入续费类型1/2/3。 # 续费后叠加对应的天数并增加积分月卡50分季卡150分年卡600分。 # 续费成功后显示更新后的信息。 def renew_membership(members: dict) - None: 处理会员卡续费逻辑更新剩余天数和积分 phone input(请输入手机号) if phone not in members: print(会员不存在错误) else: for id,member in members.items(): print(f该{phone}的会员当前卡类型为{type}还剩余{members[id][remain_days]}天) break while True: type_add input(请选择续费类型1月卡/2季卡/3年卡:) if type_add 1: days_add 30 add_points 50 elif type_add 2: days_add 90 add_points 150 elif type_add 3: days_add 365 add_points 600 else: print(输入错误请重新输入) members[phone][remain_days] days_add members[phone][points] add_points print(恭喜续费成功) for id,member in members.items(): print(f最新信息为剩余天数为{members[id][remain_days]},积分为{members[id][points]}) break # 添加新课程 输入课程编号、课程名称、教练姓名、容量上限。若编号已存在则提示错误并重新输入。 # 容量必须为正整数初始已预约人数为0。添加成功后显示提示。 def add_course(courses: dict) - None: 处理添加新课程逻辑更新 courses 字典 while True: cid input(请输入课程编号) if cid in courses: print(编号已存在请重新输入) continue name input(请输入课程名) cocah input(请输入教练名字) while True: capacity int(input(请输入课程容量)) if capacity 0: print(请重新输入必须是正整数) break courses[cid] {name: name, coach: cocah, capacity: capacity, booked: 0 } for id,course in courses.items(): print(f恭喜你添加成功) print(f课程名为{cid},名称为{name},容量为{capacity}) break # 查看所有课程 按课程编号顺序打印每门课程的编号、名称、教练、容量、已预约人数、剩余名额。若无课程则提示“暂无课程信息”。 def show_all_courses(courses: dict) - None: 打印所有课程信息若无课程则输出提示 if len(courses)0: print(暂无此课程) return else: for cid,course in courses.items(): capacity course[capacity] booked course[booked] other capacity booked print(f课程名为{cid},名称为{course[name]},容量为{course[coach]},容量{course[capacity]},已约{course[booked]},剩余{other}) # 预约课程 输入会员手机号若不存在则提示错误并返回若存在但剩余天数 ≤ 0 则提示“会员卡已过期无法预约” # 否则继续输入课程编号。 # 若课程不存在则提示错误若课程已预约人数等于容量则提示“该课程已约满” # 否则预约成功课程已预约人数加1会员积分增加10分 # 并记录一条预约日志到 reservations 列表中日期输入格式 YYYY-MM-DD。成功后显示“预约成功积分10”。 def reserve_course(members: dict, courses: dict, reservations: list) - None: 处理课程预约逻辑更新课程已约人数、会员积分并记录预约日志 phone input(请输入会员手机号) if phone not in members: print(会员不存在请重新输入) return if members[phone][remain_days] 0: print(会员卡已过期无法预约) return cid input(请输入课程编号) if cid not in courses: print(该课程已约满) return course courses[cid] if courses[cid][booked] courses[cid][capacity]: print(该课程已约满) else: print(预约成功) courses[cid][booked] 1 members[phone][points] 10 date input(请输入日期日期输入格式 YYYY-MM-DD) log (预约, phone, members[phone][name], cid, courses[cid][name], date) reservations.append(log) # 统计信息 输出以下统计内容 # - 会员总数以及各卡类型月卡/季卡/年卡的会员人数 # - 积分最高的会员信息手机号、姓名、积分若有多人并列则显示第一个 # - 预约率最高的课程信息课程编号、名称、预约率即 booked/capacity若无课程则跳过 # - 剩余名额为0的课程列表编号、名称若无则提示“所有课程均有空位” def get_statistics(members: dict, courses: dict) - dict: 返回统计信息字典包含 - total_members: 会员总数 - type_counts: {月卡: 人数, 季卡: 人数, 年卡: 人数} - top_points_member: (手机号, 姓名, 积分) 或 None - top_booking_course: (课程编号, 名称, 预约率) 或 None - full_courses: 预约满的课程列表元素为 (编号, 名称) total len(members) type_counts {月卡:0,季卡:0,年卡:0} top_points_member None max_points -1 for phone,member in members.items(): if member[type] in type_counts: type_counts[member[type]] 1 if member[points]max_points: max_points member[points] for cid,course in courses.items(): top_points_member (phone,member[name],member[remain_days],courses[capacity],courses[booked]) break top_course None max_yuyue -1 full_courses [] for cid,course in courses.items(): if course[capacity] 0: yuyuelv 0 else: yuyuelv course[booked]/course[capacity] if yuyuelv max_yuyue: max_yuyue yuyuelv top_course (cid,course[name],round(yuyuelv,2)) if course[booked] course[capacity]: full_courses.append(cid,course[name]) return { total_members: total, type_counts: type_counts, top_points_member: top_points_member, top_course: top_course, full_courses: full_courses } def show_statistics(members: dict, courses: dict) - None: # 调用 get_statistics 并格式化打印统计结果 str2 get_statistics(menbers, courses) print(统计信息) print(f会员总数为{str2[total_members]}) type_count1 str2[type_counts] print(f月卡会员有{type_count1[月卡]}人季卡会员有{type_count1[季卡]}人年卡会员有{type_count1[年卡]}人) if str2[top_points_member] : phone,name,points str2[top_points_member] print(f积分最高会员为手机号{phone},姓名{name},积分{points}) else: print(暂无会员) if str2[top_booking_course]: cid, name, rate str2[top_booking_course] print(f预约率最高课程编号 {cid}名称 {name}预约率 {rate:.2%}) else: print(暂无课程无预约率信息) # 满员课程 full_list str2[full_courses] if full_list: print(\n已约满的课程) for cid, name in full_list: print(f 编号{cid}名称{name}) else: print(\n所有课程均有空位) print(\n) def show_reservations(reservations: list) - None: 打印所有预约操作日志 if not reservations: print(暂无预约记录) return print( 预约日志按时间顺序 ) for idx, log in enumerate(reservations, 1): act, phone, name, cid, cname, date log print(f{idx}. {act} | 会员{name}({phone}) | 课程{cname}({cid}) | 日期{date}) print(\n) def main(): 主菜单循环 menbers {} courses {} reservations [] print(健身房 会员与课程预约管理系统) while True: print(str1) choice input(\n请输入功能选项数字) if choice 1: register_member(menbers) elif choice 2: show_all_members(menbers) elif choice 3: query_member(menbers) elif choice 4: renew_membership(menbers) elif choice 5: add_course(courses) elif choice 6: show_all_courses(courses) elif choice 7: reserve_course(menbers, courses, reservations) elif choice 8: show_statistics(menbers, courses) elif choice 9: show_reservations(reservations) elif choice 10: print(感谢使用系统已退出) break else: print(输入无效请输入 1-10 之间的数字) main()

更多文章