In: Computer Science
9.6 Ch 9 Program: Data visualization (in C)
(1) Prompt the user for a title for data. Output the title. (1
pt)
Ex:
Enter a title for the data: Number of Novels Authored You entered: Number of Novels Authored
(2) Prompt the user for the headers of two columns of a table.
Output the column headers. (1 pt)
Ex:
Enter the column 1 header: Author name You entered: Author name Enter the column 2 header: Number of novels You entered: Number of novels
(3) Prompt the user for data points. Data points must be in this
format: string, int. Store the information before the
comma into a string variable and the information after the comma
into an integer. The user will enter -1 when they have finished
entering data points. Output the data points. Store the string
components of the data points in an array of strings. Store the
integer components of the data points in an array of integers. (4
pts)
Ex:
Enter a data point (-1 to stop input): Jane Austen, 6 Data string: Jane Austen Data integer: 6
(4) Perform error checking for the data point entries. If any of
the following errors occurs, output the appropriate error message
and prompt again for a valid data point.
Ex:
Enter a data point (-1 to stop input): Ernest Hemingway 9 Error: No comma in string. Enter a data point (-1 to stop input): Ernest, Hemingway, 9 Error: Too many commas in input. Enter a data point (-1 to stop input): Ernest Hemingway, nine Error: Comma not followed by an integer. Enter a data point (-1 to stop input): Ernest Hemingway, 9 Data string: Ernest Hemingway Data integer: 9
(5) Output the information in a formatted table. The title is right
justified with a width of 33. Column 1 has a width of 20. Column 2
has a width of 23. (3 pts)
Ex:
Number of Novels Authored Author name | Number of novels -------------------------------------------- Jane Austen | 6 Charles Dickens | 20 Ernest Hemingway | 9 Jack Kerouac | 22 F. Scott Fitzgerald | 8 Mary Shelley | 7 Charlotte Bronte | 5 Mark Twain | 11 Agatha Christie | 73 Ian Flemming | 14 J.K. Rowling | 14 Stephen King | 54 Oscar Wilde | 1
(6) Output the information as a formatted histogram. Each name is
right justified with a width of 20. (4 pts)
Ex:
Jane Austen ****** Charles Dickens ******************** Ernest Hemingway ********* Jack Kerouac ********************** F. Scott Fitzgerald ******** Mary Shelley ******* Charlotte Bronte ***** Mark Twain *********** Agatha Christie ************************************************************************* Ian Flemming ************** J.K. Rowling ************** Stephen King ****************************************************** Oscar Wilde *
Code:-
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
vector<string> dataStr;
vector<int> dataPoint;
string title, header1, header2,s;
cout<<"Enter a title for the data: ";
getline(cin,title);
cout<<"You entered:
"<<title<<endl;
cout<<"Enter the column 1 header: ";
getline(cin,header1);
cout<<"You entered:
"<<header1<<endl;
cout<<"<Enter the column 2 header:
";
getline(cin,header2);
cout<<"You entered:
"<<header2<<endl;
while(true)
{
cout<<"Enter a data point (-1
to stop input): ";
getline(cin,s);
if(s == "-1")
{
break;
}
else
{
int
commaCount = 0;
for(int
i=0; i<s.length(); i++)
{
if(s[i] == ',')
commaCount++;
}
if(commaCount == 0)
{
cout<<"Error: No comma in
string."<<endl;
}
else if(commaCount > 1)
{
cout<<"Error: Too many commas in
input."<<endl;
}
else
{
string firstWord = s.substr(0,
s.find(","));
string secondWord = s.substr(s.find(",")+1,
s.length()-1);
firstWord.erase(0, firstWord.find_first_not_of('
'));
secondWord.erase(0,
secondWord.find_first_not_of(' '));
int countNumbers = 0;
for(int i=0; i<secondWord.length();
i++)
{
if(secondWord[i] >='0'
&& secondWord[i] <= '9')
{
countNumbers++;
}
}
if(countNumbers == secondWord.length())
{
dataPoint.push_back(atoi(secondWord.c_str()));
dataStr.push_back(firstWord);
cout<<"Data string: "<<firstWord<<endl;
cout<<"Data integer: "<<secondWord<<endl;
}
else
{
cout<<"Error: Comma not
followed by an integer."<<endl;
}
}
}
}
cout<<right<<setw(33)<<title<<endl;
cout<<left<<setw(20)<<header1<<"|"<<right<<setw(23)<<header2<<endl;
cout<<"-------------------------------------"<<endl;
for(int i=0; i<dataStr.size(); i++)
{
cout<<left<<setw(20)<<dataStr[i]<<"|"<<right<<setw(23)<<dataPoint[i]<<endl;
}
cout<<endl<<endl;
for(int i=0; i<dataStr.size();i++)
{
cout<<dataStr[i]<<" ";
for(int j=0;
j<dataPoint[i];j++)
{
cout<<"*";
}
cout<<endl;
}
return 0;
}
Code Screenshots:-
Output:-
Please UPVOTE thank you...!!!