Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "StoreInfo.h"
- #include <stdio.h>
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <vector>
- #include <iomanip>
- using namespace std;
- // Tax rate catagories
- const double alcoholTax = 0.08;
- const double foodTax = 0.05;
- const double genMerchandiseTax = 0.07;
- const double medicineTax = 0.04;
- struct cost{
- double alcTax = 0.0, food = 0.0, genMerch = 0.0, meds = 0.0;// Total taxes collected for each tax bracket
- double totalTax = alcTax + food + genMerch + meds;// Total Taxes to be accessed later
- // Variables used in the accessor functions at the bottom
- double costBeforeTax = 0.0, costAfterTax = 0.0, custSaving = 0.0, totRegPrice = 0.0, totSalePrice = 0.0;
- };
- const int listSize = 20;
- // Main method
- int main(){
- string input;// Holds each line from the imported textfile temporarily
- string fileName;// Name of grocery list user wishes to use
- fstream nameFile;// File stream object
- GrListItem itemList[listSize];// Creates a list of objects. These objects are each item on the list and hold related information
- std::vector<GrListItem> vectorList(itemList, itemList + listSize);
- cost itemTotalCost;
- // Requests data from user
- cout << "What is the name of the grocery list you wish to use? " << endl;
- getline(cin, fileName);// Retrieves filename from user and applies string to grListName
- // Tests to see if file can be opened
- fstream testFile(fileName, ios::out);
- if (testFile.fail()){
- cout << "ERROR: Cannot open indicated file.\n";
- return 0;
- }
- // Open data file
- nameFile.open(fileName, ios::in);
- // Read data and apply variables to an object
- if (nameFile){
- int count = 0;
- while (nameFile && count < listSize){
- // Read the name
- getline(nameFile, input, '#');
- vectorList[count].name = input;// Assigns item name to the object inside itemList.name
- // Read quantity
- getline(nameFile, input, '$');
- vectorList[count].quantity = atoi(input.c_str());// Casts string to an int
- // Read regular price
- getline(nameFile, input, '$');
- vectorList[count].regPrice = stof(input.c_str());// Casts string to a float
- // Read sale price
- getline(nameFile, input, '#');
- vectorList[count].salePrice = stof(input.c_str());
- // Read on sale bool
- getline(nameFile, input, '#');
- if (vectorList[count].onSale == 'Y')// If the item is on sale, the isOnSale var returns true
- vectorList[count].isOnSale == 1;
- else
- vectorList[count].isOnSale == 0;
- vectorList[count].onSale = atoi(input.c_str());
- // Read tax category
- getline(nameFile, input, '#');
- vectorList[count].taxCategory = input;// Casts string to a double
- // These functions are called as many times as there are objects in the array.
- getTotBeforeTax(vectorList[count].regPrice, vectorList[count].salePrice, vectorList[count].isOnSale);
- //getTotTaxCategory(taxCategory);
- getTotAfterTax(itemTotalCost.costBeforeTax, itemTotalCost.totalTax);
- count++;
- }
- // Close file
- nameFile.close();
- }
- else
- cout << "ERROR: Cannot open file.\n";
- // Sort array
- // OFFER USER TO CHOOSE HOW THEY WOULD LIKE TO SORT THEIR LIST!!! For extra points
- // Maybe
- std::sort(vectorList.begin(), vectorList.end(), sortByName);
- // For loop that goes to each object and removes the line delimiters
- for (int i = 0; i != listSize; ++i){
- }
- // For loop that creates a receipt on the screen
- // Formatting may or may not be correct
- for (int i = 0; i != listSize; ++i){
- std::cout << vectorList[i].name << endl;// Print item name
- std::cout << std::setfill(' ') << std::setw(20);
- std::cout.fill(' ');
- std::cout << std::setfill(' ') << std::setw(5);// Print item quantity
- std::cout << vectorList[i].quantity << endl;
- std::cout.fill(' ');
- std::cout << std::setfill(' ') << std::setw(5);// Print regular price of item
- std::cout << vectorList[i].regPrice << endl;
- std::cout.fill(' ');
- std::cout << std::setfill(' ') << std::setw(5);// Print sale price of item
- std::cout << vectorList[i].salePrice << endl;
- std::cout.fill(' ');
- if (vectorList[i].onSale == 1){
- std::cout << 'Y' << endl;// Print 'Y' if vectorList[i] is on sale
- std::cout.width(3);
- std::cout.fill(' ');
- }
- else {
- std::cout << 'N' << endl;// Print 'N' if vectorList[i] is not on sale
- std::cout.width(3);
- std::cout.fill(' ');
- }
- std::cout << vectorList[i].GrListItem::taxCategory << endl;// Print tax category
- std::cout.width(20);
- std::cout.fill(' ');
- }
- // Print details of purchase below list of bought items
- // NOTE: THESE VALUES ARE STORED IN THE STRUCT ABOVE main()
- // Display total before tax
- // Display total after tax
- // Display customer Savings
- }
- // Constructor
- GrItem::GrItem(string name, int quantity, float regPrice, float salePrice, bool onSale, enum GrListItem::taxCategory taxCategory){
- name = name;
- quantity = quantity;
- regPrice = regPrice;
- salePrice = salePrice;
- onSale = onSale;
- enum GrListItem::taxCategory tax = taxCategory;
- };
- // Default constructor
- GrItem::GrItem() {
- }
- // Associate the value of the item's tax based on the taxCategory enum
- void calcTaxCategory(enum taxCat taxCat){
- }
- // Get the total cost before the tax
- void getTotBeforeTax(double regPrice, double salePrice, bool onSale){
- cost itemTotalCost;
- if (onSale == 1){
- itemTotalCost.costBeforeTax += salePrice;
- itemTotalCost.totSalePrice += salePrice;
- }
- else{
- itemTotalCost.costBeforeTax += regPrice;
- itemTotalCost.totRegPrice += regPrice;
- }
- }
- // Get the total after tax
- void getTotAfterTax(float costBeforeTax, float totalTax){
- cost itemTotalCost;
- itemTotalCost.costAfterTax = costBeforeTax + totalTax;
- }
- // Get the total amount of tax for each category
- void getTotTaxCategory(enum taxCat taxCat){// These different values are determined by what enum tax category they are
- cost itemTotalCost;
- }
- // Get customer savings (total of all differences between regular price and sale price for items that are currently on sale)
- void getCustSave(double totRegPrice, double totSalePrice, bool onSale){
- cost itemTotalCost;
- if (onSale == 1){
- itemTotalCost.custSaving = totRegPrice - totSalePrice;
- }
- }
- // Function that is called to sort by name
- bool sortByName(const GrListItem &lhs, const GrListItem &rhs){
- return lhs.name < rhs.name;
- }
- // Function that is called to sort by quantity
- bool sortByQuantity(const GrListItem &lhs, const GrListItem &rhs){
- return lhs.quantity < rhs.quantity;
- }
- // Function that is called to sort by regular price
- bool sortByRegPrice(const GrListItem &lhs, const GrListItem &rhs){
- return lhs.regPrice < rhs.regPrice;
- }
- // Function that is called to sort by sale price
- bool sortBySalePrice(const GrListItem &lhs, const GrListItem &rhs){
- return lhs.salePrice < rhs.salePrice;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement