Browse Source
Implementation of functions LoginAsCustomer() and Login()
remotes/origin/feature/string-handling^2
Implementation of functions LoginAsCustomer() and Login()
remotes/origin/feature/string-handling^2
fdai7057
2 years ago
4 changed files with 109 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||
1234=example |
|||
ID=1234 |
|||
forename=Max |
|||
Surname=Mustermann |
|||
password=example |
|||
balance=0 |
@ -0,0 +1,4 @@ |
|||
typedef struct Customer{ |
|||
char *ID, *forename, *surname, *password; |
|||
float balance; |
|||
}customer_t; |
@ -1,5 +1,97 @@ |
|||
#include "LoginCustomer.h" |
|||
|
|||
bool checkLogin(bool loginSuccessful) |
|||
{ |
|||
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; |
|||
} |
@ -1,3 +1,10 @@ |
|||
#include <stdio.h> |
|||
#include <stdlib.h> |
|||
#include <stdbool.h> |
|||
#include <string.h> |
|||
#include "CustomerProperties.h" |
|||
#define MAX_LOGIN_ATTEMPTS 3 |
|||
char *generateCheckString(char *, char*); |
|||
bool checkLogin(bool); |
|||
void collectCustomerDataForLogin(int); |
|||
bool loginCustomer(customer_t *); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue