week2 学生管理系统 v2.0

1.较上一次更新内容:

  • 1.用户数据 (包括学生信息,用户账号信息) 现在可以存储在本地
  • 2.添加了教师 (用户) 的登录注册功能
  • 3.添加了用户权限控制

2.数据结构:

采用3个文件,分别储存不同的信息,类似于数据库的table.
文件1: sno.json
用于保存上一次学生的学号(方便下次添加学生时,学号的获取),不受删除的影响,
尝试过将此项数据保存在stu.json里面. 加在每一个学生的信息里,每次添加一个学生, 所有的学生信息里这一项数据都同时改变, 但是不知道什么原因会有报错, 于是决定单独存为一个文件, 独立保存.

[0,1,2,3,4]

文件2:stu.json
用于保存系统中所有的学生信息

[
{姓名, 学号, 年龄, 电话, 所属用户(是哪个用户添加的)}
{........................同上.....................}
{........................同上.....................}
]

文件3:tea.json
用于保存系统中所有用户(教师)的信息:

[
{账号1, 密码1}
{账号2, 密码2}
{....................}
]

3.主程序文件:    index.py

"""__author__ = Sun Jiankang"""
import apis


def print_stu_info():
    """
    打印学生信息
    :return:
    """
    print('姓名:', all_student[i][key_stu_name], '年龄:', all_student[i][key_stu_age], '电话:', all_student[i][key_stu_tel],
          '学号:', all_student[i][key_stu_no])



# 教师
key_tea_account = 'tea_name'        # 用户账号(教师姓名)
key_tea_passwd = 'passwd'           # 用户密码(教师密码)

# 学生
key_max_sno = 'max_sno'                 # 存放最后一个学生的学号
key_stu_name = 'stu_name'           # 学生姓名
key_stu_no = 'stu_no'               # 学生学号
key_stu_tel = 'stu_tel'             # 学生电话
key_stu_age = 'stu_age'             # 学生年龄
key_tea_account = 'tea_name'        # 关联的教师姓名(用户账号)

# max_sno = 0
# sno = 0               # 学号基数
all_teacher = []      # 定义一个空的列表保存教师信息,为了防止第一次操作文件添加数据的时候报错
all_student = []      # 定义一个空的列表保存学生信息.同上

while True:
    apis.show_first()
    opera = apis.user_input()

    # 退出
    if opera == 3:
        break

    # 注册
    elif opera == 1:
        while True:
            try:
                all_teacher = apis.read_file('./files/tea.json')        # 先将用户信息提取出来
            except:
                pass
            (account, passwd) = apis.show_reg()
            content = {key_tea_account: account, key_tea_passwd: passwd}
            flag = True
            for i in range(len(all_teacher)):                       # 遍历用户信息,如果有重复的,就不添加.
                if all_teacher[i][key_tea_account] == account:
                    print('用户名已存在,请重新输入!')
                    flag = False
                    break

            if flag:                                                # 如果用户名没有重复,就添加到文件中.
                all_teacher.append(content)
                apis.write_file('./files/tea.json', all_teacher)
                print('注册成功!')
                print('         请登录')
                print('1.注册', '2.登录', '3.退出', sep='\n')
                apis.user_input()
            break

    # 登录
    elif opera == 2:
        all_teacher = apis.read_file('./files/tea.json')  # 先将用户信息提取出来
        # print(all_teacher)
        while True:
            (account, passwd) = apis.login()                  # 输入登录账号和密码
            login_flag = 0
            for tea_i in range(len(all_teacher)):                 # 遍历用户信息,如果账号和密码匹配成功,则登录成功
                if all_teacher[tea_i][key_tea_account] == account:
                    if all_teacher[tea_i][key_tea_passwd] == passwd:
                        print('登录成功')
                        login_flag = 1              # 记录是否匹配成功(成功:1,失败:0)
                        break
            if login_flag:
                break
            else:
                print('用户不存在或密码错误请,重新登录')
                continue

        # 登录成功后进入信息管理系统:
        while True:
            apis.show_system()
            opera = apis.user_input()
            if opera == 4:
                break

            # 添加学生
            elif opera == 1:
                max_snos = []
                # temp_max_sno = 0
                while True:
                    try:
                        all_student = apis.read_file('./files/stu.json')        # 先取出所有学生
                    except:
                        pass
                    (name, age, tel) = apis.insert_stu_info()               # 输入要添加的学生信息
                    max_snos = apis.read_file('./files/sno.json')               # 读取存放学号的文件
                    if len(max_snos) < 1:
                        max_sno = 1
                    else:
                        max_sno = max_snos[len(max_snos)-1] + 1                 # 获取上一次添加的学号,并对这次的学号加1
                    stu_no = 'py1805' + str(max_sno).rjust(3, '0')
                    max_snos.append(max_sno)
                    apis.write_file('./files/sno.json', max_snos)               # 保存当前学号,写入文件

                    # 将所有学生信息存入文件
                    content = {key_stu_name: name, key_stu_age: age, key_stu_tel: tel, key_stu_no: stu_no, key_tea_account: all_teacher[tea_i][key_tea_account]}
                    all_student.append(content)
                    apis.write_file('./files/stu.json', all_student)

                    apis.insert_success()               # 写入文件成功,弹窗选择继续添加或者返回上一层
                    if apis.user_input() == 1:
                        continue
                    else:
                        apis.show_system()
                        break

            # 查找学生
            elif opera == 2:
                apis.show_search_stu()
                opera = apis.user_input()

                # 查看当前用户所属的所有学生信息
                if opera == 1:
                    flag = 1
                    all_student = apis.read_file('./files/stu.json')  # 取出所有学生
                    for i in range(len(all_student)):
                        if all_student[i][key_tea_account] == all_teacher[tea_i][key_tea_account]:
                            print_stu_info()
                            flag = 0
                    if flag:
                        print('没有查询到学生!!!!')

                # 按姓名查看学生
                elif opera == 2:
                    flag = 1
                    all_student = apis.read_file('./files/stu.json')  # 取出所有学生
                    input_name = input('请输入要查找的学生姓名>>>')
                    for i in range(len(all_student)):                   # 遍历出姓名匹配的学生,并且还要满足条件:是本用户添加的学生
                        if all_student[i][key_tea_account] == all_teacher[tea_i][key_tea_account] and input_name == all_student[i][key_stu_name]:
                            print_stu_info()
                            flag = 0
                    if flag:
                        print('没有这个学生')

                # 按学号查看学生
                elif opera == 3:
                    all_student = apis.read_file('./files/stu.json')  # 取出所有学生
                    input_sno = input('请输入要查找的学生学号>>>')
                    for i in range(len(all_student)):
                        if input_sno == all_student[i][key_stu_no]:
                            print_stu_info()

            # 删除学生
            elif opera == 3:
                all_student = apis.read_file('./files/stu.json')  # 取出所有学生
                input_name = input('请输入要删除的学生姓名>>>')     # 查找出符合条件的学生
                flag = 1
                for i in range(len(all_student)):
                    if all_student[i][key_tea_account] == all_teacher[tea_i][key_tea_account] and input_name == all_student[i][key_stu_name]:
                        print_stu_info()
                        flag = 0
                if flag:
                    print('没有这个学生')
                    continue
                value = input('请输入要删除的学生学号>>')            # 根据学号删除学生
                for i in range(len(all_student)):
                    if value == all_student[i][key_stu_no]:
                        del all_student[i]
                        break
                apis.write_file('./files/stu.json', all_student)
            else:
                print('333')



    else:
        print('输入错误,请重新输入!')
        apis.show_first()

