非党详细如何用qt做一个简单的学生选课系统,要源码,复制粘贴就能用那种

时间: 2024-03-08 14:51:26 浏览: 26
好的,我可以为你解答这个问题。首先,你需要安装Qt并创建一个新的Qt项目。然后,你需要设计一个简单的UI界面,包括登录界面、学生选课界面、课程信息界面等。 接下来,你需要创建一个类来处理学生和课程信息。你可以创建一个名为“Student”的类来表示学生,其中包括学生的姓名、学号、已选课程等信息。同样地,你可以创建一个名为“Course”的类来表示课程,其中包括课程的名称、课程编号、授课教师等信息。 然后,你需要创建一个数据存储类,用于存储学生和课程信息。你可以使用文件存储或数据库存储来实现。在这个存储类中,你需要实现一些方法来添加、删除和修改学生和课程信息。 最后,你需要在UI界面中添加按钮和信号槽,使用户能够登录、选课、查看课程信息等。在信号槽中,你需要调用数据存储类的方法来处理学生和课程信息。 下面是一个简单的示例源代码,希望对你有帮助: 学生类(student.h): ``` #ifndef STUDENT_H #define STUDENT_H #include <QString> #include <QList> class Student { public: QString name; QString id; QList<QString> courses; Student(QString name, QString id); void addCourse(QString course); void removeCourse(QString course); }; #endif // STUDENT_H ``` 学生类(student.cpp): ``` #include "student.h" Student::Student(QString name, QString id) { this->name = name; this->id = id; } void Student::addCourse(QString course) { this->courses.append(course); } void Student::removeCourse(QString course) { this->courses.removeOne(course); } ``` 课程类(course.h): ``` #ifndef COURSE_H #define COURSE_H #include <QString> class Course { public: QString name; QString id; QString teacher; Course(QString name, QString id, QString teacher); }; #endif // COURSE_H ``` 课程类(course.cpp): ``` #include "course.h" Course::Course(QString name, QString id, QString teacher) { this->name = name; this->id = id; this->teacher = teacher; } ``` 数据存储类(datastorage.h): ``` #ifndef DATASTORAGE_H #define DATASTORAGE_H #include <QList> #include "student.h" #include "course.h" class DataStorage { public: DataStorage(); QList<Student> getStudents(); QList<Course> getCourses(); void addStudent(Student student); void removeStudent(Student student); void addCourse(Course course); void removeCourse(Course course); private: QList<Student> students; QList<Course> courses; }; #endif // DATASTORAGE_H ``` 数据存储类(datastorage.cpp): ``` #include "datastorage.h" DataStorage::DataStorage() { // 初始化学生和课程信息 Student s1("张三", "1001"); s1.addCourse("语文"); s1.addCourse("数学"); Student s2("李四", "1002"); s2.addCourse("英语"); Course c1("语文", "001", "王老师"); Course c2("数学", "002", "李老师"); Course c3("英语", "003", "张老师"); this->students.append(s1); this->students.append(s2); this->courses.append(c1); this->courses.append(c2); this->courses.append(c3); } QList<Student> DataStorage::getStudents() { return this->students; } QList<Course> DataStorage::getCourses() { return this->courses; } void DataStorage::addStudent(Student student) { this->students.append(student); } void DataStorage::removeStudent(Student student) { this->students.removeOne(student); } void DataStorage::addCourse(Course course) { this->courses.append(course); } void DataStorage::removeCourse(Course course) { this->courses.removeOne(course); } ``` 主窗口类(mainwindow.h): ``` #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QListWidgetItem> #include "datastorage.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_loginButton_clicked(); void on_courseListWidget_itemDoubleClicked(QListWidgetItem *item); void on_viewButton_clicked(); private: Ui::MainWindow *ui; DataStorage dataStorage; Student currentStudent; }; #endif // MAINWINDOW_H ``` 主窗口类(mainwindow.cpp): ``` #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_loginButton_clicked() { QString name = ui->nameLineEdit->text(); QString id = ui->idLineEdit->text(); // 在数据存储类中查找当前学生信息 QList<Student> students = dataStorage.getStudents(); foreach (Student student, students) { if (student.name == name && student.id == id) { currentStudent = student; ui->stackedWidget->setCurrentIndex(1); ui->nameLabel->setText(name); ui->idLabel->setText(id); ui->coursesListWidget->clear(); foreach (QString course, student.courses) { QListWidgetItem *item = new QListWidgetItem(course); ui->coursesListWidget->addItem(item); } return; } } QMessageBox::warning(this, "错误", "学生信息不存在!"); } void MainWindow::on_courseListWidget_itemDoubleClicked(QListWidgetItem *item) { QString course = item->text(); // 在数据存储类中查找当前课程信息 QList<Course> courses = dataStorage.getCourses(); foreach (Course c, courses) { if (c.name == course) { // 判断当前学生是否已选该课程 if (currentStudent.courses.contains(course)) { QMessageBox::warning(this, "错误", "已选该课程!"); } else { currentStudent.addCourse(course); dataStorage.addStudent(currentStudent); QListWidgetItem *newItem = new QListWidgetItem(course); ui->coursesListWidget->addItem(newItem); } return; } } } void MainWindow::on_viewButton_clicked() { ui->stackedWidget->setCurrentIndex(2); ui->courseTableWidget->setRowCount(0); // 在数据存储类中获取所有课程信息 QList<Course> courses = dataStorage.getCourses(); foreach (Course c, courses) { int row = ui->courseTableWidget->rowCount(); ui->courseTableWidget->insertRow(row); ui->courseTableWidget->setItem(row, 0, new QTableWidgetItem(c.name)); ui->courseTableWidget->setItem(row, 1, new QTableWidgetItem(c.id)); ui->courseTableWidget->setItem(row, 2, new QTableWidgetItem(c.teacher)); } } ``` 这只是一个简单的示例,需要根据需求进行修改和完善。希望对你有所帮助!

