IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Python实现学生信息管理(面向对象) -> 正文阅读

[开发工具]Python实现学生信息管理(面向对象)

目录

正式代码如下:

student.py——负责保存学生的单条信息

student_manage.py——负责管理学生信息,对学生信息进行操作

main.py——程序的入口文件


实现了学生信息的增、删、改、查、从文件读入、写入文件

发现了python的一个容易让程序员写出bug的地方:

假如file=open('students.txt', 'r')

当使用file.readlines()方法从文件读入数据时,不管程序怎么写,只要用一次file.readlines(),那么在之后使用了file.readlines()时返回的结果都会变成空列表!

如图所示,文本中已经存了四行数据

在我使用如下代码先输出file.readlines()返回的列表长度后,再次使用file.readlines()却返回了一个空列表

print('len:',len(file.readlines()))
print(file.readlines())
print('len:',len(file.readlines()))

所以,恰当的使用方法应该是先令contents=file.readlines(),之后的所有操作都对contents进行。


正式代码如下:

student.py——负责保存学生的单条信息

'''
负责保存单条学生信息
'''


class StudentInfo(object):
    def __init__(self, stu_num, stu_name, stu_sex, stu_age):
        self.stu_num = stu_num
        self.stu_name = stu_name
        self.stu_sex = stu_sex
        self.stu_age = stu_age

    def __str__(self):  # 返回值必须为(空)字符串
        return self.stu_num.ljust(14) + self.stu_name.ljust(7) + self.stu_sex.ljust(3) + self.stu_age.ljust(3)


# 测试
if __name__ == '__main__':  # 如果被动运行,__name__==模块名
    stu = StudentInfo('311166000781', '李师傅', '男', '21')
    print(stu)

student_manage.py——负责管理学生信息,对学生信息进行操作

'''
负责管理学生信息,对学生信息进行操作
'''

from student import StudentInfo
import sys


class StudentManage(object):
    def __init__(self):
        self.students = {}  # 保存学生信息

    def start(self):  # 必须定义为公有方法,否则无法外部调用
        while True:
            self.__showMenu()
            select_id = input("请输入数字:")
            n = int(select_id)
            if n <= 8 and n >= 0:
                self.__selectFun(select_id)
            else:
                print('请重新输入有效数字!')

    # 定义私有方法
    def __showMenu(self):
        print('*' * 30)
        print('1.显示学生信息')
        print('2.查找学生信息')
        print('3.添加学生信息')
        print('4.修改学生信息')
        print('5.统计学生信息')
        print('6.删除学生信息')
        print('7.将学生信息写入文件')
        print('8.从文件读入学生信息')
        print('0.退出系统')
        print('*' * 30)

    # 选择功能
    def __selectFun(self, select_id):
        select_fun = {'1': self.__showAllStu,
                      '2': self.__searchStu,
                      '3': self.__addStu,
                      '4': self.__modifyStu,
                      '5': self.__countStu,
                      '6': self.__delStu,
                      '7': self.__writeStu,
                      '8': self.__readStu,
                      '0': sys.exit}
        if select_id == '2' or select_id == '4' or select_id == '6':
            stu_num = input('请输入学号:')
            select_fun[select_id](stu_num)
        else:
            select_fun[select_id]()

    # 添加学生信息
    def __addStu(self):
        stu_num = input('请输入学号:')
        stu_name = input('请输入姓名:')
        stu_sex = input('请输入性别:')
        stu_age = input('请输入年龄:')
        stu = StudentInfo(stu_num, stu_name, stu_sex, stu_age)
        self.students[stu_num] = stu

    # 查找学生信息
    def __searchStu(self, stu_num):
        for k in self.students:
            if k == stu_num:
                self.__showStu(k)
                return k
        else:
            print('查无此人!')
            return None

    # 修改学生信息
    def __modifyStu(self, stu_num):
        print('正在查找>>>')
        k = self.__searchStu(stu_num)
        if k:
            stu = self.students[k]
            n = input('请输入修改后的学号(无需修改输入-1):')
            stu.stu_num = self.__modifyJudge(n, stu.stu_num)
            n = input('请输入修改后姓名(无需修改输入-1):')
            stu.stu_name = self.__modifyJudge(n, stu.stu_name)
            n = input('请输入修改后性别(无需修改输入-1):')
            stu.stu_sex = self.__modifyJudge(n, stu.stu_sex)
            n = input('请输入修改后年龄(无需修改输入-1):')
            stu.stu_age = self.__modifyJudge(n, stu.stu_age)
            print('修改完毕!')

    # 修改辅助判断
    def __modifyJudge(self, n, value):
        if n == '-1':
            return value
        else:
            return n

    # 统计学生信息
    def __countStu(self):
        male = 0
        female = 0
        age = {}
        for v in self.students.values():
            if v.stu_sex == '男':
                male += 1
            else:
                female += 1
            if v.stu_age in age:
                age[v.stu_age] += 1
            else:
                age[v.stu_age] = 1
        print(f'学生共有{len(self.students)}名,其中男生共有{male}名,女生共有{female}名')
        for k, v in age.items():
            print(f'| 年龄为{k}的同学共有{v}名 |')

    # 删除学生信息
    def __delStu(self, stu_num):
        k = self.__searchStu(stu_num)
        if k:
            self.students.pop(k)
            print('删除成功!')

    # 显示单条信息
    def __showStu(self, stu_num):
        print('| ' + str(self.students[stu_num]) + ' |')

    # 显示全部学生信息
    def __showAllStu(self):
        if self.students:
            for k in self.students:
                self.__showStu(k)
        else:
            print('当前无学生信息,请添加...')

    # 将学生信息写入文件
    def __writeStu(self):
        if not self.students:
            print('还未录入学生信息!请先录入后再次尝试')
        else:
            file = open('students.txt', 'w')
            for stu in self.students.values():
                file.writelines(str(stu) + '\n')
            file.close()
            print('写入完毕!')

    # 从文件读入学生信息
    def __readStu(self):
        file = None
        try:
            file = open('students.txt', 'r')
        except Exception as e:
            print('文件不存在,请检查后重试', e)
        else:
            contents=file.readlines()
            i = 1
            for content in contents:
                content = content.split()
                stu = StudentInfo(content[0], content[1], content[2], content[3])  # 实例化一个对象
                self.students[content[0]] = stu  # 添加到存放学生信息的字典中
                print(f'第{i}名学生信息录入完毕>>>')
                i+=1
            print(f'{len(contents)}名学生信息从文件录入完毕!')
        finally:
            if file != None:
                file.close()

main.py——程序的入口文件

'''
主程序文件,实现程序的入口
'''
from student_manage import *

if __name__ == '__main__':
    stu = StudentManage()
    stu.start()

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:11:24  更:2022-01-14 02:11:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:25:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码