Создание базы данных владельцев автомобилей
СОДЕРЖАНИЕ
1. ЗАДАНИЕ
. ОПИСАНИЕ ПРИМЕНЕНИЯ
.1. Запуск программы
.2. Входные данные
.3. Выходные данные
.4. Сообщения программы
. ОПИСАНИЕ ПРОГРАММЫ
.1. Метод решения задачи
.2. Структура программы
.3. Описание функций
.3.1. main -
главная функция
.3.2. fioponomer - вывод Ф.И.О. по номеру машины
.3.3. fioinomerpomarki - формирует вывод Ф.И.О. и номер автомобиля по марке
.3.4. kolmarok - формирует вывод количества автомобилей каждой марки
.3.5 vivodafamiliiinomerov
- вывод Ф.И.О. и номер машины по марке автомобиля
.3.6 alfavit - сортирует Ф.И.О. в алфавитном порядке
.3.7 chet - считает количество автомобилей
.3.8 vivodakolmarok -вывод количества автомобилей каждой
марки
ЛИТЕРАТУРА
Приложение 1. Текст программы
Приложение 2. Пример входного файла AVTO.txt
Приложение 3. Результаты тестирования программы
1. ЗАДАНИЕ
Дан файл, содержащий сведения о владельцах автомобилей. Каждая строка
файла содержит запись об одном пациенте. Структура записи файла:
фамилия и инициалы владельца;
марка автомобиля;
номер автомобиля.
Написать программу, которая печатает:
фамилию владельца автомобиля с заданным номером;
фамилии владельцев и номера автомобилей заданной марки (в алфавитном
порядке);
количество автомобилей каждой марки.
2. ОПИСАНИЕ ПРИМЕНЕНИЯ
2.1 Запуск программы
Запуск программы (файл RUSLANKU.c) можно выполнить из среды Turbo C 2.0 (или Borland C++ 3.1), либо из
командной строки MS DOS, введя patient.exe .
2.2 Входные данные
Входные данные программы находятся в файле “patient.txt”.
Число строк в файле - произвольное. Каждая строка содержит фамилию с инициалами
(20 символов), марку автомобиля(10 символов), номер автомобиля(6 символов).
Пример строки файла:
Анисимов Д.Г. марка номер
| 20 | 10 | 6 |
Пример входного файла приведен в приложении 2.
По запросу программы с клавиатуры необходимо ввести номер пункта меню
(см. раздел 2.3), номер автомобиля (заглавными буками), например:AA001A , марку автомобиля.
2.3 Выходные данные
Программа выводит на экран меню:
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
3-kolichestvo avtomobilei kajdoi marki
-vixod
При выборе пункта 1 на экран выводится сообщение:
vvedite ickomii nomer zaglavnimi bukvami(6 simvolov)
После ввода номера, например FP987P, выводится результат в виде:
№ Фамилия И.О. Год рожд. Диагноз
---------------------------------------------------------------------------
Hisameev F.P.
Если ввести номер, которого нет в файле, выводится сообщение:
mashini s ukazanimi vami nomerom
Если в файле вдруг оказалось два человека с заданным номером выведется
сооющение: V base nevernie dannie proverte basu
Примеры выходных данных для остальных пунктов меню см. в приложении 3.
2.4 Сообщения программы
Ниже приводится перечень возможных сообщений программы:
1. vvedite ickomii nomer zaglavnimi bukvami(6 simvolov)
2. Net mashini s ukazanimi vami nomerom
. V base nevernie dannie proverte basu
. vvedite iskomuu mashinu
. Net takoi mashini
. Net mashin
. Vvedite chislo v zavisimosti ot togo chto hotite
sdelatvi veli ne korrektnoe chislo poprobuite eche
3. ОПИСАНИЕ ПРОГРАММЫ
3.1 Метод решения задачи
Задачу можно разбить на семь отдельные подзадачи:
2. Поиск в файле записей, в которых марка автомобиля совпадает с
заданной маркой, направления на формирование алфавитного порядка(alfavit) и на вывод владельцев и номеров с
данной маркой(vivodafamiliiinomerov).
. Поочередный проход всех строк во входном файле записей,
направление этих данных на подсчет количества автомобилей(chet) и направление на вывод количества(vivodakolmarok).
. Выводит Ф.И.О. и номер автомобиля.
. Получает Ф.И.О. владельцев автомобилей и сортирует их в
алфавитном порядке.
6. Получает марку автомобиля и считает количество автомобилей.
. Выводит количество автомобилей каждой марки.
Каждая подзадача решается методом линейного поиска (последовательного
просмотра элементов таблицы).
Чтобы пользователь мог выбирать, какие подзадачи решать и в каком
порядке, программа выводит на экран меню (см. раздел 2.3).
3.2 Структура программы
Рис.1. Функциональная структура программы
программа файл алфавитный поиск
Программа состоит из восьми функций: главной функции main и семи подпрограмм.
1. fioponomer - вывод Ф.И.О. по номеру машины
2. fioinomerpomarki - формирует вывод Ф.И.О. и номер машины по марке автомобиля
3. kolmarok - формирует вывод количества автомобилей каждой марки
4. vivodafamiliiinomerov - вывод Ф.И.О. и номер машины по марке автомобиля
. alfavit - сортирует Ф.И.О. в алфавитном порядке
. chet - считает количество автомобилей
7. vivodakolmarok -вывод количества автомобилей каждой марки.
3.3 Описание функций
.3.1 main - главная
функция
Заголовок функции:
int main ()
Значение функции:
- в случае успешного завершения;
- если входной файл не найден.
Рабочие данные:
f -
указатель на;
k -
номер пункта меню.
Рис.1. Блок-схема функции main()
3.3.2 Fioponomer - вывод
Ф.И.О. по номеру машины
Заголовок функции: Структура записи файла:
void Fioponomer (FILE *f)- фамилия и инициалы
пациента marki - марки автомобиля
Входные данные: nomer - номер автомобиля
f -
ссылка на входной файл
Рис.2. Блок-схема вывода Ф.И.О. по номеру машины
3.3.3.Fioinomerpomarki - формирует вывод Ф.И.О. и номер
машины по марке автомобиля
Заголовок функции: Структура записи файла:
char fio[20]; -Ф.И.О.nomer[8]; - номерFioinomerpomarki (FILE *f) struct
alfavita *sled; - ссылка на следующий элемент
Рис.3. Блок-схема функции формирует вывод Ф.И.О. и номер машины по марке
автомобиля.
3.3.4 kolmarok - формирует
вывод количества автомобилей каждой марки
Структура записи файла:
Заголовок функции: char marka[10]; - название марки
void kolmarok (FILE *f) int
kol; - количество kolmarok *sled; - ссылка на следующий элемент
Рис.4. Схема функции формирует вывод количества автомобилей каждой марки.
3.3.5 vivodafamiliiinomerov
- вывод Ф.И.О. и номер машины по марке автомобиля
Заголовок функции:vivodafamiliiinomerov (struct
alfavita **p)
Входные данные:
**p - ссылка на начало списка.
Рис.5. Схема функции выводит количества автомобилей каждой марки.
3.3.6 alfavit -сортирует
Ф.И.О. автовладельца в алфавитном порядке
Заголовок функции:alfavit (struct alfavita **p,char
fio[],char nomer[])
Входные данные:
**p - ссылка на начало списка.;
char fio[] - Ф.И.О.
автовладельца;
char nomer[] - номер автомобиля;
Рис.6. Схема функции сортирует Ф.И.О. в алфавитном порядке.
3.3.8 chet -считает
количество автомобилей каждой марки
Заголовок функции:chet(struct kolmarok **p,char
marka[])
Входные данные:
struct kolmarok **p - ссылку на новую машину;
char marka[] - марка
этой машины;
3.3.9 vivodakolmarok -выводит
количество автомобилей каждой марки
Заголовок функции:
void vivodakolmarok(struct kolmarok **p)
Входные данные:
struct kolmarok **p - ссылку на начало списка;
Рис.7. Схема функции вывода количество автомобилей каждой марки.
Литература
1. Хохлов
Д.Г. Основы технологии модульного программирования. Учебное пособие. - Казань.
Изд-во Казан. гос. техн. ун-та , 2005. - 63 с.
. Павловская
Т.А. С/С++. Программирование на языке высокого уровня. - СПб: Питер, 2009г. -
461с.
. Павловская
Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. - СПб: Питер,
2006 г. - 240с.
. Хохлов Д.Г.
Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во
Казан. гос. техн. ун-та, 2010. - 102 с.
5. Хохлов
Д.Г., Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам:
Учебное пособие.- Казань: Изд-во Казан. гос. техн. ун-та, 2009. - 48 с.
6. Бикмурзина
А.Р. Лабораторный практикум по программированию. - Казань: Изд-во Казан. гос.
техн. ун-та, 2011г.
. INTUIT.ru.
Приложение 1. Текст программы
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>izfaila
{fio[20];marki[10];nomer[8];
};fioponomer(FILE *f)
{izfaila stroka;vvodnomer[6];ind=0;("vvedite ickomii
nomer zaglavnimi bukvami(6
simvolov)");(vvodnomer);("Familii");((fgets((char*)&stroka,sizeof(struct
izfaila),f))!=NULL)
{.fio[19]='\0';.nomer[6]='\0';(strcmp(vvodnomer,stroka.nomer)==0)
{(stroka.fio);ind++;
}
}(ind==0)printf("Net mashini s ukazanimi vami
nomerom");(ind>1)printf("V base nevernie dannie proverte
basu");
}alfavita
{fio[20];nomer[8];alfavita *sled;
};vivodafamiliiinomerov(struct alfavita **p)
{alfavita *i;("\nFamiliya
Nomer\n");(i=*p;i!=NULL;i=i->sled)
{>fio[19]='\0';>nomer[6]='\0';("%s",i->fio);("%s\n",i->nomer);
}
}alfavit(struct alfavita **p,char fio[],char nomer[])
{alfavita *pt,*k,*j;=malloc(sizeof(struct
alfavita));(pt->fio,fio);(pt->nomer,nomer);(*p==NULL||strcmp(pt->fio,(*p)->fio)<0)
{>sled=*p;
*p=pt;
}
{=*p;(k!=NULL && strcmp(pt->fio,k->fio)>=0)
{=k;=k->sled;
}>sled=pt;pt->sled=k;
}
}fioinomerpomarki(FILE *f)
{ind=0;izfaila stroka;alfavita *p;marka[9];=NULL;("vvedite
iskomuu mashinu");(marka);((fgets((char*)&stroka,sizeof(struct
izfaila),f))!=NULL)
{.fio[19]='\0';.marki[strlen(marka)]='\0';(strcmp(marka,stroka.marki)==0)
{(&p,stroka.fio,stroka.nomer);=1;
}
}(&p);(ind==0)printf("Net takoi mashini");
}kolmarok{marka[10];kol;kolmarok *sled;
};chet(struct kolmarok **p,char marka[])
{kolmarok *pt,*k,*j;ind=0;=malloc(sizeof(struct
alfavita));(pt->marka,marka);(*p==NULL)
{>sled=*p;>kol=1;
*p=pt;
}
{=*p;(k!=NULL)
{(strcmp(k->marka,pt->marka)==0)
{k->kol++;ind=1;break;}=k->sled;
}(ind==0)
{>sled=*p;>kol=1;
*p=pt;
}
}
}vivodakolmarok(struct kolmarok **p)
{kolmarok *i;("\nMarka
kolichestvo\n");(i=*p;i!=NULL;i=i->sled)
{("%s",i->marka);("%d\n",i->kol);
}
}
/*functia vivoda kolichestvo marok*/kolmarok(FILE *f)
{izfaila stroka; /*budet vviditsya stroka iz faila v tip
struct farall*/kolmarok *p;=NULL;((fgets((char*)&stroka,sizeof(struct
izfaila),f))!=NULL) /*schitivaet kajduu slduchuu stroku i proveryaet ee na
nalichie*/
{.marki[9]='\0';(&p,stroka.marki);
}(p==NULL){puts("Net mashin");}else(&p);
{*f;k;(1){=0;((f=fopen("avto.txt","r"))==NULL)
{("not file");1;
}("\n\n\n\nVvedite chislo v zavisimosti ot togo chto
hotite sdelat\n\n1-uznat familiu avtovladelca s zadannim nomerom\n2-familii
vladelcev i nomera avtomobilei dannoi marki\n3-kolichestvo avtomobilei kajdoi
marki\n4-vixod\n");("%d",&k);();(k)
{1: fioponomer(f);fclose(f);break;2:
fioinomerpomarki(f);fclose(f);break;3: kolmarok(f);fclose(f);break;4: return
1;:printf("vi veli ne korrektnoe chislo poprobuite eche");fclose(f);
}
}
}
Приложение 2. Пример входного файла AVTO.txt
Antonov I.I. BMW AA001AR.R. HONDA DF005LH.H. HONDA ER067JG.H.
MERSEDES KL666PE.T. BMW RT567UK.Q. HAMMER GH567LF.P. FERRARI FP987PO.V. LADA
AS568BB.B. BMW RR489KN.L. HONDA LK794GG.J. BMW AA001A
Приложение 3. Результаты
тестирования программы
Тест 1. Входного файла нет в текущем каталоге.
Результат:
Not file
В следующих тестах используется файл из приложения 2.
Тест 2
.
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------
vvedite ickomii nomer zaglavnimi bukvami(6 simvolov)A
Antonov I.I.G.J.
Vvedite chislo v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
Тест 3
.
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------
vvedite ickomii nomer zaglavnimi bukvami(6 simvolov)G
Belobrisov N.L.
Vvedite chislo v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
Тест 4
.
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------
vvedite ickomii nomer zaglavnimi bukvami(6 simvolov)
При введении не существующего номера
Familiya
Net mashini s ukazanimi vami nomerom
Vvedite chislo v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
Тест 5
.
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------
vvedite ickomii nomer zaglavnimi bukvami(6 simvolov)Nomer
Akchetnifov B.B. RR489KI.I. AA001AG.J.
AA001AE.T. RT567U
Vvedite chislo v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-vixod
Тест 6 .
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------
vvedite ickomii nomer zaglavnimi bukvami(6 simvolov)
При введении не существующей марки
Familiya Nomer
Net takoi mashini
Vvedite chislo v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
Тест 7
.
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------
Kolichestvo 4 3 1 1 1 1chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
Тест 9
.
======================================================chislo
v zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------
Ввод не верных данныхveli ne korrektnoe chislo poprobuite echechislo v zavisimosti
ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
Тест 10
.
=====================================================chislo v
zavisimosti ot togo chto hotite sdelat
-uznat familiu avtovladelca s zadannim nomerom
-familii vladelcev i nomera avtomobilei dannoi marki
-kolichestvo avtomobilei kajdoi marki
-vixod
-----------------------------------------------------------------------------------