diff --git a/Project3.sln b/Project3.sln new file mode 100644 index 0000000..e0029a5 --- /dev/null +++ b/Project3.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33423.256 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Project3", "Project3\Project3.vcxproj", "{AFA661B1-EC92-446B-8827-0E94C067E063}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AFA661B1-EC92-446B-8827-0E94C067E063}.Debug|x64.ActiveCfg = Debug|x64 + {AFA661B1-EC92-446B-8827-0E94C067E063}.Debug|x64.Build.0 = Debug|x64 + {AFA661B1-EC92-446B-8827-0E94C067E063}.Debug|x86.ActiveCfg = Debug|Win32 + {AFA661B1-EC92-446B-8827-0E94C067E063}.Debug|x86.Build.0 = Debug|Win32 + {AFA661B1-EC92-446B-8827-0E94C067E063}.Release|x64.ActiveCfg = Release|x64 + {AFA661B1-EC92-446B-8827-0E94C067E063}.Release|x64.Build.0 = Release|x64 + {AFA661B1-EC92-446B-8827-0E94C067E063}.Release|x86.ActiveCfg = Release|Win32 + {AFA661B1-EC92-446B-8827-0E94C067E063}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A3FB8617-7899-49C4-9530-7FFCA33D6AC0} + EndGlobalSection +EndGlobal diff --git a/Project3/Items.cpp b/Project3/Items.cpp new file mode 100644 index 0000000..3107b86 --- /dev/null +++ b/Project3/Items.cpp @@ -0,0 +1,229 @@ +/* Cody Cook + 2023/04/13 + CS-210 Project 3 +*/ +#include "Items.h" + +// constructors + +// default constructor; parses default file name +Items::Items() +{ + if (!ParseInputFile()) + { + // try getting a new file + RequestNewFile(); + } +} + +// constructor with a custom input option +Items::Items(string p_inputFile = defaultItemFileName) +{ + SetInputFile(p_inputFile); + if (!ParseInputFile()) + { + // try geting a new file + RequestNewFile(); + } +} + +// destructors + +// run a set of functions when the class closes +Items::~Items() +{ + if (r_input.is_open()) + { + r_input.close(); + } +} + +// getters + +// prints and returns the inventory for a named item +int Items::GetInventory(string p_item) +{ + // search the string in the map + auto it = r_mapping.find(p_item); + + // if there were results + if (it != r_mapping.end()) + { + string times; // allow for more natural responses with the word "time" + + // if there is only one item, it is only there "one time" + if (it->second == 1) + { + times = " time."; + } + else + { + // if it is 0 or 2 or more, then it is "times" + times = " times."; + } + + // output the quantity purchased + cout << c_red << it->first << c_normal + << " were purchased "; + cout << c_red << it->second << c_normal; + cout << times << endl; + return it->second; + } + else + { + // because there wasn't quantity, explain it wasn't purchased. + cerr << c_red << p_item << c_normal + << " were not purchased." << endl; + return 0; + } +} + +// return the string for the inputFile +string Items::GetInputFile() +{ + return r_inputFile; +} + +char Items::GetStar() +{ + return r_star; +} + +// setters + +// update the filename of the input file +void Items::SetInputFile(string p_inputFile) +{ + r_inputFile = p_inputFile; +} + +// change the star used in the histogram +void Items::SetStar(char p_star) +{ + r_star = p_star; +} + +// methods + +// ParseInputFile reads the input file and stores the data in a map; it also runs a backup of the data +bool Items::ParseInputFile() +{ + // try opening the file + r_input.open(r_inputFile); + + // if the file could not be opened + if (!r_input.is_open()) + { + // error out + cout << "Error opening file " + << c_red << r_inputFile << c_normal << endl; + return false; + } + clog << endl + << "Parsing " + << c_red << r_inputFile << c_normal + << "... "; + + string line; + // while we go through each line of the file + while (getline(r_input, line)) + { + // Increment the frequency of the current line into the map + r_mapping[line]++; + } + // close the file + r_input.close(); + + // run a backup of this data and return true + SaveInventory(); + return true; +} + +// output the inventory based on the config +void Items::PrintInventory(int p_type) +{ + // find the length of the longest item to help align the output + size_t longest = 0; + for (const auto &entry : r_mapping) + { + if (entry.first.length() > longest) + { + longest = entry.first.length(); + } + } + + // output the inventory + for (const auto &entry : r_mapping) + { + // output the item name with the longest item name as the width + cout << setw(longest) << entry.first << " "; + + // see the quantity as a number + if (p_type == 1) + { + cout << c_red << entry.second << c_normal << endl; + } + // see the quantity as a histogram + else if (p_type == 2) + { + cout << c_red << string(entry.second, r_star) << c_normal << endl; + } + } +} + +// SaveInventory creates a backup of the data in the map +bool Items::SaveInventory() +{ + // open file for backup + ofstream file(r_database); + + // if the file isn't open + if (!file.is_open()) + { + // then there was a opening the file; so warn the user and exit the function + cerr << "Error opening " << c_red << r_database << c_normal << " for backup. Please check your permissions."; + return false; + } + + // iterate through the mappings and save them to the file + for (const auto &entry : r_mapping) + { + file << entry.first << " " << entry.second << endl; + } + + // save and close the file + file.close(); + + // output a successful save and return true + cout << "Backup file " + << c_red << r_database << c_normal + << " updated." << endl; + cout << endl; + return true; +} + +void Items::RequestNewFile() +{ + string newFile; + bool moveOn = false; + while (!moveOn) + { + cout << endl; + cout << "Type " << c_red << "exit" << c_normal << " to quit, or enter the filename to import: "; + cout << c_red; + cin >> newFile; + cout << c_normal; + + if (newFile == "exit") + { + exit(0); + } + + SetInputFile(newFile); + + if (ParseInputFile()) + { + moveOn = true; + } + } +} diff --git a/Project3/Items.h b/Project3/Items.h new file mode 100644 index 0000000..e86dadf --- /dev/null +++ b/Project3/Items.h @@ -0,0 +1,52 @@ +/* Cody Cook + 2023/04/13 + CS-210 Project 3 +*/ +#include // use cout and cin +#include // use strings +#include // use maps +#include // use files +#include // use setw + +using namespace std; // use the standard namespace + +#pragma once // only include this file onces + +// set some constants +constexpr auto defaultItemFileName = "inputfile.txt"; // the default filename to import +constexpr auto defaultDatabaseFilename = "frequency.dat"; // the default filename to export +constexpr auto c_red = "\033[31m"; // set the terminal red color +constexpr auto c_normal = "\033[0m"; // set the terminal normal color + +class Items +{ +public: + // constructors + Items(); // default constructor + Items(string p_inputFile); // constructor with a custom import file + + //destructor + ~Items(); // destructor + + // getters + string GetInputFile(); // return the string for the inputFile + int GetInventory(string p_item); // return the quantity of a specific item + char GetStar(); // get the configured star + + //setters + void SetInputFile(string p_inputFile); // update the filename of the input file + void SetStar(char p_star); // set the star char + + //methods + void RequestNewFile(); // ask user to set new filename + bool ParseInputFile(); // parse the configured input file + void PrintInventory(int p_type); // output the inventory in the map + bool SaveInventory(); // save the inventory to a file + +private: + string r_inputFile = defaultItemFileName; // the default file to import + ifstream r_input; // the input file + map r_mapping; // the map of items and their quantities + string r_database = defaultDatabaseFilename; // the default filename to export + char r_star = '*'; // default star for the histogram +}; diff --git a/Project3/Project3.aps b/Project3/Project3.aps new file mode 100644 index 0000000..72407a4 Binary files /dev/null and b/Project3/Project3.aps differ diff --git a/Project3/Project3.rc b/Project3/Project3.rc new file mode 100644 index 0000000..eedb3a0 --- /dev/null +++ b/Project3/Project3.rc @@ -0,0 +1,100 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Cody Cook" + VALUE "FileDescription", "Reads inputfile.txt and outputs data about the file. Backs up to frequency.dat" + VALUE "FileVersion", "1.0.0.1" + VALUE "InternalName", "Project3.exe" + VALUE "LegalCopyright", "Copyright (C) 2023 Cody Cook" + VALUE "OriginalFilename", "Project3.exe" + VALUE "ProductName", "Corner Grocer: Purchase Visualizer" + VALUE "ProductVersion", "1.0.0.1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Project3/Project3.vcxproj b/Project3/Project3.vcxproj new file mode 100644 index 0000000..852f09d --- /dev/null +++ b/Project3/Project3.vcxproj @@ -0,0 +1,155 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {afa661b1-ec92-446b-8827-0e94c067e063} + Project3 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Project3/Project3.vcxproj.filters b/Project3/Project3.vcxproj.filters new file mode 100644 index 0000000..8facd36 --- /dev/null +++ b/Project3/Project3.vcxproj.filters @@ -0,0 +1,38 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/Project3/Project3.vcxproj.user b/Project3/Project3.vcxproj.user new file mode 100644 index 0000000..0f14913 --- /dev/null +++ b/Project3/Project3.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Project3/Release/Items.obj b/Project3/Release/Items.obj new file mode 100644 index 0000000..b061b47 Binary files /dev/null and b/Project3/Release/Items.obj differ diff --git a/Project3/Release/Project3.exe.recipe b/Project3/Release/Project3.exe.recipe new file mode 100644 index 0000000..12f1648 --- /dev/null +++ b/Project3/Release/Project3.exe.recipe @@ -0,0 +1,11 @@ + + + + + C:\Users\cody\OneDrive - SNHU\CS-210\Project3\Release\Project3.exe + + + + + + \ No newline at end of file diff --git a/Project3/Release/Project3.iobj b/Project3/Release/Project3.iobj new file mode 100644 index 0000000..624c24f Binary files /dev/null and b/Project3/Release/Project3.iobj differ diff --git a/Project3/Release/Project3.ipdb b/Project3/Release/Project3.ipdb new file mode 100644 index 0000000..b7e7c8b Binary files /dev/null and b/Project3/Release/Project3.ipdb differ diff --git a/Project3/Release/Project3.log b/Project3/Release/Project3.log new file mode 100644 index 0000000..31258fb --- /dev/null +++ b/Project3/Release/Project3.log @@ -0,0 +1,7 @@ + Items.cpp + main.cpp + Generating code + Previous IPDB not found, fall back to full compilation. + All 365 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. + Finished generating code + Project3.vcxproj -> C:\Users\cody\OneDrive - SNHU\CS-210\Project3\Release\Project3.exe diff --git a/Project3/Release/Project3.res b/Project3/Release/Project3.res new file mode 100644 index 0000000..fcb950a Binary files /dev/null and b/Project3/Release/Project3.res differ diff --git a/Project3/Release/Project3.tlog/CL.command.1.tlog b/Project3/Release/Project3.tlog/CL.command.1.tlog new file mode 100644 index 0000000..31a731d Binary files /dev/null and b/Project3/Release/Project3.tlog/CL.command.1.tlog differ diff --git a/Project3/Release/Project3.tlog/CL.read.1.tlog b/Project3/Release/Project3.tlog/CL.read.1.tlog new file mode 100644 index 0000000..539a9a7 Binary files /dev/null and b/Project3/Release/Project3.tlog/CL.read.1.tlog differ diff --git a/Project3/Release/Project3.tlog/CL.write.1.tlog b/Project3/Release/Project3.tlog/CL.write.1.tlog new file mode 100644 index 0000000..1cf2964 Binary files /dev/null and b/Project3/Release/Project3.tlog/CL.write.1.tlog differ diff --git a/Project3/Release/Project3.tlog/Project3.lastbuildstate b/Project3/Release/Project3.tlog/Project3.lastbuildstate new file mode 100644 index 0000000..1103c5b --- /dev/null +++ b/Project3/Release/Project3.tlog/Project3.lastbuildstate @@ -0,0 +1,2 @@ +PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.29.30133:TargetPlatformVersion=10.0.19041.0: +Release|Win32|C:\Users\cody\OneDrive - SNHU\CS-210\Project3\| diff --git a/Project3/Release/Project3.tlog/link.command.1.tlog b/Project3/Release/Project3.tlog/link.command.1.tlog new file mode 100644 index 0000000..4a5a411 Binary files /dev/null and b/Project3/Release/Project3.tlog/link.command.1.tlog differ diff --git a/Project3/Release/Project3.tlog/link.read.1.tlog b/Project3/Release/Project3.tlog/link.read.1.tlog new file mode 100644 index 0000000..ba72514 Binary files /dev/null and b/Project3/Release/Project3.tlog/link.read.1.tlog differ diff --git a/Project3/Release/Project3.tlog/link.write.1.tlog b/Project3/Release/Project3.tlog/link.write.1.tlog new file mode 100644 index 0000000..107ef56 Binary files /dev/null and b/Project3/Release/Project3.tlog/link.write.1.tlog differ diff --git a/Project3/Release/Project3.tlog/rc.command.1.tlog b/Project3/Release/Project3.tlog/rc.command.1.tlog new file mode 100644 index 0000000..68829f1 Binary files /dev/null and b/Project3/Release/Project3.tlog/rc.command.1.tlog differ diff --git a/Project3/Release/Project3.tlog/rc.read.1.tlog b/Project3/Release/Project3.tlog/rc.read.1.tlog new file mode 100644 index 0000000..003db78 Binary files /dev/null and b/Project3/Release/Project3.tlog/rc.read.1.tlog differ diff --git a/Project3/Release/Project3.tlog/rc.write.1.tlog b/Project3/Release/Project3.tlog/rc.write.1.tlog new file mode 100644 index 0000000..2fe9723 Binary files /dev/null and b/Project3/Release/Project3.tlog/rc.write.1.tlog differ diff --git a/Project3/Release/main.obj b/Project3/Release/main.obj new file mode 100644 index 0000000..8bff54b Binary files /dev/null and b/Project3/Release/main.obj differ diff --git a/Project3/Release/vc142.pdb b/Project3/Release/vc142.pdb new file mode 100644 index 0000000..ee66e24 Binary files /dev/null and b/Project3/Release/vc142.pdb differ diff --git a/Project3/inputfile.txt b/Project3/inputfile.txt new file mode 100644 index 0000000..2fa499b --- /dev/null +++ b/Project3/inputfile.txt @@ -0,0 +1,104 @@ +Spinach +Radishes +Broccoli +Peas +Cranberries +Broccoli +Potatoes +Cucumbers +Radishes +Cranberries +Peaches +Zucchini +Potatoes +Cranberries +Cantaloupe +Beets +Cauliflower +Cranberries +Peas +Zucchini +Peas +Onions +Potatoes +Cauliflower +Spinach +Radishes +Onions +Zucchini +Cranberries +Peaches +Yams +Zucchini +Apples +Cucumbers +Broccoli +Cranberries +Beets +Peas +Cauliflower +Potatoes +Cauliflower +Celery +Cranberries +Limes +Cranberries +Broccoli +Spinach +Broccoli +Garlic +Cauliflower +Pumpkins +Celery +Peas +Potatoes +Yams +Zucchini +Cranberries +Cantaloupe +Zucchini +Pumpkins +Cauliflower +Yams +Pears +Peaches +Apples +Zucchini +Cranberries +Zucchini +Garlic +Broccoli +Garlic +Onions +Spinach +Cucumbers +Cucumbers +Garlic +Spinach +Peaches +Cucumbers +Broccoli +Zucchini +Peas +Celery +Cucumbers +Celery +Yams +Garlic +Cucumbers +Peas +Beets +Yams +Peas +Apples +Peaches +Garlic +Celery +Garlic +Cucumbers +Garlic +Apples +Celery +Zucchini +Cucumbers +Onions \ No newline at end of file diff --git a/Project3/main.cpp b/Project3/main.cpp new file mode 100644 index 0000000..318992e --- /dev/null +++ b/Project3/main.cpp @@ -0,0 +1,82 @@ +/* Cody Cook + 2023/04/13 + CS-210 Project 3 +*/ +#include // use cout and cin +#include // for use in menuItems + +#include "Items.h" + +using namespace std; + +void menu() +{ + unsigned int input = 0; + Items Items; + string search; + + // create a vector of the menu items + vector menuItems = { + "Check the purchase frequency of an item.", // input 1 + "Display the purchase frequency of all items.", // input 2 + "Display the purchase frequency of all items in a histogram.", // input 3 + "Exit." // input 4 + }; + + // loop until the user enters the exit input + while (input != 4) + { + cout << "Corner Grocer: Inventory Menu\n\n"; + for (unsigned int i = 0; i < menuItems.size(); i++) + { + cout << c_red << i + 1 << c_normal << ". " << menuItems[i] << endl; + } + cout << endl + << "Enter your choice: " << c_red; + cin >> input; + cout << c_normal; + + // if the user enters a non-integer + if (cin.fail()) + { + cin.clear(); // clear the error flag + cin.ignore(1000, '\n'); // ignore the rest of the input + input = 0; // set the input to 0 + } + cout << endl; + switch (input) + { + case 1: + cout << "Enter an item you wish to check the purchase frequency: "; + cout << c_red; + cin >> search; + cout << c_normal; + Items.GetInventory(search); + break; + case 2: + Items.PrintInventory(1); + break; + case 3: + Items.PrintInventory(2); + break; + case 4: + cout << "Goodbye!" << endl; + break; + default: + cerr << "Invalid input. Please try again." << endl; + break; + } + cout << endl; + system("pause"); + cout << endl; + } +} + +int main() +{ + // call the menu function + menu(); + + // return successful + return 0; +} diff --git a/Project3/resource.h b/Project3/resource.h new file mode 100644 index 0000000..868ad17 --- /dev/null +++ b/Project3/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Project3.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Release/Project3.exe b/Release/Project3.exe new file mode 100644 index 0000000..a0bdd12 Binary files /dev/null and b/Release/Project3.exe differ diff --git a/Release/Project3.pdb b/Release/Project3.pdb new file mode 100644 index 0000000..97ccea4 Binary files /dev/null and b/Release/Project3.pdb differ diff --git a/Release/inputfile.txt b/Release/inputfile.txt new file mode 100644 index 0000000..2fa499b --- /dev/null +++ b/Release/inputfile.txt @@ -0,0 +1,104 @@ +Spinach +Radishes +Broccoli +Peas +Cranberries +Broccoli +Potatoes +Cucumbers +Radishes +Cranberries +Peaches +Zucchini +Potatoes +Cranberries +Cantaloupe +Beets +Cauliflower +Cranberries +Peas +Zucchini +Peas +Onions +Potatoes +Cauliflower +Spinach +Radishes +Onions +Zucchini +Cranberries +Peaches +Yams +Zucchini +Apples +Cucumbers +Broccoli +Cranberries +Beets +Peas +Cauliflower +Potatoes +Cauliflower +Celery +Cranberries +Limes +Cranberries +Broccoli +Spinach +Broccoli +Garlic +Cauliflower +Pumpkins +Celery +Peas +Potatoes +Yams +Zucchini +Cranberries +Cantaloupe +Zucchini +Pumpkins +Cauliflower +Yams +Pears +Peaches +Apples +Zucchini +Cranberries +Zucchini +Garlic +Broccoli +Garlic +Onions +Spinach +Cucumbers +Cucumbers +Garlic +Spinach +Peaches +Cucumbers +Broccoli +Zucchini +Peas +Celery +Cucumbers +Celery +Yams +Garlic +Cucumbers +Peas +Beets +Yams +Peas +Apples +Peaches +Garlic +Celery +Garlic +Cucumbers +Garlic +Apples +Celery +Zucchini +Cucumbers +Onions \ No newline at end of file