Yeabsira
Yeabsira
Yeabsira
SCIENCE
Programming ll
Individual Assignment
struct Course {
int code;
int semester;
int results;
};
struct Student {
std::string name;
int id;
int yearOfAdmission;
std::string department;
std::vector<Course> courses;
};
if (!file.is_open()) {
std::cout << "No existing data found. Creating a new file.\n";
return;
}
Student student;
while (file >> student.name >> student.id >>
student.yearOfAdmission >> student.department) {
int numCourses;
file >> numCourses;
student.courses.resize(numCourses);
1
for (int i = 0; i < numCourses; ++i) {
file >> student.courses[i].code >>
student.courses[i].semester >> student.courses[i].results;
}
students.push_back(student);
}
file.close();
}
if (!file.is_open()) {
std::cerr << "Error writing to file.\n";
return;
}
file.close();
}
2
void displayAllStudents(const std::vector<Student>& students) {
std::cout << std::left << std::setw(20) << "Name" << std::setw(5)
<< "ID"
<< std::setw(10) << "Year" << std::setw(15) <<
"Department\n";
if (index != -1) {
displayStudent(students[index]);
} else {
std::cout << "Student with ID " << studentId << " not found.\n";
}
}
if (index != -1) {
const Student& student = students[index];
std::cout << "Report for Student ID " << studentId << ":\n";
std::cout << std::setw(20) << "Name: " << student.name <<
"\n";
std::cout << std::setw(20) << "ID: " << student.id << "\n";
std::cout << std::setw(20) << "Year: " <<
student.yearOfAdmission << "\n";
std::cout << std::setw(20) << "Department: " <<
student.department << "\n";
3
double totalResults = 0;
if (!student.courses.empty()) {
double averageResults = totalResults /
student.courses.size();
std::cout << "\nAverage Results: " << std::fixed <<
std::setprecision(2) << averageResults << "\n";
}
} else {
std::cout << "Student with ID " << studentId << " not found.\n";
}
}
void viewSemesterResultsForSpecificStudent(const
std::vector<Student>& students, int studentId, int semester) {
int index = findStudentIndexById(students, studentId);
if (index != -1) {
const Student& student = students[index];
double totalResults = 0;
int coursesInSemester = 0;
4
if (coursesInSemester > 0) {
double averageResults = totalResults /
coursesInSemester;
std::cout << "\nAverage Results for Semester " <<
semester << ": " << std::fixed << std::setprecision(2) <<
averageResults << "\n";
} else {
std::cout << "No courses found for Semester " <<
semester << " for the given student.\n";
}
} else {
std::cout << "Student with ID " << studentId << " not found.\n";
}
}
int numCourses;
std::cout << "Enter the number of courses: ";
std::cin >> numCourses;
newStudent.courses.resize(numCourses);
std::cout << "Enter semester for course " << i + 1 << ": ";
std::cin >> newStudent.courses[i].semester;
std::cout << "Enter results for course " << i + 1 << ": ";
std::cin >> newStudent.courses[i].results;
}
5
students.push_back(newStudent);
int getUserChoice() {
int choice;
std::cout << "Enter your choice: ";
std::cin >> choice;
return choice;
}
int main() {
std::vector<Student> students;
readStudentsFromFile(students);
while (true) {
std::cout << "\nMenu:\n"
<< "1. Display all students\n"
<< "2. Display specific student\n"
<< "3. Show report for specific student\n"
<< "4. View semester results for specific student\n"
<< "5. Add new student\n"
<< "6. Exit\n";
switch (getUserChoice()) {
case 1:
displayAllStudents(students);
break;
case 2: {
int studentId;
std::cout << "Enter student ID: ";
std::cin >> studentId;
displaySpecificStudent(students, studentId);
break;
}
case 3: {
int studentId;
std::cout << "Enter student ID: ";
std::cin >> studentId;
showReportForSpecificStudent(students, studentId);
break;
}
6
case 4: {
int studentId, semester;
std::cout << "Enter student ID: ";
std::cin >> studentId;
std::cout << "Enter semester: ";
std::cin >> semester;
viewSemesterResultsForSpecificStudent(students,
studentId, semester);
break;
}
case 5:
addStudent(students);
break;
case 6:
writeAllStudentsToFile(students);
std::cout << "Exiting program.\n";
return 0;
default:
std::cout << "Invalid choice. Try again.\n";
// Clear input buffer
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
return 0;
}