Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/22: Рейтинг темы: голосов - 22, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 3
1

Телефонный справочник

15.10.2011, 19:52. Показов 4100. Ответов 4
Метки нет (Все метки)

Помогите пожалуйста написать прогу на С++.Нужно написать прогу телефонный справочник,она должна считывать инфу с текстового файла и выводить на экран меню выбора:добавить человека и его телефон в текст.файл, удалить нужного человека и поиск по фамилии и при совпадении нужно выводить его номер,а если же таких людей больше 1 ,то вывести фамилии всех этих людей)))у меня проблема со считыванием из текст.файла
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.10.2011, 19:52
Ответы с готовыми решениями:

Телефонный справочник.
Здравствуйте. Нужна помощь в создании программы, которая объединяла бы в себе действия: "Добавление...

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

телефонный справочник
Написать программу, которая позволяет найти в телефонном справочнике (phone.txt) нужные сведения....

Телефонный справочник.
#include "stdio.h" #include "conio.h" #define FNAME "I:\\phone.txt\0" void main() { char...

4
23 / 23 / 4
Регистрация: 05.11.2010
Сообщений: 134
15.10.2011, 21:38 2
Исходники и в инете есть. Условия можете поменять на свой лад Глобально менять пока что не умею)


Код
#include <stdio.h>
#include <conio.h>

//prototipyi functsiy
int ZastBeg();
void ViewDB();
void CreateDB();
void AddToDB();
void SearchInDB();
void SortDB();
int Exit();
void ZastEnd();
int Get(int min, int max);


struct record
{
int num;
char surn[15];
char name[12];
char otch[17];
char ul[20];
int dom;
int kv;
int tel;
int ats;
};


//------------------------------------------MENU-------------------------------


int Menu()
{
clrscr();
printf("*Menu*");
printf("\n-> Prosmotr bazi dannih");
printf("\n Sozdanie bazi dannih");
printf("\n Dobavlenie zapisi v bazu dannih");
printf("\n Poisk zapisi po kluchu");
printf("\n Sortirovka bazi dannih");
printf("\n Vihod iz programmi");
printf("\n\n\nPeremeschenie - strelki vverh i vniz");
printf("\nVibor punkta menu - <Enter>");
int p = 1;
int m = getch();
if(m == 13) ViewDB();

do{
if(m == 80) p++;
if(m == 72) p--;

do{
if(p<=0) p = p+6;
}while (p<=0);
do{
if(p>=7) p = p-6;
}while (p>=7);

if(p == 1){
clrscr();
printf("*Menu*");
printf("\n-> Prosmotr bazi dannih");
printf("\n Sozdanie bazi dannih");
printf("\n Dobavlenie zapisi v bazu dannih");
printf("\n Poisk zapisi po kluchu");
printf("\n Sortirovka bazi dannih");
printf("\n Vihod iz programmi");
printf("\n\n\nPeremeschenie - strelki vverh i vniz");
printf("\nVibor punkta menu - <Enter>");
m = getch();
}
if(p == 2){
clrscr();
printf("*Menu*");
printf("\n Prosmotr bazi dannih");
printf("\n-> Sozdanie bazi dannih");
printf("\n Dobavlenie zapisi v bazu dannih");
printf("\n Poisk zapisi po kluchu");
printf("\n Sortirovka bazi dannih");
printf("\n Vihod iz programmi");
printf("\n\n\nPeremeschenie - strelki vverh i vniz");
printf("\nVibor punkta menu - <Enter>");
m = getch();
}
if(p == 3){
clrscr();
printf("*Menu*");
printf("\n Prosmotr bazi dannih");
printf("\n Sozdanie bazi dannih");
printf("\n-> Dobavlenie zapisi v bazu dannih");
printf("\n Poisk zapisi po kluchu");
printf("\n Sortirovka bazi dannih");
printf("\n Vihod iz programmi");
printf("\n\n\nPeremeschenie - strelki vverh i vniz");
printf("\nVibor punkta menu - <Enter>");
m = getch();
}
if(p == 4){
clrscr();
printf("*Menu*");
printf("\n Prosmotr bazi dannih");
printf("\n Sozdanie bazi dannih");
printf("\n Dobavlenie zapisi v bazu dannih");
printf("\n-> Poisk zapisi po kluchu");
printf("\n Sortirovka bazi dannih");
printf("\n Vihod iz programmi");
printf("\n\n\nPeremeschenie - strelki vverh i vniz");
printf("\nVibor punkta menu - <Enter>");
m = getch();
}
if(p == 5){
clrscr();
printf("*Menu*");
printf("\n Prosmotr bazi dannih");
printf("\n Sozdanie bazi dannih");
printf("\n Dobavlenie zapisi v bazu dannih");
printf("\n Poisk zapisi po kluchu");
printf("\n-> Sortirovka bazi dannih");
printf("\n Vihod iz programmi");
printf("\n\n\nPeremeschenie - strelki vverh i vniz");
printf("\nVibor punkta menu - <Enter>");
m = getch();
}
if(p == 6){
clrscr();
printf("*Menu*");
printf("\n Prosmotr bazi dannih");
printf("\n Sozdanie bazi dannih");
printf("\n Dobavlenie zapisi v bazu dannih");
printf("\n Poisk zapisi po kluchu");
printf("\n Sortirovka bazi dannih");
printf("\n-> Vihod iz programmi");
printf("\n\n\nPeremeschenie - strelki vverh i vniz");
printf("\nVibor punkta menu - <Enter>");
m = getch();
}
}while(m!=13);
return p;
}


//---------------------------------------ZAST_BEG------------------------------


int ZastBeg()
{
printf("\n\n Programma 'Telefonniy spravochnik'");
printf("\n Avtor: top_secret_information =)");
printf("\n\n\n\n <Esc> - vihod, prodolzhit' - lubaya drugaya klavisha");
int c = getch();
return c;
}


//--------------------------------------ZAST_END-------------------------------


void ZastEnd()
{
clrscr();
printf("\n\n Programma 'Telefonniy spravochnik'");
printf("\n Uspeshno zavershena. Blagodaru za eyo ispol'zovanie");
printf("\n\n\n\n Nazhmite lubuju klavishu dlja vihoda v OS");
getch();
}


//---------------------------------------EXIT----------------------------------


int Exit()
{
clrscr();
printf("\n\n Deistvitel'no viyti iz programmi?");
printf("\n\n <Enter> - viyti v OS, <Esc> - prodolzhit' rabotu s programmoj");
int c;
do
{
c = getch();
}while(c != 13 && c != 27);
return c;
}


//---------------------------------------MAIN----------------------------------


int main()
{
if(ZastBeg() != 27)
{
int z;

do
{
z = 0;
int p = Menu();
switch(p)
{
case 1: ViewDB(); break;
case 2: CreateDB(); break;
case 3: AddToDB(); break;
case 4: SearchInDB(); break;
case 5: SortDB(); break;
case 6:
if(Exit() == 27)
{
z = 1;
break;
}
else break;
}
}while(z == 1);
}

else ZastEnd();
return 0;
}


//---------------------------------------VIEWDB--------------------------------


