You are on page 1of 8

КУРСОВ ПРОЕКТ

по дисциплината „Обектно Ориентирано Програмиране”

част „Java“

студент ................................................................, фак.№........................

Подпис:.........................

Ръководител на проекта:..........................
/Елена Калчева/
Задание номер 2022049

1. Дефинирайте клас Person с полета за: номер, име и


образование, декларирани като private.
Напишете:
1) конструктор с параметър за инициализиране на полетата;
2) методи за достъп до полетата;
3) метод toString() за отпечатване на информация.

2. Декларирайте клас HourlyEmloyee (Служител с почасово


заплащане) като наследник на класа Person, с полета за
отработени часове (на месец) и часова ставка (почасово
заплащане), декларирани като private.
1) Добавете конструктор с 5 параметъра, за инициализация на
полетата.
2) Добавете метод monthPayment(), който връща като резултат:
Месечно заплащане = отработени часове*часова ставка
3) Предефинирайте метода toString(), който връща информация за
служител.

3. Декларирайте тестов клас Test с информация за служители


(използвайте динамичен списък ArrayList или масив).
1) В метода main() създайте 6 обекта от класа HourlyEmloyee, като
въвеждате различни данни от клавиатурата и ги добавяте в масива/ в
списъка. Проверявайте въведените данни, обработвайте
възникналите изключения.
2) Отпечатайте на екрана информация за всички служители с
почасово заплащане.
3) Определете и отпечатайте общата сума, която трябва да се
изплати за един месец на служителите с почасово заплащане.
Описание на използваните модули в кода:

1. **HourlyEmployee клас**:
- Прототип: `public class HourlyEmployee`
- Входни параметри: int number, String name, String education, double
hoursWorked, double hourlyPayRate
- Предназначение: Този клас представя информация за часовите служители.
Съдържа основни данни като идентификационен номер, име, образование,
работни часове и часова заплата. Също така включва методи за валидация на
входните данни и изчисляване на месечното възнаграждение.

2. **Test клас**:
- Прототип: `public class Test`
- Входни параметри: Няма
- Предназначение: Този клас е входната точка на програмата. Той създава
списък от часови служители, използвайки данните въведени от потребителя, и
извършва различни операции като извеждане на информация за всеки служител и
изчисляване на общото месечно възнаграждение за всички служители.

3. **ArrayList<HourlyEmployee> employees**:
- Прототип: `ArrayList<HourlyEmployee> employees`
- Входни параметри: Няма
- Предназначение: Този списък съхранява обектите от тип HourlyEmployee, които
представляват часовите служители, добавени от потребителя. Използва се за
управление на информацията за служителите в програмата.

4. **Scanner scanner**:
- Прототип: `Scanner scanner`
- Входни параметри: Няма
- Предназначение: Този обект от тип Scanner се използва за въвеждане на
данни от потребителя чрез конзолата. Използва се за четене на входните данни
за новите часови служители.

5. **for цикъл за въвеждане на данни**:


- Прототип: `for (int i = 0; i < 6; i++)`
- Входни параметри: Няма
- Предназначение: Този цикъл се използва за въвеждане на данни за 6 часови
служители от потребителя. Използва се за получаване на входната информация
за всеки служител.

6. **try-catch блок**:
- Прототип: `try { ... } catch (Exception e) { ... }`
- Входни параметри: Няма
- Предназначение: Използва се за обработка на възможни грешки при
въвеждането на данни за служителите. В случай на грешка, програмата извежда
съобщение за невалидни данни.
7. **for цикъл за извеждане на информация за служителите**:
- Прототип: `for (HourlyEmployee employee : employees)`
- Входни параметри: Няма
- Предназначение: Този цикъл се използва за обхождане на списъка с часови
служители и извеждане на информация за всеки от тях, както и изчисляване и
извеждане на месечното им възнаграждение.

8. **Изчисляване на общото месечно възнаграждение**:


- Прототип: `double totalPayment = 0; for (HourlyEmployee employee : employees)
{ totalPayment += employee.monthPayment(); }`
- Входни параметри: Няма
- Предназначение: Този код се използва за изчисляване на общото месечно
възнаграждение за всички часови служители. Изчисленията се правят като се
добавят месечните възнаграждения на всеки служител към общата сума. След
това се извежда резултатът.

Общо описание за функционирането на тестовия клас:

Тестовият клас представлява входната точка на програмата и управлява


основната логика за въвеждане на данни за часовите служители, обработката на
тези данни и извеждането на резултатите.

1. **Входни операции**:
- Потребителят въвежда следните данни за всеки часов служител:
- Номер на служителя (int)
- Име на служителя (String)
- Образование на служителя (String)
- Работни часове (double)
- Часова заплата (double)

2. **Изходни операции**:
- За всяко въведено от потребителя единица за часов служител:
- Програмата извежда информацията за служителя, включително неговия
номер, име, образование, работни часове и часова заплата.
- Изчислява месечното възнаграждение на служителя и го извежда.
- След като са въведени данните за всички служители, програмата изчислява
общото месечно възнаграждение за всички часови служители и го извежда.

Тестовият клас осигурява лесен и интуитивен начин за въвеждане на данни за


служителите и визуализиране на резултатите, което прави програмата удобна за
управление на информацията за часовите служители.
Листинг на source кода на програмата: по отделните класове
import java.util.ArrayList;
import java.util.Scanner;

public class Test {


public static void main(String[] args) {
ArrayList<HourlyEmployee> employees = new ArrayList<>();
Scanner scanner = new Scanner(System.in);

for (int i = 0; i < 6; i++) {


System.out.println("Enter employee number, name, education, hours
worked, and hourly pay rate:");
int number = scanner.nextInt();
String name = scanner.next();
String education = scanner.next();
double hoursWorked = scanner.nextDouble();
double hourlyPayRate = scanner.nextDouble();

try {
HourlyEmployee employee = new HourlyEmployee(number, name,
education, hoursWorked, hourlyPayRate);
employees.add(employee);
} catch (Exception e) {
System.out.println("Invalid input: " + e.getMessage());
}
}

// Print employee information


for (HourlyEmployee employee : employees) {
System.out.println(employee);
System.out.println("Monthly Payment: " + employee.monthPayment());
}

// Calculate total monthly payment


double totalPayment = 0;
for (HourlyEmployee employee : employees) {
totalPayment += employee.monthPayment();
}
System.out.println("Total monthly payment for hourly employees: " +
totalPayment);
}
}
public class Person {
private int number;
private String name;
private String education;

// Constructor with parameters for initializing fields


public Person(int number, String name, String education) {
this.number = number;
this.name = name;
this.education = education;
}

// Accessor methods for fields


public int getNumber() {
return number;
}

public String getName() {


return name;
}

public String getEducation() {


return education;
}

// toString() method for printing employee information


@Override
public String toString() {
return "Employee Number: " + number + ", Name: " + name + ",
Education: " + education;
}
}
public class HourlyEmployee extends Person {
private double hoursWorked;
private double hourlyPayRate;

// Constructor with 5 parameters for initializing fields


public HourlyEmployee(int number, String name, String education, double
hoursWorked, double hourlyPayRate) {
super(number, name, education);
this.hoursWorked = hoursWorked;
this.hourlyPayRate = hourlyPayRate;
}

// monthPayment() method for calculating monthly pay


public double monthPayment() {
return hoursWorked * hourlyPayRate;
}

// Overriding toString() method for printing hourly employee information


@Override
public String toString() {
return super.toString() + ", Hours Worked: " + hoursWorked + ", Hourly
Pay Rate: " + hourlyPayRate;
}
}

Контролни примери:

You might also like