学生管理系统1.0: 面向过程
系统功能:
------- 欢迎使用学生管理系统V1.0 -------
【1】添加学生信息
【2】删除学生信息
【3】修改学生信息
【4】查询学生信息
【5】遍历所有学生信息
【6】持久化保存学生信息
【7】退出系统
-------------------------------------------
功能概述:
需求:进入系统显示系统功能界面
功能如下:
添加学员信息
删除学员信息
修改学员信息
查询学员信息
遍历所有学员信息
保存数据到文件
退出系统
系统共6个功能,用户根据自己需求选取
代码如下:
# 1. 定义一个全局变量 => students,专门用于保存学生信息 => 结构如下 => [{}, {}, {}]
students = []
# 2. 定义一个add_student()函数,用于向students列表中添加学生信息
# 注意:每个学生信息就是一个字典
def add_student():
# 接收用户输入
name = input('请输入要添加学生的姓名:')
age = int(input('请输入要添加学生的年龄:'))
mobile = input('请输入要添加学生的电话:')
# 定义一个空字典
student = {}
# 向字典中添加数据 => key:value键值对
student['name'] = name
student['age'] = age
student['mobile'] = mobile
# 声明全局变量
global students
students.append(student) # 把字典追加到列表中 => [{学生信息}]
print(students)
print('恭喜您,信息已录入成功!')
# 3. 定义一个del_student()方法,用于实现删除学生的信息
def del_student():
# 接收用户要删除学生的姓名
name = input('请输入要删除学生的姓名:')
# 声明全局变量
global students
# 对students进行遍历操作
for i in students: # [{}, {}, {}]
# 判断哪个学生的姓名与要删除学生的姓名一致
if i['name'] == name:
students.remove(i)
print(students)
print('恭喜您,信息删除成功')
break
# 如果循环结束,还未执行break关键字,则显示很抱歉,您要删除的学生暂不存在
else:
print('很抱歉,您要删除的学生暂不存在!')
# 4. 定义一个edit_student()方法,用于实现修改学生信息
def edit_student():
# 接收外部用户的输入,输入要修改学生的姓名
name = input('请输入您要修改学生的姓名:')
# 声明全局变量
global students
# 对students进行遍历操作,获取要修改学生信息
for i in students:
if i['name'] == name:
i['age'] = int(input('请输入修改后的学生年龄:'))
i['mobile'] = input('请输入修改后的学生电话:')
print(students)
print('恭喜您,信息已更新成功')
break
else:
print('很抱歉,您要修改的学生信息暂不存在!')
# 5. 定义一个find_student()方法,用于查找学生信息
def find_student():
# 接收要查询学生的姓名
name = input('请输入要查询学生的姓名:')
# 声明全局变量
global stduents
# 对列表进行遍历操作 => [{}, {}, {}]
for i in students:
# 判断是否有要查询的学生,如果有显示其信息
if i['name'] == name:
print(i)
break
# 如果循环结束,还未找到与之对应的学生,则弹出提示,很抱歉,您要查找的学生暂不存在!
else:
print('很抱歉,您要查找的学生信息暂不存在!')
# 6. 定义一个show_students()方法,用于展示所有学生信息
def show_students():
# 声明全局变量
global students
# 对列表进行遍历操作
for i in students: # [{}, {}, {}]
print(f'姓名:{i["name"]},年龄:{i["age"]},电话:{i["mobile"]}')
# 7. 定义一个save_data_to_file()方法,用于保存students中的数据到文件 => 持久化存储
def save_data_to_file():
# 打开文件
f = open('students.txt', 'w', encoding='utf-8')
# 读写文件
f.write(str(students)) # list => str
# 关闭文件
f.close()
print('恭喜您,信息已保存成功!')
def menu():
print('------- 欢迎使用传智教育学生管理系统V1.0 -------')
print('【1】添加学生信息')
print('【2】删除学生信息')
print('【3】修改学生信息')
print('【4】查询学生信息')
print('【5】遍历所有学生信息')
print('【6】持久化保存学生信息')
print('【7】退出系统')
print('-------------------------------------------')
# 8. 定义一个load_data_from_file()
def load_data_from_file():
try:
f = open('students.txt', 'r', encoding='utf-8')
except:
f = open('students.txt', 'w', encoding='utf-8')
else:
content = f.read()
global students
students = eval(content)
finally:
f.close()
load_data_from_file()
# 定义一个while True死循环,让程序代码一直执行下去
while True:
menu()
# 定义一个input输入语句,接收用户要实现的功能编号
user_num = int(input('请输入您要执行的功能编号:'))
# 使用if...elif...else结构实现程序判断
if user_num == 1:
add_student()
elif user_num == 2:
del_student()
elif user_num == 3:
edit_student()
elif user_num == 4:
find_student()
elif user_num == 5:
show_students()
elif user_num == 6:
save_data_to_file()
elif user_num == 7:
print('退出系统成功,感谢您使用传智教育学生管理系统V1.0!')
break
else:
print('很抱歉,您输入的功能编号有误,请重新输入!')
学生管理系统2.0: 面向对象
系统功能:
*************************
欢迎来到学生管理系统V2.0
1.添加学生
2.修改学生
3.删除学生
4.查询单个学生
5.查询所有学生
6.保存信息
0.退出系统
*************************
功能概述:
需求:进入系统显示系统功能界面
功能如下:
a.可以显示基本的版本信息和操作界面;
b.可以通过键盘输入信息来完成基本功能,例如选择序号、确认退出、添加学生、修改等;
c.学生属性信息有姓名、性别、年龄、联系方式、描述信息等;
d.使用系统可对学生信息进行添加、修改、删除、查询等操作;
e.可以使用文件对学生信息进行加载、保存等;
f.可重复对学生进行增删查改操作,当确认退出系统后,则直接退出系统;
g.请使用面向对象的编程思想完成项目的升级处理。
角色分析:
角色:学生管理系统 和 学员 2个类
由于学生管理系统操作对象为学员,为方便后期扩展,我们把学员封装为一个角色。
注意事项: ① 为了方便维护代码,一般一个角色一个程序文件
② 项目也要有主程序入口
代码如下:
程序入口:
# 程序的主入口
# 1.导包
from dm02_studentcms import StudentCMS
# 2.定义main函数,执行学生管理系统
if __name__ == '__main__':
stu_cms = StudentCMS()
stu_cms.start()
学生类:
# 学生类文件
# 1.定义学生类,属性为(姓名,年龄,性别,手机,描述信息)
class Student:
def __init__(self,name,age,gender,phone,desc):
"""
初始化学生信息
:param name: 学生姓名
:param age: 学生年龄
:param gender: 学生性别
:param phone: 学生手机
:param desc: 学生描述信息
"""
self.name = name
self.age = age
self.gender = gender
self.phone = phone
self.desc = desc
#2.写__str__,打印属性内容
def __str__(self):
return f'name:{self.name},age:{self.age},gender:{self.gender},phone:{self.phone},desc:{self.desc}'
# __name__属性:在当前文件中打印的值是:__main__ ,在调用者中,打印的内容是:当前模块名
# 3.只在当前文件测试内容,另一个文件不打印内容,
if __name__ =='__main__':
s1 = Student('乔峰',23,'男','111','喝酒 交朋友')
print(s1)
# 将学生对象转为字典形式
stu_dict = s1.__dict__
print(stu_dict)
print(type(stu_dict))
学生管理系统类:
# 学生管理类
# 1.导包
from dm01_student import Student
import time
# 2 定义学生管理类,操作学生
class StudentCMS(object):
# 初始化属性
def __init__(self):
# 采用列表嵌套字典的方式,存储学生数据
self.student_list = []
# 4定义函数,打印操作界面
# 细节:该函数不属于某个对象,而是共享,定义为:静态方式
@staticmethod
def show_operator_view():
print('*'*25)
print('欢迎来到学生管理系统V2.0')
print('\t1.添加学生')
print('\t2.修改学生')
print('\t3.删除学生')
print('\t4.查询单个学生')
print('\t5.查询所有学生')
print('\t6.保存信息')
print('\t0.退出系统')
print('*' * 25)
# 6.退出系统 让用户二次确认
def exit_system(self):
# 询问用户是否确认退出系统
input_str = input('您确认要退出么?(Y/N):')
# if input_str =='y' or input_str =='Y'
# if input_str in ['y','Y']
if input_str.lower() == 'y': # lower():把字母都转为小写
# break 这里不是循环,不用break
exit('感谢您的使用,下次再见!')
# 7.添加学生
def add_student(self):
# 7.1 提示用户录入信息
name = input('请输入添加学生的姓名:')
age = eval(input('请输入添加学生的年龄:'))
gender = input('请输入添加学生的性别:')
phone = input('请输入添加学生的手机:')
desc = input('请输入添加学生的描述信息:')
# 7.2 封装成学生对象
stu = Student(name,age,gender,phone,desc)
# 7.3.添加到学生列表中
self.student_list.append(stu)
# 7.4.打印提示信息
print('添加信息成功')
# 8.显示所有学生信息
def show_all_student(self):
# 如果列表有人就打印,否则暂无此人
if len(self.student_list) > 0:
for stu in self.student_list:
print(stu)
else:
print('暂无此人,请添加后查询!')
# 9.删除学生
# 方式一: 删除第一个
# def delete_student(self):
# # 9.1 提示用户删除学生
# del_name = input('请输入删除学生的名字:')
# # 9.2 遍历学生列表
# for stu in self.student_list:
# if stu.name == del_name:
# self.student_list.remove(stu)
# print('删除成功!\n')
# break
# else:
# print('查无此人,请校验后删除!')
# 方式二:删除全部同名学生
def delete_student(self):
# 标记变量思想,True(表示删了),False(没删)
flag = False
del_name = input('请输入删除学生的名字:')
# 定义变量,记录列表中,遍历到的元素的索引
i = 0
while i<len(self.student_list):
# 判断遍历学生,是否与删除学生姓名一致
stu = self.student_list[i]
if stu.name == del_name:
# 如果一致就删除
self.student_list.remove(stu)
# 核心细节1:每删除一次,索引就-1
i -= 1
# 核心细节2,删除之后,要修改标记变量的状态
flag = True
# 无论是否删除,while循环都要+=1
i += 1
# 根据标记变量 进行响应提示
print('删除成功!\n' if flag else '查无此人,请校验后删除!\n')
# 10.修改学生update_student
def update_student(self):
# 10.1 提示用户修改学生
upd_name = input('请输入修改学生的名字:')
# 10.2 遍历学生列表
for stu in self.student_list:
if stu.name == upd_name:
# 如果一致就修改信息
stu.age = eval(input('请输入修改学生的年龄:'))
stu.gender = input('请输入修改学生的性别:')
stu.phone = input('请输入修改学生的手机:')
stu.desc = input('请输入修改学生的描述信息:')
print('修改成功!\n')
break
else:
print('查无此人,请校验后修改!')
# 11.查询单个学生
def search_one(self):
# 11.1输入查询的学生名字
search_name = input('请输入要查询学生姓名:')
# 11.2 循环学生列表
for stu in self.student_list:
# 11.3 一致就打印学生信息
if stu.name == search_name:
print(stu)
break
else:
print('查无此人,请校验后查询!')
# 12.保存学生信息到文件 ,格式为 字符串形式的 等于:存档
def save_data(self):
# 12.1 获取目的地文件的对象形式
dest_f = open('./student.data',mode = 'w',encoding='utf-8')
# 12.2 把学生列表,转为字符串
data = str([stu.__dict__ for stu in self.student_list])
# 12.3 把数据写入文件中
dest_f.write(data)
# 12.4 关闭对象,释放资源
dest_f.close()
print('文件录入成功')
# 13.启动程序的时候,从文件中加载到列表中, 等于:读档
def load_data(self):
# 13.1 尝试加载学生数据
try:
src_f = open('./student.data',mode = 'r',encoding='utf-8')
# 13.2 从文件中一次性读取所有数据
data = src_f.read()
# 13.3 判读读取到的内容是否为空,如果不为空,
if len(data) > 0:
self.student_list = [
Student(dict_stu['name'], dict_stu['age'], dict_stu['gender'], dict_stu['phone'], dict_stu['desc'])
for dict_stu in eval(data)]
except:
# 走到这,说明文件不存在
src_f = open('./student.data',mode = 'w',encoding='utf-8')
# 5.定义state 表示具体的流程
def start(self):
# 5.1 模拟用户等待
time.sleep(2)
# 5.2 调用load_data()函数
self.load_data()
# 5.3 死循环
while True:
# 5.4打印操作界面
StudentCMS.show_operator_view()
# 5.5提示用户录入的操作
number = input('请录入您要操作的功能编号:')
# 5.6 根据用户录入的数字,触发相应的功能
if number == '1':
# print('1.添加学生')
self.add_student()
elif number == '2':
# print('2.修改学生')
self.update_student()
elif number == '3':
# print('3.删除学生')
self.delete_student()
elif number == '4':
# print('4.查询单个学生')
self.search_one()
elif number == '5':
# print('5.查询所有学生')
self.show_all_student()
elif number == '6':
# print('6.保存信息')
self.save_data()
elif number == '0':
# print('0.退出系统')
# 调用函数exit_system,退出系统
self.exit_system()
else:
print('无该操作,请重新输入!')