Hladanie podla ev. cisla – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hladanie podla ev. cisla – C / C++ – Fórum – Programujte.comHladanie podla ev. cisla – C / C++ – Fórum – Programujte.com

 

12. 5. 2009   #1
-
0
-

Potrebujem poradit, ako do tohoto programu dorobim funkciu na vyhladanie podla evidencneho cisla...nevie to niekto nahodou? Mne to stale nejak nechce ist.




#include "stdio.h"
#include "malloc.h"
#include "string.h"

#define MAX_LENGTH 100
#define COUNT_ITEM 50
struct PARAM
{
char *Meno;
char *Priezvisko;
char *Rocnik;
char *Odbor;
char *Cislo;
};

struct PARAM *g_Param[COUNT_ITEM];
FILE *g_file;

void Vypis( int PocetZ )
{
int i;

for( i = 0; i < PocetZ; i++ )
{
printf( "[%d] %s\t %s\t\t %s %s %s\n", i,
g_Param[i]->Priezvisko,
g_Param[i]->Meno,
g_Param[i]->Rocnik,
g_Param[i]->Odbor,
g_Param[i]->Cislo);
}
}

void FreeMem( int UvolniP )
{
free( g_Param[UvolniP ]->Meno );
free( g_Param[UvolniP ]->Priezvisko );
free( g_Param[UvolniP ]->Rocnik );
free( g_Param[UvolniP ]->Odbor );
free( g_Param[UvolniP ]->Cislo );

free( g_Param[UvolniP ]);
}

void Pridaj( int *pPocetZ )
{
if( *pPocetZ < COUNT_ITEM )
{
g_Param[*pPocetZ] = (struct PARAM *) malloc(sizeof(struct PARAM));

g_Param[*pPocetZ]->Meno = (char*) malloc(MAX_LENGTH);
printf( "Zadaj meno : ");
scanf( "%s", g_Param[*pPocetZ]->Meno );

g_Param[*pPocetZ]->Priezvisko = (char*) malloc(MAX_LENGTH);
printf( "\nZadaj priezvisko : ");
scanf( "%s", g_Param[*pPocetZ]->Priezvisko );

g_Param[*pPocetZ]->Rocnik = (char*) malloc(MAX_LENGTH);
printf( "\nZadaj aktualny rocnik : ");
scanf( "%s", g_Param[*pPocetZ]->Rocnik );

g_Param[*pPocetZ]->Odbor = (char*) malloc(MAX_LENGTH);
printf( "\nZadaj studijny odbor : ");
scanf( "%s", g_Param[*pPocetZ]->Odbor );

g_Param[*pPocetZ]->Cislo = (char*) malloc(MAX_LENGTH);
printf( "\nZadaj evidencne cislo : ");
scanf( "%s", g_Param[*pPocetZ]->Cislo );

(*pPocetZ)++;
}
else
{
printf( "Zoznam je plny" );
}
}

void Zmaz(int *pPocetZ)
{
int i;
int UvolniP ;

Vypis( *pPocetZ );

if( *pPocetZ != 0 )
{
printf( "Zadaj cislo zaznamu ktory chces zmazat : " );
scanf( "%d", &UvolniP );

for( i = UvolniP ; i < ((*pPocetZ)-1); i++ )
{
strcpy( g_Param[i]->Meno,g_Param[i+1]->Meno);
strcpy( g_Param[i]->Priezvisko,g_Param[i+1]->Priezvisko);
strcpy( g_Param[i]->Rocnik,g_Param[i+1]->Rocnik);
strcpy( g_Param[i]->Odbor,g_Param[i+1]->Odbor);
strcpy( g_Param[i]->Cislo,g_Param[i+1]->Cislo);
}

if ((*pPocetZ)-1==0)
{
FreeMem( 0 );
}
else
{
FreeMem( (*pPocetZ)-1 );
}

(*pPocetZ)--;
}
else
{
printf( "!!! Prazdny zoznam !!!\n" );
}
}

void Zotried(int PocetZ)
{
int i;
int j;

struct PARAM *helpParam;

for( i = 0; i < PocetZ-1; i++)
{
for( j = i+1; j < PocetZ; j++ )
{
if( strcmp( g_Param[j]->Priezvisko, g_Param[i]->Priezvisko ) < 0 )
{
helpParam = g_Param[j];
g_Param[j] = g_Param[i];
g_Param[i] = helpParam;
}
}
}
}


void Nacitaj( int *pPocetZ )
{
int nRet;
int i;

for( i = 0; i < *pPocetZ; i++ )
{
FreeMem( i );
}

*pPocetZ = 0;

g_file = fopen( "zoznam studentov.dat", "r" );
do
{
if( *pPocetZ < COUNT_ITEM )
{
g_Param[*pPocetZ] = (struct PARAM *) malloc(sizeof(struct PARAM));

g_Param[*pPocetZ]->Meno = (char*) malloc(MAX_LENGTH);
g_Param[*pPocetZ]->Priezvisko = (char*) malloc(MAX_LENGTH);
g_Param[*pPocetZ]->Rocnik = (char*) malloc(MAX_LENGTH);
g_Param[*pPocetZ]->Odbor = (char*) malloc(MAX_LENGTH);
g_Param[*pPocetZ]->Cislo = (char*) malloc(MAX_LENGTH);

nRet = fscanf( g_file, "%s\t%s\t%s\t%s\t%s\n",
g_Param[*pPocetZ]->Meno,
g_Param[*pPocetZ]->Priezvisko,
g_Param[*pPocetZ]->Rocnik,
g_Param[*pPocetZ]->Odbor,
g_Param[*pPocetZ]->Cislo);

if( nRet != EOF )
{
(*pPocetZ)++;
}
else
{
FreeMem( *pPocetZ );
// (*pPocetZ)--;
}
}
else
{
printf( "Zoznam je plny" );
break;
}
}while( nRet != EOF );

fclose( g_file );
}

void Uloz( int PocetZ )
{
int i;

g_file = fopen( "zoznam studentov.dat", "w" );
if( g_file == NULL )
{
printf("nemozem zapisat");
}
else
{
for( i = 0; i < PocetZ; i++ )
{
fprintf( g_file, "%s\t%s\t%s\t%s\t%s\n",
g_Param[i]->Meno,
g_Param[i]->Priezvisko,
g_Param[i]->Rocnik,
g_Param[i]->Odbor,
g_Param[i]->Cislo);
}

fclose( g_file );
}
}

void main()
{
char CisloO;
int PocetZ;
int i;

PocetZ = 0;

do
{
printf( "\n******************* MENU *******************\n\n" );
printf( "\t[1]. \tPridanie studenta\n");
printf( "\t[2]. \tOdstranenie studenta\n");
printf( "\t[3]. \tUsporiadanie podla priezviska\n");
printf( "\t[4]. \tHladanie podla evidencneho cisla\n");
printf( "\t[5]. \tVypis studentov\n" );
printf( "\t[6]. \tUlozenie do suboru\n");
printf( "\t[7]. \tNacitanie zo suboru\n");
printf( "\t[8]. \tUkoncenie programu\n" );
printf( "\n******************* MENU *******************\n" );
printf( "\nZadaj volbu : " );
scanf( "%s", &CisloO );
printf( "\n" );


switch( CisloO )
{
case '1': Pridaj( &PocetZ );
break;
case '2': Zmaz( &PocetZ );
break;
case '3': Zotried( PocetZ);
break;
case '4': Hladaj( PocetZ );
break;
case '5': Vypis( PocetZ );
break;
case '6': Uloz( PocetZ );
break;
case '7': Nacitaj( &PocetZ );
break;
}
}while( CisloO != '8' );

for( i = 0; i < PocetZ; i++ )
{
FreeMem( i );
}
}

Nahlásit jako SPAM
IP: 195.168.209.–
KIIV
~ Moderátor
+43
God of flame
12. 5. 2009   #2
-
0
-

nebude to tim ze funkci Hladaj vubec nemas vytvorenou?

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
12. 5. 2009   #3
-
0
-

jasne ze tu neni...lebo som to dala prec, furt mi to neslo...nevies mi to spravit? ze by si to dorobil do toho?

