gpt4 book ai didi

c++ - 条码文件读取C++

转载 作者:行者123 更新时间:2023-11-30 05:36:49 26 4
gpt4 key购买 nike

论坛。在上周分配的实验室里,我呆了几天。本来应该是一个实验室,我们将为用作POS(销售点)系统的程序编写代码,使用户可以将物品放入购物车,并在结帐时显示订购的每个物品,价格,数量和总计。

这是分配要求的更详细列表,因此您可以了解整个情况:

  • 除文件名外,此实验室中没有任何全局变量或全局常量。
  • 您的程序必须读取存储在文件LabData.txt中的 list 数据,并将数据加载到4个单独的 vector 中:
  • 条形码
  • 的1个 vector
  • b。 1个 vector ,用于产品说明
  • c。 1 vector (可用数量)(库存)
  • d。单价1个 vector (必须包含2个小数的价格
    从文件中读取的位置)不使用 vector 将为您赚取零
    对于本实验室。这些是并行 vector 。
  • 当前提供的数据文件有4个项目。文件格式为:条形码,项目描述,库存数量和
    单价您必须在要使用的文件中再添加2个项目。用
    在您的家庭中发现的真实物品,以便存储真实条形码和
    产品名称。您可以确定价格和可用数量。
    创建数据时,请使用此网站测试您是否有效
    条形码:http://www.searchupc.com您的文件必须包含6个项目。
    但是请记住,您的程序将使用以下文件进行测试:
    可以包含更少或更多的项目,因此请勿将您的程序限制为
    具体数量的项目。
  • 创建一个名为ReadDataFile的函数,该函数从文件中读取数据
    并将数据存储在 vector 中。数据文件必须从C:\temp\。您可以通过任何方式为此功能指定原型(prototype)
    对您来说很有意义,但必须至少包含两个参数。该功能
    应该从main调用,以将数据加载到 vector 中。
  • 在主目录中,提示用户输入他/她想要的商品的条形码(或名称)
    购买(确定一个用户友好的提示)。你必须只有一个cin
    为此,您的程序必须知道条形码或项目名称是否为
    进入并据此进行操作。强烈推荐(但是不推荐
    需要),您编写了单独的函数来处理以下某些问题
    场景:
  • 如果该项目不在项目列表中,则显示错误消息,然后
    允许用户继续购物。
  • b。如果所需项目在列表中,请提示如何
    许多用户想要购买并验证您是否有足够的单位
    库存出售,否则显示适当的错误消息。
  • c。如果有足够的库存单位,请减少数量
    从 vector 中可用的数量购买并添加条形码
    购买到购物车的商品和数量。您可以使用任何
    您希望存储购物车数据的数据结构。记住
    该程序将购物车打印到屏幕上
    完成并且用户没有固定数量的项目
    采购。
  • d。用户可能想购买更多单位的商品
    已购买(已经在购物车中)。在这种情况下,您的程序
    应该更新购物车和库存中的数量
    vector 。
  • e。允许用户继续购买商品,直到他/她输入9999作为条形码/商品名称。 9999是结帐的哨兵。当这个
    发生时,显示购物车中存储的物品:
  • 一世条码
  • ii。产品描述
  • iii。数量
  • iv。项目总计(数量*价格)此输出必须由
    调用一个单独的函数。您可以决定功能
    名称,原型(prototype),输出格式等。必须在
    至少一个论点。
  • 用户结帐购物车后,在main中显示总计。
    您可以选择格式和适当的用户友好消息。
  • 记录所有功能
  • 不关闭文件

  • 那就是作业要求。

    现在,我已经为程序制作了 vector ,但是在理解如何获取 vector 以读取文本文件以及使用文本文件的内容来准确获取用户输入的项目时遇到了问题。

    到目前为止,这是我的代码
    void ReadDataFile(vector<string>&, vector <double>&, vector <int>&, vector <string>&);
    int main()
    {
    vector<string>bar_code;
    vector<double>unit_price;
    vector<int>inventory_quantity;
    vector<string>item_description;

    ReadDataFile(bar_code, unit_price, inventory_quantity, item_description);
    system("Pause");
    return 0;}

    void ReadDataFile(vector<string>&bar_code, vector <double>& unit_price,
    vector <int>& inventory_quantity, vector <string>& item_description)
    {
    string Bar_code;
    int Unit_price;
    double Inventory_quantity;
    string Item_description;

    ifstream inputfile;
    inputfile.open("C:\\Temp\\data.txt");
    while (!inputfile.eof())
    {
    inputfile >> Bar_code;
    bar_code.push_back(Bar_code);

    inputfile >> Unit_price;
    unit_price.push_back(Unit_price);

    inputfile >> Inventory_quantity;
    inventory_quantity.push_back(Inventory_quantity);

    inputfile >> Item_description;
    item_description.push_back(Item_description);


    }
    }

    这也是需要阅读的前四项所提供的文本文件:

    367730154604 Pringles 20 1.50

    0164000031190 Sour 10 2.50

    391360056850 Onion 35 2.97

    040255682427 Potato 23 2.98



    提前非常感谢您!

    最佳答案

    首先,更改数据结构,以免不必要地笨拙和容易出错。这是2015年:

    使用结构:

    struct Record {
    string bar_code;
    double unit_price;
    int inventory_quantity;
    string item_description;
    };

    vector<Record> ReadDataFile();

    接下来,通过读取所有行( getline)并使用 istringstream提取各个字段来实现流提取。

    永远不要使用 while (!s.eof())

    现场演示

    Live On Coliru
    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <sstream>
    #include <iterator>

    using namespace std;

    struct Record {
    string bar_code;
    double unit_price;
    int inventory_quantity;
    string item_description;

    friend ostream& operator<<(ostream&, Record const&);
    };

    vector<Record> ReadDataFile();

    int main() {
    auto data = ReadDataFile();

    copy(data.begin(), data.end(), ostream_iterator<Record>(std::cout, "\n"));
    }

    vector<Record> ReadDataFile() {
    vector<Record> data;

    ifstream inputfile("C:\\Temp\\data.txt");

    size_t linenumber = 0;
    string line;
    while (getline(inputfile, line)) {
    linenumber += 1;

    Record r;
    istringstream iss(line);

    if (iss >> r.bar_code >> r.item_description >> r.inventory_quantity >> r.unit_price)
    data.push_back(r);
    else
    throw runtime_error("Parse error in line #" + to_string(linenumber) + " '" + line + "'");
    }

    return data;
    }

    ostream& operator<<(ostream& os, Record const& r) {
    return os << r.bar_code << " " << r.item_description << " " << r.inventory_quantity << " " << r.unit_price;
    }

    将输入打印回输出。

    关于c++ - 条码文件读取C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33447111/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com