Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int honapok[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- typedef struct _elovadasz{
- char nev[2];
- char nemzet[3];
- int hanyadik;
- struct _elovadasz *p_kov;
- }elovadasz;
- typedef struct _monogramm {
- char monogramm[2];
- int n_edik;
- struct _monogramm *p_kov;
- }monogramm_def;
- typedef struct _vadasz_licence{
- unsigned char nev[6];
- struct _vadasz_licence*p_kov;
- }vadasz_licence;
- typedef struct _vadaszazonosito {
- char vadasznev[4];
- double penz;
- int vadak[27];
- int nvadak;
- struct _vadaszazonosito *p_kov;
- }vadaszazonosito;
- elovadasz* beszur_elovadasz (elovadasz *p_elofej, char nev[],char nemzet[], int hanyadik);
- monogramm_def *beszur_monogramm (monogramm_def *p_monogrammfej, char nev[]);
- monogramm_def* keres_monogramm (monogramm_def *p_monogrammfej, char monogramm0, char monogramm1);
- vadaszazonosito* beszur_vadaszazonosito (vadaszazonosito* p_vadasz_az_fej,char nev[]);
- void nev_atalakito(int szam, char betu[], char nev[]);
- vadaszazonosito* keres_azonosito(vadaszazonosito* p_vadasz_az_fej, unsigned char adat[]);
- void datum (unsigned char dat[]);
- vadasz_licence * beszur_vadasz_licence (vadasz_licence* p_vadasz_licence_fej, unsigned char nev[]);
- vadasz_licence* keres_vadasz_licence(vadasz_licence* p_vadasz_licence_fej, unsigned char adat_trofea[]);
- double penz_atalakit(long szam);
- int keres_vad(vadaszazonosito *p_vadasz_az_fej, char vadszam);
- int main(){
- FILE *f_hunter;
- FILE *f_licence;
- FILE *f_trofea;
- int hanyadik=0;
- char nev[2];
- char nemzet[3];
- char nev_vadasz[4];
- unsigned char adat[6];
- unsigned char adat_trofea[7];
- long penz;
- elovadasz *p_elofej=NULL;
- elovadasz *p_etemp;
- monogramm_def *p_monogrammfej=NULL;
- monogramm_def* p_mon_temp;
- vadaszazonosito* p_vadasz_az_fej=NULL;
- vadaszazonosito *p_atemp;
- vadasz_licence *p_vadasz_licence_fej=NULL;
- vadasz_licence *p_vadlic_temp;
- int vadak_max=0;
- vadaszazonosito* p_legtobb_vadat_lott;
- f_hunter=fopen("HUNTER.TXT", "r");
- f_licence=fopen("LICENCE.DAT", "rb");
- f_trofea=fopen("TROPHY.DAT","rb");
- /*beolvas HUHNET.TXT-ből és eltérolja egy átmeneti tömbben, mad bemásolja az elovadasz lancolt verembe.*/
- while ( fscanf(f_hunter,"%c%*[^,], %c%*[^\n]\n%3c%*[^\n]\n", &nev[1], &nev[0], nemzet)==3){ /*beolvassa a monogrammot és a nemzetiséget amíg a file tart*/
- p_mon_temp=keres_monogramm(p_monogrammfej,nev[0],nev[1]);
- if (p_mon_temp==NULL){
- p_monogrammfej=beszur_monogramm(p_monogrammfej,nev);
- p_mon_temp=p_monogrammfej;
- }
- else
- hanyadik=(p_mon_temp->n_edik=p_mon_temp->n_edik+1);
- p_elofej=beszur_elovadasz (p_elofej, nev, nemzet,p_mon_temp->n_edik); /*ideiglenes állományokból elovadasz láncolt verembe rak*/
- }
- /*vadász azonosítóját monogramm, sorszám karakterként "GH01" hozza létre, felépíti a vermet de csak a norvégokból*/
- p_etemp=NULL;
- p_etemp=p_elofej;
- while(p_etemp!=0){
- if (p_etemp->nemzet[0]=='N' && p_etemp->nemzet[1]=='O' && p_etemp->nemzet[2]=='R' ){
- nev_atalakito (p_etemp->hanyadik, nev_vadasz, p_etemp->nev);/*vadász monogrammjának a sorszámát 2 karakterré alakítja: 2->02*/
- p_vadasz_az_fej=beszur_vadaszazonosito(p_vadasz_az_fej, nev_vadasz);
- p_etemp=p_etemp->p_kov;
- }
- else
- p_etemp=p_etemp->p_kov;
- }
- p_atemp=p_vadasz_az_fej;
- fread(adat,1,6,f_licence); /*beolvassa a licence fájlt 4 B (név+sorszám), 2 Byte hónap, nap*/
- while(feof(f_licence)==0){
- p_atemp=keres_azonosito(p_vadasz_az_fej,adat); /*ha a licence megegyezik a gyüjtött vadászok valamelyikével*/
- if (p_atemp!=NULL){
- datum (adat); /*a beolvasott dátumhoz hozzáad 14 napot*/
- p_vadasz_licence_fej=beszur_vadasz_licence(p_vadasz_licence_fej, adat); /*új vermet készít a vadász kódja+ licence utolsó napjából*/
- }
- fread(adat,1,6,f_licence);
- }
- fread(adat_trofea,1,7,f_trofea); /*beolvas: név(4) elejtés dátuma(2), vad kódja(1)*/
- fread(&penz,3,1,f_trofea); /*beolvas: pénz(3)*/
- while(feof(f_trofea)==0){
- p_vadlic_temp=keres_vadasz_licence(p_vadasz_licence_fej, adat_trofea); /*keresi azt a vadászkódot+napot amit eltárolt, a vadász licence érvénnyességének utosó napját*/
- if (p_vadlic_temp!=NULL){
- penz=penz_atalakit (penz); /*beolvasott pénzt long tipusúvá (int is elég lett volna) alakítja*/
- p_atemp=keres_azonosito(p_vadasz_az_fej, adat_trofea); /*megkeresi a vadászt akihet az elejtett vad tartozik és hozzáadja ha megvan (lennie kell ilyennek)*/
- if (p_atemp!=NULL){
- p_atemp->penz=p_atemp->penz+penz; /*vadász lőtt vadjainak értékéhez hozzáadja a most lőtt vad értékét*/
- if(!keres_vad(p_atemp, adat_trofea[6])){ /*ha nem lőtt még ilyen vadat*/
- p_atemp->nvadak=p_atemp->nvadak+1; /*vadak tömb elemszáma ++ (megnöveli a lőtt vadfélék számát*/
- p_atemp->vadak[p_atemp->nvadak-1]=adat_trofea[6]; /*vadak tömbhöz hozzáad a vad száma ha még nem lőtt olyan vadászt*/
- }
- }
- }
- fread(adat_trofea,1,7,f_trofea);
- fread(&penz,3,1,f_trofea);
- }
- p_legtobb_vadat_lott=p_atemp=p_vadasz_az_fej;
- while(p_atemp!=NULL){ /*kikeresi azt a vadászt amelyik a legtöbbféle vadat lőtte*/
- if (vadak_max<=p_atemp->nvadak){
- vadak_max=p_atemp->nvadak;
- p_legtobb_vadat_lott=p_atemp;
- }
- p_atemp=p_atemp->p_kov;
- }
- printf("%.0f",p_legtobb_vadat_lott->penz);
- return p_legtobb_vadat_lott->penz; /*visszatér vadak értéke annál a vadásznál aki a legtöbb féle vadat lőtte*/
- }
- elovadasz* beszur_elovadasz (elovadasz *p_elofej, char nev[],char nemzet[], int hanyadik){
- int i;
- elovadasz *uj;
- uj=(elovadasz*) calloc(1,sizeof(elovadasz));
- for(i=0;i<2;i++)
- uj->nev[i]=nev[i];
- for (i=0;i<3;i++)
- uj->nemzet[i]=nemzet[i];
- uj->hanyadik=hanyadik;
- uj->p_kov=p_elofej;
- p_elofej=uj;
- return p_elofej;
- }
- monogramm_def *beszur_monogramm (monogramm_def *p_monogrammfej, char nev[]){
- int i;
- monogramm_def *uj;
- uj=(monogramm_def*) calloc(1,sizeof(monogramm_def));
- /*strcpy(új->monogramm,nev);*/
- for(i=0;i<2;i++)
- uj->monogramm[i]=nev[i];
- uj->n_edik=1;
- uj->p_kov=p_monogrammfej;
- p_monogrammfej=uj;
- return p_monogrammfej;
- }
- monogramm_def* keres_monogramm (monogramm_def *p_monogrammfej, char monogramm0,char monogramm1){
- monogramm_def *p_mtemp;
- p_mtemp=p_monogrammfej;
- while(p_mtemp!=NULL) {
- if(p_mtemp->monogramm[0]==monogramm0 && p_mtemp->monogramm[1]==monogramm1)
- return p_mtemp;
- p_mtemp=p_mtemp->p_kov;
- }
- return 0;
- }
- vadaszazonosito* beszur_vadaszazonosito (vadaszazonosito* p_vadasz_az_fej,char nev[]){
- int i;
- vadaszazonosito* uj;
- uj=(vadaszazonosito*) calloc(1,sizeof(vadaszazonosito));
- /*strcpy(új->vadasznev,nev);*/
- for(i=0;i<4;i++)
- uj->vadasznev[i]=nev[i];
- for(i=0;i<27;i++)
- uj->vadak[i]=0;
- uj->nvadak=0;
- uj->penz=0;
- uj->p_kov=p_vadasz_az_fej;
- p_vadasz_az_fej=uj;
- return p_vadasz_az_fej;
- }
- /*a vadások neveit átalakítja hogy a sorszáma bekerüljön a nevébe mint karakter*/
- void nev_atalakito (int szam, char betu[], char nev[]){
- int temp;
- temp=szam;
- temp=temp%10;
- szam=(szam-temp)/10;
- switch (szam) {
- case 0: betu[2]='0'; break;
- case 1: betu[2]='1'; break;
- case 2: betu[2]='2'; break;
- case 3: betu[2]='3'; break;
- case 4: betu[2]='4'; break;
- case 5: betu[2]='5'; break;
- case 6: betu[2]='6'; break;
- case 7: betu[2]='7'; break;
- case 8: betu[2]='8'; break;
- case 9: betu[2]='9'; break;
- }
- switch (temp){
- case 0: betu[3]='0'; break;
- case 1: betu[3]='1'; break;
- case 2: betu[3]='2'; break;
- case 3: betu[3]='3'; break;
- case 4: betu[3]='4'; break;
- case 5: betu[3]='5'; break;
- case 6: betu[3]='6'; break;
- case 7: betu[3]='7'; break;
- case 8: betu[3]='8'; break;
- case 9: betu[3]='9'; break;
- }
- betu[0]=nev[0];
- betu[1]=nev[1];
- }
- vadaszazonosito* keres_azonosito(vadaszazonosito* p_vadasz_az_fej, unsigned char adat[]){
- vadaszazonosito* p_temp;
- p_temp=p_vadasz_az_fej;
- while(p_temp!=NULL) {
- if (p_temp->vadasznev[0]==adat[0] && p_temp->vadasznev[1]==adat[1] && p_temp->vadasznev[2]==adat[2] && p_temp->vadasznev[3]==adat[3])
- return p_temp;
- p_temp=p_temp->p_kov;
- }
- return 0;
- }
- void datum (unsigned char dat[]){
- dat[5]+=13;
- if (dat[5]-honapok[dat[4]]>0){
- dat[5]-=honapok[dat[4]];
- dat[4]++;
- if (dat[4]>12)
- dat[4]-=12;
- }
- }
- vadasz_licence * beszur_vadasz_licence (vadasz_licence* p_vadasz_licence_fej, unsigned char nev[]){
- int i;
- vadasz_licence *uj;
- uj=(vadasz_licence*) calloc (1, sizeof(vadasz_licence));
- for(i=0;i<6;i++)
- uj->nev[i]=nev[i];
- uj->p_kov=p_vadasz_licence_fej;
- p_vadasz_licence_fej=uj;
- return p_vadasz_licence_fej;
- }
- vadasz_licence* keres_vadasz_licence(vadasz_licence* p_vadasz_licence_fej, unsigned char adat_trofea[]){
- vadasz_licence *p_temp;
- p_temp=p_vadasz_licence_fej;
- while(p_temp!=NULL){
- if(p_temp->nev[0]==adat_trofea[0] && p_temp->nev[1]==adat_trofea[1] && p_temp->nev[2]==adat_trofea[2] &&
- p_temp->nev[3]==adat_trofea[3] && p_temp->nev[4]==adat_trofea[4] &&p_temp->nev[5]==adat_trofea[5] ){
- return p_temp;
- }
- p_temp=p_temp->p_kov;
- }
- return NULL;
- }
- double penz_atalakit (long szam){
- int eltol;
- eltol=(sizeof(long)-3)*8;
- szam=szam<<eltol;
- szam=szam>>eltol;
- if (szam<0)
- szam*=-1;
- return (double) szam;
- }
- int keres_vad(vadaszazonosito *p_vadasz, char vadszam){
- int i;
- for(i=0;i<p_vadasz->nvadak;i++)
- if(p_vadasz->vadak[i]==vadszam)
- return 1;
- return 0;
- }
Add Comment
Please, Sign In to add comment