Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <string>
  4. #include <iomanip>
  5. #include <cctype>
  6.  
  7.  
  8. using namespace std;
  9.  
  10. struct scan_info{
  11.     char model[25];         //наименование модели
  12.     int price;              //цена
  13.     double x_size;          //горизонтальный размер области сканирования
  14.     double y_size;          //вертиклаьный размер области сканирования
  15.     int optr;               //оптическое разрешение
  16.     int grey;               //число градаций серого
  17. };
  18.  
  19. void scan_info1 (scan_info * scan, int bufNum){
  20.     for( int i = 0; i < bufNum; i++ ){
  21.         scan[i].price = 0;
  22.         scan[i].x_size = 0;
  23.         scan[i].y_size = 0;
  24.         scan[i].optr = 0;
  25.         cout << "Введите наименование модели: ";
  26.         cin >> scan[i].model;
  27.         while (scan[i].price <= 0){
  28.             cout << "\n Введите цену: ";
  29.             cin >> scan[i].price;
  30.         }
  31.         while (scan[i].x_size <= 0){
  32.             cout << "\n Введите горизонтальный размер области сканирования: ";
  33.             cin >> scan[i].x_size;
  34.         }
  35.         while (scan[i].y_size <= 0){
  36.             cout << "\n Введите вертикальный размер области сканирования: ";
  37.             cin >> scan[i].y_size;
  38.         }
  39.         while (scan[i].optr <= 0){
  40.             cout << "\n Введите оптическое разрешение: ";
  41.             cin >> scan[i].optr;
  42.         }
  43.         cout << "\n Введите число градаций серого: ";
  44.         cin >> scan[i].grey;
  45.         system("cls");
  46.     }
  47. }
  48.  
  49. void Write_in_bin_file(scan_info *scan, int u){ //запись в файл с условием
  50.     FILE * fout = fopen ("File1.bin", "wb");
  51.     int k = 0;
  52.     fwrite (&k, sizeof (k), 1, fout); //записывает переменную k размером 4 один раз в файл fout
  53.     cout << "Структура, где цена больше 200" << endl;
  54.     for (int i=0; i < u; i++){
  55.         if (scan[i].price > 200){
  56.             if (isupper(scan[i].model[0])){
  57.                 fwrite (&scan[i], sizeof (scan[i]), 1, fout);
  58.                 cout << scan[i].model << " " << scan[i].price << " " << scan[i]. x_size << " " << scan[i].y_size << " " << scan[i].optr << " " <<scan[i].grey << endl;
  59.             }
  60.         }
  61.     }
  62.     for (int i=0; i < u; i++){
  63.         if (scan[i].price > 200){
  64.             if (!(isupper(scan[i].model[0]))){
  65.                 fwrite (&scan[i], sizeof (scan[i]), 1, fout);
  66.                 cout << scan[i].model << " " << scan[i].price << " " << scan[i]. x_size << " " << scan[i].y_size << " " << scan[i].optr << " " <<scan[i].grey << endl;
  67.             }
  68.         }
  69.     }
  70.     fseek(fout, 0L, SEEK_SET);          //курсор в начало файла
  71.     fwrite (&k, sizeof (k), 1, fout);   //записывает переменную k размером 4 один раз в файл fout
  72.     fclose (fout);
  73. }
  74.  
  75. void Write_in_bin_file_structur (scan_info *scan, int u){ //запись в файл полной структуры
  76.     cout << "Структура" << endl;
  77.     FILE * fout1 = fopen ("File2.bin", "wb");
  78.     for (int i = 0; i < u; i++){
  79.         fwrite (&scan[i], sizeof (scan[i]), 1, fout1);
  80.         cout << scan[i].model << " " << scan[i].price << " " << scan[i]. x_size << " " << scan[i].y_size << " " << scan[i].optr << " " <<scan[i].grey << endl;
  81.     }
  82.     cout << endl;
  83.     fclose (fout1);
  84. }
  85.  
  86. void Display_binary_file(const char *filename) {
  87.     FILE *pFile = fopen(filename, "rb");
  88.     if (pFile == NULL) {
  89.         fputs("Ошибка чтения!", stderr);
  90.         exit(1);
  91.     }
  92.  
  93.     fseek(pFile, 0, SEEK_END);
  94.     long fSize = ftell(pFile);
  95.     rewind(pFile);
  96.  
  97.     char *buffer = (char*)malloc(sizeof(char) * fSize);
  98.     if (buffer == NULL) {
  99.         fputs("Ошибка выделения памяти!", stderr);
  100.         exit(1);
  101.     }
  102.  
  103.     size_t result = fread(buffer, 1, fSize, pFile);
  104.  
  105.     if (result != fSize) {
  106.         fputs("Ошибка чтения!", stderr);
  107.         exit(1);
  108.     }
  109.  
  110.     printf("\nСодержимое бинарного файла %s\n", filename);
  111.  
  112.     for (int i = 0; i < fSize * sizeof(char); ++i) {
  113.         printf("%02x", buffer[i]);
  114.     }
  115.  
  116.     printf("\n");
  117.  
  118.     fclose(pFile);
  119.     free(buffer);
  120. }
  121.  
  122. void Output_on_display(scan_info *scan, int u){
  123.     int selectNum, NumScan;
  124.     selectNum = 0;
  125.     while ((selectNum < 1) || (selectNum > 2)){
  126.     cout<<"Введите 1 для вывода всех записей или 2 для вывода записи по её номеру: ";
  127.     cin>>selectNum;
  128.     }
  129.     switch(selectNum){
  130.       case 1:
  131.         for(int i=0; i< u; i++)
  132.         cout << "Наименование модели: " << scan[i].model
  133.         << "\n Цена: " << scan[i].price
  134.         << "\n Горизонтальный размер области сканирования: " << scan[i].x_size
  135.         << "\n Вертикальный размер области сканирования: " << scan[i].y_size
  136.         << "\n Оптическое разрешение: " << scan[i].optr
  137.         << "\n Число градаций серого: " << scan[i].grey << endl << endl;
  138.         break;
  139.       case 2:
  140.         cout << "Введите номер записи сканера, от 1 до " << u << ": ";
  141.         cin >> NumScan;
  142.         if (((NumScan-1) < u) && ((NumScan-1) > -1)){
  143.             NumScan -= 1;
  144.             cout << "\n Наименование модели: " << scan[NumScan].model
  145.             << "\n Цена: " << scan[NumScan].price
  146.             << "\n Горизонтальный размер области сканирования: " << scan[NumScan].x_size
  147.             << "\n Вертикальный размер области сканирования: " << scan[NumScan].y_size
  148.             << "\n Оптическое разрешение: " << scan[NumScan].optr
  149.             << "\n Число градаций серого: " << scan[NumScan].grey << endl << endl;
  150.         }
  151.         break;
  152.     default:
  153.     cout << "Вы ввели неверное значение!\n";
  154.     }
  155. }
  156.  
  157. int main(){
  158.     setlocale(LC_ALL, "Russian");
  159.     int u = 0;
  160.     while (u < 1){
  161.         cout << "Введите кол-во структур для добавления: ";
  162.         cin >> u;
  163.     }
  164.     scan_info * scan = (scan_info*)malloc(u * sizeof(scan_info));
  165.     scan_info1 (scan, u);
  166.     Write_in_bin_file_structur  (scan, u);
  167.     Write_in_bin_file (scan, u);
  168.     Display_binary_file("File1.bin");
  169.     Display_binary_file("File2.bin");
  170.     Output_on_display (scan, u);
  171.     free(scan);
  172.     system("pause");
  173.     return 0;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement