模拟超市商品结算系统

要求:全程一个角色(管理员即用户)

(1)需要管理员注册与登录

(2)管理员登录之后,可以进行上架新的商品(商品名称和单价)

(3)管理员登录之后,也可以下架商品

(4)在节假日有优惠活动,可以对其中的一些商品修改相应的单价(价格提高和价格降低都可以)

(5)用户选择需要购买的商品,存放到自己的购物车中

(6)用户结算商品时(清空购物车),计算购物车中的商品的总价

(7)用户也可以移除掉购物车中指定的商品

Supermarket

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QDebug>
#include <QSpinBox>


QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private slots:
    void on_upadre_jiage_clicked();

    void on_shangpin_shagnjia_clicked();

    void on_jiesuan_clicked();

    void on_del_clicked();

    void on_shangpin_xiajia_clicked();

public slots:
    void rece1_fruit(const QString& text);
    void rece1_vagetable(const QString& text);
    void rece1_car(const QString& text);

private:
    Ui::Dialog *ui;

    //实例化
    QSpinBox* update_money = new QSpinBox(this);//更新商品价格自旋框

    QSpinBox* submit_money = new QSpinBox(this);//商家商品价格自旋框

};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

//要求:全程一个角色(管理员即用户)
//(1)可以进行上架新的商品(商品名称和单价)
//(3)也可以下架商品
//(4)在节假日有优惠活动,可以对其中的一些商品修改相应的单价(价格提高和价格降低都可以)
//(5)用户选择需要购买的商品,存放到自己的购物车中
//(6)用户结算商品时(清空购物车),计算购物车中的商品的总价
//(7)用户也可以移除掉购物车中指定的商品


Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);

    //更新商品价格自旋框
    this->update_money->move(480,160);
    this->update_money->resize(100,30);
    //设置更新自旋框显示内容的前缀
    this->update_money->setPrefix("单价:");
    //设置更新自旋框显示内容的后缀
    this->update_money->setSuffix("元");

    //上架商品自旋框
    this->submit_money->move(480,410);
    this->submit_money->resize(100,30);
    //设置更新自旋框显示内容的前缀
    this->submit_money->setPrefix("单价:");
    //设置更新自旋框显示内容的后缀
    this->submit_money->setSuffix("元");


    //绑定商品展示区的水果类、蔬菜类、汽车类的被选中信号
    connect(ui->fruit,SIGNAL(activated(QString)),this,SLOT(rece1_fruit(QString)));
    connect(ui->vagetable,SIGNAL(activated(QString)),this,SLOT(rece1_vagetable(QString)));
    connect(ui->car,SIGNAL(activated(QString)),this,SLOT(rece1_car(QString)));


}

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

//管理员上架下架更新功能区
void Dialog::on_upadre_jiage_clicked()//更新商品价格
{
    //得到更新商品类别
    QString update_leibie = ui->update_leibie->text();
    qDebug()<<update_leibie<<endl;

    //得到更新商品名称
    QString update_shangpin = ui->update_shangpin->text();
    qDebug()<<update_shangpin<<endl;


    //获取更新自旋框显示数值
    int money = this->update_money->value();
    qDebug()<<money<<endl;

    //拼接商品和价格
    QString shangpin = update_shangpin+" "+QString::number(money)+" 元";


    if(update_leibie=="水果类"){

        int num = ui->fruit->count();//获取水果列表中有多少项

        for(int i=0;i<num;i++){//循环遍历出列表项

            QString wupin = ui->fruit->itemText(i);//取出商品列表项的内容
            QStringList shangpin_list = wupin.split(" ");//以空格分割字符串
            QString shangpin_ = shangpin_list[0];//取出商品名称

            //检验商品
            if(update_shangpin == shangpin_){
                int index = ui->fruit->findText(wupin);//找到这个商品的下标
                ui->fruit->setItemText(index,shangpin);//更新
            }

        }

    }else if(update_leibie=="蔬菜类"){

        int num = ui->vagetable->count();//获取水果列表中有多少项

        for(int i=0;i<num;i++){//循环遍历出列表项

            QString wupin = ui->vagetable->itemText(i);//取出商品列表项的内容
            QStringList shangpin_list = wupin.split(" ");//以空格分割字符串
            QString shangpin_ = shangpin_list[0];//取出商品名称

            //检验商品
            if(update_shangpin == shangpin_){
                int index = ui->vagetable->findText(wupin);//找到这个商品的下标
                ui->vagetable->setItemText(index,shangpin);//更新
            }

        }

    }else if(update_leibie=="汽车类"){
        int num = ui->car->count();//获取水果列表中有多少项

        for(int i=0;i<num;i++){//循环遍历出列表项

            QString wupin = ui->car->itemText(i);//取出商品列表项的内容
            QStringList shangpin_list = wupin.split(" ");//以空格分割字符串
            QString shangpin_ = shangpin_list[0];//取出商品名称

            //检验商品
            if(update_shangpin == shangpin_){
                int index = ui->car->findText(wupin);//找到这个商品的下标
                ui->car->setItemText(index,shangpin);//更新
            }

        }

    }

}

void Dialog::on_shangpin_shagnjia_clicked()//上架商品价格
{
    //得到上架商品类别
    QString submit_leibie = ui->submit_leibie->text();
    qDebug()<<submit_leibie<<endl;

    //得到上架商品名称
    QString submit_shangpin = ui->submit_shangpin->text();
    qDebug()<<submit_shangpin<<endl;


    //获取更新自旋框显示数值
    int money = this->submit_money->value();
    qDebug()<<money<<endl;

    //拼接商品和价格
    QString shangpin = submit_shangpin+" "+QString::number(money)+" 元";

    //将商品类别,名称,单价获得后,存入商品展示区
    if(submit_leibie=="水果类"){

        ui->fruit->addItem(shangpin);//将商品添加进组合框

    }else if(submit_leibie=="蔬菜类"){

        ui->vagetable->addItem(shangpin);

    }else if(submit_leibie=="汽车类"){

        ui->car->addItem(shangpin);

    }

}

//管理员下架商品
void Dialog::on_shangpin_xiajia_clicked()
{
    //得到上架商品类别
    QString xiajia_leibie = ui->xiajia_leibie->text();
    qDebug()<<xiajia_leibie<<endl;

    //得到上架商品名称
    QString xiajia_shangpin = ui->xiajia_shangpin->text();
    qDebug()<<xiajia_shangpin<<endl;

    //下架商品展示区的商品
    if(xiajia_leibie=="水果类"){

        int num = ui->fruit->count();//获取水果列表中有多少项

        for(int i=0;i<num;i++){//循环遍历出列表项

            QString wupin = ui->fruit->itemText(i);//取出商品列表项的内容
            QStringList shangpin = wupin.split(" ");//以空格分割字符串
            QString xiajia_ = shangpin[0];//取出商品名称

            //检验商品
            if(xiajia_shangpin == xiajia_){
                int index = ui->fruit->findText(wupin);//找到这个商品的下标
                ui->fruit->removeItem(index);//移除
            }

        }

    }else if(xiajia_leibie=="蔬菜类"){

        int num = ui->vagetable->count();//获取蔬菜列表中有多少项

        for(int i=0;i<num;i++){//循环遍历出列表项

            QString wupin = ui->vagetable->itemText(i);//取出商品列表项的内容
            QStringList shangpin = wupin.split(" ");//以空格分割字符串
            QString xiajia_ = shangpin[0];//取出商品名称

            //检验商品
            if(xiajia_shangpin == xiajia_){
                int index = ui->vagetable->findText(wupin);//找到这个商品的下标
                ui->vagetable->removeItem(index);//移除
            }

        }

    }else if(xiajia_leibie=="汽车类"){

        int num = ui->car->count();//获取蔬菜列表中有多少项

        for(int i=0;i<num;i++){//循环遍历出列表项

            QString wupin = ui->car->itemText(i);//取出商品列表项的内容
            QStringList shangpin = wupin.split(" ");//以空格分割字符串
            QString xiajia_ = shangpin[0];//取出商品名称

            //检验商品
            if(xiajia_shangpin == xiajia_){
                int index = ui->car->findText(wupin);//找到这个商品的下标
                ui->car->removeItem(index);//移除
            }

        }

    }
}


