-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
154 lines (112 loc) · 3.99 KB
/
main.cpp
File metadata and controls
154 lines (112 loc) · 3.99 KB
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
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cctype>
using namespace std;
// Convert grade to uppercase safely
string normalizeGrade(string g) {
for (char &c : g) {
c = toupper(c);
}
return g;
}
// Convert grade to grade points
double getGradePoint(string grade) {
if (grade == "A") return 4.0;
if (grade == "A-") return 3.7;
if (grade == "B+") return 3.3;
if (grade == "B") return 3.0;
if (grade == "B-") return 2.7;
if (grade == "C+") return 2.3;
if (grade == "C") return 2.0;
if (grade == "D") return 1.0;
if (grade == "F") return 0.0;
return -1;
}
int main() {
ofstream file("cgpa_report.txt");
if (!file) {
cout << "Error creating file!\n";
return 0;
}
int semesters;
cout << "Enter number of semesters: ";
if (!(cin >> semesters) || semesters <= 0) {
cout << "Invalid number of semesters.\n";
return 0;
}
double totalAllCredits = 0;
double totalAllGradePoints = 0;
cout << fixed << setprecision(2);
file << fixed << setprecision(2);
file << "============================\n";
file << " CGPA REPORT\n";
file << "============================\n\n";
for (int s = 1; s <= semesters; s++) {
cout << "\nSemester " << s << endl;
file << "\n============================\n";
file << "Semester " << s << "\n";
file << "============================\n";
int courses;
cout << "Enter number of courses in Semester " << s << ": ";
if (!(cin >> courses) || courses <= 0) {
cout << "Invalid number of courses.\n";
return 0;
}
double semesterCredits = 0;
double semesterGradePoints = 0;
for (int i = 1; i <= courses; i++) {
string grade;
double creditHours;
cout << "\nCourse " << i << endl;
cout << "Enter Grade (A, A-, B+ etc): ";
cin >> grade;
grade = normalizeGrade(grade);
double gradePoint = getGradePoint(grade);
if (gradePoint < 0) {
cout << "Invalid grade entered. Program stopped.\n";
return 0;
}
cout << "Credit Hours: ";
if (!(cin >> creditHours) || creditHours <= 0) {
cout << "Invalid credit hours.\n";
return 0;
}
double coursePoints = gradePoint * creditHours;
semesterCredits += creditHours;
semesterGradePoints += coursePoints;
cout << "Course " << i << " Points = " << coursePoints << endl;
file << "Course " << i
<< " | Grade: " << grade
<< " | Credit Hours: " << creditHours
<< " | Grade Point: " << gradePoint
<< " | Total Points: " << coursePoints << "\n";
}
if (semesterCredits == 0) {
cout << "Semester credits cannot be zero.\n";
return 0;
}
double semesterGPA = semesterGradePoints / semesterCredits;
cout << "Semester GPA: " << semesterGPA << endl;
file << "\nSemester Credits: " << semesterCredits << "\n";
file << "Semester Grade Points: " << semesterGradePoints << "\n";
file << "Semester GPA: " << semesterGPA << "\n";
totalAllCredits += semesterCredits;
totalAllGradePoints += semesterGradePoints;
}
if (totalAllCredits == 0) {
cout << "No valid data to calculate CGPA.\n";
return 0;
}
double cgpa = totalAllGradePoints / totalAllCredits;
cout << "\nFINAL CGPA: " << cgpa << endl;
file << "\n============================\n";
file << "FINAL SUMMARY\n";
file << "============================\n";
file << "Total Credits: " << totalAllCredits << "\n";
file << "Total Grade Points: " << totalAllGradePoints << "\n";
file << "Final CGPA: " << cgpa << "\n";
file.close();
cout << "\nReport saved as cgpa_report.txt\n";
return 0;
}