Написание программы с использованием структурного шаблона с именем ZNAK
Описание структурного шаблона с именем ZNAK, содержащего элементы NAME, ZODIAC, BDAY. Операции со структурами в языке Си. Подключение графической библиотеки программы. Указатель как переменная, содержащая адрес некоторого объекта в памяти компьютера.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 10.01.2012 |
Размер файла | 342,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Задание
Описать структурный шаблон с именем ZNAK, содержащий следующие элементы:
- NAME - фамилия, имя (символьный массив)
- ZODIAC - знак зодиака (символьный массив)
- BDAY - день рождения - массив трех чисел (тип INT)
Написать программу, выполняющую:
1. ввод на экран с клавиатуры данных в массив BOOK, состоящий из элементов типа ZNAK.
2. вывод на экран:
- всей информации, упорядоченной по датам дней рождения
-вывод на экран информации о человеке, чья фамилия и чьё имя введены с клавиатуры, если таковых нет, то выдать соответствующее сообщение
Стандартные библиотеки
<stdio.h> -стандартный заголовочный файл ввода/вывода заголовочный файл стандартной библиотеки языка Си, содержащий определения макросов, константы и объявления функций и типов, используемых для различных операций стандартного ввода и вывода.
<malloc.h>-функция выделения динамической памяти, входящие в стандартную библиотеку языка Си, malloc принимает в качестве аргумента размер выделяемой области в байтах; возвращает нетипизированный указатель (void*) на область памяти заявленного размера или NULL в случае, если выделить память невозможно. Содержимое выделяемой области памяти не определено. сalloc -принимает в качестве аргумента количество элементов и размер каждого элемента в байтах; возвращает нетипизированный указатель (void*) на область памяти заявленного размера или NULL в случае, если выделить память невозможно. Значения элементов устанавливаются в ноль. malloc работает быстрее, чем calloc, в связи с отсутствием функции обнуления выделяемой памяти. графический программа указатель структура
<graph.h> -стандартная библиотека языка Си, подключающая графические функции.
Структуры
Структуры в языке Си - это объединенные данные, у которых есть некоторая логическая взаимосвязь.
Например:
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 - для указателей; \0 (ноль-терминатор) - для строковых типов.
Типы данных
В языке Си предусмотрено использование основных типов данных:
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 |
40x25 текст, 16 серых |
текстовый |
|
_TEXTTC40 |
40x25 текст, 16/8 цветных |
текстовый |
|
_TEXTBW80 |
80x25 текст, 16 серых |
текстовый |
|
_TEXTC80 |
80x25 текст, 16/8 цветных |
текстовый |
|
_MRES4COLOR |
320x200 ячеек, 4 цвета |
графический |
|
_MRESNOCOLOR |
320x200 ячеек, 4 серых |
графический |
|
_HRESBW |
640x200 ячеек, BW |
графический |
|
_TEXTMONO |
80x25 текст, BW |
текстовый |
|
_MRES16COLOR |
320x200 ячеек, 16 цветов |
графический |
|
_HRES16COLOR |
640x200 ячеек, 16 цветов |
графический |
|
_ERESNOCOLOR |
640x350 ячеек, BW |
графический |
|
_ERESCOLOR |
640x350 ячеек,4/16 цветов |
графический |
|
_VRES2COLOR |
640x480 ячеек, 2 цвета |
графический |
|
_VRES16COLOR |
640x480 ячеек, 16 цветов |
графический |
|
_MRES256COLOR |
320x200 ячеек, 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 <stdio.h>
#include <malloc.h>
#include <graph.h>
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, "‚все записи:\n\n");
fprintf(output, " »\n");
fprintf(output, " ИМЯ ЗОДИАК ДАТА РОЖДЕНИЯ \n");
fprintf(output, " n");
for (i=0; i<number; 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("\n\nФайл успешно сохранен! ");
}
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-нет (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<number; 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] интервалу. Пожалуйста, попробуйте снова.\n\n");
}
while(errorflag2==1);
printf(" данные приняты!\n\n");
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]. Пожалуйста, попробуйте снова .\n\n");
}
while(errorflag2==1);
printf(" Данные приняты!\n\n");
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]\n\n ");
}
while(errorflag2==1);
printf(" “Данные приняты!\n\n");
}
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,"ђ Є\0");
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,"‚®¤®«Ґ©");
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-нет(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(" Имя: %s\n",(BOOK+i)->NAME);
printf(" Знак зодиака: %s\n",(BOOK+i)->ZODIAK);
printf(" Дата рождения: ");
for (j=0;j<2;j++)
printf("%i.",(BOOK+i)->BDAY[j]);
printf("%i\n",(BOOK+i)->BDAY[2]);
}
if (!flag)
printf("Ни одной записи не найдено.");
printf("\n\nХотите ли вы начать новый поиск 1-да, 2-нет(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("Все записи:\n\n");
printf(" \n");
printf(" ИМЯ ЗОДИАК ДАТА РОЖДЕНИЯ \n");
printf(" \n");
for (i=0; i<number; 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("\n\nНажмите любую клавишу для возврата в меню.");
getch();
}
Блок схема
Главное меню
Функция добавления новых записей (struct inp input)
ShowAll
Результаты
Главное меню
Размещено на Allbest.ru
Подобные документы
Создание программы, которая создает набор данных в динамической памяти компьютера и позволяет корректировать его. Описание программного комплекса. Обзор особенностей реализации программы с использованием модулей. Добавление данных в конец текущего набора.
курсовая работа [455,2 K], добавлен 28.08.2017Указатель — переменная, диапазон значений которой состоит из адресов ячеек памяти специального значения - нулевого адреса; применение указателя для доступа к области с динамическим размещением памяти (кучи); выгоды косвенной инициализации и адресации.
реферат [27,3 K], добавлен 06.06.2011Массив как пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Расположение в последовательных ячейках памяти, обозначение именем массива и индексом, инициализация. Передача одномерных и двумерных массивов в функцию.
лабораторная работа [32,6 K], добавлен 06.07.2009Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.
курсовая работа [172,4 K], добавлен 23.05.2012Методика и технологический прием структурного программирования; построение алгоритма программы логической задачи в виде блок-схемы из структур "следование, ветвление, цикл"; кодирование текста программы, языки структурного программирования Паскаль и Си.
реферат [623,5 K], добавлен 25.03.2012Создание программы для хранения и обработки данных о съеме/сдаче жилья. Написание программы на языке C++ с использованием библиотеки Qt; использование исходного кода для создания приложения под Windows, Linux, Mac OS X без дополнительных изменений кода.
курсовая работа [60,4 K], добавлен 07.03.2013Теоретические основы разработки Windows-приложений с использованием библиотеки MFC. Создание приложения с помощью Visual C++. Описание логической структуры приложения. Установка и запуск программы. Входные и выходные данные. Преимущество MFC библиотек.
курсовая работа [563,2 K], добавлен 21.06.2011История Hyper Text Markup Language, таблицы стилей, уровни Cascading Style Sheets. Описание средств разработки шаблона. Верстка элементов шаблона и создание стилей. Требования к качеству html-верстки и тестирование сайта. Листинг html и css-кода.
курсовая работа [237,5 K], добавлен 28.12.2014Формирование текстового документа с именем goto.cpp., содержимое которого взято из русифицируемой справки MSDN по оператору безусловного перехода. Выбор оптимального алгоритма решения задачи, разработка интерфейса, отладка и тестирование программы.
курсовая работа [499,8 K], добавлен 10.11.2009Выбор алгоритма решения задачи. Разработка программы, обеспечивающую эффективную обработку и хранение информации с использованием линейных списков. Написание программы на псевдокоде и на языке программирования высокого уровня. Результаты работы программы.
курсовая работа [2,1 M], добавлен 21.04.2012