Metody dodające pacjenta i przechowujące jego dane w tabeli

0

Witam wszystkich, dopiero uczę się programować w javie więc pewnie trafiłem dobrze. Moim zadaniem jest napisanie programu wykorzystującego dziedziczenie + kilka zmiennych różnych typów + użycie metod i konstruktorów. Nie piszę po to, żeby tylko zrobić zadanie, ale także aby się tego nauczyć i zrozumieć.

Program ma mieć jakiś sens, działać po coś konkretnego, takie jest założenie prowadzącego. Stworzyłem więc klasę Pacjent, KartaPacjenta, Apteka i Lecznica (Klasa w której będzie możliwość dodania wpisu, sprawdzenia listy pacjentów) tak to sobie wymyśliłem. Będę wrzucał problemy po kolei żeby nie robić bałaganu.

Mam coś takiego :

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package archiwum;

/**
 *
 * @author Tomek
 */
public class Pacjent {
     public int wiek; 
     public String imie; 
     public String nazwisko; 
     public String adres; 
     
     public Pacjent() {
         wiek = 0; 
         imie = "";
         nazwisko = "";
         adres = "";
     }
    
     
     public Pacjent(String imie, String nazwisko, int wiek, String adres){
         this.wiek = wiek; 
         this.nazwisko = nazwisko; 
         this.adres = adres; 
         this.imie = imie; 
     }

    public int getWiek() {
        return wiek;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public String getAdres() {
        return adres;
    }
     
    // Dodawanie nowego pacjenta 
    public void dodaj_pacjenta (String dane[]) {

     }    
         
     }
     

Chciałbym utworzyć tu metodę która bedzie dodawała pacjenta oraz drugą która będzie przechowywała jego dane w tabeli, zeby na koniec wyświetlić oraz połaczyć tworzenie nowego pacjenta z tym co użytkownik bedzie wpisywał z klawiatury metodą Scanner (imię, nazwisko...). I nie wiem jak się za to zabrać :/. Może jakoś nielogicznie myślę ? Dziękuje wszystkim za pomoc.

1

Metodę, która będzie przechowywała jego dane w tabeli ? Trochę nielogiczne, metody z założenia mają wykonywać jakieś czynności, od przechowywania danych masz pola, stwórz sobie od tego jakąś tablice i przekazuj ją w parametrze do metody dodaj_pacjenta.

0
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package archiwum;

import java.util.Scanner;

/**
 *
 * @author Tomek
 */
public class Pacjent {
     public int wiek; 
     public static String imie; 
     public String nazwisko; 
     public String adres; 
     public String dane_pacjenta[];
     
     
     
     public Pacjent() {
         wiek = 0; 
         imie = "";
         nazwisko = "";
         adres = "";
     }
    
     
     public Pacjent(String imie, String nazwisko, int wiek, String adres){
         this.wiek = wiek; 
         this.nazwisko = nazwisko; 
         this.adres = adres; 
         this.imie = imie; 
     }

    public int getWiek() {
        return wiek;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public String getAdres() {
        return adres;
    }
     
     public void dodaj_pacjenta () {
         imie = dane_pacjenta[0];
         nazwisko = dane_pacjenta[1]; 
         wiek = Integer.parseInt(dane_pacjenta[2]);
         adres = dane_pacjenta[3]; 
         
     }
    
         
         
     }

Dodałem coś takiego. Wpisywanie danych powinienem dodać tu czy połączyć jakoś wszystko dopiero w klasie lecznica?

1

Ta metoda dodaj_pacjenta jest niewątpliwe zła, kieruj się zasadą jeden indeks = jeden pacjent. Po drugie sądzisz, że tablica dane_pacjenta powinna być typu String ?

0
  public void dodaj_pacjenta () {
        Pacjent pacjent = new Pacjent(imie, nazwisko, wiek, adres);
        
         
     }

Coś w tym kierunku?

0

Tak, to już jest dobry punkt wyjścia. Pozostaje tylko przekazać wymagane parametry (czyli właśnie imię, nazwisko itd) i zastanowić się jak umieścić utworzony obiekt w tablicy.

2

Zdecyduj się też na jeden język, którym opisujesz obiekty i zachowania. Takie rzeczy jak getWiek naprawdę źle się czyta. Sugeruję mocno żebyś przeszedł na angielskie nazewnictwo.

0

Nie martwił bym się w tej chwili nazewnictwem, wydaje mi się, że w takiej formie prościej mi się uczyć.

Czyli powinno to przyjąć taką formę dobrze<ort> rozumie</ort> tu słówko "przekazać"?

  public void dodaj_pacjenta () {
        Pacjent pacjent = new Pacjent(imie, nazwisko, wiek, adres);
        Scanner odczyt = new Scanner(System.in);
        imie = odczyt.nextLine();
         
     }
1

Nie przewidziałeś klasy do przechowywania pacjentów. Taka klasa nie jest niezbędna, możesz przechowywać pacjentów w klasie startowej (tej z metodą main), ale niezbędna jest kolekcja lub tablica do przechowywania pacjentów: Pacjent[] pacjenci lub ArrayList<Pacjent> pacjenci. W zależności od wybranego rozwiązania, metoda będzie wyglądać tak:

public void dodajPacjenta(Pacjent pacjent){
    pacjenci.add(pacjent); //kolekcja
}
//lub
public void dodajPacjenta(Pacjent pacjent){
    pacjenci[indeks++] = pacjent; //tablica
}

W tym drugim przypadku potrzebne jest pole (indeks) przechowujące informację o ilości pacjentów.
P.S. martw się jednak nazewnictwem, to my musimy patrzeć na Twój kod.

0

Nie wiem czy dobrze zrozumiałem.

    public void dodaj_pacjenta () {
        Pacjent pacjent = new Pacjent(imie, nazwisko, wiek, adres);
        Scanner odczyt = new Scanner(System.in);
        imie = odczyt.nextLine();
         // czy dobrze to robie...?
     }
     public void lista_pacjentow (Pacjent pacjent) {
         pacjenci.add(pacjent);
     }
    

I deklaracja :

public class Pacjent {
     public int wiek; 
     public String imie; 
     public String nazwisko; 
     public String adres; 
     ArrayList<Pacjent> pacjenci = new ArrayList(); 

@Edit Czy powinno to być w metodzie dodaj_pacjenta, a wszystkie dane pobierać od użytkownika w klasie z main? i wtedy nie tworzyć już metody lista_pacjentow?

0

Raczej źle, kolekcja pacjenci nie powinna być polem w klasie Pacjent.
Metoda lista_pacjentow dopisująca pacjenta to zupełny absurd.
Metoda dodajPacjenta powinna wyglądać jakoś tak:

    public void dodaj_pacjenta () {
        Scanner odczyt = new Scanner(System.in);
        System.out.println("Nowy pacjent");
        System.out.print("Imie ");
        String imie = odczyt.nextLine();
        System.out.print("Nazwisko ");
        String nazwisko = odczyt.nextLine();
        ...
        XXX.pacjenci.add(new Pacjent(imie, nazwisko, wiek, adres));
   }

XXX zależy od klasy, w której będziesz przechowywał listę pacjentów.

0
 public void dodaj_pacjenta () {
         ArrayList<Pacjent> pacjenci = new ArrayList();
         Scanner odczyt = new Scanner(System.in);
         System.out.println("Wprowadzanie nowego pacjenta:");
         System.out.println("Imię:");
         imie = odczyt.nextLine();
         System.out.println("Nazwisko:");
         nazwisko = odczyt.nextLine();
         System.out.println("Wiek");
         wiek = odczyt.nextInt();
         System.out.println("Adres");
         adres = odczyt.nextLine();
         System.out.println("Dodawanie nowego pacjenta ");
         pacjenci.add(new Pacjent(imie, nazwisko, wiek, adres));
}

Czy to ma być coś takiego, bo ja już nie mam pojęcia. Jak nie to niech mi ktoś pokaże jak powinno to wyglądać. Metoda dodająca pacjenta i przechowanie tych danych. Dziękuję.

0

Prawie, ale bez instrukcji

ArrayList<Pacjent> pacjenci = new ArrayList();

Tę kolekcję musisz stworzyć gdzie indziej - ona winna być składową pewnej klasy.

0

Mam klasę startową Lecznica i tam chciałem to dać :

package lecznica;

import archiwum.Pacjent;
import java.util.ArrayList;
import java.util.Scanner;

/**
 *
 * @author Tomek
 */
public class Lecznica {

