学生管理系统 | 手把手教你入门Python之八十二

简介: 本节介绍了一个较为完整的学生管理系统的开发流程。

上一篇:生成器 | 手把手教你入门Python之八十一
下一篇:模块的使用| 手把手教你入门Python之八十三

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

学生管理系统

一个学生信息对应一个字典
整个系统的所有学生:所有学生对应一个列表,列表中的元素全是字典
整个系统:一个字典,字典中有一个key(all_student)
对应的值是所有学生;
这个字典需要做数据持久化,将数据存储到json文件中,文件名就是当前登录的账号名
jack.json

 {
    'all_student': [
        {'name':'张三', 'age':89, 'tel':'237837293'},
        {'name':'张三', 'age':89, 'tel':'237837293'},
        {'name':'张三', 'age':89, 'tel':'237837293'},
        {'name':'张三', 'age':89, 'tel':'237837293'}
    ],
    'num':4
}

新建文件:welcome.txt

===================================
     ** 欢迎xx来到学生管理系统 **

        ♦  1.    登      录

        ♦  2.    注      册

        ♦  3.    退      出

===================================

新建文件:students_page.txt

===================================
🌺🌺欢迎%s:

            ♥ 1.     添加学生
            ♥ 2.     查看学生
            ♥ 3.     修改学生信息
            ♥ 4.     删除学生
            ♥ 5.     返回
===================================

index.py:

import sys

import file_manager
import model
import student_manager
  

def register():
    # 读取文件,查看文件里是否有数据,如果文件不存在,默认是一个字典
    data = file_manager.read_json('data.json', {})
    while True:
        teacher_name = input('请输入账号(3~6位):')
        if not 3 <= len(teacher_name) <= 6:
            print('账号不符合要求,请重新输入!')
        else:
            break

    if teacher_name in data:
        print('注册失败!该账号已经注册过!')
        return

    while True:
        password = input('请输入密码(6~12):')
        if not 6 <= len(password) <= 12:
            print('密码不符合要求,请重新输入!')
        else:
            break
    

    # 用户名密码都已经输入正确以后,创建一个teacher对象{'zhang':'123456'}
    t = model.Teacher(teacher_name, password)
    data[t.name] = t.password
    # data[teacher_name] = password
    file_manager.write_json('teacher.json', teacher)

def login():
    # 读取文件,查看文件里是否有数据,如果文件不存在,默认是一个字典
    data = file_manager.read_json('data.json', {})
    teacher_name = input('请输入老师账号:')
    if teacher_name not in data:
        print('登录失败!该账号没有注册!')
        return
    password = input('请输入密码:')
    import tools
    if data[teacher_name] == tools.encrypt_password(password):
        student_manager.name = teacher_name
        student_manager.show_manager()
    else:
        print('密码错误,登录失败!')

def start():
    content = file_manager.read_file('welcome.txt')
    while True:
        operator = input(content + '\n请选择(1-3):')
        if operator == '1':
            login()
        elif operator == '2':
            register()
        elif operator =='3':
            # break  # 停止死循环
            # exit(0)  # 退出整个程序
            sys.exit(0)
        else:
            print('输入有误!')
    

if __name__ = '__main__':
    start() 

file_manager.py:

base_dir = './files/'

def read_file(file_name)
    try:
        with open('base_dir' + file_name, 'r', encoding='utf8') as file:
            content= file.read()
            return content
    except FileNotFoundError:
        print('文件未找到')


def write_json(file_name, data):
    with open(base_dir + file_name, 'w', encoding='utf8') as file:
        import json
        json.dump(data, file) 


def read_json(file_name, default_data):
    try:
        with open('base_dir' + file_name, 'r', encoding='utf8') as file:
            import json
            return json.load(file)
    except FileNotFoundError:
        # print('文件未找到')
        return default_data

student_manager.py:

import model

name = ''


