学习了python基础后,来实际操作一下吧!下面是一个学员管理系统:该系统可存储学员信息(包括 姓名、手机号、微信、qq、成绩),存储在txt文件中。系统有四个核心操作
:学员新增,学员删除,学员修改,查看学员,查看学员平均分。

需求分析及设计

1、学员类:该系统中核心对象是学员,那么如何代码中用什么来表示学员呢?可以使用类,来表示所有学员的模板,通过类来实例化各个学员对象
2、学员的存储:学员存储使用普通文件来存储,需要设计存储的格式如下:
1,张三三,15640625127,25564,85955,100
2,李四,12521541445,859966,55226,55
3,王五,12365866555,145255,96
代码中需要两个方法:读文件、写文件
3、核心操作:学员新增、学员修改、学员删除、学员查询
4、和交互台交互

学员类的实现

'''
创建一个学员类 属性包含id,姓名,手机,qq,wx
'''
class Student:def __init__(self,id,name,phone):self.id=idself.name=nameself.phone=phoneself.wx=''self.qq=''self.score=0#当我们直接使用对象时,是对象的内存地址。#当我们想让他按照弄个格式输出时用__str__ 不能在init中返回#也可以自己写一个函数,但是要调用他,__str__不需要调用def __str__(self):return f'{self.id},{self.name},{self.phone},{self.wx},{self.qq},{self.score}'def getId(self):return self.iddef setId(self,id):self.id=iddef getName(self):return self.namedef setName(self,name):self.name=namedef getPhone(self):return self.phonedef setPhone(self,phone):self.phone=phonedef getWx(self):return self.wxdef setWx(self,wx):self.wx=wxdef getQQ(self):return self.qqdef setQQ(self,qq):self.qq=qqdef getScore(self):return self.scoredef setScore(self,score):self.score=scoreif __name__ == '__main__':stu1=Student(1,'张三',15640625127)print(stu1.getName())stu1.setName('李四')print(stu1.getName())stu1.setScore(100)print(stu1.getScore())

文件读写

创建一个txt文件存储学员信息

# 读取和写入数据文件方法
from guanlixitong.student import Student
class FileOperate:def __init__(self):self.filepath = 'E:/PythonWork/0302guanlixitong/guanlixitong/students_db.txt'def read(self):"""读取数据需要转换成{1:stu1,2:stu2,3:stu3,4:stu4} 这样的结构:return:"""stus_dict = {} #读取转成字典,作为中间数据对象with open(file=self.filepath,mode='r',encoding='UTF-8') as f:all_lines = f.readlines() #all_lines是个列表,一个元素代表一行数据,代表一个学员# print(all_lines)for line in all_lines:# line 是'1,张三,18998880001,hhsg,27366,0\n'# 通过逗号分割,再通过索引得到学员的各项信息line_spit = line.split(',')id = line_spit[0]name = line_spit[1]phone = line_spit[2]wx = line_spit[3]qq = line_spit[4]score = line_spit[5][:-1] # '86\n'# print(score)stu = Student(id,name,phone) #实例化学员对象stu.setWx(wx)stu.setQQ(qq)stu.setScore(score)stus_dict[id] = stureturn stus_dictdef write(self,stus_dict:dict): #stus_dict:dict 传入的参数,冒号后边表示这个参数的类型# stus_dict {1:stu1,2:stu2,3:stu3,4:stu4}with open(file=self.filepath,mode='w',encoding='UTF-8') as f:# f.write('学员信息')# 遍历传进来的字典对象里的所有value,for stu in stus_dict.values():# 注意这里的stu是个学员对象f.write(str(stu)) #学员对象不是字符串类型,无法写入的,所以将其转成字符串str(stu),会自动调用学员类中的__str__f.write('\n') #换行
if __name__ == '__main__':stus_dict = FileOperate().read()print(stus_dict)# stus_dict['1'].setName('张三三')# FileOperate().write(stus_dict)

核心操作

from guanlixitong.file_load import FileOperate
from guanlixitong.student import Student
class StuOperate:# 在这里全部使用类属性和类方法完成stus_dict = FileOperate().read()#添加学员# 应该传什么参数呢,学员id?name?phone?# 新增学员是增加一个学员整体对象,所以我们可以传学员对象参数,而不是传某个属性@classmethoddef add_stu(cls,stu:Student):#定义了一个参数stu,他的类型是Student# 操作都是在stus_dict上完成的# 如果学员id已存在不能添加if stu.id not in cls.stus_dict:cls.stus_dict[stu.id] = stu #将传进来的学员对象,加到中间数据对象字典中# 中间变量操作完成后将其重新写入到文件中FileOperate().write(cls.stus_dict)return '添加成功'else:return f'学员id:{stu.id}已存在,不能新增'# 删除学员,你得告诉我要删除谁,# id是可以唯一代表学员的,所以传参id@classmethoddef delete_stu(cls,id):if id in cls.stus_dict:del cls.stus_dict[id]FileOperate().write(cls.stus_dict) #回写文件return '删除成功'else:return f'学员id:{id}不存在,不能删除'# 查询学员# 通过学员id查询,所以传参id@classmethoddef select_stu(cls,id):if id in cls.stus_dict:stu = cls.stus_dict[id]return str(stu)else:return f'学员id:{id}不存在'# 修改学员# 需要告诉我你要修改谁,所以传参id# 你总得告诉我要修改学员的什么信息,name?phone?wx?qq?score# 要修改的信息不确定,并且还有一定的对象关系,name=砂沫沫,phone=162636@classmethoddef change_stu(cls,id,**kwargs):if id in cls.stus_dict:stu = cls.stus_dict[id]# 解析传进来的kwargs,kwargs  {'name':'张三','phone'='63267366'}if 'name' in kwargs:stu.setName(kwargs['name'])# stu.name = kwargs['name']if 'phone' in kwargs:stu.setPhone(kwargs['phone'])if 'wx' in kwargs:stu.setWx(kwargs['wx'])if 'qq' in kwargs:stu.setQQ(kwargs['qq'])if 'score' in kwargs:stu.setScore(kwargs['score'])# 修改完成之后也要回写文件FileOperate().write(cls.stus_dict)return '修改成功'else:return f'学员id:{id}不存在'# 在学员系统中增加展示全班学员成绩平均分的方法@classmethoddef show_avg_score(cls):# stus_dict的结构 {1:stu1,2:stu2,3:stu3,4:stu4}# 上述字典中,所有的value都是学员对象,每个学员都有各自的成绩# 平均分的计算规则是总分/学员个数sum = 0for stu in cls.stus_dict.values():score = stu.getScore()#得到学员成绩print(f'score:{score}')sum = sum+int(score)count = len(cls.stus_dict)return sum/countif __name__ == '__main__':# stu = Student('8','哈哈',7832626299)# print(StuOperate.add_stu(stu))# print(StuOperate.select_stu('3'))# StuOperate.change_stu('4',name='哈哈',phone='3555',qq='988776655')StuOperate.delete_stu('7')

学员管理系统控制台

from guanlixitong.stu_operate import StuOperate
from guanlixitong.student import Studentclass Manager:@classmethoddef welcome(cls):print('==========欢迎登录学员管理系统==========')# print('请输入你的操作:新增(1),查询(2),删除(3),修改(4),退出(5)')@classmethoddef operate(cls):try:op = int(input('请输入你的操作:新增(1),查询(2),删除(3),修改(4),退出(5),显示平均分(6)'))except:# print('输入有误,请输入你的操作:新增(1),查询(2),删除(3),修改(4),退出(5)')return #如果输入异常结束函数函数执行if op == 1:# 表示要新增学员id = input('请输入学员id:')name = input('请输入学员姓名:')phone = input('请输入学员手机号:')stu = Student(id,name,phone)print(StuOperate.add_stu(stu))elif op == 2:id = input('请输入要查询的学员id:')print(StuOperate.select_stu(id))elif op == 3:id = input('请输入要删除的学员id:')print(StuOperate.delete_stu(id))elif op == 4:id = input('请输入要修改的学员id:')# 要求控制台输入要修改的信息时,传入字典形式的字符串{'name':'张三','phone'='63267366'}attr_value_dict = input('请输入要修改的信息:')attr_value_dict = eval(attr_value_dict) #可以把字符串形式的字典转成真正的字典print(StuOperate.change_stu(id, **attr_value_dict))elif op == 5:return '退出'elif op == 6:avg_score = StuOperate.show_avg_score()print(f'全班平均分是{avg_score}')@classmethoddef run(cls):cls.welcome()while True:flag = cls.operate()if flag == '退出':print('退出成功')break
if __name__ == '__main__':Manager.run()

