bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [58]
Форма входа
Поиск
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0
Файловый архив
Файлы » ЭиОП / ЭЭБ » Другое

Разработка подсистемы приема и учета выполнения заказов на доставку пиццы на дом по городу.
Подробности о скачивании 28.05.2012, 14:02
Одномерные и многомерные массивы, их инициализация.
Одномерные массивы
В программах средней и высокой сложности используется, как правило, большое количество переменных. Присвоение имени каждой из них – процесс трудоемкий. Поэтому были предложены массивы – последовательности однотипных величин. Каждый элемент массива есть переменная заданного типа. Тип присваивается при описании массива и делается это тем же способом, что и описание простых переменных. Отличие состоит в указании количества элементов массива в конце описания в квадратных скобках. Например:
float A[10]; //описание массива из 10 вещественных переменных
Обращение к конкретному элементу массива осуществляется через его номер. При этом следует запомнить, что элементы массивов нумеруются с нуля, поэтому последний элемент имеет номер на 1 меньший общего количества элементов в массиве:
A[0], A[1], A[2], …, A[9].
В программе это выглядит, например, так:
x = A[2]; //x присвоено значение 3-го по счету элемента массива A
Важно отметить, что при обращении к элементам массива автоматический контроль выхода индекса за границу массива не производится, что может привести к ошибкам.
Как и переменные, элементы массива могут быть инициализированы. Инициализирующие значения для массивов записываются в фигурных скобках. Значения элементам присваиваются по порядку. Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не указаны, обнуляются:
int b[5] = {3, 2, 1}; // b[0]=3, b[l]=2, b[2]=l, b[3]=0, b[4]=0
int a[5] = {0}; //обнуление всего массива

Размерность массива вместе с типом его элементов определяет объем памяти, необходимый для размещения массива, которое выполняется на этапе компиляции, поэтому размерность может быть задана только целой положительной константой или константным выражением. Размерность массивов предпочтительнее задавать с помощью именованных констант, как это сделано в примере ниже, поскольку при таком подходе для ее изменения достаточно скорректировать значение константы всего лишь в одном месте программы. Если при описании массива не указана размерность, должен присутствовать инициализатор, в этом случае компилятор выделит память по количеству инициализирующих значений:
float a [10]; //размерность задана целой положительной константой
const int n = 10; // размерность задана с помощью именованной
int marks[n]; // константы
int b[] = {3, 2, 1}; // размерность массива равна трем
При обработке массивов удобно использовать операторы цикла. В следующем примере подсчитывается сумма элементов массива:
const int n = 10;
int i, sum;
int marks[n] = {3, 4, 5, 4, 4};
for (i = 0, sum = 0; i<n; i++)
sum += marks[i];
cout << RUS("Сумма элементов: ") << sum;

Многомерные массивы
Многомерные массивы задаются указанием каждого измерения в квадратных скобках, например, оператор
int matr [6][8];
задает описание двумерного массива из 6 строк и 8 столбцов. Массив состоит из 48 элементов. В памяти такой массив располагается в последовательных ячейках построчно.
Трехмерный массив будет описан как:
double mass[4][3][2];
Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс.
Для доступа к элементу многомерного массива указываются все его индексы, например,
matr[2][3]=4;
элементу матрицы matr2,3 присвоено значение 4;
x= matr[2][3];
переменной x присвоено значение элемента матрицы matr2,3.
При инициализации многомерного массива он представляется как массив из массивов, при этом каждый массив заключается в свои фигурные скобки (в этом случае величину первой размерности при описании можно не указывать),
int mass2 [][2]={ {1, 1}, {0, 2}, {1, 0} };
Можно задать общий список элементов в том порядке, в котором элементы располагаются в памяти (тогда все размерности указываются):
int mass2 [3][2]={1, 1, 0, 2, 1, 0};
Обнулить весь массив можно так:
int mass2 [3][2]={0};



Руководство пользователя

