如何存放文件
1.代码文件放置于项目文件夹下
2.非代码文件放置于项目文件夹下的一个子文件夹下(命名固定,养成良好习惯)files
如何将模块文件相互关联
在主模块中导入其他模块
如何设计数据结构
目的:
1.确定数据的存放类型
存放类型
1.字典
特点:一个字典里可以保存不同类型的数据信息
如何实现:通过key来区分不同类型
2.列表
特点:一个列表里可以保存相同类型的数据信息
实际运用:
通过功能来确定数据类型
功能:面向生活,功能的特点
最外层是一个字典,确定整个项目
通过设置key来确定管理的项目
通过设置value来设置管理项目的数据结构
一个键值对对应一个功能或者是项目
2.存放类型的文件类型选择
文件类型选择
目的:为了将数据持久化
原因:程序在内存中运行,一旦结束,数据就会丢失,为了下次程序运行能够使用之前的数据,需要在程序结束前将数据保存在硬盘中
普通文本:内容是字符串
json:内容是数据类型
为何创建多个模块
目的:让代码更便于管理
原则:通常一个页面的代码放置于一个模块中
如何让模块的代码显示更有层次
思维方式:逆向思维
1.搭建框架,调试
如何搭建框架(不同条件实现不同功能)
分支:不同条件实现不同功能
循环:希望某些代码重复执行
2.根据功能确定函数名,并调用
3.根据难易程度逐一实现代码功能
通用模块
要求:
1.函数说明文档清楚明白
2.面向生活,是否需要异常捕获
技巧
全局变量:储存可能会发生改变的数据
学生管理系统(第一遍)遗漏点
- 从文件读取数据时,遗漏判断是否为空,如果有几层,要判断到直接要获取的数据类型为止
-如何关联两个函数
设置参数,可以让一个函数使用另一个函数的数据
将数据设置为参数 - 文件的读写需要异常捕获来确定是否有文件(告诉用户文件是否存在)
设置返回值有助于判断是否读写成功
学生管理系统(第一遍)代码
文件夹:两个
第一个:项目文件夹
存放py模块和非代码文件夹
第二个:非代码文件夹
命名:files(自己熟悉的固定的文件名)
存放普通文本和json文件
普通文本:页面
json文件:放置用户信息
数据结构:
最外层:字典
目的:通过key来区分不同功能,也便于以后添加功能
中间层:列表
目的:存放相同类型的数据
最里层:字典
目的:存放不同类型的数据
文件的读写
数据本地化,为了将数据保存,并且以后还可以使用
登陆注册模块:mainPage.py
"""__author__ = 蒲 """
import fileManagerModule
import studentManagerSyetem
# 保管用户账号信息的文件
file_name = 'allUser.json'
def login():
"""登录功能"""
all_user = fileManagerModule.read_json_file(file_name)
# 输入账号
while 1:
user_name = input('请输入账号:')
if user_name in all_user:
break
else:
print('1.账号不存在,请重新输入')
print('2.返回')
input_value = input('请选择(1-2):')
if input_value == '1':
continue
else:
return
# 输入密码
while 1:
password = input('请输入密码:')
for key in all_user:
if all_user[key] == password:
print('登录成功')
studentManagerSyetem.user_name = user_name
studentManagerSyetem.show_student_page()
return
if all_user[key] != password:
print('1.密码输入错误,请重新输入')
print('2.返回')
input_value = input('请选择(1-2):')
if input_value == '1':
continue
else:
return
def register():
"""注册功能"""
# 判断账号
while 1:
username = input('请输入账号(3-6):')
if 3 <= len(username) <= 6:
break
else:
print('账号长度不符合规格, 请重新输入')
# 判断密码
while 1:
# 输入密码
password = input('请输入密码(6-12):')
# 判断密码是否符合要求
if 6 <= len(password) <= 12:
# 符合要求
print('密码输入成功')
break
else:
# 不符合要求
print('密码长度不符合规格,请重新输入')
all_user = fileManagerModule.read_json_file(file_name)
if not all_user:
all_user = {}
# 更新数据
all_user[username] = password
# 将更新的数据重新写入文件中
result = fileManagerModule.write_json_file(all_user, file_name)
if result:
print('注册成功')
else:
print('注册失败')
def show_system_interface():
"""显示登录注册页面,并且做出相应选择"""
while 1:
print(fileManagerModule.read_text_file('system_interface.txt'))
input_value = input('请选择(1-3):')
if input_value == '1':
login()
elif input_value == '2':
register()
elif input_value == '3':
return
else:
print('输入有误,请重新输入')
def main():
show_system_interface()
if __name__ == '__main__':
main()
学生管理模块:studentManagerSyetem.py
"""__author__ = 蒲"""
import fileManagerModule
user_name = 'abc'
key_max_number = 'max_number'
key_stu_name = 'name'
key_stu_age = 'age'
key_stu_tel = 'tel'
key_stu_id = 'id'
key_all_student = 'all_student'
def show_student_info(stu:dict):
"""显示学生信息"""
return '学号:%s 姓名:%s 年龄:%s 电话:%s' % (stu[key_stu_id], stu[key_stu_name], stu[key_stu_age], stu[key_stu_tel])
def del_name_student():
"""按姓名删除学生"""
all_students = fileManagerModule.read_json_file(user_name + '.json')
if not all_students:
print('没有学生,请先添加学生')
input_name = input('请输入要删除的学生姓名:')
students = all_students[key_all_student]
same_students = []
for dict in students:
if input_name == dict[key_stu_name]:
same_students.append(dict)
# 判断里面是否添加过学生
if same_students == []:
print('没有该学生信息')
return
# 将相同的学生每人贴上一个标签
index = 0
for stu in same_students:
# 打印学生的信息
print(str(index) + ' ' + show_student_info(stu))
index += 1
print('q 退出')
input_value = input('请选择要删除学生对应的标号:')
if input_value == 'q':
return
# 删除学生
del_stu = same_students[int(input_value)]
students.remove(del_stu)
# 更新数据
all_students[key_all_student] = students
# 将更新的数据保存到本地
result = fileManagerModule.write_json_file(all_students, user_name + '.json')
if result:
print('删除成功')
else:
print('删除失败')
print('1.请继续')
print('2.返回')
input_value1 = input('请选择(1-2):')
if input_value1 != '1':
return
def del_id_student():
"""按学号删除学生"""
all_students = fileManagerModule.read_json_file(user_name + '.json')
if not all_students:
print('没有学生,请先添加学生')
return
input_id = input('请输入要删除的学生学号:')
students = all_students[key_all_student]
for dict in students[:]:
if input_id == dict[key_stu_id]:
students.remove(dict)
# 更新数据
all_students[key_all_student] = students
# 将数据重新写入
result = fileManagerModule.write_json_file(all_students, user_name + '.json')
if result:
print('删除成功')
else:
print('删除失败')
print('1.请继续')
print('2.返回')
input_value = input('请选择(1-2):')
if input_value != '1':
return
def del_student():
"""删除学生"""
while 1:
print('1.按姓名删除')
print('2.按学号删除')
print('3.返回')
input_value = input('请选择(1-3):')
if input_value == '1':
# 按姓名删除
del_name_student()
elif input_value == '2':
# 按学号删除
del_id_student()
elif input_value == '3':
return
else:
print('输入有误,请重新输入')
def id_change_student():
"""按学号修改学生信息"""
all_students = fileManagerModule.read_json_file(user_name + '.json')
if not all_students:
print('没有学生,请先添加学生')
return
input_id = input('请输入要修改的学生学号:')
students = all_students[key_all_student]
for stu in students:
if input_id == stu[key_stu_id]:
print('1.修改学生年龄')
print('2.修改学生电话')
print('3.返回')
input_num = input('请选择(1-3)')
if input_num == '1':
input_name = input('请输入新的年龄:')
stu[key_stu_age] = input_name
elif input_num == '2':
input_tel = input('请输入新的电话:')
stu[key_stu_tel] = input_tel
else:
return
# 将更新的数据重新写入文件中
result = fileManagerModule.write_json_file(all_students, user_name + '.json')
if result:
print('修改成功')
else:
print('修改失败')
print('1.继续修改')
print('2.返回')
input_num1 = input('请选择(1-2):')
if input_num1 != '1':
return
def name_change_student():
"""按姓名修改学生信息"""
all_students = fileManagerModule.read_json_file(user_name + '.json')
if not all_students:
print('没有学生,请先添加学生')
return
students = all_students[key_all_student]
input_name = input('请输入要修改的学生姓名:')
same_students = []
for stu in students:
if input_name == stu[key_stu_name]:
same_students.append(stu)
if not same_students:
print('没有该学生')
return
index = 0
for change_stu in same_students:
print(str(index) + ' ' + show_student_info(change_stu))
print('q. 退出')
input_value = input('请输入要修改学生的标号:')
if input_value == 'q':
return
change_student = same_students[int(input_value)]
print('1.修改学生年龄')
print('2.修改学生电话')
print('3.返回')
input_num2 = input('请选择(1-3):')
if input_num2 == '1':
input_age1 = input('请输入新的年龄:')
change_student[key_stu_age] = input_age1
elif input_num2 == '2':
input_tel1 = input('请输入新的电话')
change_student[key_stu_tel] = input_tel1
else:
return
for stu in students:
if change_student[key_stu_id] == stu[key_stu_id]:
students.remove(stu)
students.append(change_student)
result = fileManagerModule.write_json_file(all_students, user_name + '.json')
if result:
print('修改成功')
else:
print('修改失败')
print('1.继续修改')
print('2.返回')
input_value1 = input('请选择(1-2):')
if input_value1 != '1':
return
def change_student():
"""修改学生信息"""
while 1:
print('1.按姓名修改')
print('2.按学号修改')
print('3.返回')
input_value = input('请选择(1-3):')
if input_value == '1':
# 按姓名修改
name_change_student()
elif input_value == '2':
# 按学号修改
id_change_student()
elif input_value == '3':
return
else:
print('输入有误,请重新输入')
def find_student_name():
"""按照姓名查找学生"""
all_students = fileManagerModule.read_json_file(user_name + '.json')
while 1:
input_name = input('请输入要查找的学生姓名:')
count = 0
for student in all_students[key_all_student]:
if input_name == student[key_stu_name]:
print(show_student_info(student))
count += 1
if count == 0:
print('没有该学生信息')
print('1.重新输入 2.返回')
input_value = input('请选择(1-2):')
if input_value != '1':
return
def find_student_stu():
"""按照学号查找学生"""
all_students = fileManagerModule.read_json_file(user_name + '.json')
while 1:
input_id = input('请输入要查找的学生学号:')
count = 0
for student in all_students[key_all_student]:
if input_id == student[key_stu_id]:
print(student)
count += 1
if count == 0:
print('没有该学生信息')
print('1.重新输入 2.返回')
input_value = input('请选择(1-2):')
if input_value != '1':
return
def find_student():
"""查找学生"""
while 1:
print('1.查看所有学生')
print('2.按姓名查找')
print('3.按学号查找')
print('4.返回')
input_value = input('请选择(1-4):')
if input_value == '1':
# 查看所有学生
all_students = fileManagerModule.read_json_file(user_name + '.json')
for stundent in all_students[key_all_student]:
print(show_student_info(stundent))
elif input_value == '2':
# 按姓名查找
find_student_name()
elif input_value == '3':
# 按学号查找
find_student_stu()
elif input_value == '4':
return
else:
print('输入有误,请重新输入')
def add_the_student():
"""添加学生"""
while 1:
# 读取文件中的学生信息
all_students = fileManagerModule.read_json_file(user_name + '.json')
if not all_students:
all_students = {}
# 读取文件中的学号
max_num = all_students.setdefault('max_number', 0)
max_num += 1
# 输入学生信息
name = input('请输入姓名:')
age = input('请输入年龄:')
tel = input('请输入电话:')
id = 'stu' + str(max_num).rjust(5, '0')
# 将学生信息存进字典中
student = {key_stu_name: name, key_stu_age: age, key_stu_tel: tel, key_stu_id: id}
# 将新学生加入到系统的所有学生中
students = all_students.get(key_all_student, [])
students.append(student)
# 更新数据
all_students[key_all_student] = students
all_students[key_max_number] = max_num
# 将更新后的数据写入文件中
result = fileManagerModule.write_json_file(all_students, user_name + '.json')
if result:
print('添加成功')
else:
print('添加失败')
print('1.继续添加')
print('2.返回')
input_value = input('请选择(1-2):')
if input_value != 1:
return
def add_student():
"""是否添加学生"""
print('====添加学生====')
print('1.添加')
print('2.返回')
input_value = input('请选择(1-2):')
if input_value == '1':
add_the_student()
else:
return
def show_student_system(user_name):
"""将使用者传入界面"""
return (fileManagerModule.read_text_file('student_system_interface.txt')) % user_name
def show_student_page():
"""显示学生管理页面"""
while 1:
# 打印学生管理页面
print(show_student_system(user_name))
# 根据不同输入做出不同选择
input_value = input('请选择(1-5):')
if input_value == '1':
# 添加学生
add_student()
elif input_value == '2':
# 查找学生
find_student()
elif input_value == '3':
# 修改学生
change_student()
elif input_value == '4':
# 删除学生
del_student()
elif input_value == '5':
break
else:
print('输入有误,请重新输入')
def main():
show_student_page()
if __name__ == '__main__':
main()
文件管理模块:fileManagerModule.py
"""__author__ = 蒲金彪"""
# 文件管理模块,声明与文件读写相关的函数
import json
# 文件是否存在(异常捕获,返回值)
# 通过参数用用户的角度来思考
def read_text_file(file_name: str):
"""
读取普通文本的内容
:param file_name: 文件名
:return: 文本的所有内容,不存在返回None
"""
try:
with open('files/' + file_name, 'r', encoding='utf-8') as f:
return f.read()
except:
print('警告:文件%s不存在' % file_name)
def write_text_file(content, file_name):
"""
向普通文本中写入内容
:param content: 文件内容
:param file_name: 文件名
:return: 不存在返回None
"""
try:
with open('file/' + file_name, 'w', encoding='utf-8') as f:
f.write(content)
# 判断写入成功
return True
except:
print('警告:写入失败')
# 判断写入失败
return False
def read_json_file(file_name):
"""
读取json文件中的内容
:param file_name: 文件名
:return: 不存在返回None
"""
try:
with open('files/' + file_name, 'r', encoding='utf-8') as f:
return json.load(f)
except (UnboundLocalError,FileNotFoundError):
print('警告:文件%s不存在' % file_name)
# 写入时需要考虑传达给用户是否写入成功(用返回值来分辨)
# 写入时,关注的是是否写入成功
def write_json_file(content, file_name):
"""
将指定数据写入json文件中
:param content:要写入的内容(能够转换为json的对象)
:param file_name: 要写入数据的json文件名
:return: 是否写入成功
"""
try:
with open('files/' + file_name, 'w', encoding='utf-8') as f:
json.dump(content, f)
# 判断写入成功
return True
except:
print('警告:写入失败')
# 判断写入失败
return False









网友评论