需求说明
- 1-先打印提示主界面(1-6的数字):让用户选择要进行的操作
- 2-当用户选择1时,增加信息:添加学生信息(学生编号、学生姓名、联系方式),注意-学生编号必须唯一
- 3-当用户选择2时,修改信息:修改学生信息(先输入学生编号,如果学生信息已存在可以修改姓名和联系方式)
- 4-当用户选择3时,删除信息:删除学生信息(先输入学生编号,如果学生信息已存在进行删除)
- 5-当用户选择4时,查询一个信息:查询单个学生信息(根据学生编号查)
- 6-当用户选择5时,查询所有信息:直接返回所有数据
- 7-当用户选择6时,退出系统,注意-只要用户不主动退出,那就一直使用!!!
需求分析
- 定义函数print_info(),打印主界面提示信息
- 程序主入口main()函数,自定义while True循环实现调用print_info()函数,让用户选择对应的操作
- 注意:处理一下非法值
- 自定义函数add_stu(),实现添加学生信息,当用户选择1时调用add_stu()
- 注意:学生编号必须唯一
- 注意:手机号格式验证
- 自定义函数update_stu(),实现修改学生信息,当用户选择2时调用update_stu()
- 注意:只能根据学生编号修改学生姓名和手机号
- 注意:如果学生编号不存在,给出提示
- 自定义函数delete_stu(),实现删除学生信息,当用户选择3时调用delete_stu()
- 注意:只能根据学生编号删除
- 注意:如果学生编号不存在,给出提示
- 自定义函数query_one(),实现查询单个学生信息,当用户选择4时调用query_one()
- 注意:根据编号查询
- 自定义函数query_all(),实现查询所有学生信息,当用户选择5时调用query_all()
- 当用户选择6时,跳出while True循环
技术选择
- 基础语法:print() input() 字面量 注释 关键字 变量 数据类型 字符串格式化
- 判断语句:if elif elif … else
- 循环语句:while和for循环
- 数据容器:列表 字符串 字典
- 函数:定义函数 调用函数 局部变量和全局变量 global
- 文件:后续会用数据库代替保存数据
- 异常:try … except … else … finally
需求实现
公共工具模块
import re
def is_phone_num(phone_num):
"""
判断手机号格式是否正确
:param phone_num:
:return:
"""
result = re.match(pattern='^1\d{10}$', string=phone_num)
return result
基于内存实现
import mytool
"""
- 1-先打印提示主界面(1-6的数字):让用户选择要进行的操作
- 2-当用户选择1时,增加信息:添加学生信息(学生编号、学生姓名、联系方式),注意-学生编号必须唯一
- 3-当用户选择2时,修改信息:修改学生信息(先输入学生编号,如果学生信息已存在可以修改姓名和联系方式)
- 4-当用户选择3时,删除信息:删除学生信息(先输入学生编号,如果学生信息已存在进行删除)
- 5-当用户选择4时,查询一个信息:查询单个学生信息(根据学生编号查)
- 6-当用户选择5时,查询所有信息:直接返回所有数据
- 7-当用户选择6时,退出系统,注意-只要用户不主动退出,那就一直使用!!!
"""
# 定义全局变量列表,用于保存所有学生信息
stu_list = []
def print_info():
"""
给用户提示操作选择
:return: None
"""
print('--------------------- 学生信息管理系统 --------------------------')
print("用户选择1时,增加信息:添加学生信息")
print("用户选择2时,修改信息:修改学生信息")
print("用户选择3时,删除信息:删除学生信息")
print("用户选择4时,查询信息:查询单个学生信息")
print("用户选择5时,查询信息:查询所有学生信息")
print("用户选择6时,退出系统")
print('--------------------- 学生信息管理系统 --------------------------')
def add_stu():
# 定义列表用于保存所有的学生信息
global stu_list
# 从键盘输入学生信息
id = input("请您输入要添加的学生编号:")
# 判断学生编号是否已存在
for stu_dict in stu_list:
if stu_dict['id'] == id:
print("对不起,您输入的学生编号已经存在,请重新输入")
# 结束当前函数
return
name = input("请您输入要添加的学生姓名:")
phone = input("请您输入要添加的学生手机号:")
# 判断手机号是否符合规则
result = mytool.is_phone_num(phone)
if result is None:
print("对不起,您输入的手机号不正确,请重新输入")
# 结束当前函数
return
# 把学生信息封装成字典
stu_dict = {'id': id, 'name': name, 'phone': phone}
# 将学生信息字典保存到列表中
stu_list.append(stu_dict)
print(stu_list)
def update_stu():
"""
修改学生信息
:return:
"""
# 声明全局变量
global stu_list
# 提示用户输入需要修改的学生编号
id = input("请您输入要修改的学生编号:")
# 遍历列表,取出每一个学生信息(字典)
for stu_dict in stu_list:
# 判断编号是否存在
if stu_dict['id'] == id:
# 修改姓名和手机号
name = input("请您输入新的学生姓名:")
phone = input("请您输入新的学生电话:")
# 判断手机号是否符合规则
result = mytool.is_phone_num(phone)
if result is None:
print("对不起,您输入的手机号不正确,请重新输入")
# 结束当前函数
return
stu_dict['name'] = name
stu_dict['phone'] = phone
print(stu_list)
break
else:
print("您输入的学生编号不存在!!!")
def delete_stu():
"""
删除学生信息
:return:
"""
# 声明全局变量
global stu_list
# 从键盘输入要删除的学生编号
id = input("请您输入要删除的学生编号:")
# 遍历列表,判断学生编号是否已存在
for stu_dict in stu_list:
if stu_dict['id'] == id:
# 如果学生编号已存在,执行删除
stu_list.remove(stu_dict)
print(f"{stu_dict}相关信息已成功删除!!!")
break
else:
# 如果循环遍历后没有找到对应的学生编号,给出提示
print("您输入的学生编号不存在,请重新输入!!!")
def query_one():
"""
查询单个学生信息
:return:
"""
# 声明全局变量
global stu_list
# 从键盘输入要查询的学生编号
id = input("请输入您要查询的学生编号:")
# 遍历列表,判断学生编号是否存在
for stu_dict in stu_list:
if stu_dict['id'] == id:
# 如果学生编号存在
print(f"学生编号:{stu_dict['id']}, 学生姓名:{stu_dict['name']}, 学生手机号:{stu_dict['phone']}")
break
else:
print("您输入的学生编号不存在,请重新操作!!!")
def query_all():
"""
查询所有学生信息
:return:
"""
# 声明全局变量
global stu_list
# 判断当前学生信息是否有值
if len(stu_list) > 0:
# 遍历列表,格式化输出信息
for stu_dict in stu_list:
print(f"学生编号:{stu_dict['id']}, 学生姓名:{stu_dict['name']}, 学生手机号:{stu_dict['phone']}")
else:
print("现在还没有学生信息,赶紧去招生!!!")
if __name__ == '__main__':
while True:
# 调用打印主界面函数
print_info()
# 从键盘获取用户选择
choice = input('请输入您的选择:')
if choice == '1':
add_stu()
elif choice == '2':
update_stu()
elif choice == '3':
delete_stu()
elif choice == '4':
query_one()
elif choice == '5':
query_all()
elif choice == '6':
break
else:
print("您的输入有误,请重新输入!!!")
基于文件实现
"""
1. 先打印提示主界面(1-6的数字): 让用户选择他/她要进行的操作.
2. 当用户选择1的时候, 实现操作: 添加学生(学生编号, 学生姓名, 手机号). 注意: 学生编号必须唯一
3. 当用户选择2的时候, 实现操作: 删除学生(根据编号删除)
4. 当用户选择3的时候, 实现操作: 修改学生信息(根据编号修改, 只能改姓名, 手机号)
5. 当用户选择4的时候, 实现操作: 查询单个学生信息(根据编号查询)
6. 当用户选择5的时候, 实现操作: 查询所有学生信息
7. 当用户选择6的时候, 实现操作: 退出系统 注意: 只要用户不主动退出,那就一直能用!!!
"""
import json
from mytool import is_phone_num
# 1.主界面函数
def print_info():
# 给用户提示的各种选项
print('===============学生管理系统================')
print('1.添加学生(学生编号, 学生姓名, 手机号)')
print('2.删除学生(根据编号删除)')
print('3.修改学生信息(根据编号修改, 只能改姓名, 手机号)')
print('4.查询单个学生信息(根据编号查询)')
print('5.查询所有学生信息')
print('6.退出系统')
print('===============学生管理系统================')
# 3.添加学生
def add_stu():
# 3.1 提示用户输入学生编号
add_id = input('请您输入要添加的学生编号:')
# 3.2 先判断该学号是否存在,如果存在就结束当前操作,如果不存在就添加学生其他信息
# 从文件中读取学生信息
with open(file='./student_info.txt', mode='r') as f:
stu_list = f.readlines()
# if stu_list:
for stu_str in stu_list:
# 将学生信息字符串转换为字典
stu_dict = json.loads(stu_str)
# 如果id已经存在,就结束当前操作
if stu_dict['id'] == add_id:
print('对不起,您输入的学生编号已经存在,请重新操作')
# 结束当前函数
return
# 如果程序走到此处,说明学号不存在,可以直接添加
name = input('请您输入要添加的学生姓名:')
tel = input('请您输入要添加的学生电话:')
while is_phone_num(tel) is None:
tel = input("电话格式不正确,请重新输入:")
# 3.3 把学生信息封装成字典,一个字典代表一个学生
stu_dict = {"id": add_id, "name": name, "tel": tel}
# 3.4 把学生添加到列表中
# stu_list.append(stu_dict)
# 3.4 将列表中的信息追加到学生信息文件中
with open('./student_info.txt', 'a') as f:
# 注意:不要使用str(stu_dict)将字典转换为字符串,str()转换之后是单引号
# 使用json.loads(str)将字符串转换回字典时需要,字符串放在双引号中
f.write(json.dumps(stu_dict) + "\n")
print(f"{stu_dict}的学生信息已成功录入!")
# 4.删除学生
def del_stu():
# 获取删除学生的学号
del_id = input('请您输入要删除的学生编号:')
# 遍历列表,判断如果学号存在就删除对应的学生信息,如果不存在就提示您输入的学号不存在,请重新操作
# 从文件中读取学生信息
with open(file='./student_info.txt', mode='r') as f:
stu_list = f.readlines()
for stu_str in stu_list:
# 将学生信息字符串转换为字典
stu_dict = json.loads(stu_str)
# 判断
if stu_dict['id'] == del_id:
# 如果学号存在就删除对应的学生信息
stu_list.remove(stu_str)
# 删除成功后,就跳出循环
print(f'{stu_dict}信息删除成功删除成功!')
break
else:
# 如果整个循环遍历后都没有找到对应的学号,说明学号不存在就直接提示即可
print('您输入的学号不存在,请重新操作')
# 将列表中的信息覆盖写入到学生信息文件中
with open('./student_info.txt', 'w') as f:
# 将删除信息之后的学生列表一行行写入文件
f.writelines(stu_list)
# 5.查看单个学生信息
def search_one():
# 获取要查找的学生的学号
search_id = input('请您输入要查找的学生编号:')
# 遍历列表,判断如果学号存在打印对应的学生信息,如果不存在就提示您输入的学号不存在,请重新操作
# 从文件中读取学生信息
with open(file='./student_info.txt', mode='r') as f:
stu_list = f.readlines()
for stu_str in stu_list:
# 将学生信息字符串转换为字典
stu_dict = json.loads(stu_str)
# 判断
if stu_dict['id'] == search_id:
# 如果学号存在打印对应的学生信息
print(f"学号:{stu_dict['id']},姓名:{stu_dict['name']},电话:{stu_dict['tel']}")
# 打印后跳出循环
break
else:
# 如果整个循环遍历后都没有找到对应的学号,说明学号不存在就直接提示即可
print('您输入的学号不存在,请重新操作')
# 6.查看所有学生信息
def search_all():
# 判断:如果列表中有学生信息就输出,没有就提示添加后再来查
# 从文件中读取学生信息
with open(file='./student_info.txt', mode='r') as f:
stu_list = f.readlines()
if len(stu_list) > 0:
# 遍历列表,格式化输出信息
for stu_str in stu_list:
# 将学生信息字符串转换为字典
stu_dict = json.loads(stu_str)
# 格式化输出
print(f"学号:{stu_dict['id']},姓名:{stu_dict['name']},电话:{stu_dict['tel']}")
else:
print('现在还没有学生信息哦,请添加后再来查看~')
# 7.更改学生信息
def update_stu():
# 提示用户输入要更改的学生的编号
update_id = input('请您输入要修改的学生的编号:')
# 遍历列表
# 从文件中读取学生信息
with open(file='./student_info.txt', mode='r') as f:
stu_list = f.readlines()
for stu_str in stu_list:
# 将学生信息字符串转换为字典
stu_dict = json.loads(stu_str)
# 如果学号存在就去更新
if stu_dict['id'] == update_id:
# 将学生信息列表中旧的信息删除
stu_list.remove(stu_str)
# 更新姓名和电话
name = input('请您输入新的姓名:')
tel = input('请您输入新的电话:')
stu_dict['name'] = name
stu_dict['tel'] = tel
# 将新的学生信息字典转换为字符串添加到学生信息列表中
# 注意:不要忘了换行符
stu_list.append(json.dumps(stu_dict) + "\n")
# 更新成功后,就跳出循环
print(f'{stu_dict}信息更新成功!')
break
else:
# 如果学号不存在提示不存在
print('您输入的学号不存在,请重新操作')
# 将列表中的信息覆盖写入到学生信息文件中
with open('./student_info.txt', 'w', encoding='utf8') as f:
# 将删除信息之后的学生列表一行行写入文件
f.writelines(stu_list)
# 2.让用户选择他/她要进行的操作
while True:
# 调用主界面
print_info()
# 2.1获取用户的选择
choice = input('请您输入您的选择:')
# 2.2判断并调用对应操作
if choice == '1':
# print('调用添加学生的函数')
add_stu()
elif choice == '2':
# print('调用删除学生的函数')
del_stu()
elif choice == '3':
# print('调用修改学生的函数')
update_stu()
elif choice == '4':
# print('调用查询单个学生信息的函数')
search_one()
elif choice == '5':
# print('调用查询所有学生信息的函数')
search_all()
elif choice == '6':
print('谢谢惠顾,欢迎再次光临!')
break
else:
print('您的选择有误,请参考提示给出准确的选择!!!')
标签:管理系统,信息,学生,stu,dict,编号,print
From: https://blog.csdn.net/qq_51504246/article/details/142546036