Qt影碟管理系統

目的、要求:

1.輸入賬號和密碼來登陸,賬號爲admin,密碼爲admin

2.進貨:輸入新買入的影碟的信息(上面數據中影碟的部分),如果新買入的影碟和原有影碟相同,則直接將新的影碟數量加到原有數量上

3.查詢影碟信息並輸出符合條件結果:提供三種查詢方式(1)根據影碟名字來查詢;(2)輸入價格區間來查詢;(3)根據類型來查詢

4.對影碟排序:提供兩種排序方式:(1)價格(升序及降序);(2)編號順序

5.提供顯示所有影碟的信息的功能

6.租借:在查詢影碟信息之後,可以選擇租借,此時記錄租借者相關信息(上面數據中租借者的部分)

7.查詢租借者信息並輸出結果:提供兩種查詢方式:(1)租借者姓名;(2)出借影碟的名字

8.可以顯示所有租借者的信息,分爲兩部分:(1)未超期的 (2)已經超期的,對每一位超期的租借者能產生一份包含租借者的信息的郵件內容(例如:xxx,您好!您租借的xxx影碟於xxx日期過期,請及時歸還,感謝您的合作!)

9.比較是否超期:可以獲取系統時間來設定爲當前時間,和歸還日期作比較,只要能判定是否超期並生成相應郵件內容就ok,什麼方式都可以

10.在界面的右下角或者其他地方,顯示着當前的時間,時間精準到秒(通過獲取系統時間之類的)

數據:

(1)影碟:名稱、編號、價格、類型、總數量、剩餘數量(編號按照進貨順序自動排爲1,2,3,4……)

(2)租借者:租借者姓名、聯繫電話、租借影碟的名稱、租借數量、租借日期(年月日)、租借天數、歸還日期(歸還日期最好能根據租借日期和天數自動生成)

​​​簡介:

使用qt5 sqlite進行上述功能開發,數據的增查,tableview右鍵菜單實現租借功能,超期功能實現的邏輯是這樣的:在程序開啓後2秒啓動定時器對租借的信息進行處理,如果超時,就修改對應字段數據信息,併發送郵件給對應租借者(生成一條數據存到郵件表)。處理完成後,關閉定時器,然後設置定時器時間間隔爲24小時,再次開啓定時器。

效果:

 

代碼:

//用來判斷是否超時
void MainForm::overTimeTimerSlot()
{
    //觸發定時器的時候,直接獲取當前系統日期,與應還日期進行對比,如果小於應還日期,那就不超時,反之亦然

    //如果出租表沒有數據,直接返回
    //判斷數據裏是否有數據
    int dataCount;

    QSqlQuery sqlQuery11;
    //判斷數據庫是否存在數據
    QString strInst = QString("select count(*) from hirerTable where currentStatus = '%1'").arg("未超期");
    qDebug() << "strInst" << strInst;
    if(!sqlQuery11.exec(strInst))
    {
        qDebug() << sqlQuery11.lastError().text();
        QMessageBox::information(this,QStringLiteral("判斷是否超時"),sqlQuery11.lastError().text(),QMessageBox::Ok);

        return;
    }

    while(sqlQuery11.next())
    {
        //如果存在,就直接修改
        qDebug() << "sqlQuery11.isActive()" << sqlQuery11.isActive();
        if(sqlQuery11.isActive())
        {
            dataCount = sqlQuery11.value(0).toInt();
            qDebug() << "dataCount" << dataCount;
        }
    }
    //如果不存在未超時的數據
    if(!dataCount)
    {
        return;
    }

    //取出全部未超時的數據
    //保存價格信息
    QString rentNumber;
    QString returnDate;
    QString hirerName;
    QString rentVdName;
    QStringList  rentNumberList;
    QStringList  returnDateList;
    QStringList  hirerNameList;
    QStringList  rentVdNameList;
    QSqlQuery sqlQuery1111;
    sqlQuery1111.exec(QString("select * from hirerTable where currentStatus = '%1'").arg("未超期"));
    while(sqlQuery1111.next())
    {

        rentNumber = sqlQuery1111.value(0).toString();
        returnDate = sqlQuery1111.value(8).toString();
        hirerName = sqlQuery1111.value(1).toString();
        rentVdName = sqlQuery1111.value(5).toString();
        rentNumberList.append(rentNumber);
        returnDateList.append(returnDateList);
        hirerNameList.append(hirerName);
        rentVdNameList.append(rentVdName);
    }

    //獲取當前系統日期
    QString dateStr = QDateTime::currentDateTime().toString("yyyy-MM-dd");
    for(int i = 0;i < returnDateList.count();i++)
    {
        QString returnDate = returnDateList[i];
        QDateTime dateCurrent = QDateTime::fromString(dateStr,"yyyy-MM-dd");
        QDateTime dateReturn = QDateTime::fromString(returnDate,"yyyy-MM-dd");
        qint64 nSecs = dateReturn.secsTo(dateCurrent);
        //如果超時
        if(nSecs > 0)
        {
            //更新對應數據的狀態信息
            //修改數量
            QSqlQuery query;
            QString afterSql = "update hirerTable set currentStatus = :currentStatus,residueVdCount = :residueVdCount where rentNumber = :rentNumber";

            query.prepare(afterSql);
            query.bindValue(":currentStatus","已超期");

            query.bindValue(":rentNumber",rentNumberList[i]);


            //對執行進行判斷
            if(!query.exec())
            {
                qDebug() << query.lastError().text();
                QMessageBox::information(this,QStringLiteral("判斷是否超時"),query.lastError().text(),QMessageBox::Ok);
                return;
            }

            QString emailContent = hirerNameList[i] + " ,您好!您租借的" + rentVdNameList[i] + "影碟於"
               +  returnDateList[i]   + " 日期過期,請及時歸還,感謝您的合作!";

            //編輯郵件內容,存到郵件表
            QSqlQuery query4;
            QString insertSql = "insert into emailTable values(?,?,?)";
            query4.prepare(insertSql);

            query4.addBindValue(QDateTime::currentDateTime().toString("yyyyMMddhhmmss"));
            query4.addBindValue(rentNumberList[i]);
            query4.addBindValue(emailContent);


            //對執行進行判斷
            if(!query4.exec())
            {
                qDebug() << query4.lastError().text();
                QMessageBox::information(this,QStringLiteral("判斷是否超時"),query4.lastError().text(),QMessageBox::Ok);
                return;
            }
        }
    }

    //設置1天觸發一次定時器,這個狀態更新1天更新一次就行了,所以這個地方,在更新完成後,直接設置更新間隔時間爲1天
    if(m_overTimeTimer->isActive())
    {
        m_overTimeTimer->stop();
        m_overTimeTimer->setInterval(1000 * 24 * 60 * 60);
        m_overTimeTimer->start();
    }
}

 exe體驗地址(百度網盤鏈接):

鏈接:https://pan.baidu.com/s/16AXV7sco8URXVbyC_VOiqA 
提取碼:hffr 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章