Python_学生选课系统_模块化开发_分层思想_V1.04版本(4)

创作不易,各位看官,点个赞收藏、关注必回关、QAQ、您的点赞是我更新的最大动力!



上一个版本V1.03 函数式编程开发+装饰器验证码:https://blog.csdn.net/weixin_44238683/article/details/105858449
#v1.04 开发日志 :
为什么要模块化开发? 代码分层思想 参考下图

模块化开发:
		main.py 程序运行入口,执行pythonmain.py启动项目
		views.py 视图定义模块,展示界面的函数都写在这个模块中
		data.py 数据存储模块,项目中所有的数据都包含在data.py模块中
		services.py 业务处理模块,所有操作数据的函数都写在这个模块中

去除上一个版本装饰器,有要验证码装饰器的可以看我上一个版本加进去

在这里插入图片描述
main.py

"""
项目名称:         管理员管理课程

时间:2020-5-09
作者:稳稳
版本:V1.04
使用软件及版本:Pycharm 2018.3.5
"""

import views
views.show_index()

views.py

"""
项目名称:        界面视图

时间:2020-5-09
作者:稳稳
使用软件及版本:Pycharm 2018.3.5
版本:V1.04 测试版
"""
import services
import os

# 用户登录界面跳转字典
show_index_dict = {
    "1":"services.login_check()",#用户登录
    "2":"services.user_regist()",#用户注册
    "3":"services.change_password()",#密码修改
    "4":"services.system_exit()"#系统退出
}

# 学生界面跳转字典
student_page_dict = {
    "1": "services.stu_choice_course()",  # 选课
    "2": "services.show_stu_courses()",  # 查看已选课程
    "3": "show_index()",  # 返回上一级
}
# 管理员界面跳转字典
admin_page_dict = {
    "1": "services.admin_show_courses()",  # 管理员查看课程
    "2": "services.admin_add_course()",  # 添加课程
    "3": "services.admin_remove_courses()",  # 删除课程
    "4": "show_index()"  # 返回上一级
}
#用户登录界面
def show_index():
    os.system("cls")
    # 打印主界面菜单
    print("         学生选课系统")
    print("◆" * 30)
    print("         1.用户登录[学生/管理员]")
    print("         2.用户注册")
    print("         3.密码修改")
    print("         4.退出系统")
    print("◆" * 30)

    # 提示用户输入选项
    choice = input("请输入您的选项:").strip()

    ret = show_index_dict.get(choice,"show_index()")
    res = eval(ret)
    if res != None:
        return eval(res)

# 学生界面
def student_page():
    print("◆" * 30)
    print("         1.选课")
    print("         2.查看已选课程")
    print("         3.任意键返回上一级")
    print("◆" * 30)

    # 提示用户输入选项
    choice = input("请输入您的选项:").strip()

    ret = student_page_dict.get(choice,"show_index()")
    res = eval(ret)
    if res != None:
        return eval(res)

# 管理员界面
def admin_page():
    print("◆" * 30)
    print("         1.查看课程")
    print("         2.添加课程")
    print("         3.删除课程")
    print("         4.任意键返回上一级")
    print("◆" * 30)

    # 提示用户输入选项
    choice = input("请输入您的选项:").strip()

    ret = admin_page_dict.get(choice,"show_index()")
    res = eval(ret)
    if res != None:
        return eval(res)

data.py

# - 数据类
#
# - 属性:课程数据courses_dict,以字典形式保存,类属性
#
# - 用户类
#
# - 属性:用户名,密码,昵称,邮箱,电话

#课程存储
course_dic = {
    "1":{"course":"Python"},
    "2":{"course":"Java"},
    "3":{"course":"Web"},
    "4":{"course":"unity"},
    "5":{"course":"UI"}
}

#管理员数据
admin_dic = {"admin":"123"}

#学生用户数据
users_dict = {
    "1":{"username":"1","password":"1","course":["Python"],
         "nickname":"稳稳","email":"[email protected]","phone":"电话"}


               }

services.py

import data



# 用户登录
def login_check():
    global username,password
    # 提示用户输入账户密码
    username = input("请输入您的账户:")
    password = input("请输入您的密码:")
    # 学生判断
    if username in data.users_dict:
        # 获取用户储存信息 并且根据账户获取密码
        data_password = data.users_dict.get(username).get("password")
        # 判断密码是否正确
        if password == data_password:
            # 跳转学生界面
            return "student_page()"
    # 管理员判断
    elif username in data.admin_dic:
        # 获取用户储存信息 并且根据账户获取密码
        data_password = data.admin_dic.get(username)
        # 判断密码是否正确
        if password == data_password:
            # 跳转管理员界面
                return "admin_page()"
    else :
        input("账户不存在或密码错误..按任意键返回主菜单")
        return "show_index()"

