C++ помощ

0 отговора 0 прегледа
#1

C++ помощ

Здравейте! Това ми е задачата за курсовата ми работа:
Съставете програма с менюта за избор и функции за:
а) Въвеждане от клавиатурата в масиж и файл данните за футболни отбори от "А" ПРФГ: отбор, вкарани голове, допуснати голове, точки.
б)отбор с най-добра голова разлика(със запитване за нова справка)

Та аз тази програма я направих, само б) не можах. Дори това, което съм направил тръгва и работи... така че ако някои може да помага, че трябва да я предавам...
Доро може това да се сложи на мястото на справката за отбори, понеже сега разбра, че тя не била нужна
Ето го и сорса:

#include <iostream> //deklarirame nujnite ni biblioteki za programata
#include <fstream>
#include <string>
#include <conio.h>
#define N 20

using namespace std;

int total=0; //promenliva total,koqto sochi za nachalniq broi otbori


struct otbor { //suzdavame struktura i deklarirame promenlivite
char name[40];
int vkarani;
int dopusnati;
int tochki;
} otbori[500],tempotbor;

void dobavqne(); //dobavqme nov otbor
void pokazvane(); //pokazvame vsichki otbori do momenta
int search_otb(char tmpfak[10]); //tusim otbor
void refreshfile(); //iztrivame vsicho ot faila i go zapisvame na novo
void showotb(int st); //pokazvame dannite na daden otbor
void spravka_otbor(); //spravka za otbor


int loaded=0; //dali sme zarejdali purvonachalno ot fail

int main()
{
if(!loaded)
{
//zarejdame ot fail purviq put kato puskame programata
fstream f ;
f.open("DATA.dat",ios::in|ios::binary);

if(f.is_open()) //chetem ot faila
{
int tmp=0;
while(f.read(reinterpret_cast<char *>(&otbori[tmp++]),sizeof(otbor)));

total=tmp-1;
}


f.close();

//otbelqzvame che veche sme zaredili ot faila za da ne zarejda pak
loaded=1;
}

int a;
while(1) //pokazvame menuto
{
system("cls"); //izchistvame ekrana
system("color 4e"); //cvqt na teksta

cout<<endl<<endl;
cout<<"------Profesionalna futbolna liga------"<<endl;
cout<<endl<<endl;
cout<<endl<<"*************************** ******************";
cout<<endl<<"*\t MENU *";
cout<<endl<<"*\t1.Dobavqne na nov otbor *";
cout<<endl<<"*\t2.Pokazvane na vsichki otbori *";
cout<<endl<<"*\t3.Spravka za otbor *";
cout<<endl<<"*\t4.Izhod *";
cout<<endl<<"*************************** ******************";
cout<<endl<<"\n Molq Napravete Vashiqt izbor: ";

cin>>a;

switch(a)
{
case 1: dobavqne(); break; //izvikvame suotvetnata funkciq
case 2: pokazvane(); break;
case 3: spravka_otbor(); break;
case 4: exit(1); break;
}

}
return 1;
}

void pokazvane()
{
if(!total) //proverqva za sustoqnieto na total,ako e ravno na nula - nqma vavedeni
{
cout << "\n\n\tNqma vuvedeni otbori";
}

else //ili pokazva vsichki otbori
{
cout << "\n\n\tPokazvane na vsichki otbori ";
for(int i=0;i<total;i++) //operator,s koito obhojdame vsichki nalichni zapisi
{
showotb(i); //pokazvame dannite za vsichki otbori
}
}

getch(); //zadurjame informaciqta,za da e vidima ot potrebitelq
}

void dobavqne()
{
cout << "\n\n\tDobavqne na otbor "<<(total+1); //dobavqme otbor,kato pronemlivata total narastva


cout << "\n\n\tIme na otbor: "; //vuvejdame danni za otbora
fflush(stdin); //chistim pametta na bufera
gets(otbori[total].name); //chrez stringove izvlichame imeto na otbora


cout<<"\n\tVkarani golove: ";
fflush(stdin);
cin >>otbori[total].vkarani; //chrez stringove izvlichame vkaranite golove


cout<<"\n\tDopusnati golove: ";
fflush(stdin);
cin >> otbori[total].dopusnati; //chrez stringove izvlichame dopusnatite golove


cout<<"\n\tTochki: ";
fflush(stdin);
cin >> otbori[total].tochki; //chrez stringove izvlichame tochkite na otbora


//funkciq za zapisvame vuv fail

fstream f;

f.open("DATA.DAT",ios:ut | ios::app);

if(!f.is_open()) {cout << "\n\tGreshka pri otvarqne na faila!";return;}


f.write(reinterpret_cast<char *>(&otbori[total]),sizeof(otbor));

f.close();

//uvelichavame obshtiq broi otbori
total++;
}

void showotb(int st) //pokazvame dannite na otbora,otgovarqsht na zadadenite kriterii
{
cout << "\n\n\tOtbor "<<(st+1); //poreden nomer na otbora

cout << "\n\n\tIme: "<< otbori[st].name; //pokazva imeto na otbora
cout<<"\n\tVkarani golove: " << otbori[st].vkarani; //pokazva vkaranite golove
cout<<"\n\tDopusnati golove: " << otbori[st].dopusnati; //pokazva dopusnatite golove
cout<<"\n\tTochki: " << otbori[st].tochki; //pokazva broq tochki na otbora

}


void refreshfile()
{
fstream f;

f.open("DATA.DAT",ios:ut | ios::trunc);
if(!f.is_open()) {cout << "\n\tGreshka pri otvarqne na faila!";return;}

for(int i=0;i<total;i++)
{
f.write(reinterpret_cast<char *>(&otbori),sizeof(otbor)); //zapisvame vsichki otbori vuv faila
}

f.close();
}

int search_otb(char tmpfak[10])
{
for(int i=0;i<total;i++)
{
if(!strcmp(tmpfak,otbori.name)) //sravnqvame imenata na otborite s turseniq edin po edin
{
return i;
}
}

return -1;
}

void spravka_otbor()
{
char tmpfak[50]; //suzdavame si nova promenliva ot tip char
cout << "\n\n\tSpravka za otbor";
cout << "\n\n\tVuvedete ime na otbor: "; //vavejdame imeto na otbora,po koeto she tursim

fflush(stdin); //chistim bufera ot tekushtata informaciq
gets(tmpfak);

int foundpos=-1; //nova promenliva za turseneto tekushtata spravka

foundpos = search_otb(tmpfak);

if(foundpos==-1) //ako ne nameri suvpadenie izliza informaciqta
{
cout << "\n\n\tNe beshe nameren otbor!";
getch();
return;
}


cout << "\n\n\tPokazvane na otbor ";
showotb(foundpos); //pokazvane na otbor

getch();
}

Отговор