FF

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 5

#include <stdio.

h>
#include <stdio.h>

struct FRUIT
{
char name[30];
char country[30];
int price;
};

struct TEMP
{
int code;
};

void fill_struct_fruit(struct FRUIT fruits[], struct TEMP* temp_st);


void add_fruit(struct FRUIT fruits[], struct TEMP* temp_st, int count);
void find_element(struct FRUIT fruits[], int last_index);
void print_fruits(struct FRUIT fruits[], int last_index);
void mod_element(struct FRUIT fruits[], int last_index);
void delete_element(struct FRUIT fruits[], struct TEMP* temp_st);
void sort_elements(struct FRUIT fruits[], int last_index);
void bubble_sort(struct FRUIT fruits[], int last_index, int field);
void write_file(struct FRUIT fruits[], int last_index);

int main(void)
{
struct FRUIT fruits[20];
struct TEMP temp_st = { 0 };

fill_struct_fruit(fruits, &temp_st);

//add_fruit(fruits, &temp_st, 2);

find_element(fruits, temp_st.code);

print_fruits(fruits, temp_st.code);

mod_element(fruits, temp_st.code);

delete_element(fruits, &temp_st);

sort_elements(fruits, temp_st.code);

return 0;
}
void add_fruit(struct FRUIT fruits[], struct TEMP(*temp_st), int count)
{
for (int i = 0; i < count; i++)
{
printf("(%d)( add fruit ) enter name:\n", i + 1);
scanf("%s", &fruits[(*temp_st).code].name);

printf("enter country:\n");
scanf("%s", &fruits[(*temp_st).code].country);

printf("enter price:\n");
scanf("%d", &fruits[(*temp_st).code].price);
(*temp_st).code++;
write_file(fruits, (*temp_st).code);
}
}

void print_find_element(struct FRUIT fruits[], int index)


{
printf("%d, %s, %s, %d\n", index + 1, fruits[index].name,
fruits[index].country, fruits[index].price);
}

void find_element(struct FRUIT fruits[], int last_index)


{
int field, value_int;
char value_char[30];

printf("( find element ) enter field (1 - name; 2 - country; 3 - price):\n");


scanf("%d", &field);

printf("enter value:\n");
if (field == 1 || field == 2)
{
scanf("%s", &value_char);
}
else {
scanf("%d", &value_int);
}

for (int i = 0; i < last_index; i++)


{
switch (field)
{
case 1:
if (strstr(fruits[i].name, value_char))
print_find_element(fruits, i);
break;
case 2:
if (strstr(fruits[i].country, value_char))
print_find_element(fruits, i);
break;
case 3:
if (value_int == fruits[i].price)
print_find_element(fruits, i);
break;
default:
break;
}
}
}

void print_fruits(struct FRUIT fruits[], int last_index)


{
for (int i = 0; i < last_index; i++)
{
printf("\n%d) %s, %s, %d", i + 1, fruits[i].name, fruits[i].country,
fruits[i].price);
}
printf("\n");
}

void mod_element(struct FRUIT fruits[], int last_index)


{
int row, field, type, value_int;
char value_char[30];

printf("( modify ) enter row:\n");


scanf("%d", &row);

row--;

printf("enter field (1 - name; 2 - country; 3 - price):\n");


scanf("%d", &field);

printf("enter value:\n");
if (field == 1 || field == 2)
{
scanf("%s", &value_char);
}
else {
scanf("%d", &value_int);
}

switch (field)
{
case 1:
strcpy(fruits[row].name, value_char);
break;
case 2:
strcpy(fruits[row].country, value_char);
break;
case 3:
fruits[row].price = value_int;
break;
default:
break;
}
write_file(fruits, last_index);
}

void delete_element(struct FRUIT fruits[], struct TEMP* temp_st)


{
int index;

printf("\n( delete elem ) enter row, you want to delete:\n");


scanf("%d", &index);

index--;

for (int i = index; i < (*temp_st).code; i++)


{
fruits[i] = fruits[i + 1];
}
(*temp_st).code--;
write_file(fruits, (*temp_st).code);
}

void bubble_sort(struct FRUIT fruits[], int last_index, int field)


{
for (int i = 0; i < last_index - 1; i++)
{
for (int j = i + 1; j < last_index; j++)
{
switch (field)
{
case 1:
if (fruits[i].name[0] > fruits[j].name[0]) {
struct FRUIT temp = fruits[i];
fruits[i] = fruits[j];
fruits[j] = temp;
}
break;
case 2:
if (fruits[i].country[0] > fruits[j].country[0]) {
struct FRUIT temp = fruits[i];
fruits[i] = fruits[j];
fruits[j] = temp;
}
break;
case 3:
if (fruits[i].price > fruits[j].price) {
struct FRUIT temp = fruits[i];
fruits[i] = fruits[j];
fruits[j] = temp;
}
break;
default:
break;
}
}
}
}

void sort_elements(struct FRUIT fruits[], int last_index)


{
int field;

printf("( sort by field ) enter field (1 - name; 2 - country; 3 - price):\


n");
scanf("%d", &field);

bubble_sort(fruits, last_index, field);


write_file(fruits, last_index);
}

void write_file(struct FRUIT fruits[], int last_index)


{
FILE* file = fopen("fruits.txt", "w");

for (int i = 0; i < last_index; i++)


{
fprintf(file, "%s,%s,%d\n", fruits[i].name, fruits[i].country,
fruits[i].price);
}

fclose(file);
}
void fill_struct_fruit(struct FRUIT fruits[], struct TEMP* temp_st)
{
FILE* file = fopen("fruits.txt", "r");

int counter = 0;
char text[1000];

while (fgets(text, 1000, file))


{
FILE* temp = fopen("temp.txt", "w");
fprintf(temp, text);
fclose(temp);

temp = fopen("temp.txt", "r");

fscanf(temp, "%39[^,],%39[^,],%d", fruits[counter].name,


fruits[counter].country, &fruits[counter].price);
counter++;
(*temp_st).code = counter;

fclose(temp);
};
}

You might also like