【项目资源如下】
基于QT的毕业设计项目管理系统(包含源代码+详细系统简介+全文12页)资源-CSDN文库https://download.csdn.net/download/m0_72216164/89825128开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费!全文6000+干货。
目录
项目简介
项目名称:毕业设计选题管理系统
项目描述:这是一个简单的毕业设计选题管理系统,用于帮助学生和教师进行毕业设计的选题和分配。系统包括用户登录、选题列表显示、选题详情查看、选题分配等功能。使用Qt框架进行开发,采用MVC(Model-View-Controller)设计模式,使代码结构清晰、易于维护。
部分代码
1. 项目目录结构
复制代码
GraduationProjectSelection/ | |
├── main.cpp | |
├── mainwindow.cpp | |
├── mainwindow.h | |
├── mainwindow.ui | |
├── models/ | |
│ └── projectmodel.cpp | |
│ └── projectmodel.h | |
├── views/ | |
│ └── projectview.cpp | |
│ └── projectview.h | |
└── controllers/ | |
└── projectcontroller.cpp | |
└── projectcontroller.h |
2. main.cpp
cpp
#include <QApplication> | |
#include "mainwindow.h" | |
int main(int argc, char *argv[]) | |
{ | |
QApplication a(argc, argv); | |
MainWindow w; | |
w.show(); | |
return a.exec(); | |
} |
3. mainwindow.h
cpp复制代码
#ifndef MAINWINDOW_H | |
#define MAINWINDOW_H | |
#include <QMainWindow> | |
#include "controllers/projectcontroller.h" | |
#include "views/projectview.h" | |
QT_BEGIN_NAMESPACE | |
namespace Ui { class MainWindow; } | |
QT_END_NAMESPACE | |
class MainWindow : public QMainWindow | |
{ | |
Q_OBJECT | |
public: | |
MainWindow(QWidget *parent = nullptr); | |
~MainWindow(); | |
private slots: | |
void on_loginButton_clicked(); | |
void on_projectListView_clicked(const QModelIndex &index); | |
private: | |
Ui::MainWindow *ui; | |
ProjectController *projectController; | |
ProjectView *projectView; | |
}; | |
#endif // MAINWINDOW_H |
4. mainwindow.cpp (开头部分)
cpp复制代码
#include "mainwindow.h" | |
#include "ui_mainwindow.h" | |
#include <QMessageBox> | |
#include <QLineEdit> | |
MainWindow::MainWindow(QWidget *parent) | |
: QMainWindow(parent) | |
, ui(new Ui::MainWindow) | |
, projectController(new ProjectController(this)) | |
, projectView(new ProjectView(this)) | |
{ | |
ui->setupUi(this); | |
// 设置项目视图 | |
setCentralWidget(projectView); | |
// 连接信号和槽 | |
connect(ui->loginButton, &QPushButton::clicked, this, &MainWindow::on_loginButton_clicked); | |
connect(projectView, &ProjectView::itemClicked, this, &MainWindow::on_projectListView_clicked); | |
} | |
MainWindow::~MainWindow() | |
{ | |
delete ui; | |
delete projectController; | |
delete projectView; | |
} | |
void MainWindow::on_loginButton_clicked() | |
{ | |
QString username = ui->usernameLineEdit->text(); | |
QString password = ui->passwordLineEdit->text(); | |
if (projectController->login(username, password)) | |
{ | |
QMessageBox::information(this, "登录成功", "欢迎使用毕业设计选题管理系统!"); | |
// 加载选题列表 | |
projectView->setModel(projectController->getProjectModel()); | |
} | |
else | |
{ | |
QMessageBox::warning(this, "登录失败", "用户名或密码错误,请重试。"); | |
} | |
} | |
// ... (此处省略后续代码,如需继续请告知) |
5. mainwindow.cpp
cpp复制代码
// 继续 mainwindow.cpp | |
void MainWindow::on_projectListView_clicked(const QModelIndex &index) | |
{ | |
if (!index.isValid()) | |
return; | |
QVariant projectData = index.data(ProjectModel::ProjectRole); | |
// 假设 projectData 是一个包含项目详情的 QVariantMap | |
QVariantMap projectDetails = projectData.toMap(); | |
// 显示项目详情(这里只是简单地在消息框中显示) | |
QString details = QString("项目名称: %1\n导师: %2\n描述: %3") | |
.arg(projectDetails["name"].toString()) | |
.arg(projectDetails["supervisor"].toString()) | |
.arg(projectDetails["description"].toString()); | |
QMessageBox::information(this, "项目详情", details); | |
// 分配项目(这里只是模拟分配,实际可能需要更多逻辑) | |
QString studentName = ui->studentLineEdit->text(); | |
if (!studentName.isEmpty()) | |
{ | |
projectController->assignProject(index.row(), studentName); | |
QMessageBox::information(this, "分配成功", "项目已成功分配给学生!"); | |
} | |
else | |
{ | |
QMessageBox::warning(this, "分配失败", "请输入学生姓名!"); | |
} | |
} |
6. projectmodel.h
cpp复制代码
#ifndef PROJECTMODEL_H | |
#define PROJECTMODEL_H | |
#include <QAbstractTableModel> | |
#include <QVariantMap> | |
#include <QList> | |
class ProjectModel : public QAbstractTableModel | |
{ | |
Q_OBJECT | |
public: | |
enum ProjectRoles { | |
ProjectRole = Qt::UserRole + 1, | |
}; | |
explicit ProjectModel(QObject *parent = nullptr); | |
int rowCount(const QModelIndex &parent = QModelIndex()) const override; | |
int columnCount(const QModelIndex &parent = QModelIndex()) const override; | |
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; | |
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; | |
void addProject(const QVariantMap &project); | |
QList<QVariantMap> getProjects() const; | |
private: | |
QList<QVariantMap> projects; | |
}; | |
#endif // PROJECTMODEL_H |
7. projectmodel.cpp
cpp复制代码
#include "projectmodel.h" | |
ProjectModel::ProjectModel(QObject *parent) | |
: QAbstractTableModel(parent) | |
{ | |
} | |
int ProjectModel::rowCount(const QModelIndex &parent) const | |
{ | |
Q_UNUSED(parent); | |
return projects.count(); | |
} | |
int ProjectModel::columnCount(const QModelIndex &parent) const | |
{ | |
Q_UNUSED(parent); | |
return 3; // 假设我们有3列:项目名称、导师、描述 | |
} | |
QVariant ProjectModel::data(const QModelIndex &index, int role) const | |
{ | |
if (!index.isValid() || role != Qt::DisplayRole) | |
return QVariant(); | |
const QVariantMap &project = projects[index.row()]; | |
if (index.column() == 0) | |
return project["name"]; | |
else if (index.column() == 1) | |
return project["supervisor"]; | |
else if (index.column() == 2) | |
return project["description"]; | |
return QVariant(); | |
} | |
QVariant ProjectModel::headerData(int section, Qt::Orientation orientation, int role) const | |
{ | |
if (role != Qt::DisplayRole) | |
return QVariant(); | |
if (orientation == Qt::Horizontal) { | |
switch (section) { | |
case 0: return "项目名称"; | |
case 1: return "导师"; | |
case 2: return "描述"; | |
default: return QVariant(); | |
} | |
} | |
return QVariant(); | |
} | |
void ProjectModel::addProject(const QVariantMap &project) | |
{ | |
beginInsertRows(QModelIndex(), rowCount(), rowCount()); | |
projects.append(project); | |
endInsertRows(); | |
} | |
QList<QVariantMap> ProjectModel::getProjects() const | |
{ | |
return projects; | |
} |
8. projectview.h
cpp复制代码
#ifndef PROJECTVIEW_H | |
#define PROJECTVIEW_H | |
#include <QTableView> | |
class ProjectView : public QTableView | |
{ | |
Q_OBJECT | |
public: | |
explicit ProjectView(QWidget *parent = nullptr); | |
signals: | |
void itemClicked(const QModelIndex &index); | |
protected: | |
void mousePressEvent(QMouseEvent *event) override; | |
}; | |
#endif // PROJECTVIEW_H |
9. projectview.cpp
cpp复制代码
#include "projectview.h" | |
#include <QMouseEvent> | |
#include <QHeaderView> | |
ProjectView::ProjectView(QWidget *parent) | |
: QTableView(parent) | |
{ | |
setMouseTracking(true); // 启用鼠标跟踪以捕获点击事件,即使在没有按下按钮的情况下 | |
verticalHeader()->hide(); // 隐藏垂直表头 | |
setSelectionBehavior(QAbstractItemView::SelectRows); // 设置选择行为为选择整行 | |
setSelectionMode(QAbstractItemView::SingleSelection); // 设置选择模式为单选 | |
} | |
void ProjectView::mousePressEvent(QMouseEvent *event) | |
{ | |
QTableView::mousePressEvent(event); | |
QModelIndex index = indexAt(event->pos()); | |
if (index.isValid()) | |
emit itemClicked(index); | |
} |
10. projectcontroller.h
cpp复制代码
#ifndef PROJECTCONTROLLER_H | |
#define PROJECTCONTROLLER_H | |
#include <QObject> | |
#include "models/projectmodel.h" | |
#include <QString> | |
#include <QVariantMap> | |
class ProjectController : public QObject | |
{ | |
Q_OBJECT | |
public: | |
explicit ProjectController(QObject *parent = nullptr); | |
bool login(const QString &username, const QString &password); | |
ProjectModel *getProjectModel(); | |
void assignProject(int rowIndex, const QString &studentName); | |
private: | |
ProjectModel *projectModel; | |
bool isLoggedIn; | |
QString adminUsername; | |
QString adminPassword; | |
void initializeProjects(); | |
}; | |
#endif // PROJECTCONTROLLER_H |
11. projectcontroller.cpp
cpp复制代码
#include "projectcontroller.h" | |
#include <QVariantMap> | |
ProjectController::ProjectController(QObject *parent) | |
: QObject(parent) | |
, projectModel(new ProjectModel(this)) | |
, isLoggedIn(false) | |
, adminUsername("admin") | |
, adminPassword("password") | |
{ | |
initializeProjects(); | |
} | |
bool ProjectController::login(const QString &username, const QString &password) | |
{ | |
if (username == adminUsername && password == adminPassword) { | |
isLoggedIn = true; | |
return true; | |
} | |
return false; | |
} | |
ProjectModel *ProjectController::getProjectModel() | |
{ | |
return projectModel; | |
} | |
void ProjectController::assignProject(int rowIndex, const QString &studentName) | |
{ | |
if (!isLoggedIn) | |
return; | |
QList<QVariantMap> projects = projectModel->getProjects(); | |
if (rowIndex >= 0 && rowIndex < projects.count()) { | |
QVariantMap &project = projects[rowIndex]; | |
project["assignedTo"] = studentName; | |
// 注意:这里只是修改了内存中的数据,实际应用中可能需要保存到数据库 | |
} | |
} | |
void ProjectController::initializeProjects() | |
{ | |
QVariantMap project1; | |
project1["name"] = "项目一"; | |
project1["supervisor"] = "导师A"; | |
project1["description"] = "这是项目一的描述。"; | |
projectModel->addProject(project1); | |
QVariantMap project2; | |
project2["name"] = "项目二"; | |
project2["supervisor"] = "导师B"; | |
project2["description"] = "这是项目二的描述。"; | |
projectModel->addProject(project2); | |
// 可以继续添加更多项目... | |
} |
以上代码提供了一个简单的毕业设计选题管理系统的基本框架。
【结语】
最后祝看到最后的伙伴们都能上岸!!
【往期回顾】