目录

正式代码如下:

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_numself.stu_name = stu_nameself.stu_sex = stu_sexself.stu_age = stu_agedef __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 sysclass 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 kelse: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 valueelse:return n# 统计学生信息def __countStu(self):male = 0female = 0age = {}for v in self.students.values():if v.stu_sex == '男':male += 1else:female += 1if v.stu_age in age:age[v.stu_age] += 1else:age[v.stu_age] = 1print(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 = Nonetry:file = open('students.txt', 'r')except Exception as e:print('文件不存在,请检查后重试', e)else:contents=file.readlines()i = 1for 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+=1print(f'{len(contents)}名学生信息从文件录入完毕!')finally:if file != None:file.close()

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

'''
主程序文件,实现程序的入口
'''
from student_manage import *if __name__ == '__main__':stu = StudentManage()stu.start()

Python实现学生信息管理(面向对象)相关推荐

  1. 基于python+django学生信息管理系统设计与实现(含程序源码和毕业设计)

    摘要 随着互联网技术的加快发展,计算机电脑硬件也在不断的迭代升级,而每年大学生不断的扩招,学院的增加,对于信息平台的管理需求也越来越多.选用B/S架构模式,可以更好的服务于学生信息化的管理,这是因为C ...

  2. 简单的用Python实现学生信息管理

    基本功能:增.删.改.查 import sys stus=[]def select_num(n):if n==1:if stus:show_stu()else:print("暂无数据!&qu ...

  3. Python学生管理系统——面向对象版本

    Python练习题----学生管理系统(面向对象版本) 一. 题目要求: 学生信息管理:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.设计一个学生信息管理系统,使之提供以下功能: -- ...

  4. Python学生信息管理系统图形化界面-老师端-学生端项目实现

    Student-information-management-system 本项目是一个学生信息管理系统,这个项目是用Python语言实现的,也实现了图形化界面的显示,同时也实现了管理员端,学生端两个 ...

  5. python制作学生管理系统_Python——面向对象,简易学生信息管理系统

    一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...

  6. Python高校学生档案管理系统毕业设计源码071528

    Python高校学生档案管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发 ...

  7. 用python设计学生管理系统_python+tkinter实现学生管理系统

    本文实例为大家分享了python+tkinter实现学生管理系统的具体代码,供大家参考,具体内容如下 from tkinter import * from tkinter.messagebox imp ...

  8. Python第十七课(面向对象基础)

    Python第17课(面向对象基础)    >>>思维导图>>>中二青年 面向对象编程思想OOP 什么是面向对象 面向对象是一种编程思想,是前辈们总结出的经验,指导 ...

  9. 计算机毕业设计Python+uniapp学生课堂考勤小程序(小程序+源码+LW)

    计算机毕业设计Python+uniapp学生课堂考勤小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...

最新文章

  1. hdu5056(找相同字母不出现k次的子串个数)
  2. HashMap 源码详细分析(JDK1.8)
  3. C++二维数组动态申请内存
  4. sql查找一个范围的值_销售需求丨查找问题
  5. FusionChart实现柱状图、饼状图的动态数据显示 附Demo
  6. Sqlserver2008相关配置问题
  7. H3C认证路由交换网络高级工程师
  8. 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构|图的邻接表与深度、广度优先搜索
  9. 记录——《C Primer Plus (第五版)》第十章编程练习第八题
  10. 关于Jquery.Data()和HTML标签的data-*属性
  11. [转]Time Tracker Starter Kit 简介
  12. linux中级之HAProxy基础配置
  13. 大型企业网络构建之网关冗余
  14. 固态硬盘简称是不是ssd_小白科普:没想到你是这样的固态硬盘
  15. 【DTM】HUAWEI Ads与DTM网页转化追踪(一)
  16. 数据库分析之概念结构设计
  17. ***WIN2003 PHP服务器的另类技术
  18. Python 爬取微信公众号文章和评论 (有源码)
  19. CAD删除数据库对象
  20. 【Shell系列】$(shell pwd)和$(pwd)用法区别

热门文章

  1. 蓝桥杯_算法训练_ALGO10_集合运算
  2. ubuntu 安装git
  3. xshell xftp使用
  4. XGBoost的理解
  5. python记录_day14 内置函数二 迭代 二分法
  6. luogu P3293 [SCOI2016]美味
  7. 板邓:wordpress建站不得不知的安全防护(二)
  8. JSP中内置对象pageContent的使用
  9. C#中Lock关键字的使用
  10. N 组连续子串最大和