对于此系统我采取的方式通过函数将代码块进行打包,将每一个操作作为一个代码块,清晰明了。所用的编辑器为Pycharm,解释器是Python3.10版本。基于对Python基础知识的掌握,希望能够给大家带来帮助。
我们需要将学生的学号,姓名,C语言成绩,java成绩以及高数成绩录入到我们的学生表里面,以便我们进行后续操作。
查找方式:(1) 学号 (2)姓名 。通过这两种查找方式我们可以将该学生的全部信息查找出来。
删除方式:学号 。通过对删除指定学生学号将这个学生信息从学生表当中删除。
修改方式:学号。通过对指定学号将该学生的姓名,C语言成绩,java成绩以及高数成绩修改。
排序方式:(1)学号,(2)C语言成绩,(3)java成绩,(4)高数成绩。通过指定这4种排序方式,然后选择降序或者升序排序。
统计方式:统计学生表的学生信息个数即可。
显示方式:将学生表的所有学生信息遍历输出即可。
由于我们在进行操作的时候我们并不是只进行一次操作,而是一直操作直到我们操作完毕,因此我们就需要一个主函数来让系统明确我们现在准备进行什么操作。
实现思路:由于我们需要一直进行操作直到我们操作完毕,因此我们需要将主函数放入一个死循环当中去,那么就可能有人在想,死循环不是一个我们需要回避的问题吗,这玩意一用代码不就跑死了吗。其实我们是可以人为的将死循环变成活循环的(使用一个break就得了)。由于我们的死循环是跟主界面挂钩的,因此我们每次操作一次我们都要将主界面函数调用,然后通过主界面上的指示操作实现本次系统。
if __name__ == '__main__':
list_data = [] # 学生表,用于存储学生信息
while True:
Menu() # 菜单
choice = input("请输入您要执行的操作:")
if choice == '1': # 由于input输入的是一个字符串,因此这里为字符1
Add_student() # 调用录入学生信息函数
elif choice == '2':
Query_student() # 调用查找学生信息函数
elif choice == '3':
Del_student() # 调用删除学生信息函数
elif choice == '4':
Modify_student() # 调用修改学生信息函数
elif choice == '5':
sort_data() # 调用排序函数
elif choice == '6':
Count_data() # 调用统计学生信息函数
elif choice == '7':
Show_all() # 调用显示全部学生信息函数
elif choice == '0':
Exit() # 调用退出系统函数
time.sleep(1) # 这里就是给系统1s的缓存时间
break
所谓的主界面也就是可以让用户能够直观的进行选择操作,就像你打开了王者荣耀的登录界面,里面有qq,微信,游客,这三种登录方式,你可以很明确的知道该怎么选择,而这就是主界面。
为什么要实现此操作:为了能够让用户能够直观的进行对于操作。
实现思路:我们将自己想要实现的功能模块按照顺序打印出来,如果发现展示效果并不是你心中想的那样,那我们就可以根据相关操作进行调整(就比如我在下面使用了5个\t用来让输出内容能够居中,如果不用的话python解释器会默认左对齐,主要是为了美观)
if __name__ == '__main__':
list_data = [] # 学生表,用于存储学生信息
while True:
Menu() # 菜单
choice = input("请输入您要执行的操作:")
if choice == '1': # 由于input输入的是一个字符串,因此这里为字符1
Add_student() # 调用录入学生信息函数
elif choice == '2':
Query_student() # 调用查找学生信息函数
elif choice == '3':
Del_student() # 调用删除学生信息函数
elif choice == '4':
Modify_student() # 调用修改学生信息函数
elif choice == '5':
sort_data() # 调用排序函数
elif choice == '6':
Count_data() # 调用统计学生信息函数
elif choice == '7':
Show_all() # 调用显示全部学生信息函数
elif choice == '0':
Exit() # 调用退出系统函数
time.sleep(1) # 这里就是给系统1s的缓存时间
break
我们在主界面中选择1操作,然后依次将该学生的学号,姓名,C语言成绩,java成绩,高数成绩输入。
实现思路:首先我们需要将学生表声明成全局变量,因为函数具有作用域,你在当前函数对变量进行操作,对其他函数的同名函数是不会有任何影响的。然后我们需要定义5个变量分别代码该学生的学号,姓名,C语言成绩,java成绩,高数成绩然后通过input输入。当我们的手不小心打错或者写快了,那么系统会直接给我们报错,然后你就得重新一步一步操作了,这对我们来说是非常浪费时间的,因此我们就可以使用我们学过的异常处理来解决。在正常情况下我们都不会每次都去主界面选择输入操作然后在输入,这对我们来说是很浪费时间的,因此我们可以再次使用死循环,然后人为的选择是否继续操作。
def Add_student():
global list_data # 将学生表声明为全局变量
while True: # 使用死循环,人为控制是否进行再次录入
try: # 使用异常处理,防止系统终止
new_id = int(input("请输入新插入学生学号:"))
new_name = input("请输入新插入学生姓名:")
new_c = int(input("请输入新插入学生的c语言成绩:"))
new_java = int(input("请输入新插入学生的java成绩:"))
new_math = int(input("请插入新插入学生的高数成绩:"))
except:
print("输入失败,请重新输入!!!")
continue # 跳过本次异常,进行下一次录入
student_data = {'id': new_id, 'name': new_name, 'c语言成绩': new_c, 'java成绩': new_java, '高数成绩': new_math} # 将学生信息放入一个字典中,这样便于我们后续进行索引查找
flag = True # 此处的flag是用于判断是否出现重复学号,通常情况下学号是唯一的
for data in list_data:
if new_id == data['id']:
print("存在学号重复,请正确录入学生信息!!!")
flag = False
if flag:
list_data.append(student_data) # 将学生信息添加到学生表中
else:
continue # 出现重复学号,重新录入
for data in list_data: # 将目前的全部学生信息输出,用于检查是否正确导入
print(data)
choice = input("如果继续插入学生数据请输入y|Y:") # 用于是否继续录入的判断
if choice not in "Yy":
break
继续查询:
终止查询:
我们在主界面中选择2操作,通过选择按学号或者按姓名查找。
实现思路:首先我们还是利用死循环,然后进行人为的控制,因此我们可能会进行不只一次的查询操作。然后同样将学生表声明成全局变量。然后我们可以选择使用学号或者姓名查询。
def Query_student():
global list_data # 声明全局变量
while True:
choice = input("请选择你要查询的方式: (输入1为按学号查找,输入2为按姓名查找)")
if choice not in "12": # 如果你输入的不是1或者2的话那就得重新输入
print("请输入正确的查找方式: ")
continue
if choice == '1':
print("----------您是按照学号进行查询----------")
ID = int(input("请输入您要查找的学生ID:"))
flag = False # 用于判断学生学号是否不存在
for data in list_data:
if ID == data['id']:
print(data) # 打印该学生信息并将其标记为学号存在
flag = True
if not flag:
print("您当前查询的学号不存在")
choice1 = input("您是否需要重新查询: (Y|y表示需要重新查询)")
if choice1 in "Yy":
continue
else:
break
elif flag:
choice1 = input("您是否需要重新查询: (Y|y表示需要重新查询)")
if choice1 not in 'Yy':
break
按照学号查询:
按照姓名查询:
继续查询:
终止查询:
我们在主界面中选择3操作,通过指定学号进行删除。
实现思路:同样我们还是使用一个死循环,因此可能我们需要进行不止一次的删除操作。声明全局变量学生表。我们通过对整个学生表进行遍历找到我们指定删除的学生学号,将其学生信息全部移除。
def Del_student():
global list_data # 声明全局变量学生表
while True:
del_id = int(input("请输入你要删除学生的学号:"))
flag = False # 用于判断当前输入学号是否存在
for data in list_data: # 遍历查找
if del_id == data['id']:
list_data.remove(data) # 将指定查找元素移除
flag = True
if not flag:
print("您当前输入的学号不存在")
choice1 = input("您是否需要重新删除: (Y|y表示需要重新删除)")
if choice1 in "Yy":
continue
else:
break
elif flag:
for data in list_data:
print(data) # 将目前存在的学生信息打印出来
choice1 = input("您是否需要继续删除: (Y|y表示需要继续删除)")
if choice1 not in 'Yy':
break
继续删除:(里面没有信息啦,因此就打印不了啦,实际上我们确实删除成功啦)
终止删除:
我们在主界面中选择4,指定按照学号进行修改。
实现思路:首先我们还是声明学生表为全局变量,由于我们可能进行不止一次的修改操作,因此我们需要将整个查询操作放在我们可控制的死循环里面。我们通过遍历找到我们需要修改学生信息,然后通过索引赋值将该学生信息进行修改。
def Modify_student():
global list_data # 声明全局变量学生表
while True:
modify_id = int(input("请输入需要修改学生ID:")) # 通过学号进行查找
flag = False # 防止出现不存在情况
for data in list_data:
if modify_id == data['id']:
flag = True # 找到该学生,将flag变为已查找
try:
data['name'] = input("请修改当前学生姓名:")
data['c语言成绩'] = int(input("请修改当前学生的c语言成绩:"))
data['java成绩'] = int(input("请修改当前学生的java成绩:"))
data['高数成绩'] = int(input("请修改当前学生的高数成绩:"))
except:
print("修改失败,请重新修改!!!") # try...except是防止出现手滑打错的 情况
continue
if not flag:
print("您当前输入的学号不存在")
choice1 = input("您是否需要重新修改: (Y|y表示需要重新修改)")
if choice1 in "Yy":
continue
else:
break
elif flag:
print(list_data)
choice1 = input("您是否需要继续修改: (Y|y表示需要继续修改)")
if choice1 not in 'Yy':
break
继续修改:
终止修改:
我们在主菜单里面选择5操作,人为选择按照学号或者各科成绩排序,排序方式分为升序和降序
实现思路:由于我们的需求是人为的控制排序方式,因此我们需要理清顺序。我们需要可以先选择排序方式是升序或者降序,然后再确定是按照学号或者成绩排序。在这里我用到了sort函数进行排序,然后在内部我用到了lambda表达式来获取字典中的值,因为字典的值是以键值对的形式呈现的,我们并不需要键,只需要那个值就行啦。然后勒,其实这个也是能够用遍历写的,只是我觉得如果遍历的话很容易写混,倒不如用lambda舒坦。
def sort_data():
switch = input("请选择您的排序方式(0表示降序,1表示升序):")
if switch not in "01":
print("您输入的排序方式有问题!!!,请重新输入:")
sort_data()
if switch == '0':
print("您选择的是降序排序")
switch_bool = False
elif switch == '1':
print("您选择的是升序排序")
switch_bool = True
choice = input("请选择排序方式(0表示按学号排序,1表示按c语言成绩排序,2表示按java成绩排序,3表示按高数成绩排序):")
if choice == '0':
list_data.sort(key=lambda x: int(x['id']), reverse=switch_bool)
for data in list_data:
print(data)
elif choice == '1':
list_data.sort(key=lambda x: int(x['c语言成绩']), reverse=switch_bool)
for data in list_data:
print(data)
elif choice == '2':
list_data.sort(key=lambda x: int(x['java成绩']), reverse=switch_bool)
for data in list_data:
print(data)
elif choice == '3':
list_data.sort(key=lambda x: int(x['高数成绩']), reverse=switch_bool)
for data in list_data:
print(data)
else:
print("您当前输入的排序方式存在问题,请重新输入")
sort_data()
0-----降序:
按照学号排序:
按照成绩排序:
1-----升序排序:
按照学号排序:
按照成绩排序:
我们在主界面上选择6操作,然后利用len函数即可。
实现思路:由于我们每一个学生的信息都是学生表的一个元素,因此我们可以直接统计学生表的内部元素即可。
def Count_data():
global list_data
print(len(list_data))
我们在主界面上选择7操作,然后通过遍历打印即可。
实现思路:其实这个就是将学生表中的元素一个一个打印出来,一个for循环遍历即可,不过之前我们得声明全局变量。
def Show_all():
global list_data
for data in list_data:
print(data)
# -*- coding:utf-8 -*-
import time
"""
**需求:进⼊系统显示系统功能界⾯,功能如下:** -------菜单 menu()
* **添加学员** -------Add_student()
* **删除学员** -------Del_student()
* **修改学员信息** ------Modify_student()
* **查询学员信息** ------Query_student()
* **显示所有学员信息** ------Show_student()
* **退出系统** -------Exit()
"""
def Menu():
print('=========================学生成绩管理系统=========================')
print('----------------------------功能模块----------------------------')
print('\t\t\t\t\t\t1.录入学生信息')
print('\t\t\t\t\t\t2.查找学生信息')
print('\t\t\t\t\t\t3.删除学生信息')
print('\t\t\t\t\t\t4.修改学生信息')
print('\t\t\t\t\t\t5.排序')
print('\t\t\t\t\t\t6.统计学生总人数')
print('\t\t\t\t\t\t7.显示所有学生信息')
print('\t\t\t\t\t\t0.退出系统')
print('-------------------------------------------------------------')
def Add_student():
global list_data # 将学生表声明为全局变量
while True: # 使用死循环,人为控制是否进行再次录入
try: # 使用异常处理,防止系统终止
new_id = int(input("请输入新插入学生学号:"))
new_name = input("请输入新插入学生姓名:")
new_c = int(input("请输入新插入学生的c语言成绩:"))
new_java = int(input("请输入新插入学生的java成绩:"))
new_math = int(input("请插入新插入学生的高数成绩:"))
except:
print("输入失败,请重新输入!!!")
continue # 跳过本次异常,进行下一次录入
student_data = {'id': new_id, 'name': new_name, 'c语言成绩': new_c, 'java成绩': new_java, '高数成绩': new_math} # 将学生信息放入一个字典中,这样便于我们后续进行索引查找
flag = True # 此处的flag是用于判断是否出现重复学号,通常情况下学号是唯一的
for data in list_data:
if new_id == data['id']:
print("存在学号重复,请正确录入学生信息!!!")
flag = False
if flag:
list_data.append(student_data) # 将学生信息添加到学生表中
else:
continue # 出现重复学号,重新录入
for data in list_data: # 将目前的全部学生信息输出,用于检查是否正确导入
print(data)
choice = input("如果继续插入学生数据请输入y|Y:") # 用于是否继续录入的判断
if choice not in "Yy":
break
def Query_student():
global list_data # 声明全局变量
while True:
choice = input("请选择你要查询的方式: (输入1为按学号查找,输入2为按姓名查找)")
if choice not in "12": # 如果你输入的不是1或者2的话那就得重新输入
print("请输入正确的查找方式: ")
continue
if choice == '1':
print("----------您是按照学号进行查询----------")
ID = int(input("请输入您要查找的学生ID:"))
flag = False # 用于判断学生学号是否不存在
for data in list_data:
if ID == data['id']:
print(data) # 打印该学生信息并将其标记为学号存在
flag = True
if not flag:
print("您当前查询的学号不存在")
choice1 = input("您是否需要重新查询: (Y|y表示需要重新查询)")
if choice1 in "Yy":
continue
else:
break
elif flag:
choice1 = input("您是否需要重新查询: (Y|y表示需要重新查询)")
if choice1 not in 'Yy':
break
def Del_student():
global list_data # 声明全局变量学生表
while True:
del_id = int(input("请输入你要删除学生的学号:"))
flag = False # 用于判断当前输入学号是否存在
for data in list_data: # 遍历查找
if del_id == data['id']:
list_data.remove(data) # 将指定查找元素移除
flag = True
if not flag:
print("您当前输入的学号不存在")
choice1 = input("您是否需要重新删除: (Y|y表示需要重新删除)")
if choice1 in "Yy":
continue
else:
break
elif flag:
for data in list_data:
print(data) # 将目前存在的学生信息打印出来
choice1 = input("您是否需要继续删除: (Y|y表示需要继续删除)")
if choice1 not in 'Yy':
break
def Modify_student():
global list_data # 声明全局变量学生表
while True:
modify_id = int(input("请输入需要修改学生ID:")) # 通过学号进行查找
flag = False # 防止出现不存在情况
for data in list_data:
if modify_id == data['id']:
flag = True # 找到该学生,将flag变为已查找
try:
data['name'] = input("请修改当前学生姓名:")
data['c语言成绩'] = int(input("请修改当前学生的c语言成绩:"))
data['java成绩'] = int(input("请修改当前学生的java成绩:"))
data['高数成绩'] = int(input("请修改当前学生的高数成绩:"))
except:
print("修改失败,请重新修改!!!") # try...except是防止出现手滑打错的 情况
continue
if not flag:
print("您当前输入的学号不存在")
choice1 = input("您是否需要重新修改: (Y|y表示需要重新修改)")
if choice1 in "Yy":
continue
else:
break
elif flag:
print(list_data)
choice1 = input("您是否需要继续修改: (Y|y表示需要继续修改)")
if choice1 not in 'Yy':
break
def sort_data():
switch = input("请选择您的排序方式(0表示降序,1表示升序):")
if switch not in "01":
print("您输入的排序方式有问题!!!,请重新输入:")
sort_data()
if switch == '0':
print("您选择的是降序排序")
switch_bool = False
elif switch == '1':
print("您选择的是升序排序")
switch_bool = True
choice = input("请选择排序方式(0表示按学号排序,1表示按c语言成绩排序,2表示按java成绩排序,3表示按高数成绩排序):")
if choice == '0':
list_data.sort(key=lambda x: int(x['id']), reverse=switch_bool)
for data in list_data:
print(data)
elif choice == '1':
list_data.sort(key=lambda x: int(x['c语言成绩']), reverse=switch_bool)
for data in list_data:
print(data)
elif choice == '2':
list_data.sort(key=lambda x: int(x['java成绩']), reverse=switch_bool)
for data in list_data:
print(data)
elif choice == '3':
list_data.sort(key=lambda x: int(x['高数成绩']), reverse=switch_bool)
for data in list_data:
print(data)
else:
print("您当前输入的排序方式存在问题,请重新输入")
sort_data()
def Count_data():
global list_data
print(len(list_data))
def Show_all():
global list_data
for data in list_data:
print(data)
def Exit():
print("退出当前系统")
if __name__ == '__main__':
list_data = [] # 学生表,用于存储学生信息
while True:
Menu() # 菜单
choice = input("请输入您要执行的操作:")
if choice == '1': # 由于input输入的是一个字符串,因此这里为字符1
Add_student() # 调用录入学生信息函数
elif choice == '2':
Query_student() # 调用查找学生信息函数
elif choice == '3':
Del_student() # 调用删除学生信息函数
elif choice == '4':
Modify_student() # 调用修改学生信息函数
elif choice == '5':
sort_data() # 调用排序函数
elif choice == '6':
Count_data() # 调用统计学生信息函数
elif choice == '7':
Show_all() # 调用显示全部学生信息函数
elif choice == '0':
Exit() # 调用退出系统函数
time.sleep(1) # 这里就是给系统1s的缓存时间
break
感谢大家的阅读,如果大家发现代码中存在的细节方面的问题或者发现运行出错,欢迎大家留言,我们共同学习进步!!!