void ViewDB()
{
FILE *f=fopen("db.txt", "rb");
FILE *num=fopen("num.txt", "rb");

if(f == NULL || num == NULL)
{
clrscr();
printf("\nNe udayotsja otkrit' fail bazyi dannih");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
}

else
{
struct record recz[100];

int i, kol;

//poluchenie kol-va zapisej
fread((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila
for(i=0;i<kol;i++)
{
fseek(f, sizeof(recz[i])*i, 0);
fread((char*)&recz[i], 1, sizeof(recz[i]), f);
}

//prosmotr zapisej iz poluchennogo massiva
int a, k = 0;

do
{
clrscr();
printf("*Prosmotr bazi dannih*");
printf("\n\nZapis' #%i", recz[k].num);
printf("\nFIO -> %s %s %s", recz[k].surn, recz[k].name, recz[k].otch);
printf("\nAdres -> ul.%s, d.%i, kv.%i", recz[k].ul, recz[k].dom, recz[k].kv);
printf("\nNomer telefona -> %i", recz[k].tel);
printf("\nATS -> %i", recz[k].ats);


if(kol == 1) //v baze vsego 1 zapis'
{
printf("\n\nBol'she zapisej ne naideno");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
k = 101;
}

else
{
if(k == 0)
{
printf("\n\nStrelka vniz - sled. zapis' ");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 80 && a != 27);
if(a == 80) k++;
else k = 101;
}

else
{
if(k == kol - 1)
{
printf("\n\nStrelka vverh - pred. zapis' ");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 72 && a != 27);
if(a == 72) k--;
else k = 101;
}

else
{
if(k > 0 && k < kol)
{
printf("\n\nStrelki vverh/vniz - listanie po zapisyam: pred/sled");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 72 && a != 80 && a != 27);
if(a == 80) k++;
if(a == 72) k--;
if(a == 27) k = 101;
}
}
}
}
}while(k != 101);
}

fclose(f);
fclose(num);

int z;

do
{
z = 0;
int p = Menu();
switch(p)
{
case 1: ViewDB(); break;
case 2: CreateDB(); break;
case 3: AddToDB(); break;
case 4: SearchInDB(); break;
case 5: SortDB(); break;
case 6:
if(Exit() == 27)
{
z = 1;
break;
}
else break;
}
}while(z == 1);

ZastEnd();
}


//--------------------------------------CREATEDB-------------------------------


void CreateDB()
{
clrscr();
printf("Vyi deistvitel'no hotite sozdat' novuju bazu dannih?");
printf("\n<Enter> - da, <Esc> - net");
int d;
do
{
d = getch();
}while(d != 13 && d != 27);

if(d == 13)
{
FILE *f=fopen("db.txt", "wb");
FILE *num=fopen("num.txt", "wb");

struct record rec[100];

int i, j;

for(i = 0; i < 100; i++)
{
clrscr();
printf("*Sozdanie bazi dannih*\n\n");
rec[i].num = i+1;


//podtverzhdenniy vvod familii

printf("\nFamilija (do 15 simvolov) -> ");
fscanf(stdin, "%s", &rec[i].surn);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli familiju: '%s'. <Esc> - povtorniy vvod. ", rec[i].surn);
printf("\n<Enter> - familija vvedena verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &rec[i].surn);
fflush(stdin);
}
}while(j == 27);


//podtverzhdenniy vvod imeni

printf("\n\nImya (do 12 simvolov) -> ");
fscanf(stdin, "%s", &rec[i].name);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli imya: '%s'. <Esc> - povtorniy vvod. ", rec[i].name);
printf("\n<Enter> - imya vvedeno verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &rec[i].name);
fflush(stdin);
}
}while(j == 27);


//podtverzhdenniy vvod otchestva

printf("\n\nOtchestvo (do 17 simvolov) -> ");
fscanf(stdin, "%s", &rec[i].otch);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli otchestvo: '%s'. <Esc> - povtorniy vvod. ", rec[i].otch);
printf("\n<Enter> - otchestvo vvedeno verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &rec[i].otch);
fflush(stdin);
}
}while(j == 27);


//podtverzhdenniy vvod nazvanija ulitsyi

