Buongiorno ho un problema nel mio progetto devo differenziare tra utente Admin ed utente normale per quanto riguarda l'accesso ho utilizzato una lista in pratica devo fare in modo che se entro come Admin e poi mi iscrivo come utente ed accedo devo poter accedere con le credenziali dell'utente
List.c
list.h
main.c
Ma mi da questo errore
In pratica e come se nella listaUtenti L non ci sia nulla....Sapete come posso risolvere??
Grazie in anticipo
List.c
Codice:
#include <stdlib.h>
#include "ListUtente.h"
#include <string.h>
#include <stdio.h>
ListUtente initListUtente(char name[50], char surname[50], char email[100],char password[7], bool isAdmin)
{
ListUtente L = (ListUtente)malloc(sizeof(struct Utente));
strcpy(L->name, name);
strcpy(L->surname, surname);
strcpy(L->email, email);
strcpy(L->password, password);
L->isAdmin =isAdmin;
L->next = NULL;
return L;
}
void user_exist(ListUtente L, char name[50], char surname[50], char email[100], char password[7], bool isAdmin) {
struct Utente *tmp;
tmp = L->next;
if (tmp != NULL)
{
if (strcmp(tmp->name,name)==0 && strcmp(tmp->surname,surname)==0 && strcmp(tmp->email,email)==0 && strcmp(tmp->password, password)==0 && tmp->isAdmin==isAdmin)
{
printf("\n Benvenuto %s %s \n", tmp->name, tmp->surname);
}
user_exist(tmp->next,name,surname,email,password,isAdmin);
}
}
ListUtente user_push(ListUtente L, char name[50], char surname[50], char email[100], char password[7], bool isAdmin)
{
if (L != NULL){
L->next = user_push(L->next,name,surname,email,password,isAdmin);
} else{
L = initListUtente(name,surname,email, password,isAdmin);
}
return L;
}
C:
#ifndef ListUtente_h
#define ListUtente_h
#include <stdbool.h>
#include <stdio.h>
struct Utente{
char name[50];
char surname[50];
char email[100];
char password[7];
bool isAdmin;
struct Utente* next;
};
typedef struct Utente* ListUtente;
ListUtente initListUtente(char name[50], char surname[50], char email[100],char password[7], bool isAdmin);
void user_exist(ListUtente L, char name[50], char surname[50], char email[100], char password[7], bool isAdmin);
ListUtente user_push(ListUtente L,char name[50], char surname[50], char email[100], char password[7], bool isAdmin);
#endif /* ListUtente_h */
main.c
C:
/*progetto gestione delle prenotazioni di voli.*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <string.h>
#include <stdbool.h>
#include "Graph.h"
#include "List.h"
#include "Queue.h"
#include "Menu.h"
#include "ListPrenotazioni.h"
#include "ListUtente.h"
#define BUFFER_SIZE 256
#define randomize srand(((unsigned int) time(NULL)))
#define random(x) rand()%x
int main(int argc, char** argv){
bool Admin;
char name[50];
char surname[50];
char cityDestination[10];
char deleteCity[10];
char city[10];
char cityPartenza[10];
char cod_id[7];
int n=1,m=1;
char email[100];
char pwd[7];
ListPrenotazioni L = NULL;//per listPrenotazioni
ListUtente l = NULL;//per listUtente
randomize;
Graph g = populateGraph();
char mostPopularDestination = random(g->nodes_count);
char buffer_email[BUFFER_SIZE];
char buffer_password[BUFFER_SIZE];
int loginChoice;
int adminChoice;
int userChoice;
int user1Choice;
int user2Choice;
bool continueLoop;
double price;
double distance;
int p;
do{
loginChoice = LoginMenu();
if(loginChoice == 0){ /*azioni amministratore*/
continueLoop = true;
Admin=true;
printf("Insert name: ");
scanf("%s", name);
printf("Insert surname: ");
scanf("%s", surname);
printf("Insert e-mail: ");
scanf("%s", buffer_email);
printf("Insert password (max 7 characters): ");
scanf("%s", buffer_password);
l = user_push(l,name,surname,email,pwd,Admin);
user_exist(l,name,surname,email,pwd,Admin);
/*
Se l'admin non e' presente nella data structure degli admin --> continueLoop = false
In questo modo torna al menu di login e non vengono eseguite operazioni
*/
while(continueLoop){
adminChoice = AdminMenu();
switch (adminChoice){
case 0: // exit / logout
continueLoop = false;
break;
case 1: /* stampa destinazioni e tratte*/
printf("\nThe destinations are as follows:\n");
PrintGraph(g);
break;
case 2: /*inserisci destinazioni e tratte*/
addNode(g, getCityName("new destination(first uppercase character)"));
printf("\nInserire numero tratte da inserire:\n");
scanf("%d",&p);
for(int v=0; v<p; v++){
printf("\nInsert price(es. 23.78):%d ",v);
scanf("%lf", &price);
printf("\nInsert distance(es. 345.98):%d",v);
scanf("%lf", &distance);
addEdge(g,getCityIndexByName(g,getCityName("new destination(first uppercase character)")), getCityIndexByName(g, getCityName("new destination(first uppercase character)")),price,distance);
}
printf("\n~Operation successfully performed~\n");
break;
case 3: /*cancella destinazioni e tratte*/
printf("Insert the city to be deleted:\n");
scanf("%s", deleteCity);
removeNodeByString(g,deleteCity);
printf("~\nOperation successfully performed~\n");
break;
default: /*Se l'utente sbaglia ad inserire il numero*/
printf("This button does not allow you to make choices! Try again!\n");
break;
}
}
}else if(loginChoice == 1){ /*azioni utenti*/
continueLoop = true;
Admin=false;
while(continueLoop){
user1Choice = UserMenu1();
switch (user1Choice){
case 0: // exit / logout
continueLoop = false;
break;
case 1: /*effettuo iscrizione*/
for(int i=0; i<n; i++){
printf("\nInsert name:\n");
scanf("%s", name);
printf("\nInsert surname:\n");
scanf("%s", surname);
printf("\nInsert e-mail:\n");
scanf("%s",email);
printf("\nInsert password:\n");
scanf("%s",pwd);
}
l=user_push(l,name,surname,email,pwd,Admin);
break;
case 2: /*effettuo accesso*/
printf("\nInsert e-mail:\n");
scanf("%s",email);
printf("\nInsert surname:\n");
scanf("%s",surname);
printf("\nInsert password:\n");
scanf("%s",pwd);
user_exist(l,name,surname,email,pwd,Admin);
// printf("~\nLogin successful~\n");
if(loginChoice == 1){ /*azioni utenti*/
continueLoop = true;
while (continueLoop){
userChoice = UserMenu();
switch (userChoice){
case 0:
continueLoop = false;
break;
case 1: /*vedi prenotazioni attive*/
printf("\nThe destinations are as follows:\n");
PrintGraph(g);
break;
case 2: /*effettua prenotazione*/
if(loginChoice == 1){ /*azioni utenti*/
continueLoop = true;
while (continueLoop){
user2Choice = UserMenu2();
switch (user2Choice){
case 0:
continueLoop = false;
break;
case 1: /*Prenotazione basata sul meno scambi inserendo la città di partenza e la città di destinazione*/
printf("\nInserisci città di partenza: ");
scanf("%s", cityPartenza);
printf("\nInserisci città di destinazione: ");
scanf("%s", cityDestination);
//inserire funzione per determinare tratta più economica
printf("Enter the number of reservations you wish to make\n");
scanf("%d",&m);
for (int i=0; i<m; i++){
printf("\nInsert citta:\n");
scanf("%s",city);
printf("\nInsert id:\n");
scanf("%s",cod_id);
L = insertTailPrenotazioni(L,city,cod_id);
}
break;
case 2: /*Prenotazione basata sui percorsi più brevi inserendo la città di partenza e destinazione
funzione per percorsi brevi*/
printf("\nInserisci città di partenza: ");
scanf("%s", cityPartenza);
printf("\nInserisci città di destinazione: ");
scanf("%s", cityDestination);
//inserire funzione per determinare tratta più breve
printf("Enter the number of reservations you wish to make\n");
scanf("%d",&m);
for (int i=0; i<m; i++){
printf("\nInsert citta:\n");
scanf("%s",city);
printf("\nInsert id:\n");
scanf("%s",cod_id);
L = insertTailPrenotazioni(L,city,cod_id);
}
break;
case 3: /*Prenotazione basata sulla destinazione più economica inserendo solo la città di partenza
funzione per destinazione piu economica*/
printf("\nInserisci città di partenza: ");
scanf("%s", cityPartenza);
//inserire funzione per la tratta più economica
printf("Enter the number of reservations you wish to make\n");
scanf("%d",&m);
for (int i=0; i<m; i++){
printf("\nInsert citta:\n");
scanf("%s",city);
printf("\nInsert id:\n");
scanf("%s",cod_id);
L = insertTailPrenotazioni(L,city,cod_id);
}
break;
case 4: /*Prenotazione basata sulla destinazione più popolare inserendo solo la città di partenza*/
printf("\nEnter city of start: ");
scanf("%s", cityPartenza);
printf("\n The most popular destination is the following:\n");
mostPopularDestination = random(g->nodes_count);
char* cityName = g->cityNames[mostPopularDestination];
printf("id:%d city:%s\n",mostPopularDestination,cityName);
printf("Enter the number of reservations you wish to make\n");
scanf("%d",&m);
for (int i=0; i<m; i++){
printf("\nInsert citta partenza:\n");
scanf("%s", city);
printf("\nInsert id:\n");
scanf("%s",cod_id);
L = insertTailPrenotazioni(L,city,cod_id);
}
break;
case 5: /*vedi prenotazioni attive*/
printListPrenotazioni(L);
break;
}
}
}
default: /*Se l'utente sbaglia ad inserire il numero*/
printf("This button does not allow you to make choices! Try again!\n");
break;
}
}
}
}
}
}
}while(loginChoice != 2);
printf("Thanks for choosing us, come back to visit us!\n");
return 0;
}
Ma mi da questo errore
In pratica e come se nella listaUtenti L non ci sia nulla....Sapete come posso risolvere??
Grazie in anticipo