相关推荐

最新推荐

recommend-type

Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例

主要介绍了Qt图形图像开发之曲线图表模块QChart库一个chart中显示两条曲线详细方法与实例,需要的朋友可以参考下
recommend-type

用python+pyqt5手工编写一个含交互界面的简易的词法分析器

交互界面可以用QtDesigner快速编写,或者自己写,我采用的是用可视化界面创建了一个大致的框架,然后再手动添加其他需要的控件,或者微调一些属性。 我简单设计的交互界面如图所示: 有话说: 这边以C和C++为输入...
recommend-type

基于Linux/Qt的智能家居系统设计

针对智能家居的特点及应用背景,设计了一种家庭多功能控制系统。该系统采用飞思卡尔公司ARM Cortex A8系列的i.MX51处理器作为MCU,在其上移植嵌入式Linux作为软件开发平台,并利用Qt相关技术为基础设计友好的用户...
recommend-type

Qt GUI图形图像开发之QT表格控件QTableView详细使用方法与实例

主要介绍了Qt GUI图形图像开发之QT表格控件QTableView详细使用方法与实例,需要的朋友可以参考下
recommend-type

Qt基础开发之Qt文件操作类QFile读写文件的详细方法与实例及QDataStream的使用方法

主要介绍了Qt基础开发之Qt文件操作类QFile读写文件的详细方法与实例,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】增量式PID的simulink仿真实现

# 2.1 Simulink仿真环境简介 Simulink是MATLAB中用于建模、仿真和分析动态系统的图形化环境。它提供了一个直观的用户界面,允许用户使用块和连接线来创建系统模型。Simulink模型由以下元素组成: - **子系统:**将复杂系统分解成更小的、可管理的模块。 - **块:**代表系统中的组件,如传感器、执行器和控制器。 - **连接线:**表示信号在块之间的流动。 Simulink仿真环境提供了广泛的块库,涵盖了各种工程学科,包括控制系统、电子和机械工程。它还支持用户自定义块的创建,以满足特定仿真需求。 # 2. Simulink仿真环境的搭建和建模 ### 2.
recommend-type

训练集和测试集的准确率都99%,但是预测效果不好

即使训练集和测试集的准确率都很高,但是在实际的预测中表现不佳,可能会有以下几个原因: 1. 数据质量问题:模型训练和测试的数据可能存在问题,比如数据标签错误、数据集采样不均衡、数据集中存在异常值等问题,这些问题可能会导致模型在实际预测中表现不佳。 2. 特征工程问题:模型的特征工程可能存在问题,导致模型无法很好地捕捉数据的特征,从而影响预测效果。 3. 模型选择问题:模型的选择可能不合适,比如选择的模型太简单,无法很好地拟合数据,或者选择的模型太复杂,导致过拟合等问题。 4. 超参数调整问题:模型的超参数可能没有调整到最佳状态,需要进行调整。 针对以上可能的原因,可以采取相应的措施进
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。