Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // main.c
- // HW6
- //
- // Created by חן גולדשטיין on 31/12/2018.
- // Copyright © 2018 חן גולדשfטיין. All rights reserved.
- //
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define LINE_MAX 300 //supposed to be 295: 294 letters and one \0
- #define ID_LENGTH 10
- #define NAME_MAX 15
- #define LASTNAME_MAX 15
- #define AGE_MIN 18
- #define AGE_MAX 100
- #define MALE_GENDER 'M'
- #define FEMALE_GENDER 'F'
- #define USERNAME_MIN 3
- #define USERNAME_MAX 10
- #define PASSWORD_MIN 3
- #define PASSWORD_MAX 15
- #define DESCRIPTION_MAX 221
- #define HOBBIES_WITH_COMMAS 8
- /*********************************************/
- typedef struct
- {
- char id [ID_LENGTH];
- char* name;
- char* lastName;
- char* username;
- char* password;
- char* description;
- int age;
- char gender;
- unsigned char hobbies;
- }user;
- typedef struct femaleNode femaleNode;
- struct femaleNode
- {
- user* femaleData;
- femaleNode* nextFemale;
- };
- typedef struct{
- femaleNode *head, *last;
- } femaleList;
- /*****************************************/
- user* createUserFromDataBase(char *line);
- void freeUser(user* userPointer);
- void freeFemaleNode(struct femaleNode* femalePointer);
- femaleList* addFemale(femaleList* list, femaleNode* femaleAdd);
- femaleNode* newFemale(user* dataUser, femaleNode* next);
- user** addMale(user* dataUser, user** dataBaseMales, int* size);
- void createDataBase(FILE *src, femaleList* dataBaseList, user*** dataBaseMalesPointer, int* sizePointer);
- user** deleteMale(user** dataBaseMales, user* currentUser, int* sizeArrPointer);
- femaleList* deleteFemale(femaleList* dataBaseList, user* currentUser);
- user* loginToSystem(user* currentUser, user **dataBaseMales, femaleList *dataBaseFemales, int sizeArr);
- user* findUserName(char* username, user **dataBaseMales, femaleList* dataBaseFemales, int sizeArr);
- void mainMenu(user* currentUser, user ***dataBaseMales, femaleList *dataBaseFemales, int* sizeArrPointer);
- void enteringMenu(user* currentUser, user ***dataBaseMales, femaleList *dataBaseFemales, int *sizePointer);
- int checkIfValidUser(user* currnetUser);
- void outputFile(user** dataBaseMales, femaleList* dataBaseList, int* sizePointer);
- void freeFemaleList(femaleList* dataBaseList);
- void freeMaleArr(user** dataBaseMales, int size);
- void toString(user* user);
- unsigned char getHobbies(char* fourDigitsHobbis);
- int countOnes(unsigned char hob);
- int checkHobbies (unsigned char maleHobibbies,unsigned char femaleHobbies);
- int isMatchHobbies (unsigned char maleHobibbies,unsigned char femaleHobbies);
- void convertCharToNumbers(unsigned char hobbies, char* hobbiesPrint);
- void addUserFromInput(user* newUser, user*** dataBaseMales, femaleList* dataBaseFemales, int *sizeArr);
- int isIdExist(char id[], user** dataBaseMales, femaleList* dataBaseFemales, int sizeArr);
- void printHobbies(unsigned char hobbies);
- enum hobbies{BASEBALL=1, BASKETBALL, BICYCLE, BOOKS, DRAWING, GYM, MOVIES, POETRY};
- int main(int argc, const char * argv[]) {
- FILE *src = fopen("/Users/chengoldi/Downloads/ex6-2/input.txt", "r");
- if (src == NULL)
- {
- printf("we failed to create FILE\n");
- exit(1);
- }
- int size = 0;
- int* sizePointer = &size;
- //the user we use in the code
- user* newUser = NULL;
- //the list of females
- femaleList* dataBaseList = (femaleList*)malloc(sizeof(femaleList));
- if(dataBaseList == NULL)
- {
- printf("we failed to create DATA_BASE_LIST\n");
- exit(1);
- }
- //the array of males
- user** dataBaseMales = (user**)malloc(sizeof(user*));
- //the pointer to the array of males
- user*** malesPointer = &dataBaseMales;
- if(dataBaseMales == NULL)
- {
- printf("we failed to create DATA_BASE_MALE\n");
- exit(1);
- }
- /* end of initialization */
- // creating the list and the array
- createDataBase(src,dataBaseList, malesPointer, sizePointer);
- fclose(src);
- //running the entering menu and the entire code
- enteringMenu(newUser, malesPointer, dataBaseList, sizePointer);
- //finishing the program and exporting to output.txt
- outputFile(dataBaseMales, dataBaseList, sizePointer);
- freeFemaleList(dataBaseList);
- freeMaleArr(*malesPointer, size);
- return 0;
- }
- /*****************************************/
- user* createUserFromDataBase(char *line)
- {
- user *userDataPointer = (user*)malloc(sizeof(user));
- const char *delimiter = ";";
- char *tempBuffer;
- char hobbiesSaver[8];
- tempBuffer = strtok(line, delimiter);
- //getting the id
- strcpy(userDataPointer->id, tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- //getting the name
- userDataPointer->name = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(userDataPointer->name == NULL)
- {
- printf("we failed to create NAME\n");
- exit(1);
- }
- strcpy(userDataPointer->name, tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- //getting the last name
- userDataPointer->lastName = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(userDataPointer->lastName == NULL)
- {
- printf("we failed to create LAST_NAME\n");
- exit(1);
- }
- strcpy(userDataPointer->lastName, tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- //getting the age
- userDataPointer->age = atoi(tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- //getting the gender
- userDataPointer->gender = *tempBuffer;
- tempBuffer = strtok(NULL, delimiter);
- //getting the username
- userDataPointer->username = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(userDataPointer->username == NULL)
- {
- printf("we failed to create USERNAME\n");
- exit(1);
- }
- strcpy(userDataPointer->username, tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- //getting the password
- userDataPointer->password = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(userDataPointer->password == NULL)
- {
- printf("we failed to create PASSWORD\n");
- exit(1);
- }
- strcpy(userDataPointer->password, tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- //getting the hobbies
- strcpy(hobbiesSaver, tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- //getting the hobbies char
- userDataPointer->hobbies = getHobbies(hobbiesSaver);
- //getting the description
- userDataPointer->description = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(userDataPointer->description == NULL)
- {
- printf("we failed to create DESCRIPTION\n");
- exit(1);
- }
- strcpy(userDataPointer->description, tempBuffer);
- tempBuffer = strtok(NULL, delimiter);
- return userDataPointer;
- }
- /*****************************************/
- void createDataBase(FILE *src, femaleList* databaseList, user*** dataBaseMalesPointer, int* sizePointer)
- {
- char linesBuffer[LINE_MAX];
- user* newUserPointer;
- femaleNode* creatingFemale; // we (dynamicly) created it inside the while
- if(src == NULL)
- {
- printf("failed to open file\n");
- exit(1);
- }
- //we check if we reached the end of the file
- //and then we put a line in the linesBuffer
- while (!feof(src) && (fgets(linesBuffer, LINE_MAX, src) != NULL))
- {
- newUserPointer = createUserFromDataBase(linesBuffer);
- if(newUserPointer->gender == FEMALE_GENDER)
- {
- creatingFemale = newFemale(newUserPointer, NULL);
- databaseList = addFemale(databaseList, creatingFemale);
- }
- else
- {
- *dataBaseMalesPointer = addMale(newUserPointer, *dataBaseMalesPointer, sizePointer);
- }
- }
- }
- /*****************************************/
- void freeUser(user* userPointer)
- {
- if(userPointer != NULL)
- {
- if (userPointer->name != NULL)
- {
- free(userPointer->name);
- }
- if (userPointer->lastName != NULL)
- {
- free(userPointer->lastName);
- }
- if (userPointer->username != NULL)
- {
- free(userPointer->username);
- }
- if (userPointer->password != NULL)
- {
- free(userPointer->password);
- }
- if (userPointer->description != NULL)
- {
- free(userPointer->description);
- }
- free(userPointer);
- }
- }
- /*****************************************/
- void freeFemaleNode(femaleNode* femalePointer)
- {
- if (femalePointer != NULL)
- {
- if(femalePointer->femaleData != NULL) // for debugging
- {
- freeUser(femalePointer->femaleData);
- }
- freeFemaleNode(femalePointer->nextFemale);
- free(femalePointer);
- }
- }
- void freeFemaleList(femaleList* dataBaseList)
- {
- freeFemaleNode(dataBaseList->head);
- free(dataBaseList);
- }
- void freeMaleArr(user** dataBaseMales, int size)
- {
- int i;
- if (dataBaseMales != NULL)
- {
- for(i = 0; i < size; i++)
- {
- freeUser(dataBaseMales[i]);
- }
- free(dataBaseMales);
- }
- }
- /*****************************************/
- femaleNode* newFemale(user* dataUser, femaleNode* next)
- {
- femaleNode* tempFemale = (femaleNode*)malloc(sizeof(femaleNode));
- if(tempFemale == NULL)
- {
- printf("we failed to create TEMP_FEMALE_NODE\n");
- exit(1);
- }
- tempFemale->femaleData = dataUser;
- tempFemale->nextFemale = next;
- return tempFemale;
- }
- /*****************************************/
- femaleList* addFemale(femaleList* list, femaleNode* femaleAdd) // adding female according to the ABC
- {
- femaleNode* current = list->head;
- femaleNode* prev = NULL;
- while(current != NULL)
- {
- //check if to put it in the head
- if(strcmp(femaleAdd->femaleData->lastName, current->femaleData->lastName) < 0)
- {
- //we are adding to the first spot
- if(prev == NULL)
- {
- femaleAdd->nextFemale = current;
- list->head = femaleAdd;
- return list;
- }
- // just a normal adding in between
- femaleAdd->nextFemale = current;
- prev->nextFemale = femaleAdd;
- return list;
- }
- //moving the pointers one spot further
- prev = current;
- current = current->nextFemale;
- }
- //the list is empty
- if(prev == NULL)
- {
- list->head = femaleAdd;
- list->last = femaleAdd;
- return list;
- }
- //currnet reached null so previous is in last and we add the new female to the last spot
- prev->nextFemale = femaleAdd;
- return list;
- }
- /*****************************************/
- user** addMale(user* dataUser, user** dataBaseMales, int* size)
- {
- dataBaseMales = (user**)realloc(dataBaseMales, (*size + 1)*sizeof(user*));
- if(dataBaseMales == NULL)
- {
- printf("we failed to create ADD_MALE_DATA_BASE\n");
- exit(1);
- }
- dataBaseMales[*size] = dataUser;
- *size = *size + 1;
- return dataBaseMales;
- }
- /*****************************************/
- /*after login functions*/
- void findMatch (user** dataBaseMales, user* user, femaleList* dataBaseFemales, int sizeArr)
- {
- int minAge, maxAge, i, countMatch = 0;
- femaleNode *iterator = dataBaseFemales->head;
- printf("Please choose ages range:\n");
- scanf("%d %d", &minAge, &maxAge);
- switch (user->gender) {
- case MALE_GENDER:
- {
- //finding females
- while (iterator != NULL)
- {
- if (iterator->femaleData->age >= minAge && iterator->femaleData->age <= maxAge)
- {
- if(isMatchHobbies(user->hobbies, iterator->femaleData->hobbies) == 1)
- {
- printf("Name: %s %s Age: %d Hobbies: ", iterator->femaleData->name, iterator->femaleData->lastName, iterator->femaleData->age);
- printHobbies(iterator->femaleData->hobbies);
- printf("Description: %s\n", iterator->femaleData->description);
- countMatch++;
- }
- }
- iterator = iterator->nextFemale;
- }
- break;
- }
- case FEMALE_GENDER:
- {
- //finding males
- for(i = 0; i < sizeArr; i++)
- {
- if (dataBaseMales[i]->age >= minAge && dataBaseMales[i]->age <= maxAge)
- {
- if(isMatchHobbies(dataBaseMales[i]->hobbies, user->hobbies) == 1)
- {
- printf("Name: %s %s Age: %d Hobbies: ", dataBaseMales[i]->name, dataBaseMales[i]->lastName, dataBaseMales[i]->age);
- printHobbies(dataBaseMales[i]->hobbies);
- printf("Description: %s\n", dataBaseMales[i]->description);
- countMatch++;
- }
- }
- }
- break;
- }
- default:
- break;
- }
- }
- /** finding if there is a match **/
- unsigned char getHobbies(char* fourDigitsHobbis)
- {
- const char *delimeter = ",";
- char* tempCutChar;
- unsigned char tempChar = 0;
- int tempHob;
- tempCutChar = strtok(fourDigitsHobbis, delimeter);
- while (tempCutChar != NULL)
- {
- tempHob = atoi(tempCutChar);
- tempChar = (tempChar^(1<<(tempHob - 1)));
- tempCutChar = strtok(NULL, delimeter);
- }
- return tempChar;
- }
- int countOnes(unsigned char hob)
- {
- int i, counter = 0;;
- for(i = 0; i < 8; i++)
- {
- if((hob & 1) == 1 /*|| hob % 2 == -1, because we make it unsigned then it is not negative*/)
- counter++;
- hob >>= 1;
- }
- return counter;
- }
- int isMatchHobbies (unsigned char maleHobibbies,unsigned char femaleHobbies)
- {
- int matchCounter = 0;
- unsigned char temp = maleHobibbies&femaleHobbies;
- matchCounter = countOnes(temp);
- if (matchCounter >= 2)
- {
- return 1;
- }
- return 0;
- }
- unsigned char getHobbiesFromNewUser(char* fourDigitsHobbis)
- {
- int i;
- // const char *delimeter = " ";
- char* tempCutChar;
- unsigned char tempChar = 0;
- int tempHob;
- // tempCutChar = strtok(fourDigitsHobbis, delimeter);
- // while (tempCutChar != NULL)
- for (i = 0; i < 8; i+=2)
- {
- tempCutChar = &fourDigitsHobbis[i];
- tempHob = atoi(tempCutChar);
- tempChar = (tempChar^(1<<(tempHob - 1)));
- // tempCutChar = strtok(NULL, delimeter);
- }
- return tempChar;
- }
- /*****************************/
- void addUserFromInput(user* newUser, user*** dataBaseMales, femaleList* dataBaseFemales, int* sizePointer)
- {
- // int i;
- char hobbiesSaver[8];
- char spaceDummy;
- char tempBuffer[DESCRIPTION_MAX];
- printf("Please enter your ID:\n");
- scanf("%s", tempBuffer);
- scanf("%c", &spaceDummy);
- if (isIdExist(tempBuffer, *dataBaseMales, dataBaseFemales, *sizePointer) == 1)
- {
- printf("Error: User already exists\n");
- return;
- }
- strcpy(newUser->id, tempBuffer);
- printf("Please enter your first name:\n");
- scanf("%s", tempBuffer);
- scanf("%c", &spaceDummy);
- newUser->name = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(newUser->name == NULL)
- {
- printf("we failed to create");
- exit(1);
- }
- strcpy(newUser->name, tempBuffer);
- printf("Please enter your last name:\n");
- scanf("%s", tempBuffer);
- scanf("%c", &spaceDummy);
- newUser->lastName = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(newUser->lastName == NULL)
- {
- printf("we failed to create\n");
- exit(1);
- }
- strcpy(newUser->lastName, tempBuffer);
- printf("Please enter your age (18 to 100):\n");
- scanf("%d", &(newUser->age));
- scanf("%c", &spaceDummy);
- if(newUser->age < AGE_MIN || newUser->age > AGE_MAX)
- {
- return;
- }
- printf("Please enter your gender (F-female, M-male):\n");
- scanf("%c", &(newUser->gender));
- scanf("%c", &spaceDummy);
- printf("Choose a username (3-10 characters):\n");
- scanf("%s", tempBuffer);
- scanf("%c", &spaceDummy);
- newUser->username = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(newUser->username == NULL)
- {
- printf("we failed to create\n");
- exit(1);
- }
- strcpy(newUser->username, tempBuffer);
- if(tempBuffer[0] < 'A' || (tempBuffer[0] > 'Z' && tempBuffer[0] < 'a') || tempBuffer[0] > 'z' || strlen(newUser->username) < USERNAME_MIN)
- {
- return;
- }
- printf("please choose 4 hobbies: Baseball=1, Basketball=2, Bicycle=3, Books=4, Drawing=5, Gym=6, Movies=7, Poetry=8\n");
- gets(hobbiesSaver);
- newUser->hobbies = getHobbiesFromNewUser(hobbiesSaver);
- printf("Choose a password (attention-minimum 3 characters):\n");
- scanf("%s", tempBuffer);
- scanf("%c", &spaceDummy);
- newUser->password = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(newUser->password == NULL)
- {
- printf("we failed to create\n");
- exit(1);
- }
- strcpy(newUser->password, tempBuffer);
- if(strlen(newUser->password) < PASSWORD_MIN)
- {
- return;
- }
- printf("Some words about yourself:\n");
- gets(tempBuffer);
- newUser->description = (char*)malloc((strlen(tempBuffer)+1)*sizeof(char));
- if(newUser->description == NULL)
- {
- printf("we failed to create\n");
- exit(1);
- }
- strcpy(newUser->description, tempBuffer);
- if (newUser->gender == MALE_GENDER)
- {
- *dataBaseMales = addMale(newUser, *dataBaseMales, sizePointer);
- }
- else
- {
- femaleNode* newFemale = (femaleNode*)malloc(sizeof(femaleNode));
- newFemale->femaleData = newUser;
- newFemale->nextFemale = NULL;
- addFemale(dataBaseFemales, newFemale);
- }
- printf("Hi %s, lets find love!\n", newUser->name);
- }
- int isIdExist(char id[], user** dataBaseMales, femaleList* dataBaseFemales, int sizeArr)
- {
- femaleNode* iterator = dataBaseFemales->head;
- int i;
- while (iterator != NULL)
- {
- if(strcmp(id, iterator->femaleData->id) == 0)
- {
- return 1;
- }
- iterator = iterator->nextFemale;
- }
- for(i = 0; i < sizeArr; i++)
- {
- if(strcmp(id, dataBaseMales[i]->id) == 0)
- {
- return 1;
- }
- }
- return 0;
- }
- void printHobbies(unsigned char hobbies)
- {
- const char* hobbiesNames[] = {"Baseball", "Basketball", "Bicycle", "Books", "Drawing", "Gym", "Movies", "Poetry"};
- int i, countAmount = 0;
- for (i = 0; i < 8; i++)
- {
- if((hobbies & 1) == 1)
- {
- if(countAmount < 3)
- printf("%s, ", hobbiesNames[i]);
- else
- printf("%s ", hobbiesNames[i]);
- countAmount++;
- }
- hobbies >>= 1;
- }
- }
- void mainMenu(user* currentUser, user*** dataBaseMales, femaleList *dataBaseFemales, int* sizeArrPointer)
- {
- int choice;
- do
- {
- printf("Please choose an option:\n");
- printf("1. Find a match\n");
- printf("2. I found love, DELETE me\n");
- printf("3. Log out\n");
- scanf("%d", &choice);
- switch (choice)
- {
- case 1:
- findMatch(*dataBaseMales, currentUser, dataBaseFemales, *sizeArrPointer);
- break;
- case 2:
- if (currentUser->gender == MALE_GENDER)
- {
- *dataBaseMales = deleteMale(*dataBaseMales, currentUser, sizeArrPointer);
- }
- else
- {
- dataBaseFemales = deleteFemale(dataBaseFemales, currentUser);
- }
- return;
- case 3:
- return;
- break;
- default:
- printf("Bad choice, please try again\n");
- return;
- break;
- }
- }while(choice != 3);
- }
- user** deleteMale(user** dataBaseMales, user* currentUser, int* sizeArrPointer)
- {
- int i, j;
- for (i = 0; i < *sizeArrPointer; i++)
- {
- if(strcmp(currentUser->id, dataBaseMales[i]->id) == 0)
- {
- for (j = i; j < *sizeArrPointer; j++)
- {
- dataBaseMales[j] = dataBaseMales[j+1];
- }
- freeUser(currentUser);
- //free(currentUser);
- dataBaseMales = (user**)realloc(dataBaseMales, (*sizeArrPointer - 1)*sizeof(user*));
- if (dataBaseMales == NULL)
- {
- printf("failed creating DATA_BASE_MALE");
- exit(1);
- }
- *sizeArrPointer = *sizeArrPointer - 1;
- }
- }
- return dataBaseMales;
- }
- femaleList* deleteFemale(femaleList* dataBaseList, user* currentUser)
- //might be a memory leak because of the female pointer not getting deleting.
- {
- femaleNode* iterator = dataBaseList->head;
- femaleNode* previous = NULL;
- while(iterator != NULL &&(strcmp(currentUser->id, iterator->femaleData->id) != 0))
- {
- previous = iterator;
- iterator = iterator->nextFemale;
- }
- if(strcmp(currentUser->id, iterator->femaleData->id) == 0)
- {
- // deleting the first Node
- if (previous == NULL)
- {
- dataBaseList->head = iterator->nextFemale;
- }
- else
- {
- previous->nextFemale = iterator->nextFemale;
- }
- iterator->nextFemale = NULL;
- freeFemaleNode(previous);
- //if we delete the last one
- if (iterator == dataBaseList->last)
- {
- dataBaseList->last = previous;
- }
- return dataBaseList;
- }
- return dataBaseList;
- }
- //we get a null currentUser and if after the function it is still null then we run it again
- void enteringMenu(user* currentUser, user*** dataBaseMales, femaleList* dataBaseFemales, int *sizePointer)
- {
- int choice;
- do
- {
- printf("Welcome! please choose an option\n");
- printf("1 - Log in\n");
- printf("2 - New member\n");
- printf("3 - Exit\n");
- scanf("%d", &choice);
- switch (choice)
- {
- case 1:
- currentUser = loginToSystem(currentUser, *dataBaseMales, dataBaseFemales, *sizePointer);
- if (currentUser == NULL)
- {
- freeUser(currentUser);
- break;
- }
- mainMenu(currentUser, dataBaseMales, dataBaseFemales, sizePointer);
- break;
- case 2:
- if (currentUser == NULL)
- {
- currentUser = (user*)malloc(sizeof(user));
- }
- addUserFromInput(currentUser, dataBaseMales, dataBaseFemales, sizePointer);
- if (currentUser == NULL || checkIfValidUser(currentUser) == 0)
- {
- freeUser(currentUser);
- break;
- }
- mainMenu(currentUser, dataBaseMales, dataBaseFemales, sizePointer);
- break;
- case 3:
- return;
- break;
- default:
- printf("Bad choice, please try again\n");
- break;
- }
- }while (choice != 3);
- }
- user* loginToSystem(user* currentUser, user **dataBaseMales, femaleList *dataBaseFemales, int sizeArr)
- {
- //user* loginUser;
- char username[USERNAME_MAX];
- char password[PASSWORD_MAX];
- printf("Please enter your username:\n");
- scanf("%s", username);
- currentUser = findUserName(username, dataBaseMales, dataBaseFemales, sizeArr);
- if (currentUser == NULL)
- {
- printf("User do not exist in the system, please try again\n");
- printf("Please enter your username:\n");
- scanf("%s", username);
- freeUser(currentUser);
- free(currentUser);
- currentUser = findUserName(username, dataBaseMales, dataBaseFemales, sizeArr);
- if (currentUser == NULL)
- {
- freeUser(currentUser);
- free(currentUser);
- return NULL;
- }
- else
- {
- printf("Please enter your password:\n");
- scanf("%s", password);
- if (strcmp(currentUser->password, password) != 0)
- {
- freeUser(currentUser);
- free(currentUser);
- printf("Wrong password\n");
- return NULL;
- }
- else
- {
- printf("Hello %s!\n", currentUser->name);
- return currentUser;
- }
- }
- }
- printf("Please enter your password:\n");
- scanf("%s", password);
- if (strcmp(currentUser->password, password) != 0)
- {
- printf("Wrong password\n");
- return NULL;
- }
- else
- {
- //toString(currentUser);
- printf("Hello %s!\n", currentUser->name);
- return currentUser;
- }
- }
- user* findUserName(char* username, user** dataBaseMales, femaleList* dataBaseFemales, int sizeArr)
- {
- int i;
- for (i = 0; i < sizeArr; i++)
- {
- if(strcmp(username, dataBaseMales[i]->username) == 0)
- return dataBaseMales[i];
- }
- femaleNode* iterator = dataBaseFemales->head;
- while (iterator != NULL)
- {
- if (strcmp(username, iterator->femaleData->username) == 0)
- {
- return iterator->femaleData;
- }
- iterator = iterator->nextFemale;
- }
- //freeFemaleNode(iterator);
- //free(iterator);
- return NULL;
- }
- int checkIfValidUser(user* currnetUser)
- {
- //we already check the id
- if (currnetUser->name == NULL)
- {
- return 0;
- }
- if (currnetUser->lastName == NULL)
- {
- return 0;
- }
- if (currnetUser->username == NULL)
- {
- return 0;
- }
- if (currnetUser->password == NULL)
- {
- return 0;
- }
- if (currnetUser->description == NULL)
- {
- return 0;
- }
- return 1;
- }
- void outputFile(user** dataBaseMales, femaleList* dataBaseList, int* sizePointer)
- {
- // variables settings
- FILE* file; // the file
- int i, counter=0;
- char* hobbiesPrint;
- char* hobbiesPrint2;
- char* infoPointer;
- femaleNode* iterator = dataBaseList->head;
- infoPointer = (char*)malloc(LINE_MAX * sizeof(char));
- // if malloc was not successful
- if (infoPointer == NULL)
- {
- printf("we failed to create INFO_POINTER\n");
- exit(1);
- }
- // open the file output to write
- file = fopen("/Users/chengoldi/Downloads/ex6-2/output.txt", "w");
- if (file == NULL)
- {
- printf("we failed to create OUTPUT_FILE_OPEN\n");
- exit(1);
- }
- // first puts the dataBaseMales[i]
- for (i = 0; i < *sizePointer; i++)
- {
- hobbiesPrint = (char*)malloc(HOBBIES_WITH_COMMAS*sizeof(char)+1);
- // adds id to infoPointer
- strcpy(infoPointer, dataBaseMales[i]->id);
- strcat(infoPointer, ";");
- // adds firstname to infoPointer
- strcat(infoPointer, dataBaseMales[i]->name);
- strcat(infoPointer, ";");
- // adds lastname to infoPointer
- strcat(infoPointer, dataBaseMales[i]->lastName);
- strcat(infoPointer, ";");
- fputs(infoPointer, file);
- // adds age
- fprintf(file, "%d;", dataBaseMales[i]->age);
- // adds gender
- fprintf(file, "%c", dataBaseMales[i]->gender);
- strcpy(infoPointer, ";");
- // adds username
- strcat(infoPointer, dataBaseMales[i]->username);
- strcat(infoPointer, ";");
- counter = 0;
- // puts password
- strcat(infoPointer, dataBaseMales[i]->password);
- strcat(infoPointer, ";");
- // adds hobbies:
- convertCharToNumbers(dataBaseMales[i]->hobbies, hobbiesPrint);
- // strcpy(hobbiesPrint, convertCharToNumbers(dataBaseMales[i]->hobbies, hobbiesPrint));
- strcat(infoPointer, hobbiesPrint);
- // puts description
- strcat(infoPointer, dataBaseMales[i]->description);
- // hobbiesPrint = "";
- // go down line
- // strcat(infoPointer, "\r");
- // puts in file
- free(hobbiesPrint);
- fputs(infoPointer, file);
- } //end of for
- iterator = dataBaseList->head;
- // goes for all women
- while (iterator != NULL)
- {
- hobbiesPrint2 = (char*)malloc(HOBBIES_WITH_COMMAS*sizeof(char)+1);
- // puts id
- // strcpy(infoPointer, iterator->femaleData->id);
- // strcat(infoPointer, ";");
- fprintf(file, "%s;", iterator->femaleData->id);
- // puts first name
- strcpy(infoPointer, iterator->femaleData->name);
- strcat(infoPointer, ";");
- //gets lastname
- strcat(infoPointer, iterator->femaleData->lastName);
- strcat(infoPointer, ";");
- fputs(infoPointer, file);
- // puts age
- fprintf(file, "%d;", iterator->femaleData->age);
- // puts gender
- fprintf(file, "%c", iterator->femaleData->gender);
- strcpy(infoPointer, ";");
- // puts username
- strcat(infoPointer, iterator->femaleData->username);
- strcat(infoPointer, ";");
- counter = 0;
- // hobbiesPrint = "";
- // puts password
- strcat(infoPointer, iterator->femaleData->password);
- strcat(infoPointer, ";");
- //get hobbies
- convertCharToNumbers(iterator->femaleData->hobbies, hobbiesPrint2);
- strcat(infoPointer, hobbiesPrint2);
- // puts description
- strcat(infoPointer, iterator->femaleData->description);
- // go down line
- // strcat(infoPointer, "\r");
- // puts in file
- free(hobbiesPrint2);
- fputs(infoPointer, file);
- // new woman
- iterator = iterator->nextFemale;
- } // end of while
- // free the infoPointer
- free(infoPointer);
- // close the file
- fclose(file);
- }
- void convertCharToNumbers(unsigned char hobbies, char* hobbiesPrint)
- {
- // const char* hobbiesNames[] = {"BASEBALL", "BASKETBALL", "BICYCLE", "BOOKS", "DRAWING", "GYM", "MOVIES", "POETRY"};
- char* hobbiesArr[] = {"1", "2", "3", "4", "5", "6", "7", "8"};
- //char hobbiesPrint[8];
- //char* tempChar =
- int i, countHob = 4;
- for (i = 0; i < 8 && countHob > 0; i++)
- {
- if((hobbies & 1) == 1)
- {
- if(countHob == 4)
- {
- strcpy(hobbiesPrint, hobbiesArr[i]);
- }
- else
- {
- strcat(hobbiesPrint, hobbiesArr[i]);
- }
- countHob--;
- if (countHob != 0)
- {
- strcat(hobbiesPrint, ",");
- }
- }
- hobbies >>= 1;
- }
- strcat(hobbiesPrint, ";");
- strcat(hobbiesPrint, "\0");
- }
- void toString(user* user)
- {
- if(user != NULL)
- {
- // printf("the user is not null and we are dumb as hell\n");
- printf("%s, %s, %s, %d, %c, ", user->id, user->name, user->lastName, user->age, user->gender);
- printf("%s, %s, %c, %s \n", user->username, user->password, user->hobbies, user->description);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement