Merge pull request #44 from TiagoRG/dev-tiagorg
[POO] aula05 DateYMD update [POO] added DateYMD to utils [POO] aula06 ex1 added [POO] aula06 guide added [POO] created validations [POO] aula06 ex2 added [POO] removed regex for names [POO] README update [POO] aula06 ex3 added
This commit is contained in:
commit
95d5aa651e
Binary file not shown.
|
@ -71,7 +71,7 @@ public class DateYMD {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format("%04d-%02d-%02d", year, month, day);
|
return String.format("%04d-%02d-%02d", this.year, this.month, this.day);
|
||||||
}
|
}
|
||||||
static boolean validMonth(int month) {
|
static boolean validMonth(int month) {
|
||||||
return month >= 1 && month <= 12;
|
return month >= 1 && month <= 12;
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
# Programação Orientada a Objetos
|
# Programação Orientada a Objetos
|
||||||
## Aula 05
|
## Aula 05
|
||||||
### Tópico principal da aula: Inheritance
|
### Tópico principal da aula: Classes
|
||||||
|
|
||||||
* [Guião](https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/guides/POO-2022-aula05.pdf)
|
* [Guião](https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/guides/POO-2022-aula05.pdf)
|
||||||
* [Slides](https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/slides/POO_03_Classes.pdf)
|
* [Slides](https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/slides/POO_03_Classes.pdf)
|
||||||
|
|
||||||
### Exercise List
|
### Exercise List
|
||||||
| Exercise Number | File Name |
|
| Exercise Number | File Name |
|
||||||
|-----------------|----------------------------------------------------------------------------------------------------------------|
|
|-----------------|------------------------------------------------------------------------------------------------------------------------|
|
||||||
| 1 | [DateYMD.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula05/DateYMD.java) |
|
| 1 | [DateYMD.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula05/DateYMD.java) |
|
||||||
|
| 2 | [Calendar.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula05/Calendar.java) |
|
||||||
|
| 3 | [AuctionDemo.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula05/AuctionDemo.java) |
|
||||||
|
|
||||||
---
|
---
|
||||||
*Pode conter erros, caso encontre algum, crie um* [*ticket*](https://github.com/TiagoRG/uaveiro-leci/issues/new)
|
*Pode conter erros, caso encontre algum, crie um* [*ticket*](https://github.com/TiagoRG/uaveiro-leci/issues/new)
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
import utils.DateYMD;
|
||||||
|
|
||||||
|
public class Bolser extends Student{
|
||||||
|
private Professor supervisor;
|
||||||
|
private double monthlyAmount;
|
||||||
|
|
||||||
|
public Bolser(String name, int cc, DateYMD birthDate, DateYMD registrationDate, Professor supervisor, double monthlyAmount) {
|
||||||
|
super(name, cc, birthDate, registrationDate);
|
||||||
|
this.setSupervisor(supervisor);
|
||||||
|
this.setMonthlyAmount(monthlyAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bolser(String name, int cc, DateYMD birthDate, Professor supervisor, double monthlyAmount) {
|
||||||
|
this(name, cc, birthDate, null, supervisor, monthlyAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Professor getSupervisor() {
|
||||||
|
return this.supervisor;
|
||||||
|
}
|
||||||
|
public void setSupervisor(Professor supervisor) {
|
||||||
|
if (supervisor == null) {
|
||||||
|
throw new IllegalArgumentException("Supervisor cannot be null");
|
||||||
|
}
|
||||||
|
this.supervisor = supervisor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMonthlyAmount() {
|
||||||
|
return this.monthlyAmount;
|
||||||
|
}
|
||||||
|
public void setMonthlyAmount(double monthlyAmount) {
|
||||||
|
if (monthlyAmount < 0) {
|
||||||
|
throw new IllegalArgumentException("Monthly amount cannot be negative");
|
||||||
|
}
|
||||||
|
this.monthlyAmount = monthlyAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s; CC: %d; Date de nascimento: %s; Data de matrícula: %s; NMec: %d; Supervisor: %s; Montante mensal: %.2f", this.getName(), this.getCc(), this.getBirthDate(), this.getRegistrationDate(), this.getNMec(), this.supervisor, this.monthlyAmount);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
public class Contact {
|
||||||
|
private final int id;
|
||||||
|
private Person person;
|
||||||
|
private String email;
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
private static int currentId = 1;
|
||||||
|
|
||||||
|
public Contact(Person person, String email, String phone) {
|
||||||
|
if (email == null || email.isEmpty() || phone == null || phone.isEmpty())
|
||||||
|
throw new IllegalArgumentException("Either email or phone must be provided");
|
||||||
|
this.id = Contact.currentId++;
|
||||||
|
this.setPerson(person);
|
||||||
|
this.setEmail(email);
|
||||||
|
this.setPhone(phone);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Person getPerson() {
|
||||||
|
return person;
|
||||||
|
}
|
||||||
|
public void setPerson(Person person) {
|
||||||
|
if (person == null)
|
||||||
|
throw new IllegalArgumentException("Person must be provided");
|
||||||
|
this.person = person;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
public void setEmail(String email) {
|
||||||
|
if (!email.matches("^[a-zA-Z_0-9.]+@[a-zA-Z_0-9.]+\\.[a-zA-Z_0-9]+$"))
|
||||||
|
throw new IllegalArgumentException("Invalid email");
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhone() {
|
||||||
|
return phone;
|
||||||
|
}
|
||||||
|
public void setPhone(String phone) {
|
||||||
|
if (!phone.matches("^9[0-9]{8}$"))
|
||||||
|
throw new IllegalArgumentException("Invalid phone");
|
||||||
|
this.phone = phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("ID: %d%nPerson: %s%nEmail: %s%nPhone: %s", this.id, this.person, this.email, this.phone);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,177 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
import utils.DateYMD;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
public class ContactList {
|
||||||
|
private static final Scanner sin = new Scanner(System.in);
|
||||||
|
private static Contact[] contacts;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
System.out.println("Selecione uma opção:");
|
||||||
|
System.out.println("1. Inserir contacto");
|
||||||
|
System.out.println("2. Alterar contacto");
|
||||||
|
System.out.println("3. Apagar contacto");
|
||||||
|
System.out.println("4. Procurar contacto");
|
||||||
|
System.out.println("5. Listar contactos");
|
||||||
|
System.out.println("0. Sair");
|
||||||
|
System.out.print("> ");
|
||||||
|
String option = sin.nextLine();
|
||||||
|
switch (option) {
|
||||||
|
case "0" -> {
|
||||||
|
sin.close();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
case "1" -> {
|
||||||
|
System.out.print("Insira o nome: ");
|
||||||
|
String name = sin.nextLine();
|
||||||
|
System.out.print("Insira o cc: ");
|
||||||
|
String ccStr = sin.nextLine();
|
||||||
|
int cc = Integer.parseInt(ccStr);
|
||||||
|
System.out.print("Insira a data de nascimento (formado: dd-mm-yyyy): ");
|
||||||
|
String date = sin.nextLine();
|
||||||
|
String[] dateParts = date.split("-");
|
||||||
|
DateYMD birthDate = new DateYMD(Integer.parseInt(dateParts[0]), Integer.parseInt(dateParts[1]), Integer.parseInt(dateParts[2]));
|
||||||
|
System.out.print("Insira o email: ");
|
||||||
|
String email = sin.nextLine();
|
||||||
|
System.out.print("Insira o telefone: ");
|
||||||
|
String phone = sin.nextLine();
|
||||||
|
Person person = new Person(name, cc, birthDate);
|
||||||
|
|
||||||
|
Contact contact = new Contact(person, email, phone);
|
||||||
|
|
||||||
|
if (contacts == null) {
|
||||||
|
contacts = new Contact[1];
|
||||||
|
contacts[0] = contact;
|
||||||
|
} else {
|
||||||
|
if (checkIfContactExists(cc)) break;
|
||||||
|
Contact[] newContacts = new Contact[contacts.length + 1];
|
||||||
|
System.arraycopy(contacts, 0, newContacts, 0, contacts.length);
|
||||||
|
newContacts[contacts.length] = contact;
|
||||||
|
contacts = newContacts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "2" -> {
|
||||||
|
System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: ");
|
||||||
|
String query = sin.nextLine();
|
||||||
|
int[] indexes = searchContactsIndex(query);
|
||||||
|
System.out.printf("Contactos encontrados: %d%n", indexes.length);
|
||||||
|
|
||||||
|
if (indexes.length == 0) {
|
||||||
|
System.out.println("Não foram encontrados contactos com esse nome, email ou telefone");
|
||||||
|
} else if (indexes.length == 1) {
|
||||||
|
System.out.printf("Alterando contacto: %s%n", contacts[indexes[0]]);
|
||||||
|
System.out.print("Insira o novo telefone: ");
|
||||||
|
String phone = sin.nextLine();
|
||||||
|
System.out.print("Insira o novo email: ");
|
||||||
|
String email = sin.nextLine();
|
||||||
|
contacts[indexes[0]].setPhone(phone);
|
||||||
|
contacts[indexes[0]].setEmail(email);
|
||||||
|
} else {
|
||||||
|
Contact contact = selectContact(indexes);
|
||||||
|
System.out.printf("Alterando contacto: %s%n", contact);
|
||||||
|
System.out.print("Insira o novo telefone: ");
|
||||||
|
String phone = sin.nextLine();
|
||||||
|
System.out.print("Insira o novo email: ");
|
||||||
|
String email = sin.nextLine();
|
||||||
|
contact.setPhone(phone);
|
||||||
|
contact.setEmail(email);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "3" -> {
|
||||||
|
System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: ");
|
||||||
|
String query = sin.nextLine();
|
||||||
|
int[] indexes = searchContactsIndex(query);
|
||||||
|
System.out.printf("Contactos encontrados: %d%n", indexes.length);
|
||||||
|
|
||||||
|
if (indexes.length == 0) {
|
||||||
|
System.out.println("Não foram encontrados contactos com esse nome, email ou telefone");
|
||||||
|
} else if (indexes.length == 1) {
|
||||||
|
System.out.printf("Apagando contacto: %s%n", contacts[indexes[0]]);
|
||||||
|
Contact[] newContacts = new Contact[contacts.length - 1];
|
||||||
|
System.arraycopy(contacts, 0, newContacts, 0, indexes[0]);
|
||||||
|
System.arraycopy(contacts, indexes[0] + 1, newContacts, indexes[0], contacts.length - indexes[0] - 1);
|
||||||
|
contacts = newContacts;
|
||||||
|
} else {
|
||||||
|
Contact contact = selectContact(indexes);
|
||||||
|
System.out.printf("Apagando contacto: %s%n", contact);
|
||||||
|
Contact[] newContacts = new Contact[contacts.length - 1];
|
||||||
|
System.arraycopy(contacts, 0, newContacts, 0, contact.getId());
|
||||||
|
System.arraycopy(contacts, contact.getId() + 1, newContacts, contact.getId(), contacts.length - contact.getId() - 1);
|
||||||
|
contacts = newContacts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "4" -> {
|
||||||
|
System.out.print("Insira o nome, email ou telefone do contacto que pretende alterar: ");
|
||||||
|
String query = sin.nextLine();
|
||||||
|
int[] indexes = searchContactsIndex(query);
|
||||||
|
System.out.printf("Contactos encontrados: %d%n", indexes.length);
|
||||||
|
|
||||||
|
if (indexes.length == 0) {
|
||||||
|
System.out.println("Não foram encontrados contactos com esse nome, email ou telefone");
|
||||||
|
} else if (indexes.length == 1) {
|
||||||
|
System.out.println(contacts[indexes[0]]);
|
||||||
|
} else {
|
||||||
|
for (int index : indexes)
|
||||||
|
System.out.printf("%s%n", contacts[index]);
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
case "5" -> {
|
||||||
|
for (Contact contact : contacts)
|
||||||
|
System.out.printf("%s%n", contact);
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
default -> System.out.println("Opção inválida!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean checkIfContactExists(int cc) {
|
||||||
|
for (Contact c : contacts) {
|
||||||
|
if (c.getPerson().getCc() == cc) {
|
||||||
|
System.out.print("Já existe um contacto para essa pessoa, pretende criar um novo? (s/n): ");
|
||||||
|
String answer = sin.nextLine();
|
||||||
|
return answer.equals("s");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int[] searchContactsIndex(String query) {
|
||||||
|
int[] indexes = new int[contacts.length];
|
||||||
|
int index = 0;
|
||||||
|
for (int i = 0; i < contacts.length; i++) {
|
||||||
|
if (contacts[i].getPerson().getName().contains(query) || contacts[i].getEmail().contains(query) || contacts[i].getPhone().contains(query)) {
|
||||||
|
indexes[index] = i;
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return indexes;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Contact selectContact(int[] indexes) {
|
||||||
|
System.out.println("Foram encontrados vários contactos com esse nome, email ou telefone, selecione um:");
|
||||||
|
for (int index : indexes)
|
||||||
|
System.out.printf("%s%n", contacts[index]);
|
||||||
|
|
||||||
|
Contact contact;
|
||||||
|
do {
|
||||||
|
System.out.print("Insira o ID do contacto que pretende alterar: ");
|
||||||
|
int index = sin.nextInt();
|
||||||
|
contact = searchContactById(index);
|
||||||
|
} while (contact == null);
|
||||||
|
|
||||||
|
return contact;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Contact searchContactById(int id) {
|
||||||
|
for (Contact contact : contacts) {
|
||||||
|
if (contact.getId() == id) return contact;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
import utils.DateYMD;
|
||||||
|
|
||||||
|
public class Person {
|
||||||
|
private String name;
|
||||||
|
private int cc;
|
||||||
|
private DateYMD birthDate;
|
||||||
|
|
||||||
|
public Person(String name, int cc, DateYMD birthDate) {
|
||||||
|
this.setName(name);
|
||||||
|
this.setCc(cc);
|
||||||
|
this.setBirthDate(birthDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
public void setName(String name) {
|
||||||
|
if (name == null || name.isEmpty())
|
||||||
|
throw new IllegalArgumentException("Name cannot be null or empty");
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCc() {
|
||||||
|
return this.cc;
|
||||||
|
}
|
||||||
|
public void setCc(int cc) {
|
||||||
|
if (String.valueOf(cc).length() != 8)
|
||||||
|
throw new IllegalArgumentException("CC must have 8 digits");
|
||||||
|
this.cc = cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DateYMD getBirthDate() {
|
||||||
|
return this.birthDate;
|
||||||
|
}
|
||||||
|
public void setBirthDate(DateYMD birthDate) {
|
||||||
|
if (birthDate == null)
|
||||||
|
throw new IllegalArgumentException("Birth date cannot be null");
|
||||||
|
this.birthDate = birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s; CC: %d; Data de nascimento: %s", this.name, this.cc, this.birthDate);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
import utils.DateYMD;
|
||||||
|
|
||||||
|
public class PersonTest {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Scanner sin = new Scanner(System.in);
|
||||||
|
|
||||||
|
Student al = new Student ("Andreia Melo", 98556781,new DateYMD(18, 7, 1990), new DateYMD(1, 9, 2018));
|
||||||
|
Professor p1 = new Professor("Jorge Almeida", 34672215, new DateYMD(13, 3, 1967), "Associado", "Informática");
|
||||||
|
Bolser bls = new Bolser ("Igor Santos", 89765431, new DateYMD(11, 5, 1985), p1, 900);
|
||||||
|
bls.setMonthlyAmount(1050);
|
||||||
|
System.out.println("Student:"+ al.getName());
|
||||||
|
System.out.println(al);
|
||||||
|
System.out.println("Bolser:"+ bls.getName() + ", NMec: " + bls.getNMec() + ", Bolsa:" + bls.getMonthlyAmount()+ ", Orientador:" + bls.getSupervisor());
|
||||||
|
System.out.println(bls);
|
||||||
|
|
||||||
|
sin.close();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
import utils.DateYMD;
|
||||||
|
|
||||||
|
public class Professor extends Person {
|
||||||
|
private String category;
|
||||||
|
private String department;
|
||||||
|
|
||||||
|
public Professor(String name, int cc, DateYMD birthDate, String category, String department) {
|
||||||
|
super(name, cc, birthDate);
|
||||||
|
this.setCategory(category);
|
||||||
|
this.setDepartment(department);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCategory() {
|
||||||
|
return this.category;
|
||||||
|
}
|
||||||
|
public void setCategory(String category) {
|
||||||
|
if (category == null || category.isEmpty())
|
||||||
|
throw new IllegalArgumentException("Category cannot be null or empty");
|
||||||
|
if (!(category.equals("Auxiliar") || category.equals("Associado") || category.equals("Catedrático")))
|
||||||
|
throw new IllegalArgumentException("Invalid category");
|
||||||
|
this.category = category;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDepartment() {
|
||||||
|
return this.department;
|
||||||
|
}
|
||||||
|
public void setDepartment(String department) {
|
||||||
|
if (department == null || department.isEmpty())
|
||||||
|
throw new IllegalArgumentException("Department cannot be null or empty");
|
||||||
|
this.department = department;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s; CC: %d; Date de nascimento: %s; Categoria: %s; Departamento: %s", this.getName(), this.getCc(), this.getBirthDate(), this.category, this.department);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Programação Orientada a Objetos
|
||||||
|
## Aula 06
|
||||||
|
### Tópico principal da aula: Inheritance
|
||||||
|
|
||||||
|
* [Guião](https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/guides/POO-2022-aula06.pdf)
|
||||||
|
* [Slides](https://github.com/TiagoRG/uaveiro-leci/tree/master/1ano/2semestre/poo/slides/POO_04_Herança.pdf)
|
||||||
|
|
||||||
|
### Exercise List
|
||||||
|
| Exercise Number | Files Name |
|
||||||
|
|-----------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| 1 | [PersonTest.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/PersonTest.java)<br/>[Person.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/Person.java)<br/>[Student.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/Student.java)<br/>[Professor.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/Professor.java)<br/>[Bolser.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/Bolser.java) |
|
||||||
|
| 2 | [Contact.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/Contact.java)<br/>[ContactList.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/ContactList.java) |
|
||||||
|
| 3 | [Vector.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/Vector.java)<br/>[VectorTest.java](https://github.com/TiagoRG/uaveiro-leci/blob/master/1ano/2semestre/poo/src/aula06/VectorTest.java) |
|
||||||
|
|
||||||
|
---
|
||||||
|
*Pode conter erros, caso encontre algum, crie um* [*ticket*](https://github.com/TiagoRG/uaveiro-leci/issues/new)
|
|
@ -0,0 +1,40 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
import utils.DateYMD;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public class Student extends Person {
|
||||||
|
private DateYMD registrationDate;
|
||||||
|
private int nMec;
|
||||||
|
public static int currentNMec = 100;
|
||||||
|
|
||||||
|
public Student(String name, int cc, DateYMD birthDate, DateYMD registrationDate) {
|
||||||
|
super(name, cc, birthDate);
|
||||||
|
this.setRegistrationDate(registrationDate);
|
||||||
|
this.setNMec(Student.currentNMec++);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Student(String name, int age, DateYMD birthDate) {
|
||||||
|
this(name, age, birthDate, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNMec() {
|
||||||
|
return this.nMec;
|
||||||
|
}
|
||||||
|
public void setNMec(int nMec) {
|
||||||
|
this.nMec = nMec;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DateYMD getRegistrationDate() {
|
||||||
|
return this.registrationDate;
|
||||||
|
}
|
||||||
|
public void setRegistrationDate(DateYMD registrationDate) {
|
||||||
|
LocalDate now = LocalDate.now();
|
||||||
|
this.registrationDate = registrationDate == null ? new DateYMD(now.getDayOfMonth(), now.getMonthValue(), now.getYear()) : registrationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%s; CC: %d; Date de nascimento: %s; Data de matrícula: %s; NMec: %d", this.getName(), this.getCc(), this.getBirthDate(), this.registrationDate, this.nMec);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,95 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
public class Vector {
|
||||||
|
private int[] vector;
|
||||||
|
|
||||||
|
// Constructors and main getter
|
||||||
|
public Vector() {
|
||||||
|
this.vector = new int[0];
|
||||||
|
}
|
||||||
|
public Vector(int size) {
|
||||||
|
this.vector = new int[size];
|
||||||
|
}
|
||||||
|
public Vector(int[] vector) {
|
||||||
|
this.vector = vector;
|
||||||
|
}
|
||||||
|
public int[] getVector() {
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
public int size() {
|
||||||
|
return this.vector.length;
|
||||||
|
}
|
||||||
|
public boolean contains(int value) {
|
||||||
|
for (int n : this.vector)
|
||||||
|
if (n == value)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public int count(int value) {
|
||||||
|
int count = 0;
|
||||||
|
for (int n : this.vector)
|
||||||
|
if (n == value)
|
||||||
|
count++;
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method to change values
|
||||||
|
public void insert(int value) {
|
||||||
|
if (this.contains(value)) return;
|
||||||
|
int[] aux = new int[this.size()+1];
|
||||||
|
System.arraycopy(this.vector, 0, aux, 0, this.size());
|
||||||
|
aux[this.size()] = value;
|
||||||
|
this.vector = aux;
|
||||||
|
}
|
||||||
|
public void remove(int value) {
|
||||||
|
int[] aux = new int[this.size()-this.count(value)];
|
||||||
|
int i = 0;
|
||||||
|
for (int n : this.vector) {
|
||||||
|
if (n == value)
|
||||||
|
continue;
|
||||||
|
aux[i] = n;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
this.vector = aux;
|
||||||
|
}
|
||||||
|
public void empty() {
|
||||||
|
this.vector = new int[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Interact with other vectors
|
||||||
|
public Vector add(Vector secondVector) {
|
||||||
|
Vector result = new Vector();
|
||||||
|
for (int n : this.vector)
|
||||||
|
if (!result.contains(n))
|
||||||
|
result.insert(n);
|
||||||
|
for (int n : secondVector.vector)
|
||||||
|
if (!result.contains(n))
|
||||||
|
result.insert(n);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public Vector subtract(Vector secondVector) {
|
||||||
|
Vector result = new Vector();
|
||||||
|
for (int n : this.vector)
|
||||||
|
if (!result.contains(n) && !secondVector.contains(n))
|
||||||
|
result.insert(n);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
public Vector intersect(Vector secondVector) {
|
||||||
|
Vector result = new Vector();
|
||||||
|
for (int n : this.vector)
|
||||||
|
if (!result.contains(n) && secondVector.contains(n))
|
||||||
|
result.insert(n);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToString
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder result = new StringBuilder();
|
||||||
|
for (int n : this.vector)
|
||||||
|
result.append(String.format("%d ", n));
|
||||||
|
return this.size() > 0 ? result.substring(0, result.length()-1) : result.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package aula06;
|
||||||
|
|
||||||
|
|
||||||
|
public class VectorTest {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Vector c1 = new Vector();
|
||||||
|
c1.insert(4); c1.insert(7); c1.insert(6); c1.insert(5);
|
||||||
|
|
||||||
|
Vector c2 = new Vector();
|
||||||
|
int[] test = { 7, 3, 2, 5, 4, 6, 7};
|
||||||
|
for (int el : test) c2.insert(el);
|
||||||
|
c2.remove(3); c2.remove(5); c2.remove(6);
|
||||||
|
|
||||||
|
System.out.println(c1);
|
||||||
|
System.out.println(c2);
|
||||||
|
|
||||||
|
System.out.println("Número de elementos em c1: " + c1.size());
|
||||||
|
System.out.println("Número de elementos em c2: " + c2.size());
|
||||||
|
|
||||||
|
System.out.println("c1 contém 6?: " + ((c1.contains(6) ? "sim" : "não")));
|
||||||
|
System.out.println("c2 contém 6?: " + ((c2.contains(6) ? "sim" : "não")));
|
||||||
|
|
||||||
|
System.out.println("União:" + c1.add(c2));
|
||||||
|
System.out.println("Interseção:" + c1.intersect(c2));
|
||||||
|
System.out.println("Diferença:" + c1.subtract(c2));
|
||||||
|
|
||||||
|
c1.empty();
|
||||||
|
System.out.println("c1:" + c1);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
package utils;
|
||||||
|
|
||||||
|
public class DateYMD {
|
||||||
|
private int day;
|
||||||
|
private int month;
|
||||||
|
private int year;
|
||||||
|
|
||||||
|
public DateYMD(int day, int month, int year) {
|
||||||
|
if (!validDate(day, month, year))
|
||||||
|
throw new IllegalArgumentException("Invalid date");
|
||||||
|
this.day = day;
|
||||||
|
this.month = month;
|
||||||
|
this.year = year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(int day, int month, int year) {
|
||||||
|
if (!validDate(day, month, year))
|
||||||
|
throw new IllegalArgumentException("Invalid date");
|
||||||
|
this.day = day;
|
||||||
|
this.month = month;
|
||||||
|
this.year = year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int[] get() {
|
||||||
|
return new int[]{this.day, this.month, this.year};
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDay() {
|
||||||
|
return day;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMonth() {
|
||||||
|
return month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getYear() {
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void increment() {
|
||||||
|
if (this.day < monthDays(this.month, this.year))
|
||||||
|
this.day++;
|
||||||
|
else if (this.month < 12) {
|
||||||
|
this.day = 1;
|
||||||
|
this.month++;
|
||||||
|
} else {
|
||||||
|
this.day = 1;
|
||||||
|
this.month = 1;
|
||||||
|
this.year++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDays(int days) {
|
||||||
|
for (int i = 0; i < days; i++)
|
||||||
|
this.increment();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decrement() {
|
||||||
|
if (this.day > 1)
|
||||||
|
this.day--;
|
||||||
|
else if (this.month > 1) {
|
||||||
|
this.day = monthDays(this.month - 1, this.year);
|
||||||
|
this.month--;
|
||||||
|
} else {
|
||||||
|
this.day = 31;
|
||||||
|
this.month = 12;
|
||||||
|
this.year--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return String.format("%04d-%02d-%02d", this.year, this.month, this.day);
|
||||||
|
}
|
||||||
|
static boolean validMonth(int month) {
|
||||||
|
return month >= 1 && month <= 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int monthDays(int month, int year) {
|
||||||
|
if (!validMonth(month))
|
||||||
|
return -1;
|
||||||
|
int[] daysPerMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||||
|
if (month == 2 && isLeapYear(year))
|
||||||
|
return 29;
|
||||||
|
return daysPerMonth[month - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
static boolean isLeapYear(int year) {
|
||||||
|
return year % 100 == 0 ? year % 400 == 0 : year % 4 == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean validDate(int day, int month, int year) {
|
||||||
|
return day >= 1 && day <= monthDays(month, year);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue