Python学生选课系统函数式开发

"""
#conding=utf-8
#Version:python3.6.6
#Tolls:Pycharm 2019.2.3
项目名称='python '
文件名= '学生信息管理系统'
时间=' 2020/02/02 0030 17:16'
作者='席世超'
"""
import time

# 管理员数据
admin = ("admin", ["admin"])
# 学员数据
student_dict = dict()
# 课程数据
classes_dict = dict()
# 选课数据
selected_dict = dict()
# 当前登录用户
login_user = None

show_login_index_dict = {'1':'manage_login()',     #管理员登录
                         '2':'student_login()',     #登录
                         '3':'student_register()',  #注册
                         '4':'log_out()'}           #退出
#管理员菜单
manage_index_menu_dict = {'1':'add_curriculum()', #增加课程
                          '2':'see_curriculum()',#查看课程
                          '3':'see_student()',#查看会员
                          '4':'show_login_index()',#返回登录菜单
                          '5':'log_out()'}#安全退出

see_curriculum_dict = {'1':'add_curriculum()',#增加课程
                       '2':'amend_curriculum()',#修改课程
                       '3':'del_curriculum()',#删除课程
                       }
#学生菜单
student_index_menu_dict = {'1':'seemy_data()',
                           '2':'alter_password()',
                           '3':'see_all_classer()',
                           '4':'see_my_classer()',
                           '5':'student_index_menu()',
                           '6':'log_out()'}

student_choice_dict = {'1':'my_data_perfection()',
                           '2':'student_index_menu()'}

def show_login_index():
    """开始登录菜单"""
    print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~")
    print("           学生信息管理系统\n")
    print("           1、管理员登录")
    print("           2、登录账号")
    print("           3、注册账号")
    print("           4、安全退出")
    print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~")
    choice = input("请输入选项")
    option = show_login_index_dict.get(choice, 'show_login_index()')
    return eval(option)


def manage_login():
    """管理员登录"""
    username = input("请输入管理员账号\n").strip()
    password = input("请输入管理员密码\n").strip()
    if username == admin[0] and password == admin[1][0]:
        input("登录成功")
        return manage_index_menu()
    else:
        input("账号或密码不正确,请确认您是否管理员身份,(任意键返回首页)")
        show_login_index()


def student_login():
    """学生登录"""
    global login_user
    username = input("请输入账号\n").strip()
    password = input("请输入密码\n").strip()
    if username in student_dict:
        if password == student_dict.get(username).get('password'):
            login_user = student_dict.get(username)
            return student_index_menu()
        else:
            input("您的密码不正确请重新登录")
            return show_login_index()
    else:
        input("您的账号不正确请重新登录")
        return show_login_index()




def student_register():
    """学生注册"""
    username = input("请输入账号\n").strip()
    if username in student_dict:
        input("您输入的账号已存在请重新注册")
        return show_login_index()
    name = input("请输入姓名")
    password = input("请输入密码\n").strip()
    affirm = input("请再次输入密码\n").strip()
    if password != affirm:
        input("您的两次密码不一致请重新注册(按任意键返回)")
        return show_login_index()
    else:
        #创建新账户
        user = {"username": username, "password": password,"name":name,
                "email": None, "phone": None, "address": None,
                "reg_no": None, "gender": None, "age": None}
        student_dict[username] = user
        input("注册成功,返回登录")
        selected_dict[username] = dict()
        return show_login_index()


def log_out():
    """系统安全退出"""
    for i in range(3):
        print(f"系统将在{3-i}秒后退出请保存好您的数据")
        time.sleep(1)
    exit(1)


def manage_index_menu():
    """管理员首页菜单"""
    print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~")
    print("           管理员首页\n")
    print("           1、增加课程")
    print("           2、查看课程")
    print("           3、查看会员")
    print("           4、返回登录菜单")
    print("           5、安全退出")
    print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~")
    choice = input("请输入选项").strip()
    option = manage_index_menu_dict.get(choice,'manage_index_menu()')
    return eval(option)



