美文网首页
Day10—作业

Day10—作业

作者: C0mpass | 来源:发表于2018-09-02 21:48 被阅读0次

学生管理系统

"""__author__=Zeng"""
import os
import json


# 登录界面
def sys_menu():
    print('='*7, '*', '欢迎来到学生管理系统', '*', '='*7)
    print(' 1. 登录\n',
          '2. 注册\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        sign_in()
    elif select_num == '2':
        user_register_name()
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        sys_menu()


def sign_in():
    user_name = input('请输入用户名(3-10位):')
    user_password = input('请输入密码(6-16位):')
    f = open('./Student-management/UsersInformation.json', 'r', encoding='utf8')
    info = json.load(f)
    if not info:
        print('登录失败!没有找到该用户名!请注册后再登录\n------')
        sys_menu()
    for i in range(len(info)):
        if info[i]['name'] == user_name:
            if info[i]['password'] == user_password:
                f.close()
                print('登录成功!\n------')
                interface_menu(user_name)
            else:
                print('登录失败!密码错误!\n------')
                sys_menu()
    else:
        f.close()
        print('登录失败!没有找到该用户名!请注册后再登录\n------')
        sys_menu()


def user_register_name():
    user_name = input('请输入用户名(3-10位):')
    f = open('./Student-management/UsersInformation.json', 'r', encoding='utf8')
    info = json.load(f)
    if not info:
        user_register_password(user_name)
    for i in range(len(info)):
        if info[i]['name'] == user_name:
            f.close()
            print('该用户名已存在!请从新输入!\n------')
            user_register_name()
    else:
        f.close()
        print('用户名可用!')
        user_register_password(user_name)


def user_register_password(user_name: str):
    user_password1 = input('请输入密码(6-16位):')
    user_password2 = input('请再次输入密码:')
    if user_password1 != user_password2:
        print('两次密码输入不一致!请从新输入!\n------')
        user_register_password(user_name)
    else:
        # 注册成功,并在用户信息文档中,添加用户信息
        list1 = []
        dict1 = {'name':user_name, 'password':user_password1}
        f = open('./Student-management/UsersInformation.json', 'r', encoding='utf8')
        info = json.load(f)
        f.close()
        if not info:
            list1.append(dict1)
            f1 = open('./Student-management/UsersInformation.json', 'w', encoding='utf8')
            json.dump(list1,f1)
            f1.close()
        else:
            info.append(dict1)
            f1 = open('./Student-management/UsersInformation.json', 'w', encoding='utf8')
            json.dump(info, f1)
            f1.close()
        # 添加用户信息后,为该用户创建一个单独的文件夹用来存放该用户的操作信息
        user_path = file_path + '\\Student-management\\User_space\\' + user_name + '//'
        if not os.path.exists(user_path):
            os.makedirs(user_path)
            f_path = user_path + '\\StudentInformation.json'
            if not os.path.exists(f_path):
                list1 = []
                f = open(f_path, 'w', encoding='utf-8')
                json.dump(list1, f)
                f.close()
        print('注册成功!\n------')
        sys_menu()


# 系统界面菜单
def interface_menu(user_name: str):
    print('='*7,'*','欢迎进入学生管理系统','*','='*7)
    print(' 1. 添加学生\n',
          '2. 删除学生\n',
          '3. 修改信息\n',
          '4. 查找信息\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        add_menu(user_name)
    elif select_num == '2':
        del_menu(user_name)
    elif select_num == '3':
        re_menu(user_name)
    elif select_num == '4':
        find_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        interface_menu(user_name)


# 添加学生功能部分
def add_menu(user_name: str):     # 添加学生界面菜单
    print('=' * 37)
    print(' 1. 开始添加\n',
          '2. 返回上一级\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        add_stud(user_name)
    elif select_num == '2':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        add_menu(user_name)


def add_stud(user_name):
    stu_name = input('请输入学生姓名:')
    stu_age = input('请输入学生年龄:')
    stu_num = input('请输入学生学号:')
    stu_tel = input('请输入学生电话:')
    stu_info = {'姓名': stu_name,
                '年龄': stu_age,
                '学号': stu_num,
                '电话': stu_tel}
    info = r_json(user_name)
    info.append(stu_info)
    w_json(user_name, info)
    print('添加成功!!!')
    cont_add(user_name)


def cont_add(user_name: str):
    print('=' * 37)
    print(' 1. 继续添加\n',
          '2. 返回首页\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        add_stud(user_name)
    elif select_num == '2':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        cont_add(user_name)


# 删除学生功能部分
def del_menu(user_name: str):     # 删除学生界面菜单
    print('=' * 37)
    print(' 1. 根据姓名删除\n',
          '2. 根据学号删除\n',
          '3. 返回上一级\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        del_stud(1, user_name)
    elif select_num == '2':
        del_stud(2, user_name)
    elif select_num == '3':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        del_menu(user_name)


def del_stud(id, user_name: str):
    if id == 1:
        s_name = input('请输入学生姓名:')
        name_list = []    # 创建一个新的列表,用来存放在json文件中获取的与输入姓名相同的学生信息
        id_list = []      # 创建一个新的列表,用来存放在在json文件中获取的与输入姓名相同的索引值
        i = 0            # 计算索引值
        count = 0         # 计算json文件中获取的与输入姓名相同的元素个数
        info = r_json(user_name)
        for item in info[:]:
            if item['姓名'] == s_name:
                name_list.append(item)   # 遍历json文件中与输入姓名相同的同学,并将信息存入name_list列表中
                id_list.append(i)        # 将存入name_list列表中的同学信息在json文件中的索引值存入id_list列表中
                count += 1               # 统计名字相同的个数
            i += 1                       # 每循环一次,索引值+1
        if not count:
            print('未找到该名字学生,请重新输入')
            del_menu(user_name)
        else:
            for j in range(count):
                print(j+1,'. ',name_list[j])
        del_id = int(input('请删除学生对应的编号(1 - %d):' % count)) - 1
        for x in range(count):
            if x == del_id:
                del info[id_list[x]]
                w_json(user_name, info)
                print('删除成功!!!')
                cont_del(0, user_name)
            else:
                print('删除错误!!!')
                del_menu(user_name)
    else:
        s_num = input('请输入学生学号:')
        y = 0  # 计算索引值
        info = r_json(user_name)
        for item in info[:]:
            if item['学号'] == s_num:
                del info[y]   # 遍历json文件中与输入学号相同的同学,并删除
                w_json(user_name, info)
                print('删除成功!!!')
                break
            y += 1
        else:
            print('未找到该名字学生,请重新选择')
            del_menu(user_name)
        cont_del(1, user_name)


def cont_del(did, user_name: str):
    did1 = did
    print('=' * 37)
    print(' 1. 继续删除\n',
          '2. 返回上一级\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        if did1 == 0:
            del_stud(1, user_name)
        else:
            del_stud(2, user_name)
    elif select_num == '2':
        del_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        cont_del(did1, user_name)


# 修改学生功能部分
def re_menu(user_name: str):     # 修改学生界面菜单
    print('=' * 37)
    print(' 1. 根据姓名修改\n',
          '2. 根据学号修改\n',
          '3. 返回上一级\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        re_stud(1, user_name)
    elif select_num == '2':
        re_stud(2, user_name)
    elif select_num == '3':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        del_menu(user_name)


def re_stud(id, user_name: str):
    if id == 1:
        s_name = input('请输入学生姓名:')
        name_list = []    # 创建一个新的列表,用来存放在json文件中获取的与输入姓名相同的学生信息
        id_list = []      # 创建一个新的列表,用来存放在在json文件中获取的与输入姓名相同的索引值
        i = 0            # 计算索引值
        count = 0         # 计算json文件中获取的与输入姓名相同的元素个数
        info = r_json(user_name)
        for item in info[:]:
            if item['姓名'] == s_name:
                name_list.append(item)   # 遍历json文件中与输入姓名相同的同学,并将信息存入name_list列表中
                id_list.append(i)        # 将存入name_list列表中的同学信息在json文件中的索引值存入id_list列表中
                count += 1               # 统计名字相同的个数
            i += 1                       # 每循环一次,索引值+1
        if not count:
            print('未找到该名字学生,请重新选择')
            re_menu(user_name)
        else:
            for j in range(count):
                print(j+1,'. ',name_list[j])
        del_id = int(input('请输入需修改学生对应的编号(1 - %d):' % count)) - 1
        for x in range(count):
            if x == del_id:
                re_info(x, user_name)
    else:
        s_num = input('请输入学生学号:')
        y = 0  # 计算索引值
        info = r_json(user_name)
        for item in info[:]:
            if item['学号'] == s_num:
                print('该同学信息为:\n', info[y])
                re_info(y, user_name)   # 遍历json文件中中与输入学号相同的同学,并修改
                print('修改成功!!!')
                break
            y += 1
        else:
            print('未找到该名字学生,请重新选择')
            re_menu(user_name)


def re_info(fid, user_name: str):
    fid2 = fid
    print('=' * 37)
    print(' 1. 修改学生姓名\n',
          '2. 修改学生年龄\n',
          '3. 修改学生学号\n',
          '4. 修改学生电话\n',
          '5. 返回上一级\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    info = r_json(user_name)
    select_num = input('请选择:')
    if select_num == '1':
        re_name = input('请输入修改后的姓名:')
        info[fid]['姓名'] = re_name
        w_json(user_name, info)
        print('修改成功!!!\n修改结果为:\n', info[fid])
    elif select_num == '2':
        re_age = input('请输入修改后的年龄:')
        info[fid]['年龄'] = re_age
        w_json(user_name, info)
        print('修改成功!!!\n修改结果为:\n', info[fid])
    elif select_num == '3':
        re_num = input('请输入修改后的学号:')
        info[fid]['年龄'] = re_num
        w_json(user_name, info)
        print('修改成功!!!\n修改结果为:\n', info[fid])
    elif select_num == '4':
        re_tel = input('请输入修改后的电话:')
        info[fid]['年龄'] = re_tel
        w_json(user_name, info)
        print('修改成功!!!\n修改结果为:\n', info[fid])
    elif select_num == '5':
        re_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        interface_menu(user_name)
    re_info(fid2, user_name)


# 查找学生功能部分
def find_menu(user_name: str):     # 查找学生界面菜单
    print('=' * 37)
    print(' 1. 查找所有学生\n',
          '2. 根据姓名查找\n',
          '3. 根据学号查找\n',
          '4. 返回上一级\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        find_stud(1, user_name)
    elif select_num == '2':
        find_stud(2, user_name)
    elif select_num == '3':
        find_stud(3, user_name)
    elif select_num == '4':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        del_menu(user_name)


def find_stud(id,user_name: str):
    info = r_json(user_name)
    if id == 1:
        print('所有同学信息如下所示:')
        for item in info[:]:
            print(item)
        print('查找成功!!!')
        find_menu(user_name)
    elif id == 2:
        s_name = input('请输入学生姓名:')
        name_list = []    # 创建一个新的列表,用来存放在json文件中获取的与输入姓名相同的学生信息
        id_list = []      # 创建一个新的列表,用来存放在在json文件中获取的与输入姓名相同的索引值
        i = 0            # 计算索引值
        count = 0         # 计算json文件中获取的与输入姓名相同的元素个数
        for item in info[:]:
            if item['姓名'] == s_name:
                name_list.append(item)   # 遍历json文件中与输入姓名相同的同学,并将信息存入name_list列表中
                id_list.append(i)        # 将存入name_list列表中的同学信息在json文件中的索引值存入id_list列表中
                count += 1               # 统计名字相同的个数
            i += 1                       # 每循环一次,索引值+1
        if not count:
            print('未找到该名字学生,请重新查找')
            cont_find(0, user_name)
        else:
            for j in range(count):
                print(j+1,'. ',name_list[j])
        print('查找成功!!!')
        cont_find(0, user_name)
    else:
        s_num = input('请输入学生学号:')
        y = 0  # 计算索引值
        for item in info[:]:
            if item['学号'] == s_num:
                print(info[y])   # 遍历json文件中与输入学号相同的同学,并输出
                print('查找成功!!!')
                break
            y += 1
        else:
            print('未找到该学号学生,请重新输入')
        cont_find(1, user_name)


def cont_find(id2,user_name: str):
    id3 = id2
    print('=' * 37)
    print(' 1. 继续查找\n',
          '2. 返回上一级\n',
          'q. 退出系统')
    print('=' * 37)
    # 根据输入数值进入相应操作界面
    select_num = input('请选择:')
    if select_num == '1':
        if id2 == 0:
            find_stud(2, user_name)
        else:
            find_stud(3, user_name)
    elif select_num == '2':
        find_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('选择错误,请选择重新')
        cont_find(id3, user_name)


# 读取json文件,并返回学生信息
def r_json(user_name: str):
    f = open('./Student-management/User_space/' + user_name + '/' + 'StudentInformation.json', 'r', encoding='utf8')
    info = json.load(f)
    f.close()
    return info


# 将更新后的信息重新写入json文件并保存
def w_json(user_name: str, list1: list):
    f = open('./Student-management/User_space/' + user_name + '/' + 'StudentInformation.json', 'w', encoding='utf8')
    json.dump(list1, f)
    f.close()


# 在程序运行时,在当前路径下为管理系统创建数据存放文件夹
file_path = os.getcwd()  # 返回当前工作目录
sys_path = file_path + '\\Student-management//'
if not os.path.exists(sys_path):
    os.makedirs(sys_path)
    f_path = file_path + '\\Student-management\\UsersInformation.json'
    if not os.path.exists(f_path):
        list1 = []
        f = open(f_path, 'w', encoding='utf-8')
        json.dump(list1,f)
        f.close()

sys_menu()

相关文章

网友评论

      本文标题:Day10—作业

      本文链接:https://www.haomeiwen.com/subject/cpkvwftx.html