# 学生查已经选课
def show_stu_courses():
    # 获取用户已选课程数据
    user_course = data.users_dict.get(username).get('course')
    print(f"您已选择的课程:{user_course}")
    input("按任意键返回上一级")
    return "student_page()"

# 学生选课
def stu_choice_course():
    # 打印出可选课程信息
    print("课程编号\t课程名称")
    for key, value in data.course_dic.items():
        print(f"{key}\t\t{value.get('course')}")
    # 选课
    choice_course = input("请输入您的选项:").strip()
    if choice_course :
        # 通过用户输入的编号获取课程存储
        res = data.course_dic.get(choice_course).get("course")
        # 检测用户是否重复选择课程
        if res in data.users_dict.get(username).get('course'):
            input("您已选择该课程,请勿重复选择,按任意键返回上一级..")
            return "student_page()"
        # 用户课程数据没有 该课程
        else:
            data.users_dict.get(username).get('course').append(res)
            input(f"您已成功选择课程:{res}..按任意键返回上一级")
            return "student_page()"
    else:
        input("请输入正确的选项")
        return stu_choice_course()

# 管理员查看课程
def admin_show_courses():
    # 打印出可选课程信息
    print("课程编号\t课程名称")
    for key, value in data.course_dic.items():
        print(f"{key}\t\t{value.get('course')}")
    input("按任意键返回上一级")
    return "admin_page()"

# 管理员添加课程
def admin_add_course():
    # 提示管理员 添加课程名称
    add_course = input("请输入需要添加的课程名称: ").strip()
    # 根据已经存在的课程数量 获取编号建立如"6"
    id = str(len(data.course_dic) + 1)
    # 遍历出课程
    course_check = []
    for a in data.course_dic.values():
        b = a.get("course")
        course_check.append(b.upper())
    if add_course.upper() in course_check:
        input(f"您添加{add_course}课程已存在..按任意键返回上一级")
        return "admin_page()"
    else:
        data.course_dic[id] = {
            "course": add_course
        }
        input(f"您已成功添加课程{add_course}.按任意键返回上一级")
        return "admin_page()"

# 管理员删除课程
def admin_remove_courses():
    while True:
        # 展示已有课程
        print("课程编号\t课程名称")
        for key, value in data.course_dic.items():
            print(f"{key}\t\t{value.get('course')}")
        # 提示管理员 删除课程名
        rem_course = input("请输入需要删除的课程编号: ").strip()
        if rem_course in data.course_dic.keys():
            # 并且删除用户课程中的信息 TODO
            c = data.course_dic.get(rem_course).get("course")
            for d in data.users_dict.values():
                if c in d.get('course'):
                    d.get('course').remove(c)
                else:
                    break
            # 删除系统课程中
            data.course_dic.pop(rem_course)
            input("您已经成功删除,按任意键返回上一级.")
            return "admin_page()"
        else:
            input("请输入正确的课程编号!..按任意键继续")
            return "admin_page()"

# 用户注册
def user_regist():
    # 提示用户输入想要注册账户名
    username = input("请输入您的账户:")

    # 检测账户名是否已经存在库中
    if username in data.users_dict:
        input("对不起,您注册的账户已存在,按任意键返回主菜单")
        # 回到主页面
        return "show_index()"
    else:
        # 提示用户输入密码
        password = input("请输入注册账户密码:")
        confirm_ps = input("请再一次输入密码:")

        # 确保两次密码一致
        if password == confirm_ps:
            # 一致后录入注册信息
            data.users_dict[username] = {
                "username": username,
                "password": password,
                "course": []
            }
            input("注册成功,按任意键退出")
            return "show_index()"
        else:
            input("两次密码不一致,按任意键返回主菜单")
            return "show_index()"

# 密码修改
def change_password():
    username = input("请输入您原来的账户 : ").strip()
    password = input("请输入您原来的密码 :").strip()
    if username in data.users_dict:  # 检测用户输入的账户是否在 字典中
        user = data.users_dict.get(username)  # 根据键获取用户对应的值,
        if password in user.get("password"):  # get("password")即得到了对应的值
            while True:
                check_new_password = input("请输入您需要修改的新密码 : ")
                check_new_again = input("请再次输入您需要修改的新密码 : ")
                if check_new_password == check_new_again:
                    user["password"] = check_new_password
                    input("修改完毕。。按任意键返回上一级")
                    return "show_index()"
                else:
                    input("账户或者密码不存在,按任意键返回上一级")
                    return "show_index()"
        else:
            input("密码错误,按任意键返回上级")
            return "show_index()"
    else:
        input("账户不存在。。按任意键返回上级")
        return "show_index()"

# 系统退出
def system_exit():
    exit(1)

猜你喜欢

转载自blog.csdn.net/weixin_44238683/article/details/106069538