def add_curriculum():
    """增加课程"""
    name = input("请输入你要添加的课程名\n").strip()
    if name in classes_dict:
        choice = input("课程以存在请录入其他课程(按任意键继续按“q”键返回上一级)").lower()
        if choice == 'q':
            return manage_index_menu()
        return add_curriculum()
    teacher = input("请输入课程讲师").strip()
    score = input("请输入课程学分").strip()
    count = input("请输入学习人数上限").strip()
    times = input("请输入课程学时").strip()
    desc = input("请输入课程描述").strip()
    clazz = {"name": name, "score": score, "count": count, 'selected': 0,
             "times": times, "desc": desc, "teacher": teacher}
    classes_dict[name] = clazz
    input("课程录入完成,按任意键返回上一级")
    return manage_index_menu()


def see_curriculum():
    """查看课程"""
    print("课程名称\t学分\t学时\t讲师\t  课程描述")
    print("----------------------------------------")
    for i in classes_dict.values():
        print(f"{i['name']}\t{i['score']}\t{i['times']}\t"
              f"{i['teacher']}\t{i['desc']}\t\n")
    print("----------------------------------------")
    res = input("1、增加课程|2、修改课程|3、删除课程|任意键返回上一级")
    option = see_curriculum_dict.get(res,'manage_index_menu()')
    return eval(option)


def amend_curriculum():
    """修改课程"""
    choice = input("请输入要修改的课程名")
    if choice in classes_dict:
        xiugai= input("1、修改人数上限|2、修改课程学分|3、修改课程学时|4、修改课程描述\n"
                      "请输入对应的编号进行修改")
        if xiugai == '1':
            count = input("请输入要修改的人数上限")
            classes_dict[choice]['count'] = count
            return see_curriculum()
        elif xiugai == '2':
            score = input("请输入要修改的学分")
            classes_dict[choice]['score'] = score
            return see_curriculum()
        elif xiugai == '3':
            times = input("请输入要修改的学时")
            classes_dict[choice]['times'] = times
            return see_curriculum()
        elif xiugai == '4':
            desc = input("请输入要修改的课程描述")
            classes_dict[choice]['desc'] = desc
            return see_curriculum()
        else:
            input("请输入正确的编号按任意键重新输入")
            return amend_curriculum()
    else:
        input("请输入正确的课程名")
        return see_curriculum()


def del_curriculum():
    """删除课程"""
    name = input("请输入要删除的课程名")
    if name in classes_dict:
        res = input("是否要删除,请输入y/n").lower()
        if res == 'y':
            classes_dict.pop(name)
            input("删除成功,任意键返回")
            return see_curriculum()
        elif res == 'n':
            return see_curriculum()
        else:
            input("输入错误任意键返回")
            return see_curriculum()


def see_student():
    """查看会员"""
    print(" 学号\t姓名\t年龄")
    for i in student_dict:
        print(f"{student_dict[i]['username']}"
              f"\t{student_dict[i]['name']}"
              f"\t{student_dict[i]['age']}")
    res = input("1、查看单个会员详细信息|任意键返回上一级")
    if res == '1':
        return see_only_student()
    else:
        return manage_index_menu()


def see_only_student():
    """查看单个会员"""
    username = input("请输入学号")
    if username in student_dict:
        student = student_dict[username]
        print(f"姓名:{student.get('name')}\t"
              f"年龄:{student.get('age','待完善')}\t"
              f"email:{student.get('email','待完善')}\t")
    else:
        input("您输入的学生不存在")
        return see_only_student()


def student_index_menu():
    """学生首页"""
    print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~")
    print("           管理员首页\n")
    print("           1、查看个人资料")
    print("           2、修改登录密码")
    print("           3、查看所有课程")
    print("           4、查看已选课程")
    print("           5、返回登录菜单")
    print("           6、安全退出")
    print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~")
    choice = input("请输入选项").strip()
    option = student_index_menu_dict.get(choice, 'student_index_menu()')
    return eval(option)


