1. 程式人生 > >Qt Project Qt+MySQL實現圖書管理系統

Qt Project Qt+MySQL實現圖書管理系統

做這個專案之前我沒接觸過Qt 我也沒做過專案,如果貪吃蛇算專案的話。。我只是粗略的看完了C++ Primer。。
我是照著一篇SQL+JAVA的思路合著Qt快速上手完成的專案合著老師的要求

1.需求分析

1.1使用者需求
面向三類使用者:超級管理員、管理員、學生
超級管理員可對學生、管理員資訊作查詢、增加、修改操作
管理員可對書籍進行查詢、增加、修改操作,可對學生的借書情況進行檢視
學生可以對已借書籍進行續借、也可對未借書籍進行預約
三類使用者必須輸入正確的ID及PASSWORD方可進入系統

1.2 業務流程分析
該系統功能模組:

學生、管理員、超級管理員

  1. 登陸功能:登陸系統為身份驗證登陸,分為學生登陸,管理員登陸,超級管理員登陸,不具備註冊功能
  2. 學生登陸後:顯示該使用者的基本資訊,可續借已借書籍,可預約未借書籍
  3. 管理員登陸後:顯示該使用者的基本資訊,對書籍進行相應操作、檢視學生的借還情況
  4. 超級管理員登陸後:顯示該使用者的基本資訊,對管理員、學生進行相應操作
    學生
  5. 預約書籍:查詢到書籍後,可對書籍進行預約
  6. 已借書籍:可對已借書籍進行續借

管理員

  1. 增加書籍:可直接向資料庫輸入新的書籍資訊
  2. 修改書籍資訊:檢視書籍具體資訊後,可對書籍資訊進行修改
  3. 對學生借還的情況進行檢視

超級管理員

  1. 增加管理員:增加一個新的管理員
  2. 檢視管理員資訊:檢視管理員資訊後,可對其進行修改
  3. 增加學生:增加一個新的學生使用者
  4. 檢視學生資訊:檢視學生資訊後,可對其進行修改

2.BPM模型(這裡我就貼我用PD畫的模型吧)

在這裡插入圖片描述

3.原型(使用Axure)

嗯我畫的很粗略就隨便看看好了,和最後實現的介面佈局也差很多
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

4.資料庫設計(CDM->LDM->PDM->SQL)

表有book、student、administrator、superadministrator、borrow、reserve

create table book(
bno varchar(10),
bname varchar(30),
bAuthor varchar
(20), bnum int, primary key(bno) ); create table student( ID varchar(10) , PASSWORD varchar(10), primary key(ID) ); create table administrator( ID varchar(10), PASSWORD varchar(10), primary key(ID) ); create table superadministrator( ID varchar(10), PASSWORD varchar(10), primary key(ID) ); create table book_borrow( ID varchar(10), bno varchar(10), primary key(ID,bno), foreign key(ID) references student(ID) on delete cascade, foreign key(bno) references book(bno) on delete cascade); create table reserve ( bno varchar(10), ID varchar(10), primary key(bno,ID), foreign key(bno) references book(bno) on delete cascade, foreign key(ID) references student(ID) on delete cascade);
以下是一些插入資料
insert into book values
('100001','C++ Primer','Stanley B. Lippman',100),
('100002','Database System Concepts','Avi Silberschatz',100),
('100003','資料結構演算法與應用C++語言描述','Sartaj Sahni',100),
('100004','資料庫系統概論','王珊',100),
('100005','資料結構C語言版','嚴蔚敏',100);

insert into student values('1170210042','123456');
insert into administrator values('leslie','123456');
insert into superadministrator values('leslie5','123456');

insert into book_borrow values('1170210042','100001');

insert into reserve values (100004,1170210042);

5.Qt實現

1.連線mysql資料庫

請安裝32位MySQL以及32位Qt5.2以上版本 我的32位Qt連線不上64位的MySQL
Qt 5.2以上版本已編譯好連線MySQL的驅動,我們就可以偷偷用了嘿嘿
在連線之前,在MySQL安裝目錄將lib資料夾下的 libmysql.dll 檔案拷貝置Qt安裝目錄bin下(我的是C:\QT\Qt5.11.2\5.11.2\mingw53_32\bin)

在這裡注意!在之後編譯的時候請務必選對編譯器版本!!

在這裡插入圖片描述

由於我們放入的是mingw53_32資料夾下,所以在kit套件選擇MinGW編譯!否則會顯示連線失敗!(當然你可以選擇放在其他目錄下選擇其他套件)

新建一個Qt Widgets Application,修改.pro檔案QT +=sql

測試程式碼:

