python学习之编写学员管理系统

article/2025/11/11 12:50:11

学习了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()

http://chatgpt.dhexx.cn/article/xnxLCjVk.shtml

相关文章

学员管理系统(完整版附带源码)

学员管理系统是刚接触python时算是一个比较难的小项目,毕竟第一次接触这样的思维逻辑,不过用心学起来还是很有趣的,发现乐在其中,也就不觉得难了。下面给大家分享一下学员管理系统较为完整的代码 1.主程序 import sys ,datetime …

使用python创建学员管理系统

使用面向对象完成了学员管理系统,实现了添加、删除、修改、查询、保存读取等功能,将学员、学员管理后台、开始入口分为了3个py文件,分别是Student.py、Student_management.py、main.py。保存文件名叫student.txt文件。内含注释,我…

分享一款教育培训机构学员信息管理系统

平台入口:http://edu.abc168.online 学员是培训机构的运营主体,对培训机构来说,做好学员管理,往往能直接反映出机构的管理水平和教师的教学水平,是机构建立形象和口碑的关键。以往,培训学校普遍使用手工登记的方式来管…

【shell案例】学员管理系统

前言 学员管理系统涉及到学员的增删改查,这是一个综合性比较强的项目,在所有的编程语言里都会有不同版本的学员信息管理系统,难度适中 效果截图 学员管理系统源码 #!/bin/bash## 随机点名册while true doecho

学员管理系统

大家在学习编程语言的时候,有时候会遇到让编程一个简单的系统等的问题。比如我在学习python的时候,就让编程如下一样的一个学员管理信息的系统: 一个可以添加学员信息,删除学员信息,修改学员信息,查询学员信…

【Python实现】学员管理系统(详细解析)

目录 1、总体要求2、需求分析3、框架设计4、细节设计4.1 程序入口4.2 学员管理类4.2.1 初始化4.2.2 登录认证4.2.3 功能菜单4.2.4 文件操作4.2.5 新增学员4.2.6 删除学员4.2.7 修改学员4.2.8 查找学员4.2.9 显示全部学员4.2.10 学员数据统计4.2.11 清空系统数据 5、总结 1、总体…

[Java] 学员管理系统(服务器—客户端模式)

目录 学员管理系统(服务器—客户端模式)1. 项目演示a. 打开项目b. 运行项目 2. 项目说明a. 所采用的知识点b. 业务交互模式图示 3. 案例代码a. 客户端i. 创建实体类 Studentii. 创建主类 MainApp b. 服务器端i. 创建实体类 Studentii. 创建服务器端线程类…

java 中 Scanner 输入

因为涉及到 io 流输入问题,如果不关闭会一直占用资源。所以使用过后要及时关闭,防止资源一直被占用。 Scanner在使用前要导入 java.util.Scanner 包 1.整数 描述: 输入一个整数,输出这个整数。 输入描述: 输入一个整数&#xff0c…

Java之键盘输入语句Scanner

文章目录 键盘输入语句1. 介绍2. 步骤3. 案例演示 键盘输入语句 1. 介绍 在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是 Scanner 2. 步骤 导入该类的所在包, java.util.*创建该类对象&a…

Java的常用输入输出语句

一、概述 输入输出可以说是计算机的基本功能。作为一种语言体系,java中主要按照流(stream)的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流(inputStream),由计算机发出的数据流叫做输出流(outputStream)。 Java语言体系中,对数据流…

java中输入语句是怎么写的

java中用户输入语句的写法是: 1、【Scanner sc new Scanner(System.in); 】; 2、【String input sc.next();】。 (视频教程推荐:java视频) 具体代码如下:import java.util.Scanner; public class Number { /** * param a…

java基础之java输入输出语句

1、使用Scanner 使用时需要引入包importjava.util.Scanner;首先定义Scanner对象 Java基础学习:java输入输出语句 比如: Java基础学习:java输入输出语句 2、使用BufferedReader 用前需要引入importjava.io.Reader; Java基础学习&#xff1…

java 键盘输入语句怎么写

java 键盘输入语句写法 第一种: public class shuRu{ public static void main(string arg[]){ system.out.println(arg[1]); } } 第二种: import java.util.scanner; public class shuRu{ public static void main(string arg[]){ scanner i…

java语言输入语句是_java中的输入语句怎么写?

java中的输入语句怎么写? 发布时间:2020-05-20 15:19:52 来源:亿速云 阅读:206 作者:鸽子 java中用户输入语句的写法是: 1、【Scanner sc new Scanner(System.in); 】; 2、【String input sc.…

java 输入语句_java怎样输入语句

java输入语句的方法:1、输入单个字符【char c=(char)System.in.read()】;2、输入整数或者字符串【int a=cin.nextInt()】;3、可以用BufferedReader类输入。 java输入语句的方法: 如果你要进行输入,请一定加上两个包import java.util.*; import java.io.*; 请看下面例子用于…

java输入语句怎么写

壹哥在前面给大家讲过,Java中给咱们提供了有三个标准的“流”,他们被统称为standard streams。除了负责输出的流之外,还有一个负责输入的标准流,Java中对应的API是System.in。 与标准输出相比,标准输入则复杂的多。尤…

java输入语句_java输入语句是什么

Java的语句有很多,其中输入语句是最基本的操作之一。下面我将带大家一起了解一下要如何进行输入代码的编写。 首先当你进行输入操作前要将下面两个包给加入Java程序的包行列中。 先将java.io.*;以及java.util.*;导入Java代码中。import java.util.*; import java.io…

java输入语句

java输入语句 import java.util.Scanner;//导入 java.util 包下的 Scanner 类,用来构建Scanner对象 public class TestScanner{public static void main(String[] args){Scanner scanner new Scanner(System.in);//建立Scanner对象,通过System.in来读取键盘输入数…

java的四种输入方法,你会几种?

java的输入方法最常见的就是Scanner的方法,我经过查阅一些资料发现了输入方法原来还有那么多种,可以玩出不少花样,下面是我总结出的四种输入方式,有需要的可以拿去 1.Scanner相关的功能 Scanner的输入方法是最常见的一种&#x…

zzlatex制作复杂表格(跨行、跨列)

用Latex制作复杂表格, 需要用到\multirow宏包, 用\multicolumn, \multirow, \hline, \cline 四种命令来控制跨列,跨行, 横线, 竖线位置。 原帖请见: http://jhengjyun.blogspot.jp/2011/01/latexmulticolu…