Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Краткие теоретические и учебно-методические материалыСодержание книги
Поиск на нашем сайте По теме лабораторной работы Для осуществления операций с файлами предусмотрено три класса: ifstream, ofstream и fstream. Эти классы являются производными, соответственно, от классов istream, ostream iostream. Поскольку эти последние классы, в свою очередь, являются производными от класса ios, классы файловых потоков наследуют все функциональные возможности своих родителей (перегруженные операции << и >> для встроенных типов, функции и флаги форматирования, манипуляторы и пр.). Для реализации файлового ввода-вывода нужно включить в программу заголовочный файл fstream.h. Существует небольшое отличие между использованием предопределенных и файловых потоков. Файловый поток должен быть связан с файлом прежде, чем его можно будет использовать. С другой стороны, предопределенные потоки могут использоваться сразу после запуска программы, даже в конструкторах статических классов, которые выполняются даже раньше вызова функции main(). Можно позиционировать файловый поток в произвольную позицию в файле, в то время как для предопределенных потоков это обычно не имеет смысла. Для создания файлового потока эти классы предусматривают следующие формы конструктора: создать поток, не связывая его с файлом: ifstream(); ofstream(); fstream(); создать поток, открыть файл и связать поток с файлом: ifstream(const char *name, ios::openmode mode = ios::in); ofstream(const char* name, ios::openmode mode=ios::out | ios::trunc); fstream(const char * name, ios::openmode mode = ios::in | ios::out); Чтобы открыть файл для ввода или вывода, можно использовать вторую форму нужного конструктора fstream fs("FileName.dat"); или вначале создать поток с помощью первой формы конструктора, а затем открыть файл и связать поток с открытым файлом, вызвав функцию-член open(). Эта функция определена в каждом из классов потокового ввода-вывода и имеет следующие прототипы: void ifstream::open(const char *name, ios::openmode mode = ios::in); void ofstream::open (const char * name, ios::openmode mode = ios::out | ios::trunc); void fstream::open (const char * name, ios::openmode mode = ios::in | ios::out); Режимы открытия файла представляют собой битовые маски, поэтому можно задавать два или более режима, объединяя их побитовой операцией ИЛИ. В следующем фрагменте кода файл открывается для вывода с помощью функции open(): ofstream ofs; ofs.open("FileName.dat"); Обратим внимание, что по умолчанию режим открытия файла соответствует типу файлового потока. У потока ввода или вывода флаг режима всегда установлен неявно. Например, для потока вывода в режиме добавления файла можно вместо оператора ofstream ofs("FName.txt", ios::out | ios::app); написать ofstream ofs("FName.txt", ios::app); Между режимами открытия файла ios::ate и ios::app имеется небольшая разница. Если файл открывается в режиме добавления, весь вывод в файл будет осуществляться в позицию, начинающуюся с текущего конца файла, безотносительно к операциям позиционирования в файле. В режиме открытия ios::ate (от английского "at end") можно изменить позицию вывода в файл и осуществлять запись, начиная с нее. Для потоков вывода режим открытия эквивалентен ios::out | ios::trunc, то есть можно опустить режим усечения файла. Однако для потоков ввода-вывода его нужно указывать явно. Файлы, которые открываются для вывода, создаются, если они еще не существуют. Если открытие файла завершилось неудачей, объект, соответствующий потоку, будет возвращать 0: if (!ofs){ cout << "Файл не открыт\n";} Проверить успешность открытия файла можно также с помощью функции-члена is_open(), имеющей следующий прототип: int is_open() const; Функция возвращает 1, если поток удалось связать с открытым файлом. Например, if (!ofs.is_open()){ cout << "Файл не открыт\n"; return; } Если при открытии файла не указан режим ios::binary, файл открывается в текстовом режиме и после того, как файл успешно открыт, для выполнения операций ввода-вывода можно использовать операторы извлечения и вставки в поток. Для проверки, достигнут ли конец файла, можно использовать функцию ios::eof(), имеющую прототип int eof(); Завершив операции ввода-вывода, необходимо закрыть файл, вызвав функцию-член close() с прототипом void close(): ofs.close(); Закрытие файла происходит автоматически при выходе потокового объекта из области существования, когда вызывается деструктор потока.
Пример Функции работы с файлами
Рисунок 1 – Экранная форма добавление записи
Рисунок 2– Экранная форма редактирование записи void Table::fail() {
fstream f; p = new Spicok[n]; f.open("input.txt"); for(int i=0; i<n;i++) { f>>p[i].ID; f>>p[i].Name; f>>p[i].adress; f>>p[i].tip; f>>p[i].spec; f>>p[i].ks; } f.close(); } void Table::tabl(list **begin) {chet1=0; list *print1 = *begin; while(print1!= NULL) { chet1 ++; print1->spic.ID = chet1; print1 = print1->next; }
list *print = *begin; cout<<endl; cout<<"Таблица: "<<endl; cout<<"-------------------------------------------------------------------------------"<<endl; cout<<"# |Название| Вид деятельности | Адрес| Год создания |Колич.Сотр "<<endl; cout<<"-------------------------------------------------------------------------------"<<endl<<" "; while(print!= NULL) { cout<<print->spic.ID; std::cout.width(1); cout<< "|"; std::cout.width(6); cout<<print->spic.Name; std::cout.width(3); cout<< "|"; std::cout.width(20); cout<<print->spic.adress; std::cout.width(2); cout<< "|"; std::cout.width(20); cout<<print->spic.tip; std::cout.width(5); cout<< "|"; std::cout.width(5); cout<<print->spic.spec; std::cout.width(5); cout<< "|"; std::cout.width(2); cout<<print->spic.ks; std::cout.width(2); cout<<endl; print = print->next;
} cout<<endl; } int Table::Stroka() { Spicok p; fstream f; f.open("input.txt"); while (true) { string str; getline(f,str); if(!f.eof()) n++; else break; } return n; } void Table::Init(list **begin) { *begin = new list; (*begin)->spic.Name = p->ID; (*begin)->spic.Name = p->Name; (*begin)->spic.adress = p->adress; (*begin)->spic.tip = p->tip; (*begin)->spic.spec = p->spec; (*begin)->spic.ks = p->ks; (*begin)->next= NULL; list *end= *begin; for(int i= 1; i<n; i++) { end->next= new list; end = end->next; end->spic.ID = p[i].ID; end->spic.Name = p[i].Name; end->spic.adress = p[i].adress; end->spic.tip = p[i].tip; end->spic.spec = p[i].spec; end->spic.ks = p[i].ks; end->next = NULL; } } void Table::Add(list **begin) { int nomer(0); cout<<"Добавить в конец таблице или в начало? "<<endl; cout<<"1. Добавить в начало таблице"<<endl; cout<<"2. Добавить в конец таблице "<<endl; cin>>nomer; string ID1, Name1, adress2, tip2, spec2; int ks2(20000); cout<<"Добавить запись в таблицу "<<endl; cout<<endl; cout<<"Название Банка: "<<endl; cin>>Name1; cout<<"Вид деятельности Банка: "<<endl; cin>>adress2; cout<<"Адрес: "<<endl; cin>>tip2; cout<<"Количество Колич.Сотр: "<<endl; cin>>ks2; cout<<"Год создания: "<<endl; cin>>spec2; list *head = new list; head->spic.Name = ID1; head->spic.Name = Name1; head->spic.adress = adress2; head->spic.tip = tip2; head->spic.spec = spec2; head->spic.ks = ks2;
if(nomer == 2) { head->next = NULL; list *add = *begin; while(add!= NULL) { if(add->next == NULL) {add->next = head; return;} add= add->next; } } else if(nomer == 1) { head->next = *begin; *begin = head; } } void Table::delite(list **begin) {
int id2; list *b = *begin; cout<<endl; metka.tabl(&b); cout<<"Напишите ID Банка для удаления: "<<endl; cin>>id2; list *t = *begin; if(t->spic.ID == id2) { *begin = t->next; delete t; return; } list *p = t->next; while (p) {
if(p->spic.ID == id2) { t->next = p->next; delete p; return; } t= p; p = p->next; } } void Table::redaktir(list**begin) { string ID1, Name1, adress2, tip2, spec2; int ks2(20000); int nomer= 1; int id2; list *b = *begin; cout<<endl; metka.tabl(&b); cout<<"Напишите ID Банка для его редактирования: "<<endl; cin>>id2; list *t = *begin; if(t->spic.ID == id2) { *begin = t->next; delete t; return; } list *p = t->next; while (p) {if(p->spic.ID == id2) { t->next = p->next; delete p;
cout<<"Добавить запись в таблицу "<<endl; cout<<endl; cout<<"Название Банка: "<<endl; cin>>Name1; cout<<"Вид деятельности Банка: "<<endl; cin>>adress2; cout<<"Адрес: "<<endl; cin>>tip2; cout<<"Количество Колич.Сотр: "<<endl; cin>>ks2; cout<<"Год создания: "<<endl; cin>>spec2; list *head = new list; head->spic.Name = ID1; head->spic.Name = Name1; head->spic.adress = adress2; head->spic.tip = tip2; head->spic.spec = spec2; head->spic.ks = ks2;
if(nomer == 1) { head->next = NULL; list *add = *begin; while(add!= NULL) { if(add->next == NULL) {add->next = head; return;} add= add->next; } } } t= p; p = p->next; } } Задания для лабораторной работы: Завершить написание программного кода для классов UML. Контрольные вопросы 1.Как проверить успешность открытия файла? 2.Как создать поток? 3.Какой встроенный класс нужно вызвать для файлового ввода-вывода? 4.Что делает команла ofs.open?
Лабораторная работа №13-14 «Генерация программного кода диаграммы состояний на языке программирования Си ++ » Цель работы: получение навыков при генерации кода выбранной диаграммы Образовательные результаты, заявленные во ФГОС третьего поколения: Студент должен уметь: - владеть основными методологиями процессов разработки программного обеспечения; - использовать методы для получения кода с заданной функциональностью и степенью качества.
знать: -модели процесса разработки программного обеспечения; -основные принципы процесса разработки программного обеспечения; -основные подходы к интегрированию программных модулей; -основные методы и средства эффективной разработки;
|
||
|
Последнее изменение этой страницы: 2021-12-07; просмотров: 73; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.174 (0.007 с.) |