Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Menu z uprawnieniami

#1
Menu z uprawnieniami
Witam wszystkich
Chcę napisać menu które będzie wyryfikowane o uprawnienia.Czyli jeśli użytkownik ma uprawnienia lub nie ma odpowiednia opcja pojawiaja się lub nie.

Napisałem taki kod:
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef void (*typ_na_fun)(void);
struct menu
{
   int *nazwa;
   struct menu *wsk_na_struk;
   int rozmiar;
   typ_na_fun wsk_na_fun;
   int uprawnienia;
};

void magda(){puts("Magda");}
void piotrek(){puts("Pawel");}
void hania(){puts("Hania");}

void dodawanie(){puts("dodawanko");}
void odejmowanie(){puts("odejmowanko");}
void mnozenie(){puts("mnozonko");}
void dzielenie(){puts("dzielonko");}

void zmien_haslo(){puts("zmiana haselka");}
void zaloz_konto(){puts("zalozenie konteczka");}
void nadac_uprawnienia(){puts("nadanie uprawnioneczek");}
void all_users(){puts("wszyscy userzy");}

void haslo_user_logon(){puts("zmiana haseleczka");}
void kontrahent(){puts("kontrahenci");}

struct menu imiona[]={
                      {"Magdalena",NULL,0,magda,1},
                      {"Piotr",NULL,0,piotrek,0},
                      {"Hanna",NULL,0,hania,0},
                      {"Powroty",NULL,0,NULL,1},
                    };
struct menu menu_mat_awans[]={
                             {"imiennicy",imiona,sizeof(imiona)/sizeof(*imiona),NULL,1},
                             {"dodac",NULL,0,dodawanie,1},
                             {"odjac",NULL,0,odejmowanie,0},
                             {"mnozyc",NULL,0,mnozenie,0},
                             {"dzielic",NULL,0,dzielenie,0},
                             {"Powrot",NULL,0,NULL,1}
};

struct menu menu_admin[]={
                         {"menu matematyczne",menu_mat_awans,sizeof(menu_mat_awans)/sizeof(*menu_mat_awans),NULL,1},
                         {"zmiana hasla wedlug loginu",NULL,0,zmien_haslo,1},
                         {"zalozenie konta dla uzytkownika",NULL,0,zaloz_konto,1},
                         {"nadanie uprawnien uzytkownikowi",NULL,0,nadac_uprawnienia,0},
                         {"wykaz wszystkich uzytkownikow",NULL,0,all_users,0},
                         {"Powrot",NULL,0,NULL,1}
                        };

struct menu menu_uzytkownika[]={
                               {"zmiana hasla uzytkownika zalogowanego",NULL,0,haslo_user_logon,0},
                               {"dodanie kontrahenta",NULL,0,kontrahent,1},
                               {"Powrot",NULL,0,NULL,1}
                              };

           struct menu menu_ogolne[]={
                                      {"menu admin",menu_admin,sizeof(menu_admin)/sizeof(*menu_admin),NULL,1},
                                      {"menu user",menu_uzytkownika,sizeof(menu_uzytkownika)/sizeof(*menu_uzytkownika),NULL,1},
                                      {"wyjscie",NULL,0,NULL,1}
                                     };
struct menu start={NULL,menu_ogolne,sizeof(menu_ogolne)/sizeof(*menu_ogolne),NULL,1};

int wielkosc_menu(struct menu *size)
{
   int a,wielkosc=0;
   for(a=0;a<size->rozmiar;a++)
   {
       if((size->wsk_na_struk[a].uprawnienia)==1)
       {
           wielkosc=wielkosc++;
       }
   }
   return wielkosc;
}

struct menu* new_menu(struct menu* n_menu,int rozmiar)
{
   int y,x=0;
   struct menu pobierz[rozmiar];
   for(y=0;y<n_menu->rozmiar;y++)
   {
       if((n_menu->wsk_na_struk[y].uprawnienia)==1)
       {
           pobierz[x]=n_menu->wsk_na_struk[y];
           x=x++;
       }
   }
   n_menu->wsk_na_struk=pobierz;
   uruchom(n_menu);
}

int uruchom(struct menu *go)
{
   int wielkosc=wielkosc_menu(go);
   int i;
   for(;;)
   {
       puts("Menu:");
       for(i=0;i<wielkosc;i++)
       printf("%d. %s\n",i,go->wsk_na_struk[i]);
       scanf("%d",&i);
       if(go->wsk_na_struk[i].rozmiar)
       {
           new_menu(&go->wsk_na_struk[i],wielkosc);
       }
       else if(go->wsk_na_struk[i].wsk_na_fun)
       {
           go->wsk_na_struk[i].wsk_na_fun();
       }
       else
       {
           return;
       }
   }
}

int main()
{
   uruchom(&start);
}

Program działa jeśli przechodzimy od początku i wchodzimy w poszczególne menu.
Jeśli jednak wejdziemy w kolejne pozycje menu później sie cofniemy to przy kolejnej próbie wejscia do kolejnego menu program się wysypie.
Proszę o pomoc w rozwiązaniu problemu i o wytłumaczenie dlaczego program się sypie.
Proszę o szczegółowe info.
Pozdrawiam
 System operacyjny: windows_xp_2003 Przeglądarka: opera
#2
RE: Menu z uprawnieniami
Witam, dziwię się, że Tobie się ten program uruchamia - a więc:
1. W linii siódmej powinno być char zamiast int.
2. W linii 90 powinno być albo x++, albo x=x+1 (podobnie w linii 70).
3. Funkcja uruchom powinna być wcześniej zdefiniowana albo powinna być wcześniej umieszczona jej deklaracja.
4. W linii 107 chcesz wypisać łańcuch tekstowy, a przekazujesz obiekt typu struct menu.
5. W funkcji new_menu brakuje instrukcji return.
6. W funkcji uruchom brakuje zwracanej wartości.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
#3
RE: Menu z uprawnieniami
Witam
Szachisto chciałem podziękować za zainteresowanie.
Rozumiem o co chodzi w punktach 1,2,3.
W lini 4 winno być printf(%d.%s\n,i,go->wsk_na_struk[i].nazwa);
Ale nie za bardzo rozumiem punkt 5 i 6.
Rozumiem, że w punkcie 5 mam zwrócić adres tablicy pobierz[].
Co ma zwrócić funkcja uruchom() w punkcie 6, bo się pogubiłem(czy chodzi o zwróconą wartość z new_menu(), która ma być argumentem dla funkcji uruchom().
Pozdrawiam
 System operacyjny: windows_seven Przeglądarka: ie
#4
RE: Menu z uprawnieniami
Nie wiem, co chciałeś osiągnąć w tych funkcjach, ale wygląda na to, że wystarczy zmienić typ zwracanej wartości na void w obu funkcjach.
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Menu z uprawnieniami)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  program nie uruchamia się przy stracie systemu z uprawnieniami administratora dawid653 0 875 10.11.2011, 16:01
Ostatni post: dawid653

Skocz do:


Wybrane wątki (Menu z uprawnieniami)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Szkoła Informatyczna Zikinan 1 6607 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 7325 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 6618 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 7299 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 10145 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 7840 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 8631 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 7929 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 8379 06.09.2018 07:20
Ostatni post: broda99
  problem z programem .bat wiktrom12 4 9500 30.08.2018 08:25
Ostatni post: wiktrom12
  Silnik do gier ZigglerGames 1 8201 23.08.2018 09:03
Ostatni post: Szachista
  Chciałbym zrobić prosty plik exe z jedną funkcją densour 4 8932 09.08.2018 16:24
Ostatni post: Ajgor
  Który język wybrać do stworzenia aplikacji synchronizujące pliki z urządzeniem mobiln Elemental 2 2407 18.07.2018 12:05
Ostatni post: Ajgor
  Pomysł napisania programu ROM FireBytes 3 9578 28.06.2018 16:56
Ostatni post: FireBytes
  [VBA] Tworzenie nowego arkusza z danymi z TextBox'a Pioro 4 9908 19.06.2018 23:24
Ostatni post: broda99