close

Вход

Забыли?

вход по аккаунту

?

Отчет по практике8(1)

код для вставкиСкачать
 ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
"МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ" Кафедра вычислительных машин, комплексов, систем и сетей.
Отчёт защищен с оценкой (подпись преподавателя, дата)
ОТЧЕТ
по результатам выполнения вычислительной практики по дисциплине "Программирование"
Выполнил студент группы ЭВМ 1-1
(Ф.И.О., № зачетной книжки)
(подпись, дата)
МОСКВА - 2012
Аннотация.
Цель:
Основной целью вычислительной практики студентов является закрепление теоретических знаний, умений и практических навыков программирования на ПЭВМ, на языке Си++.
В соответствии с "Рабочей программой" вычислительная практика включает задания по следующим темам:
1. Удаление данных из бинарного файла;
2. Сортировка структурированных данных;
3. Разработка многомодульной программы, включающей библиотеку пользовательских функций и меню для управления программой;
Результат:
Результатом вычислительной практики является: закрепление навыков работы с файлами в различных режимах, изучение основ и приобретение умений по нечисловой обработке данных, закрепление навыков работы с много файловыми программами, освоение методов условной компиляции, приобретение навыков разработки меню для выбора варианта обработки данных, приобретение умений работы с динамическими массивами структурного типа.
Содержание
1. Практическое задание
1.1. Цель 1.2. Техническое задание (конкретный вариант) 1.3. Структура программы 1.4. Таблица глобальных переменных 1.5. Схемы алгоритмов каждой функции программы 2. Список литературы Исходные тексты программы Содержание файла с данными для тестирования Содержание файла с результатами тестирования
1. Практическое задание.
1.1. Цель.
1) Целью занятий является освоение методов работы с бинарными и текстовыми файлами,
освоение алгоритма удаления данных из бинарного файла.
2) Освоение методов внутренней сортировки.
3) Освоение приемов отладки программ, выполняющих сортировку данных
4) Приобретение навыков разработки многомодульных программ.
5) Освоение методов разработки программы, управление которыми осуществляется с помощью меню.
6) Освоение препроцессорных средств управления ходом компиляции программы.
1.2. Техническое задание.
1) Разработать схемы алгоритмов, структуру и текст программы для обработки структурных данных текстового и бинарного файлов заданного варианта с использованием функций создания файлов и удаления ряда структур из файлов.
Схемы алгоритмов должны быть разработаны для каждой функции.
Тестирование функции удаления проводить с помощью файла данных для удаления, при этом должны быть либо удалены отмеченные записи из бинарного файла, либо выведены правильные ответы.
2) Разработать схему алгоритма, структуру и текст программы для обработки данных бинарного файла с использованием функции сортировки структурированных данных файла заданным методом.
3) Разработать многомодульную программу, включающую:
- заголовочный файл, с объявлением внешних переменных и прототипов используемых пользовательских функций;
- библиотеку функций пользователя - файл с определениями функций;
- файл с главной функцией, содержащий систему меню для выбора вариантов обработки данных.
Обработать структурные данные, записи которых содержатся в бинарном и текстовом файлах.
Разработать структуру программы и схемы алгоритмов каждой функции, включая главную.
1.3. Структура программы.
1.4. Таблица глобальных переменных.
Таблица 1 - Глобальные переменные
НазваниеТипНазначениеfin,inifstreamвходной файловый потокfout,outofstreamвыходной файловый потокiofstreamдвунаправленный файловый потокzintразмер структуры в байтахsh[]charмассив указателей для хранения строк шапки таблицыstStudпеременная структурного типа для чтения и записи Таблица 2 - Состав структуры "stud"
fioМассив символов - имя студентаnzМассив символов - номер зачеткиgrМассив символов - номер группыstipЦелое число- размер стипендииbalЦелое число - средний балл
Приложение А
prakt1.cpp
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <fstream.h>
#include <string.h>
struct ekskurs
{
ekskurs *next;
char name[15];
char place[13];
double time;
double price;
char transport[80];
} eks;
fstream finout;
ifstream fin;
ofstream fout;
int stick;
int z=sizeof(ekskurs);
char *sh[]={
"Экскурсии",
"╔══════════════╦════════════╦═══════════════════╦═══════════╦═══════════╗",
"║ Наименование ║ Страна ║ Продолжительность ║ Стоимость ║ Транспорт ║",
"║ ║ ║ ║ ║ ║",
"╠══════════════╬════════════╬═══════════════════╬═══════════╬═══════════╣",
"╚══════════════╩════════════╩═══════════════════╩═══════════╩═══════════╝"
};
void filtr(char *a), psh(ostream&), sozdat(), dat2bin(),
udal(), cht(), bin2dat(), bin2res();
ostream &operator<< (ostream&, ekskurs &);
istream &operator>> (istream&, ekskurs &);
void main()
{
clrscr();
// sozdat();
dat2bin();
udal();
bin2dat();
bin2res();
}
void filtr(char *a)
{
int i, l=strlen(a),j;
for (i=0; i<l;i++)
if (a[i]!=' '&&a[i]!='\t')
for (j=l-1;j>=i;j--)
if(a[j]!=' '&&a[j]!='\n')
{
for (l=i; l<=j; l++)
a[l-i]=a[l];
a[l-i]='\0';
goto m;
}
a[0]=0;
m:;
}
void psh(ostream& out)
{
for (int i=0; i<5; i++) out << sh[i]<<endl;
}
void sozdat(char *filename)
{
stick=0;
fout.open(filename);
if (!fout)
{
cout <<endl<< "Ошибка открытия файла данных для записи";
exit(0);
}
int done=0;
char c;
do
{
clrscr();
psh(cout);
cin >> eks;
fout << eks;
cout << "Будем еще вводить? (Y\y - да, остальное - нет)";
c=getch();
if(c!='Y'&&c!='y') done=1;
} while (!done);
fout.close();
}
void dat2bin()
{
fin.open("prakt1.dat");
if (!fin)
{
cout <<endl<< "Ошибка открытия файла данных для чтения";
exit(1);
}
fout.open("prakt1.bin", ios::binary);
if (!fout)
{
cout <<endl<< "Ошибка открытия бинарного файла для записи";
exit(2);
}
while (fin.peek()!=EOF)
{
fin >> eks;
fout.write((char*)&eks,z);
}
fin.close();
fout.close();
}
void udal()
{
remove ("prakt1.res");
bin2res();
finout.open("prakt1.bin", ios::in|ios::out|ios::binary);
if (!finout)
{
cout <<endl<< "Ошибка открытия бинарного файла для чтения\записи";
exit(3);
}
fin.open("prakt1.del");
if (!fin)
{
cout <<endl<< "Ошибка открытия файла с данными удаления для чтения";
exit(4);
}
fout.open("prakt1.res", ios::app);
if (!fout)
{
cout << "Ошибка открытия файла результатов"; exit(5);
}
char *todel=new char[80];
int found_to_del;
while (fin.peek()!=EOF)
{
fin.getline(todel,80);
filtr(todel);
if (!strcmp(todel, "")) fout << "Нет записи для удаления\n\n";
else
{
fout << "Ищем данные с полем \"Страна\" = \"" << todel << "\"\n";
found_to_del=0;
while (finout.peek()!=EOF)
{
finout.read ((char*)&eks, z);
if (!strcmp(eks.place, todel))
{
fout << eks;
strcpy(eks.place,"DELETED");
finout.seekp(-z, ios::cur);
finout.write((char*)&eks,z);
found_to_del++;
}
}
if (!found_to_del) fout << "Нет совпадений\n\n";
else fout << "Удалено записей: " << found_to_del << "\n\n";
finout.seekp(0);
}
}
fin.close();
fout.close();
ekskurs *s=0;
ekskurs *stnew;
while (finout.peek()!=EOF)
{
finout.read((char*)&eks,z);
eks.next=0;
if (strcmp(eks.place,"DELETED"))
{
stnew = new (ekskurs);
*stnew = eks;
ekskurs * p, * q ;
p=s; q=0;
while (p)
{ q=p ; p=p->next ; };
if (q) q->next= stnew ;
else s = stnew;
}
}
finout.close();
fout.open("prakt1.bin", ios::binary);
if (!fout)
{
cout << "Ошибка открытия временного бинарного файла"; exit(7);
}
ekskurs * p ;
while (s)
{
p=s;
s=s->next;
eks=*p;
fout.write((char*)&eks,z);
delete p;
}
fout.close();
}
void bin2dat()
{
stick=0;
int count=0;
fin.open("prakt1.bin",ios::binary);
if (!fin)
{
cout <<endl<< "Ошибка открытия бинарного файла для чтения";
exit(5);
}
fout.open("prakt1.dat");
if (!fout)
{
cout <<endl<< "Ошибка открытия файла данных для записи";
exit(6);
}
while (fin.peek()!=EOF)
{
fin.read((char*)&eks,z) ;
fout << eks;
count++;
}
fin.close();
fout.close();
}
void bin2res()
{
stick=1;
int count=0;
fin.open("prakt1.bin",ios::binary);
if (!fin)
{
cout <<endl<< "Ошибка открытия бинарного файла для чтения";
exit(5);
}
fout.open("prakt1.res", ios::app);
if (!fout)
{
cout <<endl<< "Ошибка открытия файла данных для записи";
exit(6);
}
psh(fout);
while (fin.peek()!=EOF)
{
fin.read((char*)&eks,z) ;
fout << eks;
count++;
}
fout << sh[5] << "\nВсего "<<count<<" записей" <<"\n\n";
fin.close();
fout.close();
}
ostream &operator<< (ostream&out, ekskurs &ek)
{
char symb=' ';
if (stick) symb='║';
out<< setiosflags(ios::left) << symb <<setw(14) << ek.name << symb
<<setw(12)<<ek.place << symb << setw(19)<<ek.time<<symb<< setw(11)
<<ek.price<<symb<<setw(11)<<ek.transport<<symb<<endl;
return out;
}
istream &operator>> (istream&in, ekskurs &ek)
{
in.getline(ek.name, 16); filtr(ek.name);
in.getline(ek.place,14); filtr(ek.place);
in >> ek.time >> ek.price;
in.getline(ek.transport,80); filtr(ek.transport);
return in;
}
prakt1.dat
Биг Бэн Англия 10 200 Б-737 Эльф. башня Франция 13 123 A-320 Пентагон США 23 4000 Б-747 Мин. Воды Россия 6 400 Икарус Бол. Канйон США 30 6000 Б-767 Припять Украина 8 1313 Икарус Колизей Италия 4 800 Б-240 prakt1.del
Англия
США
Франция
Замбия
prakt1.res
Данные до удаления
Экскурсии
╔══════════════╦════════════╦═══════════════════╦═══════════╦═══════════╗
║ Наименование ║ Страна ║ Продолжительность ║ Стоимость ║ Транспорт ║
║ ║ ║ ║ ║ ║
╠══════════════╬════════════╬═══════════════════╬═══════════╬═══════════╣
║Биг Бэн ║Англия ║10 ║200 ║Б-737 ║
║Эльф. башня ║Франция ║13 ║123 ║A-320 ║
║Пентагон ║США ║23 ║4000 ║Б-747 ║
║Мин. Воды ║Россия ║6 ║400 ║Икарус ║
║Бол. Канйон ║США ║30 ║6000 ║Б-767 ║
║Припять ║Украина ║8 ║1313 ║Икарус ║
║Колизей ║Италия ║4 ║800 ║Б-240 ║
╚══════════════╩════════════╩═══════════════════╩═══════════╩═══════════╝
Всего 7 записей
Ищем данные с полем "Страна" = "Англия"
║Биг Бэн ║Англия ║10 ║200 ║Б-737 ║
Удалено записей: 1
Нет записи для удаления
Ищем данные с полем "Страна" = "США"
║Пентагон ║США ║23 ║4000 ║Б-747 ║
║Бол. Канйон ║США ║30 ║6000 ║Б-767 ║
Удалено записей: 2
Ищем данные с полем "Страна" = "Франция"
║Эльф. башня ║Франция ║13 ║123 ║A-320 ║
Удалено записей: 1
Ищем данные с полем "Страна" = "Замбия"
Нет совпадений
Данные после удаления
Экскурсии
╔══════════════╦════════════╦═══════════════════╦═══════════╦═══════════╗
║ Наименование ║ Страна ║ Продолжительность ║ Стоимость ║ Транспорт ║
║ ║ ║ ║ ║ ║
╠══════════════╬════════════╬═══════════════════╬═══════════╬═══════════╣
║Мин. Воды ║Россия ║6 ║400 ║Икарус ║
║Припять ║Украина ║8 ║1313 ║Икарус ║
║Колизей ║Италия ║4 ║800 ║A-240 ║
╚══════════════╩════════════╩═══════════════════╩═══════════╩═══════════╝
Всего 3 записей
Документ
Категория
Без категории
Просмотров
10
Размер файла
200 Кб
Теги
практике8, отчет, практика
1/--страниц
Пожаловаться на содержимое документа