#include "mainwindow.h"
#include <QApplication>
#include<QSqlDatabase>
#include "book_student.h"
#include<QMessageBox>
#include<QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QTextCodec>
bool creatConnect();
QString MainWindow::u;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    creatConnect();
    MainWindow w;
    w.show();
    return a.exec();
}
bool creatConnect()
{
    QSqlDatabase db= QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setDatabaseName("library");
    db.setUserName("root");
    db.setPassword("123456");

    bool ok = db.open();//建立資料庫連線
    if(!ok)
    {
        QMessageBox::critical(0,QObject::tr("連線資料庫失敗!!!"),db.lastError().text());
        return false;
    }
    else
    {
        QMessageBox::information(0,QObject::tr("Tips"),QObject::tr("連線資料庫成功!!!"));
        return true;
    }
}

將相應的資料改成你的MySQL資料,執行,連線成功會有彈框提示

2.下面貼一下cpp程式碼

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<book_student.h>
#include<QTableWidget>
#include<QSqlQuery>
#include<QSqlRecord>
#include<QDebug>
#include<QMessageBox>
#include<QStandardItemModel>
#include<QTableView>
#include<QString>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("圖書管理系統主視窗");
    ui->PAlineEdit->setEchoMode(QLineEdit::Password);

    MainWindow::student=new book_student(this);
    MainWindow::administrator=new book_administrator(this);
    MainWindow::superadministrator=new book_super_administrator(this);
    MainWindow::brw=new Book_Borrow(this);
    //MainWindow::rsw=new Reserve;


    ui->book_search->setPlaceholderText("請輸入書名");
    ui->tableWidget->setRowCount(100);     //設定行數為10
    ui->tableWidget->setColumnCount(4);   //設定列數為5
    ui->tableWidget->setColumnWidth(1,200);
    ui->tableWidget->setColumnWidth(2,200);
    QStringList header;
    header<<"Book_No"<<"Book_Name"<<"Book_Author"<<"Book_number";
    ui->tableWidget->setHorizontalHeaderLabels(header);
    QSqlQuery query;
    query.exec("select * from book");
    int k=-1;
    while(query.next()){
        ++k;
        for(int i=0;i<4;++i)ui->tableWidget->setItem(k,i,new QTableWidgetItem(query.value(i).toString()));

    }
    //The Sign out
   /* connect(student->Signout,SIGNAL(clicked()),this,SLOT(reshow()));
    connect(administrator->Signout,SIGNAL(clicked()),this,SLOT(reshow()));
    connect(superadministrator->Signout,SIGNAL(clicked()),this,SLOT(reshow()));*/

    //Student's borrow
    connect(student->Borrowed,SIGNAL(clicked()),this,SLOT(create()));


    //admini's book manage
    //connect(administrator->)

    //connect(brw,SIGNAL(sendData(QString)),this,SLOT(receiveData(QString)));


}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QString username=ui->IDlineEdit->text();
    QString userpassword=ui->PAlineEdit->text();
    QSqlQuery query;
    MainWindow::u=username;
    if(ui->radioButton->isChecked()){//student
        query.prepare("select PASSWORD from student where ID=:ll");
        query.bindValue(":ll",username);
        query.exec();
        query.first();
        QString password=query.value(0).toString();
        if(password==userpassword){
            student->exec();
            ui->IDlineEdit->clear();
            ui->PAlineEdit->clear();
        }else{
            QMessageBox::warning(this,"錯誤","使用者名稱或密碼錯誤!","確定");
        }
    }
    else if(ui->radioButton_2->isChecked()){//administrator
        query.prepare("select PASSWORD from administrator where ID=:ll");
        query.bindValue(":ll",username);
        query.exec();
        query.first();
        QString password=query.value(0).toString();
        if(password==userpassword){
            administrator->exec();
            ui->IDlineEdit->clear();
            ui->PAlineEdit->clear();
        }else{
           QMessageBox::warning(this,"錯誤","使用者名稱或密碼錯誤!","確定");
        }
    }
    else if(ui->radioButton_3->isChecked()){//superadministrator
        query.prepare("select PASSWORD from superadministrator where ID=:ll");
        query.bindValue(":ll",username);
        query.exec();
        query.first();
        QString password=query.value(0).toString();
        if(password==userpassword){
            superadministrator->exec();
            ui->IDlineEdit->clear();
            ui->PAlineEdit->clear();
        }else{
            QMessageBox::warning(this,"錯誤","使用者名稱或密碼錯誤!","確定");
        }
    }
}
void MainWindow::on_search_button_clicked()
{
    QString book_name=ui->book_search->text();
    QSqlQuery query;
    /*if(book_name.length()==0){QMessageBox::warning(this,"錯誤","請輸入書名!","確定");return;}*/
    ui->tableWidget->clearContents();
    query.prepare("select * from book where bname like :ll");
    query.bindValue(":ll","%"+book_name+"%");//模糊查詢
    query.exec();
    int k=-1;
    while(query.next()){
        ++k;
        for(int i=0;i<4;++i)ui->tableWidget->setItem(k,i,new QTableWidgetItem(query.value(i).toString()));
    }
    ui->book_search->clear();
}
void MainWindow::reshow(){
    this->show();
}
void MainWindow::create(){
    QSqlQuery query;
    QStandardItemModel *model=new QStandardItemModel();
    //brw->table=new QTableView();
    model->setColumnCount(1);
    model->setHeaderData(0,Qt::Horizontal,"book_name");
    query.prepare("select bname from book where bno in (select bno from book_borrow where ID=:ll)");
    query.bindValue(":ll",MainWindow::u);
    query.exec();
    int k=-1;
    while(query.next()){
        ++k;
        model->setItem(k,new QStandardItem(query.value(0).toString()));
    }
    brw->table->setModel(model);
    brw->table->setColumnWidth(0,200);
    brw->setWindowTitle("您已借");
    brw->exec();
}
/*void MainWindow::receiveData(QString data){
    ui->lineEdit->setText(data);
}
*/

book_student.cpp

#include "book_student.h"
#include "ui_book_student.h"
#include<QMessageBox>
#include"mainwindow.h"
#include<QTableView>
#include<QStandardItemModel>
#include<QDebug>
#include<QString>
book_student::book_student(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::book_student)
{
    ui->setupUi(this);
    book_student::rsw=new Reserve(this);
    this->setWindowTitle("學生");
    this->Signout=ui->pushButton;
    this->Borrowed=ui->pushButton_3;
    this->reserve=ui->pushButton_2;
}

book_student::~book_student()
{
    delete ui;
}
void book_student::on_pushButton_clicked()//sign out
{
    this->close();
}

void book_student::on_pushButton_3_clicked()//borrowed
{

}

void book_student::on_pushButton_2_clicked()//reserve

            
           

相關推薦

Qt Project Qt+MySQL實現圖書管理系統

做這個專案之前我沒接觸過Qt 我也沒做過專案,如果貪吃蛇算專案的話。。我只是粗略的看完了C++ Primer。。 我是照著一篇SQL+JAVA的思路合著Qt快速上手完成的專案合著老師的要求 1.需求分析 1.1使用者需求 面向三類使用者:超級管理員、管理員、學生 超級管理員可對學生、

Python+PyQt5+MySQL 實現天氣管理系統

在本篇部落格中,我利用Python語言其編寫介面庫PyQt5,然後通過連線MySQL資料庫,實現了一個簡單的天氣管理小系統,該系統包含簡單的增刪查改四個主要功能。本文旨在解析實現的程式,能夠讓讀者快速瞭解PyQt5圖形介面庫,然後可以初步實現這樣一個小的系統程式。 PyQt

Node操作MongoDB並與express結合實現圖書管理系統

Node操作MongoDB資料庫 原文連結:http://www.xingxin.me/ Web應用離不開資料庫的操作,我們將陸續瞭解Node操作MongoDB與MySQL這是兩個具有代表性的資料庫,非關係型資料庫(NoSQL)及關係型資料庫(SQL)。這一節,我們主要了解node中使用MongoD

資料結構課設--用B樹實現圖書管理系統

      此文章是分享一下上學期資料結構課程的課程設計,我選擇的是以B樹為資料結構,開發一個圖書管理系統,B樹的優點在於查詢快,增刪結點相對於連結串列或者順序表效率更好,因此用來儲存大量圖書資訊更加合適。(開發環境為:vs2015) 如需要完整工程檔案、說明文件以及可執

Java swing實現圖書管理系統(高階版)

大家好,今天給大家演示一下由Java swing實現的圖書管理系統,此前給大家演示過一個版本,這個版本作為升級版,比上一個版本功能複雜了不少,這個版本環境還是跟上一個一樣,jdk版本不限,資料庫為mysql,可匯入到eclipse或myeclipse裡執行,下面我們來演示執行

手把手教你做jsp servlet mysql實現圖書管理系統附帶視訊開發教程和完整原始碼

上一個教程我們做的是對資料庫框架底層原理的講解,然後教大家做了一個自己的資料庫框架,這次我們做的這個圖書管理系統就是用我們上個教程自己寫的資料庫框架,整個專案做完框架執行的很穩定,沒有出現任何問題。如果你還沒有學習我們的那個資料庫框架教程的話我建議你還是先去學習那個資料庫框架的教程,地址是:ht

圖書管理系統總結——統計圖實現

多少 election stat 定義變量 解決 格式 exception als fin JAVA的JFreeChar提供了繪制各種與統計有關的圖形,比如直方圖,折線圖,餅圖等,而且有各種樣式。這裏只是應用了最簡單的繪制,沒有什麽炫酷的修飾。 一、餅狀圖: 實現餅狀圖的

jsp497(CS)小型書店圖書管理系統mysql

jsp 圖書 畢業設計 轉載於www.xmqbysj.com 作者 QQ 97095639 技術實現 開發語言:jsp.框架:MVC.模式:C/S.數據庫:mysql.開發工具:myeclipse eclipse.論文字數:1萬左右. 畢業設

圖書管理系統 [c語言實現] [全部代碼]

要求 不解釋 height next malloc 管理 stdin fflush ext 直接上代碼不解釋 #include <stdio.h> #include <stdlib.h> #include <string.h>

c語言小項目-使用mysql數據庫的圖書管理系統

ble n) 工具 author 是否 錄取 sql mysql window 行數據 VS2013通過MySQL方式連接到MySQL MySQL官網上C++的API有兩個。一個是很成熟的mysql++,另一個是MySQL Connector/C++,近兩年才出的,

java圖書管理系統實現

題目:編寫java程式碼,實現對圖書的管理,包括增刪改查、借閱及歸還。 實現程式碼如下: import java.util.Scanner; public class BookTest { public static void main(String[] args) { Sca

Java網上書店(圖書)管理系統的設計與實現

網上書店管理系統功能模組劃分 根據需求分析與系統功能設計目標,結合實際情況本系統功能模組設計分為如下幾個模組: 1.主頁:在這裡我們可以看見本系統的主要功能和資訊。 2.使用者註冊:在這裡我們可以註冊我們的基本資訊,其中電話和Email是比較重要的,因為我們需要對這些資訊進

[原始碼和文件分享]基於C#和SQL SERVER資料庫實現的學生圖書管理系統

1 專案介紹 1.1 課程設計的目標 通過課程集中實踐,要求學生加深對講授內容的理解,累積經驗、學會獨立上機除錯程式;並且逐步達到綜合運用封裝、繼承和多型等C#難點知識,更深地理解面向物件程式設計的基本概念與方法,從而學會利用C#語言解決一般應用問題,能設利用視覺化程式設計技術開發複雜和綜合

flask實現簡單的圖書管理系統

簡單的圖書管理系統 實現功能: 圖書管理系統: 實現圖書和作者的新增功能 實現動態查詢顯示圖書資訊 實現刪除功能 1.建立作者和書籍模型 # 作者表 class Author(db.Model): __tablename__ = "autho

[原始碼和文件分享]基於C語言和SQL SERVER資料庫實現圖書管理系統

摘 要 本文根據《資料庫應用系統設計》課程要求而做。選擇圖書館管理系統設計與開發是因為覺得圖書館管理系統對我們的幫助很大,並且經常去圖書館,對圖書館的大部分功能及流程還是比較瞭解,而且現在有些地方可能還不夠完善。這次課程設計目標是建立一個比較好的圖書館管理系統,方便學生查詢,方便管理員管理,節省

大學生都經歷過的圖書管理系統Mysql+MyEclipse+Struts2+Hibernate)--附帶原始碼喲!

圖書管理系統(Mysql+MyEclipse+Struts2+Hibernate) 1、資料庫與資料表的設計 1.1設計資料表(由於操作失誤資料表重構略有差異)     1. 讀者類別表(tb_reader_type) 序號

mysql資料庫程式實現班級管理系統(GradeMangerSystem_MVC_V1.1)及mvc分層

 MVC軟體架構模式: view檢視層:負責與使用者進行互動,介面顯示 model模型層:業務處理,持久儲存資料 contrl控制層:負責接收介面資料組裝傳給model處理,獲取model層顯示到介面。 bean類表示java實體: 1.所有屬性私有化, 2.每個屬性對應公

### 製作簡單的圖書管理系統 實現新增圖書 顯示新增的圖書 根據圖書名查詢圖書 刪除圖書

//1.建立一個AfConsole類package BookManagementSystem;import java.io.BufferedReader;import java.io.InputStreamReader;public class AfConsole{Buffe

圖書管理系統(Java + MySQL

(完整程式碼+實訓報告): https://download.csdn.net/download/qq_35793285/10896342 (完整程式碼):   https://pan.baidu.com/s/1B0kV-_nCQ4MkRmPclqaK7A 提取碼

基於RFID的簡易圖書管理系統設計與實現

  本次開發主要做了從串列埠分別獲取讀者卡號和圖書卡號,實現圖書管理,圖書借閱,讀者管理等功能。開發語言是C#,開發環境使用Visual Studio 2015。資料庫採用sql Server。   RFID選擇   讀者卡跟圖書卡均採用125K,一般稱之為低頻卡,典型的