python-17-学生管理系统(实战)

目录结构:

student_page.txt:

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

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

welcome.txt:

===================================
     ** 欢迎来到XX管理系统 **

      ♦️ 1. 登      录
      ♦️ 2. 注      册
      ♦️ 3. 退      出

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

file_manager.py:

import json

base_dir = './files/'
#自己写注意改这里这个路径


def read_text(file_name):
    try:
        with open(base_dir + file_name, 'r', encoding='utf8') as file:
            msg = file.read()
            return msg
    except FileNotFoundError:
        print('读取文件失败,请检查路径')
        return ''


def read_json(json_name, non_data):
    try:
        with open(base_dir + json_name, 'r', encoding='utf8') as file:
            msg = file.read()
            return json.loads(msg)
    except FileNotFoundError:
        return non_data


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

index.py:

import file_manager
import model
import student_manager
import tools

USERS_FILE = 'teachers.json'


def login():
    all_user = file_manager.read_json(USERS_FILE, {})

    user_name = input('请输入账号:')
    if user_name not in all_user:
        print('登录失败!该账号没有注册!')
    else:
        password = input('请输入密码:')
        if tools.encrypt_password(password) == all_user[user_name]:
            # print('登录成功!')
            student_manager.USER_NAME = user_name
            student_manager.show_system()


def register():
    while True:
        user_name = input('请输入账号(3~6位):')
        if 3 <= len(user_name) <= 6:
            break
        print('账号不符合要求,请重新输入!')

    all_user = file_manager.read_json(USERS_FILE, {})

    if user_name in all_user:
        print("注册失败!该账号已经注册过!")
        return

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

    s = model.Teacher(user_name, password)
    all_user[s.name] = s.password
    file_manager.write_json(USERS_FILE, all_user)


def start():
    content = file_manager.read_text('welcome.txt')
    while True:
        print(content)
        value = input('请选择(1-3):')
        if value == '1':
            login()
        elif value == '2':
            register()
        elif value == '3':
            print('退出成功!')
            exit()
        else:
            print('输入有误!')


if __name__ == '__main__':
    start()

model.py

import tools


class Teacher(object):
    def __init__(self, name, password):
        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

student_manager.py

"""
学生管理系统的数据结构设置:
一个学生信息对应一个字典
整个系统的所有学生:所有学生对应一个列表,列表中的元素全是字典
整个系统:一个字典, 字典中有一个key(all_student)
对应的值是所有学生;
这个字典需要做数据持久化,将数据存储到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
}
"""

import file_manager
import model

USER_NAME = ''
ALL_STUDENT = 'all_student'
COUNT = 'count'


def del_student():
    system_data = file_manager.read_json(USER_NAME + '.json', {})
    all_student = system_data.get(ALL_STUDENT, [])
    if not all_student:
        print('该账号没有可管理的学生!请先添加学生!')
        return

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

    # 找到名字和删除学生名字相同的学生
    for stu in all_student:
        if stu[key] == value:
            del_studens.append(stu)
    if not del_studens:
        print('没有该学生!')
        return
    length = len(del_studens)
    for index, s in enumerate(del_studens):
        print(index, get_stu_message(s))

    try:
        choice = int(input('请输入需要删除的学生的标号(0~%d),q-返回:' % (length - 1)))
    except ValueError:
        return

    if not 0 <= choice <= length - 1:
        return

    # 删除对应的学生
    all_student.remove(del_studens[choice])
    system_data[ALL_STUDENT] = all_student
    file_manager.write_json(USER_NAME + '.json', system_data)
    print('删除成功!')


def add_student():
    system_data = file_manager.read_json(USER_NAME + '.json', {})
    all_student = system_data.get(ALL_STUDENT, [])

    while True:
        # 1.输入学生信息
        name = input('请输入姓名:')
        age = input('请输入年龄:')
        gender = input('请输入性别:')
        tel = input('请输入电话:')

        # 创建学号
        count = system_data.get(COUNT, 0)
        count += 1
        s_id = 'stu' + str(count).zfill(4)

        # 2.创建学生对象
        s = model.Student(s_id, name, age, gender, tel)

        # 4. 更新数据
        all_student.append(s.__dict__)
        system_data[ALL_STUDENT] = all_student
        system_data[COUNT] = count

        # 5. 更新文件
        file_manager.write_json(USER_NAME + '.json', system_data)
        print('添加成功!')

        # 6.给出选择
        value = input('1.继续\n2.返回\n请选择(1-2):')
        if value != '1':
            break


def get_stu_message(stu):
    return '学号:{s_id}, 姓名:{name},性别:{gender},年龄:{age}, ☎:{tel}'.format(**stu)


def find_student():
    all_student = file_manager.read_json(USER_NAME + '.json', {}).get(ALL_STUDENT, [])
    if not all_student:
        print('该账号没有可管理的学生!请先添加学生!')
        return

    print('1.查看所有学生\n2.根据姓名查找\n3.根据学号查找\n其他: 返回')
    value = input('请选择:')

    if value == '1':
        # 查看所有学生
        for stu in all_student:
            print(get_stu_message(stu))
    elif value == '2':
        # 根据姓名查找
        name = input('请输入学生名字:')
        flag = True  # 是否没有这个名字的学生
        for stu in all_student:
            if stu['name'] == name:
                print(get_stu_message(stu))
                flag = False
        if flag:
            print('没有该学生!')
    elif value == '3':
        # 根据学号查找
        study_id = input('请输入学生学号:')
        for stu in all_student:
            if stu['s_id'] == study_id:
                print(get_stu_message(stu))
                break
        else:
            print('没有该学生!')
    else:
        return


def show_system():
    content = file_manager.read_text('students_page.txt') % USER_NAME
    while True:
        print(content)
        value = input('请选择(1-5):')
        if value == '1':
            add_student()
        elif value == '2':
            find_student()
        elif value == '3':
            print('修改学生信息')
        elif value == '4':
            del_student()
        elif value == '5':
            return
        else:
            print('输入有误!')

tools.py :

import hashlib


def encrypt_password(pwd):
    sha = hashlib.sha256()
    sha.update(pwd.encode('utf8'))
    return sha.hexdigest()

这个是负责加密的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老板来片烤面包

君子博学于文,赠之以礼,谢君~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值