Python综合练习:学生信息管理
- 一、程序功能(Function)
- 1.功能概述
- 2.思维导图
- 二、学生实体(Entity)
- 1.思维导图
- 2.关系模式
- 3.学生表记录
- 三、读取学生文件
- 1、演示用二维列表保存多个学生信息
- 2.读取学生文件数据,保存到二维列表里
- 3,我们操作可能会遇到的问题
- 四、对学生二维列表进行增删改查操作
- 1.增加学生记录
- 2.查询学生记录
- (1)按照学号来查学生记录
- (2)按照姓名查询学生记录
- 3.修改学生记录
- 4.删除学生记录
- 五、将学生二维写入学生文件
- 1.将students写入学生.txt
- 2.查看更新过后的学生.txt
- 六、构建学生信息管理多级菜单系统
- (一)构建多级菜单系统
- (二)实现学生信息管理功能模块
- 1.编写增加学生记录功能
- 2.编写查询学生记录功能
- 3.编写修改学生记录功能
- 4.编写删除学生记录功能
一、程序功能(Function)
1.功能概述
利用Python完成一个学生信息的增删改查程序,主要涉及知识点:程序控制结构(做多级菜单)、文件读写操作(学生信息要保存到磁盘上的文件里)。
2.思维导图
二、学生实体(Entity)
1.思维导图
2.关系模式
学生(学号,姓名,班级,性别,专业系部,电话)
3.学生表记录
(行——记录——元组,列——字段——属性)
学号 | 姓名 | 班级 | 性别 | 年龄 | 专业 | 系部 | 电话 |
---|---|---|---|---|---|---|---|
10107530 | 柒木楠 | 学术一班 | 男 | 19 | 学术 | 南哈蒙理工学院学院 | 11111111 |
10107531 | 不言 | 学术一班 | 男 | 18 | 学术 | 南哈蒙理工学院学院 | 22222222 |
10107532 | 妄言 | 学术一班 | 女 | 18 | 学术 | 南哈蒙理工学院学院 | 33333333 |
10107533 | 柒夏 | 学术一班 | 男 | 20 | 学术 | 南哈蒙理工学院学院 | 44444444 |
10107534 | 顾伟亦 | 学术一班 | 男 | 17 | 学术 | 南哈蒙理工学院学院 | 55555555 |
10107535 | 杨洋 | 学术一班 | 男 | 18 | 学术 | 南哈蒙理工学院学院 | 66666666 |
10107536 | 司徒沫 | 学术一班 | 女 | 18 | 学术 | 南哈蒙理工学院学院 | 77777777 |
- 这学期,我们还没学过MySQL,所以我们将学生信息保存到文本文档里,用空格来隔开每个字段。
三、读取学生文件
- 文件结构是由若干行若干列构成,一行一行地读取,每一行读取出来的字符串,通过空格拆分成一个列表,所有行读取出来之后就自然构成列表的列表,即二维列表。
1、演示用二维列表保存多个学生信息
- 创建六个列表:student1、student2、student3、student4、student5、student6和student7,然后添加到student是列表里
- 直接输出student列表
- 格式输出students
2.读取学生文件数据,保存到二维列表里
-
查看学生文件位置
-
切换工作目录
-
读取学生文档,保存到二位列表并输出
-
大家可以发现一个问题,每一行尾巴有个“\n”,需要去除掉才好。
-
格式化输出students列表
-
len(students) - 得到二维列表的行数
-
len(students[i]) - 得到二维列表第(i + 1)行的元素个数,即列数
3,我们操作可能会遇到的问题
- 学生.txt采用UTF-8编码方式保存
- 读取时会报错
- 我们需要怎么解决呢?这里我们只需要将学生.txt文件改成ANSI编码方式保存就可以了。
- 现在读取文档不会报错咯
四、对学生二维列表进行增删改查操作
1.增加学生记录
- 目前students里有七个元素(学生)
- 添加一个新元素(学生)
- 输出更新之后的students二维列表
2.查询学生记录
(1)按照学号来查学生记录
- 这个程序有个缺陷,如果没有查到,就吗,没有任何输出信息,按理应该给用户一个提示:“查无此人!”或“无法查询!”
(2)按照姓名查询学生记录
3.修改学生记录
- 修改学号为"10107530"的学生记录,将年龄改为“16”,电话改为“15152525”
- 修改学号为“10107531”的学生记录,将年龄改为“20”,电话改为“13133535”
4.删除学生记录
- 删除学号为“10107530”的学生记录
- 删除学号为“10107531”的学生记录
五、将学生二维写入学生文件
1.将students写入学生.txt
2.查看更新过后的学生.txt
六、构建学生信息管理多级菜单系统
(一)构建多级菜单系统
- 编写程序 - 学生信息管理.py
# -*- coding: utf-8 -*-
"""
功能:学生信息管理
作者:柒木楠
日期:2021.1.8
"""
def add_student():
print('\n添加学生记录功能尚未开发\n')
def query_student():
while True:
print('查询学生记录')
print('====================')
print('1.按照学号查询学生记录')
print('2.按照姓名查询学生记录')
print('3.查询全部学生记录')
print('4.返回上级菜单')
print('====================')
mc3 = int(input('输入菜单号:'))
if mc3 == 1:
print('\n按学号查询学生记录功能尚未开发\n')
elif mc3 == 2:
print('\n按姓名查询学生记录功能尚未开发\n')
elif mc3 == 3:
print('\n查询全部学生记录功能尚未开发\n')
else:
break
def modify_student():
print('\n修改学生记录功能尚未开发\n')
def delete_student():
print('\n删除学生记录功能尚未开发\n')
def login():
username = input('输入用户名:')
password = input('输入密码:')
if username == '柒木楠' and password == '9527':
while True:
print('学生信息管理')
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谢谢使用本程序!')
break
- 运行 程序,并进行测试
(二)实现学生信息管理功能模块
1.编写增加学生记录功能
# -*- coding: utf-8 -*-
"""
功能:学生信息管理
作者:柒木楠
日期:2021.1.8
"""
def get_all_students():
students = []
f = open('学生.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('姓名:')
gender = input('性别:')
age = input('年龄:')
clazz = input('班级:')
major = input('专业:')
department = input('系部:')
telephone = input('电话:')
students.append([id,name,gender,age,clazz,major,department,telephone])
f = open('学生.txt','w')
for i in range(len(students)):
student = ' '.join(students[i]) + '\n'
f.write(student)
f.close()
print('\n恭喜,学生记录添加成功!\n')
def display_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 query_student():
while True:
print('查询学生记录')
print('====================')
print('1.按照学号查询学生记录')
print('2.按照姓名查询学生记录')
print('3.查询全部学生记录')
print('4.返回上级菜单')
print('====================')
mc3 = int(input('输入菜单号:'))
if mc3 == 1:
print('\n按学号查询学生记录功能尚未开发\n')
elif mc3 == 2:
print('\n按姓名查询学生记录功能尚未开发\n')
elif mc3 == 3:
display_all_students()
else:
break
def modify_student():
print('\n修改学生记录功能尚未开发\n')
def delete_student():
print('\n删除学生记录功能尚未开发\n')
def login():
username = input('输入用户名:')
password = input('输入密码:')
if username == '柒木楠' and password == '9527':
while True:
print('学生信息管理')
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谢谢使用本程序!')
break
-
启动程序,查看效果
-
查看添加了新记录的学生.txt文件
2.编写查询学生记录功能
- 代码如下
####定义查询全部学生记录函数####
def display_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 display_id_student():
students = get_all_students()
id = input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
f.close()
####定义按照姓名查询学生记录函数####
def display_name_student():
students = get_all_students()
name = input('姓名:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][1] == name):
for j in range(len(students[i])):
print(students[i][j],end=' ')
f.close()
####定义查询函数####
def query_student():
while True:
print('查询学生记录')
print('====================')
print('1.按照学号查询学生记录')
print('2.按照姓名查询学生记录')
print('3.查询全部学生记录')
print('4.返回上级菜单')
print('====================')
mc3 = int(input('输入菜单号:'))
if mc3 == 1:
display_id_student()
elif mc3 == 2:
display_name_student()
elif mc3 == 3:
display_all_students()
else:
break
- 运行程序,如下图
3.编写修改学生记录功能
- 代码如下
####定义修改学生姓名函数####
def display_newname_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
newname=input('newname =')
found=False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][1] = newname
print('恭喜:学生信息修改成功!')
for j in range(len(students[i])):
print(students[i][j],end=' ')
break
if not found:
print('学号为{}的学生没找到!'.format(id))
f.close()
print()
####定义修改学生性别函数####
def display_newgender_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
newgender=input('newgender =')
found=False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][2] = newgender
print('恭喜:学生信息修改成功!')
for j in range(len(students[i])):
print(students[i][j],end=' ')
break
if not found:
print('学号为{}的学生没找到!'.format(id))
f.close()
print()
####定义修改学生年龄函数####
def display_newage_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
newage=input('newage =')
found=False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][3] = newage
print('恭喜:学生信息修改成功!')
for j in range(len(students[i])):
print(students[i][j],end=' ')
break
if not found:
print('学号为{}的学生没找到!'.format(id))
f.close()
print()
####定义修改学生班级函数####
def display_newclazz_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
newclazz=input('newclazz =')
found=False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][4] = newclazz
print('恭喜:学生信息修改成功!')
for j in range(len(students[i])):
print(students[i][j],end=' ')
break
if not found:
print('学号为{}的学生没找到!'.format(id))
f.close()
print()
####定义修改学生专业函数####
def display_newmajor_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
newmajor=input('newmajor =')
found=False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][5] = newmajor
print('恭喜:学生信息修改成功!')
for j in range(len(students[i])):
print(students[i][j],end=' ')
break
if not found:
print('学号为{}的学生没找到!'.format(id))
f.close()
print()
####定义修改学生系部函数####
def display_newdepartment_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
newdepartment=input('newdepartment =')
found=False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][6] = newdepartment
print('恭喜:学生信息修改成功!')
for j in range(len(students[i])):
print(students[i][j],end=' ')
break
if not found:
print('学号为{}的学生没找到!'.format(id))
f.close()
print()
####定义修改学生电话函数####
def display_newtelephone_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
newtelephone=input('newtelephone =')
found=False
for i in range(len(students)):
if (students[i][0] == id):
found = True
students[i][7] = newtelephone
print('恭喜:学生信息修改成功!')
for j in range(len(students[i])):
print(students[i][j],end=' ')
break
if not found:
print('学号为{}的学生没找到!'.format(id))
f.close()
print()
####定义修改函数####
def modify_student():
while True:
print('修改学生信息')
print('==================')
print('1.修改姓名信息')
print('2.修改性别信息')
print('3.修改年龄信息')
print('4.修改班级信息')
print('5.修改专业信息')
print('6.修改系部信息')
print('7.修改电话号码')
print('8.返回上级菜单')
print('==================')
mc4 = int(input('输入菜单号:'))
if mc4 == 1:
display_newname_student()
elif mc4 == 2:
display_newgender_student()
elif mc4 == 3:
display_newage_student()
elif mc4 == 4:
display_newclazz_student()
elif mc4 == 5:
display_newmajor_student()
elif mc4 == 6:
display_newdepartment_student()
elif mc4 == 7:
display_newtelephone_student()
else:
break
- 运行程序如下
4.编写删除学生记录功能
- 代码如下
####定义删除学生记录函数####
def display_delete_student():
students = get_all_students()
id=input('学号:')
f = open('学生.txt','r')
for i in range(len(students)):
if (students[i][0] == id):
for j in range(len(students[i])):
print(students[i][j],end=' ')
print()
found=False
for i in range(len(students)):
if(students[i][0]==id):
found = True
break
if not found:
print('学号为{}的学生没找到!'.format(id))
else:
del students[i]
print(students)
f.close()
print('\n删除信息成功!')
####定义删除函数####
def delete_student():
while True:
print('删除学生记录')
print('==================')
print('1.删除学生信息')
print('2.返回上级菜单')
print('==================')
mc5 = int(input('输入菜单号:'))
if mc5 == 1:
display_delete_student()
else:
break
- 运行程序,结果如下