功能实现
这一切的开始都是从一个类开始的
首先我们要为我们的学生定义一些属性,诸如姓名、年龄、各科成绩之类的
Start.
class Student: #定义一个Student的学生类
def __init__(self, Name = None, Age = None, Address = None, Phone_number = None, Stu_num = None, Chinese = None, English = None, Math = None, Python = None) :
self.name = Name
self.age = Age
self.address = Address
self.phone_number = Phone_number
self.stu_num = Stu_num
self.chinese = Chinese
self.english = English
self.math = Math
self.python = Python
# self.All_score = sum(self.chinese , self.english) + sum(self.math , self.python)
def __str__(self):
return f"学生姓名:{self.name}\n年龄:{self.age}\n家庭地址:{self.address}\n电话号码:{self.phone_number}\n学号:{self.stu_num}\n语文成绩:{self.chinese}\n英语成绩:{self.english}\n数学成绩:{self.math}\nPython成绩:{self.python}"
class Inset(Student):#继承Student父类的所有属性
def __init__(self ,GPA = None ,whether_Excellent = False ,letter = None, all_score = None):
self.gpa = GPA
self.whether_excellent = whether_Excellent
self.first_letter = letter
self.All_score = all_score
def __str__(self):
return f"学生姓名:{self.name}\t绩点:{self.gpa}"
1.添加学生
(姓名,年龄,学号,居住地,语文、英语、数学、Python 四科成绩)
Student_All_list = []
def Add_Student(): #添加某学生的个人信息
student_ = Inset(None)
print('-'*70)
student_.name = input("请输入学生姓名:")
student_.age = eval(input("请输入学生的年龄:"))
student_.address = input("请输入学生的家庭地址:")
student_.phone_number = eval(input("请输入学生的电话号码:"))
student_.stu_num = eval(input("请输入学生的学号:"))
student_.chinese = eval(input("请输入学生的语文成绩:"))
student_.english = eval(input("请输入学生的英语成绩:"))
student_.math = eval(input("请输入学生的数学成绩:"))
student_.python = eval(input("请输入学生的Python成绩:"))
Student_All_list.append(student_)
print("该学生的个人信息已成功添加!!!")
print('-'*70)
2.删除学生
def remove_student(): #通过输入某个学生的学号删除该学生在该系统中的信息
print('-'*70)
num_1 = eval(input("请输入该学生的学号:"))
found = False
for student in Student_All_list:
if student.stu_num == num_1:
Student_All_list.remove(student)
found = True
if found:
print("删除成功!")
break
else:
print("该学生的信息并不存在在系统内部!!!")
3.每科成绩的最高分是谁
def max_in_student(user_input_num): #求某一科目的最大成绩
print('-'*70)
def case_one():
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].chinese:
max_obj = Student_All_list[i].chinese
else:
max_obj = max_obj
print("Chinese最高的成绩为:{}".format(max_obj))
print('-'*70)
def case_two():
print('-'*70)
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].english:
max_obj = Student_All_list[i].english
else:
max_obj = max_obj
print("English最高的成绩为:{}".format(max_obj))
print('-'*70)
def case_three():
print('-'*70)
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].math:
max_obj = Student_All_list[i].math
else:
max_obj = max_obj
print("Math最高的成绩为:{}".format(max_obj))
print('-'*70)
def case_four():
print('-'*70)
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].python:
max_obj = Student_All_list[i].python
else:
max_obj = max_obj
print("Python最高的成绩为:{}".format(max_obj))
print('-'*70)
switch = {
1 : case_one ,
2 : case_two ,
3 : case_three ,
4 : case_four
}
if user_input_num in switch:
switch[user_input_num]()
else:
print("不合法输入!!!")
这个求各科成绩最高分的函数就显得过于冗杂了,不过本人水平有限,初学Python,只能写成这个样子了
4.学生信息查询
查找学生并且输出该学生的个人信息,若查询结果为空,则返回0
def search_student(): #通过输入学生的学号或者姓名查询该学生的信息
print('-'*70)
search = input("请输入学生的姓名或者学号: ")
found = False
for student in Student_All_list:
if student.name == search or student.stu_num == search:
print(student)
found = True
break
elif not found:
print("未查找到该学生信息!!!")
其实这个函数是有点儿bug的,但是我实在是懒得改了(我只是调试了通过输入学生姓名进行学生信息的查询,至于输入学号查询嘛...目前正在开发中)
5.学生数据统计
这个函数属实是有点划水了
别看名字起的高大上“数据统计”
其实就是算一下各科的平均分,然后print出来
def Average_Object_Score():
print( '=' * 35 + "学生各科成绩平均分" + '=' * 35 )
All_Chinese_Score = All_English_Score = All_Math_Score = All_Python_Score = 0
for student in Student_All_list:
All_Chinese_Score += student.chinese
All_English_Score += student.english
All_Math_Score += student.math
All_Python_Score += student.python
print("Chinese平均分:",All_Chinese_Score//len(Student_All_list))
print("English平均分:",All_English_Score//len(Student_All_list))
print("Math平均分:",All_Math_Score//len(Student_All_list))
print("Python平均分:",All_Python_Score//len(Student_All_list))
6.学生信息排序
按照学生的某项属性进行学生排序
这个函数就不用我说了
通过对学生某项属性的比较对学生进行重新排序(不改变原序列喔)
def Student_Sort():
#按姓名首字母对学生进行排序
def Sort_By_Name():
Name_First_Letter_List = []
for student in Student_All_list:
student.first_letter = student.name[0]
Name_First_Letter_List.append(student)
sorted_letter = sorted(Name_First_Letter_List,key=lambda x: x.first_letter)
for student in sorted_letter:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
#按学号进行排序
def Sorted_By_Student_Num():
sorted_Num_List = sorted(Student_All_list,key=lambda x: x.stu_num)
for student in sorted_Num_List:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
#按年龄排序
def Sorted_By_Age():
sorted_age_list = sorted(Student_All_list,key=lambda x: x.age)
for student in sorted_age_list:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
#按总成绩排序
def Sorted_By_Grade():
for student_1 in Student_All_list:
student_1.All_score = student_1.chinese + student_1.english + student_1.math + student_1.python
sorted_grade_list = sorted(Student_All_list,key=lambda x: x.All_score)
for student in sorted_grade_list:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
print( '=' * 35 + "学生排序" + '=' * 35 )
print("请选择排序方式-->")
print("1. 姓名(按首字母)")
print("2. 学号")
print("3. 年龄")
print("4. 总成绩")
switch = {
1 : Sort_By_Name,
2 : Sorted_By_Student_Num,
3 : Sorted_By_Age,
4 : Sorted_By_Grade
}
num = eval(input("请选择排序方式"))
if num in switch:
switch[num]()
else:
print("Input Error...")
7.绩点计算
emm...
这个函数其实是一个内部函数,并不直接调用,而是为下面的奖学金计算函数服务的,通过返回一个list列表给奖学金函数,使其进一步对哪些获得奖学金进行判断筛选
#GPA计算函数
def GPA_Compute():
student_list = []
for student in Student_All_list:
student.gpa = student.chinese/5-10 + student.english/5-10 + student.math/5-10 + student.python/5-10
student_list.append(student)
# 按数字属性升序排序
sorted_instances = sorted(student_list, key=lambda x: x.gpa)
# 获取数字最大的三个实例的所有属性
max_instances = sorted_instances[-3:]
return max_instances
8.奖学金计算
def Student_Scholarship(gpa):
print('=' + "奖学金获得者" + '=' * 35)
for student in gpa:
if student.whether_excellent:
print("姓名:" + str(student.name) + "学号:" + str(student.stu_num) + "绩点:" + str(student.gpa))
通过接受GPA函数传入的列表进而通过学生的excellent属性进行判断(布尔类型,如果某学生的各科成绩均>=85分
那么就判定该学生的excellent属性为True,初始状态默认每个学生的excellent属性均为False)
筛选完成之后将奖学金获得者的有关信息print
9.优秀学生的评选
#优秀学生筛选函数
def Choose_Excellent_Students():
print("'-'*70")
print("优秀学生")
for student in Student_All_list:
if student.chinese >= 85 and student.english >= 85 and student.math >= 85 and student.python >= 85:
print(student.name)
student.whether_excellent = True
这个函数其实就是上面提及的判定学生是否为优秀学生的函数,就不再多赘述了
补充
属于Python自己的"Switch"语句
Globals方法
Python不同于C++
他没有专属的Switch...case...语句
但是
我们还是要想办法实现这个功能的,不然程序怎么运行呢
下面我来介绍一种方法,通过Python中的字典来实现
def User_Choose(num):
switch_1 = {
1: "Add_Student", # 添加学生信息
2: "remove_student", # 删除学生信息
3: "search_student", # 根据学生的学号或者姓名查找学生的相关信息
4: "max_in_student", # 求出某一科目的最高分数
5: "exit"
}
if num in switch_1:
function_name = switch_1[num]
if function_name == "exit":
exit()
else:
globals()[function_name]() # 通过函数名称调用相应的函数
else:
print("Invalid input")
我们就以这个代码为例子:
定义一个User_Choose的函数
里面定义了一个名为Switch_1的字典,字典中的每个元素都遵循:key:message
我们通过将key分别设置为1、2、3...等用于用户键入进行操作的数字,每个key对应的message对应一个函数名称(这里的函数名称为字符类型,不带后面的括号哦)
然后获取用户键入的数字,如果报错的话可以加上eval转换一下类型,上面的函数是通过另一个封装好的获取用户输入数值的函数传入值进行处理的,这个函数在这里就不展示了,就是一个简单的input
获取用户输入之后就可以与Switch_1中的key进行匹配了
if num in switch_1
将用户选定的数字与key匹配后,将key对应的字符串(也就是对应的所要调用的函数名称)赋值给一个新的str变量
好!!!
神奇的事情要发生了,我们只需要一行代码就就可以通过函数名的字符串成功调用函数:
globals()[function_name]()
其中的function_name即为我们所要调用的函数的字符串名称
怎么样,神奇吧QwQ
下面介绍另一种方法
字典名称直接调用
这种方法感觉更简单,甚至都不用打 " " 了
话不多说直接上代码
switch[num]()
怎么样,就问你简单不!!!
列表中对类的某一属性排序
sorted函数
sorted_grade_list = sorted(Student_All_list,key=lambda x: x.All_score)
这是一段通过sorted方法进行的排序,我只能说Python可比C++简单太多了QwQ
这个sorted网上搜一下就有很多大佬的优质讲解内容,我就不献丑了
程序退出函数
这里并不能像C++那样直接return 0完事了,我们需要调用sys库
def exit():
print("Exiting...")
sys.exit()
这样子就好了
下面也就不多说了
直接上源码, CTRL+C CTRL+V 即可运行
源码
'''===========================================Dividing line=================================================='''
'''当前功能'''
#1.添加学生(姓名,年龄,学号,居住地,语文、英语、数学、Python 四科成绩)
#2.删除学生
#3.每科成绩的最高分是谁
#4.查找学生并且输出该学生的个人信息,若查询结果为空,则返回0
#5.学生数据统计
#6.按照学生的某项属性进行学生排序
#7.绩点计算
#8.奖学金计算
#9.优秀学生的评选
'''===========================================Dividing line=================================================='''
import sys
class Student: #定义一个Student的学生类
def __init__(self, Name = None, Age = None, Address = None, Phone_number = None, Stu_num = None, Chinese = None, English = None, Math = None, Python = None) :
self.name = Name
self.age = Age
self.address = Address
self.phone_number = Phone_number
self.stu_num = Stu_num
self.chinese = Chinese
self.english = English
self.math = Math
self.python = Python
# self.All_score = sum(self.chinese , self.english) + sum(self.math , self.python)
def __str__(self):
return f"学生姓名:{self.name}\n年龄:{self.age}\n家庭地址:{self.address}\n电话号码:{self.phone_number}\n学号:{self.stu_num}\n语文成绩:{self.chinese}\n英语成绩:{self.english}\n数学成绩:{self.math}\nPython成绩:{self.python}"
class Inset(Student):#继承Student父类的所有属性
def __init__(self ,GPA = None ,whether_Excellent = False ,letter = None, all_score = None):
self.gpa = GPA
self.whether_excellent = whether_Excellent
self.first_letter = letter
self.All_score = all_score
def __str__(self):
return f"学生姓名:{self.name}\t绩点:{self.gpa}"
Student_All_list = []
def Add_Student(): #添加某学生的个人信息
student_ = Inset(None)
print('-'*70)
student_.name = input("请输入学生姓名:")
student_.age = eval(input("请输入学生的年龄:"))
student_.address = input("请输入学生的家庭地址:")
student_.phone_number = eval(input("请输入学生的电话号码:"))
student_.stu_num = eval(input("请输入学生的学号:"))
student_.chinese = eval(input("请输入学生的语文成绩:"))
student_.english = eval(input("请输入学生的英语成绩:"))
student_.math = eval(input("请输入学生的数学成绩:"))
student_.python = eval(input("请输入学生的Python成绩:"))
Student_All_list.append(student_)
print("该学生的个人信息已成功添加!!!")
print('-'*70)
def remove_student(): #通过输入某个学生的学号删除该学生在该系统中的信息
print('-'*70)
num_1 = eval(input("请输入该学生的学号:"))
found = False
for student in Student_All_list:
if student.stu_num == num_1:
Student_All_list.remove(student)
found = True
if found:
print("删除成功!")
break
else:
print("该学生的信息并不存在在系统内部!!!")
# print('-'*70)
def search_student(): #通过输入学生的学号或者姓名查询该学生的信息
print('-'*70)
search = input("请输入学生的姓名或者学号: ")
found = False
for student in Student_All_list:
if student.name == search or student.stu_num == search:
print(student)
found = True
break
elif not found:
print("未查找到该学生信息!!!")
def max_in_student(user_input_num): #求某一科目的最大成绩
print('-'*70)
def case_one():
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].chinese:
max_obj = Student_All_list[i].chinese
else:
max_obj = max_obj
print("Chinese最高的成绩为:{}".format(max_obj))
print('-'*70)
def case_two():
print('-'*70)
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].english:
max_obj = Student_All_list[i].english
else:
max_obj = max_obj
print("English最高的成绩为:{}".format(max_obj))
print('-'*70)
def case_three():
print('-'*70)
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].math:
max_obj = Student_All_list[i].math
else:
max_obj = max_obj
print("Math最高的成绩为:{}".format(max_obj))
print('-'*70)
def case_four():
print('-'*70)
max_obj = 0
for i in range(0,len(Student_All_list)):
if max_obj < Student_All_list[i].python:
max_obj = Student_All_list[i].python
else:
max_obj = max_obj
print("Python最高的成绩为:{}".format(max_obj))
print('-'*70)
switch = {
1 : case_one ,
2 : case_two ,
3 : case_three ,
4 : case_four
}
if user_input_num in switch:
switch[user_input_num]()
else:
print("不合法输入!!!")
#各科平均成绩计算函数
def Average_Object_Score():
print( '=' * 35 + "学生各科成绩平均分" + '=' * 35 )
All_Chinese_Score = All_English_Score = All_Math_Score = All_Python_Score = 0
for student in Student_All_list:
All_Chinese_Score += student.chinese
All_English_Score += student.english
All_Math_Score += student.math
All_Python_Score += student.python
print("Chinese平均分:",All_Chinese_Score//len(Student_All_list))
print("English平均分:",All_English_Score//len(Student_All_list))
print("Math平均分:",All_Math_Score//len(Student_All_list))
print("Python平均分:",All_Python_Score//len(Student_All_list))
#优秀学生筛选函数
def Choose_Excellent_Students():
print("'-'*70")
print("优秀学生")
for student in Student_All_list:
if student.chinese >= 85 and student.english >= 85 and student.math >= 85 and student.python >= 85:
print(student.name)
student.whether_excellent = True
#GPA计算函数
def GPA_Compute():
student_list = []
for student in Student_All_list:
student.gpa = student.chinese/5-10 + student.english/5-10 + student.math/5-10 + student.python/5-10
student_list.append(student)
# 按数字属性升序排序
sorted_instances = sorted(student_list, key=lambda x: x.gpa)
# 获取数字最大的三个实例的所有属性
max_instances = sorted_instances[-3:]
return max_instances
def Student_Sort():
#按姓名首字母对学生进行排序
def Sort_By_Name():
Name_First_Letter_List = []
for student in Student_All_list:
student.first_letter = student.name[0]
Name_First_Letter_List.append(student)
sorted_letter = sorted(Name_First_Letter_List,key=lambda x: x.first_letter)
for student in sorted_letter:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
#按学号进行排序
def Sorted_By_Student_Num():
sorted_Num_List = sorted(Student_All_list,key=lambda x: x.stu_num)
for student in sorted_Num_List:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
#按年龄排序
def Sorted_By_Age():
sorted_age_list = sorted(Student_All_list,key=lambda x: x.age)
for student in sorted_age_list:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
#按总成绩排序
def Sorted_By_Grade():
for student_1 in Student_All_list:
student_1.All_score = student_1.chinese + student_1.english + student_1.math + student_1.python
sorted_grade_list = sorted(Student_All_list,key=lambda x: x.All_score)
for student in sorted_grade_list:
print(str(student.name) + "\t" + str(student.age) + "\t" + str(student.stu_num) + "\n")
print( '=' * 35 + "学生排序" + '=' * 35 )
print("请选择排序方式-->")
print("1. 姓名(按首字母)")
print("2. 学号")
print("3. 年龄")
print("4. 总成绩")
switch = {
1 : Sort_By_Name,
2 : Sorted_By_Student_Num,
3 : Sorted_By_Age,
4 : Sorted_By_Grade
}
num = eval(input("请选择排序方式"))
if num in switch:
switch[num]()
else:
print("Input Error...")
def Student_Scholarship(gpa):
print('=' + "奖学金获得者" + '=' * 35)
for student in gpa:
if student.whether_excellent:
print("姓名:" + str(student.name) + "学号:" + str(student.stu_num) + "绩点:" + str(student.gpa))
def User_Operate():
operate_of_user = eval(input("请输入你的操作:"))
return operate_of_user
def exit():
print("Exiting...")
sys.exit()
def Got_Users_Heart_object_():
print("***存在以下选项")
print("1.Chinese成绩")
print("2.English成绩")
print("3.Math成绩")
print("4.Python成绩")
Heart_object = eval(input("请选择:"))
return Heart_object
def User_Choose(num):
switch_1 = {
1 : "Add_Student", #添加学生信息
2 : "remove_student" ,#删除学生信息
3 : "search_student" ,#根据学生的学号或者姓名查找学生的相关信息
4 : "max_in_student" ,#求出某一科目的最高分数
5 : "Average_Object_Score" ,#计算各科目平均分数
6 : "Choose_Excellent_Students" ,#优秀学生名单
7 : "Student_Scholarship" ,#判断奖学金是否获得
8 : "Student_Sort",#对学生进行特定方式的排序
9 : "exit" #退出程序
}
if num in switch_1:
function_name = switch_1[num]
if function_name == "exit":
exit()
elif function_name =="max_in_student":
max_in_student(Got_Users_Heart_object_())
elif function_name.isalpha():
print("错误输入,请输入数字!!!")
elif function_name =="Student_Scholarship":
Student_Scholarship(GPA_Compute())
else:
globals()[function_name]()
else:
print("不合法输入!!!")
def main():
while True:
print('-' * 35 + "学生管理系统" + '-'* 35 )
print("***请选择操作")
print("1. 添加学生")
print("2. 删除学生")
print("3. 查找学生")
print("4. 查找某一学科最高分")
print("5. 各科目平均分数")
print("6. 优秀学生名单")
print("7. 奖学金获得者")
print("8. 学生排序")
print("9. 退出程序")
User_Choose(User_Operate())
#主程序
main()
附上运行效果图
这个代码可能还存在许多BUG,只能实现基本的功能,还需要不断地改进,仅供学习参考!!!
Ps:本人初学Python
能力低下
请谅解QwQ