栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号