python学习之编写学员管理系统相关推荐

  1. python学习,王者荣耀管理系统(千锋教育)

    #_*_cording.utf-8_*_ # 开发团队:开心科研 # 开发人员:Administrator # 开发时间:2021/6/19 001917:01 # 文件名称:Goverment_of ...

  2. Python学习笔记-编写程序,输出所有由1、2、3、4这4个数字组成的素数,要求在每个素数中每个数字最多只能使用一次。

    编写程序,输出所有由1.2.3.4这4个数字组成的素数,要求在每个素数中每个数字最多只能使用一次. import math #判断一个数是否是素数 def isPrime(x):for i in ra ...

  3. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  4. python⾯向对象学员管理系统

    1. 系统需求 使⽤⾯向对象编程思想完成学员管理系统的开发,具体如下: 系统要求:学员数据存储在⽂件中 系统功能:添加学员.删除学员.修改学员信息.查询学员信息.显示所有学员信息.保存学员信息及退出系 ...

  5. python学习笔记之编写readConfig读写配置文件

    python学习笔记之编写readConfig读写配置文件_weixin_34055910的博客-CSDN博客

  6. Python学习笔记:Day 16 编写移动App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:Day 12 编写日志列表页

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此, 写下这些 ...

  8. Python学习笔记:Day11 编写日志创建页

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:Day 9 编写API

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. Python学习笔记:Day 7 编写MVC

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. win7中安装mysql_windows7下安装Mysql5.6数据库图文教程(压缩包安装)
  2. 云-阿里云-清单:清单目录
  3. mysql中如何操作字符串_mysql 字符串操作
  4. 毕业论文 | 基于STM32的MPU6050程序设计(源码)——卡尔曼滤波
  5. IOS笔记CALayer的position和anchorPoint
  6. 快速pow和sqrt的小技巧 hdu4282
  7. 使用 jQuery Mobile 与 HTML5 开发 Web App (十五) —— jQuery Mobile 与响应式
  8. python随机数小游戏
  9. linux下qemu共享文件夹,QEMU Windows来宾和Linux主机之间的共享文件夹
  10. [摘抄] 资深软件项目经理/产品经理“扯皮技巧”汇总(新手入坑必读,不定期更新)...
  11. SPOJ KPSUM ★(数位DP)
  12. Python3 - 文件处理
  13. Python地图可视化利器folium学习实践
  14. 关于大小端转换整理总结(包含原始方式、Qt方式)
  15. java模拟器野人岛2,生存战争野人岛2最终版
  16. 计算机语言echo off什么意思,批处理文件的@echo off是什么意思?
  17. 在mac上用VMWare虚拟机装Ubuntu
  18. Effectively Learning Spatial Indices(VLDB)
  19. Google开源JPEG压缩算法--Guetzli体验
  20. 记一次 对新浪微博客户端 的scheme唤醒/通信

热门文章

  1. 【转】 HMC与VIOS对新LPAR提供存储与网络虚拟化的支持
  2. vue将文件/图片批量打包下载
  3. 深信服邮件服务器配置,使用深信服设备实现邮件服务器高可用
  4. Error response from daemon: Pool overlaps with other one on this address space
  5. excel打开html非常慢,excel打开速度很慢的解决方法
  6. 【微信小程序|Demo】订单结算页面
  7. turf.js API功能讲解
  8. 如何使用计算机远程电脑,远程控制电脑,教您如何远程控制电脑
  9. 安装SSMS报错:0x80070643
  10. Linux下设置网卡速率 降低网卡速度