1、启动Python文件之后,显示下面的主菜单:
主菜单:输入每个功能后面的数字或字母,按回车后,执行相应的功能。
功能1:
1)输入学生成绩信息(包括:学号、姓名、语文成绩、数学成绩、英语成绩),按回车后,添加该学生的成绩信息;
2)添加完后,询问是否继续添加,如果是则继续重复前面的操作,如果不是,则结束。
附加:对输入的数据有容错功能,即如果输入有误,则要求重新输入
附加:判断学号是否重复,如果重复,则提示用户无法添加。
功能2:使用该功能后,如果有学生成绩,则输出所有学生成绩。
附加:学生成绩按照总分排序
功能3:
1)先输入要修改的学生学号,接着先输出该学生的所有信息(学号、姓名、语文成绩、数学成绩、英语成绩);
2)然后输入新的学生成绩(语文成绩、数学成绩、英语成绩)进行修改,如果不输入直接回车,则保持原有数据。
功能4:先输入要删除的学生的学号,删除之前询问是否删除,确认之后才删除
功能Q:直接结束程序
功能(附加):增加导出学生成绩信息的功能。先是询问是否保存,如果是则将成绩信息保存文本文件中(要用到笔记中的文件操作)
main
from functions import *
def InitStudentSys():
while True:
print("**********欢迎进入学生成绩管理系统**********")
print(" 菜单 ")
print("输入成绩-----------------------------------1")
print("查询成绩-----------------------------------2")
print("修改成绩-----------------------------------3")
print("删除成绩-----------------------------------4")
print("导出成绩-----------------------------------5")
print("退出系统-----------------------------------Q")
index = input("请输入要使用的功能:")
# 根据功能编号,创建相应的功能类对象,并执行该功能
function = Functions()
if index == '1':
function = InputScore()
elif index == '2':
function = LookScore()
elif index == '3':
function = ModifyScore()
elif index == '4':
function = DeleteScore()
elif index == '5':
function = ExportScore()
elif index == 'Q' or index == 'q':
function = Quit()
function.Run()
# 有个停留效果
input("\n按Enter键继续.")
InitStudentSys()
model
#model层,存放我们封装的一些类
#学生类
class Student(object):
#构成函数
def __init__(self,id,name,chinese,math,english):
#对象变量
self.id = id
self.name = name
self.chinese = chinese
self.math = math
self.english = english
#增加一个总分变量
self.score = self.chinese + self.math +self.english
#内置函数 __str__函数
def __str__(self):
infor = f'{self.id}{self.name}{self.chinese}{self.math}{self.english}{self.score}'
return infor
#对象方法,暂时不写
functions
#导入model层中的学生类
import sys
from model import Student
# 学生管理系统功能的简单工厂类
class Functions(object):
#创建存放学生对象的字典
d_students = {}
# 执行功能的函数
def Run(self):
print('\n功能待定')
# 学生管理系统的功能
# 输入成绩功能类
class InputScore(Functions):
def Run(self):
try:
# 接收用户输入的学生信息
infor = input('请输入学生信息(学号 姓名 语文成绩 数学成绩 英语成绩:\n')
# 使用字符串切割函数,来切割学生信息
StudentInfors = infor.split(' ')
# 获取学生信息
id = StudentInfors[0]
if id in Functions.d_students.keys():
#如果存在该学号,则提示用户,学号重复了
print('\n输入的学号已重复')
else:
name = StudentInfors[1]
chinese = StudentInfors[2]
math = StudentInfors[3]
english = StudentInfors[4]
# 创建学生对象
student = Student(id, name, chinese, math, english)
# 存储学生对象
Functions.d_students[id] = student
# 提示用户
print('\n添加学生信息成功')
# 询问是否继续添加学生信息
result = input('是否继续添加学生信息(y/n)')
# 判断是否继续输入学生信息
if result == 'y' or result == 'Y':
# 这里我们再来执行Run方法,方法自己调用自己,我们称之为方法的递归
self.Run()
# 如果不继续输入则return结束执行
except:
return
# 查询成绩类
class LookScore(Functions):
def Run(self):
#先判断是否有输入学生信息
if len(Functions.d_students) == 0:
print('\n查无学生信息')
return
#如果有学生信息,则来遍历字典输出学生成绩
else:
print('\n学号 姓名 语文成绩 数学成绩 英语成绩')
# for student in Functions.d_student.values()
# print(student)
#获取学生列表
students = list(Functions.d_students.values())
#对学生对象列表,进行sort函数从大到小排序
students.sort(key=self.S, reverse=True)
#基于排序后的学生对象列表,输出学生信息
for student in students:
print(student)
print('输出完毕')
#定义一个函数,来告诉列表,应该基于学生对象的总分进行排序
def S(self,student):
#返回学生对象的总分,让排序函数基于学生对象的总分进行排序
return student.score
# 修改成绩类
class ModifyScore(Functions):
def Run(self):
#询问要修改的学生学号
id = input('\n请输入修改的学生学号')
#判断是否有该学号
if id not in Functions.d_students.keys():
#如果不存在学号的话,那么提示用户
print('查无此学号')
return
#如果存在该学号,先输出该学生的信息
else:
print('\n学号 姓名 语文成绩 数学成绩 英语成绩')
student = Functions.d_students[id]
print(student)
#再要求用户输入新的三科成绩
print('请输入新的三科成绩(语文成绩 数学成绩 英语成绩),如果不修改则直接回车')
infor = input()
#判断用户是否输入了新的三科成绩 字符串.strip() 去除字符串后多余空格
if infor.strip() == '':
print('\n 停止修改')
return
#如果输入不为空,则获得新的三科成绩
score = infor.strip('')
student.chinese = score[0]
student.math = score[1]
student.english = score[2]
Functions.d_students[id] = student
#提示用户
print('修改成功')
# 删除成绩类:
# 删除成绩类
class DeleteScore(Functions):
def Run(self):
#询问要删除的学生学号
id = input('\n请输入要删除学生的学号')
#第一步判断:是否存在该学号
if id not in Functions.d_students.keys():
print('查无此人')
return
#第二部判断:是否确认删除
#在删除之前先显示该学生信息来确保没有删错
print('\n学号 姓名 语文成绩 数学成绩 英语成绩')
student = Functions.d_students[id]
print(student)
#询问用户,是否确认删除
result = input('\n是否确认删除该学生信息(Y/n)')
if result == 'Y'or result == 'y':
Functions.d_students.pop(id)
print('\n删除成功')
else:
print('停止删除。')
# 导入成绩类
class ExportScore(Functions):
def Run(self):
#询问是否确认到处成绩
result = input('\n是否确认导出(Y/n)')
#判断是否确认导出
if result == 'Y' or result == 'y':
# 1.获取要导出的信息
content = '学号 姓名 语文成绩 数学成绩 英语成绩 总分\n'
for student in Functions.d_students.values():
content += str(student)
content += '\n'
# 2.打开本地文件
# w模式打开时,路径下如果没有该文件,会新建一个该文件
open('学生成绩表.txt','w')
# 3.写入本地文件
file.write(content)
# 4.关闭本地文件
file.close()
else:
print('\n停止导出')
# 退出系统
class Quit(Functions):
def Run(self):
print('\n欢迎再次使用学生成绩管理系统')
#sys.exit() 是强制结束程序的函数
sys.exit()