【Python】学生信息管理系统

目录

一、欢迎界面

1.登录

2.注册

二、学生信息管理界面

1.添加学生

2.查看学生

3.删除学生

4.学生信息管理界面

三.部分文件及功能函数

1.功能函数:

 2.文件展示

3.代码

四.代码运行(部分功能展示截图)

 五.源码及资料

一、欢迎界面

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

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

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

1.登录

(1)登录成功后可进入学生信息管理界面

(2)账号不存在,提示账号有误

(3)密码有误,提示登陆失败

# 登录函数
def login():
    # 读取已经注册的用户信息
    user_info = read_file('user_info.txt', {})

    user_name = str(input('请输入用户名:'))
    password = str(input('请输入密码:'))

    # 判断用户是否存在
    if user_name not in user_info:
        print('账号不存在!')
    # 判断密码是否正确
    elif password != user_info[user_name]:
        print('密码有误,登陆失败!')
    else:
        print('登录成功!')
        # 进入学生信息管理界面
        stu_manage()

2.注册

(1)注册成功,将注册信息写入文本。可使用{‘user_name’:’password’} 字典格式。

(2)判断账号、密码长度,不服的要求提示 不符合要求,重新输入

(3)账号存在,提示 用户名已存在

# 注册函数
def register():
    # 读取已经注册的用户信息
    user_info = read_file('user_info.txt', {})
    while True:
        user_name = str(input('请输入用户名:'))
        # 判断用户名长度是否符合要求
        if len(user_name) < 6 or len(user_name) > 12:
            print('用户名长度应在6到12之间,请重新输入!')
            continue
        # 判断用户名是否存在
        if user_name in user_info:
            print('用户名已存在,请重新输入!')
            continue
        break

    while True:
        password = str(input('请输入密码:'))
        # 判断密码长度是否符合要求
        if len(password) < 6 or len(password) > 12:
            print('密码长度应在6到12之间,请重新输入!')
            continue
        break

    # 将用户注册信息保存到文件中
    with open('../file/user_info.txt', 'a', encoding='utf8') as f:  # 改为覆盖写入模式(w)
        f.write(f'{user_name},{password}\n')
    print('注册成功!')

二、学生信息管理界面

====================================
🌺🌺欢迎:

♥ 1. 添加学生
♥ 2. 查看学生
♥ 3. 删除学生
♥ 4. 返回
======================================

定义学生类Student:

# 学生类
class Student:
    def __init__(self, name, age, sex, tel):
        self.name = name
        self.age = age
        self.sex = sex
        self.tel = tel

    def __repr__(self):
        return f"姓名:{self.name}\t年龄:{self.age}\t性别:{self.sex}\t电话:{self.tel}\n"

定义学生信息管理类StudentInfoManager:

# 学生信息管理类
class StudentInfoManager:

以下功能实现都会加在此类中。

1.添加学生

# 添加学生
    @staticmethod
    def add_student():
        name = input("请输入学生姓名:")
        age = int(input("请输入学生年龄:"))
        while True:  # 循环验证学生性别输入是否合法
            sex = input("请输入学生性别(男/女):")
            if sex == '男' or sex == '女':
                break
            else:
                print("输入错误,请重新输入!")
        while True:  # 循环验证学生电话输入是否合法
            tel = input("请输入学生电话(11):")
            if len(tel) != 11:
                print("电话号码长度不正确,请重新输入!")
            else:
                with open("../file/student_info.txt", "r+", encoding='utf8') as f:
                    if os.path.getsize("../file/student_info.txt") == 0:
                        data = {"all_students": [], "num": 0}
                    else:
                        data = json.load(f)
                exist = False
                for student in data["all_students"]:
                    if student["tel"] == tel:
                        exist = True
                        break
                if exist:
                    print("该电话已被使用,请重新输入!")
                else:
                    break
        stu = Student(name, age, sex, tel)
        with open("../file/student_info.txt", "r+", encoding='utf8') as f:
            if os.path.getsize("../file/student_info.txt") == 0:
                data = {"all_students": [], "num": 0}
            else:
                data = json.load(f)
            data["all_students"].append(stu.__dict__)
            data["num"] += 1
            f.seek(0)
            json.dump(data, f, ensure_ascii=False)
            f.truncate()
        print("学生信息已添加成功!")

2.查看学生

(1)查看所有学生,显示所有学生信息

 # 查看所有学生
    @staticmethod
    def show_students():
        with open("../file/student_info.txt", "r", encoding='utf8') as f:
            try:
                data = json.load(f)
                for i, stu in enumerate(data["all_students"], 1):
                    print(f"{i}. {Student(**stu)}")
            except:
                print('当前没有录入学生信息')

(2)根据姓名查找

# 根据姓名查找学生
    @staticmethod
    def search_student_by_name():
        name = input('请输入要查看的姓名:')
        with open("../file/student_info.txt", "r", encoding='utf8') as f:
            data = json.load(f)
            for i, stu in enumerate(data["all_students"], 1):
                if stu["name"] == name:
                    print(f"学生信息如下:\n{i}. {Student(**stu)}")
                    return True
            print(f"未找到姓名为{name}的学生!")
            return False

3.删除学生

(1)按照姓名删除 

        输入姓名,展示带标号的学生信息,输入要删除的学生编号,实现学生信息在文本中的删除

# 删除学生
    @staticmethod
    def delete_student_by_name():
        name = input('请输入要删除的姓名:')
        with open("../file/student_info.txt", "r+", encoding='utf8') as f:
            data = json.load(f)
            new_data = {"all_students": [], "num": data["num"] - 1}
            for i, stu in enumerate(data["all_students"], 1):
                if stu["name"] == name:
                    print(f"学生信息如下:\n{i}. {Student(**stu)}")
                    choice = input("是否删除该学生信息?(Y/N)").strip().lower()
                    if choice == "y":
                        continue
                new_data["all_students"].append(stu)
            f.seek(0)
            json.dump(new_data, f, ensure_ascii=False)
            f.truncate()
            print(f"学生信息已删除!")

    def add_info(self):
        pass

    def search_info(self):
        pass

    def delete_info(self):
        pass

4.学生信息管理界面

# 学生信息管理
def stu_manage():
    # 学生类
    student_manager = StudentInfoManager()
    while True:
        # 学生信息管理界面
        content = read_text('student_page.txt')
        print(content)
        # 选择操作
        option = input("请选择操作:")
        if option == "1":
            student_manager.add_student()
        elif option == "2":
            while True:
                choice = input('请选择查看方式\n\t1.查看所有学生\n\t2.根据学生姓名查找\n\t3.返回\n请选择:')
                if choice == '1':
                    student_manager.show_students()
                elif choice == '2':
                    student_manager.search_student_by_name()
                elif choice == '3':
                    break
                else:
                    print("输入错误,请重新输入!")
        elif option == "3":
            student_manager.delete_student_by_name()
        elif option == '4':
            break
        else:
            print("输入错误,请重新输入")

三.部分文件及功能函数

1.功能函数:

# 读取文件信息
def read_file(file_name, x):
    file_path = '../file/' + file_name
    user = {}
    # 如果文件不存在或者文件为空,则创建空 JSON 对象
    if not os.path.exists(file_path) or os.path.getsize(file_path) == 0:
        with open(file_path, 'w', encoding='utf8') as f:
            f.write('{}')
    try:
        # 读取文件内容
        with open(file_path, 'r', encoding='utf8') as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                username, password = line.split(',')
                user[username] = password
        return user
    except:
        return x


# 读取文本信息
def read_text(file_name):
    file_path = '../file/' + file_name
    # 如果文件不存在或者文件为空,则创建空 JSON 对象
    if not os.path.exists(file_path) or os.path.getsize(file_path) == 0:
        with open(file_path, 'w', encoding='utf8') as f:
            f.write('{}')
    with open(file_path, 'r', encoding='utf8') as f:
        content = f.read()
    return content

 2.文件展示

 (1)student_info.txt储存学生信息

 (2)user_info.txt储存用户信息

 (3)welcome.txt欢迎界面

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

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

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

 (4)student_page.txt学生管理界面

====================================
🌺🌺欢迎:

♥ 1. 添加学生
♥ 2. 查看学生
♥ 3. 删除学生
♥ 4. 返回
====================================

3.代码

(1)index.py储存以上功能函数以及定义的类

(2)main.py主程序入口

import index
# 主程序入口
while True:
    # 欢迎界面
    content = index.read_text('welcome.txt')
    print(content)
    # 选择操作
    option = input("请选择操作:")
    if option == "1":
        index.login()
    elif option == "2":
        index.register()
    elif option == "3":
        break
    else:
        print("输入错误,请重新输入!")

四.代码运行(部分功能展示截图)

  

 五.源码及资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值