diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..8a58fcb --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "windows-gcc-x64", + "includePath": [ + "${workspaceFolder}/**" + ], + "compilerPath": "C:/MinGW/bin/gcc.exe", + "cStandard": "${default}", + "cppStandard": "${default}", + "intelliSenseMode": "windows-gcc-x64", + "compilerArgs": [ + "" + ] + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..1c56f26 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "C/C++ Runner: Debug Session", + "type": "cppdbg", + "request": "launch", + "args": [], + "stopAtEntry": false, + "externalConsole": true, + "cwd": "d:/KMUTT/CPE100/final project/compro", + "program": "d:/KMUTT/CPE100/final project/compro/build/Debug/outDebug", + "MIMode": "gdb", + "miDebuggerPath": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c9e66f1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,59 @@ +{ + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/UpdateAndDelete.exe b/UpdateAndDelete.exe new file mode 100644 index 0000000..46190fc Binary files /dev/null and b/UpdateAndDelete.exe differ diff --git a/UpdateAndDelete.h b/UpdateAndDelete.h new file mode 100644 index 0000000..bb75741 --- /dev/null +++ b/UpdateAndDelete.h @@ -0,0 +1,352 @@ +#include +#include +#include +#include "create.h" +#define MAX_LINE_SIZE 256 +#define MAX_NAME_SIZE 100 + +struct product { + char Name[MAX_NAME_SIZE]; + char Brand[MAX_NAME_SIZE]; + char ProducType[MAX_NAME_SIZE]; + int AmountInStorage; + float Price; + char ExpireDate[MAX_LINE_SIZE]; +}; + +//The delete function by Pasin Shinwasusin 66070503439 +int Delete(const char *filename, int i, int Status, int Num) { + + int Validity = 0, DeleteOrNot; + + while (!Validity) { + printf("Num of rows: %d\n", Num); + printf("Press 0 to exit delete mode and press 1 to delete: "); + + if (scanf("%d", &DeleteOrNot) == 1 && DeleteOrNot == 0 || DeleteOrNot == 1) { + Validity = 1; + } else { + + while (getchar() != '\n'); + + printf("You can only input either 0 or 1. Try again.\n"); + } + + } + + if (DeleteOrNot == 0) { + + return 1; + + } else { + // Delete a row from a CSV file + FILE *inputFile = fopen(filename, "r"); + FILE *outputFile = fopen("temp.csv", "w"); + + if (inputFile == NULL || outputFile == NULL) { + perror("Error opening files"); + exit(EXIT_FAILURE); + } + + char line[MAX_LINE_SIZE]; + int currentRow = 0; + + while (fgets(line, sizeof(line), inputFile) != NULL) { + if (currentRow != i + 1) { + fputs(line, outputFile); + } + currentRow++; + } + + fclose(inputFile); + fclose(outputFile); + + // Rename the temporary file to the original file + remove(filename); + rename("temp.csv", filename); + + + printf("Deleted.\n"); + + return 1; + } + +} + +//A part of the update function by Karun Tancharoen 66070503407 +void UpdateFile(int Num, struct product Product[]) { + FILE *File = fopen("priceyCosmetics.csv", "w"); + int i; + + if (File == NULL) { + perror("Error opening file."); + exit(EXIT_FAILURE); + } + + fprintf(File, "Name,Brand,ProductType,AmountInStorage,Price,ExpireDate\n"); + + for (i = 0; i < Num; i++) { + fprintf(File, "%s,%s,%s,%d,%.2f,%s", Product[i].Name, Product[i].Brand, Product[i].ProducType, Product[i].AmountInStorage, Product[i].Price, Product[i].ExpireDate); + } + + fclose(File); +} + +//A part of the update function by Karun Tancharoen 66070503407 +void UpdateStruct(struct product Product[], int Status, int i) { + int Validity = 0, WhatToEdit, EditOrExit; + + if (Status == 1) { + + while (!Validity) { + printf("Input the number corresponding to data you want to edit: "); + + if (scanf("%d", &WhatToEdit) != 1) { + + while (getchar() != '\n'); + + printf("Invalid input. Input again.\n"); + continue; + } + + if (WhatToEdit == 1) { + + while (getchar() != '\n'); + + Validity = 1; + printf("New name: "); + scanf("%[^\n]", Product[i].Name); + } else if (WhatToEdit == 2) { + + while (getchar() != '\n'); + + Validity = 1; + printf("New brand: "); + scanf("%[^\n]", Product[i].Brand); + } else if (WhatToEdit == 3) { + + while (getchar() != '\n'); + + Validity = 1; + printf("New type: "); + scanf("%[^\n]", Product[i].ProducType); + } else if (WhatToEdit == 4) { + + while (!Validity) { + printf("New quantity: "); + + if (scanf("%d", &Product[i].AmountInStorage) == 1) { + Validity = 1; + } else { + + while (getchar() != '\n'); + + printf("You can only input an integer. Input again.\n"); + } + + } + + } else if (WhatToEdit == 5) { + + while (!Validity) { + printf("New price: "); + + if (scanf("%f", &Product[i].Price) == 1) { + Validity = 1; + } else { + + while (getchar() != '\n'); + + printf("You can only input a float number. Input again.\n"); + } + + } + + } else if (WhatToEdit == 6) { + + while (getchar() != '\n'); + + char Temp[MAX_NAME_SIZE]; + int Length; + printf("New expire: "); + scanf("%[^\n]", Product[i].ExpireDate); + strcpy(Temp, Product[i].ExpireDate); + + while (isExpireDateFormatValid(Temp) == -1 || isExpireDateExists(Temp) == -1) { + + while (getchar() != '\n'); + + printf("New expire: "); + scanf("%[^\n]", Product[i].ExpireDate); + strcpy(Temp, Product[i].ExpireDate); + } + + Length = strlen(Product[i].ExpireDate); + Product[i].ExpireDate[Length] = '\n'; + Validity = 1; + } else { + + while (getchar() != '\n'); + + printf("Invalid input. Input again.\n"); + } + + } + + Validity = 0; + + while (!Validity) { + printf("Data was processed successfully. Press 0 to exit the editing mode and 1 to continue editing: "); + + if (scanf("%d", &EditOrExit) == 1 && EditOrExit == 0 || EditOrExit == 1) { + Validity = 1; + } else { + + while (getchar() != '\n'); + + printf("You can only input either 0 or 1. Try again.\n"); + } + + } + + if (EditOrExit == 1) { + + UpdateStruct(Product, Status, i); + + } + + } else { + + while (!Validity) { + printf("New quantity: "); + + if (scanf("%d", &Product[i].AmountInStorage) == 1) { + Validity = 1; + } else { + + while (getchar() != '\n'); + + printf("You can only input an integer. Input again.\n"); + } + + } + + printf("Data was processed successfully.\n"); + } +} + +//The update function by Karun Tancharoen 66070503407 +int Update(int Status, int Num, struct product Product[], const char *filename) { + char SearchedProduct[MAX_NAME_SIZE]; + int NextOrEdit, FoundAResult, i; + + while (getchar() != '\n'); + + printf("Which product do you wish to edit its data: "); + scanf("%[^\n]", SearchedProduct); + + for (i = 0; i < Num; i++) { + int Validity = 0; + + if (strstr(Product[i].Name, SearchedProduct) != NULL) { + FoundAResult = 1; + printf("Found a result.\n"); + printf("1: Name: %s\n", Product[i].Name); + printf("2: Brand: %s\n", Product[i].Brand); + printf("3: Type: %s\n", Product[i].ProducType); + printf("4: Quantity: %d\n", Product[i].AmountInStorage); + printf("5: Price: %.2f\n", Product[i].Price); + printf("6: Expire: %s", Product[i].ExpireDate); + + while (!Validity) { + int BackFromDelete = 0; + + if (i == 99) { + printf("\nPress 0 to view the next result, 1 to edit this result, and 2 to delete this result: "); + } else { + printf("Press 0 to view the next result, 1 to edit this result, and 2 to delete this result: "); + } + + if (scanf("%d", &NextOrEdit) == 1 && NextOrEdit == 0 || NextOrEdit == 1 || NextOrEdit == 2) { + + if (NextOrEdit == 2) { + + if (Status == 1) { + BackFromDelete = Delete(filename, i, Status, Num); + + if (BackFromDelete == 0) { + + return 0; + + } + + } else { + printf("Only the admin can delete.\n"); + } + + } else { + Validity = 1; + } + + } else { + + while (getchar() != '\n'); + + printf("You can only input 0, 1, or 2. Try again.\n"); + } + + } + + if (NextOrEdit == 0) { + + while (getchar() != '\n'); + + continue; + } else { + + UpdateStruct(Product, Status, i); + + UpdateFile(Num, Product); + + Validity = 0; + NextOrEdit = 2; + + while (!Validity) { + printf("Data updated successfully. Press 0 to exit and 1 to view the next result: "); + + if (scanf("%d", &NextOrEdit) == 1 && NextOrEdit == 0 || NextOrEdit == 1) { + Validity = 1; + } else { + + while (getchar() != '\n'); + + printf("You can only input either 0 or 1. Try again.\n"); + } + + } + + if (NextOrEdit == 0) { + + return 0; + + } else { + + while (getchar() != '\n'); + + continue; + } + + } + + } + + } + + if (FoundAResult == 0) { + printf("No more results found.\n"); + + Update(Status, Num, Product, filename); + + } + +} \ No newline at end of file diff --git a/code.c b/code.c index 4dffc60..b644823 100644 --- a/code.c +++ b/code.c @@ -1,21 +1,14 @@ #include #include #include +#include "UpdateAndDelete.h" #define MAX_LINE_SIZE 256 #define MAX_NAME_SIZE 100 -struct product { - char Name[MAX_NAME_SIZE]; - char Brand[MAX_NAME_SIZE]; - char ProducType[MAX_NAME_SIZE]; - int AmountInStorage; - float Price; - char ExpireDate[MAX_LINE_SIZE]; -}; - void readCSV(const char *filename, struct product *_product, int *numProduct) { FILE *file = fopen(filename, "r"); + int Flag = 0; if (file == NULL) { perror("Error opening file"); exit(EXIT_FAILURE); @@ -25,35 +18,42 @@ void readCSV(const char *filename, struct product *_product, int *numProduct) { *numProduct = 0; while (fgets(line, sizeof(line), file) != NULL) { - char *token = strtok(line, ","); - - strncpy(_product[*numProduct].Name, token, MAX_NAME_SIZE - 1); - _product[*numProduct].Name[MAX_NAME_SIZE - 1] = '\0'; - token = strtok(NULL, ","); - strncpy(_product[*numProduct].Brand, token, MAX_NAME_SIZE - 1); - _product[*numProduct].Brand[MAX_NAME_SIZE - 1] = '\0'; + if (Flag == 1) { + char *token = strtok(line, ","); + + strncpy(_product[*numProduct].Name, token, MAX_NAME_SIZE - 1); + _product[*numProduct].Name[MAX_NAME_SIZE - 1] = '\0'; + + token = strtok(NULL, ","); + strncpy(_product[*numProduct].Brand, token, MAX_NAME_SIZE - 1); + _product[*numProduct].Brand[MAX_NAME_SIZE - 1] = '\0'; - token = strtok(NULL, ","); - strncpy(_product[*numProduct].ProducType, token, MAX_NAME_SIZE - 1); - _product[*numProduct].ProducType[MAX_NAME_SIZE - 1] = '\0'; + token = strtok(NULL, ","); + strncpy(_product[*numProduct].ProducType, token, MAX_NAME_SIZE - 1); + _product[*numProduct].ProducType[MAX_NAME_SIZE - 1] = '\0'; - token = strtok(NULL, ","); - sscanf(token, "%d", &_product[*numProduct].AmountInStorage); + token = strtok(NULL, ","); + sscanf(token, "%d", &_product[*numProduct].AmountInStorage); - token = strtok(NULL, ","); - sscanf(token, "%f", &_product[*numProduct].Price); + token = strtok(NULL, ","); + sscanf(token, "%f", &_product[*numProduct].Price); - token = strtok(NULL, ","); - strncpy(_product[*numProduct].ExpireDate, token, MAX_NAME_SIZE - 1); - _product[*numProduct].ExpireDate[MAX_NAME_SIZE - 1] = '\0'; + token = strtok(NULL, ","); + strncpy(_product[*numProduct].ExpireDate, token, MAX_NAME_SIZE - 1); + _product[*numProduct].ExpireDate[MAX_NAME_SIZE - 1] = '\0'; - (*numProduct)++; + (*numProduct)++; + } + + Flag = 1; + //The Flag variable is used to prevent the program from copying the first line in the file into the strings. } fclose(file); } -void show(){ + +void show(int Status, int Flag){ const char *filename = "priceyCosmetics.csv"; struct product _product[1000]; int numSubject; @@ -69,6 +69,11 @@ void show(){ printf("%s", _product[i].ExpireDate); printf("\n"); } + + if (Flag == 1) { + Update(Status, numSubject, _product, filename); + } + } // This is a login system function (admin or cashier) @@ -93,6 +98,8 @@ int login() } printf("Yeah! You are admin.\n"); + return 1; + } if ( code == '1') { @@ -104,15 +111,93 @@ int login() scanf("%s", psw); } printf("Yeah! You are cashier.\n"); + + return 2; + } return 0; } - int main() { - login(); - //show(); + int Validity = 0, Input, Status; + Status = login(); + + if (Status == 1) { + + while (!Validity) { + printf("Show all products: Press 0\n"); + printf("Create product(s): Press 1\n"); + printf("Update or delete product(s): Press 2\n"); + printf("Logout and exit: Press 3\n"); + printf("Choose what to do: "); + + if (scanf("%d", &Input) == 1 && Input == 0 || Input == 1 || Input == 2 || Input == 3) { + + if (Input == 0) { + + show(Status, 0); + + } else if (Input == 1) { + + create(); + + } else if (Input == 2) { + + show(Status, 1); + + } else { + + return 0; + + } + + } else { + + while (getchar() != '\n'); + + printf("You can only input 0, 1, or 2. Input again\n"); + } + + } + + } else { + + while (!Validity) { + printf("Show all products: Press 0\n"); + printf("Update or delete product(s): Press 1\n"); + printf("Logout and exit: Press 2\n"); + printf("Choose what to do: "); + + if (scanf("%d", &Input) == 1 && Input == 0 || Input == 1 || Input == 2) { + + if (Input == 0) { + + show(Status, 0); + + } else if (Input == 1) { + + show(Status, 1); + + } else { + + return 0; + + } + + } else { + + while (getchar() != '\n'); + + printf("You can only input 0 or 1. Input again\n"); + printf("You can only input 0 or 1. Input again\n"); + } + + } + + } + return 0; -} + +} \ No newline at end of file diff --git a/code.exe b/code.exe new file mode 100644 index 0000000..2f2539d Binary files /dev/null and b/code.exe differ diff --git a/create.h b/create.h new file mode 100644 index 0000000..42c13f7 --- /dev/null +++ b/create.h @@ -0,0 +1,241 @@ +#include +#include +#include +#define MAX_LINE_SIZE 256 +#define MAX_NAME_SIZE 100 + +struct Producty { + char Name[MAX_NAME_SIZE]; + char Brand[MAX_NAME_SIZE]; + char ProducType[MAX_NAME_SIZE]; + int AmountInStorage; + float Price; + char ExpireDate[MAX_LINE_SIZE]; +}; + + +//LetterCheck function by 66070503438 Punyanuch Kajornchaikitti +int LetterCheck(char input[]) +{ + int isLetter = 0; + for ( int i = 0; input[i] != '\0'; i++) + { + if ( (input[i] >= 'a' && input[i] <= 'z') || (input[i] >= 'A' && input[i] <= 'Z') ) + { + isLetter = 1; + } + else + { + return -1; + } + } + if ( isLetter == 1) + { + return 1; + } +} + +//NumberCheck function by 66070503438 Punyanuch Kajornchaikitti +int NumberCheck(char input[]) +{ + for ( int i = 0; input[i] != '\0'; i++) + { + if (input[i] < '0' || input[i] > '9') + { + return -1; + } + } + return 1; +} + +//PriceCheck function by 66070503438 Punyanuch Kajornchaikitti +int PriceCheck(char input[]) +{ + int count = 0; + for ( int i = 0; input[i] != '\0'; i++) + { + if (count > 1 ) + { + return -1; + } + + if ( input[i] == '.' ) + { + count++; + } + else if (input[i] < '0' || input[i] > '9') + { + return -1; + } + } + return 1; +} + +int isExpireDateFormatValid(char expireDate[]) +{ + int count = 0; + int isValid = 0; + for ( int i = 0; expireDate[i] != '\0'; i++ ) + { + count++; + } + if ( count > 10 || expireDate[2] != '/' || expireDate[5] != '/' ) + { + printf("Enter in DD/MM/YYYY format: "); + return -1; + } + for ( int i = 0 ; i < 10; i++) + { + if ( i == 2 || i == 5) + { + continue; + } + if ( expireDate[i] < '0' || expireDate[i] > '9') + { + printf("Please enter integers: "); + return -1; + } + else if (expireDate[i] >= '0' && expireDate[i] <= '9' ) + { + isValid = 1; + } + } + if ( isValid == 1) + { + return 1; + } +} + +//isExpireDateExists function by 66070503438 Punyanuch Kajornchaikitti +int isExpireDateExists(char validFormatEXPDate[]) +{ + char dayCantMath[3],monthCantMath[3],yearCantMath[5]; + dayCantMath[2]= '\0',monthCantMath[2] = '\0', yearCantMath[4] = '\0'; + int day,month,year; + for ( int i = 0 ; i < 2; i++ ) + { + dayCantMath[i] = validFormatEXPDate[i]; + } + day = atoi(dayCantMath); + for ( int i = 3 ; i < 5; i++) + { + monthCantMath[i-3] = validFormatEXPDate[i]; + } + month = atoi(monthCantMath); + for ( int i = 6; i < 10; i++) + { + yearCantMath[i-6] = validFormatEXPDate[i]; + } + year = atoi(yearCantMath); + int dayInMonth[]= {0,31,28,31,30,31,30,31,30,30,31,30,31}; + if ( month > 12 || month < 1 || day > 31 || day < 1) + { + printf("Invalid date, please enter Expire date again: "); + return -1; + } + else if ( month == 2) + { + if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) + { + if ( day > 29) + { + printf("Invalid date, please enter Expire date again: "); + return -1; + } + } + else if ( day > dayInMonth[month]) + { + printf("Invalid date, please enter Expire date again: "); + return -1; + } + else + { + return 1; + } + } + else if (day <= dayInMonth[month]) + { + return 1; + } + +} +//Create function by 66070503438 Punyanuch Kajornchaikitti +void create() +{ + struct Producty product[1000]; + char ProductType[1000]; + char Price[1000]; + char Amount[1000]; + char expireDate[11]; + char amount_product_to_add_initial[10000]; + int amount_product_to_add; + FILE *createptr = fopen("priceyCosmetics.csv","a"); + if ( createptr == NULL) + { + puts("could not open the file"); + exit(1); + } + + printf("Enter amount of product you want to create: "); + scanf("%s",amount_product_to_add_initial); + while (NumberCheck(amount_product_to_add_initial) == -1 ) + { + printf("Enter only integer(s): "); + scanf("%s",amount_product_to_add_initial); + } + amount_product_to_add = atoi(amount_product_to_add_initial); + for ( int i = 0; i < amount_product_to_add ; i++) + { + printf("| Product number %d",i+1); + + printf("\nName: "); + scanf("%s",product[i].Name); + printf("Brand: "); + scanf("%s",product[i].Brand); + printf("Product Type: "); + scanf("%s",ProductType); + while (LetterCheck(ProductType) == -1 ) + { + printf("Please enter only letter(s): "); + scanf("%s",ProductType); + } + strcpy(product[i].ProducType, ProductType); + + printf("Amount: "); + scanf("%s",Amount); + while (NumberCheck(Amount) == -1 ) + { + printf("Please enter only integer(s): "); + scanf("%s",Amount); + } + product[i].AmountInStorage = NumberCheck(Amount); + + printf("Price: "); + scanf("%s",Price); + while (PriceCheck(Price) ==-1 ) + { + printf("Please enter only numbers: "); + scanf("%s",Price); + } + product[i].Price = atof(Price); + printf("Expire Date (DD/MM/YYYY): "); + scanf("%s",&expireDate); + while (isExpireDateFormatValid(expireDate) == -1 || isExpireDateExists(expireDate) == -1) + { + scanf("%s",&expireDate); + } + strcpy(product[i].ExpireDate,expireDate); + printf("-----------------------------------\n"); + } + + for ( int i = 0; i < amount_product_to_add ; i++) + { + fprintf(createptr,"\n%s,%s,%s,%d,%.2f,%s",product[i].Name + ,product[i].Brand,product[i].ProducType,product[i].AmountInStorage + ,product[i].Price,product[i].ExpireDate); + } + + printf("Completely add product(s)"); + + fclose(createptr); +} \ No newline at end of file diff --git a/priceyCosmetics.csv b/priceyCosmetics.csv index 0663683..39fb913 100644 --- a/priceyCosmetics.csv +++ b/priceyCosmetics.csv @@ -1,5 +1,5 @@ Name,Brand,ProductType,AmountInStorage,Price,ExpireDate -Mystic Magenta Lip Balm,Too Faced,Lip Balm,23,234.75,15/01/2025 +Elegant Mystic Magenta Lip Balm,Too Faced,Lip Balm,23,234.75,15/01/2025 Elegant Ebony Eyeliner,Anastasia Beverly Hills,Eyeliner,41,715.50,10/12/2024 Velvet Vixen Primer,MAC,Primer,28,848.75,30/11/2024 Soothing Sunset Concealer,Revlon,Concealer,32,413.99,15/03/2025 @@ -20,7 +20,7 @@ Luminous Lock Primer,It Cosmetics,Primer,23,621.75,15/01/2025 Velvet Crush Concealer,Stila,Concealer,27,418.99,10/12/2024 Coral Charm Lip Balm,L'Oreal,Lip Balm,31,217.95,15/03/2025 Rose Gold Eyeshadow,NYX Professional Makeup,Eyeshadow,29,599.99,15/08/2024 -Bold Brown Eyeliner,CoverGirl,Eyeliner,34,824.75,01/11/2024 +Bold Brown Eyeliner,CoverGirl,Eyeliner,40,824.75,01/11/2024 Floral Fusion Eyeshadow,Revlon,Eyeshadow,28,721.99,28/02/2025 Ultra Shine Lip Balm,Maybelline,Lip Balm,33,349.75,15/11/2024 Eternal Elegance Primer,Fenty Beauty,Primer,24,527.50,20/08/2024 @@ -39,7 +39,7 @@ Lush Locks Primer,It Cosmetics,Primer,27,724.50,05/01/2025 Satin Blush Eyeshadow,Fenty Beauty,Eyeshadow,39,928.99,25/04/2025 Crimson Crush Lip Balm,Essie,Lip Balm,28,913.99,25/08/2024 Velvet Veil Concealer,Too Faced,Concealer,21,869.50,15/01/2025 -Bold Bronze Eyeliner,CoverGirl,Eyeliner,35,566.50,10/12/2024 +Elegant Bold Bronze Eyeliner,CoverGirl Brand,Eyeliner,50,599.99,10/12/2024 Magnetic Mauve Eyeshadow,Stila,Eyeshadow,32,624.99,25/06/2024 Luminous Lock Concealer,Revlon,Concealer,20,621.99,15/02/2025 Blushing Blossom Lip Balm,NYX Professional Makeup,Lip Balm,26,315.95,10/09/2024 @@ -98,4 +98,4 @@ Glistening Garnet Eyeliner,Essie,Eyeliner,30,278.50,05/05/2025 Velvet Vamp Primer,NYX Professional Makeup,Primer,27,144.99,15/11/2024 Sapphire Spark Concealer,Too Faced,Concealer,22,287.50,20/04/2025 Crimson Crush Eyeshadow,Stila,Eyeshadow,29,529.99,15/09/2024 -Bold Bronze Lip Balm,Revlon,Lip Balm,26,178.49,10/03/2025 +Bold Bronze Lip Balm,Revlon,Lip Balm,26,178.49,10/03/2025 \ No newline at end of file diff --git a/tempCodeRunnerFile.c b/tempCodeRunnerFile.c new file mode 100644 index 0000000..ccbdbb9 --- /dev/null +++ b/tempCodeRunnerFile.c @@ -0,0 +1,3 @@ +if (DeleteOrNot == 0) { + // return Update; + // } \ No newline at end of file