一、程序功能(Function)
1、功能概述
利用Python完成一个学生信息的增删改查程序,主要涉及知识点:程序控制结构(实现可进可退的多级菜单)、文件读写操作(学生信息要保存到磁盘上的文件里)、利用函数实现功能模块化。
2、思维导图
- 百度脑图
https://naotu.baidu.com/ 创建自己的思维导图,整理思绪,更有利于创建项目。 
二、学生实体(Entity)
1、思维导图

2、关系模式
- 学生(学号, 姓名, 性别, 年龄, 班级, 专业, 系部, 电话)
3、学生表
- 行——记录——元组
- 列——字段——属性
 - 先将学生信息保存到文本文件里,用空格来隔开每个字段。

2021001 李晓红 女 19 2021级软件4班 软件技术 人工智能与大数据学院 15945456780
2021002 王晓刚 男 18 2021级软件4班 软件技术 人工智能与大数据学院 13890904567
2021003 唐雨涵 女 19 2021级软件4班 软件技术 人工智能与大数据学院 18878789023
2021101 张三丰 男 18 2021级大数据1班 大数据技术 人工智能与大数据学院 15945456780
2021102 肖雨林 男 18 2021级大数据1班 大数据技术 人工智能与大数据学院 18890904560
2021103 郑小翠 女 19 2021级大数据1班 大数据技术 人工智能与大数据学院 15890904567
4、操作问题
- 这里在保存文件的时候需要将编码改为ANSI,不然将会出现错误。

三、构造系统框架
1、创建主程序

- 效果图
 - 代码
while True:
print('用户登录')
print('==========')
print('1.登录')
print('2.退出')
print('==========')
mc1 = int(input('输入菜单号: '))
if mc1 == 1:
print('成功登入!')
elif mc1 == 2:
print('\n谢谢使用本程序\n')
break
2、建立主菜单
- 运用def定义函数定义学生管理系统主菜单,并调用。运行程序,查看结果。

3、建立二级菜单
4、利用Python将程序链接到学生信息文件
(1)打开、关闭文件,并打印内容
- 通过open()函数打开s_list.txt学生信息文件,并进行打印。
- f.close()打印学生信息后将文件关闭
 - 运行程序,查看结果。
 - 输出数据看似排列整齐,但当列宽改变时,数据位置也会跟着改变。
(2)将(1)运用到系统中
- 利用def定义函数,将(1)中的内容定义到学生管理系统中,便于随时调用。
- 将(1)中函数定义为get_all_students()函数,方便之后调用。
- return()函数返回所有学生信息,即其上一组函数所得到的结果。

四、对学生管理系统中的数据进行操作
1、增加学生记录
- 定义add_student()函数,并调用。
 - 运行查看结果,并录入新的信息。

2、查询学生记录
(1)查询全部学生记录
- 进行测试
 - 运行程序查看结果
 - 测试成功!将利用id查询学生信息的代码利用def定义,并应用到学生管理系统中。
 - 定义disaplay_all_students()函数

- 调用disaplay_all_students()函数
- 运行程序,查看结果
 - 测试成功。
(2)按学号查询学生记录
- 进行测试
 - 运行程序,查看结果
 - 发现添加记录成功了!将利用id查询学生信息的代码利用def定义,并应用到学生管理系统中。
 - 运行程序,查看结果。
 - 程序运行成功!
(3)按姓名查询学生记录
- 进行测试
 - 运行程序,查看结果
 - 测试成功!
- 运用到学生管理系统中。
3、修改学生信息
- 进行测试
 - 运行程序,查看结果
 - 测试成功,进行下一步,将该段程序定义为学生管理系统中的modify_student()函数。

4、删除学生信息
- 进行测试
 - 运行程序,查看结果
 - 测试成功
- 定义函数,放入学生管理系统中