printf("\n\nAdres: ulitsa (do 20 simvolov) -> ");
fscanf(stdin, "%s", &rec[i].ul);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli ulitsu: '%s'. <Esc> - povtorniy vvod. ", rec[i].ul);
printf("\n<Enter> - nazvanie ulitsi vvedeno verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &rec[i].ul);
fflush(stdin);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera doma

printf("\n\nAdres: #doma (do 3 znakov) -> ");
rec[i].dom = Get(1, 999);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #doma: '%d'. <Esc> - povtorniy vvod. ", rec[i].dom);
printf("\n<Enter> - nomer doma vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
rec[i].dom = Get(1, 999);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera doma

printf("\n\nAdres: #kvartiryi (do 3 znakov)-> ");
rec[i].kv = Get(1, 999);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #kvartiri: '%d'. <Esc> - povtorniy vvod. ", rec[i].kv);
printf("\n<Enter> - nomer kvartiri vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
rec[i].kv = Get(1, 999);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera telefona

printf("\n\nTel. nomer (do 7 znakov) -> ");
rec[i].tel = Get(1, 9999999);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #telefona: '%d'. <Esc> - povtorniy vvod. ", rec[i].tel);
printf("\n<Enter> - nomer telefona vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
rec[i].tel = Get(1, 9999999);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera ats

printf("\n\nNomer ATS (tseloe chislo ot 1 do 9) -> ");
rec[i].ats = Get(1, 9);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #ATS: '%d'. <Esc> - povtorniy vvod. ", rec[i].ats);
printf("\n<Enter> - nomer ATS vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
rec[i].ats = Get(1, 999);
}
}while(j == 27);


fwrite((char*)&rec[i], 1, sizeof(rec[i]), f);
printf("\n\n<Enter> - prodolzhit', <Esc> - vihod v menu\n");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j == 27)
{
int kol = i + 1;
fwrite((int*)&kol, 1, sizeof(kol), num);
break;
}
}
clrscr();
fclose(f);
fclose(num);
}

int z;

do
{
z = 0;
int p = Menu();
switch(p)
{
case 1: ViewDB(); break;
case 2: CreateDB(); break;
case 3: AddToDB(); break;
case 4: SearchInDB(); break;
case 5: SortDB(); break;
case 6:
if(Exit() == 27)
{
z = 1;
break;
}
else break;
}
}while(z == 1);

ZastEnd();
}


//--------------------------------------ADDTODB--------------------------------


void AddToDB()
{
clrscr();
printf("Vyi deistvitel'no hotite dobavit' novuju zapis' v bazu dannyih?");
printf("\n<Enter> - da, <Esc> - net");
int d, z;
do
{
d = getch();
}while(d != 13 && d != 27);

if(d == 13)
{
FILE *f=fopen("db.txt", "ab");
FILE *num=fopen("num.txt", "r+b");

int c;

if(num == NULL)
{
fclose(f); //
clrscr();
printf("\nBaza dannih ne suschestvuet");
printf("\n<Esc> - sozdanie bazi dannih, <Enter> - vihod v menu");
do
{
c = getch();
}while(c != 13 && c != 27);

if(c == 27) CreateDB();
}

//esli file s bazoj naiden
else
{
int kol;

fread((int*)&kol, 1, sizeof(kol), num);

if(kol == 100)
{
printf("Baza dannih zapolnena. Dobavlenie zapisi nevozmozhno.");
printf("Nazhmite lubuju klavishu dlja vihoda v menu");
getch();

do
{
z = 0;
int p = Menu();
switch(p)
{
case 1: ViewDB(); break;
case 2: CreateDB(); break;
case 3: AddToDB(); break;
case 4: SearchInDB(); break;
case 5: SortDB(); break;
case 6:
if(Exit() == 27)
{
z = 1;
break;
}
}
}while(z == 1);

ZastEnd();
}


struct record newrec;

int j;

clrscr();
printf("*Dobavlenie zapisi v bazu dannyih*\n\n");
newrec.num = kol + 1;

//podtverzhdenniy vvod familii

printf("\nFamilija (do 15 simvolov) -> ");
fscanf(stdin, "%s", &newrec.surn);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli familiju: '%s'. <Esc> - povtorniy vvod. ", newrec.surn);
printf("\n<Enter> - familija vvedena verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &newrec.surn);
fflush(stdin);
}
}while(j == 27);


//podtverzhdenniy vvod imeni

printf("\n\nImya (do 12 simvolov) -> ");
fscanf(stdin, "%s", &newrec.name);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli imya: '%s'. <Esc> - povtorniy vvod. ", newrec.name);
printf("\n<Enter> - imya vvedeno verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &newrec.name);
fflush(stdin);
}
}while(j == 27);


//podtverzhdenniy vvod otchestva

printf("\n\nOtchestvo (do 17 simvolov) -> ");
fscanf(stdin, "%s", &newrec.otch);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli otchestvo: '%s'. <Esc> - povtorniy vvod. ", newrec.otch);
printf("\n<Enter> - otchestvo vvedeno verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &newrec.otch);
fflush(stdin);
}
}while(j == 27);

//podtverzhdenniy vvod nazvanija ulitsyi

printf("\n\nAdres: ulitsa (do 20 simvolov) -> ");
fscanf(stdin, "%s", &newrec.ul);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli ulitsu: '%s'. <Esc> - povtorniy vvod. ", newrec.ul);
printf("\n<Enter> - nazvanie ulitsi vvedeno verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
fscanf(stdin, "%s", &newrec.ul);
fflush(stdin);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera doma

printf("\n\nAdres: #doma (do 3 znakov) -> ");
newrec.dom = Get(1, 999);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #doma: '%d'. <Esc> - povtorniy vvod. ", newrec.dom);
printf("\n<Enter> - nomer doma vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
newrec.dom = Get(1, 999);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera doma

printf("\n\nAdres: #kvartiryi (do 3 znakov)-> ");
newrec.kv = Get(1, 999);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #kvartiri: '%d'. <Esc> - povtorniy vvod. ", newrec.kv);
printf("\n<Enter> - nomer kvartiri vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
newrec.kv = Get(1, 999);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera telefona

printf("\n\nTel. nomer (do 7 znakov) -> ");
newrec.tel = Get(1, 9999999);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #telefona: '%d'. <Esc> - povtorniy vvod. ", newrec.tel);
printf("\n<Enter> - nomer telefona vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
newrec.tel = Get(1, 9999999);
}
}while(j == 27);


//podtverzhdenniy kontrolliruemiy vvod nomera ats

printf("\n\nNomer ATS (tseloe chislo ot 1 do 9) -> ");
newrec.ats = Get(1, 9);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #ATS: '%d'. <Esc> - povtorniy vvod. ", newrec.ats);
printf("\n<Enter> - nomer ATS vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
newrec.ats = Get(1, 9);
}
}while(j == 27);

fwrite((char*)&newrec, 1, sizeof(newrec), f);

kol++;

fseek(num, 0, 0);
fwrite((int*)&kol, 1, sizeof(kol), num);

fclose(f);
fclose(num);

printf("\n\nZapis' dobavlena");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
}
}

do
{
z = 0;
int p = Menu();
switch(p)
{
case 1: ViewDB(); break;
case 2: CreateDB(); break;
case 3: AddToDB(); break;
case 4: SearchInDB(); break;
case 5: SortDB(); break;
case 6:
if(Exit() == 27)
{
z = 1;
break;
}
else break;
}
}while(z == 1);

ZastEnd();
}


//-----------------------------------SEARCHINDB--------------------------------


