It should be in C++. The a1.text file is random people with name, ID, address. I
ID: 3886075 • Letter: I
Question
It should be in C++. The a1.text file is random people with name, ID, address.
In this program, you are required to read in from a text file a list of persons, display their information, add new persons, and do a search for certain persons. The information of each person consists of: Last_Name, First_Name (25 chars, max) ID (int) Address (60 chars, max) Your program will open a file a1.txt and read one person's info at a time, and you may assume the entries in the file are all in correct forms. Each person's information is collected, in sequence, as name, ID, address. You can assume the maximum number of people in a1.txt is 20 1. Read from a1.txt the information. Each person should take one structure. The structure should be defined as to hold name, ID, and address. 2. Your program prints the information of all people according the ID numbers in ascending order. The information (name, ID, address) should be identical to the information your program read from a1.txt (see sample a1.txt as in the same folder of this assignment, you need to follow the same formatting as defined in a1.txt) 3. Your program then asks the user if there is additional person to add. If so, the fields of information on this new person are the same format as in a1.txt, in sequence of name, ID address, and your program asks the user to enter one entry at a time. Your program should continue to ask if additional person is to be added, and the user decides whether or not to add a new one. 4. After 3, your program asks the user to search for a person by last name. The user will enter the name and your program should print out the information: name, ID, address, in sequence and one line per field (e.g. name takes one line). Your program should continuously ask the user if to search a new person, and stop only if the user chooses so. If there are two or more people with identical last name, each of them should be listed. Your program prints out the information immediately after the person is found. 5. After 4, your program should have a function to print out all people who are "searched and found", in the order of first searched and first printed. The standard printed (on screen) information consists: name, ID, address, in sequence and one line per field. Check the sample file for conforming the format, and test if your program works.Explanation / Answer
The code so far
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
struct StudentData
{
int studentID;
string first_name;
string last_name;
int sem1;
int sem2;
int sem3;
int total;
char ch;
};
const int SIZE = 9;
const int INFO = 4;
// Function prototypes
void openInputFile(ifstream &, string);
void getTotal(StudentData[]);
void getGrade(StudentData[]);
void calcLowest(StudentData[], int &, int &, int &, int &, int[]);
void calcHighest(StudentData[], int &, int &, int &, int &, int[]);
void getAverage(StudentData[], int, double &, double &, double &, double &, double[]);
void getStd(StudentData[], double &, double &, double &, double &, double &, double &, double &, double &, double[]);
void print(StudentData[], int[], int[], double[], double[]);
void sort(StudentData[]);
int main()
{
// Variables
StudentData arr[SIZE];
int lowest1, lowest2, lowest3, lowest4;
int highest1, highest2, highest3, highest4;
double average1 = 0, average2 = 0, average3 = 0, average4 = 0;
double std1 = 0, std2 = 0, std3 = 0, std4 = 0;
int lowest[INFO] = {};
int highest[INFO] = {};
double average[INFO] = {};
double standardDeviation[INFO] = {};
ifstream inFile;
string inFileName = "C:\Users\Lisa\Desktop\scores.txt";
// Call function to read data in file
openInputFile(inFile, inFileName);
// Read data into an array of structs
for(int count = 0; count < SIZE; count++)
{
inFile >> arr[count].studentID >> arr[count].first_name >> arr[count].last_name >> arr[count].sem1>> arr[count].sem2 >> arr[count].sem3;
}
// Close input file
inFile.close();
// Get score total for each student
getTotal(arr);
// Determine grade for each student
getGrade(arr);
calcLowest(arr, lowest1, lowest2, lowest3, lowest4, lowest);
calcHighest(arr, highest1, highest2, highest3, highest4, highest);
getAverage(arr, SIZE, average1, average2, average3, average4, average);
// Calculate standard deviation of each category
getStd(arr, std1, std2, std3, std4, average1, average2, average3, average4, standardDeviation);
cout << " ";
// Print unsorted data
print(arr, lowest, highest, average, standardDeviation);
cout << " ";
// Sort data
sort(arr);
// Print sorted data
print(arr, lowest, highest, average, standardDeviation);
system("PAUSE");
return 0;
}
/**
* Pre-condition:
* Post-condition:
*/
void openInputFile(ifstream &inFile, string inFileName)
{
//Open the file
inFile.open(inFileName);
//Input validation
if (!inFile)
{
cout << "Error to open file." << endl;
cout << endl;
return;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getTotal(StudentData arr[])
{
for(int i = 0; i < SIZE; i++)
{
arr[i].total = arr[i].sem1 + arr[i].sem2 + arr[i].sem3;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getGrade(StudentData arr[])
{
for(int i = 0; i < SIZE; i++)
{
if(arr[i].total >= 270)
arr[i].ch = 'A';
else if(arr[i].total >= 240)
arr[i].ch = 'B';
else if(arr[i].total >= 210)
arr[i].ch = 'C';
else if(arr[i].total >= 180)
arr[i].ch = 'D';
else
arr[i].ch = 'F';
}
}
/**
* Pre-condition:
* Post-condition:
*/
void calcLowest(StudentData arr[], int &lowest1, int &lowest2, int &lowest3, int &lowest4, int lowest[])
{
int smallest = 0;
lowest1 = arr[0].sem1;
lowest2 = arr[0].sem2;
lowest3 = arr[0].sem3;
lowest4 = arr[0].total;
// Loop to determine lowest score from sem1, 2, 3, and Total
for (int i = 0; i < SIZE; i++)
{
if (lowest1 > arr[i].sem1)
{
lowest1 = arr[i].sem1;
smallest = i;
}
if (lowest2 > arr[i].sem2)
{
lowest2 = arr[i].sem2;
smallest = i;
}
if (lowest3 > arr[i].sem3)
{
lowest3 = arr[i].sem3;
smallest = i;
}
if (lowest4 > arr[i].total)
{
lowest4 = arr[i].total;
smallest = i;
}
}
// Loop lowest values into an array of size 4
for(int index = 0; index < INFO; index++)
{
if(index == 0)
lowest[0] = lowest1;
else if(index == 1)
lowest[1] = lowest2;
else if(index == 2)
lowest[2] = lowest3;
else if(index == 3)
lowest[3] = lowest4;
else
cout << "Fail!" << endl;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void calcHighest(StudentData arr[], int &highest1, int &highest2, int &highest3, int &highest4, int highest[])
{
int biggest = 0;
highest1 = arr[0].sem1;
highest2 = arr[0].sem2;
highest3 = arr[0].sem3;
highest4 = arr[0].total;
// Loop to determine highest score from sem1, 2, 3, and Total
for (int i = 0; i < SIZE; i++)
{
if (highest1 < arr[i].sem1)
{
highest1 = arr[i].sem1;
biggest = i;
}
if (highest2 < arr[i].sem2)
{
highest2 = arr[i].sem2;
biggest = i;
}
if (highest3 < arr[i].sem3)
{
highest3 = arr[i].sem3;
biggest = i;
}
if (highest4 < arr[i].total)
{
highest4 = arr[i].total;
biggest = i;
}
}
// Loop highest values into an array of size 4
for(int index = 0; index < INFO; index++)
{
if(index == 0)
highest[0] = highest1;
else if(index == 1)
highest[1] = highest2;
else if(index == 2)
highest[2] = highest3;
else if(index == 3)
highest[3] = highest4;
else
cout << "Fail!" << endl;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getAverage(StudentData arr[], int size, double &average1, double &average2, double &average3, double &average4, double average[])
{
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
// Get sum of each category (sem1, 2, 3, and Total)
for(int i = 0; i < SIZE; i++)
{
sum1 += arr[i].sem1;
sum2 += arr[i].sem2;
sum3 += arr[i].sem3;
sum4 += arr[i].total;
}
// Calculate average for each category
average1 += static_cast<double>(sum1)/size;
average2 += static_cast<double>(sum2)/size;
average3 += static_cast<double>(sum3)/size;
average4 += static_cast<double>(sum4)/size;
// Loop average values into an array of size 4
for(int index = 0; index < INFO; index++)
{
if(index == 0)
average[0] = average1;
else if(index == 1)
average[1] = average2;
else if(index == 2)
average[2] = average3;
else if(index == 3)
average[3] = average4;
else
cout << "Fail!" << endl;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getStd(StudentData arr[], double &std1, double &std2, double &std3, double &std4, double &average1, double &average2, double &average3, double &average4, double standardDeviation[])
{
double deviationSum1 = 0, deviationSum2 = 0, deviationSum3 = 0, deviationSum4 = 0;
for(int i = 0; i < SIZE; i++)
{
deviationSum1 += pow((arr[i].sem1 - average1), 2);
deviationSum2 += pow((arr[i].sem2 - average2), 2);
deviationSum3 += pow((arr[i].sem3 - average3), 2);
deviationSum4 += pow((arr[i].total - average4), 2);
}
std1 = sqrt(deviationSum1 / ((SIZE) - 1));
std2 = sqrt(deviationSum2 / ((SIZE) - 1));
std3 = sqrt(deviationSum3 / ((SIZE) - 1));
std4 = sqrt(deviationSum4 / ((SIZE) - 1));
// Loop average values into an array of size
for(int index = 0; index < INFO; index++)
{
if(index == 0)
standardDeviation[0] = std1;
else if(index == 1)
standardDeviation[1] = std2;
else if(index == 2)
standardDeviation[2] = std3;
else if(index == 3)
standardDeviation[3] = std4;
else
cout << "Fail!" << endl;
}
}
cout << " ";
}
/**
* Pre-condition:
* Post-condition:
*/
void sort(StudentData arr[])
{
StudentData temp;
for (int i = 0; i < (SIZE - 1); i++)
{
for (int j = i + 1; j < SIZE; j++)
{
if (arr[i].last_name > arr[j].last_name)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.