Created
October 8, 2019 18:13
-
-
Save malwareslayer/781c195817861d5d6683764d9075bc1c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <stdbool.h> | |
#include <string.h> | |
#define __OPTIMIZE__ 2 | |
#if(__STDC_VERSION__ < 201710L) | |
#error Should Compile With Flags "-std=c18" | |
#endif | |
struct Player { | |
char * names; | |
char * jobs; | |
int levels; | |
struct Player * next; | |
} *head; | |
static char * jobs[] = { | |
"Knight", "Mage", "Assassin", "Cleric", "Marksman", | |
}; | |
struct Player * insert(char * name, char * job, int level) { | |
struct Player * current = (struct Player *) malloc(sizeof(struct Player)); | |
struct Player * tail = head; | |
current->names = name; | |
current->jobs = * jobs; | |
current->levels = level; | |
if(tail == NULL) { | |
head = current; | |
} else { | |
while(tail->next != NULL) { | |
tail = tail->next; | |
} | |
tail->next = current; | |
} | |
return tail; | |
} | |
struct Player * delete(struct Player * node, char * name) { | |
if(head == NULL) { | |
puts("Empty Database"); | |
} else if(head->next == NULL) { | |
head = NULL; | |
return head; | |
} else { | |
struct Player * tail = node; | |
struct Player * current; | |
while(tail) { | |
if(tail != NULL) { | |
if(strcmp(tail->names, name) == 0) { | |
current = tail; | |
free(current); | |
} else { | |
tail = tail->next; | |
} | |
} else { | |
puts("Not Found"); | |
break; | |
} | |
} | |
} | |
return head; | |
} | |
struct Player * interface_view(struct Player * node) { | |
puts("================================================="); | |
puts("| Name | Jobs | Level |"); | |
while(node) { | |
if(node != NULL) { | |
printf("|%-10s |%-10s |%-5d |\n", node->names, node->jobs, node->levels); | |
} else { | |
break; | |
} | |
node = node->next; | |
} | |
puts("================================================="); | |
return node; | |
} | |
struct Player * interface_insert(void) { | |
char * name = (char *) malloc(sizeof(25)); | |
char * job; | |
int level = 0, choose = 0; | |
puts("Insert Player Name: "); | |
scanf("%s", name); | |
puts("Insert Level Jobs [ 1. \"Knight\", 2. \"Mage\", 3. \"Assassin\", 4. \"Cleric\", 5. \"Marksman\" ]: "); | |
scanf("%d", &choose); | |
switch (choose) { | |
case 1: | |
job = jobs[0]; | |
break; | |
case 2: | |
job = jobs[1]; | |
break; | |
case 3: | |
job = jobs[2]; | |
break; | |
case 4: | |
job = jobs[3]; | |
break; | |
case 5: | |
job = jobs[4]; | |
break; | |
default: | |
puts("Error: Exceed Boundary"); | |
return head; | |
} | |
puts("Insert Player Level:"); | |
scanf("%d", &level); | |
insert(name, job, level); | |
return head; | |
} | |
struct Player * interface_delete(void) { | |
char * name = (char *) malloc(sizeof(25)); | |
puts("Delete Player Name "); | |
scanf("%s", name); | |
delete(name); | |
return head; | |
} | |
void banner(void) { | |
puts("========================================"); | |
puts("| 1. Show Current Player |"); | |
puts("| 2. Insert New Player |"); | |
puts("| 3. Delete Exisisting Player |"); | |
puts("| 4. Exit |"); | |
puts("========================================"); | |
} | |
int main(void) { | |
int choose = 0; | |
banner(); | |
while(true) { | |
printf(">>> "); | |
scanf("%d", &choose); | |
switch (choose) { | |
case 1: | |
interface_view(head); | |
break; | |
case 2: | |
interface_insert(); | |
break; | |
case 3: | |
interface_delete(); | |
break; | |
case 4: | |
exit(0); | |
default: | |
puts("Error: No Menu"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment