QT课程设计:C++英语单词记忆软件程序开发

您所在的位置:网站首页 pk英语单词的小程序 QT课程设计:C++英语单词记忆软件程序开发

QT课程设计:C++英语单词记忆软件程序开发

2024-07-01 03:05| 来源: 网络整理| 查看: 265

QT程序开发:C++英语单词记忆软件

文章目录 前言一、系统需求分析1.1 任务概述1.2 系统用例图1.3 功能性需求1.4 开发工具介绍 二、系统总体设计2.1 概要设计说明2.2 总体模块的设计2.3 流程设计 三、具体代码实现四、系统测试总结

前言

  现在英语的学习对于我们学生来说越来越重要,但是对于学习英语来说,重点和难点都是单词的记忆。于是,我们设计了基于Qt和Sqlite数据库的轻量级的单词记忆本,来辅助学生们记忆单词学习英语。

(文末附完整程序下载链接)

一、系统需求分析 1.1 任务概述

  本次实验项目是基于Qt5.7.1和Sqlite数据库完成的,运用Qt中的槽函数,数据库的链接,窗口界面的设计来完成不同的功能,其中包含了单词查询,辅助记忆等功能。

1.2 系统用例图

系统用例图

1.3 功能性需求

 (1)登录界面:设计用户名和密码,并且利用按键的槽函数实现正确的账号密码登录,错误的无法登录,隐藏密码功能。  (2)单词记忆本:利用Sqlite数据库将英语单词,词性,解释,例句等信息显示在窗口出,可以让用户选择,了解所有单词的大概情况,选择自己不熟悉的单词进行记忆。  (3)单词专注学习:利用按键槽函数实现单词的专门记忆,用户可以选择一部分单词进行专门记忆,此时,窗口将会一个个的显示单词的信息,以便于用户专门背诵记忆。  (4)单词查询功能:利用按键槽函数,以及数据库的查询功能实现,以便于用户专门查询相关的单词信息,方便用户专门使用。  (5)窗口界面的设计与项目图标:利用资源函数设计各个窗口的背景,按键等方面,使窗口看起来清新,可以让用户更加喜欢使用该项目学习英语。

1.4 开发工具介绍

  本项目是基于Qt5.7.1和Sqlite数据库完成的,运用Qt中的槽函数,数据库的链接,窗口界面的设计来完成不同的功能,其中包含了单词查询,辅助记忆等功能。

二、系统总体设计 2.1 概要设计说明

  在进行项目需求分析阶段,我们了解到了现在有很多人尤其是学生有着很强的学习英语需求。本次项目是在用户需求上进行设计,主要解决的是数据库信息在Qt中的引用,以及各个按键实现不同的功能,各个模块与窗口之间的互联等等问题,接下来将会对遇到的问题进行详细的说明。

2.2 总体模块的设计

 (1)登录界面的设计:账号、密码登录主界面,若输入错误,提示“账户或密码错误”。  (2)单词记忆本的设计:显示所有单词,并可点击“学习单词”查看单词详细信息,若未选中单词,则提示“请选中单词”。  (3)学习单词窗口的设计:详细显示单个单词,可上、下切换单词,最后一个和第一个单词之间切换时,有提示。  (4)单词查询模块的设计:通过单词id来查找单词,若不输入文本,则提示“请输入id”,未找到单词,则提示“未找到单词id”。

2.3 流程设计

 (1)登录窗口:用户输入响应的信息,判断用户是否可以使用该程序。  (2)单词记忆本:在用户登录成功后,会看到单词记忆本,上面有所有的单词,用户可以选中其中的单词查看对应的信息。  (3)单词查询:用户可以根据相应的信息查询到对应的单词。  (4)学习单词:窗口将会一个个的显示单词,共用户学习。

三、具体代码实现

dbtest.pro

