Python学生管理系统【原码+实现过程】
目录
- 一、实现要求
- 二、类框架的搭建
- 1. student类定义
- 2.StudentManagerSystem类基本框架的定义:
- 三、类方法的具体实现
- 1.菜单函数
- 2.添加学生信息方法
- 3.删除学生信息
- 4.修改学生信息
- 5.查找学生信息
- 6.显示所有学生信息
- 7.永久化保存学生信息
- 8.加载学生信息
- 四、完整代码
- 1. StudentManagerSystem模块
- 2.student模块
- 3. main模块
- 源码下载地址
一、实现要求
- 在面向对象编程思想完成学员管理系统的开发
- 学生的信息要实现永久化保存
- 系统要有如下功能:
- 添加学生信息
- 修改学生信息
- 查询学生信息
- 显示所有学生信息
- 退出系统并保存学生信息
二、类框架的搭建
我们需要定义两个类:
- student类,存储学生的相关信息(姓名、学号、电话号码、地址)。
- StudentManagerSystem类 ,管理所有学生信息和操作学生信息。
1. student类定义
- 首先该类需要完成学生信息的初始化(传参实现)。
- 重定义魔法函数
__str__
,使得本来返回该对象的地址,现在改成返回该类定义的学生信息。
class Student(object):def __init__(self,name,num,pho,add):self.name = nameself.num = numself.pho = phoself.add = adddef __str__(self):return f"{self.name},{self.num},{self.pho},{self.add}"
2.StudentManagerSystem类基本框架的定义:
- 需要定义列个列表存储学所有学生信息
- 定义一个run函数,实现学生管理系统的相关操作。
- run函数就是运行学生管理系统,运行后,首先我们需要在文件中加载已经存储好的学生信息。
- 打印学生管理系统的功能菜单
- 然后输入选项,执行相应的功能(添加、删除、查找、显示、修改、退出系统并保存)
- 由于我们并不只进行一次操作所以我们需要对上诉两步进行循环操作,只有当选择退出系统操作后,才结束循环
class StudentManagerSystem(object):def __init__(self):self.students = []def run(self):# 加载学生信息self.load_student()while True:self.show_menu()menu_num = int(input("请选择:"))if menu_num == 1:self.add_student()elif menu_num == 2:self.del_student()elif menu_num == 3:self.alter_student()elif menu_num == 4:self.find_student()elif menu_num == 5:self.show_student()elif menu_num == 6:self.save_student()breakelse:print("input error")
三、类方法的具体实现
1.菜单函数
def show_menu(self):print('*'*7 + ' <学生管理系统> ' + '*' * 7)print('*'*8 + ' 1.添加学生 ' + '*'*8)print('*'*8 + ' 2.删除学生 ' + '*'*8)print('*'*8 + ' 3.修改学生 ' + '*'*8)print('*'*8 + ' 4.查询学生 ' + '*'*8)print('*'*8 + ' 5.显示学生 ' + '*'*8)print('*'*8 + ' 6.退出系统 ' + '*'*8)print('*' * 26)
2.添加学生信息方法
具体实现方法:输入学生信息,用该学生信息初始化一个学生对象,然后将学生对象添加到学生管理的列表当中。
def add_student(self):stu_name = input("学生姓名:")stu_num = input("学生学号:")stu_pho = input("学生电话:")stu_add = input('学生家庭地址:')stu = student.Student(stu_name, stu_num, stu_pho, stu_add)self.students.append(stu) # 列表添加的是对象
3.删除学生信息
def del_student(self):del_name = input("你想删除学生的姓名:")for i in self.students:if i.name == del_name:self.students.remove(i)breakelse:print("查无此人")
4.修改学生信息
def alter_student(self):alter_name = input("输入你想修改的学生姓名:")for i in self.students:if i.name == alter_name:i.num = input("修改学号:")i.pho = input("修改电话号码:")i.add = input("修家庭地址:")print("修改成功")breakelse:print("查无此人")
5.查找学生信息
def find_student(self):find_name = input("输入你想查找学生的姓名:")for i in self.students:if i.name == find_name:print(i.name.ljust(10,' '),i.num.ljust(4,' '),i.pho.ljust(12,' '),i.add.ljust(20,' '))breakelse:print("查无此人")
6.显示所有学生信息
def show_student(self):# 小改进:调整了输出的格式print('name'.center(10,' '),'num'.center(4,' '),'phone'.center(12,' '),'address'.center(20,' '))for i in self.students:print(i.name.ljust(10,' '),i.num.ljust(4,' '),i.pho.ljust(12,' '),i.add.ljust(20,' '))
7.永久化保存学生信息
__dirt__
的作用:
__dirt__
在类中存放类函数、静态函数、普通函数、全局变量以及一些内置属性- 对象的
__dict__
存储了一些self.xxx
的东西 __dirt__
是一个字典
所有我们可以用对象中__dirt__
来返回学生信息的字典
def save_student(self):# 以w的方式打开文件f = open('student_info','w')new_list = [i.__dict__ for i in self.students]f.write(str(new_list))f.close()
8.加载学生信息
在我们加载学生信息的时候,由于一开始一条学生记录都没有,所以我们并未创建学生信息文件,因此我们需要使用自定义异常来避免为能打开文件的报错,进而影响程序的运行。
def load_student(self):# 以读的方式打开文件 由于r的方法要保证文件是存在的try:f = open('student_info','r')except:f = open('student_info','w')else:# 将文件中的数据全部读入data中data = f.read()# 将data处理成存放字典的列表new_list = eval(data)# 将新的列表存放在self.students中self.students = [student.Student(i['name'],i['num'],i['pho'],i['add']) for i in new_list]finally:f.close()
四、完整代码
本次分文件编写,具体分为如下三个模块:
1. StudentManagerSystem模块
import studentclass StudentManagerSystem(object):"""学生的信息:姓名、学号、电话号码、家庭地址(简单就这些吧)采用文件编写:启动该系统的时候要将文件的信息全部读出,存入列表中关系系统的时候再将学生系统中的信息重新写入文件(重写 而不是追加)"""def __init__(self):self.students = []def show_menu(self):print('*'*7 + ' <学生管理系统> ' + '*' * 7)print('*'*8 + ' 1.添加学生 ' + '*'*8)print('*'*8 + ' 2.删除学生 ' + '*'*8)print('*'*8 + ' 3.修改学生 ' + '*'*8)print('*'*8 + ' 4.查询学生 ' + '*'*8)print('*'*8 + ' 5.显示学生 ' + '*'*8)print('*'*8 + ' 6.退出系统 ' + '*'*8)print('*' * 26)def add_student(self):stu_name = input("学生姓名:")stu_num = input("学生学号:")stu_pho = input("学生电话:")stu_add = input('学生家庭地址:')stu = student.Student(stu_name, stu_num, stu_pho, stu_add)self.students.append(stu) # 列表添加的是对象def show_student(self):# 小改进:调整了输出的格式print('name'.center(10,' '),'num'.center(4,' '),'phone'.center(12,' '),'address'.center(20,' '))for i in self.students:print(i.name.ljust(10,' '),i.num.ljust(4,' '),i.pho.ljust(12,' '),i.add.ljust(20,' '))def del_student(self):del_name = input("你想删除学生的姓名:")for i in self.students:if i.name == del_name:self.students.remove(i)breakelse:print("查无此人")def alter_student(self):alter_name = input("输入你想修改的学生姓名:")for i in self.students:if i.name == alter_name:i.num = input("修改学号:")i.pho = input("修改电话号码:")i.add = input("修家庭地址:")print("修改成功")breakelse:print("查无此人")def find_student(self):find_name = input("输入你想查找学生的姓名:")for i in self.students:if i.name == find_name:print(i.name.ljust(10,' '),i.num.ljust(4,' '),i.pho.ljust(12,' '),i.add.ljust(20,' '))breakelse:print("查无此人")def save_student(self):# 以w的方式打开文件f = open('student_info','w')"""小知识:__dirt__ 在类中存放类函数、静态函数、普通函数、全局变量以及一些内置属性对象的__dict__中存储了一些self。xxx的东西"""new_list = [i.__dict__ for i in self.students]f.write(str(new_list))f.close()def load_student(self):# 以读的方式打开文件 由于r的方法要保证文件是存在的try:f = open('student_info','r')except:f = open('student_info','w')else:# 将文件中的数据全部读入data中data = f.read()# 将data处理成存放字典的列表new_list = eval(data)# 将新的列表存放在self.students中self.students = [student.Student(i['name'],i['num'],i['pho'],i['add']) for i in new_list]finally:f.close()def run(self):# 加载学生信息self.load_student()while True:self.show_menu()menu_num = int(input("请选择:"))if menu_num == 1:self.add_student()elif menu_num == 2:self.del_student()elif menu_num == 3:self.alter_student()elif menu_num == 4:self.find_student()elif menu_num == 5:self.show_student()elif menu_num == 6:self.save_student()breakelse:print("input error")# 测试代码
if __name__ == '__main__':student_manager = StudentManagerSystem()student_manager.run()
2.student模块
class Student(object):def __init__(self,name,num,pho,add):self.name = nameself.num = numself.pho = phoself.add = adddef __str__(self):return f"{self.name},{self.num},{self.pho},{self.add}"
3. main模块
from Stu_manager_system import *if __name__ == '__main__':student_manager = StudentManagerSystem()student_manager.run()
源码下载地址
Python学生管理系统【原码+实现过程】相关推荐
- java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署
java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署 java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署 本源码技 ...
- Python 学生管理系统+mysql+Flask
Python 学生管理系统 前言 项目目录 config py mapper.student_mapper.py static templates 主要代码块 student_controller.p ...
- 史上最全面的python学生管理系统教程(二)
目录 序言 sqlite使用教程 python sqlite使用教程 数据库构造 学生信息表结构: 教师信息表结构: 课程成绩表结构: 教师添加课程: 学生表连接课程成绩表: 数据库语句了解 sqli ...
- Python学生管理系统代码
Python学生管理系统代码一览 复制即用 初学见谅 #python study # -*- coding: utf-8 -*-#学员信息 data = [{'id': ' 1','name': '辛 ...
- C++课程设计 通讯录管理系统 原码及解析
设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理.(一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时, ...
- python学生管理系统-学生管理系统python
广告关闭 腾讯云+校园是针对学生用户推出的专项扶持计划,1核2G云服务器9元/月起,云数据库2元/月起,并享受按购买价续费的优惠,助力莘莘学子轻松上云 print(该学生不存在)return none ...
- python学生管理系统-python实现学生管理系统
python写的简单的学生管理系统,练习python语法. 可以运行在windows和linux下,python 2.7. #!/usr/local/bin/python # -*- coding:u ...
- python学生管理系统用类写_python面向对象——学校学生教职工管理系统类的实例...
这里做一个学校的人事管理系统中的类的实例化,其中含有的类:Person.Student.Stuff三个类.下面来具体分析类所要实现的功能. 首先可以定义使用Person类,找出学生和教职工之间的共同属 ...
- python学生管理系统数据库_Django+Mysql实现--学生管理系统
写在前面 在python课中老师要求使用python的web框架实现学生管理系统,经过查找资料等,最后选择了使用Django来搭建这个系统 Django Django是一个开放源代码的Web应用框架, ...
最新文章
- python excel处理框架_django框架基于模板 生成 excel(xls) 文件操作示例
- Android开发:怎样把Android studio中的Library公布到Jcenter
- iis 改了php ini不生效,Windows IIS 集成PHP时修改PHP.ini 配置后不生效问题
- linux window nginx性能,Nginx负载均衡搭建(Window与Linux)
- MSSQL数据库C#操作类(SQLHELPER类的修改版)
- 存储池与存储卷,使用virt-install创建虚拟机
- java web 锁_Java中锁的分类
- python数据展示的模块_python中使用mock模块返回数据
- 如何利用自定义函数把阳历转换成阴历
- 零点定理的奇妙应用:平分面积的直线
- python制作数据增长动图_请问一下这种数据动图是如何做出来的?
- Samsung S4卡屏卡在开机画面的不拆机恢复照片一例
- 严重: Servlet.service() for servlet [springmvc] in context with path [] threw exception [Request proce
- 樊氏族谱2-汝南樊银后裔家谱续谱-简书
- 5g消息服务器,三大运营商发布“5G消息” 短消息服务全新升级 微信的对手来了...
- PHP 利用文件锁处理高并发
- 美标C70600(BFe10-1-1)无缝管
- 2019微信公开课Pro微信之夜内容笔记总结
- Jsp新闻项目(规范访问分页之模糊查询主题分页查询[客户页面])
- 【转】从猎头角度推测,搜狗的买卖对于互联网格局和薪水的影响
热门文章
- Python剪刀、石头、布游戏
- Java网页爬虫--基于URLConnection的网页爬虫工具类
- android自动软键盘,Android屏蔽软键盘自动弹出的解决方案
- RAM ROM FLASH的区别
- IBM制造类人脑的计算机
- python余弦定理求第三边_python余弦定理计算相似度
- 未来人类科技发展时间表
- ffmpeg- 部分错误码-av_interleaved_write_frame/av_write_frame
- 国际残奥委会主席克雷文宣布北京2008年残奥会闭幕
- WPF编程,TextBox回车换行的一种方法