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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章