QT += core gui QT += sql RC_ICONS = windi.ico greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = dbtest TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp \ logindialog.cpp \ modify.cpp \ mydialog.cpp HEADERS += mainwindow.h \ logindialog.h \ modify.h \ mydialog.h FORMS += mainwindow.ui \ logindialog.ui \ modify.ui RESOURCES += \ recourse.qrc

logindialog.h

#ifndef LOGINDIALOG_H #define LOGINDIALOG_H #include #include namespace Ui { class logindialog; } class logindialog : public QDialog { Q_OBJECT public: explicit logindialog(QWidget *parent = 0); ~logindialog(); private slots: void on_exitBtn_clicked(); void on_loginBtn_clicked(); private: Ui::logindialog *ui; }; #endif // LOGINDIALOG_H

logindialog.cpp

#include "logindialog.h" #include "ui_logindialog.h" logindialog::logindialog(QWidget *parent) : QDialog(parent), ui(new Ui::logindialog) { ui->setupUi(this); setWindowTitle("登录"); } logindialog::~logindialog() { delete ui; } void logindialog::on_loginBtn_clicked() { // 判断用户名和密码是否正确, // 如果错误则弹出警告对话框 if(ui->usrLineEdit->text().trimmed() == tr("1") && ui->pwdLineEdit->text() == tr("1")) { accept(); //act(); } else { QMessageBox::warning(this, tr("Waring"), tr("user name or password error!"), QMessageBox::Yes); // 清空内容并定位光标 ui->usrLineEdit->clear(); ui->pwdLineEdit->clear(); ui->usrLineEdit->setFocus(); } } void logindialog::on_exitBtn_clicked() { close(); }

mainwindow.h

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include "modify.h" namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: void sqlconn(); void sqlshow(); QSqlDatabase db; //用QSqlDatabase声明一个数据库类,名为db void show_table(); QSqlQueryModel *model; Modify d3; //学习属性对话框 int sum; explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_learnBtn_clicked(); void on_search_nBtn_clicked(); void on_wordBtn_clicked(); private: Ui::MainWindow *ui; }; #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); setWindowTitle("单词本"); //QSqlTableModel为读写模型,QSqlQueryModel为用来查询的只读模型 model = new QSqlQueryModel(ui->tableView); sqlconn(); sqlshow(); } void MainWindow::sqlconn(){ QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); db.setHostName("myhost"); db.setDatabaseName("test"); if (!db.open()) { qDebug("数据库不能打开"); } } void MainWindow::sqlshow(){ QSqlQuery query; query.exec("select levels,words,pronounce,chinses,senences from around10k "); model->setQuery(query); //把从数据库查询到的结果集存到model中 show_table(); sum=0; query.exec("select * from around10k "); while(1){ if(query.next()) ++sum; else break; } ui->label->setText("单词总量:"+QString::number(sum)); } void MainWindow::show_table() //设置表格的显示内容和格式 { model->setHeaderData(0,Qt::Horizontal,QObject::tr("id")); //设置tableview的表头 model->setHeaderData(1,Qt::Horizontal,QObject::tr("单词")); model->setHeaderData(2,Qt::Horizontal,QObject::tr("词性")); model->setHeaderData(3,Qt::Horizontal,QObject::tr("释义")); model->setHeaderData(4,Qt::Horizontal,QObject::tr("例句")); //Qt中用model/view模式来显示数据,将tableView与存储数据的model关联后才有显示的内容 ui->tableView->setModel(model); ui->tableView->verticalHeader()->setVisible(false);//隐藏表格的行号 //设置选中时为整行选中 ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //列宽随窗口大小改变而改变,每列平均分配,充满整个表,但是此时列宽不能拖动进行改变 ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); } MainWindow::~MainWindow() { db.close(); //关闭数据库 delete ui; } void MainWindow::on_learnBtn_clicked() { //获取鼠标在tableView中选中的单元格的index即索引 QModelIndex index = ui->tableView->currentIndex(); //不知道未选中时currentIndex()的返回值是什么,所以另外新建一个index_2来判断index是否赋值了 QModelIndex index_2; if( index == index_2 ) { QMessageBox::warning(this,"打开失败","没有选中单词!",QMessageBox::Yes); return; } int row = ui->tableView->currentIndex().row(); int num = index.sibling(row,0).data().toInt(); d3.modify(num); d3.show(); d3.raise(); //只能同时存在一个对话框,再按增加按钮会让对话框显示到最上层 } void MainWindow::on_search_nBtn_clicked() { QString input = ui->searchlineEdit->text(); if(input.isEmpty()) //判断是否有输入查询内容 { QMessageBox::warning(this,"查询失败","请输入要查询的id!",QMessageBox::Yes); return; } QSqlQuery query; query.prepare(QString("select levels,words,pronounce,chinses,senences from around10k where levels = %1").arg(input)); query.exec(); if(!query.next()) { QMessageBox::warning(this,"查询失败","没有查找到该id!",QMessageBox::Yes); return; } model->setQuery(query); //重新设置model的内容 show_table(); } void MainWindow::on_wordBtn_clicked() { sqlshow(); }

