Browse Source

solve merge conflict

remotes/origin/feature/customer-login
fdai7057 2 years ago
parent
commit
de53d4ef95
  1. 6
      src/CustomerData.txt
  2. 4
      src/CustomerProperties.h
  3. 92
      src/LoginCustomer.c
  4. 7
      src/LoginCustomer.h

6
src/CustomerData.txt

@ -0,0 +1,6 @@
1234=example
ID=1234
forename=Max
Surname=Mustermann
password=example
balance=0

4
src/CustomerProperties.h

@ -1,5 +1,9 @@
typedef struct Customer{ typedef struct Customer{
<<<<<<< HEAD
int ID; int ID;
char *forename,*surname,*password; char *forename,*surname,*password;
=======
char *ID, *forename, *surname, *password;
>>>>>>> 3e7a7d3 (Implementation of functions LoginAsCustomer() and Login())
float balance; float balance;
}customer_t; }customer_t;

92
src/LoginCustomer.c

@ -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;
}

7
src/LoginCustomer.h

@ -1,3 +1,10 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> #include <stdbool.h>
#include <string.h>
#include "CustomerProperties.h"
#define MAX_LOGIN_ATTEMPTS 3
char *generateCheckString(char *, char*);
bool checkLogin(bool); bool checkLogin(bool);
void collectCustomerDataForLogin(int);
bool loginCustomer(customer_t *);
Loading…
Cancel
Save