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_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实现学生信息管理(面向对象)相关推荐
- 基于python+django学生信息管理系统设计与实现(含程序源码和毕业设计)
摘要 随着互联网技术的加快发展,计算机电脑硬件也在不断的迭代升级,而每年大学生不断的扩招,学院的增加,对于信息平台的管理需求也越来越多.选用B/S架构模式,可以更好的服务于学生信息化的管理,这是因为C ...
- 简单的用Python实现学生信息管理
基本功能:增.删.改.查 import sys stus=[]def select_num(n):if n==1:if stus:show_stu()else:print("暂无数据!&qu ...
- Python学生管理系统——面向对象版本
Python练习题----学生管理系统(面向对象版本) 一. 题目要求: 学生信息管理:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.设计一个学生信息管理系统,使之提供以下功能: -- ...
- Python学生信息管理系统图形化界面-老师端-学生端项目实现
Student-information-management-system 本项目是一个学生信息管理系统,这个项目是用Python语言实现的,也实现了图形化界面的显示,同时也实现了管理员端,学生端两个 ...
- python制作学生管理系统_Python——面向对象,简易学生信息管理系统
一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...
- Python高校学生档案管理系统毕业设计源码071528
Python高校学生档案管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发 ...
- 用python设计学生管理系统_python+tkinter实现学生管理系统
本文实例为大家分享了python+tkinter实现学生管理系统的具体代码,供大家参考,具体内容如下 from tkinter import * from tkinter.messagebox imp ...
- Python第十七课(面向对象基础)
Python第17课(面向对象基础) >>>思维导图>>>中二青年 面向对象编程思想OOP 什么是面向对象 面向对象是一种编程思想,是前辈们总结出的经验,指导 ...
- 计算机毕业设计Python+uniapp学生课堂考勤小程序(小程序+源码+LW)
计算机毕业设计Python+uniapp学生课堂考勤小程序(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ pyth ...
最新文章
- hdu5056(找相同字母不出现k次的子串个数)
- HashMap 源码详细分析(JDK1.8)
- C++二维数组动态申请内存
- sql查找一个范围的值_销售需求丨查找问题
- FusionChart实现柱状图、饼状图的动态数据显示 附Demo
- Sqlserver2008相关配置问题
- H3C认证路由交换网络高级工程师
- 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构|图的邻接表与深度、广度优先搜索
- 记录——《C Primer Plus (第五版)》第十章编程练习第八题
- 关于Jquery.Data()和HTML标签的data-*属性
- [转]Time Tracker Starter Kit 简介
- linux中级之HAProxy基础配置
- 大型企业网络构建之网关冗余
- 固态硬盘简称是不是ssd_小白科普:没想到你是这样的固态硬盘
- 【DTM】HUAWEI Ads与DTM网页转化追踪(一)
- 数据库分析之概念结构设计
- ***WIN2003 PHP服务器的另类技术
- Python 爬取微信公众号文章和评论 (有源码)
- CAD删除数据库对象
- 【Shell系列】$(shell pwd)和$(pwd)用法区别