Программа «Пицца» обеспечивает возможность создания файла и хранения в нем информации, а также выполнение требуемых функций по работе с этими данными. Программа обеспечивает работу со следующими полями базы данных:
• Время заказа;
• Адрес заказчика;
• Количество пицц;
• Стоимость заказа;
Программа обеспечивает выполнение в автоматизированном режиме следующих функций:
• Создание новой базы данных «Пицца»;
• Загрузка данных для принятия их к учету из файла;
• Редактирование записей в базе данных по любому полю (из вышеописанных);
• Добавление новой записи к уже существующей базе данных;
• Удаление записи из базы данных;
• Просмотр уже созданной или введённой из файла базы данных;
• Сортировка записей по стоимости заказа;
• Сохранение БД во внешний файл.

Общий вид программы приведён на рисунке 1:

Рисунок 1. ¬– Главное меню программы
1. Новая база данных. Для осуществления нужно нажать на клавиатуре клавишу «1». Вводим количество записей, которое пользователь хочет создать в новой БД. Предоставляется возможность создать базу данных, включающую 4 поля, как показано на рис.2:

Рисунок 2.-Создание новой БД

2. Просмотр базы данных из файла. Для осуществления нужно нажать на клавиатуре клавишу «2». Пользователю будет предложено ввести имя входного файла. Необходимо предварительно создать текстовую базу данных, пример показан на рис. 3.

Рисунок 3.-текстовая БД в формате *.txt
Вводим название файла (рис.4):

Рисунок 4.-ввод названия входного файла

После ввода файла нажимаем на клавиатуре клавишу «Enter» для просмотра введённого файла (рис.5):

Рисунок 5.-просмотр БД из файла
3. Редактирование базы данных. Для осуществления нужно нажать на клавиатуре клавишу «3». На экран выводится сохранённая база данных из файла. Далее нужно нажать клавишу «Enter». Пользователю предлагается выбрать одну из вышеуказанных строк для редактирования. На рис.6 показан выбор 2 строки для редактирования:

Рисунок 6.-Выбор строки для редактирования
После выбора нажать клавишу «Enter». Далее предоставляется выбор пункта для изменения его параметров (рис.7):

Рисунок 7.- Выбор поля меню, которое необходимо отредактировать
Пользователь должен выбрать один из пунктов. Если он нажмёт клавишу от «1» до «4», предоставляется ввод редактируемой информации.


Рисунок 8.-редактирование данных

После окончания ввода редактируемой информации вверху экрана появится отредактированная строка. Если пользователь хочет вернуться в главное меню - нажать клавишу «5» (menu)

4. Добавление новой записи. Для осуществления нужно нажать на клавиатуре клавишу «4». Предоставляется возможность добавить новую запись к существующей базе данных, включающую 4 поля:
На рисунке 9 показан пример добавления новой записи к существующей БД.

Рисунок 9.-Добавление новой записи
Для просмотра сохранённой записи в БД нужно нажать клавишу «6» (Просмотр базы данных).

Рисунок 10.-Просмотр БД с новой записью
5. Удаление записи. Для осуществления нужно нажать на клавиатуре клавишу «5». На экран выводится сохранённая база данных из файла. Далее нужно нажать клавишу «Enter». Пользователю предлагается выбрать одну из вышеуказанных строк для удаления. Для примера на рисунке 11 выбираем 2 строку:

Рисунок 11.-Удаление выбранной строки
6. Просмотр базы данных (Prosmotr bazi dannih). Для осуществления нужно нажать на клавиатуре клавишу «6». На экран выводится сохранённая БД (рис.12):

Рисунок 12.-Просмотр существующей БД
Для выхода в главное меню нажимаем клавишу «Enter».
7. Сортировка записей базы данных по цене билета (Sortirovka bazi dannih po cene bileta). Для осуществления нужно нажать на клавиатуре клавишу «7».


Рисунок 13.-Сортировка БД

8. Сохранение базы данных (Sohranenie bazi dannuih). Для осуществления нужно набрать на клавиатуре «8». Пользователь может сохранить базу данных во внешний файл. При этом нужно указать имя файла, куда будет производиться сохранение. На рисунке 14 представлен пример сохранения БД в текстовый файл «2.txt»:


Рисунок 14.-Сохранение БД в файл

Для просмотра результата сохранения нужно открыть папку, где сохранён файл, затем открыть сам файл (рис.15):


Рисунок 15.-Просмотр сохранённого текстового файла с БД
0. Выход (Vuihod). Для выхода из программы нужно набрать на клавиатуре клавишу «0».

Рисунок 16.-Выход из программы

Схемы алгоритмов


Рисунок 1. Основное меню программы


Рисунок 2. Создание новой БД



Рисунок 3. Просмотр БД из файла



Рисунок 4. Редактирование БД



Рисунок 5. Добавление записи


Рисунок 6. Удаление записи



Рисунок 7. Просмотр БД


Рисунок 8. Сортировка записей



Рисунок 9. Сохранение БД

Листинг программного кода

#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
//#include <alloc.h>

struct TStruct //îñíîâíàÿ ñòðóêòóðà

{
char time[10]; //âðåìÿ çàêàçà
char adr[20]; //àäðåñ çàêàç÷èêà
int kol; //êîëè÷åñòâî ïèöö
int cost; //ñòîèìîñòü çàêàçà
};

struct TPizza
{
TStruct *px; //óêàçàòåëü íà ìàññèâ çàïèñåé
int n; //÷èñëî ñòðîê â ìàññèâå
TPizza(){n=0;px=NULL;} //êîíñòðóêòîð
~TPizza(){n=0;if(px!=NULL)free(px);} //äåñòðóêòîð
void loadFile(); //ââîä ÁÄ èç ôàéëà
void newBase(); //ñîçäàíèå íîâîé ÁÄ
void print(); //âûâîä ÁÄ íà ýêðàí
void edit(); //ðåäàêòèðîâàíèå ÁÄ
int choose(); //âûáîð íóæíîé ñòðîêè
void saveFile(); //ñîõðàíåíèå ÁÄ â ôàéë
void add(); //äîáàâëåíèå íîâîé çàïèñè
void del(); //óäàëåíèå çàïèñè
void sort(); //ñîðòèðîâêà çàïèñåé
};

void TPizza::loadFile() //ââîä ÁÄ èç ôàéëà
{
FILE *fin;

int i; //ðàáî÷àÿ ïåðåìåííàÿ äëÿ ïîäñ÷¸òà
TStruct t; //ðàáî÷àÿ ïåðåìåííàÿ äëÿ ïîäñ÷¸òà çàïèñåé â ôàéëå
char file[10]; //ïåðåìåííàÿ äëÿ íàçâàíèÿ ôàéëà
if(px!=NULL){free(px);n=0;px=NULL;} //î÷èñòêà ðàáî÷åé îáëàñòè(ìàññèâà)
printf("Imya vhodnogo faila: ");
scanf("%s",file);
fin = fopen(file,"r");
if(fin==NULL){printf("%s ne otkrit\n",file);getch();return;}
n=0;
//ïîäñ÷¸ò çàïèñåé â ôàéëå
do{fscanf(fin,"%s%s%d%d",&t.time,t.adr,&t.kol,&t.cost);
n++;
} while(!feof(fin)); //ïîêà ôàéë íå çàêîí÷èëñÿ
n--;
fclose(fin);
px=(TStruct *) malloc (sizeof(TStruct) * n); //âûäåëåíèå äèíàìè÷åñêîé ïàìòè
if(px==NULL){printf("Net pamyati\n");getch();return;}
fin = fopen(file,"r");
if(fin==NULL){printf("%s ne otkrit\n",file);getch();return;}
//ââîä ìàññèâà èç ôàéëà
for(i=0;i<n;i++)
{fscanf(fin,"%s%s%d%d",&px[i].time,px[i].adr,&px[i].kol,&px[i].cost);

}
fclose(fin);
}

void TPizza::saveFile() //ñîõðàíåíèå ÁÄ â ôàéë
{
FILE *fout;
char file[20]; //ïåðåìåííàÿ äëÿ íàçâàíèÿ ôàéëà
int i; //ðàáî÷àÿ ïåðåìåííàÿ äëÿ ïîäñ÷¸òà
if(px==NULL){printf("Massiv pust\n");getch();return;}
printf("Vvedite fail dlya sohraneniya: ");
scanf("%s",file);
fout = fopen(file,"w");
if(fout==NULL){printf("%s ne sozdan\n",file);getch();n=0;px=NULL;return;}
//çàïèñü ÁÄ â ôàéë
for(i=0;i<n;i++)
{fprintf(fout,"%s %s %d %d\n",px[i].time,px[i].adr,px[i].kol,px[i].cost);
}
fclose(fout);
printf("Baza dannih sohranena\n");
getch();
}

void TPizza::newBase() //ñîçäàíèå íîâîé ÁÄ
{int i; //ðàáî÷àÿ ïåðåìåííàÿ äëÿ ïîäñ÷¸òà
printf("Kolichestvo zapisey = ");
scanf("%d",&n);
if(px!=NULL)free(px); //î÷èñòêà ðàáî÷åé îáëàñòè(ìàññèâà)
px=(TStruct *) malloc (sizeof(TStruct) * n); //âûäåëåíèå äèíàìè÷åñêîé ïàìÿòè
if(px==NULL){printf("Net pamyati\n");getch();n=0;return;}
//ñîçäàíèå áàçû äàííûõ
for(i=0;i<n;i++)
{
printf("Vremja zakaza: "); scanf("%s",&px[i].time);
printf("Adres zakaz4ika: ");scanf("%s",&px[i].adr);
printf("Koli4estvo pizz: ");scanf("%d",&px[i].kol);
printf("Stoimost` zakaza: ");scanf("%d",&px[i].cost);
printf("\n");
}
printf("Baza dannih sozdana\n");
getch();
}

void TPizza::print() //âûâîä ÁÄ íà ýêðàí
{int i; //ïåðåìåííàÿ äëÿ ïîäñ÷¸òà
if(px==NULL){printf("Massiv pust\n");getch();return;}
system("cls");
printf("\n -----ZAKAZI NA DOSTAVKU PIZZI NA DOM-----\n\n");
printf("%3s%10s%20s%8s%10s\n","N","Vremja","Adres","pizz","Cena");
//âûâîä ÁÄ íà ýêðàí
for(i=0;i<n;i++)
{
printf("%3d%10s%20s%8d%10d\n",i+1,px[i].time,px[i].adr,px[i].kol,px[i].cost);
};
getch();
}

int TPizza::choose() //âûáîð íóæíîé ñòðîêè
{int k; //ðàáî÷àÿ ïåðåìåííàÿ äëÿ âûáîðà ñòðîêè
print(); //âûçûâàåòñÿ ôóíêöèÿ âûâîäà ÁÄ íà ýêðàí
printf("Vuiberite stroku: ");scanf("%d",&k);
k--;
if(k<0|| k>=n){printf("Net takoi stroki\n");getch();}
return k;
}

void TPizza::edit() //ðåäàêòèðîâàíèå ÁÄ
{int j, //ðàáî÷àÿ ïåðåìåííàÿ äëÿ âûáîðà ïóíêòà
N; //ðàáî÷àÿ ïåðåìåííàÿ äëÿ âûçîâà ôóíêöèè
if(px==NULL){printf("Massiv pust\n");getch();return;}
N=choose(); //âûçûâàåòñÿ ôóíêöèÿ âûáîðà ñòðîêè
if ((N<0) || (N>=n)) return;
while(1)
{
system("cls"); //î÷èñòêà ýêðàíà

printf("%3s%10s%20s%8s%10s\n","N","Vremja","Adres","pizz","Cena");
printf("%3d%10s%20s%8d%10d\n",N+1,px[N].time,px[N].adr,px[N].kol,px[N].cost);

printf("1.Vremja zakaza\n2.Adres zakaz4ika\n3.Koli4estvo pizz\n4.Stoimost` zakaza\n5.menu\nVash vibor ");
scanf("%d",&j);
//âûáîð ðåäàêòèðóåìîãî ïîëÿ
switch(j)
{
case 1:printf("Vremja zakaza: ");scanf("%s",&px[N].time);break;
case 2:printf("Adres zakaz4ika:");scanf("%s",&px[N].adr);
case 3:printf("Koli4estvo pizz: ");scanf("%d",&px[N].kol);break;
case 4:printf("Stoimost` zakaza: ");scanf("%d",&px[N].cost);break;
case 5:return;
default :printf("Neverniy vibor\n povtorite\n");getch();
}

}
}