modify.h

#ifndef MODIFY_H #define MODIFY_H #include #include #include #include "mydialog.h" namespace Ui { class Modify; } class Modify : public MyDialog //public QDialog { Q_OBJECT public: explicit Modify(QWidget *parent = 0); ~Modify(); void modify(int num); private slots: void on_upBtn_clicked(); void on_dnBtn_clicked(); private: Ui::Modify *ui; int id; }; #endif // MODIFY_H

modify.cpp

#include "modify.h" #include "ui_modify.h" Modify::Modify(QWidget *parent) : MyDialog(parent), //QDialog(parent), ui(new Ui::Modify) { ui->setupUi(this); this->setWindowTitle(QString("单词卡")); } Modify::~Modify() { delete ui; } void Modify::modify(int num) //显示选中的单词的属性 { id = num; QSqlQuery query; //找到指定id的单词,%1是保证值为整数 query.prepare(QString("select * from around10k where levels = %1").arg(id)); //query.bindValue(":id",id); query.exec(); query.next(); QString word = query.value(0).toString(); QString type = query.value(2).toString(); QString definition = query.value(3).toString(); QString example = query.value(4).toString(); ui->lineEdit_3->setText(word); ui->lineEdit_4->setText(type); ui->textEdit_3->setText(definition); ui->textEdit_4->setText(example); ui->lineEdit_3->setReadOnly(true); //设置单词对应的输入栏不可编辑 ui->lineEdit_4->setReadOnly(true); ui->textEdit_3->setReadOnly(true); ui->textEdit_4->setReadOnly(true); } void Modify::on_upBtn_clicked() { id++; if( id==14342 ) { QMessageBox::warning(this,"这是最后一个单词!!","将返回第一个单词",QMessageBox::Yes); id=1; } modify(id); } void Modify::on_dnBtn_clicked() { id--; if( id==0 ) { QMessageBox::warning(this,"这是第一个单词!","将返回最后一个单词",QMessageBox::Yes); id=14341; } modify(id); }

mydialog,h

#ifndef MYDIALOG_H #define MYDIALOG_H #include #include #include #include namespace Ui { class MyDialog; } class MyDialog : public QDialog { Q_OBJECT public: explicit MyDialog(QWidget *parent = 0); ~MyDialog(); }; #endif // MYDIALOG_H

mydialog.cpp

#include "mydialog.h" MyDialog::MyDialog(QWidget *parent) : QDialog(parent) { } MyDialog::~MyDialog() { }

main.cpp

#include "mainwindow.h" #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; logindialog dlg; if (dlg.exec() == QDialog::Accepted) { w.show(); return a.exec(); } else return 0; } 四、系统测试

登录界面 主界面 单词学习界面

总结

  本系统适合QT程序开发的初学者。在系统学习QT开发的相关知识后用来练手的一个项目。欢迎一键三连 .QvQ.

下载地址: https://download.csdn.net/download/qq_50185399/85762273



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3