4.####接口文件:    apis.py

"""__author__ = Sun Jiankang"""
import json

def show_first():
    """
    系统初始界面
    :return:
    """
    print('----------------------------')
    print('|    欢迎进入本系统         |')
    print('----------------------------')
    print('         请登录')
    print('1.注册', '2.登录', '3.退出', sep='\n')


def user_input():
    """
    用户输入数字选项,进行下一步操作
    :return: 返回选项编号
    """
    value = int(input('请选择要执行的操作>>>'))
    return value


def write_file(file_name, content):
    """
    导入内容
    :param file_name:
    :param content:
    :return:
    """
    with open(file_name, 'w', encoding='utf-8') as f:
        json.dump(content, f)

def read_file(filename):
    """
    读取文件内容
    :param filename:
    :param content:
    :return:
    """
    with open(filename, 'r', encoding='utf-8') as f:
        return json.load(f)

def show_reg():
    """
    注册界面
    :return:
    """
    print('-----注册-----')
    account = input('请输入账号>>>:')
    passwd = input('请输入密码>>>')
    return account, passwd


def login():
    """
    登录界面
    :return:
    """
    print('-----登录-----')
    account = input('请输入账号>>>:')
    passwd = input('请输入密码>>>')
    return account, passwd

def show_system():
    """
    学生信息管理首页
    :return:
    """
    print('----------------------------')
    print('|    学生信息管理页面        |')
    print('----------------------------')
    print('1.添加学生', '2.查找学生', '3.删除学生', '4.退出', sep='\n')

def insert_stu_info():
    """
    添加学生信息
    :return:
    """
    name = input('学生姓名>>>')
    age = input('年龄>>>')
    tel = input('电话>>>')
    return name, age, tel

def show_search_stu():
    """
    查找学生界面
    :return:
    """
    print('-----查找学生-----')
    print('1.查看所有学生')
    print('2.按姓名查找')
    print('3.按学号查找')
    print('4.返回')


def insert_success():
    """
    添加学生成功后打印后续选项
    :return:
    """
    print('添加成功!')
    print('1.继续添加')
    print('2.返回')




if __name__ == '__main__':
    pass

5.####运行效果:


week2 学生管理系统 v2.0_第1张图片
student_manager_system.gif

你可能感兴趣的:(week2 学生管理系统 v2.0)