Nahlásit jako SPAM
IP: 195.168.209.–
m->29+6
Super člen
12. 5. 2009   #4
-
0
-

Daj sem čo máš + nejaký ten popis čo od toho čakáš okrem toho hľadania a niekto ti už pomôže :-)

Nahlásit jako SPAM
IP: 147.229.208.–
12. 5. 2009   #5
-
0
-

zadanie je taketo...

Zostavte program pre evidenciu študentov. O každom študentovi sa budú
evidovať tieto údaje: meno, priezvisko, ročník, odbor, evidenčné číslo.
Program má umožniť pridanie študenta, odstránenie študenta, usporiadanie
podľa priezviska a vyhľadanie podľa evidenčného čísla.
Na reprezentáciu zoznamu študentov použite statické pole smerníkov a
jednotlivé položky záznamu nech majú dynamickú veľkosť. Záznamy
reprezentujte štruktúrami a zoznam nech je uložený v súbore. Použite
vlastné funkcie s parametrami.

....a vsetko ide ako ma, len to hladanie tam neviem do toho nejak dat :(

Nahlásit jako SPAM
IP: 195.168.209.–
o-lox0
Super člen
12. 5. 2009   #6
-
0
-

A něco takového to být nemá?

int Hledaj( int PocetZ , int hledane ) 

{
int i;

for( i = 0; i < PocetZ; i++ )
{
if (atoi(g_Param[i]->Cislo)==hledane) {
printf( "[%d] %s\t %s\t\t %s %s %s\n", i,
g_Param[i]->Priezvisko,
g_Param[i]->Meno,
g_Param[i]->Rocnik,
g_Param[i]->Odbor,
g_Param[i]->Cislo);
return i;
}
}
return -1;
}

EDIT: udelal jsem to 2 parametrove, nebo by slo mit globalni promennou pocetZ, nebo testovat zda je g_Param[i]==NULL.

Nahlásit jako SPAM
IP: 85.71.152.–
m->29+6
Super člen
12. 5. 2009   #7
-
0
-
Nahlásit jako SPAM
IP: 147.229.208.–
Nosko0
Stálý člen
12. 5. 2009   #8
-
0
-

Mierne OT: Nič v zlom, ale ak si sám naprogramoval ten program a dokažeš používať konštrukcie typu

g_Param[*pPocetZ] = (struct PARAM *) malloc(sizeof(struct PARAM));

tak dokodiť nejake hľadanie, ktoré pozostáva z jednej podmienky a foru ti nemôže robiť problém.
:smile1:

Nahlásit jako SPAM
IP: 84.16.37.–
13. 5. 2009   #9
-
0
-

no vidis...sama neviem ako je to mozne...aj ked sa priznam ze mi s tym trosku pomahal kamarat...no na toto sme vtedy zabudli...

Nahlásit jako SPAM
IP: 195.168.209.–
13. 5. 2009   #10
-
0
-

To o-lox : ahoj o-lox. no presne tak nejak som to robila aj ja, neviem ci som uz blba alebo co, ale furt to nejde. Joj. :smile10:

Nahlásit jako SPAM
IP: 195.168.209.–
o-lox0
Super člen
13. 5. 2009   #11
-
0
-

To aadulienkaa :
Máš dejme tomu nějaká kola, ale ta ti pohromadě sama držet a káru dělat nebudou..
Načítáš také to ev. číslo z klávesnice, které pak chceš hledat? - scanf()

Nahlásit jako SPAM
IP: 85.71.152.–
m->29+6
Super člen
13. 5. 2009   #12
-
0
-

No mne tá funkcia od o-loxa ide. Je pravda, že som spravil malé úpravy (zmenil som ju na 1-parametrovú a vložil scanf() do funkcie na načítanie vstupu), tak aby sa podobala na tie ostatné funkcie. Ale, tá malá pomoc sa mi nezdá až taká malá. Ak nezvládneš takúto maličkosť a mala by si vedieť spraviť celý ten program sama, tak to ti odporúčam si čo to o C prečítať ;-)
http://www.sallyx.org/sally/c/

Nahlásit jako SPAM
IP: 147.229.208.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý