1. 运行效果
功能
- 录入学生信息
- 查找学生信息
- 删除学生信息
- 修改学生信息
- 排序
- 统计学生信息
- 显示所有学生信息
基于python的学生成绩管理系统,具备基本的增删改查功能,包含:录入学生信息、查找学生信息、删除学生信息、修改学生信息、排序、统计学生信息、显示所有学生信息。学生信息保存在文件中,系统通过读写文件来获取和写入学生信息,此外,本系统是通过控制台显示的,适合初学者学习使用。
代码运行效果如下:
2. 代码
函数 | 说明 |
---|---|
menu() | 显示主菜单 |
insert() | 录入学生成绩信息 |
search() | 查找学生成绩信息 |
delete() | 删除学生成绩信息 |
modify() | 修改学生成绩信息 |
sort() | 成绩排序 |
total() | 统计学生总人数 |
show() | 显示所有学生成绩信息 |
import os
import re
filename = 'student.txt'
print('================ 欢迎使用学生成绩管理系统V1.0 ================')
# 主菜单函数
def menu():
print('\n---------------- 主菜单 ----------------')
print('1. 录入学生信息')
print('2. 查找学生信息')
print('3. 删除学生信息')
print('4. 修改学生信息')
print('5. 排序')
print('6. 统计学生总人数')
print('7. 显示所有学生信息')
print('0. 退出系统')
# 主界面函数
def main():
x = 7
while True:
menu() # 显示主菜单
x = int(input('\n请选择功能:')) # 输入需要使用的功能数字
if x == 0:
y = input('您确定要退出系统吗?y/n:')
if y == 'y' or y == 'Y':
print('\n感谢使用学生成绩管理系统V1.0!')
break
else:
continue
elif x == 1:
insert() # 录入学生信息
elif x== 2:
search() # 查找学生信息
elif x == 3:
delete() # 删除学生信息
elif x == 4:
modify() # 修改学生信息
elif x == 5:
sort() # 排序
elif x == 6:
total() # 统计学生总人数
elif x == 7:
show() # 显示所有学生信息
else:
print('输入有误,请重新输入!')
def insert(): # 录入学生信息
student_list = []
while True:
id = input('请输入学生学号:')
if not id:
break
name = input('请输入学生姓名:')
if not name:
break
try:
english = int(input('请输入学生英语成绩:'))
python = int(input('请输入学生python成绩:'))
math = int(input('请输入学生数学成绩:'))
data = int(input('请输入学生数据结构成绩:'))
except:
print('成绩录入有错,请检查后重新录入!')
continue
stu = {'id': id, 'name': name, 'english': english, 'python': python, 'math': math, 'data': data}
student_list.append(stu)
a = input('\n是否继续录入?y/n:')
if a == 'y' or a == 'Y': # 当输入y时,执行下一轮循环,接着录入,否则终止循环
continue
else:
break
save(student_list) # 向文件中写入学生成绩数据
print('\n学生成绩录入成功!')
def search(): # 查找学生信息
stu_query = [] # 定义一个空列表,用来保存查找出的学生信息
while True:
id = ''
name = ''
if os.path.exists(filename): # 判断文件是否存在
m = input('\n按id查询请输入1,按姓名查询请输入2,退出请输入0:')
if m == '1':
id = input('请输入id:')
elif m == '2':
name = input('请输入name:')
elif m == '0':
print('\n退出查询模块成功!')
return
else:
print('输入有误!')
continue
else:
print('无学生信息!')
with open(filename, 'r', encoding = 'UTF-8') as r_file:
stu = r_file.readlines() # 读取文件中所有信息
for i in stu: # 遍历每条学生信息
d = dict(eval(i)) # 转成字典
if id != '':
if d['id'] == id: # 判断id值与输入的是否相同,若相同则添加到结果列表中
stu_query.append(d)
elif name != '':
if d['name'] == name: # 判断name值与输入的是否相同,若相同则添加到结果列表中
stu_query.append(d)
# 显示查询结果
if len(stu_query) == 0:
print("暂未查询到学生信息!")
else:
show_stu(stu_query) # 显示查询出的学生信息
stu_query.clear() # 清空列表,因为若用户要继续查找,则进入下一轮循环查找,所以要清空该列表
def delete(): # 删除学生信息
while True:
show()
id = input('请输入要删除的学生id(输入0结束本功能):')
if id != '':
if id == '0':
print('\n删除模块已关闭!')
break
if os.path.exists(filename): # 查询文件是否存在
with open(filename, 'r', encoding = 'UTF-8') as file:
stu_old = file.readlines() # 读取文件中所有信息
else:
stu_old = [] # 若文件不存在,则建立一个空列表
flag = False # 标记是否删除
if stu_old: # 判断学生列表否有数据
with open(filename, 'w', encoding = 'UTF-8') as w_file:
d = {} # 建立一个空字典
for i in stu_old:
d = dict(eval(i)) # 将字符串转为字典
if d['id'] != id: # 当id值不同时,写入到文件中
w_file.write(str(d)+'\n')
else:
flag = True # 当查找出要删除的信息时,把标记设置成已删除状态
if flag: # 根据标记判断信息是否删除
print(f'\nid为{id}的学生已被删除!')
else:
print(f'\n没有找到id为{id}的学生信息!')
else:
print('\n无学生信息!')
break
show() # 删除后显示所有学生信息
def modify(): # 修改学生信息
while True:
show()
id = input('\n输入要修改的学生id(输入0退出):')
if id == '0':
print('\n退出修改模块成功!')
return
if os.path.exists(filename):
with open(filename, 'r', encoding = 'UTF-8') as r_file:
stu_old = r_file.readlines()
else:
return
with open(filename, 'w', encoding = 'UTF-8') as w_file:
flag = False
for i in stu_old:
d = dict(eval(i))
if d['id'] == id: # 查询出要修改的学生信息
flag = True # 设置修改标记为已修改状态
a = {'id': id, 'name': '', 'english': 0, 'python': 0, 'math': 0, 'data': 0}
while True:
try:
a['name'] = input(f"请输入姓名({d['name']}):")
a['english'] = input(f"请输入英语成绩({d['english']}):")
a['python'] = input(f"请输入python成绩({d['python']}):")
a['math'] = input(f"请输入数学成绩({d['math']}):")
a['data'] = input(f"请输入数据结构成绩({d['data']}):")
x = input('\n是否确定修改y/n,')
if x == 'y' or x == 'Y':
d = a # a为修改后的信息,当用户确认修改后,将a值赋给d,并将d值写入文件
print('\n修改成功!')
except:
print('输入有误,请重新输入!')
break
w_file.write(str(d) + '\n') # 将修改后的信息写入文件
else:
w_file.write(str(d) + '\n')
if not flag:
print('\n未查询到该学生信息!')
def sort(): # 排序
show() # 显示学生信息列表
if os.path.exists(filename):
with open(filename, 'r', encoding = 'UTF-8') as r_file:
stu_list = r_file.readlines()
stu_new = []
for i in stu_list:
d = dict(eval(i))
stu_new.append(d)
else:
return
asc_or_desc = input('请选择(0。升序 1.降序):')
if asc_or_desc == '0':
asc_or_desc_bool = False # 升序标记
elif asc_or_desc == '1':
asc_or_desc_bool = True # 降序标记
else:
print('输入错误!')
m = input('请选择排序方式:(1.按英语成绩排序 2.按python成绩排序 3.按数学成绩排序 4.按数据结构成绩排序 0.按总成绩排序):')
if m == '1': # 按英语成绩排序
stu_new.sort(key = lambda x:int(x['english']), reverse = asc_or_desc_bool)
elif m == '2': # 按python成绩排序
stu_new.sort(key = lambda x:int(x['python']), reverse = asc_or_desc_bool)
elif m == '3': # 按数学成绩排序
stu_new.sort(key = lambda x:int(x['math']), reverse = asc_or_desc_bool)
elif m == '4': # 按数据结构成绩排序
stu_new.sort(key = lambda x:int(x['data']), reverse = asc_or_desc_bool)
elif m == '0': # 按总成绩排序
stu_new.sort(key = lambda x:int(x['english']) + int(x['python']) + int(x['math']) + int(x['data']), reverse = asc_or_desc_bool)
else:
print("输入有误!")
show_stu(stu_new)
def total(): # 统计学生总人数
if os.path.exists(filename):
with open(filename, 'r', encoding='UTF-8') as r_file:
stu = r_file.readlines()
if stu:
print(f'一共有{len(stu)}名学生!')
else:
print('暂未录入学生信息!')
else:
print("暂未保存数据信息!")
input('按任意键继续...')
def show(): # 显示所有学生信息
stu_lst = []
if os.path.exists(filename):
with open(filename, 'r', encoding = 'UTF-8') as r_file:
stu = r_file.readlines()
for i in stu:
stu_lst.append(eval(i))
if stu_lst:
show_stu(stu_lst)
else:
print('\n暂未保存过数据!')
def save(lst):
try:
stu_write = open(filename, 'a', encoding = 'UTF-8') # 如果文件存在,则以追加的方式录入
except:
stu_write = open(filename, 'w', encoding = 'UTF-8') # 如果文件不存在,则写入文件
for i in lst:
stu_write.write(str(i) + '\n') # 写入文件并换行
stu_write.close() # 关闭I/O流
def show_stu(lst):
format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^6}\t{:^14}'
print(format_title.format('id', '姓名', '英语成绩', 'python成绩', '数学成绩', '数据结构成绩', '总成绩'))
print('=======================================================================================')
format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^16}\t{:^8}'
for i in lst:
print(format_data.format(i.get('id'), i.get('name'), i.get('english'), i.get('python'), i.get('math'),
i.get('data'),
int(i.get('english')) + int(i.get('python')) + int(i.get('math')) + int(
i.get('data'))))
x = input('按任意键继续...')
if __name__ == '__main__':
main()
有问题qq联系1663301665