def add_student():
    x = file_manager.read_json(name + '.json', {})
    if not x:
        students = []
        num = 0
    else:
        students = x['all_student']
        num = int(x['num'])
    while True:    
        s_name = input('请输入学生姓名:')
        s_age = input('请输入年龄:')
        s_gender = input('请输入性别:')
        s_tel = input('请输入电话号码:')
        
        num += 1
        # 字符串的zfill方法,在字符串的前面补0
        s_id = 'stu_' + str(num).zfill(4)

        # 创建一个Student对象
        s = model.Student(s_id, s_name, s_age, s_gender, s_tel)
    
        # {
        # 'all_student': [
        #       {'name':'zhangsan', 'age':18, 'gender':'男', 'tel':'110'},
        #       {'name':'zhangsan', 'age':18, 'gender':'男', 'tel':'110'}
        #   ],
        # 'num':2
        # }
        students.append(s.__dict__)

        # 拼接字典
        data = {'all_student': students, 'num':len(students)}
        # print(data)
        # 把数据写进文件里
        file_manager.write_json(name + '.json', data)
        choice = input('添加成功!\n1.继续\n2.返回\n请选择(1-2):')
        if choice =='2':
            break


def show_student():
    key = value = ''
    x = input('1.查看所有学生\n2.根据姓名查找\n3.根据学号查找\n其他:返回\n请选择:')
    y = file_manager.read_json(name + '.json', {})

    students = y.get('all_student', [])

    if not students:
        print('该老师还没有学员,请添加学员')
        return

    if x == '1':  # 查询所有
        pass
    elif x == '2':  
        value = input('请输入学员的姓名:')
        key = 'name'

    elif x == '3':
        value = input('请输入学员的id:')
        key = 's_id'

    else:
        return

    
    students = filter(lambda s: s.get(key, '') == value, students)

    if not students:
        print('未找到学员')
        return
    for Student in students:
        print('学号: {s_id}, 姓名: {name}, 性别: {gender}, 年龄: {age}, ☎: {tel}'.format(**student))   

def modify_student():
    pass

def delte_student():
    y = file_manager.read_json(name + '.json', {})
    students = y.get('all_student', [])
    key = value = ''

    if not students:
        print('该老师还没有学员,请添加学员')
        return

    input('1.按姓名删\n2.按学号删\n其他:返回\n请选择:')
    if num == '1'
        key = 'name'
        value = input ('请输入要删除的学生的名字:')
    elif num == '2'
        key = 's_id'
        value = input('请输入要删除的学生id:')
    else:
        return

    students = list(filter(lambda s: s.get(key, '') == value, all_students))
    if not students:
        print('没有找到对应的学生')
        return
    for x, s in enuerate(students):
        print('{x} 学号: {s_id}, 姓名: {name}, 性别: {gender}, 年龄: {age}, ☎: {tel}'.format(x=i, **s))

    n = input('请输入需要删除的学生的标号(0~{}),q-返回:'.format(i) # 使用变量 i 有潜在风险

    if not n.isdigit() or not 0 <= int(n) <= i:
        print('输入的内容不合法')
        return

    # 将学生从all_students里删除
    all_students.remove(students[int(n)])

    y['all_student'] = all_students
    file_manager.write_json(name + '.json', y)


def show_manager():
    # print('显示管理页面')
    content = file_manager.read_file('students_page.txt') % name
    while True:
        operator = input('请选择(1-5):')
        if operator == '1':
            add_student()
        elif operator == '2':
            show_student()
        elif operator == '3':
            modify_student()
        elif operator == '4':
            delte_student()
        elif operator == '5':
            break
        else:
            print('输入有误!')

model.py:

class Teacher(object):
    def __init__(self, name, password):
        import tools
        self.name = name
        self.password = tools.encrypt_password(password)


class Student(object):
    def __init__(self, s_id, name, age, gender, tel):
        self.s_id = s_id
        self.name = name
        self.age = age
        self.gender = gender
        self.tel = tel

tools.py:

import hashlib

def encrypt_password(passwd, x='afsoijweogj4wiu'):
    h = hashlib.sha256()
    h.update(passwd.encode('utf8'))  # 123456afsoijweogj4wiu
    h.update(x.encode('utf8'))
    return h.hexdigest()

data.json:

数据集

此系统存在的问题:学生id的问题,应该是用学生id的最大数+1去补充,否则可能会出现id重复。
另外,后续会利用数据库来处理此类问题。

配套视频

相关文章
|
23天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
232 55
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
11天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
103 66
|
1天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
14 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
1月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
167 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
14 3
|
4天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
4天前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
13天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
45 5
|
1月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!