void SearchInDB()
{
FILE *f=fopen("db.txt", "rb");
FILE *num=fopen("num.txt", "rb");

int j, o;

if(f == NULL || num == NULL)
{
clrscr();
printf("\nNe udayotsja otkrit' fail bazyi dannyih");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
}

else
{
struct record recz[100];

int i, kol;

fread((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila
for(i=0;i<kol;i++)
{
fseek(f, sizeof(recz[i])*i, 0);
fread((char*)&recz[i], 1, sizeof(recz[i]), f);
}

clrscr();
printf("*Poisk zapisej po nomeru ATS*");

int sats; //kluch dlja poiska

printf("\n\nVvedite nomer ATS dlja poiska (tseloe chislo ot 1 do 9)-> ");
sats = Get(1, 9);
gotoxy(1,wherey()+1);
do
{
gotoxy(1,wherey()-2);
printf("Vyi vveli #ATS: '%i'. <Esc> - povtorniy vvod. ", sats);
printf("\n<Enter> - nomer ATS vveden verno. ");
do
{
j = getch();
}while(j != 13 && j != 27);
if(j != 13)
{
printf("\nVvedite zanovo ->");
sats = Get(1, 9);
}
}while(j == 27);

struct record srec[100];
int z, s = 0;

for(z=0;z<kol;z++)
{
if(recz[z].ats == sats)
{
srec[s] = recz[z];
s++;
}
}

if(s == 0) //esli ne naideno ni odnoj zapisi
{
clrscr();
printf("Zapisej s takim nomerom ATS ne naideno");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
}



else
{
int a;

i = 0;

do
{
clrscr();
printf("*Poisk zapisej s nomerom ATS = %i*", sats);
printf("\n\nZapis' #%i", srec[i].num);
printf("\nFIO -> %s %s %s", srec[i].surn, srec[i].name, srec[i].otch);
printf("\nAdres -> ul.%s, d.%i, kv.%i", srec[i].ul, srec[i].dom, srec[i].kv);
printf("\nNomer telefona -> %i", srec[i].tel);
printf("\nATS -> %i", srec[i].ats);

if(s == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska
{
printf("\n\nBol'she zapisej ne naideno");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
i = 101;
}

if(i == 0)
{
printf("\n\nStrelka vniz - sled. zapis' ");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 80 && a != 27);
if(a == 80) i++;
else i = 101;
}

else
{
if(i == s - 1)
{
printf("\n\nStrelka vverh - pred. zapis' ");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 72 && a != 27);
if(a == 72) i--;
else i = 101;
}

else
{
if(i > 0 && i < s)
{
printf("\n\nStrelki vverh/vniz - listanie po zapisyam: pred/sled");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 72 && a != 80 && a != 27);
if(a == 80) i++;
if(a == 72) i--;
if(a == 27) i = 101;
}
}
}

}while(i != 101);

fclose(f);
fclose(num);
}
}


do
{
o = 0;
int o = Menu();
switch(o)
{
case 1: ViewDB(); break;
case 2: CreateDB(); break;
case 3: AddToDB(); break;
case 4: SearchInDB(); break;
case 5: SortDB(); break;
case 6:
if(Exit() == 27)
{
o = 1;
break;
}
}
}while(o == 1);

ZastEnd();
}


//-------------------------------------SORTDB----------------------------------


