美文网首页
day10-homework

day10-homework

作者: rzlong | 来源:发表于2018-09-01 17:17 被阅读0次

    基于json保存数据的简单学生管理系统

    """
    __author__ = 'rz'
    __Time__ = 2018/8/31 0031 下午 8:05
    """
    
    import json
    import getpass #用于控制台input输入密码隐藏化
    
    def menu():
        """
        主功能界面
        :return: 
        """
        print("*"*53)
        print('*' + ' '*51 + '*')
        print('*' + 'Student Manager System'.center(51,' ') + '*')
        print('*' + '1.Log in'.center(51,' ') + '*')
        print('*' + '2.Register'.center(51,' ') + '*')
        print('*' + '0.Exit '.center(51,' ') + '*')
        print('*' + ' ' * 51 + '*')
        print("*" * 53)
        while True:
            option = input('输入选项:')
            if option == '1':
                login()
            elif option == '2':
                register()
            elif option == '0':
                exit()
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择功能项!')
    
    def login():
        """
        用户登录
        :return: 
        """
        print('*' + 'starting login'.center(50, ' ') + '*')
        f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
        res = f1.read()
        f1.close()
        sys_info_list = json.loads(res)  # 将文本中的json格式转换成python中格式,此处为list
        while True:
            t_id = input('输入id:')
            t_pwd = getpass.getpass('输入密码:')
            for n in range(len(sys_info_list)):
                if sys_info_list[n]['id'] == t_id and sys_info_list[n]['pwd'] == t_pwd:
                    submenu(sys_info_list[n])  ##将该用户的字典信息返回
            else:
                print('没有该用户或用户密码不匹配,请重新登录')
    
    
    
    def register():
        """
        用户注册
        :return: 
        """
        print('*' + 'starting register'.center(50, ' ') + '*')
        f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
        res = f1.read()
        f1.close()
        sys_info_list = json.loads(res)  # 将文本中的json格式转换成python中格式,此处为list
        while True:
            t_id = input('输入用户id:')
            for n in range(len(sys_info_list)):
                if t_id == sys_info_list[n]['id']:
                    print('该用户id已存在.')
                    break
                elif t_id == '':
                    print('用户id不能为空.')
                    break
            else:
                break
        t_user = input('输入用户名:')
        while True:
            t_pwd = getpass.getpass('输入密码:')
            t_pwd2 = getpass.getpass('确认密码:')
            if t_pwd != t_pwd2:
                print('密码不一致')
            else:
                break
    
        new_info_dict = {}
        new_info_dict['id'] = t_id
        new_info_dict['user'] = t_user
        new_info_dict['pwd'] = t_pwd
        new_info_dict['students'] = []
        sys_info_list.append(new_info_dict)
        sys_info_json = json.dumps(sys_info_list)  #将添加完信息的列表转换成json格式
        f2 =open('./rmyfile/system_info.json','w',encoding='utf-8')
        f2.write(sys_info_json)
        print('用户:%s' % t_id + '注册成功')
        f2.close()
    
        print('选项:继续注册1/返回上一级0')
        while True:
            option = input('请输入选项:')
            if option == '1':
                register()
            elif option == '0':
                menu()
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择.')
    
    
    def submenu(teacher_dict:dict):
        """
        子功能界面-用户登录后
        :param teacher_dict: 
        :return: 
        """
        print("*" * 53)
        print('*' + ('Welcome to you - %s'%teacher_dict['user']).center(50, ' ')  + '*')
        print('*' + '1.Add student'.center(50, ' ') + '*')
        print('*' + '2.Edit student'.center(50, ' ') + '*')
        print('*' + '3.Query student'.center(50, ' ') + '*')
        print('*' + '4.Delete student'.center(50, ' ') + '*')
        print('*' + '5.Return menu'.center(50, ' ') + '*')
        print('*' + '0.Exit'.center(50, ' ') + '*')
        print("*" * 53)
        while True:
            option = input('输入选项:')
            if option == '1':
                add_student(teacher_dict)
            elif option == '2':
                edit_student(teacher_dict)
            elif option == '3':
                query_student(teacher_dict)
            elif option == '4':
                delete_student(teacher_dict)
            elif option == '5':
                menu()
            elif option == '0':
                exit()
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择功能项!')
    
    def add_student(teacher_dict:dict):
        print('*' + 'Adding student'.center(50, ' ') + '*')
        f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
        res = f1.read()
        f1.close()
        sys_info_list = json.loads(res)  # 将文本中的json格式转换成python中格式,此处为list
        stu_name = input('输入学生姓名:')
        while True:
            stu_id = input('输入学生学号:')
            if stu_id == '':
                continue
            for n in range(len(teacher_dict['students'])): #学号一定不能相同
                if stu_id == teacher_dict['students'][n]['stuid']:
                    print('学号已被占用,请重置.')
                    break
            else: #注意若是上面的break结束循环,是不会执行else的
                break
    
        age = input('输入年龄:')
        phone = input('输入电话号码:')
        student_dcit = {'stuname':stu_name,'stuid':stu_id,'age':age,'phone':phone} #生成的新学生字典
        t_index = sys_info_list.index(teacher_dict) #教师字典信息在系统信息列表的索引
        sys_info_list[t_index]['students'].append(student_dcit) #添加新学生到系统信息列表
        sys_info_json = json.dumps(sys_info_list)
        f2 = open('./rmyfile/system_info.json', 'w', encoding='utf-8')
        f2.write(sys_info_json)
        f2.close()
        print('添加学生( %s )成功.\n' % stu_name)
        print('选项:继续添加1/返回上一级0')
        while True:
            option = input('请输入选项:')
            if option == '1':
                add_student(sys_info_list[t_index])
            elif option == '0':
                submenu(sys_info_list[t_index])
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择.\n')
    def edit_student(teacher_dict:dict):
        print('*' + 'Editing student'.center(50, ' ') + '*')
        print('你的所有学生信息如下:')
        for n in range(len(teacher_dict['students'])): #打印全部学生
            print(teacher_dict['students'][n])
    
        f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
        res = f1.read()
        f1.close()
        sys_info_list = json.loads(res)  # 将文本中的json格式转换成python中格式,此处为list
        t_index = sys_info_list.index(teacher_dict)  # 教师字典信息在系统信息列表的索引
        while True:
            edit_id = input('输入需要修改的学生id:')  # 先不做输入得不到学生id的情形
            mark = 0
            if edit_id == '':
                continue
            for n in range(len(teacher_dict['students'])):
                if teacher_dict['students'][n]['stuid'] == edit_id: #找到匹配的学生
                    edit_name = input('修改名字:')
                    edit_age = input('修改年龄:')
                    edit_phone = input('修改电话号码:')
                    teacher_dict['students'][n]['stuname'] = edit_name
                    teacher_dict['students'][n]['age'] = edit_age
                    teacher_dict['students'][n]['phone'] = edit_phone
                    sys_info_list[t_index]['students'][n] = teacher_dict['students'][n].copy() #修改对应的学生的字典
                    mark = 1
                    sys_info_json = json.dumps(sys_info_list)
                    f2 = open('./rmyfile/system_info.json', 'w', encoding='utf-8')
                    f2.write(sys_info_json)
                    f2.close()
                    print('修改学生信息成功.\n')
                    break
            if not mark:
                print('欲修改的学生不存在( %s ).\n' % edit_id)
            break
        print('选项:继续修改1/返回上一级0')
        while True:
            option = input('请输入选项:')
            if option == '1':
                edit_student(sys_info_list[t_index])
            elif option == '0':
                submenu(sys_info_list[t_index])
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择.')
    
    def delete_student(teacher_dict:dict):
        print('*' + 'Deleting student'.center(50, ' ') + '*')
        print('你的所有学生信息如下:')
        for n in range(len(teacher_dict['students'])):  # 打印全部学生
            print(teacher_dict['students'][n])
        f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
        res = f1.read()
        f1.close()
        sys_info_list = json.loads(res)  # 将文本中的json格式转换成python中格式,此处为list
        t_index = sys_info_list.index(teacher_dict)  # 教师字典信息在系统信息列表的索引
        while True:
            del_id = input('输入需要删除的学生id:')  # 先不做输入得不到学生id的情形
            mark = 0
            if del_id == '':
                continue
            for n in range(len(teacher_dict['students'])):
                if teacher_dict['students'][n]['stuid'] == del_id:  # 找到匹配的学生id
                    sys_info_list[t_index]['students'].pop(n)  #删除对应学生的字典
                    sys_info_json = json.dumps(sys_info_list)
                    f2 = open('./rmyfile/system_info.json', 'w', encoding='utf-8')
                    f2.write(sys_info_json)
                    f2.close()
                    print('删除学生( %s )成功.\n' % del_id)
                    mark = 1
                    break
            if not mark: #若没有这名学生给提示信息
                print('没有id( %s )的学生\n' % del_id)
            break
        print('选项:继续删除1/返回上一级0')
        while True:
            option = input('请输入选项:')
            if option == '1':
                delete_student(sys_info_list[t_index])
            elif option == '0':
                submenu(sys_info_list[t_index])
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择.')
    
    
    def query_student(teacher_dict:dict):
        print('*' + 'Querying student'.center(51, ' ') + '*')
        print('*' + ' ' * 51 + '*')
        print('*' + '1.Query by student name'.center(51, ' ') + '*')
        print('*' + '2.Query by student id'.center(51, ' ') + '*')
        print('*' + '3.Query by age'.center(51, ' ') + '*')
        while True:
            option = input('请输入选项:')
            if option == '1':
                query_student_name(teacher_dict)
            elif option == '2':
                query_student_id(teacher_dict)
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择.')
    
    def query_student_name(teacher_dict:dict):
        print('*' + 'Querying by name'.center(51, ' ') + '*')
        query_name = input('输入需要查询的学生姓名:')
        count = 0
        for n in range(len(teacher_dict['students'])):
            if query_name in teacher_dict['students'][n]['stuname']:
                count += 1
                print(teacher_dict['students'][n])
        print('总共为您找到%d条记录\n' % count)
        print('选项:继续查询1/返回上一级0')
        while True:
            option = input('请输入选项:')
            if option == '1':
                query_student(teacher_dict)
            elif option == '0':
                submenu(teacher_dict)
            elif option == '':
                continue
            else:
                print('输入有误,请重新选择.')
    
    
    def query_student_id(teacher_dict:dict):
        print('*' + 'Querying by id'.center(51, ' ') + '*')
        query_id = input('输入需要查询的学生学号:')
        count = 0
        for n in range(len(teacher_dict['students'])):
            if query_id == teacher_dict['students'][n]['stuid']:
                count += 1
                print(teacher_dict['students'][n])
        print('总共为您找到%d条记录\n' % count)
        print('选项:继续查询1/返回上一级0')
        while True:
            option = input('请输入选项:')
            if option == '1':
                query_student(teacher_dict)
            elif option == '0':
                submenu(teacher_dict)
            else:
                print('输入有误,请重新选择.')
    
    if __name__ == '__main__':
        menu()
    

    注:对部分信息的输入没有进行判断

    相关文章

      网友评论

          本文标题:day10-homework

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