You\'ve been asked to write a program to grade a multiple-choice exam. The exam
ID: 3883832 • Letter: Y
Question
You've been asked to write a program to grade a multiple-choice exam. The exam has 20 questions, each answered with a letter in the range of 'a' through 'f'. The data are stored on file (exams.dat) where the first line is the key, consisting of a string of 20 characters. The remaining lines on the file are exam answers: each consists of a student ID number, a space, and a string of 20 characters. The program should read the key, read each exam, and output the ID number and score to file scores.dat. Erroneous input should result in an error message. For example, given the data the program would output the following data on scores.dat: Use functional decomposition to solve the problem and code the solution using functions as appropriate. Be sure to use proper formatting and appropriate comments in your code. The output should be formatted neatly, and the error messages should be informative.Explanation / Answer
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
int main()
{
int ac,ch;
ifstream fin;
ofstream fout;
fin.open("exams.dat");
fout.open("scores.dat");
if (!fin)
{
cout << "Error: cannot open data file. Program aborting. ";
exit(1);
}
char temp[29];
fin >> temp;
char key[21];
int i=0;
while(temp[i]!='')
{
key[i]=temp[i];
i++;
}
while(fin)
{
i=0;
char temp[29];//maximum char could be 28
char rn[8];
fin >> temp;
while(temp[i]!='')
{
i++;
}
if(i==7)
{
fout<<temp<<" ";
i=0;
ac=0;
ch=0;
fin>>temp;
while(temp[i]!='')
{
if(i<=20 && temp[i]==key[i])ac++;
if(temp[i]<'a' || temp[i]>'f')ch++;
i++;
}
if(i<20 && ch==0)fout<<"too few answers"<<endl;
if(i>20 && ch==0)fout<<"too many answers"<<endl;
if(ch>0)fout<<"invalid answers"<<endl;
if(i==20)fout<<ac<<endl;
}
}
return 0;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.