目录
学习完Python基础,为了巩固知识就写了一个简单的学员信息管理系统
下面是一些思路和方法
此系统主要分为了三个模块来写
模块一:student.py
# 学员类
class Student():
# 初始化魔法方法
def __init__(self, name, gender, tel):
self.name = name
self.gender = gender
self.tel = tel
# “魔法”方法。当使用print输出对象的时候只要自己定义了__str__(self)方法,
# 那么就会打印从在这个方法中return的数据。
def __str__(self):
return f"姓名:{self.name},性别:{self.gender},电话:{self.tel}"
# t = Student("aa","女",23)
# print(t)
#
模块二:main.py
此模块是程序的入口,通过运行此模块来实现整个程序的运行
# 导入管理系统模块
from managerSystem import *
# if条件判断,保证当前程序运行才运行管理系统
if __name__ == "__main__" :
# 创建实例对象
student_manager = StudentManager()
# 调用run方法
student_manager.run()
模块三:managerStudent.py
此模块中实现了程序主界面,定义了程序的方法:添加,删除,更改,查找,保存,
程序主界面:
定义run()方法,通过运行此方法来调用程序不同的功能方法
# 定义程序入口函数
# 1.加载数据
# 2.功能菜单
# 3.输入功能序号
# 4.执行不同功能
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.modify_student()
elif menu_num == 4:
# 查询学员信息
self.search_student()
elif menu_num == 5:
# 显示所有学员信息
self.show_student()
elif menu_num == 6:
# 保存学员信息
self.save_student()
elif menu_num == 6:
# 退出
break
# 系统功能函数
# 功能菜单
# 不涉及对象和对象数据,定义静态方法
@staticmethod
def show_menu():
print("-------------------欢迎来到学员信息管理系统-------------")
print("请选择下方功能")
print("1.添加学员")
print("2.删除学员")
print("3.修改学员信息")
print("4.查询学员信息")
print("5.显示所有学员")
print("6.保存学员信息")
print("7.退出系统")
# 定义实例属性,用列表来储存每个学员信息
下面是程序的功能方法:
添加方法:add_student()
# 添加学员
def add_student(self):
# 用户输入,姓名,性别,手机号
name = input("请输入你的姓名 :")
gender = input("请输入你的性别 :")
if gender == "男" or gender == "女":
tel = input("请输入你的手机号/6位整数字 :")
# 利用try语句可以实现判段电话号是否是6位整数
try:
tel_number = int(tel)
except:
print("你输入的手机号有误,请重新操作")
else:
tel_len = len(tel)
if tel_len == 6:
# 创建学员对象,需先导入Student类,即先导入student模块
student = Student(name, gender, tel)
# 将学员数据存储到列表中
self.student_list.append(student)
# 验证一下
print(self.student_list)
print("你添加的信息为:")
print(student)
else:
print("你输入的电话有误,请重新操作")
else:
print("你输入的性别有误,请重新操作")
# tel = input("请输入你的手机号/6位整数字 :")
当检查输入的手机号是否位6位整数时,我用了try-except-else-finally语句来实现此功能,大家也可以使用Python中的正则表达式来实现
删除方法:del_student()
# 删除学员
def del_student(self):
# 按照姓名来删除学员
del_name = input("请输入要删除的学员姓名")
# 遍历列表,查找
for i in self.student_list:
if del_name == i.name:
# 删除学员对象
self.student_list.remove(i)
# 没有找到,打印没有查到信息
else:
print("没有查找到此学员信息")
# 再次打印列表,查看是否删除
print(self.student_list)
修改方法:modify_student()
# 修改学员
def modify_student(self):
# 输入目标学员姓名
modify_name = input("请输入你所要修改的学员信息:")
# 遍历列表查找是否存在,有则修改,无则提示不存在信息
for i in self.student_list:
if modify_name == i.name:
# 更新学员信息
i.name = input("请输入学员姓名:")
i.gender = input("请输入学员性别:")
i.tel = input("请输入学员电话:")
print(f"修改的学员信息为:姓名:{i.name},性别:{i.gender},电话:{i.tel}")
break
else:
print("没有此学员信息")
查询方法:search_student()
# 查询学员信息(按照姓名或电话查找)
def search_student(self):
print("查询方式a/姓名查询,b/电话查询")
search_way = input("请输入:")
if search_way == "a":
search_name = input("请输入你所有查询的姓名:")
# 遍历列表
for i in self.student_list:
if i.name == search_name:
print(f"此学员信息为:姓名:{i.name},性别:{i.gender},电话:{i.tel}")
break
else:
print("没有查到此学员信息")
elif search_way == "b":
search_tel = input("请输入你所查询的电话:")
for i in self.student_list:
if i.tel == search_tel:
print(f"此学员信息为:姓名:{i.name},性别:{i.gender},电话:{i.tel}")
break
else:
print("没有查到此学员信息")
else:
print("你输入的信息有误,请重新输入")
保存方法:sava_student()
# 保存学员信息
def save_student(self):
# 打开文件
r = open("student.txt", "w")
# 文件写入数据先将列表中学员对象转为字典,再写入文件
new_list = [i.__dict__ for i in self.student_list]
# 写入,但需先将列表转换为字符串
r.write(str(new_list))
r.write("\r\n")
# 关闭文件
r.close()
print("保存成功")
注意:当我们在文件中写入学员信息时,我们不能直接将列表写入,因为列表中储存的是一个个学员对象,我们先将列表中学员对象转为字典,再写入文件
加载学员信息方法:load_student()
# 加载学员信息
def load_student(self):
# 如果文件存在则以只读模式打开,否则以写入模式打开
try:
r = open("student.txt", "r")
except:
r = open("student.txt", "w")
else:
# 读取数据,读取出的数据是字符串类型,先将其还原为列表,
data = r.read()
new_list = eval(data)
self.student_list = [Student(i["name"], i["gender"], i["tel"]) for i in new_list]
finally:
r.close()
读取数据时要注意,和写入时正好相反,使用eval()方法先将读取出的字符串类型还原为列表
模块二完整代码:
# 主界面代码
# 导入student模块
from student import *
class StudentManager():
def __init__(self):
self.student_list = []
# 定义程序入口函数
# 1.加载数据
# 2.功能菜单
# 3.输入功能序号
# 4.执行不同功能
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.modify_student()
elif menu_num == 4:
# 查询学员信息
self.search_student()
elif menu_num == 5:
# 显示所有学员信息
self.show_student()
elif menu_num == 6:
# 保存学员信息
self.save_student()
elif menu_num == 6:
# 退出
break
# 系统功能函数
# 功能菜单
# 不涉及对象和对象数据,定义静态方法
@staticmethod
def show_menu():
print("-------------------欢迎来到学员信息管理系统-------------")
print("请选择下方功能")
print("1.添加学员")
print("2.删除学员")
print("3.修改学员信息")
print("4.查询学员信息")
print("5.显示所有学员")
print("6.保存学员信息")
print("7.退出系统")
# 定义实例属性,用列表来储存每个学员信息
# 添加学员
def add_student(self):
# 用户输入,姓名,性别,手机号
name = input("请输入你的姓名 :")
gender = input("请输入你的性别 :")
if gender == "男" or gender == "女":
tel = input("请输入你的手机号/6位整数字 :")
# 利用try语句可以实现判段电话号是否是6位整数
try:
tel_number = int(tel)
except:
print("你输入的手机号有误,请重新操作")
else:
tel_len = len(tel)
if tel_len == 6:
# 创建学员对象,需先导入Student类,即先导入student模块
student = Student(name, gender, tel)
# 将学员数据存储到列表中
self.student_list.append(student)
# 验证一下
print(self.student_list)
print("你添加的信息为:")
print(student)
else:
print("你输入的电话有误,请重新操作")
else:
print("你输入的性别有误,请重新操作")
# tel = input("请输入你的手机号/6位整数字 :")
# 删除学员
def del_student(self):
# 按照姓名来删除学员
del_name = input("请输入要删除的学员姓名")
# 遍历列表,查找
for i in self.student_list:
if del_name == i.name:
# 删除学员对象
self.student_list.remove(i)
# 没有找到,打印没有查到信息
else:
print("没有查找到此学员信息")
# 再次打印列表,查看是否删除
print(self.student_list)
# 修改学员
def modify_student(self):
# 输入目标学员姓名
modify_name = input("请输入你所要修改的学员信息:")
# 遍历列表查找是否存在,有则修改,无则提示不存在信息
for i in self.student_list:
if modify_name == i.name:
# 更新学员信息
i.name = input("请输入学员姓名:")
i.gender = input("请输入学员性别:")
i.tel = input("请输入学员电话:")
print(f"修改的学员信息为:姓名:{i.name},性别:{i.gender},电话:{i.tel}")
break
else:
print("没有此学员信息")
# 查询学员信息(按照姓名或电话查找)
def search_student(self):
print("查询方式a/姓名查询,b/电话查询")
search_way = input("请输入:")
if search_way == "a":
search_name = input("请输入你所有查询的姓名:")
for i in self.student_list:
if i.name == search_name:
print(f"此学员信息为:姓名:{i.name},性别:{i.gender},电话:{i.tel}")
break
else:
print("没有查到此学员信息")
elif search_way == "b":
search_tel = input("请输入你所查询的电话:")
for i in self.student_list:
if i.tel == search_tel:
print(f"此学员信息为:姓名:{i.name},性别:{i.gender},电话:{i.tel}")
break
else:
print("没有查到此学员信息")
else:
print("你输入的信息有误,请重新输入")
# 显示所有学员
def show_student(self):
print("学员信息如下:")
for i in self.student_list:
print(f"姓名:{i.name},性别:{i.gender},电话:{i.tel}")
# 保存学员信息
def save_student(self):
# 打开文件
r = open("student.txt", "w")
# 文件写入数据先将列表中学员对象转为字典,再写入文件
new_list = [i.__dict__ for i in self.student_list]
# 写入,但需先将列表转换为字符串
r.write(str(new_list))
r.write("\r\n")
# 关闭文件
r.close()
print("保存成功")
# 加载学员信息
def load_student(self):
# 如果文件存在则以只读模式打开,否则以写入模式打开
try:
r = open("student.txt", "r")
except:
r = open("student.txt", "w")
else:
# 读取数据,读取出的数据是字符串类型,先将其还原为列表,
data = r.read()
new_list = eval(data)
self.student_list = [Student(i["name"], i["gender"], i["tel"]) for i in new_list]
finally:
r.close()
总结:1.0版本还有很多需要改进:
1.没有用户登录注册功能
2.添加时,不能实现查询已有的人员信息
3.没有将添加和写入文件功能同步实现
4.部分方法的优化,如:判断输入是否是6位整数,可以用正则表达式来实现比较简便
期待我的2.0