Файловая операция ввода/вывода Stream-библиотека C++
Download 24.16 Kb.
|
ОГЛАВЛЕНИЕ
- Bu sahifa navigatsiya:
- ФАЙЛОВЫЙ ВВОД/ВЫВОД С ПРЯМЫМ ДОСТУПОМ
- ПОИСК ФУНКЦИОНАЛЬНОГО ЭЛЕМЕНТА
- ОПИСАНИЕ 10-МЕСЯЧНОЙ ЛАБОРАТОРНОЙ РАБОТЫ
ФУНКЦИЯ-ЭЛЕМЕНТ ЧТЕНИЕ
Прототип перегруженной функции-элемента гласил: ostream& read( char* buff, int num); ostream& read( unsigned char* buff, int num); ostream& read( unsigned char* buff, int num); Параметр buff — это указатель на буфер, который получает данные из входного потока. Параметр num указывает число считываемыхx из потока байт. Праймер 5. константа МАКС = 80; усиление чар [MAX+1]; внутр. лен; fпоток f; f.open ("CALC.DAT", ios::in | ios::binary); f.read ((unsigned char*) &len, sizeof(len)); f.read ((unsigned char*) buff, len); е. закрыть (); В этом примере учитывается информация, записанная в предыдущем примере. ФАЙЛОВЫЙ ВВОД/ВЫВОД С ПРЯМЫМ ДОСТУПОМ Файловые операции во вводе/вводе прямого доступа также используют потоковые функции — элементарные чтение и запись, представленные в предыдущем разделе. Stream-библиотека имеет ряд функций, позволяющих контроллеру отображать поток в любой желаемой позиции. Функция-элемент seekg - простая функция поиска. ПОИСК ФУНКЦИОНАЛЬНОГО ЭЛЕМЕНТА Прототип для перегруженной функции-компонента seekg: & seekg( длинная позиция); & seekg( длинное смещение, seek_dir dir); Параметр pos и первая версия определяют абсолютную позицию байта и потока. Во второй версии параметр offset определяет относительное смещение, и оно зависит от аргумента. Аргументы для последнего параметра: ios:: beg S начал файл ios:: cur Файл положения касательной ios:: конец файла консоли S Праймер 6. константа BLOCKSIZE = 80 char buff[BLOCK_SIZE] = "Привет, мир!"; f.open ("CALC.DAT", ios::in | ios::out | ios::binary); f.seekg (3 * BLOCK_SIZE); // продвинутся к блоку 4 f.read ((const unsigned char*)buff, BLOCK_SIZE); cout < buff < endl; закрыть(); ОПИСАНИЕ 10-МЕСЯЧНОЙ ЛАБОРАТОРНОЙ РАБОТЫ Задание: Дан файл, содержащий сведения или личную коллекцию книголюба. Каждая запись содержит поля - шифровальная книга, автор, имя, год издания, местоположение (номерная стойка, шкаф и т.п.). Напишите программу, просмотрите следующую информацию: - местоположения книги автора X названия Y; - список авторов З., находящихся в коллекции; - число книг издания XX года. Значения книг X, Y, Z и год издания вводятся по запросу с терминала. Листинг программного обеспечения: #include #include #include структурировать книги { идентификатор символа [ 100]; char автор[ 100 ]; заголовок символа [ 100 ]; инт доп; интервал n_closet; интервал n_полка; }; отменить add_book ( ) { книги буф; ofstream f("lab_10.dat ", ios:: app); символ с [ 100 ]; memset(&buf, 0,sizeof (книг)); cout<< "Посмотреть информацию о книге:"< cin.getline (s,sizeof(s)); cin.getline (s,sizeof(s)); strcpy(buf.id,s ); cout<<"\t автор : "; cin.getline (s,sizeof(s)); strcpy( buf.автор ,с); cout <<"\t имя: "; cin.getline (s,sizeof(s)); strcpy( buf.title ,s); cout<<"\т боже издание : "; cin>>buf.dop; cout<<"\t местоположение :\n\t\t № шкафа : "; cin>> buf.n _closet; cout<<"\t\tНомер полка : "; cin>> buf.n _полк; f.write ((char *)&buf,sizeof(books)); е. закрыть (); } аннулировать show_book ( ) { книги буф; если поток f("lab_10.dat"); char автор_х[100 ], заголовок_у[ 100]; cout<<" Введите Автор книга : "; cin.getline (author_x,sizeof(author_x)); cin.getline (author_x,sizeof(author_x)); cout<<" Введите название книга : "; cin.getline (title_y, sizeof (title_y)); для( ;;) { memset(&buf, 0,sizeof (книг)); f.read ((char *)&buf,sizeof(books)); если ( f.eof( ) ) перерыв; если((* buf.author ==*author_x) && (*buf.title==*title_y)) cout<<"\n Местоположение книги :\n\t № Шкафа : "<<буф.н_шкафа<<"\n\tНо полка : "<<буф.н_полки; } е. закрыть (); cout<<"\n\nНажмите любую клавишу, чтобы продолжить..."; получить( ); } пустота show_author ( ) { книги буф; char автор_z [ 100 ]; если поток f("lab_10.dat"); cout<<" Введите Автор книга : "; cin.getline (author_z,sizeof(author_z)); cin.getline (author_z,sizeof(author_z)); клрскр( ); cout<< "Список книг автора"< { memset(&buf, 0,sizeof (книг)); f.read ((char *)&buf,sizeof(books)); если( f.eof( )) перерыв; если(* buf.автор ==*автор_z) cout<<"\t"<< buf.title <<", "< е. закрыть (); cout<<"\nНажмите любую клавишу, чтобы продолжить..."; получить( ); } недействительным show_num ( ) { книги буф; int dop_xx ,k =0; если поток f("lab_10.dat"); cout<< "Введите год издания: "; cin >>доп _xx; клрскр( ); для( ;;) { memset(&buf, 0,sizeof (книг)); f.read ((char *)&buf,sizeof(books)); если( f.eof( )) перерыв; если(buf.dop==dop_xx) k++; } е. закрыть (); cout <<"Название книги "< получить( ); } недействительный основной (пустой) { # определить столбец 5 выбор между я ; char menu[col ][ 100]={"1. Коллекция книг и коллекция", "2. Позать местаположения книги", "3. Показать список авторов", "4. Позать число книг", "5. Выход "}; цвет текста( 10 ); делать { клрскр( ); for(i= 0;i цин>>выбор; клрскр( ); переключатель (выбор) { случай 1: добавить_книгу ( );перерыв; случай 2: show_book ( );перерыв; случай 3: show_author ( );перерыв; случай 4: show_num ( );перерыв; по умолчанию : ; } } в то время как ( выбор! = 5); } В программе описывается структура книги, содержащая поля - шифр книги, автор, название, год издания, местоположение (номер кабинета, номер полка). Управление программой происходит из меню. Процедура add_book ( ) открывает файл в режиме добавления, записывает клавиатурный пароль book, автора, имя, версию God и топологию. Затем записывает данные в файл. Процедура show_book ( ) открывает файл и выполняет поиск, записывает в консоль автора и книгу заголовков и производит поиск и файл. Если найти книгу по заданным условиям вывести на экран местоположение книги (номерной шкаф и номерная полка) . Процедура show_author ( ) записывает книгу автора на терминал, производит поиск коллекции, отображает список книг данного автора и отображает коллекцию. Процедура show_num ( ) подсчитывает число книг введенного года издания. Download 24.16 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling