Write a program that reads student names

Write a program that reads student names from a file followed by their test scores. The program should then output each student's name followed by the test score and the relevant grade. It should also print the highest test score and the name of students having the highest test scores.

Write a program that reads student names from a file followed by their test scores. The program should then output each student’s name followed by the test score and the relevant grade. It should also print the highest test score and the name of students having the highest test scores.

Specifically, write a code to:
•Read from the file (“student.dat”) and store in a struct variable of type studentType, which has four components: studentFName, and studentLName of type string, testScore of type int (between the range of 0 and 100), and grade of type char.

•Suppose the class has 20 students. Use any array of 20 components of type studenetType.

•Your program should contain the definition of the following functions:

1.A function to read the students’ data into the array
void getData(ifstream& inFile, studentType sList[], int listSize);

2.A function to assign the relevant grade to each student
void calculateGrade(studentType sList[], int listSize);

3.A function to find the highest test score
int highestScore(const studentType sList[], int listSize);

4.A function to print the name of the students having the highest test score.
void printResult(const studentType sList[], int listSize);

student.dat

Joe Doe
90
Susan F. Smith
95.5
Sam Grover
78
Diane C. Phelps
100
John Franklin
85
Derrick Myers
59


I'm using Dev-C++ to compile and run.

Here is my code, I can't get it to work properly with the 95.5 and middle initial in the name.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
//Include libraries

#include <iostream>

#include <string>

#include <fstream>

#include <iomanip>

//Use std namespace

using namespace std;

//Define a structure "studentType"

struct studentType

{

     //Declare variables

     string studentFName;
     string studentMName;

     string studentLName;
     

     int testScore;

     char grade;

};

/*Function Prototypes*/

void lgetData(ifstream& inFile, studentType sList[], int listSize);

void lcalculateGrade(studentType sList[], int listSize);

int lhighestScore(const studentType sList[], int listSize);

void lprintResult(const studentType sList[], int listSize);

//Define main function

int main()

{

     //Define in variable

     ifstream in;

     //Open student file

     in.open("student.dat");

     //If file can't be opened

     if(in.fail())            

     {

          //Display message

          cout<<"file did not open please check it\n";

          //Pause console window

          system("pause");

          //Exit

          system("exit");

     }

     //Define array

     studentType sList[30];

     //Call "lgetData()"

     lgetData(in,sList,6);

     //Call "lcalculateGrade()"

     lcalculateGrade(sList,6);

     //Call "lprintResult()"

     lprintResult(sList,6);

     //Close

     in.close();

     //Pause console window

     system("pause");

     //Return 0

     return 0;

}

//Define lgetData()

void lgetData(ifstream& inFile,studentType sList[],int listSize)

{

     //Declare variables

     int n=0;

     //Loop until list size

     while(n<listSize)

     {

          //Store data

inFile>>sList[n].studentLName>>sList[n].studentMName>>sList[n].studentFName>>sList[n].testScore;

          //Increment counter

          n++;

     }

}

//Define lcalculateGrade()

void lcalculateGrade(studentType sList[], int listSize)

{

     //Declare variable

     int i;

     //Loop until length

     for(i=0;i<listSize;i++)

     //If score less than 60

     if (sList[i].testScore<60)

     //Set grade

     sList[i].grade='F';

     //If score less than 70

     else if (sList[i].testScore<70)

     //Set grade

     sList[i].grade='D';

     //If score less than 80

     else if (sList[i].testScore<80)

     //Set grade

     sList[i].grade='C';

     //If score less than 90

     else if(sList[i].testScore<90)

     //Set grade

     sList[i].grade='B';

     //If score greater than 90

     else

     //Set grade

     sList[i].grade='A';     

}

//Define lhighestScore()

int lhighestScore(const studentType sList[], int listSize)

{

     //Declare variables

     int high=0,i;

     //Loop until length

     for(i=0;i<listSize;i++)

     //If high value is less than score

     if (high < sList[i].testScore )

     //Set score as high

     high=sList[i].testScore;

     //Return high

     return high;

}

//Define lprintResult()

void lprintResult(const studentType sList[], int listSize)

{

     //Display result

cout<<left<<setw(30)<<"Student Name"<<right<<setw(20)<<"TestScore"<<right<<setw(7)<<"Grade"<<endl;

     //Declare variables

     string name;

     int high,i;

     //Loop until length

     for(i=0;i<listSize;i++)

     {

          //Set name

          name=sList[i].studentLName+", "sList[i].studentMName", "+sList[i].studentFName;

          //Display message

cout<<left<<setw(30)<<name<<right<<setw(20)<<sList[i].testScore<<right<<setw(7)<<sList[i].grade<<endl;

     }

     //Set new line

     cout<<endl;

     //Call lhighestScore()

     high=lhighestScore(sList, listSize);

     //Display message

     cout<<"Highest Test Score: "<<high<<endl;

     //Display result

     cout<<"Students having the highest test score: "<<endl;

     //Loop until length

     for (int i=0; i < listSize; i++)

     //If score is high

     if (sList[i].testScore==high )

     //Display student name

cout<<sList[i].studentLName<<", "<<sList[i].studentMName<<", "<<sList[i].studentFName<<endl;

}
Last edited on
@adambrunell

testScore in your 'struct studentType', should be a float, or double, NOT an int. An int can only hold whole number, ones without a decimal point.
testScore is an int. When you try an read 95.5, the input operation will stop at the first character which is not valid for an int. i.e. the decimal point.
'
You have compile errors in the program you posted.

PLEASE USE CODE TAGS (the <> formatting button) when posting code.
It makes it easier to read your code and also easier to respond to your post.
http://www.cplusplus.com/articles/jEywvCM9/
Hint: You can edit your post, highlight your code and press the <> formatting button.



I did as you both said, I changed the int to a float in 'struct studentType', but the .5 just goes to the first name field in the results. I made it a double instead of float, and the same thing happened. The middle initial is still not being taken into consideration as well.

I am using Dev-C++, and I am not getting any errors after I compile.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
//Include libraries

#include <iostream>

#include <string>

#include <fstream>

#include <iomanip>

//Use std namespace

using namespace std;

//Define a structure "studentType"

struct studentType

{

     //Declare variables

     string studentFName;
     string studentMName;

     string studentLName;
     

     double testScore;

     char grade;

};

/*Function Prototypes*/

void lgetData(ifstream& inFile, studentType sList[], int listSize);

void lcalculateGrade(studentType sList[], int listSize);

int lhighestScore(const studentType sList[], int listSize);

void lprintResult(const studentType sList[], int listSize);

//Define main function

int main()

{

     //Define in variable

     ifstream in;

     //Open student file

     in.open("student.dat");

     //If file can't be opened

     if(in.fail())            

     {

          //Display message

          cout<<"file did not open please check it\n";

          //Pause console window

          system("pause");

          //Exit

          system("exit");

     }

     //Define array

     studentType sList[30];

     //Call "lgetData()"

     lgetData(in,sList,6);

     //Call "lcalculateGrade()"

     lcalculateGrade(sList,6);

     //Call "lprintResult()"

     lprintResult(sList,6);

     //Close

     in.close();

     //Pause console window

     system("pause");

     //Return 0

     return 0;

}

//Define lgetData()

void lgetData(ifstream& inFile,studentType sList[],int listSize)

{

     //Declare variables

     int n=0;

     //Loop until list size

     while(n<listSize)

     {

          //Store data

inFile>>sList[n].studentLName>>sList[n].studentMName>>sList[n].studentFName>>sList[n].testScore;

          //Increment counter

          n++;

     }

}

//Define lcalculateGrade()

void lcalculateGrade(studentType sList[], int listSize)