     String wybor;
      static Scanner  odczyt = new Scanner(System.in);
      ArrayList<Pacjent> pacjenci = new ArrayList();

    public static void main(String[] args) {
            
            
            
            System.out.println();
      
    }
}

Ale wtedy wywala mi błąd:

         Lecznica.pacjenci.add(new Pacjent(imie, nazwisko, wiek, adres));  
         
         
     }
0

Masz dwie możliwości:

  • utwórz (w klasie gdzie dodajesz pacjenta) obiekt Lecznica lecznica = new Lecznica() i wywołuj
lecznica.pacjenci.add(new Pacjent(imie, nazwisko, wiek, adres));

,

  • zamień pole pacjenci na static.
    A przede wszystkim, przed pisaniem programów bardziej skomplikowanych niż Hello world, naucz się podstaw Javy.
0

Co zrobić, żeby wyświetlić ArrayList i nie otrzymać czegoś w stylu: 64dxf344? Jak próbuje przypisać do Stringa to wywala, że Pacejnt nie może być przekonwertowany do String. W jaki sposób to zrobić?

1

Napisz w klasie Pacjent taką metodę

public String toString(){
     return imie + " " + nazwisko + " " + adres + " wiek: " + wiek; 
}
0

Dziękuje za pomoc. Wszystko działa zapisuje do ArrayList, wyświetla na ekran. Zrobiłem zapis listy do pliku .txt i zapisuje coś takiego:

¬í sr java.util.ArrayListxŇ™Çať I sizexp   w   sr firma.PracownikŮřúâ–…4 D wyplataL imiet Ljava/lang/String;L nazwiskoq ~ xp@’Ŕ     t Jant Kowalskix

Da się coś z tym zrobić i dlaczego tak się dzieje?

I mam jeszcze jedno pytanie, czy można łączyć dwie i więcej Arraylist? Jeśli tak to w jaki sposób?

Pozdrawiam.

1
  1. Da się coś z tym zrobić, dzieje się tak bo niewłaściwie zapisujesz (pewnie używasz ObjectOutputStream). Jeśli chcesz oglądać (edytować) listę w pliku tekstowym, to zapisuj w pętli:
for(Pacjent pacjent: pacjenci){
    zapisz.(pacjent.toString() + "\n");
    //lub 
    zapisz.(pacjent.toString() + "\r\n"); //konieczne gdy chcesz oglądać plik w notatniku windowsowym
}
  1. Można, metoda addAll https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
0

Zapis do pliku zrobiłem tak:

try {
                         FileWriter writer = new FileWriter("lista2.txt");
                         Writer wyjscie = new BufferedWriter(writer);
                         int sz = lista_pracownikow.size();
                            for (int i=0; i<sz;i++){
                                wyjscie.write(lista_pracownikow.get(i).toString() +"\r\n");
                                
                            }
                            wyjscie.close();
                    }
                catch(IOException ioe)
                    {
                         System.out.println("Error!");
                    }

Wszystko działa, w pliku też już normalny zapis. Dzięki. Teraz mam taki problem, że nie jest to dopisywane do pliku tylko plik jest nadpisywany, czyli co uruchomienie programu nowy poprzednie wpisy giną, da się coś z tym zrobić, czy potrzebna już będzie baza danych?
Ps. Trochę zmieniłem koncepcje z lecznicy na firmę :P Stąd ta

lista_pracownikow

.

0
FileWriter writer = new FileWriter("lista2.txt",true);

1 użytkowników online, w tym zalogowanych: 0, gości: 1