Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа - Арифметические системы счисления.doc
Скачиваний:
22
Добавлен:
02.05.2014
Размер:
820.74 Кб
Скачать

3.9 Блок-схема функции SortMenu():

int choice-переменная соответствующая полю меню

int l-переменная взята для цикла

3.10 Блок-схема функции swap():

3.11 Блок-схема функции SortBD():

3.12 Блок-схема функции Prosm():

3.13 Блок-схемы функции Viborzapus():

int choice-переменная соответствующая полю меню

int loop-переменная для цикла

int n-кол-во записей в базе данных

3.14 Блок-схема функции Izmzapis():

int c-переменная для определения вибранной записи

3.15 Блок-схема функции Tdzapis():

int c-переменная для определения выбранной записи

3.16 Блок-схема функции Sozd():

3.17 Блок-схема функции Soxr():

3.18 Блок-схема функции Prosm():

3.19 Блок-схема функции Pr():

4.Листинг программы

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <iostream.h>

const int dlinna = 15;

struct record

{

char naimenovanie[15];

long int ploshad;

long int etagnost;

long int god_soor;

long int stoimost;

};

int Vot();

void Prosm();

void Sozd();

void Novzapis();

void Zagr();

void Soxr();

int Viborzapis();

void Izmzapis();

void Ydzapis();

void Pzapis();

void Sort();

int Exit();

long int Pr(long int min, long int max);

//Globals

static record * records = 0;

static long int nrecords = 0;

const int menup = 10;

static char menu[menup][20] = {"prosmotret bazy",

"sozdat zapis",

"sozdat bazy",

"otkrit bazy",

"soranit bazy",

"redactirovat bazy",

"ydalit zapisi",

"sortirovat bazy",

"naiti zapis",

"vixod"

};

const int sort = 6;

static char sortmenu[sort][22] = {"Sort naimenovanie",

"Sort ploshad",

"Sort etagnosr",

"Sort god_soo",

"Sort stoimos",

"v meny"

};

//**********************************PodtverghdeniE*************************

int Podt()

{

printf("\n<Enter> - da, <Esc> - net");

int c;

do

c = getch();

while(c != 13 && c != 27);

return c;

}

//*********************************Menu**********************************

int Menu()

{

int choice = 0;

int loop = 1;

while(loop == 1)

{

clrscr();

for(int i=0;i<menup;i++)

{

if(i == choice)

cout<<"\n "<<"*&"<<menu[i]<<"&*";

else

cout<<"\n "<<menu[i];

}

printf("\n\nispolzy' knopki vniz verx dla peredvigenia");

int c = getch();

switch(c)

{

case 72: --choice;break;

case 80: ++choice;break;

case 13: loop = 0;break;

default:break;

}

if(choice < 0) choice = menup - 1;

if(choice >= menup) choice = 0;

}

return choice;

}

//******************************Vot*******************************

int Vot()

{

clrscr();

printf("\n soorygenie aeraporta");

printf("\n dly vixoda nagmite <Esc> ");

return getch();

}

//************************************EXIT*********************************

int Exit()

{

clrscr();

printf("\nvi to4no xotit viti ?");

return Podt();

}

//***********************************MAIN***********************************

void main()

{int i,k,p;

if (Vot() != 27)

{

int l=1;

while(l == 1)

{

int p = Menu();

switch(p)

{

case 0: Prosm(); break;

case 1: Novzapis(); break;

case 2: Sozd(); break;

case 3: Zagr(); break;

case 4: Soxr(); break;

case 5: Izmzapis(); break;

case 6: Ydzapis(); break;

case 7: Sort(); break;

case 8: Pzapis(); break;

case 9: if(Exit() != 27) l = 0; break;

}

}

}

}

//*********************imyFile********************************

static char filename[32];

char * FileDialog()

{

clrscr();

printf("vvedit im faila:");

scanf("%s", filename);

return filename;

}

//******************************Vvod Zapisi*********************************

void Vvodzapis(record & rec)

{

clrscr();

int c;

rec.naimenovanie[0] = 0;

printf("\nvvdite naimenovanie:");

while(rec.naimenovanie[0] == 0)gets(rec.naimenovanie);

printf("\nvvedita ploshad :");

rec.ploshad =Pr(1, 99999);

printf("\nvvedite etagnost :");

rec.etagnost = Pr(1, 99999);

printf("\nvvedite god soor :");

rec.god_soor = Pr(1, 99999);

printf("\nvvedite stoimost :");

rec.stoimost = Pr(1, 90000);

}

//***********************************Nov Zapisi****************************

void Novzapis(const record & r)

{

++nrecords;

record * newrecords = new record[nrecords];

if(records)

memcpy(newrecords, records, (nrecords - 1) * sizeof(record));

delete[] records;

records = newrecords;

records[nrecords - 1] = r;

}

void Novzapis()

{

record r;

Vvodzapis(r);

Novzapis(r);

}

//************************************Vozmoghn VVod************************

int Sravnenie(const record & a,const record & b)

{

int result = 0;

if(b.naimenovanie[0] != '-' && b.naimenovanie[0] != 0 && strcmp(a.naimenovanie, b.naimenovanie) == 0)result = 1;

if(b.ploshad != -1 && a.ploshad == b.ploshad)result = 1;

if(b.etagnost != -1 && a.etagnost == b.etagnost)result = 1;

if(b.god_soor != -1 && a.god_soor == b.god_soor)result = 1;

if(b.stoimost != -1 && a.stoimost == b.stoimost)result = 1;

return result;

}

void Pzapis()

{

if(!records)

{

clrscr();

printf("\nzapis ne verna");

getch();

}

else

{

clrscr();

record rec;

rec.naimenovanie[0] = 0;

printf("vvedite pole po kotoromy proizvoditsa poisk\n");

printf("\nvvedite naimenovanie,\nprint \"-\" esli vi ne xoyite iskat po etomy poly:");

while(rec.naimenovanie[0] == 0)gets(rec.naimenovanie);

printf("\nvvedite ploshad:(1..99999),\nprint -1 esli vi ne xoyite iskat po etomy poly:");

rec.ploshad = Pr(1, 99999);

printf("\nInput catalog number:(1..99999),\nprint -1 esli vi ne xoyite iskat po etomy poly:");

rec.etagnost = Pr(1, 99999);

printf("\nInput catalog number:(1..99999),\nprint -1 esli vi ne xoyite iskat po etomy poly:");

rec.god_soor = Pr(1, 99999);

printf("\nInput price (1r..90000r),\nprint -1 esli vi ne xoyite iskat po etomy poly:");

rec.stoimost = Pr(1, 90000);

record * oldrecords = records;

int oldnrecords = nrecords;

records = 0;

nrecords = 0;

int n = 0;

for(int i=0;i<oldnrecords;++i)

{

if(Sravnenie(oldrecords[i], rec) == 1)

{

Novzapis(oldrecords[i]);

++n;

}

}

if(n>0)

{

printf("\n%d zapisi naideni nagmite s.", n);

getch();

Prosm();

}

else

{

printf("ni4go ne naideno");

getch();

}

if(records)delete[] records;

records = oldrecords;

nrecords = oldnrecords;

}

}

//*********************************Vivod Zapisi***************************

void Vivnaekr(record & rec)

{

printf("\nnaimenovanie ploshad etagnost god_soor stoimost \n");

printf("%9s %16ld %19ld %16ld %11ld\n", rec.naimenovanie, rec.ploshad, rec.etagnost, rec.god_soor, rec.stoimost);

}

//*************************Meny Sortirovki*********************************

int SortMenu()

{

int choice = 0;

int loop = 1;

while(loop == 1)

{

clrscr();

for(int i=0;i<sort;++i)

{

if(i == choice)

printf("\n->%s<-", sortmenu[i]);

else

printf("\n %s", sortmenu[i]);

}

printf("\n\nnagimaite knopki dla vibora");

int c = getch();

switch(c)

{

case 72: --choice;break;

case 80: ++choice;break;

case 13: loop = 0;break;

default:break;

}

if(choice < 0) choice = sort - 1;

if(choice >= sort) choice = 0;

}

return choice;

}

//********************************Sort*******************************

void swap(record & a, record & b)

{

record c;

c = a;

a = b;

b = c;

}

void Sort()

{

if(records==0)

{

clrscr();

printf("\n4eta nepravilno nagali");

getch();

}

else

{

int c = SortMenu();

switch(c)

{

case 0:

{

for(int i=0;i<nrecords-1;i++)

for(int k=i+1;k<nrecords;k++)

if(strcmp(records[i].naimenovanie, records[k].naimenovanie) >0)swap(records[i], records[k]);

break;

}

case 1:

{

for(int i=0;i<nrecords-1;i++)

for(int k=i+1;k<nrecords;k++)

if(records[i].ploshad > records[k].ploshad)swap(records[i], records[k]);

break;

}

case 2:

{

for(int i=0;i<nrecords-1;i++)

for(int k=i+1;k<nrecords;k++)

if(records[i].etagnost > records[k].etagnost)swap(records[i], records[k]);

break;

}

case 3:

{

for(int i=0;i<nrecords-1;i++)

for(int k=i+1;k<nrecords;k++)

if(records[i].god_soor > records[k].god_soor)swap(records[i], records[k]);

break;

}

case 4:

{

for(int i=0;i<nrecords-1;i++)

for(int k=i+1;k<nrecords;k++)

if(records[i].stoimost > records[k].stoimost)swap(records[i], records[k]);

break;

}

}

}

}

//*********************************Prosmotr*********************

void Prosm()

