Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <memory.h>
- #define count_of_capibilitie 2
- char capibilities[count_of_capibilitie][50] = {"NFC", "Поліфонія"};
- struct Model {
- char model[50];
- char company[50];
- char place[50];
- int year;
- int capibilitie;
- float price;
- struct Model *prev;
- } *base = NULL;
- void print_menu();
- void add_element();
- void print_elements();
- void find_expensive();
- void find_elements_from_range();
- void sort_by_price();
- void sort_by_year();
- void find_model_by_capabiltie();
- void find_range_by_company();
- void export_to_file();
- void import_from_file();
- void remove_new_line(char *a);
- int main() {
- while(1) {
- system("cls");
- print_menu();
- printf("Зробіть свій вибір: ");
- int act;
- scanf("%d", &act);
- switch (act) {
- case 1:
- add_element();
- break;
- case 2:
- print_elements();
- break;
- case 3:
- find_expensive();
- break;
- case 4:
- find_elements_from_range();
- break;
- case 5:
- sort_by_year();
- break;
- case 6:
- sort_by_price();
- break;
- case 7:
- find_model_by_capabiltie();
- break;
- case 8:
- find_range_by_company();
- break;
- case 9:
- export_to_file();
- break;
- case 10:
- import_from_file();
- break;
- case 11:
- exit(0);
- default:
- printf("ERROR");
- exit(1);
- }
- }
- }
- void print_menu(){
- puts("Введіть 1 щоб додати модель");
- puts("Введіть 2 щоб вивести всі моделі");
- puts("Введіть 3 щоб знайти моедль самого дорогого телефону");
- puts("Введіть 4 щоб знайти моеделі по заданому діапазону цін");
- puts("Введіть 5 для сортування за роком випуску");
- puts("Введіть 6 для сортування за ціною");
- puts("Введіть 7 для виведення моделі по заданії додатковій можливості");
- puts("Введіть 8 щоб знайти діапазон цін у компанії");
- puts("Введіть 9 щоб експортувати данні");
- puts("Введіть 10 щоб імпортувати данні");
- puts("Введіть 11 щоб закінчити виконання програми");
- }
- void print_element(struct Model element){
- printf("Модель: %s\n", element.model);
- printf("Компанія: %s\n", element.company);
- printf("Місце виробництва: %s\n", element.place);
- printf("Рік виробництва: %d\n", element.year);
- printf("Додаткова можливість: %s\n", capibilities[element.capibilitie-1]);
- printf("Ціна: %.2f\n", element.price);
- }
- void add_element(){
- struct Model *new_element = malloc(sizeof(struct Model));
- while(1){
- system("cls");
- getchar();
- printf("Введіть модель: ");
- fgets(new_element->model, 50, stdin);
- printf("Введіть назву компанії: ");
- remove_new_line(new_element->model);
- fgets(new_element->company, 50, stdin);
- printf("Введіть місце виробництва: ");
- remove_new_line(new_element->company);
- fgets(new_element->place, 50, stdin);
- remove_new_line(new_element->place);
- printf("Введіть рік виробництва: ");
- scanf("%d", &new_element->year);
- printf("Виберіть додаткову можливість: \n");
- for (int i=0;i<count_of_capibilitie; i++){
- printf("\t%d - %s\n", i+1, capibilities[i]);
- }
- printf("Введіть номер можливості: ");
- scanf("%d", &new_element->capibilitie);
- printf("Введіть ціну: ");
- scanf("%f", &new_element->price);
- system("cls");
- print_element(*new_element);
- printf("Введіть 1 для пітвердження, 2 для вводу данних ще раз\nчи 3 для того щоб повернутись у головне меню");
- int act;
- scanf("%d", &act);
- switch(act) {
- case 1:
- new_element->prev = base;
- base = new_element;
- return;
- case 2:
- break;
- case 3:
- return;
- default:
- printf("ERROR");
- exit(1);
- }
- }
- }
- void print_elements(){
- system("cls");
- struct Model *element = base;
- while(element!=NULL){
- print_element(*element);
- puts("******************************************************");
- element = element->prev;
- }
- system("pause");
- }
- void find_expensive(){
- system("cls");
- struct Model *element = base;
- struct Model *expensive_model = base;
- if (expensive_model == NULL){
- printf("Моделей ще не має в программі");
- return;
- }
- while(element!=NULL){
- if (element->price > expensive_model->price){
- expensive_model = element;
- }
- element = element->prev;
- }
- element = base;
- while(element!=NULL){
- if (element->price == expensive_model->price) {
- print_element(*element);
- puts("******************************************************");
- }
- element = element->prev;
- }
- system("pause");
- }
- void find_elements_from_range(){
- system("cls");
- printf("Введіть границю: ");
- float left, right;
- scanf("%f", &left);
- printf("Введіть границю: ");
- scanf("%f", &right);
- if (left>right){
- float tmp = left;
- left = right;
- right = tmp;
- }
- struct Model *element = base;
- while(element!=NULL){
- if (left <= element->price && element->price <= right) {
- print_element(*element);
- puts("******************************************************");
- }
- element = element->prev;
- }
- system("pause");
- }
- void swap_data(struct Model *a, struct Model *b){
- struct Model tmp;
- strcpy(tmp.model, a->model);
- strcpy(tmp.company, a->company);
- strcpy(tmp.place, a->place);
- tmp.year = a->year;
- tmp.capibilitie = a->capibilitie;
- tmp.price = a->price;
- strcpy(a->model, b->model);
- strcpy(a->company, b->company);
- strcpy(a->place, b->place);
- a->year = b->year;
- a->capibilitie = b->capibilitie;
- a->price = b->price;
- strcpy(b->model, tmp.company);
- strcpy(b->company, tmp.company);
- strcpy(b->place, tmp.place);
- b->year = tmp.year;
- b->capibilitie = tmp.capibilitie;
- b->price = tmp.price;
- }
- void sort_by_year(){
- struct Model *i = base;
- while(i!=NULL){
- struct Model *j = base;
- while(j!=NULL) {
- if (i->year > j->year){
- swap_data(i, j);
- }
- j = j->prev;
- }
- i = i->prev;
- }
- puts("Відсортированно");
- }
- void sort_by_price(){
- struct Model *i = base;
- while(i!=NULL){
- struct Model *j = base;
- while(j!=NULL) {
- if (i->price > j->price){
- swap_data(i, j);
- }
- j = j->prev;
- }
- i = i->prev;
- }
- puts("Відсортированно");
- }
- void find_model_by_capabiltie(){
- printf("Виберіть додаткову можливість: \n");
- for (int i=0;i<count_of_capibilitie; i++){
- printf("\t%d - %s\n", i+1, capibilities[i]);
- }
- printf("Введіть номер можливості: ");
- int cap;
- scanf("%d", &cap);
- system("cls");
- struct Model *element = base;
- while(element!=NULL){
- if (element->capibilitie == cap) {
- print_element(*element);
- puts("******************************************************");
- }
- element = element->prev;
- }
- system("pause");
- }
- void find_range_by_company(){
- system("cls");
- printf("Введіть назву компанії: ");
- struct Model *element = base;
- if (element == NULL){
- printf("Елементів не знайдено");
- return;
- }
- float min,max;
- while(element!=NULL){
- min = element->price<min?element->price:min;
- max = element->price>max?element->price:max;
- element = element->prev;
- }
- printf("Діапазон цін: %.2f -- %.2f", min, max);
- system("pause");
- }
- void export_to_file(){
- FILE *file;
- getchar();
- char path[100];
- printf("Введіть шлях до файлу: ");
- fgets(path, 100, stdin);
- remove_new_line(path);
- file = fopen(path, "wb");
- if (file==NULL){
- puts("Помилка запису");
- }
- struct Model *element = base;
- while(element!=NULL){
- fwrite(element, sizeof(struct Model), 1, file);
- element = element->prev;
- }
- puts("Записано");
- }
- void import_from_file(){
- FILE *file;
- getchar();
- char path[100];
- printf("Введіть шлях до файлу: ");
- fgets(path, 100, stdin);
- remove_new_line(path);
- file = fopen(path, "rb");
- if (file==NULL){
- puts("Помилка зчитування");
- }
- struct Model *element = malloc(sizeof(struct Model));
- while(fread(element ,sizeof(struct Model), 1 ,file) == 1){
- element->prev = base;
- base = element;
- }
- puts("Зчитанно");
- }
- void remove_new_line(char *a){
- if (a[strlen(a)-1] == '\n') a[strlen(a)-1] = '\0';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement