Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Competency In this project, you will demonstrate your mastery of the following competency: Utilize various programming languages to develop secure, efficient code Scenario You are

Competency

In this project, you will demonstrate your mastery of the following competency:

  • Utilize various programming languages to develop secure, efficient code

Scenario

You are doing a fantastic job at Chada Tech in your new role as a junior developer, and you exceeded expectations in your last assignment for Airgead Banking. Since your team is impressed with your work, they have given you another, more complex assignment. Some of the code for this project has already been completed by a senior developer on your team. Because this work will require you to use both C++ and Python, the senior developer has given you the code to begin linking between C++ and Python. Your task is to build an item-tracking program for the Corner Grocer, which should incorporate all of their requested functionality.

The Corner Grocer needs a program that analyzes the text records they generate throughout the day. These records list items purchased in chronological order from the time the store opens to the time it closes. They are interested in rearranging their produce section and need to know how often items are purchased so they can create the most effective layout for their customers. The program that the Corner Grocer is asking you to create should address the following three requirements for a given text-based input file that contains a list of purchased items for a single day:

  1. Produce a list of all items purchased in a given day along with the number of times each item was purchased.
  2. Produce a number representing how many times a specific item was purchased in a given day.
  3. Produce a text-based histogram listing all items purchased in a given day, along with a representation of the number of times each item was purchased.

Directions

One of Python's strengths is its ability to search through text and process large amounts of data, so that programming language will be used to manage internal functions of the program you create. Alternatively, C++ will be used to interface with users who are interested in using the prototype tracking program.

Grocery Tracking Program

Begin with a Visual Studio project file that has been set up correctly to work with both C++ and Python, as you have done in a previous module. Remember to be sure you are working in Release mode, rather than Debug mode. Then add the CS210_Starter_CPP_Code and CS210_Starter_PY_Code files, linked in the Supporting Materials section, to their appropriate tabs within the project file so that C++ and Python will be able to effectively communicate with one another. After you have begun to code, you will also wish to access the CS210_Project_Three_Input_File, linked in the Supporting Materials section, to check the functionality and output of your work.

As you work, continue checking your code's syntax to ensure your code will run. Note that when you compile your code, you will be able to tell if this is successful overall because it will produce an error message for any issues regarding syntax. Some common syntax errors are missing a semicolon, calling a function that does not exist, not closing an open bracket, or using double quotes and not closing them in a string, among others.

  1. Use C++ to develop a menu display that asks users what they would like to do. Include options for each of the three requirements outlined in the scenario and number them 1, 2, and 3. You should also include an option 4 to exit the program. All of your code needs to effectively validate user input.
  2. Create code to determine the number of times each individual item appears. Here you will be addressing the first requirement from the scenario to produce a list of all items purchased in a given day along with the number of times each item was purchased. Note that each grocery item is represented by a word in the input file. Reference the following to help guide how you can break down the coding work.
  • Write C++ code for when a user selects option 1 from the menu. Select and apply a C++ function to call the appropriate Python function, which will display the number of times each item (or word) appears.
  • Write Python code to calculate the frequency of every word that appears from the input file. It is recommended that you build off the code you have already been given for this work.
  • Use Python to display the final result of items and their corresponding numeric value on the screen.

3. Create code to determine the frequency of a specific item. Here you will be addressing the second requirement from the scenario to produce a number representing how many times a specific item was purchased in a given day. Remember an item is represented by a word and its frequency is the number of times that word appears in the input file. Reference the following to help guide how you can break down the coding work.

a. Use C++ to validate user input for option 2 in the menu. Prompt a user to input the item, or word, they wish to look for. Create a C++ function to take the user's input and pass it to Python.

b. Write Python code to return the frequency of a specific word. It will be useful to build off the code you just wrote to address the first requirement. You can use the logic you wrote but modify it to return just one value; this should be a fairly simple change (about one line). Next, instead of displaying the result on the screen from Python, return a numeric value for the frequency of the specific word to C++.

c. Create a C++ function to display the value returned from Python. Remember, this should be displayed on the screen in C++. We recommend reviewing the C++ functions that have already been provided to you for this work.

4. Create code to graphically display a data file as a text-based histogram. Here you will be addressing the third requirement from the scenario: to produce a text-based histogram listing all items purchased in a given day, along with a representation of the number of times each item was purchased. Reference the following to help guide how you can break down the coding work:

a. Use C++ to validate user input for option 3 in the menu. Then have C++ prompt Python to execute its relevant function.

b. Create a Python function that reads an input file (CS210_Project_Three_Input_File, which is linked in the Supporting Materials section) and then creates a file, which contains the words and their frequencies. The file that you create should be namedfrequency.dat, which needs to be specified in your C++ code and in your Python code. Note that you may wish to refer to work you completed in a previous assignment where you practiced reading and writing to a file. Some of your code from that work may be useful to reuse or manipulate here. The frequency.dat file should include every item (represented by a word) paired with the number of times that item appears in the input file. For example, the file might read as follows:

  • Potatoes 4
  • Pumpkins 5
  • Onions 3

c. Write C++ code to read the frequency.dat file and display a histogram. Loop through the newly created file and read the name and frequency on each row. Then print the name, followed by asterisks or another special character to represent the numeric amount. The number of asterisks should equal the frequency read from the file. For example, if the file includes 4 potatoes, 5 pumpkins, and 3 onions then your text-based histogram may appear as represented below. However, you can alter the appearance or color of the histogram in any way you choose.

  • Potatoes ****
  • Pumpkins *****
  • Onions ***

5. Apply industry standard best practices such as in-line comments and appropriate naming conventions to enhance readability and maintainability. Remember that you must demonstrate industry standard best practices in all your code to ensure clarity, consistency, and efficiency. This includes the following:

a. Using input validation and error handling to anticipate, detect, and respond to run-time and user errors (for example, make sure you have option 4 on your menu so users can exit the program)

b. Inserting in-line comments to denote your changes and briefly describe the functionality of the code

c. Using appropriate variable, parameter, and other naming conventions throughout your code

Supporting Materials

CS210_Project_Three_Input_File

Use this TXT input file to test your code as you work. It contains a list of different produce items that were purchased on a sample day, beginning in the morning when the Corner Grocer opened and continuing until the evening when the store closed.

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 

CS210_Starter_CPP_Code

Add this CPP code to the CPP tab in your Visual Studio project file. You will need these functions to be able to communicate with the Python portion of this project's code.

#include  #include  #include  #include  #include  using namespace std; /* Description: To call this function, simply pass the function name in Python that you wish to call. Example: callProcedure("printsomething"); Output: Python will print on the screen: Hello from python! Return: None */ void CallProcedure(string pName) { char *procname = new char[pName.length() + 1]; std::strcpy(procname, pName.c_str()); Py_Initialize(); PyObject* my_module = PyImport_ImportModule("PythonCode"); PyErr_Print(); PyObject* my_function = PyObject_GetAttrString(my_module, procname); PyObject* my_result = PyObject_CallObject(my_function, NULL); Py_Finalize(); delete[] procname; } /* Description: To call this function, pass the name of the Python functino you wish to call and the string parameter you want to send Example: int x = callIntFunc("PrintMe","Test"); Output: Python will print on the screen: You sent me: Test Return: 100 is returned to the C++ */ int callIntFunc(string proc, string param) { char *procname = new char[proc.length() + 1]; std::strcpy(procname, proc.c_str()); char *paramval = new char[param.length() + 1]; std::strcpy(paramval, param.c_str()); PyObject *pName, *pModule, *pDict, *pFunc, *pValue = nullptr, *presult = nullptr; // Initialize the Python Interpreter Py_Initialize(); // Build the name object pName = PyUnicode_FromString((char*)"PythonCode"); // Load the module object pModule = PyImport_Import(pName); // pDict is a borrowed reference  pDict = PyModule_GetDict(pModule); // pFunc is also a borrowed reference  pFunc = PyDict_GetItemString(pDict, procname); if (PyCallable_Check(pFunc)) { pValue = Py_BuildValue("(z)", paramval); PyErr_Print(); presult = PyObject_CallObject(pFunc, pValue); PyErr_Print(); } else { PyErr_Print(); } //printf("Result is %d ", _PyLong_AsInt(presult)); Py_DECREF(pValue); // Clean up Py_DECREF(pModule); Py_DECREF(pName); // Finish the Python Interpreter Py_Finalize(); // clean  delete[] procname; delete[] paramval; return _PyLong_AsInt(presult); } /* Description: To call this function, pass the name of the Python functino you wish to call and the string parameter you want to send Example: int x = callIntFunc("doublevalue",5); Return: 25 is returned to the C++ */ int callIntFunc(string proc, int param) { char *procname = new char[proc.length() + 1]; std::strcpy(procname, proc.c_str()); PyObject *pName, *pModule, *pDict, *pFunc, *pValue = nullptr, *presult = nullptr; // Initialize the Python Interpreter Py_Initialize(); // Build the name object pName = PyUnicode_FromString((char*)"PythonCode"); // Load the module object pModule = PyImport_Import(pName); // pDict is a borrowed reference  pDict = PyModule_GetDict(pModule); // pFunc is also a borrowed reference  pFunc = PyDict_GetItemString(pDict, procname); if (PyCallable_Check(pFunc)) { pValue = Py_BuildValue("(i)", param); PyErr_Print(); presult = PyObject_CallObject(pFunc, pValue); PyErr_Print(); } else { PyErr_Print(); } //printf("Result is %d ", _PyLong_AsInt(presult)); Py_DECREF(pValue); // Clean up Py_DECREF(pModule); Py_DECREF(pName); // Finish the Python Interpreter Py_Finalize(); // clean  delete[] procname; return _PyLong_AsInt(presult); } void main() { CallProcedure("printsomething"); cout << callIntFunc("PrintMe","House") << endl; cout << callIntFunc("SquareValue", 2); } 

CS210_Starter_PY_Code

Add this PY code to the PY tab in your Visual Studio project file. You will need these functions to be able to communicate with the C++ portion of this project's code.

import re import string def printsomething(): print("Hello from python!") def PrintMe(v): print("You sent me: " + v) return 100; def SquareValue(v): return v * v 

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Financial management theory and practice

Authors: Eugene F. Brigham and Michael C. Ehrhardt

12th Edition

978-0030243998, 30243998, 324422695, 978-0324422696

Students also viewed these Programming questions

Question

Describe the effect of aging on the special sense organs.

Answered: 1 week ago