- 学生管理系统成功完成。
- 现在还是一个简陋的一个程序,还有许多需要改进的地方,需要慢慢改进,如果有好的建议,评论区见,谢谢!
五、完整代码
def get_all_students():
students = []
f = open('s_list.txt')
for line in f:
line = line.replace('\n', '')
student = line.split(' ')
students.append(student)
f.close()
return students
def add_student():
students = get_all_students()
id = input('学号: ')
name = input('姓名: ')
sex = input('性别: ')
age = input('年龄: ')
grade_class = input('班级: ')
major = input('专业: ')
college = input('学院: ')
phone_number = input('电话号码: ')
students.append([id, name, sex, age, grade_class, major, college, phone_number])
f = open('s_list.txt', 'w')
for i in range(len(students)):
student = ' '.join(students[i]) + '\n'
f.write(student)
f.close()
print('学生记录添加成功!')
def disaplay_all_students():
students = get_all_students()
for i in range(len(students)):
for j in range(len(students[i])):
print(students[i][j], end=' ')
print()
def id_disaplay_student():
id = input('学号: ')
found = False
students = get_all_students()
for i in range(len(students)):
if (students[i][0] == id):
found =True
for j in range(len(students[i])):
print(students[i][j], end=' ')
break
if not found:
print(f'学生信息中没有学号为{id}的学生!')
def name_disaply_student():
name = input('姓名: ')
students = get_all_students()
found = False
for i in range(len(students)):
if (students[i][1] == name):
found = True
for j in range(len(students[i])):
print(students[i][j], end=' ')
break
if not found:
print(f'学生信息中没有姓名为{name}的学生!')
def query_student():
while True:
print('\n查询学生记录\n')
print('=================')
print('1.按学号查询学生记录')
print('2.按姓名查询学生记录')
print('3.查询全部学生记录')
print('4.返回上级菜单')
print('=================')
mc3 = int(input('输入菜单号:'))
if mc3 == 1:
id_disaplay_student()
elif mc3 == 2:
name_disaply_student()
elif mc3 == 3:
disaplay_all_students()
else:
break
def modify_student():
students = get_all_students()
id = input('需要修改信息的学生的学号: ')
new_name = input('姓名: ')
new_sex = input('性别: ')
new_age = input('年龄: ')
new_grade_class = input('班级: ')
new_major = input('专业: ')
new_college = input('学院: ')
new_phone_number = input('电话号码: ')
found = False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][1] = new_name
students[i][2] = new_sex
students[i][3] = new_age
students[i][4] = new_grade_class
students[i][5] = new_major
students[i][6] = new_college
students[i][7] = new_phone_number
print('修改成功!')
for j in range(len(students[i])):
print(students[i][j], end=' ')
break
if not found:
print(f'学生信息中没有学号为{id}的学生!')
f = open('s_list.txt', 'w')
for i in range(len(students)):
student = ' '.join(students[i]) + '\n'
f.write(student)
f.close()
def delete_student():
students = get_all_students()
id = input('输入要删除信息的学生的学号:')
found = False
for i in range(len(students)):
if (students[i][0] == id):
found = True
break
if not found:
print(f'学生信息中没有学号为{id}的学生!')
else:
del students[i]
print(f'学号为{id}的信息已成功删除!')
f = open('s_list.txt', 'w')
for i in range(len(students)):
student = ' '.join(students[i]) + '\n'
f.write(student)
f.close()
def login():
username = input('输入用户名: ')
password = input('输入密码: ')
if username == 'zl' and password == '202111':
while True:
print('\n学生信息管理\n')
print('===========')
print('1. 添加学生记录')
print('2. 查询学生记录')
print('3. 修改学生记录')
print('4. 删除学生记录')
print('5. 返回上级菜单')
print('===========')
mc2 = int(input('输入菜单号: '))
if mc2 == 1:
add_student()
elif mc2 == 2:
query_student()
elif mc2 == 3:
modify_student()
elif mc2 == 4:
delete_student()
else:
break
else:
print('\n用户名或密码错误,请重新登录\n')
while True:
print('用户登录')
print('==========')
print('1.登录')
print('2.退出')
print('==========')
mc1 = int(input('输入菜单号: '))
if mc1 == 1:
login()
elif mc1 == 2:
print('\n谢谢使用本程序\n')
break
六、总结
1、关于该系统现存在的问题
- 1.关于登录界面,当输入字符时会报错,这个问题可以将代码改为:
while True:
print('用户登录')
print('==========')
print('1.登录')
print('2.退出')
print('==========')
mc1 = input('输入菜单号: ')
if mc1 == str(1):
login()
elif mc1 == str(2):
print('\n谢谢使用本程序\n')
break
elif mc1 != 1 or mc1 != 2:
print('请输入正确的菜单号!')
- 2、修改学生记录还可以按照其他字段的信息修改,也可以单独修改一个字段的信息。
…… - 该系统现在还是一个简陋的程序,还有许多需要改进的地方,需要慢慢改进,如果有好的建议,评论区见,谢谢!
2、学习总结
- 书写程序时需要有一个好的思路,这样有利于对整个系统结构结构框架进行构建。
- 在写程序时,为防止出错找不到原因,可以先打开另一个页面,进行代码测试,书写正确后在放入主程序,这样可以高效避免错误发生。
- 书写程序需要有一个清晰的头脑,所以一定要注意休息。
- 学习python不是一天两天的事,要懂得《劝学》中的“锲而舍之,朽木不折;锲而不舍,金石可镂”
- 注意:Road in the foot!!!
|