def seemy_data():
    """查看个人资料"""
    print("#####################")
    print(f"   账号:{login_user.get('username')}")
    print(f"   性别:{login_user.get('gender', '待完善')}")
    print(f"   年龄:{login_user.get('age', '待完善')}")
    print(f"   手机:{login_user.get('phone', '待完善')}")
    print(f" 身份证:{login_user.get('reg_no', '待完善')}")
    print(f"   邮箱:{login_user.get('email', '待完善')}")
    print(f"   地址:{login_user.get('address', '待完善')}")
    print("#####################")
    res = input("\n信息展示完成,(1-完善个人资料;2-返回学员首页)")
    return eval(student_choice_dict.get(res, "student_index_menu()"))


def my_data_perfection():
    """完善个人资料"""
    choice = input("请输入要完善的信息|gender(性别)|age(年龄)|phone(电话)"
                   "|reg_no(身份证ID)|email(邮箱)|address(家庭住址)")
    if choice == 'gender':
        gender = input("请输入性别")
        login_user['gender'] = gender
    elif choice == 'age':
        age = input("请输入年龄")
        login_user['age'] = age
    elif choice == 'phone':
        phone = input("请输入电话")
        login_user['phone'] = phone
    elif choice == 'reg_no':
        reg_no = input("请输入身份证ID")
        login_user['reg_no'] = reg_no
    elif choice == 'email':
        email = input("请输入email")
        login_user['email'] = email
    elif choice == 'address':
        address = input("请输入家庭地址")
        login_user['address'] = address
    input("资料修改完毕按任意键返回查看个人信息")
    return seemy_data()


def alter_password():
    """修改密码"""
    print("~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~")
    print("                 密码修改")
    choies_oldpasswd = input("请输入旧密码")
    if choies_oldpasswd == login_user['password']:
        choies_newpasswd1 = input("请输入新密码")
        choies_newpasswd2 = input("请在输入一遍")
        if choies_newpasswd1 == choies_newpasswd2:
            login_user['password'] = choies_newpasswd2
            input("密码修改成功,按任意键返回重新登录")
            return student_index_menu()
        else:
            print("两次密码不对")
            return alter_password()
    else:
        print("旧密码不正确")
        alter_password()


def see_all_classer():
    """查看所有课程"""
    print("课程名称\t学分\t学时\t讲师\t  课程描述")
    print("----------------------------------------")
    for i in classes_dict.values():
        print(f"{i['name']}\t{i['score']}\t{i['times']}\t"
              f"{i['teacher']}\t{i['desc']}\t\n")
    print("----------------------------------------")
    res = input("1、选课|任意键返回上一级")
    if res == '1':
        return classer_choice()
    else:
        return student_index_menu()


def classer_choice():
    """课程选课"""
    name1 = input("请输入要选择的课程的名称")
    if name1 in classes_dict:
        if int(classes_dict[name1]['selected']) < int(classes_dict[name1]['count']):
            selected_dict[login_user.get('username')][name1] = classes_dict[name1].copy()
            selected_dict[login_user.get("username")][name1].update({"studied": 0, "status": "learning"})
            classes_dict[name1]['selected'] = int(classes_dict[name1]['selected']) + 1
            input("课程选择结束返回菜单")
            return student_index_menu()
        else:
            input("课程已满,请选择其他课程")
    else:
        res = input("没有这门课,任意键请重新选择,或者按q键返回菜单")
        if res == 'q':
            return student_index_menu()
        else:
            return classer_choice()


def see_my_classer():
    """查看已选课程"""
    my_classer = selected_dict.get(login_user['username'])
    if my_classer != None:
        print("课程名称\t学分\t学时\t已学习(次)\t  学习状态")
        print("----------------------------------------")
        for classer in my_classer.values():
            print(f"{classer['name']}\t"
                  f"{classer['score']}\t"
                  f"{classer['times']}\t"
                  f"{classer['studied']}\t"
                  f"{classer['status']}")
        res = input("1、学习课程|任意键返回首页")
        if res == '1':
            res1 = input("请输入你要学的课程")
            print("正在学习Ing")
            time.sleep(3)
            print(my_classer)
            my_classer[res1]['studied'] += 1
        return seemy_data()
    else:
        input("当前用户还没有选课请返回选课")
        return student_index_menu()


#系统运行
show_login_index()

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值