Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 40; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.255.58 (0.007 с.) |