python学生管理系统之学生信息模块(文件操作)

在登录成功之后我们对登录模块进行下解析:

 if str(has256.en_hash(pwd)) == usdata[user]:
            print('❀❀欢迎{}老师进入管理系统❀❀'.format(user))
            home_page_show.second_show(user)
            break

在账户密码匹配成功后我们进入了第二界面,即老师的学生管理界面,每个老师管理的学生分别存储在不同的文件中,为了利于区分,在命名文件时直接取老师的账户名。其中second_show在模块home_page_show中,代码如下:

def second_show(teacher):
    while True:
        file1 = open('stu_show.txt', 'r', encoding='utf8')
        print(file1.read())
        n = input('请输入数字1-4进行相关操作:(其他键退出)')
        if n == '1':
            add_student(teacher)
        elif n == '2':
            del_student(teacher)
        elif n == '3':
            change_student(teacher)
        elif n == '4':
            show_student(teacher)
        else:
            break

与首页相类似通过文件对本页界面进行展示:
在这里插入图片描述
通过选择数字进行相关的操作。
1.首先介绍添加学生信息的模块

def add_student(teacher):
    while True:
        file_add = user_data.readalldata(teacher + '.json', {})
        student = file_add.get('allstudent', [])
        # stu_id = input('请输入学生ID:')
        stu_name = input('请输入学生姓名:')
        stu_age = input('请输入学生年龄:')
        stu_sex = input('请输入学生性别:')
        stu_tel = input('请输入学生电话:')

        student.append(
            {'ID': len(student) + 1, 'name': stu_name, 'age': stu_age, 'sex': stu_sex, 'tel': stu_tel, 'del': False})
        file_add['allstudent'] = student
        user_data.add_user(file_add, teacher)
        x = input('学生信息已添加!!\n1.继续添加\n2.返回\n:')
        if x == '2':
            break

在建立此模块是参数设置为老师的账户名,通过账户名命名的json文件来存储学生信息,其中文件格式为:

{
  "allstudent": [
    {
      "ID": 1,
      "name": "qwe",
      "age": "23",
      "sex": "nan",
      "tel": "123456789",
      "del": true
    },
    {
      "ID": 2,
      "name": "asd",
      "age": "23",
      "sex": "nan",
      "tel": "12354665453432",
      "del": false
    },
    {
      "ID": 3,
      "name": "wds",
      "age": "24",
      "sex": "nan",
      "tel": "15774000188",
      "del": false
    },
    {
      "ID": 4,
      "name": "jiajia",
      "age": "23",
      "sex": "nv",
      "tel": "12321312",
      "del": false
    }
  ]
}

为了能更方便的处理学生id的问题,增加了一个 ‘del’ 通过它对学生进行标记,每次添加学生信息时默认False状态,在后续的删除操作中对其进行改变赋值为True,当遍历时可以根据它进行遍历。其中最困难的地方也就是添加学生信息时的覆盖问题给出的解决方式与老师用户添加基本一致,有所不同的是学生信息都在一个字典的**‘allstudent’**键的值中,所以在最开始:student = file_add.get('allstudent', [])当文件为空时student默认为空列表。到了这里基本可以明白了 ,我们只需要对输入的数据添加进列表中就可以啦 ,我们的学生数据类型是字典。我们只需要把每个学生的信息全部加入这个列表中,之后可以将学生列表作为键 ‘allstudent’ 的值,最后将其写入json文件。至此学生数据已经全部能写入老师专属的json文件中。添加模块一写完,其实后续的模块都比较简单,每次自我感觉在添加元素时的覆盖问题都很麻烦。
2.删除模块如下:

def del_student(teacher):
    while True:
        file_add = user_data.readalldata(teacher + '.json', {})
        student = file_add.get('allstudent', [])
        # stu_id = input('请输入学生ID:')
        num = input('请输入你想删除的学号:')
        for i in student:
            if i['ID'] == int(num):
                i['del'] = True
        file_add['allstudent'] = student
        user_data.add_user(file_add, teacher)
        x = input('删除成功\n1.继续添加\n2.返回\n:')
        if x == '2':
            break

在之前就已经介绍,为了更好的利用id,添加啦 del键,通过改变它的值对学生列表进行假删(数据存在但是通过处理不让该数据被读取)同样将新处理完的列表添加到字典中,再写入json文件。而修改模块与此模块基本一致。
3.修改模块

def change_student(teacher):
    while True:
        file_add = user_data.readalldata(teacher + '.json', {})
        student = file_add.get('allstudent', [])
        # stu_id = input('请输入学生ID:')
        num = input('请输入你想修改的学号:')
        stu_name = input('请输入修改的姓名(输入为空时不改变):')
        stu_age = input('请输入修改的年龄(输入为空时不改变):')
        stu_sex = input('请输入修改的性别(输入为空时不改变):')
        stu_tel = input('请输入修改的电话(输入为空时不改变):')
        for i in student:
            if i['ID'] == int(num):
                if stu_name != '':
                    i['name'] = stu_name
                if stu_age != '':
                    i['age'] = stu_age
                if stu_sex != '':
                    i['sex'] = stu_sex
                if stu_tel != '':
                    i['tel'] = stu_tel
        # print(student)
        file_add['allstudent'] = student
        user_data.add_user(file_add, teacher)
        x = input('修改成功\n1.继续修改\n2.返回\n:')
        if x == '2':
            break

与删除模块无太多的改变。
4.查询模块
获取json文件的数据后,进行遍历,查看所有学生时只需对比 del 的值,如果已删除则不输出。根据姓名和ID也一样,在遍历中即使有相同姓名的学生也会依次根据判断进行遍历。

def show_student(techer):
    while True:
        x = input('1.查看所有学生\n2.根据姓名查找\n3.根据学号查找\n其他键(返回):\n\t请选择:')
        y = user_data.readalldata(techer + '.json', {})
        students = y.get('allstudent', [])
        # print(students)
        if not students:
            print('该老师还没有学员,请添加学员')
            return
        if x == '1':
            for i in students:
                if not i['del']:
                    print(' 学号:{ID}\n 姓名:{name}\n性别:{sex}\n年龄:{age}\n☎:{tel}'.format(**i))

        elif x == '2':
            flag = True
            na = input('请输入要查询的姓名:')
            for i in students:
                if i['name'] == na and not i['del']:
                    flag = False
                    print(' 学号:{ID}\n 姓名:{name}\n性别:{sex}\n年龄:{age}\n ☎:{tel}'.format(**i))
            if flag:
                print('没找到相关信息')
        elif x == '3':
            flag = True
            num = int(input('请输入要查询的ID:'))
            for i in students:
                if i['ID'] == num and not i['del']:
                    flag = False
                    print(' 学号:{ID}\n姓名:{name}\n性别:{sex}\n年龄:{age}\n☎:{tel}'.format(**i))
                    while True:
                        x = input('输入任意键返回')
                        break
            if flag:
                print('没找到相关信息')
        else:
            break

代码分享:链接:https://pan.baidu.com/s/1MoxAGe0ZsnpgOMLASXrONw
提取码:ef3e

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值