Commit c45c5265 by Patryk Czarnik

emps - dalsze przykłady "imperatywne"

parent 399b679b
package emps;
import java.util.List;
// Wypisujemy dane pracowników zarabiających >= 10 tys
public class P2_WypiszBogatych {
public static void main(String[] args) {
int limit = 10000;
List<Employee> emps = ObslugaCSV.wczytaj();
System.out.printf("Co najmniej %d zarbiają pracownicy:%n", limit);
for(Employee emp : emps) {
if(emp.getSalary() >= limit) {
System.out.printf(" * %s %s (%s) z pensją %s%n",
emp.getFirstName(), emp.getLastName(), emp.getJobTitle(), emp.getSalary());
}
}
}
}
......@@ -3,13 +3,16 @@ package emps;
import javax.swing.*;
import java.util.List;
public class P4_SredniaJedenJob {
public class P3_SredniaWszystkich {
public static void main(String[] args) {
String szukanyJob = JOptionPane.showInputDialog("Podaj job", "Programmer");
List<Employee> emps = ObslugaCSV.wczytaj();
// TODO oblicz średnią pensję pracowników, którzy mają taki job
int suma = 0;
for(Employee emp : emps) {
suma += emp.getSalary();
}
double srednia = (double)suma / emps.size();
// double srednia = 1. * suma / emps.size();
System.out.printf("Średnia pensja to %s", srednia);
}
}
package emps;
import javax.swing.*;
import java.util.List;
public class P4_SredniaJedenJob_v1 {
public static void main(String[] args) {
String szukanyJob = JOptionPane.showInputDialog("Podaj job", "Programmer");
List<Employee> emps = ObslugaCSV.wczytaj();
// oblicz średnią pensję pracowników, którzy mają taki job
int suma = 0;
int ilu = 0;
for(Employee emp : emps) {
if(emp.getJobTitle().equals(szukanyJob)) {
suma += emp.getSalary();
ilu++;
}
}
double srednia = 1. * suma / ilu;
JOptionPane.showMessageDialog(null,
String.format("Na stanowisku %s pracuje %d osób.\nIch średnia pensja to %.2f",
szukanyJob, ilu, srednia));
}
}
package emps;
import java.io.File;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
// P4_SredniaJedenJob - użytkownik wpisuje nazwę stanowiska (np Programmer),
// a program oblicza liczbę pracowników oraz średnią pensję na tym stanowisku
// v3 - w tej wersji w oknie dialogowym wyświetlamy listę z wyborem jobów
public class P4_SredniaJedenJob_v2 {
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser(".");
chooser.setFileFilter(new FileNameExtensionFilter("Pliki CSV", "csv", "txt"));
int coSieStalo = chooser.showOpenDialog(null);
if(coSieStalo != JFileChooser.APPROVE_OPTION)
return;
File plik = chooser.getSelectedFile();
List<Employee> emps = ObslugaCSV.wczytaj(plik);
Set<String> jobs = new TreeSet<>();
for(Employee emp : emps) {
jobs.add(emp.getJobTitle());
}
String szukanyJob = (String)JOptionPane.showInputDialog(null, "Wybierz stanowisko", "Wybór",
JOptionPane.QUESTION_MESSAGE, null, jobs.toArray(), "Programmer");
if(szukanyJob == null)
return;
double suma = 0;
int ile = 0;
for(Employee emp : emps) {
if(szukanyJob.equals(emp.getJobTitle())) {
suma += emp.getSalary();
ile++;
}
}
if(ile > 0) {
double srednia = suma / ile;
JOptionPane.showMessageDialog(null, String.format(
"Na stanowisku %s pracuje %d osób.\nŚrednia pensja wynosi %.2f",
szukanyJob, ile, srednia));
} else {
JOptionPane.showMessageDialog(null, String.format("Nikt nie pracuje na stanowisku %s.", szukanyJob),
"Brak danych", JOptionPane.WARNING_MESSAGE);
}
}
}
package emps;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
// Wypisz bez powtórzeń nazwy miast pojawiające się w pliku
public class P5_MiastaBezPowtorzen {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Set<String> miasta = new TreeSet<>();
for(Employee emp : emps) {
miasta.add(emp.getCity());
}
System.out.println("Liczba miast: " + miasta.size());
for(String miasto : miasta) {
System.out.println(miasto);
}
}
}
package emps;
import java.util.List;
public class P6_MinMax_v1 {
// Wypisz dane pracownika, który zarabia najwięcej, oraz pracownika, który zarabia najmniej.
// (wypisz co najmniej imię, nazwisko i pensję)
// w tym rozwiązaniu wypiszę wszystkie osoby, które zarabiają maksymalną /minimalną pensję, nawet gdyby było ich więcej
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj();
// etap 1a: ustalam maksymalną pensję
int maxSalary = 0;
for(Employee emp : emps) {
if(emp.getSalary() > maxSalary) {
maxSalary = emp.getSalary();
}
}
// etap 1b: ustalam minimalną pensję
int minSalary = maxSalary;
for(Employee emp : emps) {
if(emp.getSalary() < minSalary) {
minSalary = emp.getSalary();
}
}
// etap 2: ponownie przeglądając dane szukam KTO tyle zarabia i go wypisuję
System.out.println("najbogatsi: (pensja " + maxSalary +"):");
for(Employee emp : emps) {
if(emp.getSalary() == maxSalary) {
System.out.println(emp);
}
}
System.out.println("najbiedniejsi: (pensja " + minSalary +"):");
for(Employee emp : emps) {
if(emp.getSalary() == minSalary) {
System.out.println(emp);
}
}
}
}
package emps;
import java.util.List;
public class P6_MinMax_v2 {
// Wypisz kto zarabia najwięcej, a kto zarabia najmniej.
// (wypisz co najmniej imię, nazwisko i pensję)
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
int maxSalary = 0; // Integer.MIN_VALUE
int minSalary = Integer.MAX_VALUE;
String min = "";
String max = "";
for(Employee emp : emps) {
if(emp.getSalary() > maxSalary) {
maxSalary = emp.getSalary();
max = emp.getFirstName() + " " + emp.getLastName();
}
if(emp.getSalary() < minSalary) {
minSalary = emp.getSalary();
min = emp.getFirstName() + " " + emp.getLastName();
}
}
System.out.println("Najbogatszy: " + max + " " + maxSalary);
System.out.println("Najbiedniejszy: " + min + " " + minSalary);
}
}
package emps;
import java.util.List;
public class P6_MinMax_v3 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Employee max = null;
Employee min = null;
for(Employee emp : emps) {
if(max == null || emp.getSalary() > max.getSalary()) {
max = emp;
}
if(min == null || emp.getSalary() < min.getSalary()) {
min = emp;
}
}
System.out.println("Najbogatszy: " + max.getFirstName() + " " + max.getLastName() + " " + max.getSalary());
System.out.println("Najbiedniejszy: " + min.getFirstName() + " " + min.getLastName() + " " + min.getSalary());
}
}
package emps;
import java.util.List;
public class P6_MinMax_v4 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Employee max = emps.get(0); // od Java 21 mamy też: emps.getFirst();
Employee min = max;
for(Employee emp : emps) {
if(emp.getSalary() > max.getSalary()) {
max = emp;
}
if(emp.getSalary() < min.getSalary()) {
min = emp;
}
}
System.out.println("Najbogatszy: " + max.getFirstName() + " " + max.getLastName() + " " + max.getSalary());
System.out.println("Najbiedniejszy: " + min.getFirstName() + " " + min.getLastName() + " " + min.getSalary());
}
}
package emps;
import java.util.Comparator;
import java.util.List;
// P7 - wypisz pracowników posortowanych wg pensji rosnąco
public class P7_Sortowanie {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// takie sortowanie zadziałałoby tylko, gdyby klasa Employee implementowała Comparable
// emps.sort(null);
// Podejście do definiowania Comparatora oraz do samego sortowania sprzed Java 8
// "klasa anonimowa"
// Comparator<Employee> c = new Comparator<Employee>() {
// public int compare(Employee emp1, Employee emp2) {
// return emp2.getSalary() - emp1.getSalary();
// }
// };
// Collections.sort(emps, c);
// tutaj comparator zdefiniuję za pomocą wyrażenia lambda.
// emps.sort((emp1, emp2) -> emp2.getSalary() - emp1.getSalary());
// metoda compare z klas Integer, Long, Float, Double jest bardziej ogólnym sposobem porównania
// niż odejmowanie - jest odporna na integer overflow oraz działa dla liczb z ułamkiem
// emps.sort((emp1, emp2) -> -Integer.compare(emp1.getSalary(), emp2.getSalary()));
// można też napisać to bardziej wprost:
// posortuj obiekty Employee ze względu na ich pesję. odwrotnie
emps.sort(Comparator.comparingInt(Employee::getSalary).reversed());
for(Employee emp : emps) {
System.out.printf(" * %s %s (%s) z pensją %s%n",
emp.getFirstName(), emp.getLastName(), emp.getJobTitle(), emp.getSalary());
}
System.out.println();
System.out.println("Najbiednieszy: " + emps.getFirst());
System.out.println("Najbogatszy: " + emps.getLast());
}
}
package emps;
import java.util.List;
import java.util.Scanner;
public class P9_Podwyzka {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
System.out.println("Podaj nazwę stanowiska: ");
String szukanyJob = sc.nextLine();
System.out.println("Podaj kwotę podwyżki: ");
int podwyzka = sc.nextInt();
int ile = 0;
for(Employee emp : emps) {
if(emp.getJobTitle().equalsIgnoreCase(szukanyJob)) {
emp.setSalary(emp.getSalary() + podwyzka);
ile++;
}
}
ObslugaCSV.zapisz(emps, "zmieniony.csv");
System.out.println("Zmieniono " + ile + " rekordów");
}
}
// W tej wersji klasa Employee jest "mutowalna" i można zmieniś salary w obiektach,
// a następnie zapisać ała listę do pliku.
package emps;
import java.io.File;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
public class P9_PodwyzkaOkienkowa {
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser(".");
int coSieStalo = chooser.showOpenDialog(null);
if(coSieStalo != JFileChooser.APPROVE_OPTION) {
// jeśli nie wybrano pliku
return;
}
File plikWejsciowy = chooser.getSelectedFile();
List<Employee> emps = ObslugaCSV.wczytaj(plikWejsciowy);
String[] jobs = emps.stream()
.map(Employee::getJobTitle)
.distinct()
.sorted()
.toArray(String[]::new);
String szukanyJob = (String)JOptionPane.showInputDialog(null, "Wybierz nazwę stanowiska", "Wybierz",
JOptionPane.QUESTION_MESSAGE, null, jobs, null);
int podwyzka = Integer.parseInt(JOptionPane.showInputDialog("Podaj kwotę podwyżki"));
int ile = 0;
for(Employee emp : emps) {
if(emp.getJobTitle().equals(szukanyJob)) {
emp.setSalary(emp.getSalary() + podwyzka);
ile++;
}
}
chooser.showSaveDialog(null);
if(coSieStalo != JFileChooser.APPROVE_OPTION) {
return;
}
File plikWyjsciowy = chooser.getSelectedFile();
ObslugaCSV.zapisz(emps, plikWyjsciowy);
JOptionPane.showMessageDialog(null, "Zmieniono " + ile + " rekordów");
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment