|
@ -1,5 +1,97 @@ |
|
|
#include "LoginCustomer.h" |
|
|
#include "LoginCustomer.h" |
|
|
|
|
|
|
|
|
bool checkLogin(bool loginSuccessful) |
|
|
bool checkLogin(bool loginSuccessful) |
|
|
{ |
|
|
{ |
|
|
return (loginSuccessful) ? true : false; |
|
|
return (loginSuccessful) ? true : false; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void collectCustomerDataForLogin(int attempts) |
|
|
|
|
|
{ |
|
|
|
|
|
customer_t c; |
|
|
|
|
|
c.ID = calloc(15+1,sizeof(char)); |
|
|
|
|
|
c.password = calloc(15+1, sizeof(char)); |
|
|
|
|
|
char digitCharacterFromUser, passwordCharacterFromUser; |
|
|
|
|
|
int IDLengthCounter = 0, passwordLengthCounter = 0; |
|
|
|
|
|
const int IDMaxLength = 16, passwordMaxLength = 16; |
|
|
|
|
|
|
|
|
|
|
|
printf("Enter ID:\n"); |
|
|
|
|
|
while(((digitCharacterFromUser=getchar()) != '\n')&&IDLengthCounter<IDMaxLength){ |
|
|
|
|
|
if(digitCharacterFromUser>='0'&&digitCharacterFromUser<='9'){ |
|
|
|
|
|
*(c.ID+IDLengthCounter) = digitCharacterFromUser; |
|
|
|
|
|
} |
|
|
|
|
|
else{ |
|
|
|
|
|
printf("Character entered is not a digit. Aborting.\n"); |
|
|
|
|
|
exit(-1); |
|
|
|
|
|
} |
|
|
|
|
|
++IDLengthCounter; |
|
|
|
|
|
} |
|
|
|
|
|
*(c.ID+IDLengthCounter) = '\0'; |
|
|
|
|
|
|
|
|
|
|
|
if(IDLengthCounter>=IDMaxLength){ |
|
|
|
|
|
printf("ID entered is too long. Aborting.\n"); |
|
|
|
|
|
exit(-1); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
printf("Enter password:\n"); |
|
|
|
|
|
while((passwordCharacterFromUser=getchar())!='\n'&&passwordLengthCounter<passwordMaxLength){ |
|
|
|
|
|
*(c.password+passwordLengthCounter) = passwordCharacterFromUser; |
|
|
|
|
|
++passwordLengthCounter; |
|
|
|
|
|
} |
|
|
|
|
|
*(c.password+passwordLengthCounter) = '\0'; |
|
|
|
|
|
|
|
|
|
|
|
if(passwordLengthCounter>=passwordMaxLength){ |
|
|
|
|
|
printf("Password entered is too long. Aborting.\n"); |
|
|
|
|
|
exit(-1); |
|
|
|
|
|
} |
|
|
|
|
|
customer_t *ptr = &c; |
|
|
|
|
|
bool loginSuccessful = loginCustomer(ptr); |
|
|
|
|
|
if(loginSuccessful ) { |
|
|
|
|
|
printf("Welcome to the menu!\n"); |
|
|
|
|
|
//call menu() |
|
|
|
|
|
}else if(!loginSuccessful && attempts < MAX_LOGIN_ATTEMPTS){ |
|
|
|
|
|
printf("You have %d attempts left.\n", MAX_LOGIN_ATTEMPTS - attempts); |
|
|
|
|
|
collectCustomerDataForLogin(++attempts); |
|
|
|
|
|
}else{ |
|
|
|
|
|
printf("Maximum number of attempts reached. Program terminates.\n"); |
|
|
|
|
|
exit(-1); |
|
|
|
|
|
//call error() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool loginCustomer(customer_t *c) |
|
|
|
|
|
{ |
|
|
|
|
|
bool foundCustomerEntryInFile = false; |
|
|
|
|
|
char *searchForThisString = generateCheckString(c->ID,c->password); |
|
|
|
|
|
char *lineFromCustomerFile = calloc(40,sizeof(char)); |
|
|
|
|
|
FILE *readCustomerFile = fopen("CustomerData.txt", "r"); |
|
|
|
|
|
if(readCustomerFile==NULL){ |
|
|
|
|
|
printf("Could not find file. Aborting.\n"); |
|
|
|
|
|
exit(-1); |
|
|
|
|
|
//call error() |
|
|
|
|
|
} |
|
|
|
|
|
while((fscanf(readCustomerFile,"%s",lineFromCustomerFile)!=EOF)){ |
|
|
|
|
|
if(strcmp(searchForThisString,lineFromCustomerFile)==0){ |
|
|
|
|
|
foundCustomerEntryInFile = true; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if(checkLogin(foundCustomerEntryInFile)){ |
|
|
|
|
|
printf("Login successful.\n"); |
|
|
|
|
|
return foundCustomerEntryInFile; |
|
|
|
|
|
}else{ |
|
|
|
|
|
printf("Login not successful.\n"); |
|
|
|
|
|
} |
|
|
|
|
|
fclose(readCustomerFile); |
|
|
|
|
|
return foundCustomerEntryInFile; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
char *generateCheckString(char *ID, char *password){ |
|
|
|
|
|
int checkStringLength = strlen(ID) + 1 + strlen(password) + 1; |
|
|
|
|
|
char *checkString = calloc(checkStringLength, sizeof(char)); |
|
|
|
|
|
checkString = strcat(ID,"="); |
|
|
|
|
|
checkString = strcat(checkString,password); |
|
|
|
|
|
*(checkString+checkStringLength) = '\0'; |
|
|
|
|
|
return checkString; |
|
|
|
|
|
} |