{

if(!records)

{

clrscr();

printf("\nNo records, press any key");

getch();

}

else

{

int loop = 1;

int n = 0;

while(loop == 1)

{

clrscr();

printf("\n%d)", n + 1);

Vivnaekr(records[n]);

printf("\n\nnagmite <Esc> dla vixoda v menu.");

int c = getch();

switch(c)

{

case 72: --n;break;

case 80: ++n;break;

case 27: loop = 0;break;

default:break;

}

if(n < 0) n = nrecords - 1;

if(n >= nrecords) n = 0;

}

}

}

//*********************************Vibor Zapisi**************************

int Viborzapis()

{

int choice = -1;

if(!records)

{

clrscr();

printf("\n4eta nepravilno nagali");

getch();

}

else

{

int loop = 1;

int n = 0;

while(loop == 1)

{

clrscr();

printf("\n%d)", n + 1);

Vivnaekr(records[n]);

printf("\n\nnagmite <Esc> dla vixoda v menu, <Enter> hg.");

int c = getch();

switch(c)

{

case 72: --n;break;

case 80: ++n;break;

case 27: loop = 0;break;

case 13: loop = 0;choice = n;break;

default:break;

}

if(n < 0) n = nrecords - 1;

if(n >= nrecords) n = 0;

}

}

return choice;

}

//***************************************Izmenenie Zapisi*******************

void Izmzapis()

{

int c = Viborzapis();

if(c>=0 && c<nrecords)

{

//clrscr();

printf("\n\nvi to4no xotite izmenit zapisi?");

if(Podt() == 13)

Vvodzapis(records[c]);

}

}

//**********************************Ydalenie Zapisi*************************

void Ydzapis()

{

int c = Viborzapis();

if(c>=0 && c<nrecords)

{

//clrscr();

printf("\n\nvi to4no xotite ydalit zapisi?");

if(Podt() == 13)

{

--nrecords;

if(nrecords <= 0)

{

delete[] records;

records = 0;

}

else

{

record * newrecords = new record[nrecords];

int k = 0;

for(int i=0;i<nrecords+1;++i)

if(i!=c)

{

newrecords[k] = records[i];

++k;

}

delete[] records;

records = newrecords;

}

}

}

}

//********************************Sozd*****************************

void Sozd()

{

if(records)

{

clrscr();

printf("vi xotiti soxranit?");

if(Podt() == 13) Soxr();

delete[] records;

}

do

{

printf("vvediti novy zapis:\n");

Novzapis();

printf("\n\nxotiti prodolgit?");

}

while(Podt() !=27);

}

//***********************************Soxr******************************

void Soxr()

{

if(!records)

{

clrscr();

printf("\nsoxranit bd");

getch();

return;

}

FILE * m_fp=fopen(FileDialog(), "wb");

if(m_fp)

{

//Header

fwrite("DATA_BASE",1,9,m_fp);

//Number of records

fwrite(&nrecords, 1, sizeof(long int), m_fp);

//Records

record * r = records;

for(int i=0;i<nrecords;++i)

{

fwrite(&(r->naimenovanie), 1, dlinna - 1, m_fp);

fwrite(&(r->ploshad), 1, sizeof(long int), m_fp);

fwrite(&(r->etagnost), 1, sizeof(long int), m_fp);

fwrite(&(r->god_soor), 1, sizeof(long int), m_fp);

fwrite(&(r->stoimost), 1, sizeof(long int), m_fp);

++r;

}

fclose(m_fp);

}

else

{

printf("\nCannot create the file!");

getch();

}

}

//**********************************Zagryzka*****************************

void Zagr()

{if(records)

{

clrscr();

printf("vi xotiti soxranit?");

if(Podt() == 13) Soxr();

delete[] records;

}

FILE * m_fp=fopen(FileDialog(), "rb");

if(m_fp)

{

// fseek(m_fp, 0, SEEK_SET);

//Header

char header[10];

fread(header,1,9,m_fp);

header[9] = 0;

char true_header[] = "DATA_BASE";

if(memcmp(header,true_header,9) != 0)

{

printf("");

getch();

return;

}

//Number of records

fread(&nrecords, 1, sizeof(long int), m_fp);

if(nrecords<0)nrecords = 0;

records = new record[nrecords];

//Records

record * r = records;

for(int i=0;i<nrecords;++i)

{

fread(&(r->naimenovanie), 1, dlinna - 1, m_fp);

fread(&(r->ploshad), 1, sizeof( int), m_fp);

fread(&(r->etagnost), 1, sizeof(int), m_fp);

fread(&(r->god_soor), 1, sizeof( int), m_fp);

fread(&(r->stoimost), 1, sizeof( int), m_fp);

++r;

}

fclose(m_fp);

}

else

{

printf("\nFile not found");

getch();

}

}

//-------------------------------------Pr-------------------------------------

long int Pr(long int min, long int max)

{

long int i = 0;

scanf("%ld", &i);

fflush(stdin);

while ((i==0)||(i>max)||(i<min))

{

gotoxy(1,wherey());

printf("neverno napisali (%ld - %ld): ", min,max);

scanf( "%ld", &i);

fflush(stdin);

}

return i;

}