Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <string>
- #include <iomanip>
- #include <cctype>
- using namespace std;
- struct scan_info{
- char model[25]; //наименование модели
- int price; //цена
- double x_size; //горизонтальный размер области сканирования
- double y_size; //вертиклаьный размер области сканирования
- int optr; //оптическое разрешение
- int grey; //число градаций серого
- };
- void scan_info1 (scan_info * scan, int bufNum){
- for( int i = 0; i < bufNum; i++ ){
- scan[i].price = 0;
- scan[i].x_size = 0;
- scan[i].y_size = 0;
- scan[i].optr = 0;
- cout << "Введите наименование модели: ";
- cin >> scan[i].model;
- while (scan[i].price <= 0){
- cout << "\n Введите цену: ";
- cin >> scan[i].price;
- }
- while (scan[i].x_size <= 0){
- cout << "\n Введите горизонтальный размер области сканирования: ";
- cin >> scan[i].x_size;
- }
- while (scan[i].y_size <= 0){
- cout << "\n Введите вертикальный размер области сканирования: ";
- cin >> scan[i].y_size;
- }
- while (scan[i].optr <= 0){
- cout << "\n Введите оптическое разрешение: ";
- cin >> scan[i].optr;
- }
- cout << "\n Введите число градаций серого: ";
- cin >> scan[i].grey;
- system("cls");
- }
- }
- void Write_in_bin_file(scan_info *scan, int u){ //запись в файл с условием
- FILE * fout = fopen ("File1.bin", "wb");
- int k = 0;
- fwrite (&k, sizeof (k), 1, fout); //записывает переменную k размером 4 один раз в файл fout
- cout << "Структура, где цена больше 200" << endl;
- for (int i=0; i < u; i++){
- if (scan[i].price > 200){
- if (isupper(scan[i].model[0])){
- fwrite (&scan[i], sizeof (scan[i]), 1, fout);
- cout << scan[i].model << " " << scan[i].price << " " << scan[i]. x_size << " " << scan[i].y_size << " " << scan[i].optr << " " <<scan[i].grey << endl;
- }
- }
- }
- for (int i=0; i < u; i++){
- if (scan[i].price > 200){
- if (!(isupper(scan[i].model[0]))){
- fwrite (&scan[i], sizeof (scan[i]), 1, fout);
- cout << scan[i].model << " " << scan[i].price << " " << scan[i]. x_size << " " << scan[i].y_size << " " << scan[i].optr << " " <<scan[i].grey << endl;
- }
- }
- }
- fseek(fout, 0L, SEEK_SET); //курсор в начало файла
- fwrite (&k, sizeof (k), 1, fout); //записывает переменную k размером 4 один раз в файл fout
- fclose (fout);
- }
- void Write_in_bin_file_structur (scan_info *scan, int u){ //запись в файл полной структуры
- cout << "Структура" << endl;
- FILE * fout1 = fopen ("File2.bin", "wb");
- for (int i = 0; i < u; i++){
- fwrite (&scan[i], sizeof (scan[i]), 1, fout1);
- cout << scan[i].model << " " << scan[i].price << " " << scan[i]. x_size << " " << scan[i].y_size << " " << scan[i].optr << " " <<scan[i].grey << endl;
- }
- cout << endl;
- fclose (fout1);
- }
- void Display_binary_file(const char *filename) {
- FILE *pFile = fopen(filename, "rb");
- if (pFile == NULL) {
- fputs("Ошибка чтения!", stderr);
- exit(1);
- }
- fseek(pFile, 0, SEEK_END);
- long fSize = ftell(pFile);
- rewind(pFile);
- char *buffer = (char*)malloc(sizeof(char) * fSize);
- if (buffer == NULL) {
- fputs("Ошибка выделения памяти!", stderr);
- exit(1);
- }
- size_t result = fread(buffer, 1, fSize, pFile);
- if (result != fSize) {
- fputs("Ошибка чтения!", stderr);
- exit(1);
- }
- printf("\nСодержимое бинарного файла %s\n", filename);
- for (int i = 0; i < fSize * sizeof(char); ++i) {
- printf("%02x", buffer[i]);
- }
- printf("\n");
- fclose(pFile);
- free(buffer);
- }
- void Output_on_display(scan_info *scan, int u){
- int selectNum, NumScan;
- selectNum = 0;
- while ((selectNum < 1) || (selectNum > 2)){
- cout<<"Введите 1 для вывода всех записей или 2 для вывода записи по её номеру: ";
- cin>>selectNum;
- }
- switch(selectNum){
- case 1:
- for(int i=0; i< u; i++)
- cout << "Наименование модели: " << scan[i].model
- << "\n Цена: " << scan[i].price
- << "\n Горизонтальный размер области сканирования: " << scan[i].x_size
- << "\n Вертикальный размер области сканирования: " << scan[i].y_size
- << "\n Оптическое разрешение: " << scan[i].optr
- << "\n Число градаций серого: " << scan[i].grey << endl << endl;
- break;
- case 2:
- cout << "Введите номер записи сканера, от 1 до " << u << ": ";
- cin >> NumScan;
- if (((NumScan-1) < u) && ((NumScan-1) > -1)){
- NumScan -= 1;
- cout << "\n Наименование модели: " << scan[NumScan].model
- << "\n Цена: " << scan[NumScan].price
- << "\n Горизонтальный размер области сканирования: " << scan[NumScan].x_size
- << "\n Вертикальный размер области сканирования: " << scan[NumScan].y_size
- << "\n Оптическое разрешение: " << scan[NumScan].optr
- << "\n Число градаций серого: " << scan[NumScan].grey << endl << endl;
- }
- break;
- default:
- cout << "Вы ввели неверное значение!\n";
- }
- }
- int main(){
- setlocale(LC_ALL, "Russian");
- int u = 0;
- while (u < 1){
- cout << "Введите кол-во структур для добавления: ";
- cin >> u;
- }
- scan_info * scan = (scan_info*)malloc(u * sizeof(scan_info));
- scan_info1 (scan, u);
- Write_in_bin_file_structur (scan, u);
- Write_in_bin_file (scan, u);
- Display_binary_file("File1.bin");
- Display_binary_file("File2.bin");
- Output_on_display (scan, u);
- free(scan);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement