Untitled
unknown
plain_text
a year ago
14 kB
2
Indexable
#include <stdio.h> #include <string.h> #include <conio.h> #include <windows.h> #include <stdbool.h> struct Member { char name[100]; int age; char email[100]; char username[100]; char password[100]; struct Member *next; }; void printColoredText(char *text, int color, bool animated) { HANDLE hConsole; hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, color); if (animated) { int i; for (i = 0; i < strlen(text); i++) { printf("%c", text[i]); Sleep(50); } } else { printf("%s", text); } SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } void getPassword(char *password, int maxLength) { int i = 0; char c; while (1) { c = _getch(); if (c == 13) { break; } else if (c == 8 && i > 0) { printf("\b \b"); i--; } else if (c != 8 && i < maxLength - 1) { password[i++] = c; printf("*"); } } password[i] = '\0'; } void loadMembersFromFile(struct Member **head) { FILE *file = fopen("members.csv", "r"); if (file == NULL) { printf("Could not open file for reading.\n"); exit(1); } char buffer[200]; while (fgets(buffer, sizeof(buffer), file)) { struct Member *newMember = (struct Member *)malloc(sizeof(struct Member)); sscanf(buffer, "%*[^,],%*d,%*[^,],%[^,],%s", newMember->username, newMember->password); newMember->next = *head; *head = newMember; } fclose(file); } int authenticateUser(struct Member *head, const char *username, const char *password) { while (head != NULL) { if (strcmp(username, head->username) == 0 && strcmp(password, head->password) == 0) { return 1; } head = head->next; } return 0; } void addMember(struct Member **head, char name[], int age, char email[], char username[], char password[]) { struct Member *newMember = (struct Member *)malloc(sizeof(struct Member)); strcpy(newMember->name, name); newMember->age = age; strcpy(newMember->email, email); strcpy(newMember->username, username); strcpy(newMember->password, password); newMember->next = *head; *head = newMember; } void saveMembersToFile(struct Member *head) { FILE *file = fopen("members.csv", "w"); if (file == NULL) { printf("Could not open file for writing.\n"); return; } fprintf(file, "Name,Age,Email,Username,Password\n"); while (head != NULL) { fprintf(file, "%s,%d,%s,%s,%s\n", head->name, head->age, head->email, head->username, head->password); head = head->next; } fclose(file); } int mainMember() { system("cls"); struct Member *head = NULL; char name[100], email[100], username[100], password[100]; int age; printColoredText("==================== [Register Guest] ====================\n\n", FOREGROUND_GREEN, false); printf("Enter your Name : "); scanf("%s", name); printf("Enter your Age: "); scanf("%d", &age); printf("Enter your Email: "); scanf("%s", email); printf("Enter your Username: "); scanf("%s", username); printf("Enter your Password: "); scanf("%s", password); addMember(&head, name, age, email, username, password); saveMembersToFile(head); printColoredText("==========================================================\n\n", FOREGROUND_GREEN, false); printColoredText("[!] Wait written to members.csv\n", FOREGROUND_RED, true); printColoredText("[!] Data has been written to members.csv\n", FOREGROUND_GREEN, true); return 0; } void UserSelectClass(int choice) { if (choice == 1) { printColoredText("-> Login\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("2. Register\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } else { printColoredText("1. Login\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("-> Register\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } } void AdminSelectMainMenu(int choice) { if (choice == 1) { printColoredText("-> Manage with books\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("2. Manage with users\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("3. Manage book status\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } else if (choice == 2) { printColoredText("1. Manage with books\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("-> Manage with users\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("3. Manage book status\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } else { printColoredText("1. Manage with books\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("2. Manage with users\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("-> Manage book status\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } } void UserSelectMainMenu(int choice) { if (choice == 1) { printColoredText("-> Borrow a book\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("2. Search for books\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("3. View my borrowing\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("4. Manage my profile\n", (choice == 4) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("5. Exit\n", (choice == 5) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } else if (choice == 2) { printColoredText("1. Borrow a book\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("-> Search for books\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("3. View my borrowing\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("4. Manage my profile\n", (choice == 4) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("5. Exit\n", (choice == 5) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } else if (choice == 3) { printColoredText("1. Borrow a book\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("2. Search for books\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("-> View my borrowing\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("4. Manage my profile\n", (choice == 4) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("5. Exit\n", (choice == 5) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } else if (choice == 4) { printColoredText("1. Borrow a book\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("2. Search for books\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("3. View my borrowing\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("-> Manage my profile\n", (choice == 4) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("5. Exit\n", (choice == 5) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } else { printColoredText("1. Borrow a book\n", (choice == 1) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("2. Search for books\n", (choice == 2) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("3. View my borrowing\n", (choice == 3) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("4. Manage my profile\n", (choice == 4) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); printColoredText("-> Exit\n", (choice == 5) ? FOREGROUND_BLUE : FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, false); } } int main() { int choice = 1; int keyPressed; do { system("cls"); printColoredText("==================== [Your Online Library] ====================\n\n", FOREGROUND_GREEN, false); UserSelectClass(choice); printColoredText("\n===============================================================\n\n", FOREGROUND_GREEN, false); keyPressed = _getch(); if (keyPressed == 224) { keyPressed = _getch(); switch (keyPressed) { case 72: choice = (choice > 1) ? choice - 1 : choice; break; case 80: choice = (choice < 2) ? choice + 1 : choice; break; } } } while (keyPressed != 13); switch (choice) { case 1: system("cls"); struct Member *members = NULL; loadMembersFromFile(&members); char inputUsername[100]; char inputPassword[100]; printf("Please enter username : "); scanf("%s", inputUsername); printf("Please enter password : "); getPassword(inputPassword, sizeof(inputPassword)); if (authenticateUser(members, inputUsername, inputPassword)) { printColoredText("\n[!] Wait for checking password.\n", FOREGROUND_RED, true); Sleep(1000); printColoredText("[!] Checking password successful.\n", FOREGROUND_GREEN, true); Sleep(1000); printColoredText("[!] Login successful.\n", FOREGROUND_GREEN, true); Sleep(1000); int choice = 1; int keyPressed; do { system("cls"); printf("\nPlease select a topic:\n"); AdminSelectMainMenu(choice); keyPressed = _getch(); if (keyPressed == 224) { keyPressed = _getch(); switch (keyPressed) { case 72: choice = (choice > 1) ? choice - 1 : choice; break; case 80: choice = (choice < 3) ? choice + 1 : choice; break; } } } while (keyPressed != 13); switch (choice) { case 1: system("cls"); printColoredText("You choose to manage with the book.\n", FOREGROUND_GREEN, false); case 2: system("cls"); printColoredText("You choose to manage with the user.\n", FOREGROUND_GREEN, false); case 3: system("cls"); printColoredText("You choose to manage with the book status.\n", FOREGROUND_GREEN, false); } } else { printColoredText("\n[!] Login failed. Invalid Username or Password.\n", FOREGROUND_RED, true); } break; case 2: mainMember(); break; } return 0; }
Editor is loading...