修改后的代码我不能得到它来增加我的售价

时间:2014-05-01 23:39:26

标签: c++ parameters reference

这是我修改后的代码,我把文件读入并且它几乎正常工作。我现在遇到的问题是售价,它只是以我的最后售价而不是收取所有价格。我知道它必须是一个简单的解决方案,但由于某种原因,我无法弄清楚我需要做些什么来解决这个问题。

#include<string>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;

//all functions needed for this project
void readSellingFile(ifstream &fp,double &selling);
double grossprofit(double total, double cost);
double netprofit(double gross, double total);
double totalPrice(double &selling);
void getDataFile(ifstream &fp, string &item, double &cost, int &number);
void display(string item,double total, double cost,double gross,double net);

//main function starts here
  int main()
{
  int i;
  double gross,net,selling,total;
  ifstream fp;
  string item;
  int number;
  double cost;

  fp.open ("sales.dat");
  if(!fp)
    {
      cout<<"Error Opening the file"<<endl;
    }

  while(!fp.eof())
    {
      getDataFile(fp,item,cost,number);
      for(int i=0;i<number;i++)
        {
         readSellingFile(fp,selling);
         total=totalPrice(selling);
          gross=grossprofit(total,cost);
          net=netprofit(gross,total);

        }
      display(item,total,cost,gross,net);
      cout<<"Bye!"<<endl;
    }

}

void getDataFile(ifstream &fp, string &item, double &cost, int &number)
{
  cout<<"Reading from the file. "<<endl;
  fp>>item;
  fp>>cost;
  fp>>number;
}

//the selling cost of the item
void readSellingFile(ifstream &fp,double &selling)
{
  fp>>selling;
}

double totalPrice(double &selling)
{
  double total=0;
  total+=selling;
  return total;
}

//calculates the gross profit
double grossprofit(double total,double cost)
{
  double gross;
  gross=total-cost;
  return gross;
}

//calculates the net profit
double netprofit(double gross,double total)
{
  double net;
  net=gross-(.06*total)-(.10*total);
  return net;
}

//prints out the results
void display(string item, double total, double cost ,double gross, double net)
  {
    cout<<"Item:\t\t"<<item<<endl;
    cout<<"cost:\t\t$"<<fixed<<setprecision(2)<<cost<<endl;
    cout<<"Selling price:\t$"<<setprecision(2)<<total<<endl;
    cout<<"Gross Profit: \t$"<<setprecision(2)<<gross<<endl;
    cout<<"Net Profit: \t$"<<setprecision(2)<<net<<endl;
   }

3 个答案:

答案 0 :(得分:0)

创建一个包含所有返回值的结构。含义:

struct Info
{
    std::string name;
    double cost;
    double numberOfItems;
}

然后让你的函数返回对该结构的引用,它将如下所示:

Info& CombineAllFunctions()
{
}

答案 1 :(得分:0)

我不明白你的问题,但我将举例说明如何使用面向对象的设计来进行I / O.

从您发布的代码中,项目的成本和名称为:

struct Item
{
  unsigned int cost;
  std::string  name;
};

您可以在结构中添加输入法,以便从用户那里获取对象的名称和成本:

struct Item
{
  unsigned int cost;
  std::string  name;
  void Input_From_User(std::istream& input, std::ostream& output)
  {
    output << "Enter the item name: ";
    output.flush();
    input >> name;
    output << "\nEnter the cost of the item: ";
    output.flush();
    input >> cost;
  }
};

你可以使用它:

Item new_item;
new_item.Input_From_User(std::cin, std::cout);

在此基础上,您可以添加一个方法将项目写入文件:

struct Item
{
  unsigned int cost;
  std::string  name;
  void Input_From_User(std::istream& input, std::ostream& output)
  {
    output << "Enter the item name: ";
    output.flush();
    input >> name;
    output << "\nEnter the cost of the item: ";
    output.flush();
    input >> cost;
  }
  void Output_As_CSV(std::ostream& output)
  {
    output << cost;
    output << ", ";
    output << name;
    output << "\n";
  }
};

用法是:

Item new_item;
new_item.Output_As_CSV(my_file);

编辑1:功能指针的结构
可以使用函数指针的结构对独立函数进行分组。

typedef std::string   (*P_Get_Name_Function)(void);
typedef double        (*P_Get_Cost_Function)(void);
typedef unsigned int  (*P_Get_Quantity_Function)(void);

struct Item_Functions
{
  P_Get_Name_Function  name_function;
  P_Get_Cost_Function  cost_function;
  P_Get_Quantity_Function qty_function;
};

您可以像以下一样使用它:

void Input_Items(const Item_Functions& inp_funcs)
{
  std::string item_name = (inp_funcs.name_function)();
  double item_cost = (inp_funcs.cost_function)();
  unsigned int item_quantity = (inp_funcs.qty_function)();
};
Item_Functions User_Item_Funcs = 
{ getItemName, getItemCost, getItemQuantity};

// ...
Input_Items(User_Item_Funcs);

上述代码满足对函数进行分组并通过引用传递它们的要求。

答案 2 :(得分:0)

你需要创建一个fstream对象

像这样

  fstream file; 


   file.open ( " name of the file ) ;

    string name[SIZE];  //array that will hold the name of each item
    int quantity[SIZE];// array that will hold the quantity of each item
    double cost[SIZE];// array that will hold the cost of each item
int counter = 0; 
    while ( !file.eof())
{
   file>>name[counter]>>cost[counter]>>quantity[counter];
    counter++;
}

然后你可以创建一个for循环来显示

    for ( int i = 0 ; i < SIZE; i ++ )
   {

    cout<<"Name: " <<name[i]<<endl;
     cout<<"Cost: "<<cost[i]<<endl; 
    cout<<"Quantity: "<<quantity[i]<<endl;
   }

这是一种非常丑陋的方式来做你想做的事情..但是因为你说你是在计算机科学1,我不确定你是否知道对象.....所以如果你没有&#39;要了解它们,您可能希望为文件中的每个项目创建一个数组。并使用索引作为访问&#34;每个项目的方式&#34; 。希望它有所帮助。