Описание логической структуры

Московский Авиационный Институт

(государственный технический университет)
Факультет прикладной математики


Кафедра вычислительной математики и программирования

Курсовой проект

По теме

«Обработка последовательной файловой структуры»

Семестр

Задание VI


Студентка: Смирнова С.И.

Группа: 08-105, 12 вар.

Руководитель: Титов В.К.

Оценка

Дата

Москва

2012 год

Постановка задачи

Разработать последовательную структуру данных для представления простейшей базы данных на файлах СП Си в соответствие с заданным вариантом.

Составить программу генерацию нетекстового файла заданной структуры, содержащего представительный набор записей (15-20).

Распечатать содержимое генерируемого файла в виде таблицы и выполнить над ним заданное действие для 2-3 значений параметров запроса p и распечатать результат.

Действие по выборе данных из файла оформить с параметрами запроса, вводимыми из стандартного входного текстового файла, или получаемых из стандартной строки ввода UNIX. Получение параметров из командной строки производится с помощью стандартных библиотечных функций argc и argv.

Число наборов текстов должно быть не менее трех.

Задание(34 вариант):

Найти пассажиров, имеющих более p вещей.

Общий метод решения

1) Создаем тестовые файлы. Содержимое и структура файла включает:

а) фамилию, инициалы пассажира

б) количество вещей

в) общий вес вещей

г) пункт назначения

д)время вылета

е)наличие пересадки
ж)сведения о детях

Используем команды обработки текстовых файлов OC UNIX и переадресацию ввода-вывода.

2) Составляем программу генерацию внешнего нетекстового файла.

Перенапрявляем всё содержимое нетекстового представления в файл out.dat. Туда происходит постоянная дозапись. Следовательно, необходимо при повторной работе с ним в дальнейшем удалять его.

3) Распечатываем содержимое файла в виде таблицы.

4) При помощи функций printf(…) и scanf(…) задаем значение параметра p.

5) Сравниваем при помощи условия if{…} значение параметра p и число вещей каждого из пассажиров. Если число вещей данного пассажира больше p, то выводим всю информацию об этом пассажире (имя, кол-во вещей, вес вещей и т.д.)

Общие сведения о программе

Операционная система: Ubuntu 10.04 LTS Lucid Lynx

Язык программирования: C++

Полное имя программы: /home/ kp6

Компиляция и запуск программы:

g++ 6kp.cpp –o 6kp.exe

./ 6kp.exe list1

Функциональное назначение

Данная программа, преобразующая текстовой файл в нетекстовой, генерирующая внешний нетекстовой файл, распечатывающая таблицу, доказывает, что представление в нетекстовом виде очень удобна. Во-первых, в памяти компьютера хранить бинарные коды намного проще, памяти меньше занимается. Во-вторых, всевозможные операции производить с файлом в нетекстовом представлении быстрее и удобнее. К тому же нетекстовой файл хранится в оперативной памяти в таком же изначальном виде, в каком был создан файл. Таким образом, нетекстовое представление обладает большими преимуществами.

Описание логической структуры

1. Структура struct {….}; в которую мы помещаем информацию о студенте:

Имя Тип Назначение
name char Массив для хранения имени
numberofthings int Кол-во вещей
weightofthing float Нецелое значение веса вещей
destination char Массив для хранения пункта назначения
time float Время вылета(час.мин)
transplantation char Массив для хранения наличия пересадки
children char Массив для хранения сведений о детях

1)файл generation.c:

Прочитывает файл value.h и работает на основе этих данных:

Используемые функции:

void write_student(FILE* out, student s) – функция, преобразующая данные из файла (08-105, 08-106, 08-108) в нетекстовое представление текстового файла. Направляет запись в файл out.

int information_about_student(FILE* list, student* s) – функция, возвращающая указатели на фамилию, имя, отчество, пол, номер группы, оценки по предмету.

int main() – функция, печатающая содержимое файла в виде таблицы.

2)файл rabota.c:

int TR(student s) – функция, подсчитающая количество студентов, имеющих больше двух трое. Создаем счетчик q, увеличиваем его на 1, если находим студента, имеющего больше двух троек.

int read_student(FILE* list, student* s) - функция, читающая данные, записанные в нетекстовом представлении.

int main(int a, char b*[c]) -функция, печатающая таблицу. Если мы направили туда все группы, то они сольются в одну для удобной сортировки. Также тут выполняется печать второй таблицы, где представлены студенты, имеющие больше двух троек.

Входные данные

List 1:

Петров_Н.К. 6 220 Санкт-Петербург 12.50 есть нет

Березина_С.Т. 5 200 Мурманск 16.30 нет нет

Красавина_Е.И. 3 185 Киев 14.27 есть нет

Кириенко_К.В. 7 278 Саратов 15.40 есть есть

Самсонов_К.М. 5 200 Владимир 13.40 нет есть

Морозенко_Р.П. 4 190 Ростов 19.50 нет нет

Кузнецов_Г.Д. 7 270 Ворнеж 20.40 есть нет

Голубев_Н.В 3 9 250 Иваново 20.08 нет нет

Виноградова_С.М. 1 90 Иркутск 12.30 есть нет

Богданов_В.И. 2 135 Тула 05.30 нет есть

List 2:

Воробьев_Н.Д. 3 145 Калуга 09.48 нет нет

Федорова_С.Р. 4 170 Смоленск 10.45 есть нет

Михайлов_М.И. 5 167 Белгоград 07.26 нет есть

Беляев_П.Р. 1 89 Ставрополь 08.40 есть есть

Тарасова_И.Т. 2 78 Липецк 13.50 нет есть

Белов_П.Н. 4 146 Ярославль 15.40 есть нет

Комарова_Н.Р. 6 127 Брянск 17.35 нет нет

Орлова_П.Л. 5 176 Тамбов 18.35 есть есть

Киселев_Н.В. 8 198 Рязань 17.29 нет есть

Макаров_Г.Д. 9 200 Омск 19.40 есть есть

List 3:

Андреев_П.Д. 3 156 Краснодар 17.38 есть нет

Марков_Р.Т. 4 163 Москва 21.48 нет нет

Большаков_В.С. 5 153 Архангельск 22.58 есть есть

Суханова_М.Т. 2 143 Екатеринбург 17.36 нет есть

Миронов_В.Г. 6 148 Самара 14.38 есть нет

Александров_С.М. 9 207 Уфа 22.44 нет нет

Коновалов_Г.Р. 10 237 Волгоград 23.56 есть есть

Шестаков_Г.Л. 7 145 Казань 14.48 нет есть

Казаков_К.Т. 6 164 Владивосток 23.45 нет нет

Ефимов_Л.Г. 5 193 Казань 14.37 есть есть

Текст программы

#include<stdio.h>

#include<string.h>

int main(int argc, char*argv[])

{

FILE *f,*g;

struct

{ char name[30];

int numberofthings;

float weightofthing;

char destination[30];

float time;

char transplantation[10];

char children[10];

} s;

int l,i,j=0,k=0; int p;

if((f=fopen(argv[1],"r"))==NULL)

printf("Can't open input file\n");

if((g=fopen("out.dat","w+"))==NULL)

printf("Can't open output file\n");

l=sizeof(s); // printf("\nl=%d\n",l);

printf(" Список всех пассажиров \n");

printf("______________________________________________\n");

printf("| Имя инициалы | Кол-во вещей | Вес вещей | Пункт наз-ия |Время вылета|Наличие пересадки |Наличие детей|\n");

printf("|_______________|_______________|_______________|_______________|____________|__________________|_____________|\n");

while (!feof(f))

{

fscanf(f,"%s", s.name);

fscanf(f,"%d", &s.numberofthings);

fscanf(f,"%f", &s.weightofthing);

fscanf(f,"%s", s.destination);

fscanf(f,"%f", &s.time);

fscanf(f,"%s", s.transplantation);

fscanf(f,"%s", s.children);

if(feof(f)) break;

printf("|%-15s\t",s.name);

printf("|\t %d \t",s.numberofthings);

printf("| %.1f кг \t",s.weightofthing);

printf("|%-15s \t",s.destination);

printf("| %.2f\t ",s.time);

printf("| %-5s\t",s.transplantation);

printf("| %-6s\t |\n",s.children);

printf("|_______________|_______________|_______________|_______________|____________|__________________|_____________|\n");

fwrite(&s,l,1,g);

k++;

}

printf("k=%d\n",k);

rewind(g);

printf("Введите значение p:\n");

scanf("%d",&p);

printf("\n Список пассажиров, которые имеют больше,чем %d вещей\n",p);

printf("______________________________________________\n");

printf("| Имя инициалы | Кол-во вещей | Вес вещей | Пункт наз-ия |Время вылета|Наличие пересадки |Наличие детей|\n");

printf("|_______________|_______________|_______________|_______________|____________|__________________|_____________|\n");

for(i=0; i<k; i++)

{

fread(&s,l,1,g);

//printf("%s",s.name); printf("%d",s.numberofthings);

if(s.numberofthings > p)

{

printf("|%-15s\t",s.name);

printf("|\t %d \t",s.numberofthings);

printf("| %.1f кг \t",s.weightofthing);

printf("|%-15s \t",s.destination);

printf("| %.2f\t ",s.time);

printf("| %-5s\t",s.transplantation);

printf("| %-6s\t |\n",s.children);

printf("|_______________|_______________|_______________|_______________|____________|__________________|_____________|\n");

}

}

if(i==0){

printf("Нет пассажиров, которые имеют больше %d вещей\n",p);}

fclose(f);

fclose(g);

}

Дневник отладки

Лаб Дата Вре-мя Событие Действие по исправлению Примечание
1. лаб. 29.04 16.00   Сведения о пассажирах выдавались в виде списка, а не в виде таблицы.    
дом 02.05 18.30 Про if(i=0)    

Выводы по задаче

В данной курсовой работе я научилась составлять программу на языке Си , преобразцющую файл в нетекстовой. Осущиствила работу с этим нетекстовым файлом, нашла количество, студентов, получивших больше двух троек. Фактически была осуществлена небольшая сортировка таблицы. Оказалось очень удобным представлять файл в нетекстовом виде. Нетекстовой файл хранится в оперативной памяти в таком же изначальном виде, в каком был создан файл. Таким образом, нетекстовое представление обладает большими преимуществами.

Наши рекомендации