void TPizza::add()
{int i;
TStruct t,
*p;
if(px==NULL){printf("massiv pyst\n");getch();return;}

printf("Vremja zakaza: "); scanf("%s",&t.time);
printf("Adres zakaz4ika: ");fflush(stdin); gets(t.adr);
printf("Koli4estvo pizz: ");scanf("%d",&t.kol);
printf("Stoimost` zakaza: ");scanf("%d",&t.cost);

p=px;
px=(TStruct *) malloc (sizeof(TStruct) * (n+1)); //âûäåëåíèå äèíàìè÷åñêîé ïàìÿòè
if(px==NULL){printf("Net pamyati.\n");getch();return;}
for(i=0;i<n;i++)
px[i]=p[i];
px[n]=t;
n++;
free(p);
printf("Zapis dobavlena\n");getch();
}

void TPizza::del()
{int i,N;
TStruct *t;
if(px==NULL){printf("Zakazov net\n");getch();return;}
t=(TStruct *) malloc (sizeof(TStruct) * (n-1)); //âûäåëåíèå äèíàìè÷åñêîé ïàìÿòè
if(t==NULL){printf("Net pamyati\n");getch();n=0;return;}
if(n==1){free(px);px=NULL;}
else {N=choose();
if ((N<0) || (N>=n)) return;
for(i=0;i<N;i++)
t[i]=px[i];
for(i=N+1;i<n;i++)
t[i-1]=px[i];
free(px);
px=t;
}
n--;printf("zapis udalena\n");getch();
}

void TPizza::sort()
{
TStruct tmp;
int i,j,min;
for (i=0; i<n-1; i++)
{
min=i;
for (j=i+1; j<n; j++)
if (px[j].cost<px[min].cost) min=j;
tmp=px[i];
px[i]=px[min];
px[min]=tmp;
}
printf("Zapisi otsortirovani\n");
getch();
}

void main ()
{TPizza a;
int j;
while (1)
{
system("cls");
printf("%30s%s"," ","1.Novaya baza dannih\n");
printf("%30s%s"," ","2.Prosmotr bazi dannih iz faila\n");
printf("%30s%s"," ","3.Redaktirovanie bazi dannih\n");
printf("%30s%s"," ","4.Dobavlenie novoi zapisi\n");
printf("%30s%s"," ","5.Udalenie zapisi\n");
printf("%30s%s"," ","6.Prosmotr bazi dannih\n");
printf("%30s%s"," ","7.Sortirovka bazi dannih po stoimasti zakaza\n");
printf("%30s%s"," ","8.Sohranenie bazi dannih v fajl\n");
printf("%30s%s"," ","0.Vihod\n");
printf("Vash vibor: ") ;scanf("%d",&j);
switch(j)
{
case 1:a.newBase();break;
case 2:a.loadFile();a.print();break;
case 3:a.edit();break;
case 4:a.add();break;
case 5:a.del();break;
case 6:a.print();break;
case 7:a.sort();break;
case 8:a.saveFile();break;
case 0:printf("Poka");getch ();return;
default :printf("Neverniy vibor\n povtorite\n");getch();
}
}
}
Категория: Другое | Добавил: chizhenok
Просмотров: 1213 | Загрузок: 13
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]