Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 1. Includes
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- // 2. Prototypy (deklaracje funkcji)
- void wyswietl_studentow(int studenci[64]); // 0
- void dodaj_studenta(int numer_indeksu, int studenci[64]); // 1
- void usun_studenta(int numer_indeksu, int studenci[64], int zaliczenia[64]); // 2
- void dodaj_zaliczenie(int numer_indeksu, int studenci[64], int zaliczenia[64], int przedmiot); // 3
- void usun_zaliczenie(int numer_indeksu, int studenci[64], int zaliczenia[64], int przedmiot); // 4
- void wyswietl_przedmioty(char* przedmioty[3]); // 5
- void wyswietl_zaliczenia(char* przedmioty[3], int studenci[64], int zaliczenia[64]); // 6
- void pozegnaj_uzytkownika(); // 7
- void wyswietl_blad(); // cokolwiek innego
- void wyswietl_menu();
- void zainicjalizuj_zaliczenia(int zaliczenia[64]);
- // 3. Funkcja glowna
- void main()
- {
- char* przedmioty[] = { "fizyka", "matematyka", "chemia" };
- int studenci[64] = { 0 }; // nr indeksu
- int zaliczenia[64]; // -1 to brak informacji o zaliczeniu, 0 to brak zaliczenia, fizyka jest warta 1, matematyka 2, zas chemia 4
- zainicjalizuj_zaliczenia(zaliczenia);
- int wybor;
- int numer_indeksu;
- int usun_studenta;
- int dodaj_studenta;
- int dodaj_zaliczenie;
- int usun_zaliczenie;
- int wyswietl_przedmioty;
- int wyswietl_zaliczenia;
- int pozegnaj_uzytkownika;
- int wyswietl_blad;
- int wyswietl_menu;
- int zainicjalizuj_zaliczenia;
- wyswietl_menu();
- do
- {
- scanf("%d", &wybor);
- switch (wybor)
- {
- case 0:
- wyswietl_studentow(studenci);
- break; // gdyby nie bylo break, to by sam przeszedl do nastepnego case
- case 1:
- dodaj_studenta(numer_indeksu, studenci);
- break;
- case 2:
- usun_studenta(numer_indeksu, studenci);
- break;
- case 3:
- dodaj_zaliczenie(numer_indeksu, zaliczenia);
- break;
- case 4:
- usun_zaliczenie(numer_indeksu, zaliczenia);
- break;
- case 5:
- wyswietl_przedmioty(przedmioty);
- break;
- case 6:
- wyswietl_zaliczenia(przedmioty, studenci, zaliczenia);
- break;
- case 7:
- pozegnaj_uzytkownika();
- break;
- default: // jak nie dopasuje niczego
- wyswietl_blad();
- }
- } while (wybor != 7); // while(1) oznacza wykonuj sie zawsze w petli
- }
- // 4. Definicje funkcji
- void wyswietl_studentow(int studenci[64])
- {
- int student;
- for (student=0; student < 64; student++ )
- {
- if (studenci[student]>0)
- {
- printf("%d\n", studenci[student]);
- }
- }
- }
- void dodaj_studenta(int numer_indeksu, int studenci[64])
- {
- // 1. Znajdz puste miejsce (studenci[student] == 0)
- // 2. Zapelnij to puste miejsce numerem indeksu
- // 3. Jezeli nie ma pustego miejsca, to napisz informacje, ze nie ma wiecej miejsca na studentow
- int student;
- for(student=0; student<64; student++)
- {
- if(studenci[student] == 0)
- {
- studenci[student] = numer_indeksu;
- break; // wychodzimy z petli, bo nie ma sensu dalej szukac miejsca, bo juz mu miejsce znalezlismy
- }
- }
- // jezeli nie ma wolnych miejsc, to oznacza, ze student == 64
- if (student == 64)
- {
- printf("Brak wolnych miejsc.\n");
- }
- }
- void usun_studenta(int numer_indeksu, int studenci[64], int zaliczenia[64])
- {
- // 1. Znajdz studenta (studenci[student] == numer_indeksu)
- // 2. Jezeli nie ma studenta o takim indeksie, to napisz informacje, ze nie ma takiego studenta
- // 3. Jezeli tam jest, to przypisz tam zero ORAZ przypisz -1 do zaliczenia[student], zeby wymazac zaliczenia studenta
- int student;
- for(student=0; student<64; student++)
- {
- if(studenci[student]==numer_indeksu)
- {
- studenci[student] = 0;
- zaliczenia[student] = -1;
- break;
- }
- }
- if(student == 64)
- {
- printf("Nie znaleziono studenta o takim numerze indeksu.\n");
- }
- }
- void dodaj_zaliczenie(int numer_indeksu, int studenci[64], int zaliczenia[64], int przedmiot)
- {
- // 1. Sprawdz, czy istnieje student o numerze indeksu numer_indeksu w tablicy studenci
- // 2. Jezeli nie ma studenta o takim indeksie, to blad (samo return;)
- // 3. Jezeli jest, to sprawdz, czy ma juz zaliczenie z tego przedmiotu - jak ma, blad
- // 4. Jezeli nie ma to dodaj przedmiot do zaliczenia[student]
- // 1.
- int student;
- for (student = 0; student < 64; student++)
- {
- if (studenci[student] == numer_indeksu)
- {
- break; // przerywamy dzialanie petli, poniewaz wyszukiwanie zostalo juz zakonczone
- }
- }
- // 2.
- if (student == 64)
- {
- printf("Nie istnieje student o takim numerze indeksu.\n");
- return;
- }
- // 3.
- if (zaliczenia[student] & przedmiot > 0) // 1 -> ...0001, 2 -> ...0010, 4 -> ...0100 /////////// 0000 & 0010 -> 0000;;;; 0110 & 1010 -> 0010;;;; 1101 & 0111 -> 0101;;;;; 2 + 4 = 6; 0010 + 0100 = 0110
- {
- // obslugujemy przypadek, gdzie przedmiot jest juz zaliczony
- printf("Student o numerze indeksu %d ma juz zaliczenie z tego przedmiotu.\n", numer_indeksu);
- }
- // 4.
- else if (zaliczenia[student] & przedmiot == 0)
- {
- // oblugujemy przypadek, gdzie przedmiot jeszcze nie jest zaliczony
- zaliczenia[student] = zaliczenia[student] + przedmiot;
- }
- }
- void usun_zaliczenie(int numer_indeksu; int studenci[64]; int zaliczenia[64]; int przedmiot)
- {
- // 1. Sprawdz, czy istnieje student o numerze indeksu numer_indeksu w tablicy studenci
- // 2. Jezeli nie ma studenta o takim indeksie, to blad
- // 3. Jezeli tam jest, to sprawdz, czy nie ma zaliczenia z przedmiotu - jak nie ma, blad
- // 4. Jezeli ma, to odejmij przedmiot od zaliczenia[student]
- int student;
- for (student = 0; student < 64; student++)
- {
- if (studenci[student] == numer_indeksu)
- {
- break; // przerywamy dzialanie petli, poniewaz wyszukiwanie zostalo juz zakonczone
- }
- }
- // 2.
- if (student == 64)
- {
- printf("Nie istnieje student o takim numerze indeksu.\n");
- return;
- }
- // 3.
- // potegi dwojki w systemie binarnym sa zapisane zerami, potem jedynka, potem zerami (opcjonalnie)
- // potegi dwojki zawieraja TYLKO JEDNA JEDYNKE w sobie w zapisie binarnym
- // musimy wybrac potegi dwojki, np. 1, 2 i 4, zeby sprawic, ze, w zapisie binarnym, jedynki nie beda na siebie wchodzic
- // suma tych liczb daje nam nowa liczbe, w ktorej zapisie binarnym jedynki odpowiadaja jedynkom z pozycji liczb, ktore dodawalismy
- // symbolem & mozemy sprawdzic, czy jakas liczba (dokladnie, potega dwojki) byla (lub nie byla) dodana do wyniku (np. zaliczenia[student]). To oznacza, ze mozemy sprawdzic, czy przedmiot odpowiadajacy tej liczbie byl dodany, czyli, czy student zaliczyl ten przedmiot
- if (zaliczenia[student] & przedmiot == 0) // 1 -> ...0001, 2 -> ...0010, 4 -> ...0100 /////////// 0000 & 0010 -> 0000;;;; 0110 & 1010 -> 0010;;;; 1101 & 0111 -> 0101;;;;; 2 + 4 = 6; 0010 + 0100 = 0110
- {
- // obslugujemy przypadek, gdzie przedmiot jest juz zaliczony
- printf("Student o numerze indeksu %d nie ma juz zaliczenia z tego przedmiotu.\n", numer_indeksu);
- }
- // 4.
- else if (zaliczenia[student] & przedmiot > 0)
- {
- // oblugujemy przypadek, gdzie przedmiot jeszcze nie jest zaliczony
- zaliczenia[student] = zaliczenia[student] - przedmiot;
- }
- }
- void wyswietl_przedmioty(char* przedmioty[3])
- {
- // Zwykly for po przedmioty (zeby wypisac stringa, stosujemy %s w printf)
- printf("Przedmioty:\n");
- int przedmiot;
- for(przedmiot=0; przedmiot<3; przedmiot++);
- {
- printf("%s\n", przedmioty[przedmiot]);
- }
- }
- void wyswietl_zaliczenia(char* przedmioty[3], int studenci[64], int zaliczenia[64])
- {
- // 1. Idz po studentach forem
- // 2. Jezeli studenci[student] > 0, to zgarnij zaliczone przedmioty z zaliczenia[student] i je wyswietl, np. 295431 - fizyka, chemia lub 291760 - brak zaliczen
- int student;
- for (student = 0; student < 64; student++)
- {
- if (studenci[student] > 0)
- {
- int fizyka_zaliczona = zaliczenia[student] & 1;
- int matematyka_zaliczona = zaliczenia[student] & 2;
- int chemia_zaliczona = zaliczenia[student] & 4;
- int numer_indeksu = studenci[student];
- if (fizyka_zaliczona == 0 && matematyka_zaliczona == 0 && chemia_zaliczona == 0)
- {
- printF("Student o numerze %d nie zaliczyl zadnego przedmiotu.", numer_indeksu);
- }
- else {
- printf("Student o numerze %d zaliczyl nastepujace przedmioty: ", numer_indeksu);
- if (fizyka_zaliczona > 0)
- {
- printf("fizyke ");
- }
- if (matematyka_zaliczona > 0)
- {
- printf("matematyke ");
- }
- if (chemia_zaliczona > 0)
- {
- printf("chemie ");
- }
- }
- printf("\n");
- }
- else // else jest pusty, wiec mozna go wykasowac, ale nie rob tego :)
- {
- // nie rob nic
- }
- }
- }
- void pozegnaj_uzytkownika()
- {
- // 1. Ladnie pozegnaj uzytkownika :)
- printf("Do zobaczenia wkrotce. \n\n");
- }
- void wyswietl_blad()
- {
- // 1. Napisz, ze nie ma takiej opcji i popros o skorzystanie z menu
- printf("Brak takiej opcji. Skorztstaj ponownie z menu.\n\n");
- }
- void wyswietl_menu()
- {
- // Wiesz, jak zrobic :)
- printf("Menu:\n");
- printf("0. Wyswietl studentow\n");
- printf("1. Dodaj studenta\n");
- printf("2. Usun studenta\n");
- printf("3. Dodaj zaliczenie\n");
- printf("4. Usun zaliczenie\n");
- printf("5. Wyswietl przedmioty\n");
- printf("6. Wyswietl zaliczenia\n");
- printf("7. Zakoncz\n");
- }
- void zainicjalizuj_zaliczenia(int zaliczenia[64])
- {
- int zaliczenie;
- for (zaliczenie = 0; zaliczenie < 64; ++zaliczenie)
- {
- zaliczenia[zaliczenie] = -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement