Помощь в написании студенческих работ
Антистрессовый сервис

Написание программы с использованием структурного шаблона с именем ZNAK

КонтрольнаяПомощь в написанииУзнать стоимостьмоей работы

Многие конструкции языка Си требуют применения указателей. Например, указатели необходимы для успешного использования функций и динамического распределения памяти. С указателями следует обращаться очень осторожно. Так использование в программе неинициализированного указателя может привести к «зависанию» компьютера. При неправильном, неаккуратном использовании указателей в программе могут… Читать ещё >

Написание программы с использованием структурного шаблона с именем ZNAK (реферат, курсовая, диплом, контрольная)

Задание

Описать структурный шаблон с именем ZNAK, содержащий следующие элементы:

— NAME — фамилия, имя (символьный массив)

— ZODIAC — знак зодиака (символьный массив)

— BDAY — день рождения — массив трех чисел (тип INT)

Написать программу, выполняющую:

1. ввод на экран с клавиатуры данных в массив BOOK, состоящий из элементов типа ZNAK.

2. вывод на экран:

— всей информации, упорядоченной по датам дней рождения

— вывод на экран информации о человеке, чья фамилия и чьё имя введены с клавиатуры, если таковых нет, то выдать соответствующее сообщение

Стандартные библиотеки

— стандартный заголовочный файл ввода/вывода заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода.

— функция выделения динамической памяти, входящие в стандартную библиотеку языка Си, malloc принимает в качестве аргумента размер выделяемой области в байтах; возвращает нетипизированный указатель (void*) на область памяти заявленного размера или NULL в случае, если выделить память невозможно. Содержимое выделяемой области памяти не определено. сallocпринимает в качестве аргумента количество элементов и размер каждого элемента в байтах; возвращает нетипизированный указатель (void*) на область памяти заявленного размера или NULL в случае, если выделить память невозможно. Значения элементов устанавливаются в ноль. malloc работает быстрее, чем calloc, в связи с отсутствием функции обнуления выделяемой памяти. графический программа указатель структура

— стандартная библиотека языка Си, подключающая графические функции.

Структуры

Структуры в языке Си — это объединенные данные, у которых есть некоторая логическая взаимосвязь.

Например:

struct ZNAK { char NAME[30]; char ZODIAK[10]; int BDAY[3]; }

Любая структура в языке си (c) должна начинаться с ключевого слова — struct, которое сообщает компилятору, что тут у нас будет структура. Все данные в структуре (struct) пишутся в фигурных скобках, и в конце ставится запятая с точкой (;).

В структуре (struct) у нас находятся данные различных типов, но они объединены в логическую связь. Данные в структуре должны иметь уникальные имена, но в различных структурах можно использовать одинаковые названия. Объявление структуры ни чем не отличается от объявления любого типа данных в языке Си.

Операции со структурами:

· присваивание полю структуры значение того же типа

· можно получить адрес структуры. Не забываем операцию взятия адреса (&)

· можно обращаться к любому полю структуры

· для того, что бы определить размер структуры можно использовать операцию sizeof ()

Инициализация структуры Инициализация структуры в языке си происходит так же, как и при инициализации массива. Вот пример инициализации структуры:

struct klass a = {" Sergey", 'B', 4.5 };

Создается переменная типа struct klass и присваивается всем трем полям, которые у нас определенны в структуре, значения. Порядок очень важен при инициализации структуры, так как компьютер сам не может отсортировывать данные. Если какое-либо поле у вас будет не заполненным, то оно автоматом заполнится 0 — для целочисленных типов; NULL — для указателей; (ноль-терминатор) — для строковых типов.

Типы данных

В языке Си предусмотрено использование основных типов данных:

1. Символьный.

Объекты, описанные как символы (char), достаточно велики, чтобы хранить любой член из соответствующего данной реализации внутреннего набора символов, и если действительный символ из этого набора символов хранится в символьной переменной, то ее значение эквивалентно целому коду этого символа. В символьных переменных можно хранить и другие величины, но реализация будет машинно-зависимой. (На СМ ЭВМ значение символьных переменных изменяется от -0177 до 0177.)

2.Целый.

Можно использовать до трех размеров целых, описывае мых как short int, int и long int. Длинные целые занимают не меньше памяти, чем короткие, но в конкретной реализации может оказаться, что-либо короткие целые, либо длинные целые, либо те и другие будут эквивалентны простым целым. «Простые» целые имеют естественный размер, предусматриваемый архитектурой используемой машины; другие размеры вводятся для удовлетворения специальных потребностей.

3.Беззнаковый.

Целые без знака, описываемые как unsigned, подчиняются законам арифметики по модулю 2**n, где n — число битов в их представлении.

4.Вещественный.

Вещественные одинарной точности (float) и вещественные двойной точности (double) в некоторых реализациях могут быть синонимами. (На СМ ЭВМ float занимает 32 бита памяти, а double — 64).

В языке нет логического типа данных, а в качестве логических значений используются целые «0» — «ложь» и «1» — «истина» (при проверках любое целое, не равное 0, трактуется как «истина»).

В своей работе я использую целый и символьный тип данных.

Указатели

Указатель — это переменная, которая содержит адрес некоторого объекта в памяти компьютера. Понятно, что адрес — целое число.

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

Объявление указателей в Си.

Вначале указывается тип указателя. Это некоторый тип языка Си. В данном случае он определяет тип объекта, на который указывает указатель.

Вслед за этим через пробел ставится звездочка — *. Она обозначает, что следующая за ней переменная является указателем.

Получается довольно простая формула:

тип *<�простая переменная>

Например:

char *ch;

int *temp, i, *j, *k;

float *pt, fon;

Здесь указателями являются: ch, temp, j, k pt.

Операции над указателями в Си.

Простейшая операция над указателями — это операция &, что означает «взять адрес». Существует еще одна операция над указателями. Она обозначается символом звездочка *. Смысл этой операции таков: «значение, расположенное по указанному адресу» .

Хотя знак звездочка * соответствует обычной операции умножения, но никак нельзя перепутать эти две операции. Ведь арифметическая операция умножения имеет два операнда. Иначе говоря, при умножении должны быть указаны, как данные, два числа, участвующие в умножении. Поэтому и говорят, что умножение — это бинарная операция. Операция * над указателями, в отличие от арифметического умножения, — это унарная операция. То есть, другими словами, она использует всего один операнд (одно данное).

Графика

Разработка всех графических программ включает следующие пять шагов:

1.Подключение графической библиотеки.

2.Установка видео-режима.

3.Определение параметров видео-конфигурации.

4.Создание и манипуляции графическими фигурами.

5.Восстановление первоначальной конфигурации перед выходом из программы.

Подключение графической библиотеки.

Включаемый заголовочный файл graph. h определяет основные переменные, прототипы функций и константы, используемые в графическом программировании. Подключайте данный файл ко всем программам, использующим графические функции.

Установка видео-режима.

Первым шагом в графических программах является установка видео-режима, который разрешает выполнение графических функций. В графической библиотеке СИ поддерживается 10 графических режимов.

Графические функции и видеорежимы, используемые в данной программе будут представлены далее.

Константа

Видеорежим

Графический или текстовый

_DEFAULTMODE

Оригинальный режим

оба

_TEXTBW40

40×25 текст, 16 серых

текстовый

_TEXTTC40

40×25 текст, 16/8 цветных

текстовый

_TEXTBW80

80×25 текст, 16 серых

текстовый

_TEXTC80

80×25 текст, 16/8 цветных

текстовый

_MRES4COLOR

320×200 ячеек, 4 цвета

графический

_MRESNOCOLOR

320×200 ячеек, 4 серых

графический

_HRESBW

640×200 ячеек, BW

графический

_TEXTMONO

80×25 текст, BW

текстовый

_MRES16COLOR

320×200 ячеек, 16 цветов

графический

_HRES16COLOR

640×200 ячеек, 16 цветов

графический

_ERESNOCOLOR

640×350 ячеек, BW

графический

_ERESCOLOR

640×350 ячеек, 4/16 цветов

графический

_VRES2COLOR

640×480 ячеек, 2 цвета

графический

_VRES16COLOR

640×480 ячеек, 16 цветов

графический

_MRES256COLOR

320×200 ячеек, 256 цветов

графический

В своей программе я использую «_VRES16COLOR» для использования в видеорежиме 16-цветную палитру для графических объектов, а также «_TEXTC80» для использования в видеорежиме 16-цветную палитру для текста. «_DEFAULTMODE» — возвращает или задает режим ввода данных, к которому возвращается элемент после операции обновления, вставки или отмены.

Таблица функций

Функция

Смысловая нагрузка

void createFile ()

создание файла

main ()

главная функция

void showRecords ()

функция вывода записей по введенной фамилии

void showAll ()

функция вывода всех записей, сортированных по дате рождения

struct inpinput ()

функция добавления новых записей в базу

Графические функции

int menu ()

создание графической оболочки

Описание переменных

имя переменной

тип

класс памяти

смысловая нагрузка

NAME

char

имя, в котором хранится имя и фамилия человека

ZODIAK

char

имя, в котором хранится знак зодиака

BDAY

int

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

main ()

c

int

локальная

переменная отвечает за ввод с клавиатуры

selection

int

локальная

переменная используется в операторе switch

number

int

локальная

переменная отвечает за количество записей

rez

inp

локальная

переменная используется при создании новых записей; буферная структура для значений

BLOC_NOTE

NOTE

локальная

указатель на структуру NOTE

i

int

локальная

счетчик

int menu ()

c

char

локальная

отвечает за ввод с клавиатуры

textselected

char

локальная

отвечает за цвет выделенного текста

textnotselected

char

локальная

отвечает за цвет невыделенного текста

buttonselected

char

локальная

отвечает за цвет выделенной кнопки

buttonnotselected

char

локальная

отвечает за цвет невыделенной кнопки

i

int

локальная

счетчик

selection

int

локальная

используется в операторе switch

x[2]

int

локальная

координаты кнопок по x

y[4]

int

локальная

координаты кнопок по y

h

int

локальная

расстояние между кнопками

void showRecords (struct ZNAK*BOOK, int number)

c

char

локальная

отвечает за ввод с клавиатуры

zod[30]

char

локальная

отвечает за хранение введенной с клавиатуры фамилии

I, j

int

локальная

счетчики

flag

int

локальная

переменная, отвечающая за то найдена ли запись или нет

void showAll (struct ZNAK*BOOK, int number)

I, j, k

int

локальная

счетчики

c

char

локальная

отвечает за ввод с клавиатуры

Z

ZNAK

локальная

буферная структура для обмена значений

struct inp input (int number, struct ZNAK*BOOK)

rez

inp

локальная

переменная отвечает за количество записей; буферная переменная для обмена значений

I, j

int

локальная

счетчики

errorflag

int

локальная

переменная, отвечающая за ошибку при вводе данных

errorflag2

int

локальная

переменная, отвечающая за ошибку при вводе данных

breaker

int

локальная

переменная, отвечающая за прерывание функции и возвращение в главное меню

c

char

локальная

за ввод с клавиатуры

flag

char

локальная

переменная, отвечающая за продолжение записей

comparer

char

локальная

переменная, в которую записываются данные структуры ZNAK

Листинг

#include

#include

#include

struct ZNAK

{

char NAME[30], ZODIAK[20];

int BDAY[3];

};

struct inp

{

struct ZNAK *BOOK;

int number;

};

int menu ();

struct inp input (int number, struct ZNAK *BOOK);

void showRecords (struct ZNAK *BOOK, int number);

void showAll (struct ZNAK *BOOK, int number);

void createFile (struct ZNAK *BOOK, int number){

int i, j, k;

char c;

struct ZNAK Z;

FILE *output;

if ((output=fopen («book.dat» ," w"))==NULL)

{

printf («Не удалось создать файл. n»);

return;

}

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

{

for (j = 0; j < number-1; j++)

{

for (k=2; k>=0; k—)

{

if ((BOOK+j)->BDAY[k]==(BOOK+j+1)->BDAY[k])

continue;

if ((BOOK+j)->BDAY[k]>(BOOK+j+1)->BDAY[k])

{

Z=*(BOOK+j);

*(BOOK+j)=*(BOOK+j+1);

*(BOOK+j+1)=Z;

}

break;

}

}

}

fprintf (output, «‚все записи: nn»);

fprintf (output, ««n»);

fprintf (output, «ИМЯ ЗОДИАК ДАТА РОЖДЕНИЯ n»);

fprintf (output, «n»);

for (i=0; i

{

fprintf (output, «є %30s і %11s і «,(BOOK+i)->NAME,(BOOK+i)->ZODIAK);

for (j=0;j<2;j++)

fprintf (output, «%2.2d.» ,(BOOK+i)->BDAY[j]);

fprintf (output, «%4d «,(BOOK+i)->BDAY[2]);

fprintf (output, «єn»);

if (i==number-1)

fprintf (output, «n»);

else

fprintf (output, «n»);

}

printf («nnФайл успешно сохранен! «);

}

main ()

{

int c, selection, number=0;

struct inp rez;

struct ZNAK *BOOK=0;

while (1)

{

selection=menu ();

switch (selection)

{

case 1:

rez=input (number, BOOK);

number=rez.number;

BOOK=rez.BOOK;

break;

case 2:

showRecords (BOOK, number);

break;

case 3:

showAll (BOOK, number);

break;

case 4:

printf («Вы действительно хотите выйти 1-да, 2-нет (½)? «);

do c=getch ();

while ((c≠'1') && (c≠'2'));

if (c=='1')

{

_setvideomode (_DEFAULTMODE);

free (BOOK);

exit (0);

}

}

}

}

int menu ()

{

char c, textselected=5,textnotselected=9,buttonselected=16,buttonnotselected=14;

int i, selection=1,x[2]={100,612}, y[4]={40,140,240,340}, h=65;

_setvideomode (_VRES16COLOR);

_setbkcolor (_WHITE);

_clearscreen (_GCLEARSCREEN);

while (c≠13)

{

if (c==72)

if (selection==1)

selection=4;

else selection—;

if (c==80)

if (selection==4)

selection=1;

else selection++;

_setcolor (buttonnotselected);

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

{

if (i+1==selection)

_setcolor (buttonselected);

_rectangle (_GFILLINTERIOR, x[0], y[i], x[1], y[i]+h);

_rectangle (_GBORDER, x[0]-9,y[i]-9,x[1]+9,y[i]+h+9);

if (i+1==selection)

_setcolor (buttonnotselected);

}

_settextcolor (textnotselected);

_settextposition (5,32);

if (selection==1)

_settextcolor (textselected);

_outtext («Создать новые записи «);

if (selection==1)

_settextcolor (textnotselected);

_settextposition (11,33);

if (selection==2)

_settextcolor (textselected);

_outtext («Вывести по фамилии «);

if (selection==2)

_settextcolor (textnotselected);

_settextposition (18,35);

if (selection==3)

_settextcolor (textselected);

_outtext («Вывести все «);

if (selection==3)

_settextcolor (textnotselected);

_settextposition (24,39);

if (selection==4)

_settextcolor (textselected);

_outtext («Выход «);

if (selection==4)

_settextcolor (textnotselected);

c=getch ();

}

_setvideomode (_TEXTC80);

_settextcolor (14);

_clearscreen (_GCLEARSCREEN);

return selection;

}

struct inp input (int number, struct ZNAK *BOOK)

{

struct inp rez;

int i, j, errorflag, errorflag2, breaker;

char c, flag=1,comparer[128];

breaker=0;

if (number)

{

printf («Записи уже существуют. Если вы хотите… n»);

printf («…удалить старые записи и создать новые '1'n»);

printf («…добавить записи к существующим '2'n»);

printf («…завершить операцию и вернуться в меню '3'n»);

do

c=getch ();

while ((c≠'1') && (c≠'2') && (c≠'3'));

if (c=='1')

{

for (i=0; i

free (BOOK+i);

number=0;

printf («Старые данные удалены!»);

}

if (c=='2')

breaker=1;

}

for (i=number; flag; i++)

{

if (breaker==1)

break;

++number;

errorflag=0;

BOOK=(struct ZNAK*)realloc (BOOK,(i+1)*sizeof (struct ZNAK));

printf («nЗапись #%d: n», i+1);

do

{

errorflag2=1;

printf («n Пожалуйста, введите имя (1−30 символов): «);

gets (comparer);

if (((strlen (comparer))<29) && ((atoi (comparer))==0))

errorflag2=0;

else

printf («n Имя не может содержать больше 30 символов! Пожалуйста, попробуйте снова. n»);

}

while (errorflag2==1);

strcpy (((BOOK+i)->NAME), comparer);

printf («n Введите дату рождения: n «);

do

{

if (errorflag)

{

printf («n n Некорректное сочетание дня и месяца n»);

printf («n (Например: 35.03(в марте 31 день))n»);

printf («n Пожалуйста, попробуйте снова! n»);

}

errorflag++;

do

{

errorflag2=1;

printf («Пожалуйста, введите день (DD):»);

gets (comparer);

(BOOK+i)->BDAY[0]=atoi (comparer);

if (((BOOK+i)->BDAY[0]<32) && ((BOOK+i)->BDAY[0]>0))

errorflag2=0;

else

printf («n День должен принадлежать [1;31] интервалу. Пожалуйста, попробуйте снова. nn»);

}

while (errorflag2==1);

printf («данные приняты! nn»);

do

{

errorflag2=1;

printf («Пожалуйста, введите месяц (MM):»);

gets (comparer);

(BOOK+i)->BDAY[1]=atoi (comparer);

if (((BOOK+i)->BDAY[1]<13) && ((BOOK+i)->BDAY[1]>0))

errorflag2=0;

else

printf («n Месяц должен принадлежать интервалу [1;12]. Пожалуйста, попробуйте снова .nn»);

}

while (errorflag2==1);

printf («Данные приняты! nn»);

do

{

errorflag2=1;

printf («ПОжалуйста, введите год (YYYY): «);

gets (comparer);

(BOOK+i)->BDAY[2]=atoi (comparer);

if (((BOOK+i)->BDAY[2]<2011) && ((BOOK+i)->BDAY[2]>999))

errorflag2=0;

else

printf («n Год должен принадлежать интервалу [999;2011]nn «);

}

while (errorflag2==1);

printf (««Данные приняты! nn»);

}

while (((((BOOK+i)->BDAY[0])==31) && (((BOOK+i)->BDAY[1]==4) ||

((BOOK+i)->BDAY[1]==6) || ((BOOK+i)->BDAY[1]==9) || ((BOOK+i)->BDAY[1]==11) ||

((BOOK+i)->BDAY[1]==2))) || (((BOOK+i)->BDAY[1]==2) &&

(((BOOK+i)->BDAY[0]==29) || ((BOOK+i)->BDAY[0]==30))));

if ((BOOK+i)->BDAY[0]>20 && (BOOK+i)->BDAY[1]==3 || (BOOK+i)->BDAY[0]<21 && (BOOK+i)->BDAY[1]==4) strcpy ((BOOK+i)->ZODIAK, «ЋўҐ­»);

if ((BOOK+i)->BDAY[0]>20 && (BOOK+i)->BDAY[1]==4 || (BOOK+i)->BDAY[0]<21 && (BOOK+i)->BDAY[1]==5) strcpy ((BOOK+i)->ZODIAK," 'Ґ"Ґж");

if ((BOOK+i)->BDAY[0]>20 && (BOOK+i)->BDAY[1]==5 || (BOOK+i)->BDAY[0]<22 && (BOOK+i)->BDAY[1]==6) strcpy ((BOOK+i)->ZODIAK," Ѓ"Ё§­Ґжл");

if ((BOOK+i)->BDAY[0]>21 && (BOOK+i)->BDAY[1]==6 || (BOOK+i)->BDAY[0]<23 && (BOOK+i)->BDAY[1]==7) strcpy ((BOOK+i)->ZODIAK," ђ Є");

if ((BOOK+i)->BDAY[0]>22 && (BOOK+i)->BDAY[1]==7 || (BOOK+i)->BDAY[0]<24 && (BOOK+i)->BDAY[1]==8) strcpy ((BOOK+i)->ZODIAK," ‹Ґў");

if ((BOOK+i)->BDAY[0]>23 && (BOOK+i)->BDAY[1]==8 || (BOOK+i)->BDAY[0]<24 && (BOOK+i)->BDAY[1]==9) strcpy ((BOOK+i)->ZODIAK," «Ґў «);

if ((BOOK+i)->BDAY[0]>23 && (BOOK+i)->BDAY[1]==9 || (BOOK+i)->BDAY[0]<24 && (BOOK+i)->BDAY[1]==10) strcpy ((BOOK+i)->ZODIAK," ‚Ґбл");

if ((BOOK+i)->BDAY[0]>23 && (BOOK+i)->BDAY[1]==10 || (BOOK+i)->BDAY[0]<23 && (BOOK+i)->BDAY[1]==11) strcpy ((BOOK+i)->ZODIAK," `Є®аЇЁ®­");

if ((BOOK+i)->BDAY[0]>22 && (BOOK+i)->BDAY[1]==11 || (BOOK+i)->BDAY[0]<22 && (BOOK+i)->BDAY[1]==12) strcpy ((BOOK+i)->ZODIAK," `ваҐ"Ґж");

if ((BOOK+i)->BDAY[0]>21 && (BOOK+i)->BDAY[1]==12 || (BOOK+i)->BDAY[0]<21 && (BOOK+i)->BDAY[1]==1) strcpy ((BOOK+i)->ZODIAK," Љ®§Ґа®Ј");

if ((BOOK+i)->BDAY[0]>20 && (BOOK+i)->BDAY[1]==1 || (BOOK+i)->BDAY[0]<20 && (BOOK+i)->BDAY[1]==2) strcpy ((BOOK+i)->ZODIAK," ‚®¤®"Ґ(c)");

if ((BOOK+i)->BDAY[0]>19 && (BOOK+i)->BDAY[1]==2 || (BOOK+i)->BDAY[0]<21 && (BOOK+i)->BDAY[1]==3) strcpy ((BOOK+i)->ZODIAK," ђлЎл");

printf («Зодиак — «);

puts ((BOOK+i)->ZODIAK);

fflush (stdin);

printf («nХотите ли вы продолжить ввод данных 1-да, 2-нет (½)? «);

do c=getch (); while (c≠'1' && c≠'2');

if (c=='1') flag=1;

else

{

flag=0;

if (number)

{

createFile (BOOK, number);

printf («Нажмите любую клавишу для возврата в меню. n»);

getch ();

}

}

}

rez.BOOK=BOOK;

rez.number=i;

return rez;

}

void showRecords (struct ZNAK *BOOK, int number)

{

char c, zod[20];

int i, j, flag;

if (number==0)

{

printf («Ни одной записи не найдено. Введите записи. n

Нажмите любую клавишу для возврата в меню…");

getch ();

return 0;

}

do

{

flag=0;

printf («n Введите имя: «);

gets (zod);

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

if (!strcmp (zod,(BOOK+i)->NAME))

{

flag=1;

printf («nНайдены записи #%d:n», i+1);

printf («Имя: %sn» ,(BOOK+i)->NAME);

printf («Знак зодиака: %sn» ,(BOOK+i)->ZODIAK);

printf («Дата рождения: «);

for (j=0;j<2;j++)

printf («%i.» ,(BOOK+i)->BDAY[j]);

printf («%in» ,(BOOK+i)->BDAY[2]);

}

if (!flag)

printf («Ни одной записи не найдено.»);

printf («nnХотите ли вы начать новый поиск 1-да, 2-нет (½)?»);

do

c=getch ();

while (c≠'1' && c≠'2');

} while (c=='1');

}

void showAll (struct ZNAK *BOOK, int number)

{

int i, j, k;

char c, fname[20];

struct ZNAK Z;

if (number==0)

{

printf («Нет записей. Создайте записи. nНажмите любую клавишу для возврата в меню…»);

getch ();

return 0;

}

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

{

for (j = 0; j < number-1; j++)

{

for (k=2; k>=0; k—)

{

if ((BOOK+j)->BDAY[k]==(BOOK+j+1)->BDAY[k]) continue;

if ((BOOK+j)->BDAY[k]>(BOOK+j+1)->BDAY[k])

{

Z=*(BOOK+j);

*(BOOK+j)=*(BOOK+j+1);

*(BOOK+j+1)=Z;

}

break;

}

}

}

printf («Все записи: nn»);

printf («n»);

printf («ИМЯ ЗОДИАК ДАТА РОЖДЕНИЯ n»);

printf («n»);

for (i=0; i

{

printf («%30s %11s «,(BOOK+i)->NAME,(BOOK+i)->ZODIAK);

for (j=0;j<2;j++) printf («%2.2d.» ,(BOOK+i)->BDAY[j]);

printf («%4d «,(BOOK+i)->BDAY[2]);

printf («n»);

if (i==number-1)

printf («n»);

else

printf («n»);

}

printf («nnНажмите любую клавишу для возврата в меню.»);

getch ();

}

Блок схема

Главное меню

Функция добавления новых записей (struct inp input)

ShowAll

Результаты

Главное меню

Показать весь текст
Заполнить форму текущей работой