sba/role_control.h
2023-09-11 18:01:51 +08:00

144 lines
4.1 KiB
C

//role control
void add_role();
void print_role(struct linkedlist* list,int cur,int end,struct Map* map);
void showRole(struct linkedlist* list,int index);
struct Map* sortRole(struct linkedlist* list,int choice);
void role_control(){
int choice = -1;
struct user db = read_db_user();
do{
char * items[] = {
"add admin role",
"list role"
};
choice = choices_selecter(items,2,"><Welcome to the Student Union POS system><\nRole control");
switch (choice){
case 3:
break;
case 1:
add_role();
break;
case 2:
char * SortItems[] = {
"admin",
"role",
};
void * list = getLinkedList(role_list_db(),0);
lister(list,NULL,sizeofLinkedlist(list),"Role",SortItems,2,print_role,sortRole,showRole);
//warning appears but can be ignore due to the fact that they are just pointer, no difference
break;
default:
break;
}
}while(choice != 3);
}
void add_role(){
char role[100];
printf("Enter Admin role name: ");
fflush_stdin();
scanf("%s", role);
if(is_admin(role)){//check if role exist in admin file
printf("Admin role already exist\n");
printf("press any key to continue\n");
fflush_stdin();
getchar();
}else{
add_admin(role);
printf("role added\n");
printf("press any key to continue\n");
fflush_stdin();
getchar();
}
return;
}
void print_role(struct linkedlist* list,int cur,int end,struct Map* map){
printf("%-10s%-10s%-10s\n","No.","Role","Admin?");
if(map == NULL){
for(int i = cur; i < end; i++){
list = getLinkedList(list,i);
char* name = list->data;
printf("%-10d%-10s%-10s\n",i-cur + 5,name,is_admin(name)?"T":"F");
}
}else{
for(int i = cur; i < end; i++){
list = getLinkedList(list,map[i].key);
char* name = list->data;
printf("%-10d%-10s%-10s\n",i-cur + 5,name,is_admin(name)?"T":"F");
}
}
}
void showRole(struct linkedlist* list,int index){
int choice;
list = getLinkedList(list,index);
do{
char* name = list->data;
printf("%-10s%-10s\n","Role","Admin?");
printf("%-10s%-10s\n",name,is_admin(name)?"T":"F");
printf("1 toogle admin\n");
printf("2 exit\n");
bool valid = true;
do{
valid = true;
printf("Please input your choice\n>");
fflush_stdin();
scanf("%d", &choice);
if(choice == 1){
if(is_admin(name)){
remove_admin(name);
}else{
add_admin(name);
}
printf("Admin role toggled\n");
printf("Press any key to continue\n");
fflush_stdin();
getchar();
}else if(choice != 2){
printf("Invalid choice\n");
valid = false;
}
}while(!valid);
}while(choice != 2);
return;
}
struct Map* sortRole(struct linkedlist* list,int choice){
struct Map* map = malloc(sizeof(struct Map)*sizeofLinkedlist(list));
struct linkedlist* cur = getLinkedList(list,0);
for(int i = 0; i < sizeofLinkedlist(list); i++){
switch(choice){
case 1:
case 2:
map[i].key = i;
bool temp = !is_admin(cur->data);
bool* tempstar = malloc(sizeof(bool));
*tempstar = temp;
map[i].value = tempstar;
break;
case 3:
case 4:
map[i].key = i;
map[i].value = cur->data;
break;
}
cur = cur->next;
}
switch(choice){
case 1:
case 3:
qsort(map,sizeofLinkedlist(list),sizeof(struct Map),compare_decending_str);
break;
case 2:
case 4:
qsort(map,sizeofLinkedlist(list),sizeof(struct Map),compare_ascending_str);
break;
}
return map;
}