not compiled version;
showUser not yet write; maybe rewrite and intergrate all list to a more simplfied unified version
This commit is contained in:
parent
a0ddf33d85
commit
aa6c952185
176
admin_user.h
176
admin_user.h
@ -19,7 +19,7 @@
|
||||
void inv_control();
|
||||
void tran_control();
|
||||
void user_control();
|
||||
void admin_control();
|
||||
void role_control();
|
||||
struct user_row *prompt_user();
|
||||
int admin_menu_user_choices(char* name,char* role);
|
||||
|
||||
@ -45,10 +45,10 @@ void admin_menu(){
|
||||
tran_control();
|
||||
break;
|
||||
case 3://action with user
|
||||
// user_control();
|
||||
user_control();
|
||||
break;
|
||||
case 4://action with admin user register
|
||||
// admin_control();
|
||||
case 4://role management
|
||||
// role_control();
|
||||
break;
|
||||
case 5://Exit
|
||||
break;
|
||||
@ -105,7 +105,6 @@ int admin_menu_user_choices(char* name,char* role){
|
||||
printf("1. Inventory control\n");
|
||||
printf("2. Transaction control\n");
|
||||
printf("3. User control\n");
|
||||
printf("4. Admin user register\n");
|
||||
printf("5. Exit and Logout\n");
|
||||
printf(">");
|
||||
scanf("%d", &choice);
|
||||
@ -791,4 +790,171 @@ struct Map* sortTrans(struct transaction db,int choice){
|
||||
break;
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
//user control
|
||||
void user_control(){
|
||||
struct user db = read_db_user();
|
||||
int choice = 0;
|
||||
while(choice != 9){
|
||||
system("cls");
|
||||
printf("User Control\n");
|
||||
printf("1. Add User(shortcut)\n");
|
||||
printf("2. List User\n");
|
||||
printf("3. Exit\n");
|
||||
printf("Please input your choice\n>");
|
||||
fflush(stdin);
|
||||
scanf("%d",&choice);
|
||||
switch(choice){
|
||||
case 1:
|
||||
db = add_user(db);
|
||||
break;
|
||||
case 2:
|
||||
db = list_user(db);
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
default:
|
||||
printf("Invalid choice\n");
|
||||
printf("press any key to continue\n");
|
||||
fflush(stdin);
|
||||
getchar();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct user add_user(struct user db){
|
||||
char temp[100];
|
||||
int index = db.db.row_count;
|
||||
struct user_row *temprow = realloc(db.row, sizeof(struct user_row));
|
||||
temp = prompt_item("Please input the username\n>",temp);
|
||||
strcpy(temprow.username,temp);
|
||||
temp = prompt_item("Please input the role\n>",temp);
|
||||
strcpy(temprow.role,temp);
|
||||
|
||||
if(!append_user(temprow)){
|
||||
printf("Failed to add user\n");
|
||||
exit(1);//exit program to prevent errors
|
||||
}else{
|
||||
printf("User added\n");
|
||||
}
|
||||
printf("press any key to continue\n");
|
||||
fflush(stdin);
|
||||
getchar();
|
||||
|
||||
return read_db_user();
|
||||
}
|
||||
void print_user(struct user db, int cur, int end,struct Map* map);
|
||||
struct Map* sortUser(struct user db,int choice);
|
||||
struct user showUser(struct user db,int index);
|
||||
struct user list_user(struct user db){
|
||||
int choice = -1;
|
||||
int page = 0;
|
||||
int page_size = PAGE_SIZE;
|
||||
int total_pages = ceil((double)db.db.row_count / page_size);
|
||||
int row = db.db.row_count;
|
||||
struct Map* map = NULL;
|
||||
do{
|
||||
system("cls");
|
||||
welcome_message();
|
||||
printf("User list\n");
|
||||
printf("0 exit\n");
|
||||
printf("1 sort User decending\n");
|
||||
printf("2 sort User ascending\n");
|
||||
printf("3 sort Role decending\n");
|
||||
printf("4 sort Role ascending\n");
|
||||
if(page+1==total_pages){
|
||||
print_user(db,page*page_size,db.db.row_count,map);
|
||||
}else{
|
||||
print_user(db,page*page_size,(page+1)*page_size,map);
|
||||
}
|
||||
//page control
|
||||
int current_page_size = page_size+8;
|
||||
if(page+1 == total_pages){
|
||||
current_page_size = row - page*page_size+8;
|
||||
}
|
||||
printf("%d next page\n",current_page_size+1);
|
||||
printf("%d previous page\n",current_page_size+2);
|
||||
printf("%d set page size\n",current_page_size+3);
|
||||
if(choice <=8 && choice > 0){
|
||||
printf("sorting...\n");
|
||||
map = sortUser(db,choice);
|
||||
}else if(choice == current_page_size+1 ){
|
||||
if(page + 1 < total_pages){
|
||||
page++;
|
||||
}else{
|
||||
printf("Already at last page\n");
|
||||
valid = false;
|
||||
}
|
||||
}else if(choice == current_page_size+2){
|
||||
if(page > 0){
|
||||
page--;
|
||||
}else{
|
||||
printf("Already at first page\n");
|
||||
valid = false;
|
||||
}
|
||||
}else if(choice == current_page_size+3){
|
||||
printf("Enter page size: ");
|
||||
fflush(stdin);
|
||||
scanf("%d", &page_size);
|
||||
total_pages = ceil(row / page_size);
|
||||
}else if(choice >= 9 && choice <= current_page_size){
|
||||
if(map == NULL){
|
||||
db = showUser(db,choice - 9 + page_size*page);
|
||||
}else{
|
||||
db = showUser(db,map[choice - 9 + page_size*page].key);
|
||||
}
|
||||
}else if(choice != 0){
|
||||
printf("Invalid choice\n");
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
|
||||
void print_user(struct user db, int cur, int end,struct Map* map){
|
||||
printf("%-5s%-10s%-10s%-10s\n","No.","Username","Role","IsAdmin");
|
||||
for(int i = cur; i < end; i++){
|
||||
if(map[i].value != NULL){
|
||||
int index = (int)map[i].value;
|
||||
bool isadmin = is_admin(db.row[index].role);
|
||||
printf("%-5d%-10s%-10s%-10c\n",i+5,db.row[index].username,db.row[index].role,isadmin?'Y':'N');
|
||||
}else{
|
||||
bool isadmin = is_admin(db.row[(int)map[i].value].role);
|
||||
printf("%-5s%-10s%-10s%-10c\n",i+5,db.row[(int)map[i].value].username,db.row[(int)map[i].value].role,isadmin?'Y':'N');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Map* sortUser(struct user db,int choice){
|
||||
struct Map *map = malloc(sizeof(struct Map) * db.db.row_count);
|
||||
for (int i = 0; i < db.db.row_count; i++){
|
||||
|
||||
switch(choice){
|
||||
case 1:
|
||||
case 2:
|
||||
char* temp = malloc(sizeof(char) * 100);
|
||||
strcpy(temp,db.row[i].username);
|
||||
map[i].value = (void*)temp;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case 4:
|
||||
char* temp2 = malloc(sizeof(char) * 100);
|
||||
strcpy(temp2,db.row[i].role);
|
||||
map[i].value = (void*)temp2;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
switch (choice){
|
||||
case 1:
|
||||
case 3:
|
||||
qsort(map, db.db.row_count, sizeof(struct Map), compare_decending);
|
||||
break;
|
||||
case 2:
|
||||
case 4:
|
||||
qsort(map, db.db.row_count, sizeof(struct Map), compare_ascending);
|
||||
break;
|
||||
}
|
||||
return map;
|
||||
}
|
@ -103,6 +103,7 @@ bool is_admin(char* role){
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//list of db func
|
||||
int basic_get_row_count(int end, FILE *fp){
|
||||
fseek(fp, 0, SEEK_SET);//prevent pointer on wrong position
|
||||
|
Loading…
x
Reference in New Issue
Block a user