日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

基于C++和QT开发的校园超市库存物资管理系统

發(fā)布時(shí)間:2023/12/31 c/c++ 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于C++和QT开发的校园超市库存物资管理系统 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

資源下載地址:https://download.csdn.net/download/sheziqiong/85837970
資源下載地址:https://download.csdn.net/download/sheziqiong/85837970

2 應(yīng)用環(huán)境

2.1 硬件環(huán)境

列出運(yùn)行該軟件所需要的硬設(shè)備。說明其中的新型設(shè)備及其專門功能,包括:

  • CPU主頻1.6GHZ以上及內(nèi)存1G以上;
  • 硬盤150G以上;
  • 操作系統(tǒng):windows10
  • 數(shù)據(jù)庫服務(wù)器:Microsoft SQL Server2008
  • 2.2 軟件環(huán)境

    操作系統(tǒng)windows系統(tǒng),數(shù)據(jù)庫管理系統(tǒng):SQL數(shù)據(jù)庫系統(tǒng),QTCreator編譯工具。

    2.3 應(yīng)用環(huán)境

    Windows 10系統(tǒng)

    3 基于UML分析系統(tǒng)功能需求

    3.1 用例圖

    用例圖從用戶角度描述系統(tǒng)功能。該用例圖描述系統(tǒng)的參與者倉庫管理員與系統(tǒng)的登錄、用戶管理、供貨商管理、商品管理、入庫管理、出庫管理、報(bào)表管理等用例之間的關(guān)系。

    系統(tǒng)用例圖入圖1所示:

    圖 1 用例圖

    3.2活動(dòng)圖

    活動(dòng)圖是描述活動(dòng)的順序。此系統(tǒng)的活動(dòng)圖分為:出庫活動(dòng)圖和入庫活動(dòng)圖,它們各自描述了各自與系統(tǒng)進(jìn)行交互的流程操作。

    該出庫活動(dòng)圖描述了倉庫管理員與系統(tǒng)進(jìn)行交互的流程操作。

    出庫活動(dòng)圖如圖2所示:

    圖 2出庫活動(dòng)圖

    該入庫活動(dòng)圖描述了倉庫管理員與系統(tǒng)進(jìn)行交互的流程操作。

    入庫活動(dòng)圖如圖3所示:

    圖3 入庫活動(dòng)圖

    3.3類圖

    類圖是描述類,接口以及它們之間關(guān)系的圖,是一種靜態(tài)模型,顯示了系統(tǒng)中各個(gè)類的靜態(tài)結(jié)構(gòu)。該類圖描述超市庫存管理系統(tǒng)中的相關(guān)類以及各個(gè)類的關(guān)系來描述靜態(tài)視圖,為的是讓開發(fā)人員能夠更加清楚了解組成該系統(tǒng)的結(jié)構(gòu)。

    超市庫存管理系統(tǒng)類圖如圖4所示:

    圖 4 超市庫存管理系統(tǒng)類圖

    3.4 順序圖

    順序圖代表了一個(gè)相互作用,在以時(shí)間為次序的對(duì)象之間的通信集合。

    **出庫順序圖:**該順序圖描繪了倉庫管理員、出庫、數(shù)據(jù)庫之間傳遞消息的時(shí)間順序,以此來表示出庫的行為順序。

    出庫順序圖如圖5所示:

    圖 5出庫順序圖

    **入庫順序圖:**該順序圖描繪了倉庫管理員、入庫、數(shù)據(jù)庫之間傳遞消息的時(shí)間順序,以此來表示入庫的行為順序。

    入庫順序圖如圖6所示:

    圖6 入庫順序圖

    3.6狀態(tài)圖

    狀態(tài)圖主要描述了系統(tǒng)在各個(gè)狀態(tài)之間的轉(zhuǎn)換關(guān)系。在進(jìn)行商品入庫操作時(shí),通過點(diǎn)擊界面上的各個(gè)菜單跳轉(zhuǎn)到各個(gè)不同的頁面,顯示商品的不同狀態(tài),各個(gè)操作執(zhí)行完成之后都可以直接返回到系統(tǒng)操作界面,執(zhí)行其他操作。超市庫存管理系統(tǒng)狀態(tài)圖如圖9所示:

    4 性能需求

    4.1精度

    輸入的數(shù)據(jù)必須符合設(shè)計(jì)的格式要求:

  • 產(chǎn)品數(shù)量必須為正整數(shù);
  • 商品金額屬性,小數(shù)點(diǎn)后面取前兩位。
  • 4.2時(shí)間特性要求

    說明對(duì)于該軟件的時(shí)間特性要求:

  • 響應(yīng)時(shí)間0.1s;
  • 更新處理時(shí)間0.1s;
  • 數(shù)據(jù)的轉(zhuǎn)換和傳送時(shí)間0.1s;
  • 解題時(shí)間;等待的要求0.5s。
  • 要求登陸系統(tǒng)時(shí),系統(tǒng)的響應(yīng)時(shí)間控制在一秒內(nèi),更新的時(shí)間越低越好, 數(shù)據(jù)傳送時(shí)間盡量縮短。

    4.3靈活性

    該系統(tǒng)是以C++語言為背景的,應(yīng)該是可以跨平臺(tái)運(yùn)行的,至于操作系統(tǒng)應(yīng)該也是可以轉(zhuǎn)換在windows操作系統(tǒng)。數(shù)據(jù)庫是SQL Server。

    如果需求發(fā)生某些變化時(shí),該軟件對(duì)這些變化的適應(yīng)能力如下:

  • 操作方面添加部分表單;
  • 運(yùn)行環(huán)境不變;
  • 同其他軟件接口不變;
  • 精度和有效時(shí)限不變;
  • 計(jì)劃的變化或改進(jìn)。
  • 5 系統(tǒng)實(shí)現(xiàn)

    5.1 管理員進(jìn)入系統(tǒng)

    系統(tǒng)里已寫入默認(rèn)管理員,輸入用戶名、密碼,即可進(jìn)入該系統(tǒng)。管理員進(jìn)入系統(tǒng)界面截圖如圖10所示。

    圖10 登錄界面截圖

    bool Mysql::verifyLogin(const QString name,const QString password) {QSqlQuery query;query.exec("select * from [user] where exist = 1");bool chekname=false;bool chekpassword=false;// 打印輸出用戶名和密碼while (query.next()) {qDebug() << query.value(0).toInt()<< query.value(1).toInt()<< query.value(2).toString();if(query.value(1).toInt() ==1 ){chekname = (QString::compare(name,query.value(2).toString(),Qt::CaseSensitive) == 0);chekpassword = (QString::compare(password,query.value(3).toString(),Qt::CaseSensitive) == 0);}else{continue;}if(chekname&&chekpassword){return true;}}return false; }

    5.2注冊(cè)新用戶功能

    管理員進(jìn)入系統(tǒng)后可添加新的用戶或者注冊(cè)新的管理員。注冊(cè)界面截圖如圖11所示:

    圖11注冊(cè)界面截圖

    // 當(dāng)注冊(cè)頁面的注冊(cè)按下 void Register::on_pushButton_login_clicked() {Mysql sql;if(sql.isUid(ui->lineEdit_id->text().toInt())){ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("編號(hào)已存在"));return;}// 用戶名是否存在if(sql.isUname(ui->lineEdit_uname->text())!=-1){ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("用戶名已存在"));return;}// 兩次密碼是否一致if((QString::compare(ui->lineEdit_password->text(),ui->lineEdit_password_2->text(),Qt::CaseSensitive) == 0)){User user;user.setId(ui->lineEdit_id->text().toInt());user.setUname(ui->lineEdit_uname->text());user.setUpassword(ui->lineEdit_password->text());user.setExit(1);int age = ui->lineEdit_age->text().toInt();if(age>0&&age<200){ // 年齡user.setAge(age);}else{ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("年齡錯(cuò)誤"));return;}user.setSex(ui->combo_sex->currentText());user.setTel(ui->lineEdit_tel->text());if(sql.applyAccount(user)){user.printUser();QMessageBox::warning(nullptr, "注意", "用戶創(chuàng)建成功");on_pushButton_clear_clicked();}}else { // 兩次密碼不一樣ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("兩次密碼不一致"));} }

    5.3獲取管理員用戶界面截圖

    倉庫管理員可以獲取用戶管理員界面如圖12所示:

    圖12獲取用戶界面圖

    std::vector<User>* Mysql::getUsers() {std::vector<User> *List = new std::vector<User>;QSqlQuery query;query.exec("select * from [user] where exist = 1");while (query.next()) {User user;user.setId(query.value(0).toInt());user.setExit(query.value(1).toInt());user.setUname(query.value(2).toString());user.setUpassword(query.value(3).toString());user.setSex(query.value(4).toString());user.setAge(query.value(5).toInt());user.setTel(query.value(6).toString());user.setTime(query.value(7).toDateTime());List->push_back(user);}return List; }

    5.4用戶信息模糊查詢界面截圖

    默認(rèn)管理員可以通過模糊信息查詢用戶信息,用戶信息模糊查詢界面如圖13所示:

    圖13模糊查詢界面圖

    5.5商品入庫界面截圖

    管理員進(jìn)入商品入庫界面,選擇供應(yīng)商、輸入商品名稱等一系列信息,并選擇過期時(shí)間。商品入庫界面如圖14所示:

    圖14商品入庫界面圖

    void InForm::on_pushButton_in_clicked() {QString sname = ui->comboBox->currentText();QString catename = ui->comboBox_2->currentText();QString cname = ui->lineEdit->text();int id = sql.getGoodCid(sname,catename,cname);if(id == 0){// 創(chuàng)建商品ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("請(qǐng)先創(chuàng)建新商品"));return ;}int num = ui->spinBox_num->text().toInt();float price = ui->doubleSpinBox_price->text().toFloat();float weight = ui->doubleSpinBox__kg->text().toFloat();if(num <= 0 || price <= 0 || weight <= 0){ui->label_tip->clear();ui->label_tip->setStyleSheet(QString("color:red;"));ui->label_tip->setText(QString("商品數(shù)量、價(jià)格、質(zhì)量不能為零"));return ;}QString selftime = ui->dateTimeEdit->dateTime().toString("yyyy-MM-dd hh:mm:ss");QString tmpSql = QString("INSERT INTO [dbo].[in] ([cid], [price], [time], ""[shelftime], [num], [uid], [weight] )""VALUES""( %1, %2, GETDATE(), '%3', %4, %5, %6 )").arg(id).arg(price).arg(selftime).arg(num).arg(uid).arg(weight);qDebug() << tmpSql;sql.Myexec(tmpSql);QMessageBox::warning(nullptr, "提示", "入庫成功");ui->label_tip->clear(); }

    5.6新建商品信息界面截圖

    管理員進(jìn)入新建商品界面,依次添加信息、選擇商品類別、供應(yīng)商即可成功添加新的商品。新建商品信息界面如圖15所示:

    圖15新建商品信息界面圖

    void CommodityAddForm::on_pushButton_new_clicked() {QString name = ui->lineEdit_cname->text();QString category = ui->comboBox_category->currentText();QString suppliername = ui->comboBox->currentText();if(suppliername.isEmpty()){this->ui->label_tip->setText("請(qǐng)先選擇供應(yīng)商");return;}int sid = sql.SupplierID(suppliername);int maxnum = ui->lineEdit_MAX->text().toInt();int minnum = ui->lineEdit_MIN->text().toInt();QString tmp = QString("INSERT INTO [dbo].[commodity]([cname],"" [sid], [category], [minnum], [maxmun]) ""VALUES ('%1', %2, '%3', %4, %5)").arg(name).arg(sid).arg(category).arg(minnum).arg(maxnum);qDebug() << tmp;sql.Myexec(tmp);suppliercomboBox();QMessageBox::warning(nullptr, "提示", "商品信息創(chuàng)建成功"); }

    5.7獲取供應(yīng)商界面截圖

    進(jìn)入供應(yīng)商界面即可獲取所有的供應(yīng)商信息,輸入供應(yīng)商任一信息即可相對(duì)應(yīng)的供應(yīng)商信息。獲取供應(yīng)商界面如圖16所示:

    圖16獲取供應(yīng)商界面圖**

    std::vector<Supplier> *Mysql::getSupplier(QString name) {std::vector<Supplier> *list = new std::vector<Supplier>;QSqlQuery query;query.exec(QString("select * from [supplier] where exist = 1 and sname LIKE '%%1%'").arg(name));while (query.next()) {Supplier supplier;supplier.setSid(query.value(0).toInt());supplier.setExist(query.value(1).toInt());supplier.setSname(query.value(2).toString());supplier.setAddr(query.value(3).toString());supplier.setTel(query.value(4).toString());list->push_back(supplier);}return list; }

    5.8刪除界面截圖

    點(diǎn)擊刪除供應(yīng)商的任一信息即可刪除該供應(yīng)商對(duì)應(yīng)的所有信息。刪除供應(yīng)商界面如圖17所示:

    圖17刪除供應(yīng)商界面圖

    void SupplierForm::on_pushButton_delete_clicked() {int row = ui->tableView->currentIndex().row();int id = this->model->data(this->model->index(row,0)).toInt();list[size] =id;qDebug() << list[size] << "row = " << row;size++;model->removeRow(ui->tableView->currentIndex().row()); } // 點(diǎn)擊修改供應(yīng)商 void SupplierForm::on_pushButton_alter_clicked() {int row = ui->tableView->currentIndex().row();Supplier supplier;getSupplier(row,supplier);supplier.printSupplier();upadteSupplier(supplier); }

    5.9出庫界面截圖

    管理員進(jìn)入商品出庫界面,選擇供應(yīng)商以及商品類別即可。出庫界面如圖18所示:

    圖18出庫界面圖

    void OutForm::on_pushButton_out_clicked() {int row = ui->tableView->currentIndex().row();int id = this->model->data(this->model->index(row,0)).toInt();int num = this->model->data(this->model->index(row,2)).toInt();int outnum = this->model->data(this->model->index(row,8)).toInt();if(num < outnum){QMessageBox::warning(nullptr, "警告", "出庫數(shù)量超過庫存");this->model->setItem(row, 8,new QStandardItem(QString("")));return;}if(outnum <= 0){QMessageBox::warning(nullptr, "警告", "請(qǐng)輸入出庫數(shù)量");return;}int out = num - outnum;QString tmp = QString("UPDATE [dbo].[in] ""SET [num] = %1 WHERE [iid] = %2").arg(out).arg(id);sql.outgood(id,outnum,uid);qDebug() << tmp;sql.Myexec(tmp);QMessageBox::warning(nullptr, "提示", "出庫成功");on_pushButton_refresh_clicked(); }

    5.10出入庫報(bào)表管理界面截圖

    進(jìn)出入庫界面,在報(bào)表類型下拉框中選擇入庫,在時(shí)間下拉框中選擇時(shí)間段即可導(dǎo)出相應(yīng)的信息。入庫報(bào)表管理界面如圖19所示:

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-sLBrNNHm-1656579241835)(img/Aspose.Words.33957aab-3b25-4d17-ad3a-a8929c155f1d.015.png)]

    圖19入庫報(bào)表管理界面圖

    進(jìn)出入庫界面,在報(bào)表類型下拉框中選擇出庫,在時(shí)間下拉框中選擇時(shí)間段即可導(dǎo)出相應(yīng)的信息。出庫報(bào)表管理界面如圖20所示:

    圖20出庫報(bào)表管理界面圖

    void StatementForm::on_pushButton_refresh_clicked() {QString IO = ui->comboBox->currentText();QString time = ui->comboBox_2->currentText();// 獲取當(dāng)前時(shí)間QDateTime data = QDateTime::currentDateTime();if(QString::compare(time,QString("一天以內(nèi)")) == 0){//data = data.addDays(-1);time = data.toString("yyyy-MM-dd");}else if(QString::compare(time,QString("一個(gè)月內(nèi)"))== 0){data = data.addMonths(-1);time = data.toString("yyyy-MM-dd");}else if(QString::compare(time,QString("一個(gè)季度內(nèi)"))== 0){data = data.addMonths(-3);time = data.toString("yyyy-MM-dd");}else if(QString::compare(time,QString("一年以內(nèi)"))== 0){data = data.addYears(-1);time = data.toString("yyyy-MM-dd");}else{time = QString("");}std::vector<Goods> *Slist;if(QString::compare(IO,QString("入庫")) == 0){initable(1);Slist = sql.getinGoods(time);int i = 0;for(std::vector<Goods>::iterator it=(*Slist).begin();it!=(*Slist).end();it++){/*setItem設(shè)置條目欄中的一個(gè)格子的信息*/setINTable(i,it);i++;}if(Slist!=NULL)delete Slist;Slist = NULL;}else{initable(2);Slist = sql.getoutGoods(time);int i = 0;for(std::vector<Goods>::iterator it=(*Slist).begin();it!=(*Slist).end();it++){/*setItem設(shè)置條目欄中的一個(gè)格子的信息*/setOUTable(i,it);i++;}if(Slist!=NULL)delete Slist;Slist = NULL;}qDebug() << uid << "id id";qDebug() << data.toString("yyyy-MM-dd") << " " << IO ; }

    5.11商品管理界面截圖

    進(jìn)入商品信息管理界面,在供應(yīng)商下拉框中選擇供應(yīng)商,在商品類別下拉框中選擇商品類別即可導(dǎo)出相應(yīng)的信息。商品管理界面如圖21所示:


    圖21商品管理界面圖

    void GoodManangeForm::on_pushButton_find_clicked() {initTable();QString sname = ui->comboBox->currentText();QString catename = ui->comboBox_2->currentText();qDebug() << sname << " " << catename;std::vector<Goods> *Slist = sql.getGoods(sname,catename);int i = 0;for(std::vector<Goods>::iterator it=(*Slist).begin();it!=(*Slist).end();it++){/*setItem設(shè)置條目欄中的一個(gè)格子的信息*/setTable(i,it);i++;}if(Slist!=NULL)delete Slist;Slist = NULL; }

    5.12警告界面截圖

    實(shí)時(shí)更新警告,一分鐘更新一次。

    警告商品過期界面如圖22所示:

    圖22警告商品過期界面圖

    警告商品即將過期界面如圖23所示:

    圖23警告商品即將過期界面圖

    警告商品庫存不足界面如圖24所示:

    圖24警告商品庫存不足界面圖

    警告商品庫存過量界面如圖25所示:

    圖25警告商品庫存過量界面圖

    void WarningForm::settableGoods(int i, std::vector<Goods>::iterator s) {s->printGoods();this->model->setItem(i, 0, new QStandardItem(QString("%1").arg(s->getCid())));this->model->setItem(i, 1, new QStandardItem(QString(s->getCname())));this->model->setItem(i, 2, new QStandardItem(QString("%1").arg(s->getNum())));this->model->setItem(i, 3, new QStandardItem(QString(s->getCategory())));this->model->setItem(i, 4, new QStandardItem(QString(s->getSnmae())));this->model->setItem(i, 5, new QStandardItem(QString(s->getAddr())));this->model->setItem(i, 6, new QStandardItem(QString(s->getTel()))); } void WarningForm::Overdue() {ui->label->clear();ui->label->setText(QString("警告商品過期"));std::vector<Goods> goodlist = getgoods();int i = 0;for(std::vector<Goods>::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem設(shè)置條目欄中的一個(gè)格子的信息*/settable(i,it);i++;} }void WarningForm::Expiring() {ui->label->clear();ui->label->setText(QString("警告商品即將過期"));std::vector<Goods> goodlist = getExpiringgoods();int i = 0;for(std::vector<Goods>::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem設(shè)置條目欄中的一個(gè)格子的信息*/settable(i,it);i++;} }void WarningForm::lack() {ui->label->clear();ui->label->setText(QString("警告商品庫存不足"));std::vector<Goods> goodlist = getlackgoods();int i = 0;for(std::vector<Goods>::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem設(shè)置條目欄中的一個(gè)格子的信息*/settableGoods(i,it);i++;} }void WarningForm::nimiety() {ui->label->clear();ui->label->setText(QString("警告商品庫存過量"));std::vector<Goods> goodlist = getnimietygoods();int i = 0;for(std::vector<Goods>::iterator it=goodlist.begin();it!=goodlist.end();it++){/*setItem設(shè)置條目欄中的一個(gè)格子的信息*/settableGoods(i,it);i++;} }bool WarningForm::ifOverdue() {QSqlQuery query;query.exec(QString("SELECT * from goodsin where shelftime < GETDATE()"));query.next();return !query.value(1).toString().isEmpty(); }bool WarningForm::ifExpiring() {QSqlQuery query;query.exec(QString("SELECT * from goodsin where shelftime < GETDATE()+30 and shelftime > GETDATE()"));query.next();return !query.value(1).toString().isEmpty(); }bool WarningForm::iflack() {QSqlQuery query;query.exec(QString("SELECT * from goodsin where num < minnum"));query.next();return !query.value(1).toString().isEmpty(); }bool WarningForm::ifnimiety() {QSqlQuery query;query.exec(QString("SELECT * from goodsin where num > maxmun"));query.next();return !query.value(1).toString().isEmpty(); } ing().isEmpty(); }bool WarningForm::ifExpiring() {QSqlQuery query;query.exec(QString("SELECT * from goodsin where shelftime < GETDATE()+30 and shelftime > GETDATE()"));query.next();return !query.value(1).toString().isEmpty(); }bool WarningForm::iflack() {QSqlQuery query;query.exec(QString("SELECT * from goodsin where num < minnum"));query.next();return !query.value(1).toString().isEmpty(); }bool WarningForm::ifnimiety() {QSqlQuery query;query.exec(QString("SELECT * from goodsin where num > maxmun"));query.next();return !query.value(1).toString().isEmpty(); }

    資源下載地址:https://download.csdn.net/download/sheziqiong/85837970
    資源下載地址:https://download.csdn.net/download/sheziqiong/85837970

    總結(jié)

    以上是生活随笔為你收集整理的基于C++和QT开发的校园超市库存物资管理系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。