Skip to content

Instantly share code, notes, and snippets.

@malwareslayer
Created October 8, 2019 18:13
Show Gist options
  • Save malwareslayer/781c195817861d5d6683764d9075bc1c to your computer and use it in GitHub Desktop.
Save malwareslayer/781c195817861d5d6683764d9075bc1c to your computer and use it in GitHub Desktop.
#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