{

     //Declare variable

     int i;

     //Loop until length

     for(i=0;i<listSize;i++)

     //If score less than 60

     if (sList[i].testScore<60)

     //Set grade

     sList[i].grade='F';

     //If score less than 70

     else if (sList[i].testScore<70)

     //Set grade

     sList[i].grade='D';

     //If score less than 80

     else if (sList[i].testScore<80)

     //Set grade

     sList[i].grade='C';

     //If score less than 90

     else if(sList[i].testScore<90)

     //Set grade

     sList[i].grade='B';

     //If score greater than 90

     else

     //Set grade

     sList[i].grade='A';     

}

//Define lhighestScore()

int lhighestScore(const studentType sList[], int listSize)

{

     //Declare variables

     int high=0,i;

     //Loop until length

     for(i=0;i<listSize;i++)

     //If high value is less than score

     if (high < sList[i].testScore )

     //Set score as high

     high=sList[i].testScore;

     //Return high

     return high;

}

//Define lprintResult()

void lprintResult(const studentType sList[], int listSize)

{

     //Display result

cout<<left<<setw(30)<<"Student Name"<<right<<setw(20)<<"TestScore"<<right<<setw(7)<<"Grade"<<endl;

     //Declare variables

     string name;

     int high,i;

     //Loop until length

     for(i=0;i<listSize;i++)

     {

          //Set name

          name=sList[i].studentLName+", "sList[i].studentMName", "+sList[i].studentFName;

          //Display message

cout<<left<<setw(30)<<name<<right<<setw(20)<<sList[i].testScore<<right<<setw(7)<<sList[i].grade<<endl;

     }

     //Set new line

     cout<<endl;

     //Call lhighestScore()

     high=lhighestScore(sList, listSize);

     //Display message

     cout<<"Highest Test Score: "<<high<<endl;

     //Display result

     cout<<"Students having the highest test score: "<<endl;

     //Loop until length

     for (int i=0; i < listSize; i++)

     //If score is high

     if (sList[i].testScore==high )

     //Display student name

cout<<sList[i].studentLName<<", "<<sList[i].studentMName<<", "<<sList[i].studentFName<<endl;

}


Last edited on
You still have compile errors in your program.

Line 213: You're trying to assign a double to an int (high).

Line 245: is missing two + operators.

Line 85,89,93: Why are you assuming listSize is 6?

Line 127: Your input statement is going to cause problems for students that don't have a middle name.



I was able to get the code to work without a middle name in the .dat file. I'm trying to find examples of how to allow some middle initial names and some without, or to not even acknowledge the middle initial in the .dat file, maybe merge the first and middle name. I left the string for the middle name, but whenever I try to add it into the results or anywhere else it is never taken.

To answer AbstractionAnon:

Line 213: You're trying to assign a double to an int (high).
I'm a novice, I'm still learning. I took a basic course for C++ 3-4 years ago, so I'm trying to get back up on this. I have no clue why this doesn't work.

Line 245: is missing two + operators.
I realized that now, so I removed it, I know it is supposed to be the following, but I noticed it wasn't working when I added the fields I thought I needed. name=sList[i].studentLName+", "+sList[i].studentMName+ ", "+sList[i].studentFName;

Line 85,89,93: Why are you assuming listSize is 6?
I was informed from another person outside this site to put 6 because there are 6 people listed in the .dat file. If they are wrong, please let me know what it should be.

Line 127: Your input statement is going to cause problems for students that don't have a middle name.
Did not know that, I'm trying to get back into this, please provide example of correct way.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
//Include libraries

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <cstdlib>

//Use std namespace

using namespace std;

//Define a structure "studentType"

struct studentType

{

     //Declare variables

     string studentFName;
     string studentMName;
     string studentLName;
     double testScore;
     char grade;

};

/*Function Prototypes*/

void lgetData(ifstream& inFile, studentType sList[], int listSize);
void lcalculateGrade(studentType sList[], int listSize);
int lhighestScore(const studentType sList[], int listSize);
void lprintResult(const studentType sList[], int listSize);

//Define main function

int main()

{

     //Define in variable

     ifstream in;

     //Open student file

     in.open("student.dat");

     //If file can't be opened

     if(in.fail())            

     {

          //Display message

          cout<<"file did not open please check it\n";

          //Pause console window

          system("pause");

          //Exit

          system("exit");

     }

     //Define array

     studentType sList[20];

     //Call "lgetData()"

     lgetData(in,sList,6);

     //Call "lcalculateGrade()"

     lcalculateGrade(sList,6);

     //Call "lprintResult()"

     lprintResult(sList,6);

     //Close

     in.close();

     //Pause console window

     system("pause");

     //Return 0

     return 0;

}

//Define lgetData()

void lgetData(ifstream& inFile,studentType sList[],int listSize)

{

     //Declare variables

     int n=0;

     //Loop until list size

     while(n<listSize)

     {

          //Store data

inFile>>sList[n].studentLName>>sList[n].studentFName>>sList[n].testScore;

          //Increment counter

          n++;

     }

}

//Define lcalculateGrade()

void lcalculateGrade(studentType sList[], int listSize)

{

     //Declare variable

     int i;

     //Loop until length

     for(i=0;i<listSize;i++)

     //If score less than 60

     if (sList[i].testScore<60)

     //Set grade

     sList[i].grade='F';

     //If score less than 70

     else if (sList[i].testScore<70)

     //Set grade

     sList[i].grade='D';

     //If score less than 80

     else if (sList[i].testScore<80)

     //Set grade

     sList[i].grade='C';

     //If score less than 90

     else if(sList[i].testScore<90)

     //Set grade

     sList[i].grade='B';

     //If score greater than 90

     else

     //Set grade

     sList[i].grade='A';     

}

//Define lhighestScore()

int lhighestScore(const studentType sList[], int listSize)

{

     //Declare variables

     int high=0,i;

     //Loop until length

     for(i=0;i<listSize;i++)

     //If high value is less than score

     if (high < sList[i].testScore )

     //Set score as high

     high=sList[i].testScore;

     //Return high

     return high;

}

//Define lprintResult()

void lprintResult(const studentType sList[], int listSize)

{

     //Display result

cout<<left<<setw(30)<<"Student Name"<<right<<setw(10)<<"TestScore"<<right<<setw(7)<<"Grade"<<endl;

     //Declare variables

     string name;

     int high,i;

     //Loop until length

     for(i=0;i<listSize;i++)

     {

          //Set name

          name=sList[i].studentLName+", "+sList[i].studentFName;

          //Display message

cout<<left<<setw(30)<<name<<right<<setw(10)<<sList[i].testScore<<right<<setw(7)<<sList[i].grade<<endl;

     }

     //Set new line

     cout<<endl;

     //Call lhighestScore()

     high=lhighestScore(sList, listSize);

     //Display message

     cout<<"Highest Test Score: "<<high<<endl;

     //Display result

     cout<<"Students having the highest test score: "<<endl;

     //Loop until length

     for (int i=0; i < listSize; i++)

     //If score is high

     if (sList[i].testScore==high )

     //Display student name

cout<<sList[i].studentLName<<", "<<sList[i].studentFName<<endl;

}
I finished it, was able to get assistance. For anyone that needs this in the future this is the code,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
//Include libraries

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <sstream>

//Use std namespace

using namespace std;

//Define a structure "studentType"

struct studentType

{

	//Declare variables

	string studentFName;
	string studentMName;
	string studentLName;
	double testScore;
	char grade;

};

/*Function Prototypes*/

void lgetData(ifstream& inFile, studentType sList[], int listSize);
void lcalculateGrade(studentType sList[], int listSize);
int lhighestScore(const studentType sList[], int listSize);
void lprintResult(const studentType sList[], int listSize);

//Define main function

int main()

{

	//Define in variable

	ifstream in;

	//Open student file

	in.open("student.dat");

	//If file can't be opened

	if (in.fail())

	{

		//Display message

		cout << "file did not open please check it\n";

		//Pause console window

		system("pause");

		//Exit

		system("exit");

	}

	//Define array

	studentType sList[20];

	//Call "lgetData()"

	lgetData(in, sList, 6);

	//Call "lcalculateGrade()"

	lcalculateGrade(sList, 6);

	//Call "lprintResult()"

	lprintResult(sList, 6);

	//Close

	in.close();

	//Pause console window

	system("pause");

	//Return 0

	return 0;

}

//Define lgetData()

void lgetData(ifstream& inFile, studentType sList[], int listSize)
{

	//Declare variables

	int n = 0;

	//Loop until list size

	while (n<listSize)

	{

		//Store data
		string lineOfFile = "";
		getline(inFile, lineOfFile);
		istringstream iss(lineOfFile);
		if (lineOfFile != "") {
			int numWord = 1;
			do
			{
				std::string sub;
				iss >> sub;
				if (numWord == 1)
					sList[n].studentFName = sub;
				else if (numWord == 2)
					sList[n].studentMName = sub;
				else if (numWord == 3)
					sList[n].studentLName = sub;
				numWord++;
				//std::cout << "Substring: " << sub << std::endl;
			} while (!iss.eof());

			// means only 2 words were entered... example first and last
			if (numWord == 3) {
				sList[n].studentLName = sList[n].studentMName;
				sList[n].studentMName = "";
			}

			inFile >> sList[n].testScore;
			//inFile >> sList[n].studentLName >>  sList[n].studentFName >> sList[n].testScore;

			//Increment counter

			n++;
		}

	}

}

//Define lcalculateGrade()

void lcalculateGrade(studentType sList[], int listSize)

{

	//Declare variable

	int i;

	//Loop until length

	for (i = 0; i<listSize; i++)

		//If score less than 60

		if (sList[i].testScore<60)

			//Set grade

			sList[i].grade = 'F';

	//If score less than 70

		else if (sList[i].testScore<70)

			//Set grade

			sList[i].grade = 'D';

	//If score less than 80

		else if (sList[i].testScore<80)

			//Set grade

			sList[i].grade = 'C';

		//If score less than 90

		else if (sList[i].testScore<90)

			//Set grade

			sList[i].grade = 'B';

		//If score greater than 90

		else

			//Set grade

			sList[i].grade = 'A';

}

//Define lhighestScore()

int lhighestScore(const studentType sList[], int listSize)

{

	//Declare variables

	int high = 0, i;

	//Loop until length

	for (i = 0; i<listSize; i++)

		//If high value is less than score

		if (high < sList[i].testScore)

			//Set score as high

			high = sList[i].testScore;

	//Return high

	return high;

}

//Define lprintResult()

void lprintResult(const studentType sList[], int listSize)

{

	//Display result

	cout << left << setw(30) << "Student Name" << right << setw(10) << "TestScore" << right << setw(7) << "Grade" << endl;

	//Declare variables

	string name;

	int high, i;

	//Loop until length

	for (i = 0; i<listSize; i++)

	{

		//Set name

		name = sList[i].studentLName + " " + sList[i].studentMName + " " + sList[i].studentFName;

		//Display message

		cout << left << setw(30) << name << right << setw(10) << sList[i].testScore << right << setw(7) << sList[i].grade << endl;

	}

	//Set new line

	cout << endl;

	//Call lhighestScore()

	high = lhighestScore(sList, listSize);

	//Display message

	cout << "Highest Test Score: " << high << endl;

	//Display result

	cout << "Students having the highest test score: " << endl;

	//Loop until length

	for (int i = 0; i < listSize; i++)

		//If score is high

		if (sList[i].testScore == high)

			//Display student name

			cout << sList[i].studentLName << " " << sList[i].studentMName << " " << sList[i].studentFName << endl;

}
Last edited on
Topic archived. No new replies allowed.