Program symulujący pracę dziekanatu.

Program symulujący pracę dziekanatu.
M2
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:64
0

Cześć,
piszę w sprawie pomocy w napisaniu programu symulującego działanie dziekanatu. W związku z nim kilka pytań, ale po kolei:

  • dokładna treść zadania:
    http://pastebin.com/D5JA2U9A
  • wybaczcie, że tekst trzech klas jest na pastebin'ie, ale nie chciałem aby treść postu była zbyt długo, a nie znalazłem opcji ukrywania fragmentów postów na tym forum,
  • klasy, które już napisałem:
  • treść głównej klasy:
Kopiuj
package lab03_pop;
import java.util.*;

public class Baza {
        private List<Student> s = new ArrayList<Student>();
        private List<Kurs> k = new ArrayList<Kurs>();
        private List<Ocena> o = new ArrayList<Ocena>();
        
        public Baza() {
            // TODO: Add your code here
        }

        public String dodajStudenta() {
            boolean T = true;
            do{
            s.add(new Student ());
            System.out.println ("Dodać kolejnego studenta? T/N");
            }
            while(T);
            return new String();
        }

        public void usunStudenta(int studentID) {
            s.remove(studentID);
        }

        public String dodajKurs() {
            boolean T = true;
            do{
            k.add(new Kurs ());
            System.out.println ("Dodać kolejny kurs? T/N");
            }
            while(T);
            return new String();
        }

        public void usunKurs(String Nazwa) {
            k.remove(Nazwa);
        }

        public void wstawOcene() {
            boolean T = true;
            do{
            o.add(new Ocena ());
            System.out.println ("Dodać kolejna ocene? T/N");
            }
            while(T);
        }

        public void anulujOcene(String studentID) {
            o.remove(studentID);
        }

        public void dopiszDoKursu(String studentID, String kursID) {
            // TODO: Add your code here
        }

        public void wypiszZKursu(String studentID, String kursID) {
            // TODO: Add your code here
        }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

Na razie napisałem tle ile potrafiłem i w tym momencie proszę o pomoc. Oto moje pytania:

  • czy ten kod w ogóle ma sens? Czy to co napisałem ma prawo działać? Niby się kompiluje, ale na razie to nie widać żadnych efektów, gdyż nigdzie ten kod nie jest jeszcze wykorzystywany,
  • w jaki sposób rozwiązać problem zapisywania danych studentów do kursów i usuwania ich?
  • jak powinna wyglądać metoda Baza, co w niej powinno się znaleźć? Utworzenie jakiegoś menu wybory operacji w tym programie czy to raczej powinno być w programie głównym?

Proszę o wybaczenie, tak podstawowych pytań, ale to są moje kompletne początki z programowaniem obiektowym i mało jeszcze z tego rozumiem.

Pozdrawiam i bardzo proszę o pomoc.

BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

Pierwsza sprawa testuj od razu co napisałeś albo po przez uruchomienie programu albo poprzez JUnit ale jako, że jesteś początkujący to przez uruchomienie programu. Po co pisać kolejny metody jeśli np. dodawanie studentów Ci nie działa, reszta też nie będzie.

Wracając do programu wydaje mi się, że klasa baza powinna mieć dwa pola studenci arrayList typu student i kursy arrayList typu kurs. Teraz klasa student powinna mieć pole kursy Studenta arrayList typu kurs no i wiadomo jakieś tam informacje imię, ocena itd.. Klasa kurs pola jakie tam chcesz (informacje o kursie). Teraz z usuwaniem nie będziesz miał problemu bo arrayLista dysponuje metodą remove.

Menu może sobie zrobić w klasie main albo nazwać ją menu. Ja zawsze do czegoś takiego korzystałem z instrukcji switch case 1 itd.

edytowany 1x, ostatnio: barslo
M2
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:64
0
barslo napisał(a):

Pierwsza sprawa testuj od razu co napisałeś albo po przez uruchomienie programu albo poprzez JUnit ale jako, że jesteś początkujący to przez uruchomienie programu. Po co pisać kolejny metody jeśli np. dodawanie studentów Ci nie działa, reszta też nie będzie.

Wracając do programu wydaje mi się, że klasa baza powinna mieć dwa pola studenci arrayList typu student i kursy arrayList typu kurs. Teraz klasa student powinna mieć pole kursy Studenta arrayList typu kurs no i wiadomo jakieś tam informacje imię, ocena itd.. Klasa kurs pola jakie tam chcesz (informacje o kursie). Teraz z usuwaniem nie będziesz miał problemu bo arrayLista dysponuje metodą remove.

Menu może sobie zrobić w klasie main albo nazwać ją menu. Ja zawsze do czegoś takiego korzystałem z instrukcji switch case 1 itd.

Ten program, o którym tutaj mowa testuję przez uruchamianie i uruchamia się, problem w tym, że na razie te klasy metody nie są nigdzie wykorzystywane i nie wiem, czy działają poprawnie.
Co do tego co mi poradziłeś to właśnie to napisałem w kodzie :)
Mam jeszcze jedno pytanie, bo chciałbym dopisywać studentów do kursu i usuwać ich za pomocą, ID studentów i ID kursów, dlatego potrzebuję struktury danych, która umożliwi mi odwoływać się do każdej komórki w tej strukturze dzięki dwóm zmiennym. Która struktura danych mi to umożliwi?

Pozdrawiam.

BA
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Wrocław
  • Postów:259
0

O to mi chodziło, żebyś robił jakieś testowe klasy, żeby sprawdzić metody na obiektach itd. Nie bardzo rozumiem z tą strukturą masz przecież w arrayLiscie metodę nazwa.get(index) i to może być też ID studenta i kursu a jak Ci takie rozwiązanie nie pasuje to zrób sobie dodatkowe pola w tych klasach typu int ID_studenta ...

M2
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:64
0
barslo napisał(a):

O to mi chodziło, żebyś robił jakieś testowe klasy, żeby sprawdzić metody na obiektach itd. Nie bardzo rozumiem z tą strukturą masz przecież w arrayLiscie metodę nazwa.get(index) i to może być też ID studenta i kursu a jak Ci takie rozwiązanie nie pasuje to zrób sobie dodatkowe pola w tych klasach typu int ID_studenta ...

Sęk w tym, że mam jeszcze problem z pisaniem klas wykorzystujących klasy, które już napisałem. Chodzi mi o to, że jeszcze nie do końca rozumiem jak się do tych klas i metod odwoływać.
Czy mógłbyś/mógłby mi ktoś pomóc napisać klasę dodającą studenta, która wykorzystywałaby moją metodę dodajStudenta? Dużo by mi to wtedy rozjaśniło.

Pozdrawiam.

PO
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:1
0

Aby odwołać się do klasy musisz utworzyć obiekt, na którym będziesz operował. Warto pamiętać, że klasa jest tylko definicją typu, a obiekt jest instancją, z którą można dopiero coś zrobić.
Dla przykładu chcesz utworzyć obiekt student, aby wywołać odpowiednie metody klasy student.

W mainie musisz dodać:

Kopiuj
Student student = new Student();

Dalej już możesz działać na metodach tej klasy.

edytowany 1x, ostatnio: Poranekk
M2
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:64
0

Część, udało się już sporo napisać, ale utknąłem na usuwaniu studentów z listy.
Fragment kodu:

Kopiuj
public void usunStudenta(int studentID) {
            System.out.println ("Podaj ID studenta, którego należy usunąć ");
                studentID = input.nextInt();
            s.remove(studentID);
        }

To usuwanie działa, ale usuwa obiekty z listy poprzez wprowadzony indeks listy a nie numer indeksu. Czyli np jak mam 3 studentów na liście i podaję 0 to usuwa mi pierwsza osobę z listy ale jak podam numer indeksu to wywala błąd.
Pytanie brzmi, jak odnieść się do wartości na liście a nie do indeksu tej listy?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

W klasie ArrayList są dwie metody remove: remove(Object) i remove(int index). Jeśli chcesz usuwać konkretnego studenta, to musisz używać pierwszej, coś w rodzaju remove(student).


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
M2
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:64
0

A czy mógłbyś mi napisać jak to będzie wyglądało w moim przypadku, bo nie za bardzo to rozumiem?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1
Kopiuj
public void usunStudenta(int studentID) {
      System.out.println ("Podaj ID studenta, którego należy usunąć ");
      studentID = input.nextInt();
      for(Student student: s)
      {
            if(student.getStudentID() == studentID)
            {
                 s.remove(student);
                 break;
            }
      }
}

To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans
M2
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 8 lat
  • Postów:64
0

Dziękuję bardzo, teraz wszystko rozumiem :)

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)