Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Описание назначения функции
Файл «inputData.c» В данном файле содержится функция, которая осуществляет ввод данных. После её запуска входим в цикл while, в котором первым делом проверяется место в базе, если база заполнена, то на экран выводится соответствующее сообщение. В противном случае нам предлагается ввести данные, которые записываются в соответствующие поля нашей структуры. После этого нам предлагается продолжить ввести данные либо завершить ввод. При некорректном вводе программа сообщает об ошибке. Далее представлен листинг файла: #include "main.h" externintnum; externstructjkiarr[20]; voidinputData(){ int i, k, n, a, index, letter; while(1){ if(num == 20){ printf("\nFull base of data\n"); break; } printf("\nCount of records?"); scanf("%d", &num); while(getchar()!= '\n'); for(i = 0; i <num; i++){ index = 0; while(1){ printf("Name jki №%d?", i + 1); while ((letter = getchar())!= '\n') arr[i].name[index++] = letter; arr[i].name[index] = '\0'; if(strlen(arr[i].name) == 0){ printf("Incorrect data!\n"); continue; } break; } index = 0; while(1){ printf("Color jki №%d?", i + 1); while ((letter = getchar())!= '\n') arr[i].color[index++] = letter; arr[i].color[index] = '\0'; if(strlen(arr[i].color) == 0){ printf("Incorrect data!\n"); continue; } break; } while(1){ printf("Volt jki №%d?", i + 1); if((scanf("%d", &arr[i].volt))!= 1 || arr[i].volt < 0){ while(getchar()!= '\n'); printf("Incorrect data!\n"); continue; } else{ while(getchar()!= '\n'); } break; } while(1){ printf("Tokjki №%d?", i + 1); if((scanf("%f", &arr[i].tok))!= 1 || arr[i].tok< 0){ while(getchar()!= '\n'); printf("Incorrect data!\n"); continue; } else{ while(getchar()!= '\n'); } break; } while(1){ printf("Price jki №%d?", i + 1); if((scanf("%f", &arr[i].price))!= 1 || arr[i].price < 0){ while(getchar()!= '\n'); printf("Incorrect data!\n"); continue; } else{ while(getchar()!= '\n'); } break; } printf("===================================\n"); } break; } return; }
Файл «outputData.c». Здесь содержится функция, которая выводит весь справочник на экран. Листинге файла: #include "main.h" externintnum; externstructjkiarr[20]; voidoutputData(){ int i; printf("===============================================\n"); for(i = 0; i <num; i++){ printf("№=%d\n", i + 1); printf("Name: %s\n", arr[i].name); printf("Color: %s\n", arr[i].color); printf("Volt: %d\n", arr[i].volt); printf("Tok: %.f\n", arr[i].tok); printf("Price: %.f\n", arr[i].price); printf("===============================================\n"); } }
Файл «searchData.c». В данном файле содержится функция поиска записи в справочнике по названию. Листинг файла: #include "main.h" externstructjkiarr[20]; externintnum; voidsearchData(){ int i; char ss2[20]; if(num> 1){ while(1){ printf("Name for search?\n"); fgets(ss2, 20, stdin); if(ss2[0] == '\0'){ printf("Incorrect data!\n"); continue; } else{ break; } } for(i = 0; i <num; i++){ if(strcmp(ss2, arr[i].name) == 0){ printf("№=%d\n", i + 1); printf("Name: %s\n", arr[i].name); printf("Color: %s\n", arr[i].color); printf("Volt: %3d\n", arr[i].volt); printf("Tok: %f\n", arr[i].tok); printf("Price: %f\n", arr[i].price); } } } else{ getchar(); printf("No data!\n"); } return; }
Файл «sortDataByName.c». Содержит сортировку по названию. Листинг файла: #include"main.h" externstructjkiarr[20]; externintnum; voidsortDataByName(){ int i, j; structjkitmp; for (i = 0; i <num - 1; i++) { int min = i; for (j = i + 1; j <num; j++) if((strcmp(arr[j].name, arr[min].name)) < 0) min = j; if (min!= i) { tmp = arr[min]; arr[min] = arr[i]; arr[i] = tmp; } } printf("\nDone!\n"); return; }
Файл «sortDataByPrice.c». Сортировка по цене. Листинг файла: #include"main.h" externstructjkiarr[20]; externintnum; voidsortDataByPrice(){ structjkitempArr; int i, a; for(i = 0; i < num-1; i++) for(a = 0; a < num-1; a++){ if(arr[a + 1].price >arr[a].price){ tempArr = arr[a]; arr[a] = arr[a+1]; arr[a+1] = tempArr; } } printf("\nDone!\n"); return; }
Файл «loadData.c». Данная функция производит загрузку ранее сохраненного на диске справочника в оперативную память компьютера. После запуска функции предлагается ввести название загружаемого файла. Листинг файла: #include "main.h" externintnum; externstructjkiarr[20]; voidloadData(){ int a=0, q, i; char e, k[15]; FILE *f; while(1){ printf("File name?"); fgets(k, 15, stdin); for(i = 0; k[i]!= '\n'; i++) continue; k[i] = '\0'; if((f=fopen(k, "r+b")) == NULL){ printf("Error open file!\n"); getchar(); return; } else{ break; } } fread(&num, sizeof(int), 1, f); for(q = 0; q <num; q++) fread(&arr[q], sizeof(structjki), 1, f); fclose(f); printf("Done!\n"); }
Файл «saveData.c». Данная функция осуществляет запись справочника в файл. Листинг файла: #include"main.h" externstructjkiarr[20]; externintnum; voidsaveData(){ char k[15]; int i = 0; FILE *f; printf("File name?"); fgets(k, 15, stdin); for(i = 0; k[i]!= '\n'; i++) continue; k[i] = '\0'; if((f = fopen(k, "wb")) == NULL){ printf("Error open file!\n"); return; } fwrite(&num, sizeof(int), 1, f); for(i = 0; i <num; i++) fwrite(&arr[i], sizeof(structjki), 1, f); fclose(f); printf("Done!\n"); return; }
Файл «main.c». В самом начале программы происходит вход в бесконечный цикл, который завершится только, если будет выбран 8 пункт меню (выход из программы). В начале каждого бесконечного цикла, предлагается выбрать пункт меню, путём ввода с клавиатуры его порядкового номера. Каждая ветвь соответствует пункту меню с порядковым номером n, и в ней выполняется соответствующая функция. Листинг файла: #include <main.h> intnum = 0; structjkiarr[20]; int main(intargc, char *argv[]) { setlocale(LC_ALL, "Rus"); int a; while(1){ printf("1. Input data\n"); printf("2. Output data\n"); printf("3. Sort by name\n"); printf("4. Sort by price\n"); printf("5. Search by name\n"); printf("6. Save as\n"); printf("7. Open file\n"); printf("8. Exit\n"); printf("\nNumber?"); scanf("%d", &a); if(getchar() == '\n'){ switch(a){ case 1: inputData(); break; case 2: if(num == 0){ printf("\nNo data!\n"); continue; } outputData(); break; case 3: if(num == 0){ printf("\nNo data!\n"); continue; } sortDataByName(); break; case 4: if(num == 0){ printf("\nNo data!\n"); continue; } sortDataByPrice(); break; case 5: if(num == 0){ printf("\nNo data!\n"); continue; } searchData(); break; case 6: if(num == 0){ printf("\nNo data!\n"); continue; } saveData(); break; case 7: loadData(); break; case 8: return 0; default: printf("\nIncorrect number!\n"); continue; } } else{ printf("Incorrect number!"); while(getchar()!= '\n'); } } return 0; }
Файл «main.h». Заголовочный файл. В нем содержатся все подключаемые библиотеки, прототипы функций, объявления структуры. Листинг файла: #include <stdio.h> #include <string.h> #include <locale.h> voidinputData(); voidoutputData(); voidsearchData(); voidsortDataByName(); voidsortDataByPrice(); voidsaveData(); voidloadData(); structjki { char name[20]; char color[10]; int volt; float price, tok; };
|