ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python基于文件的学生信息管理系统

2021-12-10 15:34:38  阅读:162  来源: 互联网

标签:基于 return name python sno self students student 信息管理系统


直接上源代码吧。

# 利用文件设计一个学生管理系统

class Student(object):

    def __init__(self):
        self.db_name = 'student_db.txt'
        self.students = {
            '7120214132341': '吕不韦',
            '8120214134348': '李明',
            '9120214131249': '张岩',
            '3220214121340': '祁门',
            '2120214431341': '吴峰'
        }
        try:
            with open(self.db_name, 'rt', encoding='UTF-8') as file:
                self.students.clear()
                db_data = file.readlines()
                for line in db_data:
                    line = [item.strip() for item in line.split(':') if line]
                    self.students[line[0]] = line[1]
        except FileNotFoundError as e:
            print('未发现数据库,系统将创建新的数据文件。')
        self.update_db()

    def update_db(self):
        self.students_list = list(self.students.keys())
        # 一个不好的文件更新实现
        with open(self.db_name, 'wt', encoding='UTF-8') as file:
            for key, value in self.students.items():
                file.write(f'{key}: {value}\n')

    def menu(self) -> None:
        """管理系统的菜单"""
        option = [
            '欢迎进入学生管理系统',
            '1. 查询全部学生',
            '2. 查询特定学生',
            '3. 更新学生信息',
            '4. 插入新的学生',
            '5. 删除已有学生',
            '6. 清除全部学生',
            '7. 退出管理系统'
        ]
        for item in option:
            print('|', item.center(30, '-'), '|')
        while True:
            choice = input('请根据菜单输入操作序号:')
            if choice.isdigit():
                if choice == '1':
                    self.query_all_student()
                elif choice == '2':
                    self.query_one_student()
                elif choice == '3':
                    self.update_student()
                elif choice == '4':
                    self.insert_new_student()
                elif choice == '5':
                    self.remove_one_student()
                elif choice == '6':
                    self.remove_all_student()
                elif choice == '7':
                    break
                else:
                    print('请输入正确的序号。')
            else:
                print('请输入数字。')

    def query_all_student(self) -> bool:
        """查询全部学生"""
        if not self.students:
            print('学生信息库是空的')
            return False
        for num in range(len(self.students_list)):
            student_sno = self.students_list[num]
            student_name = self.students.get(self.students_list[num])
            print(f'{num+1} 学号: {student_sno}, 学名: {student_name}')
        return True

    def query_one_student(self, query_name='') -> bool:
        """查询特定学生"""
        if not query_name:
            query_name = input('请输入要查询的学生姓名: ')
            if not self.is_name_valid(query_name):
                return False
        for sno, name in self.students.items():
            if query_name == name:
                print(f'{sno}: {name}')
                return True
        print('查无此人。')
        return False

    def update_student(self) -> bool:
        """更新一个学生信息"""
        sno = input('请输入要修改的学号: ')
        name = input('请输入学生姓名: ')
        if self.is_sno_valid(sno) and self.is_name_valid(name):
            if self.students.get(sno):
                self.students[sno] = name
                return True
            else:
                print('查无此人。')
        return False

    def insert_new_student(self) -> bool:
        """插入新的学生"""
        name = input('请输入学生的姓名: ')
        sno = input('请输入学生的学号: ')
        if self.is_sno_valid(sno) and self.is_name_valid(name):
            if self.students.get(sno):
                print('该学号已经存在。')
                return False
            self.students[sno] = name
            self.update_db()
        return True

    def remove_one_student(self) -> bool:
        """删除一个学生"""
        remove_name = input('请输入要删除的学生姓名: ')
        remove_sno = ''
        for sno, name in self.students.items():
            if remove_name == name:
                remove_sno = sno
                break
        if remove_sno:
            self.students.pop(remove_sno)
            self.update_db()
            return True
        else:
            print('查无此人。')
            return False

    def remove_all_student(self) -> bool:
        """删除所有学生"""
        self.students.clear()
        self.update_db()
        if self.students:
            print('清除失败,请排查故障')
            return False
        print('清除成功')
        return True

    def is_name_valid(self, name: str) -> bool:
        """检查输入的姓名是否合法"""
        if not name:
            print('姓名不可为空')
            return False
        if len(name) > 100:
            print('输入的姓名太长')
            return False
        return True

    def is_sno_valid(self, sno) -> bool:
        if not sno.isdigit() or len(sno) < 5 or len(sno) > 20:
            print('学号只能是5-20位的数字')
            return False
        return True


if __name__ == '__main__':
    Student().menu()

标签:基于,return,name,python,sno,self,students,student,信息管理系统
来源: https://www.cnblogs.com/amnotgcs/p/15672054.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有