Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include"lab3.h"
- bool is_num(char inpt[50])
- {
- int len=strlen(inpt)-1;
- int i=0;
- int flag=0;
- while(i<(len-1))
- {
- if(!isdigit(inpt[i])&&inpt[i]!='.')
- {
- printf("number must consist of numbers \n");
- return false;
- }
- if(inpt[i]=='.')
- {
- if(flag==1)
- {
- printf("only one '.' is allowed\n");
- return false;
- }
- else
- flag++;
- }
- ++i;
- }
- return true;
- }
- void hilfe()
- {
- printf("Input commands: \n modify \n sort \n search \n search_by_column \n add \n print \n ");
- }
- int mod_input(char function[])
- {
- printf(function);
- if(strcmp(function,"modify")==1)
- return 3;
- else if(strcmp(function,"sort")==1)
- return 4;
- else if(strcmp(function,"search")==1)
- return 5;
- else if(strcmp(function,"help")==1)
- return 6;
- else if(strcmp(function,"add")==1)
- return 2;
- else if(strcmp(function,"print")==1)
- return 1;
- else if(strcmp(function,"search_by_column")==1)
- return 7;
- return 404;
- }
- void print_result(struct data *database,int size)
- {
- printf(database[0].id);
- int i=0;
- while(i<size)
- {
- printf("id- ");
- printf("%s",database[i].id);
- printf(" ,name- ");
- printf("%s",database[i].name);
- printf(" ,surname- ");
- printf("%s",database[i].surname);
- printf(" ,net pension- ");
- printf("%d",database[i].net_pension);
- printf(" ,taxed pension- ");
- printf("%d",database[i].taxed_pension);
- printf(" ,account number- ");
- printf("%s",database[i].account_num);
- printf("\n");
- ++i;
- }
- }
- bool is_word(char input[])
- {
- int len=strlen(input),i=0;
- while(i<(len-1))
- {
- if(!isalpha(input[i]))
- {
- printf("input must consist of letters \n");
- return false;
- }
- ++i;
- }
- return true;
- }
- bool is_accnum(char input[])
- {
- int len=strlen(input),i=0;
- while(i<(len-1))
- {
- if(!isdigit(input[i]))
- {
- printf("input must consist of digits \n");
- return false;
- }
- ++i;
- }
- return true;
- }
- void modify_size(struct data *database,int *size)
- {
- int len=(*size);
- database=realloc(database,sizeof(struct data)*(len+1));
- *size++;
- }
- void modify_element(struct data *database, int size)
- {
- int flag=0;
- int i=0;
- char inpt[51];
- do
- {
- printf("input id \n");
- fgets(inpt,50,stdin);
- while(i<size&&flag==0)
- {
- if(strcmp(database[i].id,inpt)==1)
- {
- flag=1;
- }
- ++i;
- }
- if(flag==0)
- printf("id not found \n");
- }
- while(flag==0);
- int subflag=0;
- int place=(i-1);
- do
- {
- printf("Input name \n");
- fgets(inpt,50,stdin);
- if(is_word(inpt)==1)
- {
- subflag=1;
- strcpy(database[place].name,inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input surname \n");
- fgets(inpt,50,stdin);
- if(is_word(inpt)==1)
- {
- subflag=1;
- strcpy(database[place].surname,inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input account number \n");
- fgets(inpt,50,stdin);
- if(is_accnum(inpt)==1)
- {
- subflag=1;
- strcpy(database[place].account_num,inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input net gain \n");
- fgets(inpt,50,stdin);
- if(is_num(inpt)==true)
- {
- subflag=1;
- database[place].net_pension=atof(inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input taxed gain \n");
- fgets(inpt,50,stdin);
- if(is_num(inpt)==true)
- {
- subflag=1;
- database[place].taxed_pension=atof(inpt);
- }
- }
- while(subflag==0);
- }
- bool str_grt(char str1[],char str2[])
- {
- int i=strlen(str1);
- int j=strlen(str2);
- int k=0;
- if(i>j)
- {
- while(k<j)
- {
- if(str1[k]>str2[k])
- return false;
- ++k;
- }
- }
- else
- while(k<i)
- {
- if(str1[k]>str2[k])
- return false;
- ++k;
- }
- if(i<j)
- return true;
- else
- return false;
- }
- void add_element(struct data *database,int *size)
- {
- int subflag=0;
- char inpt[50];
- int place=((*size)-1);
- int pass=(*size);
- printf("%i",pass);
- if((*size)!=1)
- {
- modify_element(database,(*size));
- }
- do
- {
- printf("Input unical ID \n");
- fgets(inpt,50,stdin);
- if(does_exist(inpt,database,pass)==1)
- {
- subflag=1;
- strncpy(database[place].id,inpt,50);
- }
- else
- {
- printf("ID exists");
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input name \n");
- fgets(inpt,50,stdin);
- if(is_word(inpt)==1)
- {
- subflag=1;
- strcpy(database[place].name,inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input surname \n");
- fgets(inpt,50,stdin);
- if(is_word(inpt)==1)
- {
- subflag=1;
- strcpy(database[place].surname,inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input account number \n");
- fgets(inpt,50,stdin);
- if(is_accnum(inpt)==1)
- {
- subflag=1;
- strcpy(database[place].account_num,inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input net gain \n");
- fgets(inpt,50,stdin);
- if(is_num(inpt)==true)
- {
- printf("%d",atof(inpt));
- subflag=1;
- database[place].net_pension=atof(inpt);
- }
- }
- while(subflag==0);
- subflag=0;
- do
- {
- printf("Input taxed gain \n");
- fgets(inpt,50,stdin);
- if(is_num(inpt)==true)
- {
- subflag=1;
- database[place].taxed_pension=atof(inpt);
- }
- }
- while(subflag==0);
- printf("record added \n");
- if((*size)==1)
- (*size)++;
- }
- void sort_by_num(struct data *database,int size,int col)
- {
- int i;
- struct data swapper;
- if(col==2)
- {
- for(i=1; i<size; )
- {
- if(atoi(database[i-1].account_num) <= atoi(database[i].account_num))
- ++i;
- else
- {
- swapper = database[i];
- database[i] = database[i-1];
- database[i-1] = swapper;
- --i;
- if(i == 0)
- i = 1;
- }
- }
- }
- else if(col==5)
- {
- for(i=1; i<size; )
- {
- if(database[i-1].net_pension <= database[i].net_pension)
- ++i;
- else
- {
- swapper = database[i];
- database[i] = database[i-1];
- database[i-1] = swapper;
- --i;
- if(i == 0)
- i = 1;
- }
- }
- }
- else
- {
- for(i=1; i<size; )
- {
- if(database[i-1].taxed_pension <= database[i].taxed_pension)
- ++i;
- else
- {
- swapper = database[i];
- database[i] = database[i-1];
- database[i-1] = swapper;
- --i;
- if(i == 0)
- i = 1;
- }
- }
- }
- }
- void sort_str(struct data *database,int size,int col)
- {
- int i;
- struct data swapper;
- if(col==1)
- {
- for(i=1; i<size; )
- {
- if(str_grt(database[i-1].id,database[i].id))
- ++i;
- else
- {
- swapper = database[i];
- database[i] = database[i-1];
- database[i-1] = swapper;
- --i;
- if(i == 0)
- i = 1;
- }
- }
- }
- if(col==3)
- {
- for(i=1; i<size; )
- {
- if(str_grt(database[i-1].name,database[i].name))
- ++i;
- else
- {
- swapper = database[i];
- database[i] = database[i-1];
- database[i-1] = swapper;
- --i;
- if(i == 0)
- i = 1;
- }
- }
- }
- if(col==4)
- {
- for(i=1; i<size; )
- {
- if(str_grt(database[i-1].surname,database[i].surname))
- ++i;
- else
- {
- swapper = database[i];
- database[i] = database[i-1];
- database[i-1] = swapper;
- --i;
- if(i == 0)
- i = 1;
- }
- }
- }
- }
- void sort_table(struct data *database,int size)
- {
- int pass=size;
- int swtch=0;
- printf("Sort by which column?");
- do
- {
- swtch=to_col();
- }
- while(swtch==0);
- switch(swtch)
- {
- case 1:
- sort_str(database,pass,1);
- break;
- case 2:
- sort_by_num(database,pass,2);
- break;
- case 3:
- sort_str(database,pass,3);
- break;
- case 4:
- sort_str(database,pass,4);
- break;
- case 5:
- sort_by_num(database,pass,5);
- break;
- case 6:
- sort_by_num(database,pass,6);
- break;
- }
- print_result(database,pass);
- }
- int does_exist(char id[],struct data *database,int size)
- {
- int i=0;
- while(i<size)
- {
- if(strcmp(id,database[i].id)==1)
- return false;
- ++i;
- }
- return true;
- }
- void search(struct data *database,int size)
- {
- char inpt[50];
- int i=0;
- int l=0;
- printf("Input searched value \n");
- fgets(inpt,50,stdin);
- while(i<size)
- {
- if((strcmp(inpt,database[i].name)==1) || (strcmp(inpt,database[i].surname)==1) || atof(inpt)==database[i].net_pension || atof(inpt)==database[i].taxed_pension || (strcmp(inpt,database[i].account_num)==1))
- {
- l++;
- printf("%i",l);
- printf("id- ",database[i].id);
- printf(" ,name- ",database[i].name);
- printf(" ,surname- ",database[i].surname);
- printf(" ,net pension- ",database[i].net_pension);
- printf(" ,taxed pension- ",database[i].taxed_pension);
- printf(" ,account number- ",database[i].account_num);
- printf("\n");
- }
- ++i;
- }
- if(l==0)
- printf("no result found");
- }
- int to_col()
- {
- char inpt[51];
- int flag=0;
- printf("Avaible columns: id, name, surname, net/taxed pension,account number");
- do
- {
- printf("Input column");
- fgets(inpt,50,stdin);
- if(strcmp(inpt,"id")==1)
- flag=1;
- else if(strcmp(inpt,"account number")==1)
- flag=2;
- else if(strcmp(inpt,"name")==1)
- flag=3;
- else if(strcmp(inpt,"surname")==1)
- flag=4;
- else if(strcmp(inpt,"net pension")==1)
- flag=5;
- else if(strcmp(inpt,"taxed pension")==1)
- flag=6;
- }
- while(flag==0);
- return flag;
- }
- void search_by_col(struct data *database,int size)
- {
- char inpt[50];
- int i=0;
- int flag=0;
- int l=0;
- int swtch=0;
- do
- {
- swtch=to_col();
- }
- while(swtch==0);
- printf("Input searched value \n");
- fgets(inpt,50,stdin);
- while(i<size)
- {
- if(swtch==1)
- {
- if(strcmp(inpt,database[i].id)==1)
- {
- flag++;
- printf("%i",flag);
- printf("id- ",database[i].id);
- printf(" ,name- ",database[i].name);
- printf(" ,surname- ",database[i].surname);
- printf(" ,net pension- ",database[i].net_pension);
- printf(" ,taxed pension- ",database[i].taxed_pension);
- printf(" ,account number- ",database[i].account_num);
- printf("\n");
- }
- }
- else if(swtch==3)
- {
- if(strcmp(inpt,database[i].name)==1)
- {
- flag++;
- printf("%i",flag);
- printf("id- ",database[i].id);
- printf(" ,name- ",database[i].name);
- printf(" ,surname- ",database[i].surname);
- printf(" ,net pension- ",database[i].net_pension);
- printf(" ,taxed pension- ",database[i].taxed_pension);
- printf(" ,account number- ",database[i].account_num);
- printf("\n");
- }
- }
- else if(swtch==4)
- {
- if(strcmp(inpt,database[i].surname)==1)
- {
- flag++;
- printf("%i",flag);
- printf("id- ",database[i].id);
- printf(" ,name- ",database[i].name);
- printf(" ,surname- ",database[i].surname);
- printf(" ,net pension- ",database[i].net_pension);
- printf(" ,taxed pension- ",database[i].taxed_pension);
- printf(" ,account number- ",database[i].account_num);
- printf("\n");
- }
- }
- else if(swtch==5)
- {
- if(atof(inpt)==database[i].net_pension)
- {
- flag++;
- printf("%i",flag);
- printf("id- ",database[i].id);
- printf(" ,name- ",database[i].name);
- printf(" ,surname- ",database[i].surname);
- printf(" ,net pension- ",database[i].net_pension);
- printf(" ,taxed pension- ",database[i].taxed_pension);
- printf(" ,account number- ",database[i].account_num);
- printf("\n");
- }
- }
- else if(swtch==6)
- {
- if(atof(inpt)==database[i].taxed_pension)
- {
- flag++;
- printf("%i",flag);
- printf("id- ",database[i].id);
- printf(" ,name- ",database[i].name);
- printf(" ,surname- ",database[i].surname);
- printf(" ,net pension- ",database[i].net_pension);
- printf(" ,taxed pension- ",database[i].taxed_pension);
- printf(" ,account number- ",database[i].account_num);
- printf("\n");
- }
- }
- else if(swtch==2)
- {
- if(strcmp(inpt,database[i].account_num)==1)
- {
- flag++;
- printf("%i",flag);
- printf("id- ",database[i].id);
- printf(" ,name- ",database[i].name);
- printf(" ,surname- ",database[i].surname);
- printf(" ,net pension- ",database[i].net_pension);
- printf(" ,taxed pension- ",database[i].taxed_pension);
- printf(" ,account number- ",database[i].account_num);
- printf("\n");
- }
- }
- ++i;
- }
- if(flag==0)
- {
- printf("value not found \n");
- }
- }
- void menu(struct data *database)
- {
- int current_size=1;
- int input=0;
- char inpt[512];
- do
- {
- printf("Input function or input help for list of avaible commands \n");
- fgets(inpt,511,stdin);
- input=mod_input(inpt);
- if(input==404)
- {
- printf("Function does not exist \n");
- }
- else if(input==1)
- {
- print_result(database,current_size);
- }
- else if(input==2)
- {
- add_element(database,¤t_size);
- }
- else if(input==3)
- {
- modify_element(database,current_size);
- }
- else if(input==4)
- {
- sort_table(database, current_size);
- }
- else if(input==5)
- {
- search(database,current_size);
- }
- else if(input==6)
- {
- hilfe();
- }
- else if(input==7)
- {
- search_by_col(database,current_size);
- }
- input=8;
- }
- while(input!=0);
- }
- int main()
- {
- int current_size=0;
- struct data *database;
- database=(struct data*)malloc(1*sizeof(struct data));
- menu(database);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement