基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,学生成绩管理模块的主要功能有统计课程最高分、最低分
和平均分。要求按照面向对象思维进行编写,按照以下模式完成:
1、设计一个学生类,包含学号、姓名、语文成绩、数学成绩和英语成绩等数据成员。
2、引1入OS模块,用于导人导出路径文件信息
3、设计一个学生管理类,用于定义各个模块的具体功能函数。
4、设计一个主菜单,两个子菜单,分别管理学生基本信息和学生成绩信息
基于new bing部分指引作答:
运行结果:
以下是使用Python和PyQt5实现上述功能的示例代码:
import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QFileDialog, QMessageBox
class Student:
def __init__(self, student_id, name, chinese_score, math_score, english_score):
self.student_id = student_id
self.name = name
self.chinese_score = chinese_score
self.math_score = math_score
self.english_score = english_score
class StudentManagement:
def __init__(self):
self.students = []
def add_student(self, student):
self.students.append(student)
def delete_student(self, student_id):
for student in self.students:
if student.student_id == student_id:
self.students.remove(student)
return True
return False
def modify_student(self, student_id, name, chinese_score, math_score, english_score):
for student in self.students:
if student.student_id == student_id:
student.name = name
student.chinese_score = chinese_score
student.math_score = math_score
student.english_score = english_score
return True
return False
def get_student(self, student_id):
for student in self.students:
if student.student_id == student_id:
return student
return None
def export_data(self, file_path):
try:
with open(file_path, 'w') as file:
for student in self.students:
file.write(
f"{student.student_id},{student.name},{student.chinese_score},{student.math_score},{student.english_score}\n"
)
return True
except Exception as e:
print(f"Error exporting data: {str(e)}")
return False
def import_data(self, file_path):
try:
with open(file_path, 'r') as file:
lines = file.readlines()
for line in lines:
data = line.strip().split(',')
student = Student(
data[0], data[1], float(data[2]), float(data[3]), float(data[4])
)
self.add_student(student)
return True
except Exception as e:
print(f"Error importing data: {str(e)}")
return False
def get_highest_score(self, course):
if course == "chinese":
scores = [student.chinese_score for student in self.students]
elif course == "math":
scores = [student.math_score for student in self.students]
elif course == "english":
scores = [student.english_score for student in self.students]
else:
return None
if scores:
return max(scores)
else:
return None
def get_lowest_score(self, course):
if course == "chinese":
scores = [student.chinese_score for student in self.students]
elif course == "math":
scores = [student.math_score for student in self.students]
elif course == "english":
scores = [student.english_score for student in self.students]
else:
return None
if scores:
return min(scores)
else:
return None
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.student_management = StudentManagement()
self.init_ui()
def init_ui(self):
self.setWindowTitle("Student Management")
self.setGeometry(200, 200, 400, 300)
main_menu = self.menuBar()
file_menu = main_menu.addMenu("File")
import_action = QAction("Import Data", self)
import_action.triggered.connect(self.import_data)
file_menu.addAction(import_action)
export_action = QAction("Export Data", self)
export_action.triggered.connect(self.export_data)
file_menu.addAction(export_action)
basic_info_menu = main_menu.addMenu("Basic Information")
add_student_action = QAction("Add Student", self)
add_student_action.triggered.connect(self.add_student)
basic_info_menu.addAction(add_student_action)
delete_student_action = QAction("Delete Student", self)
delete_student_action.triggered.connect(self.delete_student)
basic_info_menu.addAction(delete_student_action)
modify_student_action = QAction("Modify Student", self)
modify_student_action.triggered.connect(self.modify_student)
basic_info_menu.addAction(modify_student_action)
grade_menu = main_menu.addMenu("Grade Management")
highest_score_action = QAction("Highest Score", self)
highest_score_action.triggered.connect(self.highest_score)
grade_menu.addAction(highest_score_action)
lowest_score_action = QAction("Lowest Score", self)
lowest_score_action.triggered.connect(self.lowest_score)
grade_menu.addAction(lowest_score_action)
def import_data(self):
file_dialog = QFileDialog()
file_path, _ = file_dialog.getOpenFileName(
self, "Import Data", "", "CSV Files (*.csv)"
)
if file_path:
if self.student_management.import_data(file_path):
QMessageBox.information(self, "Import Data", "Data imported successfully.")
else:
QMessageBox.critical(self, "Import Data", "Failed to import data.")
def export_data(self):
file_dialog = QFileDialog()
file_path, _ = file_dialog.getSaveFileName(
self, "Export Data", "", "CSV Files (*.csv)"
)
if file_path:
if self.student_management.export_data(file_path):
QMessageBox.information(self, "Export Data", "Data exported successfully.")
else:
QMessageBox.critical(self, "Export Data", "Failed to export data.")
def add_student(self):
student_id, ok = QInputDialog.getText(self, "Add Student", "Enter student ID:")
if ok and student_id:
name, ok = QInputDialog.getText(self, "Add Student", "Enter student name:")
if ok and name:
chinese_score, ok = QInputDialog.getDouble(self, "Add Student", "Enter Chinese score:")
if ok:
math_score, ok = QInputDialog.getDouble(self, "Add Student", "Enter Math score:")
if ok:
english_score, ok = QInputDialog.getDouble(self, "Add Student", "Enter English score:")
if ok:
student = Student(student_id, name, chinese_score, math_score, english_score)
self.student_management.add_student(student)
QMessageBox.information(self, "Add Student", "Student added successfully.")
else:
QMessageBox.warning(self, "Add Student", "Invalid English score.")
else:
QMessageBox.warning(self, "Add Student", "Invalid Math score.")
else:
QMessageBox.warning(self, "Add Student", "Invalid Chinese score.")
else:
QMessageBox.warning(self, "Add Student", "Invalid name.")
else:
QMessageBox.warning(self, "Add Student", "Invalid student ID.")
def delete_student(self):
student_id, ok = QInputDialog.getText(self, "Delete Student", "Enter student ID:")
if ok and student_id:
if self.student_management.delete_student(student_id):
QMessageBox.information(self, "Delete Student", "Student deleted successfully.")
else:
QMessageBox.warning(self, "Delete Student", "Student not found.")
else:
QMessageBox.warning(self, "Delete Student", "Invalid student ID.")
def modify_student(self):
student_id, ok = QInputDialog.getText(self, "Modify Student", "Enter student ID:")
if ok and student_id:
student = self.student_management.get_student(student_id)
if student:
name, ok = QInputDialog.getText(self, "Modify Student", "Enter new student name:", text=student.name)
if ok and name:
chinese_score, ok = QInputDialog.getDouble(self, "Modify Student", "Enter new Chinese score:",
value=student.chinese_score)
if ok:
math_score, ok = QInputDialog.getDouble(self, "Modify Student", "Enter new Math score:",
value=student.math_score)
if ok:
english_score, ok = QInputDialog.getDouble(self, "Modify Student", "Enter new English score:",
value=student.english_score)
if ok:
if self.student_management.modify_student(student_id, name, chinese_score, math_score,
english_score):
QMessageBox.information(self, "Modify Student", "Student modified successfully.")
else:
QMessageBox.warning(self, "Modify Student", "Failed to modify student.")
else:
QMessageBox.warning(self, "Modify Student", "Invalid English score.")
else:
QMessageBox.warning(self, "Modify Student", "Invalid Math score.")
else:
QMessageBox.warning(self, "Modify Student", "Invalid Chinese score.")
else:
QMessageBox.warning(self, "Modify Student", "Invalid name.")
else:
QMessageBox.warning(self, "Modify Student", "Student not found.")
else:
QMessageBox.warning(self, "Modify Student", "Invalid student ID.")
def highest_score(self):
course, ok = QInputDialog.getText(self, "Highest Score", "Enter course name (chinese, math, english):")
if ok and course:
highest_score = self.student_management.get_highest_score(course)
if highest_score is not None:
QMessageBox.information(self, "Highest Score", f"The highest score in {course} is: {highest_score}")
else:
QMessageBox.warning(self, "Highest Score", f"No students found or invalid course.")
def lowest_score(self):
course, ok = QInputDialog.getText(self, "Lowest Score", "Enter course name (chinese, math, english):")
if ok and course:
lowest_score = self.student_management.get_lowest_score(course)
if lowest_score is not None:
QMessageBox.information(self, "Lowest Score", f"The lowest score in {course} is: {lowest_score}")
else:
QMessageBox.warning(self, "Lowest Score", f"No students found or invalid course.")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
你是要做带界面的还是控制台的就可以,可以参考我之前做的:
python实现学生成绩管理程序,包含各科成绩的录入,计算各个学生的总分和平均分,统计各个科目的最高分、最低分和平均分。
https://blog.csdn.net/c1007857613/article/details/130706066
运行效果:
你小子花钱搞
可参考
#定义一个列表来存储所有学生信息
stu_info = []
#打印功能菜单
def print_menu():
print('=' * 30)
print('学生管理系统')
print('1.添加学生信息')
print('2.删除学生信息')
print('3.修改学生信息')
print('4.显示所有学生信息')
print('0.退出系统')
print('=' * 30)
#添加学生信息
def add_stu_info():
name = input('请输入新学生的姓名:')
sex = input('请输入新学生的性别:')
phone = input('请输入新学生的手机号码:')
new_info = dict()#定义一个字典
new_info['name'] = name
new_info['sex'] = sex
new_info['phone'] = phone
stu_info.append(new_info)
#删除学生信息
def del_stu_info(student):
if len(student) != 0:
del_num = int(input('请输入要删除的序号:')) - 1
if del_num < len(stu_info):
del student[del_num]
print(f'删除指定序号:{del_num+1}成功')
else:
print('要删除的序号有误')
else:
print('学生信息表为空')
#修改学生信息
def rev_stu_info():
if len(stu_info) != 0:
rev_num = int(input('请输入要修改学生的序号:')) - 1
if rev_num >= len(stu_info):
print("要修改的序号有误")
else:
rev_name = input('请输入要修改学生的姓名:')
rev_sex = input('请输入要修改学生的性别:')
rev_phone = input('请输入要修改学生的手机:')
stu_info[rev_num]['name'] = rev_name
stu_info[rev_num]['sex'] = rev_sex
stu_info[rev_num]['phone'] = rev_phone
else:
print('学生信息表为空')
#查找全部学生信息
def show_stu_info():
if len(stu_info) != 0:
print('学生的信息如下:')
print('=' * 30)
print('序号 姓名 性别 手机号码')
i = 1
for temp_info in stu_info:
print("%d %s %s %s" %(i,temp_info['name'],temp_info['sex'],temp_info['phone']))
i += 1
else:
print('学生信息表为空')
#定义主函数
def main():
while True:
print_menu()
key = input('请输入对应的功能的数字:')
if key == '1':
#添加学生信息
add_stu_info()
elif key == '2':
#删除学生信息
del_stu_info(stu_info)
elif key == '3':
#修改学生信息
rev_stu_info()
elif key == '4':
#显示所有学生信息
show_stu_info()
elif key == '0':
#退出系统
quit_confirm = input('亲,真的要退出么?(Yes/No):')
if quit_confirm == 'Yes' or quit_confirm == 'yes' or quit_confirm == 'YES':
break
elif quit_confirm == 'No' or quit_confirm == 'no' or quit_confirm == 'NO':
continue
else:
print('输入有误,请重新输入')
else:
print('输入有误,请重新输入')
if __name__=='__main__':
main()
# 导入PyQt5模块和OS模块
import sys
import os
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QDialog, QVBoxLayout, QFileDialog, QLineEdit, QLabel
# 定义学生类
class Student:
def __init__(self, id, name, chinese_score, math_score, english_score):
self.id = id
self.name = name
self.chinese_score = chinese_score
self.math_score = math_score
self.english_score = english_score
# 设计学生管理类
class StudentManager:
def __init__(self):
self.student_list = []
# 添加学生信息
def add_student(self, id, name, chinese_score, math_score, english_score):
student = Student(id, name, chinese_score, math_score, english_score)
self.student_list.append(student)
# 删除学生信息
def remove_student(self, id):
for student in self.student_list:
if student.id == id:
self.student_list.remove(student)
break
# 修改学生信息
def modify_student(self, id, name, chinese_score, math_score, english_score):
for student in self.student_list:
if student.id == id:
student.name = name
student.chinese_score = chinese_score
student.math_score = math_score
student.english_score = english_score
break
# 显示学生信息
def show_student(self):
for student in self.student_list:
print(f"学号:{student.id},姓名:{student.name},语文成绩:{student.chinese_score},数学成绩:{student.math_score},英语成绩:{student.english_score}")
# 导入学生信息
def import_student(self, file_path):
with open(file_path, 'r') as f:
lines = f.readlines()
for line in lines:
data = line.strip().split(',')
id = int(data[0])
name = data[1]
chinese_score = int(data[2])
math_score = int(data[3])
english_score = int(data[4])
self.add_student(id, name, chinese_score, math_score, english_score)
# 导出学生信息
def export_student(self, file_path):
with open(file_path, 'w') as f:
for student in self.student_list:
f.write(f"{student.id},{student.name},{student.chinese_score},{student.math_score},{student.english_score}\n")
# 统计课程分数
def statistic_score(self):
chinese_scores = [s.chinese_score for s in self.student_list]
math_scores = [s.math_score for s in self.student_list]
english_scores = [s.english_score for s in self.student_list]
max_chinese_score = max(chinese_scores)
min_chinese_score = min(chinese_scores)
avg_chinese_score = sum(chinese_scores) / len(chinese_scores)
max_math_score = max(math_scores)
min_math_score = min(math_scores)
avg_math_score = sum(math_scores) / len(math_scores)
max_english_score = max(english_scores)
min_english_score = min(english_scores)
avg_english_score = sum(english_scores) / len(english_scores)
print(f"语文:最高分 {max_chinese_score},最低分 {min_chinese_score},平均分 {avg_chinese_score}")
print(f"数学:最高分 {max_math_score},最低分 {min_math_score},平均分 {avg_math_score}")
print(f"英语:最高分 {max_english_score},最低分 {min_english_score},平均分 {avg_english_score}")
人狗大战游戏
#创建一个类(该类的属性会为后面的类继承调用)
class lable:
def __init__(self, name, aggr, hp): #类属性
self.name = name
self.aggr = aggr
self.hp = hp
class dog(lable): #创建狗的类,并且继承lable(父类)的属性
def __init__(self, name, aggr, hp, kind):
lable.__init__(self, name, aggr, hp)
self.kind = kind
#定义狗的攻击方法
def attack(self, person):
#人的血等于人当前的血量减去狗的攻击力
person.hp -= self.aggr
class person(lable): #创建人的类,同样继承lable(父类)的属性
def __init__(self, name, aggr, hp, sex):
lable.__init__(self, name, aggr, hp)
self.sex = sex
#初始化人的钱为0
self.money = 0
#定义人的攻击方法,参数对象是狗
def person_attack(self, dog):
#狗的血量等于狗当前的血量减去人的攻击力
dog.hp -= self.aggr
#定义人买枪的方法
def person_gun(self, gun):
if self.money >= gun.g_price:
#如果钱够就买枪
self.money -= gun.g_price
self.gun = gun
#枪的攻击力赋值与人的攻击力
self.aggr = gun.g_aggr
else:
print('余额不足,请充值金额打狗!')
class gun: #创建gun枪的类
#类属性 记录子弹数量,初始化为0
num_bullet = 0
def __init__(self, name, aggr, zds, price):
self.g_name = name
self.g_aggr = aggr
self.g_zds = zds
self.g_price = price
def hand_w(self,dog):
#定义人开枪的方法
while self.g_zds > 0:#保证子弹数一直是正数
if dog.hp > 0:
#人用枪打狗,伤害为枪伤害的二倍
dog.hp -= self.g_aggr * 2
self.g_zds -= 1
gun.num_bullet += 1
print('正在使用武器攻击(伤害为{}的二倍)!'.format(self.g_aggr))
print('当前{}的血条为{}'.format(dog.name,dog.hp))
else: # 防止程序陷入死循环
break
#创建实例对象
zangao = dog('zangao', 100, 200, '咬人')
tom = person('tom', 50, 10, '打狗')
m4a1 = gun('m4-a1', 20, 3, 500)
tom.money += 1000
#假想藏獒不攻击人类,只有人类用枪打狗的过程
# 构造一个循环体,当[zangao]的hp<=0时,退出循环
# 固定子弹数量
bullet_full = m4a1.g_zds
while zangao.hp > 0:
# 使用gun攻击
# 判断tom是否还有钱购买枪攻击zangao,如果没有终止循环
while tom.money >= m4a1.g_price:
# 购买武器
tom.person_gun(m4a1)
# 我们需要重置一下子弹的数量
m4a1.g_zds = 3
# 使用武器攻击(hand_w方法自带判断,这里不用加判断了)
m4a1.hand_w(zangao)
#输出消耗打狗的总子弹数
print('使用子弹数量为[%d]' % gun.num_bullet)
(这个小例子重点在掌握面向对象的继承,还有定义函数的方法,以及一些逻辑关系,程序里没有实现让狗攻击人,然后人在攻击狗,完全就是单纯的人打狗。至于函数内定义的狗的攻击力,可以作为是为了学习面相对象的继承。一起加油呀!)