C++代码,答辩用(栈)

供货信息管理系统,要能够用qt运行,麻烦大家了,有偿,谢谢各位。

img

img

望采纳!!!


Product::Product()
{
num=NULL;
price=NULL;
sell=NULL;
total=0;
}/*对数据成员进行初始化。
将商品种类初始化为0.将其余的指针成员初给化为空指针。

Product::Product (int *_num,double *_price,int _total):total(_total)
{
num=new int[total];
price=new double[total];
sell=new int[total];
for(int i=0;i<total;++i)
{
num[i]=_num[i];
price[i]=_price[i];
sell[i]=0;
}
}
对数据成员进行初始化。利用参数提供的商品种类对商品种类成员进行初始化。根据商品种类为其余指针成员开辟堆空间,并根据提供的形参对其进行初始化。

Product::Product(const Product &prod):total(prod.total)
{
num =new int[total];
price=new double[total];
sell=new int[total];
for(int i=0;i<total;++i)
{
num[i]=num[i];
price[i]=price[i];
sell[i]=0;
}
}
对数据成员进行初始化。利用参数提供的商品种类对商品种类成员进行初始化。根据商品种类为其余指针成员开辟堆空间,并根据提供的形参对其进行初始化。

void Product::input(int _total)
{
total=_total;
num=new int[total];
price=new double[total];
sell=new int[total];
for(int i=0;i<total;++i)
{
cout<<“输入第”<<i+1<<“种商品的信息(数量,价格):”;
cin>>num[i]>>price[i];
sell[i]=0;
}
}
利用参数提供的商品种类值对商品种类成员进行初始化,并根据商品种类为指针成员开辟堆空间。根据商品的种类依次输人每种商品的信息,信息包括:商品数量和商品价格。通过循环语句,每次循环输人一种商品的信息。

void Product::output()const
{
for(int i=0;i<total;++i)
cout<<"[商品"<<i+1<<"]库存量:"<<num[i]<<",价格:"<<price[i]<<",销量:"<<sell[i]<<endl;
}
根据商品种类依次输出每种商品的信息信息包括:商品库存量,商品价格和商品销量。

通过循环语句,每次循环输出一种商品的信息。

void Product::sale()
{
cout<<“请输入商品编号(1-”<<total<<")和销售数量(>0):";
int product,n;
cin>>product>>n;
if(n>num[product-1])
cout<<“商品”<<product<<“库存不足”<<endl;
else
{
num[product-1]-=n;
sell[product-1]+=n;
cout<<“商品”<<product<<“销售成功”<<endl;
}
}
需要对输人的商品编号和销售数量进行合法性检测,当输入数据合法时再根据具体的商品编号和销售数量对某种商品进行销售。此外,只有在某种商品的库存量能够满足销售数量的需求时,才能对该商品进行销售。

void Product::stock(int total)
{
cout<<“请输入商品编号(1-”<<total<<")和销售数量(>0):";
int product,n;
cin>>product>>n;
if(n<0)
cout<<“进货数量不能为负值!”<<endl;
else
{
num[product-1]+=n;
cout<<“商品”<<product<<“进货成功!”<<endl;
}
}
需要对输入的商品编号和进货数量进行合法性检测,当输人数据合法时再根据具体的商品编号和进货数量对某种商品进行进货。

void Product::lack()const
{
for(int i=0;i<total;++i)
if(num[i]==0)
cout<<“商品”<<i+1<<“库存不足 !”<<endl;
}
依次对每种商品的库存量进行检测,并输出所有库存量为0的商品。通过循环语句,每次循环检测种商品的库存量。

double Product::statistics ()const
{
double sum=0.0;
for(int i=0;i<total;++i)
{
cout<<“商品”<<i+1<<“营业额(元):”<<price[i]*sell[i]<<endl;
sum+=price[i]*sell[i];
}
return sum;
}
依次对每种商品的营业额进行统计,并输出该商品的营业额统计结果。商品营业额计算公式为:商品价格X商品销售量。通过循环语句,每次循环统计一种商品的营业额,并将其叠加到总营业额上。

void Product::minmaxAmount()const
{
int max_amount,min_amount;
max_amount=sell[0];
min_amount=sell[0];
for (int i=1;i<total;++i)
{
if(sell[i]>max_amount)
max_amount=sell[i];
if(sell[i]<min_amount)
min_amount=sell[i];
}
}
依次将其余商品的销售量与最高销量和最低销量进行比较,若该商品的销售量大于最高销量,则将最高销量设置成该商品的销售量;另外,若该商品的销售量小于最低销量,则将最低销量设置成该商品的销售量。通过循环语句,每次循环比较一种商品的销售量。

void Product::minmaxIncome()const
{
double max_income,min_income;
max_income=price[0]*sell[0];
min_income=price[0]*sell[0];
for(int i=1;i<total;++i)
{
if(price[i]*sell[i]>max_income)
max_income=price[i]*sell[i];
if(price[i]*sell[i]<min_income)
min_income=price[i]*sell[i];
}
}
依次将其余商品的营业额与最高营业额和最低营业额进行比较,若该商品的营业额大于最高营业额,则将最高营业额设置成该商品的营业额;另外,若该商品的营业额小于最低营业额,则将最低营业额设置成该商品的营业额。通过循环语句,每次循环比较一种 商品的营业额。

DiscountProduct& DiscountProduct::opertor=(const DiscountProduct &dprod)
{
if(num!=NULL;)
delete []num
if(price!=NULL;)
delete []price;
if(sell!=NULL;)
delete []sell;
if(discount!=NULL;)
delete []discount;
total=prod.total;
num=new int[total];
price=new double[total];
sell=new int[total];
discount=new double[total];
for(int i=0;i<total;++i)
{
num[i]=prod.num[i];
price[i]=prod.price[i];
sell[i]=prod.sell[i];
discount[i]=prod.discount[i];
}
return *this;
}

以下是使用QT创建应用程序主窗口的供货信息管理系统,仅供参考,望采纳,谢谢。

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QMessageBox>
 
#include <stack>
#include <string>
#include <iostream>
 
struct Goods
{
    std::string name;
    std::string production_date;
    int quantity;
};
 
class Shelf
{
public:
    void Push(const Goods &goods)
    {
        stack_.push(goods);
    }
 
    Goods Pop()
    {
        Goods goods = stack_.top();
        stack_.pop();
        return goods;
    }
 
    void Reverse()
    {
        std::stack<Goods> reversed_stack;
        while (!stack_.empty())
        {
            reversed_stack.push(stack_.top());
            stack_.pop();
        }
        stack_ = reversed_stack;
    }
 
    bool Empty() const
    {
        return stack_.empty();
    }
 
    int Size() const
    {
        return stack_.size();
    }
 
private:
    std::stack<Goods> stack_;
};
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)
    {
        // 创建界面元素
        name_edit_ = new QLineEdit;
        QLineEdit *name_edit_;
        QLineEdit *date_edit_;
        QLineEdit *quantity_edit_;
        QPushButton *push_button_;
        QPushButton *pop_button_;
        QPushButton *reverse_button_;
        QLabel *label_;
        Shelf shelf_;
 
    public:
        MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)
        {
            // 创建界面元素
            name_edit_ = new QLineEdit;
            date_edit_ = new QLineEdit;
            quantity_edit_ = new QLineEdit;
            push_button_ = new QPushButton("上货");
            pop_button_ = new QPushButton("取货");
            reverse_button_ = new QPushButton("倒货架");
            label_ = new QLabel;
            // 创建布局
            QVBoxLayout *left_layout = new QVBoxLayout;
            left_layout->addWidget(new QLabel("商品名称:"));
            left_layout->addWidget(name_edit_);
            left_layout->addWidget(new QLabel("生产日期:"));
            left_layout->addWidget(date_edit_);
            left_layout->addWidget(new QLabel("数量:"));
            left_layout->addWidget(quantity_edit_);
 
            QVBoxLayout *right_layout = new QVBoxLayout;
            right_layout->addWidget(push_button_);
            right_layout->addWidget(pop_button_);
            right_layout->addWidget(reverse_button_);
 
            QHBoxLayout *main_layout = new QHBoxLayout;
            main_layout->addLayout(left_layout);
            main_layout->addLayout(right_layout);
            main_layout->addWidget(label_);
 
            // 创建中心部件并设置布局
            QWidget *central_widget = new QWidget;
            central_widget->setLayout(main_layout);
            setCentralWidget(central_widget);
 
            // 连接信号和槽
            connect(push_button_, &QPushButton::clicked, this, &MainWindow::OnPush);
            connect(pop_button_, &QPushButton::clicked, this, &MainWindow::OnPop);
            connect(reverse_button_, &QPushButton::clicked, this, &MainWindow::OnReverse);
 
            // 设置窗口属性
            setWindowTitle("货架管理系统");
            resize(640, 480);
        }
    private slots:
        void OnPush()
        {
            // 获取输入的信息
            QString name = name_edit_->text();
            QString date = date_edit_->text();
            int quantity = quantity_edit_->text().toInt();
            // 上货
            shelf_.Push({name.toStdString(), date.toStdString(), quantity});
 
            // 清空输入框
            name_edit_->clear();
            date_edit_->clear();
            quantity_edit_->clear();
        }
 
        void OnPop()
        {
            if (shelf_.Empty())
            {
                QMessageBox::warning(this, "错误", "货架已经没有商品了!");
                return;
            }
 
            // 取货
            Goods goods = shelf_.Pop();
            label_->setText(QString("取货:%1 %2 %3").arg(goods.name.c_str()).arg(goods.production_date.c_str()).arg(goods.quantity));
        }
 
        void OnReverse()
        {
            // 倒货架
            shelf_.Reverse();
        }
    };
 
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        MainWindow window;
        window.show();
 
        return app.exec();
}