First push

This commit is contained in:
Cody Cook 2023-04-16 18:59:53 -07:00
parent 6ffacf3c9b
commit 2b53962f89
32 changed files with 933 additions and 0 deletions

31
Project3.sln Normal file
View file

@ -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

229
Project3/Items.cpp Normal file
View file

@ -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;
}
}
}

52
Project3/Items.h Normal file
View file

@ -0,0 +1,52 @@
/* Cody Cook
2023/04/13
CS-210 Project 3
*/
#include <iostream> // use cout and cin
#include <string> // use strings
#include <map> // use maps
#include <fstream> // use files
#include <iomanip> // 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<string, int> 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
};

BIN
Project3/Project3.aps Normal file

Binary file not shown.

100
Project3/Project3.rc Normal file
View file

@ -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

155
Project3/Project3.vcxproj Normal file
View file

@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{afa661b1-ec92-446b-8827-0e94c067e063}</ProjectGuid>
<RootNamespace>Project3</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Items.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Items.h" />
<ClInclude Include="resource.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Project3.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Items.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Items.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="resource.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Project3.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>

BIN
Project3/Release/Items.obj Normal file

Binary file not shown.

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<ProjectOutputs>
<ProjectOutput>
<FullPath>C:\Users\cody\OneDrive - SNHU\CS-210\Project3\Release\Project3.exe</FullPath>
</ProjectOutput>
</ProjectOutputs>
<ContentFiles />
<SatelliteDlls />
<NonRecipeFileRefs />
</Project>

Binary file not shown.

Binary file not shown.

View file

@ -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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -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\|

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Project3/Release/main.obj Normal file

Binary file not shown.

BIN
Project3/Release/vc142.pdb Normal file

Binary file not shown.

104
Project3/inputfile.txt Normal file
View file

@ -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

82
Project3/main.cpp Normal file
View file

@ -0,0 +1,82 @@
/* Cody Cook
2023/04/13
CS-210 Project 3
*/
#include <iostream> // use cout and cin
#include <vector> // 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<string> 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;
}

14
Project3/resource.h Normal file
View file

@ -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

BIN
Release/Project3.exe Normal file

Binary file not shown.

BIN
Release/Project3.pdb Normal file

Binary file not shown.

104
Release/inputfile.txt Normal file
View file

@ -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