Program symulujący pracę dziekanatu.

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:
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.

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.

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.

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 ...

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.

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ć:

Student student = new Student();

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

0

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

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?

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).

0

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

1
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;
            }
      }
}
0

Dziękuję bardzo, teraz wszystko rozumiem :)

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