目录

  • 一、实现要求
  • 二、类框架的搭建
    • 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学生管理系统【原码+实现过程】相关推荐

  1. java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署

    java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署 java计算机毕业设计微留学学生管理系统源码+数据库+系统+lw文档+mybatis+运行部署 本源码技 ...

  2. Python 学生管理系统+mysql+Flask

    Python 学生管理系统 前言 项目目录 config py mapper.student_mapper.py static templates 主要代码块 student_controller.p ...

  3. 史上最全面的python学生管理系统教程(二)

    目录 序言 sqlite使用教程 python sqlite使用教程 数据库构造 学生信息表结构: 教师信息表结构: 课程成绩表结构: 教师添加课程: 学生表连接课程成绩表: 数据库语句了解 sqli ...

  4. Python学生管理系统代码

    Python学生管理系统代码一览 复制即用 初学见谅 #python study # -*- coding: utf-8 -*-#学员信息 data = [{'id': ' 1','name': '辛 ...

  5. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理.(一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时, ...

  6. python学生管理系统-学生管理系统python

    广告关闭 腾讯云+校园是针对学生用户推出的专项扶持计划,1核2G云服务器9元/月起,云数据库2元/月起,并享受按购买价续费的优惠,助力莘莘学子轻松上云 print(该学生不存在)return none ...

  7. python学生管理系统-python实现学生管理系统

    python写的简单的学生管理系统,练习python语法. 可以运行在windows和linux下,python 2.7. #!/usr/local/bin/python # -*- coding:u ...

  8. python学生管理系统用类写_python面向对象——学校学生教职工管理系统类的实例...

    这里做一个学校的人事管理系统中的类的实例化,其中含有的类:Person.Student.Stuff三个类.下面来具体分析类所要实现的功能. 首先可以定义使用Person类,找出学生和教职工之间的共同属 ...

  9. python学生管理系统数据库_Django+Mysql实现--学生管理系统

    写在前面 在python课中老师要求使用python的web框架实现学生管理系统,经过查找资料等,最后选择了使用Django来搭建这个系统 Django Django是一个开放源代码的Web应用框架, ...

最新文章

  1. Caffe源码中math_functions文件分析
  2. python中文版编译器下载-python编译器
  3. 23 Python常用模块(一)
  4. powerBi odbc 连接impala 实现自助分析
  5. c++ 数组置0_0基础学习C语言第七章:数组(1)
  6. Nacos-服务多级存储模型
  7. is 和 == 的区别
  8. 获得磁盘的C++描述信息
  9. 信息学奥赛一本通 1177:奇数单增序列 | OpenJudge NOI 1.10 02:奇数单增序列
  10. nginx+lua+redis deny ip
  11. (119)System Verilog 父类与子类对象复制(自定义函数)详解
  12. 201612-2工资计算
  13. python接收前端post数据_python实现通过flask和前端进行数据收发
  14. SpringBoot项目中快速集成腾讯云短信服务SDK实现手机验证码功能
  15. 华为数通 软开 2022校招 面试全过 已开奖
  16. 在Ubuntu18.04中安装ROS教程
  17. 傲梅分区助手 linux,无损分区数据,调整分区大小软件:傲梅分区助手
  18. STM32的Flash地址是0x08000000,从0x00000000不可以?
  19. 微诺“新婚”一年:相濡以沫 前路未知
  20. 设计模式之美 精华总结 笔记(一)

热门文章

  1. 2019年 12306 爬虫 抢票软件
  2. 巴比特 | 元宇宙每日必读:上线三天,用户量突破100万,茅台推出“元宇宙”APP“巽风”,其核心玩法是什么?...
  3. 总线带宽计算公式(解析)
  4. 一种用户名含有中文的texlive2021安装方案(win10)
  5. Java8 ~ Java17 新特性
  6. BUUCTF Misc 谁赢了比赛? [SWPU2019]我有一只马里奥 [WUSTCTF2020]find_me [GXYCTF2019]gakki
  7. 象棋机器人 1 引言
  8. 毛哥的快乐生活(16) 走进动态网页的世界
  9. 08-图7 公路村村通 (30分)
  10. android relativelayout 底部,Android RelativeLayout 属性