void SortDB()
{
FILE *f=fopen("db.txt", "rb");
FILE *num=fopen("num.txt", "rb");

int z;

if(f == NULL || num == NULL)
{
clrscr();
printf("\nNe udayotsja otkrit' fail bazi dannih");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
}

else
{
struct record recz[100];

int i, kol;

fread((int*)&kol, 1, sizeof(kol), num);

//zapolnenie massiva zapisjami iz faila
for(i=0;i<kol;i++)
{
fseek(f, sizeof(recz[i])*i, 0);
fread((char*)&recz[i], 1, sizeof(recz[i]), f);
}

int nums[100], atss[100];

for(i=0;i<kol;i++) //sozdanie massiva s nomerami ats iz bazi dannih
{
atss[i] = recz[i].ats;
}

for(i=0;i<kol;i++)
{
nums[i] = recz[i].num;
}

int j, n, tmp, ch = 0;

//sortirovka massiva s nomerami ats i sootv. peremeschenie nomerov zapisej
for(i=0;i<kol;i++)
{
n = i;
for(j=i+1;j<kol;j++)
{
if(atss[j] < atss[n])
{
n = j; //n - nomer min elementa
ch++; //ch - chislo naidennuih zapisej
}
}

tmp = atss[i];
atss[i] = atss[n];
atss[n] = tmp;

tmp = nums[i];
nums[i] = nums[n];
nums[n] = tmp;
}

int a, k = 0;

do
{
n = nums[k]-1;
clrscr();
printf("*Otsortirovannaja baza dannih*");
printf("\n\nZapis' #%i", recz[n].num);
printf("\nFIO -> %s %s %s", recz[n].surn, recz[n].name, recz[n].otch);
printf("\nAdres -> ul.%s, d.%i, kv.%i", recz[n].ul, recz[n].dom, recz[n].kv);
printf("\nNomer telefona -> %i", recz[n].tel);
printf("\nATS -> %i", recz[n].ats);


if(ch == 1) //esli vsego odna zapis' sootvetstvuet usloviju poiska
{
printf("\n\nBol'she zapisej ne naideno");
printf("\nNazhmite lubuju klavishu dlja vihoda v menu");
getch();
k = 101;
}


else
{
if(k == 0)
{
printf("\n\nStrelka vniz - sled. zapis' ");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 80 && a != 27);
if(a == 80) k++;
else k = 101;
}

else
{
if(k == kol - 1)
{
printf("\n\nStrelka vverh - pred. zapis' ");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 72 && a != 27);
if(a == 72) k--;
else k = 101;
}

else
{
if(k > 0 && k < kol)
{
printf("\n\nStrelki vverh/vniz - listanie po zapisyam: pred/sled");
printf("\n<Esc> - vihod v menu");
do
{
a = getch();
}while(a != 72 && a != 80 && a != 27);
if(a == 80) k++;
if(a == 72) k--;
if(a == 27) k = 101;
}
}
}
}
}while(k != 101);
}

fclose(f);
fclose(num);

do
{
z = 0;
int p = Menu();
switch(p)
{
case 1: ViewDB(); break;
case 2: CreateDB(); break;
case 3: AddToDB(); break;
case 4: SearchInDB(); break;
case 5: SortDB(); break;
case 6:
if(Exit() == 27)
{
z = 1;
break;
}
}
}while(z == 1);

ZastEnd();
}


//-------------------------------------GET-------------------------------------


int Get(int min, int max)
{
int i = 0;

fscanf(stdin, "%d", &i);
fflush(stdin);

while ((i==0)||(i>max)||(i<min))
{
gotoxy(1,wherey());
cprintf("Neverniy vvod, povtorite popitku (%d - %d): ", min,max);
fscanf(stdin, "%d", &i);
fflush(stdin);
}
return i;
}
1
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 3
15.10.2011, 22:39  [ТС] 3
спасибо большое))вы мне очень помогли)

Добавлено через 20 минут
у меня проблема с построчным считыванием инфы с txt файла)
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,635
15.10.2011, 22:59 4
https://www.cyberforum.ru/cpp-beginners/thread222524-page9.html

Добавлено через 12 секунд
сообщение 84
0
0 / 0 / 0
Регистрация: 15.10.2011
Сообщений: 3
20.10.2011, 22:12  [ТС] 5
скиньте пожалуйста алгоритм поиска фамилии в txt файле)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2011, 22:12

Телефонный справочник
Прога читает из файла, есть поиск по имени и по адресу. Никак не могу реализовать поиск по номеру....

Телефонный справочник
Здравствуйте пытаюсь разобрать такую программу изкнижки Напишите программу, которая позволяет...

Телефонный справочник
Здравствуйте пытаюсь разобрать такую программу изкнижки Напишите программу, которая позволяет...

телефонный справочник
Создать телефонный справочник для осуществления следующих операций: Добавление абонентов в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.