//商品展示区
//当商品展示区的水果类中的商品被选中触发
void Dialog::rece1_fruit(const QString &text){

    qDebug()<<text<<endl;

    //将选中的商品添加金用户的商品列表
    ui->user_shop->addItem(text);

}
//当商品展示区的蔬菜类中的商品被选中触发
void Dialog::rece1_vagetable(const QString &text){

    qDebug()<<text<<endl;
    //将选中的商品添加金用户的商品列表
    ui->user_shop->addItem(text);

}
//当商品展示区的汽车类中的商品被选中触发
void Dialog::rece1_car(const QString &text){

    qDebug()<<text<<endl;
    //将选中的商品添加金用户的商品列表
    ui->user_shop->addItem(text);

}




//结算功能
void Dialog::on_jiesuan_clicked()
{
    int sum = 0;
    int num = ui->user_shop->count();//获取用户商品列表中有多少项

    for(int i=0;i<num;i++){//循环遍历出列表项

        QString wupin = ui->user_shop->itemText(i);//取出用户商品列表项的内容
        QStringList shangpin = wupin.split(" ");//以空格分割字符串
        int money = shangpin[1].toInt();//取出商品价格

        sum+=money;//总价

    }

    ui->zongjia->setText(QString::number(sum));//QString::number(sum)转为字符串
    ui->user_shop->clear();
}

//删除用户商品列表里的项功能
void Dialog::on_del_clicked()
{
    int index = ui->user_shop->currentIndex();
    ui->user_shop->removeItem(index);
}





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310466.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript中alter、confrim、prompt的区别及使用

文章目录 一、alter1.什么是alert&#xff1f;2.alter的使用 二、confrim1.什么是confrim&#xff1f;2.confrim的使用 三、prompt1.什么是prompt&#xff1f;2.prompt的使用 四、总结alter、confrim、prompt的区别 一、alter 1.什么是alert&#xff1f; 在JavaScript中&…

在线问卷调查的优势:提升数据收集与分析效率的关键要素

无论是在工作中还是学习中&#xff0c;我们经常会使用问卷调查法来解决一些问题。不过&#xff0c;问卷调查有两种形式——线上和线下&#xff0c;这两者之间有什么优势和不足呢&#xff1f; 纸质问卷&#xff1a; 1、优势&#xff1a; 我们在使用纸质问卷的时候&#xff0c;通…

如何在Win10电脑接收苹果手机日程提醒呢?

有很多小伙伴手机使用的是iPhone苹果手机&#xff0c;但办公电脑使用的win10系统的电脑&#xff0c;这时候如果想要在win10电脑上同步接收苹果手机上设置的日程提醒&#xff0c;该怎么操作呢&#xff1f;如何在win10电脑接收苹果手机日程提醒呢&#xff1f; 如果你设置的日程提…

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行

目录 1. &#x1f959;collect_list: 聚合-不去重 2. &#x1f959;collect_set(col): 聚合-去重 3. &#x1f959;mysql的聚合函数-group_concat 4. leetcode练习题 1. &#x1f959;collect_list: 聚合-不去重 将组内的元素收集成数组 不会去重 2. &#x1f959;collec…

C++指针小练习

双色球统计1-33个数字出现的次数(很详细) 做这个题一定要注意审题:题目要求是统计1-33个数字出现的次数,而不是前六个数字出现的次数 算法设计: ①:用一个数组p1来保存每一行的数据,再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0, ②…

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】 1.MySQL和MybatisPlus简介2.maven依赖3.配置1.在application.yaml配置中加入mysql配置2.新增Mybatis-Plus配置类 4.参考文章 1.MySQL和MybatisPlus简介 MySQL是一种开源的关系型数据库管理系统&#xff0c;被广泛应用…

linux中出现不在 sudoers 文件中。此事将被报告的解决方法

出现如下提示gaokaoli 出现不在 sudoers 文件中。此事将被报告 一般是该用户 权限不够 既然知道权限不够可以添加到root用户组&#xff0c;获取权限即可 通过命令行添加到权限&#xff0c;发现还是不行 sudo usermod -g root gaokaoli 那就直接在配置文件中修改 通过执行vi…

中级Python面试问题

文章目录 专栏导读1、xrange 和 range 函数有什么区别&#xff1f;2、什么是字典理解&#xff1f;举个例子3、元组理解吗&#xff1f;如果是&#xff0c;怎么做&#xff0c;如果不是&#xff0c;为什么&#xff1f;4、 列表和元组的区别&#xff1f;5、浅拷贝和深拷贝有什么区别…

