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 += sqlRC_ICONS = windi.icogreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = dbtest
TEMPLATE = appSOURCES += main.cpp\mainwindow.cpp \logindialog.cpp \modify.cpp \mydialog.cppHEADERS  += mainwindow.h \logindialog.h \modify.h \mydialog.hFORMS    += mainwindow.ui \logindialog.ui \modify.uiRESOURCES += \recourse.qrc

logindialog.h

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H#include <QDialog>
#include <QMessageBox>namespace Ui {class logindialog;
}class logindialog : public QDialog
{Q_OBJECTpublic: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 <QMainWindow>
#include <QtSql>
#include "modify.h"namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:void sqlconn();void sqlshow();QSqlDatabase db;        //用QSqlDatabase声明一个数据库类,名为dbvoid 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;elsebreak;}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 <QDialog>
#include <QSqlQuery>
#include <QtSql>
#include "mydialog.h"
namespace Ui {class Modify;
}class Modify : public MyDialog //public QDialog
{Q_OBJECTpublic: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 <QMainWindow>
#include <QApplication>
#include <QMessageBox>
#include <QMouseEvent>namespace Ui {class MyDialog;
}class MyDialog : public QDialog
{Q_OBJECTpublic: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 <QApplication>
#include <logindialog.h>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

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

  1. 英语单词关小程序开发感想

    最近这两个月一直在研究小程序开发,正在做一款学生记单词的小程序,原先想着,把单词整理一下,利用记忆规律,帮学生(自已的小孩)好好的记下单词.整理的过程中才发现,开发起来并不是太顺. 找单词,想着孩子每 ...

  2. 计算机英语在线学习,英语单词记忆法超强记忆_免费背单词软件电脑版

    英语单词记忆法超强记忆_免费背单词软件电脑版 下载地址: 内容预览 如何背英语单词personify.mp4 如何背英语单词dote.mp4 如何背英语单词coddle.mp4 如何背英语单词drow ...

  3. 【附源码】计算机毕业设计java英语单词记忆系统设计与实现

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. Emscripten 单词_分享15个英语单词记忆方法,简单实用,赶紧收藏吧!

    分享15个英语单词记忆方法,简单实用,赶紧收藏吧! 单词是学习英语的基石,英语程度的好坏,单词是最重要的衡量标准.单词的构成方式其实很简单,就是26个字母的排列组合. 那有什么方法能够让我们更好地把单 ...

  5. QT课程设计:基于QT的图像处理程序

    本文用于2022-23学年海哥QT课课程设计的制作过程索引 以下先贴放课设要求 课程设计 一.课程设计要求(每人1题) 基于QT Creator设计一个简易的数字图像处理软件,要求: 工程名含有姓名拼 ...

  6. Java课程设计——文本文件加密与解密软件设计与实现

    源文件链接: Java文本文件加密与解密-其它文档类资源-CSDN文库 摘要 随着现代网络技术的飞速发展,人们的个人信息.文件传递以及电子商务等方面都需要大力的保护,文件加密技术也应运而生.本次使用J ...

  7. dis的前缀单词有哪些_下面是总结的一些英语单词记忆前

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面是总结的一些英语单词记忆前缀,希望对你记单词有所帮助: 一.表示否定的前缀 1.dis-加在名词.形容词,动词之前. disadvantage(缺点) ...

  8. 小学英语计算机问卷调查,《小学英语单词记忆方法研究》问卷调查分析报告

    <小学英语单词记忆方法研究>问卷调查分析报告 一.调查目的: 1.如何帮助学生在单位时间内牢牢记住所学单词. 2.激发和培养学生学习英语的兴趣,使学生树立自信心,养成良好的学习习惯. 3. ...

  9. 俞敏洪老师谈英语单词记忆方法——转

    李:俞老师,您好!很高兴今天能采访您.我们都知道词汇是语言的基础,在外语学习和外语考试中,词汇也是重要的突破口,尤其是在GRE考试中,词汇是重头戏.所以外语学习者非常关心单词记忆法的问题.英语单词记忆 ...

  10. 英语单词记忆的词根总结

    英语单词记忆的词根词缀总结-常见的前缀 1.表示否定意义的前缀 1)纯否定前缀 a-, an-, asymmetry(不对称)anhydrous(无水的) dis- dishonest, dislik ...

最新文章

  1. IBM沃森健康项目受挫 人工智能在医疗领域前景几何
  2. centos7中mysql不能输入中文问题的解决
  3. 解救人质的android游戏,黑帽子解救人质全关卡解锁版 1.03 安卓版
  4. asp.net core mvc 异步表单(Ajax.BeginForm)
  5. 用XFTP向Linux上传文件时出现Permission is not allowed
  6. C、C++中的逻辑运算符
  7. 编程实现木马的ActiveX启动和注入IE的启动方式
  8. 通过yum下载rpm包
  9. 图像形状特征(八)--SC形状上下文
  10. openbci脑电帽3d打印文件下载
  11. 中国多媒体与网络教学学报杂志中国多媒体与网络教学学报杂志社中国多媒体与网络教学学报编辑部2022年第6期目录
  12. 无损放大图片软件有什么?安利几款放大图片的软件
  13. 两个正数相乘或相加,为什么结果是负数。/Java基本数据类型介绍
  14. 回顾过去展望未来之2015
  15. [从零开始]用python制作识图翻译器·四
  16. 计算机软件著作权登记范文,计算机软件著作权登记申请表范本
  17. Python3制作二维码
  18. java韩顺平学习笔记
  19. VB和VB.net环境下链接Access、SQL数据库的方法及技巧(Access篇)
  20. 1到10之间所有数的平方和立方

热门文章

  1. 计算机word正文样式怎么新建,Word怎么给格式和样式设定快捷键
  2. 解决U盘复制拷贝文件过大不能超过4G的方法
  3. 苹果手机白屏_苹果手机白屏怎么处理啊
  4. 地球到火星的通信问题
  5. [python] Python二维码生成器qrcode库入门
  6. Git 之 多人协同开发工作流
  7. linux rpm是什么意思中文,rpm是什么意思
  8. ckpt2npy和npy2ckpt转换
  9. 勒索病毒WannaCry深度技术分析:详解传播、感染和危害细节
  10. 视频传输协议的总结区分