Implement a program to manage a list of students using the Iterator interface in Java.
The
program should allow the user to perform the following operations:
Add a student to the list.
Remove a student from the list.
Display all students in the list.
Replace the grade of any student
Each student should have attributes like name, roll number, and grade. Implement a Student
class to represent a student, and a StudentManager class to manage the list of students
using iterators.
public class Student {
private String name;
private int rollNumber;
private String grade;
public Student(String name, int rollNumber, String grade) {
this.name = name;
this.rollNumber = rollNumber;
this.grade = grade;
public String getName() {
return name;
public int getRollNumber() {
return rollNumber;
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", rollNumber=" + rollNumber +
", grade='" + grade + '\'' +
'}';
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class StudentManager {
private List<Student> students;
public StudentManager() {
students = new ArrayList<>();
public void addStudent(Student student) {
students.add(student);
}
public void removeStudent(int rollNumber) {
Iterator<Student> iterator = students.iterator();
while (iterator.hasNext()) {
Student student = iterator.next();
if (student.getRollNumber() == rollNumber) {
iterator.remove();
System.out.println("Student with roll number " + rollNumber + " has been removed.");
return;
System.out.println("Student with roll number " + rollNumber + " not found.");
public void displayStudents() {
if (students.isEmpty()) {
System.out.println("No students in the list.");
} else {
for (Student student : students) {
System.out.println(student);
public void replaceGrade(int rollNumber, String newGrade) {
for (Student student : students) {
if (student.getRollNumber() == rollNumber) {
student.setGrade(newGrade);
System.out.println("Grade updated for student with roll number " + rollNumber + ".");
return;
}
System.out.println("Student with roll number " + rollNumber + " not found.");
public static void main(String[] args) {
StudentManager manager = new StudentManager();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("\nMenu:");
System.out.println("1. Add Student");
System.out.println("2. Remove Student");
System.out.println("3. Display All Students");
System.out.println("4. Replace Student Grade");
System.out.println("5. Exit");
System.out.print("Enter your choice: ");
int choice = scanner.nextInt();
scanner.nextLine(); // consume newline
switch (choice) {
case 1:
System.out.print("Enter student name: ");
String name = scanner.nextLine();
System.out.print("Enter roll number: ");
int rollNumber = scanner.nextInt();
scanner.nextLine(); // consume newline
System.out.print("Enter grade: ");
String grade = scanner.nextLine();
manager.addStudent(new Student(name, rollNumber, grade));
break;
case 2:
System.out.print("Enter roll number of student to remove: ");
int rollNumToRemove = scanner.nextInt();
manager.removeStudent(rollNumToRemove);
break;
case 3:
manager.displayStudents();
break;
case 4:
System.out.print("Enter roll number of student to update grade: ");
int rollNumToUpdate = scanner.nextInt();
scanner.nextLine(); // consume newline
System.out.print("Enter new grade: ");
String newGrade = scanner.nextLine();
manager.replaceGrade(rollNumToUpdate, newGrade);
break;
case 5:
System.out.println("Exiting program.");
scanner.close();
return;
default:
System.out.println("Invalid choice. Please try again.");
}
public class Employee {
private String name;
private int employeeID;
private double hourlyRate;
public Employee(String name, int employeeID, double hourlyRate) {
this.name = name;
this.employeeID = employeeID;
this.hourlyRate = hourlyRate;
public String getName() {
return name;
public int getEmployeeID() {
return employeeID;
public double getHourlyRate() {
return hourlyRate;
public void setHourlyRate(double hourlyRate) {
this.hourlyRate = hourlyRate;
public double calculateMonthlySalary() {
return 0;
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", employeeID=" + employeeID +
", hourlyRate=" + hourlyRate +
'}';
public class FullTimeEmployee extends Employee {
private double salary;
private String benefits;
public FullTimeEmployee(String name, int employeeID, double hourlyRate, double salary, String
benefits) {
super(name, employeeID, hourlyRate);
this.salary = salary;
this.benefits = benefits;
public double getSalary() {
return salary;
public void setSalary(double salary) {
this.salary = salary;
}
public String getBenefits() {
return benefits;
public void setBenefits(String benefits) {
this.benefits = benefits;
@Override
public double calculateMonthlySalary() {
return getSalary();
@Override
public String toString() {
return "FullTimeEmployee{" +
"name='" + getName() + '\'' +
", employeeID=" + getEmployeeID() +
", hourlyRate=" + getHourlyRate() +
", salary=" + salary +
", benefits='" + benefits + '\'' +
'}';
public class PartTimeEmployee extends Employee {
private int hoursWorked;
private double overtimeRate;
public PartTimeEmployee(String name, int employeeID, double hourlyRate, int hoursWorked,
double overtimeRate) {
super(name, employeeID, hourlyRate);
this.hoursWorked = hoursWorked;
this.overtimeRate = overtimeRate;
public int getHoursWorked() {
return hoursWorked;
public void setHoursWorked(int hoursWorked) {
this.hoursWorked = hoursWorked;
public double getOvertimeRate() {
return overtimeRate;
public void setOvertimeRate(double overtimeRate) {
this.overtimeRate = overtimeRate;
@Override
public double calculateMonthlySalary() {
int regularHours = Math.min(hoursWorked, 160); // Assuming 160 hours as a full month
int overtimeHours = Math.max(0, hoursWorked - 160);
return (regularHours * getHourlyRate()) + (overtimeHours * getOvertimeRate());
@Override
public String toString() {
return "PartTimeEmployee{" +
"name='" + getName() + '\'' +
", employeeID=" + getEmployeeID() +
", hourlyRate=" + getHourlyRate() +
", hoursWorked=" + hoursWorked +
", overtimeRate=" + overtimeRate +
'}';
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class EmployeeManager {
private List<Employee> employees;
public EmployeeManager() {
employees = new ArrayList<>();
public void addEmployee(Employee employee) {
employees.add(employee);
public void displayEmployees() {
if (employees.isEmpty()) {
System.out.println("No employees in the list.");
} else {
for (Employee employee : employees) {
System.out.println(employee);
public void calculateSalaries() {
if (employees.isEmpty()) {
System.out.println("No employees in the list.");
} else {
for (Employee employee : employees) {
System.out.println("Monthly salary of " + employee.getName() + ": " +
employee.calculateMonthlySalary());
public static void main(String[] args) {
EmployeeManager manager = new EmployeeManager();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("\nMenu:");
System.out.println("1. Add Full-Time Employee");
System.out.println("2. Add Part-Time Employee");
System.out.println("3. Display All Employees");
System.out.println("4. Calculate Salaries");
System.out.println("5. Exit");
System.out.print("Enter your choice: ");
int choice = scanner.nextInt();
scanner.nextLine(); // consume newline
switch (choice) {
case 1:
System.out.print("Enter full-time employee name: ");
String ftName = scanner.nextLine();
System.out.print("Enter employee ID: ");
int ftID = scanner.nextInt();
System.out.print("Enter hourly rate: ");
double ftHourlyRate = scanner.nextDouble();
System.out.print("Enter salary: ");
double ftSalary = scanner.nextDouble();
scanner.nextLine(); // consume newline
System.out.print("Enter benefits: ");
String benefits = scanner.nextLine();
manager.addEmployee(new FullTimeEmployee(ftName, ftID, ftHourlyRate, ftSalary,
benefits));
break;
case 2:
System.out.print("Enter part-time employee name: ");
String ptName = scanner.nextLine();
System.out.print("Enter employee ID: ");
int ptID = scanner.nextInt();
System.out.print("Enter hourly rate: ");
double ptHourlyRate = scanner.nextDouble();
System.out.print("Enter hours worked: ");
int hoursWorked = scanner.nextInt();
System.out.print("Enter overtime rate: ");
double overtimeRate = scanner.nextDouble();
manager.addEmployee(new PartTimeEmployee(ptName, ptID, ptHourlyRate,
hoursWorked, overtimeRate));
break;
case 3:
manager.displayEmployees();
break;
case 4:
manager.calculateSalaries();
break;
case 5:
System.out.println("Exiting program.");
scanner.close();
return;
default:
System.out.println("Invalid choice. Please try again.");