TS 36.331 V12.0.0-过程(2)-连接控制(1)-RRC连接建立

​本文的内容主要涉及TS 36.331&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

TinyLog iOS v3.0接入文档

1.背景 为在线教育部提供高效、安全、易用的日志组件。 2.功能介绍 2.1 日志格式化 目前输出的日志格式如下&#xff1a; 日志级别/[YYYY-MM-DD HH:MM:SS MS] TinyLog-Tag: |线程| 代码文件名:行数|函数名|日志输出内容触发flush到文件的时机&#xff1a; 每15分钟定时触发…

TortoiseSVN·文件锁定与清理

安装 TortoiseSVN 的时候&#xff0c;选择 svn 命令可用, 选择 will be intalled on local hard drive 。 在锁定的文件夹内 cmd 进入终端&#xff0c;输入 find . -type f -name ".svn/lock" -exec rm -f {} \; 删除所有锁定文件。进行清理操作&#xff1a;svn clea…

一、数据结构基本概念

数据结构基本概念 一、数据结构基本概念1.基本概念和术语1.1数据&#xff08;Data&#xff09;1.2 数据元素&#xff08;Data element&#xff09;1.3 数据项 &#xff08;Data Item&#xff09;1.4 数据对象 &#xff08;Data Object&#xff09;1.5 数据结构 &#xff08;Dat…

JS栈和堆:数据是如何存储的

JS栈和堆&#xff1a;数据是如何存储的 背景JavaScript 是什么类型的语言JavaScript 的数据类型内存空间栈空间和堆空间再谈闭包 背景 JS有多种数据类型&#xff1a;数字型&#xff0c;字符串型&#xff0c;数组型等&#xff0c;虽然 JavaScript 并不需要直接去管理内存&#…

【软件测试】刚入行的测试人,“我“该怎么提升自己技术能力...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 一个问题&#xf…

读《Mixtral of Experts》

摘要 稀疏混合专家&#xff08;SMoE&#xff09; 语言模型Mixtral 8x7B&#xff08;那大概可以理解成他是一个缝合怪&#xff0c;把所有的任务模型缝合到一起&#xff0c;然后有一个类似打分投票的路由机制来针对输入问题选择任务子模型从而得到针对性的结果。&#xff09;。Mi…

PHP短链接url还原成长链接

在开发过程中&#xff0c;碰到了需要校验用户回填的短链接是不是系统所需要的&#xff0c;于是就需要还原找出短链接所对应的长链接。 长链接转短链接 在百度上搜索程序员&#xff0c;跳转页面后的url就是一个长链接。当然你可以从任何地方复制一个长链接过来。 长链接 http…

高效降压控制器FP7132XR:为高亮度LED提供稳定可靠的电源

目录 一. FP7132概述 二. 驱动电路&#xff1a;FP7132 三. FP7132应用 高亮度LED作为新一代照明技术的代表&#xff0c;已经广泛应用于各种领域。然而&#xff0c;高亮度LED的工作电压较低&#xff0c;需要一个高效降压控制器来为其提供稳定可靠的电源。在众多降压控制器…

ubuntu20.04 扩大交换空间swap

检查当前swap情况 free -msudo swapon --show关闭现有的swap sudo swapoff -a创建一个新的swap文件 sudo fallocate -l 32G /swapfile设定正确的权限 sudo chmod 600 /swapfile下面这个指令会把我们的空间变成可用的swap空间 sudo mkswap /swapfile启用swap文件 sudo swa…

电源模块常见温升测试方法分享 -纳米软件

温升测试是电器产品安规测试项目之一&#xff0c;是为了检测电器产品及部件的温度变化情况&#xff0c;判断是否符合要求。在设备运行过程中会释放一定的热量&#xff0c;如果内部温度过高会影响产品的性能和稳定性&#xff0c;导致绝缘性能下降&#xff0c;因此温升测试是确保…

【LangChain学习之旅】—(4) 模型I/O:输入提示、调用模型、解析输出

【LangChain学习之旅】—&#xff08;4&#xff09; 模型I/O&#xff1a;输入提示、调用模型、解析输出 Model I/OLangChain 中提示模板的构建语言模型为什么选择langchain输出解析总结 Reference&#xff1a;LangChain 实战课 Model I/O 我们可以把对模型的使用过程拆解成三块…