Python pyqt5功能实现

基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,学生成绩管理模块的主要功能有统计课程最高分、最低分
和平均分。要求按照面向对象思维进行编写,按照以下模式完成:
1、设计一个学生类,包含学号、姓名、语文成绩、数学成绩和英语成绩等数据成员。
2、引1入OS模块,用于导人导出路径文件信息
3、设计一个学生管理类,用于定义各个模块的具体功能函数。
4、设计一个主菜单,两个子菜单,分别管理学生基本信息和学生成绩信息

基于new bing部分指引作答:
运行结果:

img

以下是使用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
运行效果:

img

你小子花钱搞

可参考

#定义一个列表来存储所有学生信息
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}")



  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7641927
  • 除此之外, 这篇博客: python小白自学基础知识(二)附加(人狗大战游戏)中的 根据函数和面向对象(类)的知识,概括为一个总的例子(该例子我在其他的文章中见过),作为上课的内容,老师要求实现人狗大战游戏代码编写,内容中包含:人初始化的金钱额度,金钱用于买枪,枪对狗的伤害,以及狗的血量,最后是人在多少次把狗打死(其中没有涉及到人打狗的同时,狗也在咬人,但是却定义了狗对人的伤害,有兴趣的朋友可以继续把游戏做下去) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 人狗大战游戏

    #创建一个类(该类的属性会为后面的类继承调用)
    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)
    

    (这个小例子重点在掌握面向对象的继承,还有定义函数的方法,以及一些逻辑关系,程序里没有实现让狗攻击人,然后人在攻击狗,完全就是单纯的人打狗。至于函数内定义的狗的攻击力,可以作为是为了学习面相对象的继承。一起加油呀!)