Guest User

Untitled

a guest
Jul 17th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. int honapok[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  6.  
  7. typedef struct _elovadasz{
  8. char nev[2];
  9. char nemzet[3];
  10. int hanyadik;
  11. struct _elovadasz *p_kov;
  12. }elovadasz;
  13.  
  14. typedef struct _monogramm {
  15. char monogramm[2];
  16. int n_edik;
  17. struct _monogramm *p_kov;
  18. }monogramm_def;
  19.  
  20.  
  21. typedef struct _vadasz_licence{
  22. unsigned char nev[6];
  23. struct _vadasz_licence*p_kov;
  24. }vadasz_licence;
  25.  
  26. typedef struct _vadaszazonosito {
  27. char vadasznev[4];
  28. double penz;
  29. int vadak[27];
  30. int nvadak;
  31. struct _vadaszazonosito *p_kov;
  32. }vadaszazonosito;
  33.  
  34.  
  35. elovadasz* beszur_elovadasz (elovadasz *p_elofej, char nev[],char nemzet[], int hanyadik);
  36. monogramm_def *beszur_monogramm (monogramm_def *p_monogrammfej, char nev[]);
  37. monogramm_def* keres_monogramm (monogramm_def *p_monogrammfej, char monogramm0, char monogramm1);
  38. vadaszazonosito* beszur_vadaszazonosito (vadaszazonosito* p_vadasz_az_fej,char nev[]);
  39. void nev_atalakito(int szam, char betu[], char nev[]);
  40. vadaszazonosito* keres_azonosito(vadaszazonosito* p_vadasz_az_fej, unsigned char adat[]);
  41. void datum (unsigned char dat[]);
  42. vadasz_licence * beszur_vadasz_licence (vadasz_licence* p_vadasz_licence_fej, unsigned char nev[]);
  43. vadasz_licence* keres_vadasz_licence(vadasz_licence* p_vadasz_licence_fej, unsigned char adat_trofea[]);
  44. double penz_atalakit(long szam);
  45. int keres_vad(vadaszazonosito *p_vadasz_az_fej, char vadszam);
  46.  
  47. int main(){
  48.  
  49. FILE *f_hunter;
  50. FILE *f_licence;
  51. FILE *f_trofea;
  52.  
  53. int hanyadik=0;
  54. char nev[2];
  55. char nemzet[3];
  56. char nev_vadasz[4];
  57. unsigned char adat[6];
  58. unsigned char adat_trofea[7];
  59. long penz;
  60.  
  61. elovadasz *p_elofej=NULL;
  62. elovadasz *p_etemp;
  63. monogramm_def *p_monogrammfej=NULL;
  64. monogramm_def* p_mon_temp;
  65. vadaszazonosito* p_vadasz_az_fej=NULL;
  66. vadaszazonosito *p_atemp;
  67. vadasz_licence *p_vadasz_licence_fej=NULL;
  68. vadasz_licence *p_vadlic_temp;
  69. int vadak_max=0;
  70. vadaszazonosito* p_legtobb_vadat_lott;
  71.  
  72.  
  73. f_hunter=fopen("HUNTER.TXT", "r");
  74. f_licence=fopen("LICENCE.DAT", "rb");
  75. f_trofea=fopen("TROPHY.DAT","rb");
  76.  
  77. /*beolvas HUHNET.TXT-ből és eltérolja egy átmeneti tömbben, mad bemásolja az elovadasz lancolt verembe.*/
  78.  
  79. 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*/
  80. p_mon_temp=keres_monogramm(p_monogrammfej,nev[0],nev[1]);
  81. if (p_mon_temp==NULL){
  82. p_monogrammfej=beszur_monogramm(p_monogrammfej,nev);
  83. p_mon_temp=p_monogrammfej;
  84. }
  85. else
  86. hanyadik=(p_mon_temp->n_edik=p_mon_temp->n_edik+1);
  87.  
  88. p_elofej=beszur_elovadasz (p_elofej, nev, nemzet,p_mon_temp->n_edik); /*ideiglenes állományokból elovadasz láncolt verembe rak*/
  89.  
  90. }
  91. /*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*/
  92. p_etemp=NULL;
  93. p_etemp=p_elofej;
  94. while(p_etemp!=0){
  95. if (p_etemp->nemzet[0]=='N' && p_etemp->nemzet[1]=='O' && p_etemp->nemzet[2]=='R' ){
  96. nev_atalakito (p_etemp->hanyadik, nev_vadasz, p_etemp->nev);/*vadász monogrammjának a sorszámát 2 karakterré alakítja: 2->02*/
  97. p_vadasz_az_fej=beszur_vadaszazonosito(p_vadasz_az_fej, nev_vadasz);
  98. p_etemp=p_etemp->p_kov;
  99. }
  100. else
  101. p_etemp=p_etemp->p_kov;
  102. }
  103.  
  104.  
  105. p_atemp=p_vadasz_az_fej;
  106.  
  107. fread(adat,1,6,f_licence); /*beolvassa a licence fájlt 4 B (név+sorszám), 2 Byte hónap, nap*/
  108. while(feof(f_licence)==0){
  109. p_atemp=keres_azonosito(p_vadasz_az_fej,adat); /*ha a licence megegyezik a gyüjtött vadászok valamelyikével*/
  110. if (p_atemp!=NULL){
  111. datum (adat); /*a beolvasott dátumhoz hozzáad 14 napot*/
  112. 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*/
  113. }
  114. fread(adat,1,6,f_licence);
  115. }
  116. fread(adat_trofea,1,7,f_trofea); /*beolvas: név(4) elejtés dátuma(2), vad kódja(1)*/
  117. fread(&penz,3,1,f_trofea); /*beolvas: pénz(3)*/
  118. while(feof(f_trofea)==0){
  119. 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*/
  120. if (p_vadlic_temp!=NULL){
  121. penz=penz_atalakit (penz); /*beolvasott pénzt long tipusúvá (int is elég lett volna) alakítja*/
  122. 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)*/
  123. if (p_atemp!=NULL){
  124. 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*/
  125. if(!keres_vad(p_atemp, adat_trofea[6])){ /*ha nem lőtt még ilyen vadat*/
  126. p_atemp->nvadak=p_atemp->nvadak+1; /*vadak tömb elemszáma ++ (megnöveli a lőtt vadfélék számát*/
  127. 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*/
  128. }
  129. }
  130. }
  131. fread(adat_trofea,1,7,f_trofea);
  132. fread(&penz,3,1,f_trofea);
  133. }
  134.  
  135. p_legtobb_vadat_lott=p_atemp=p_vadasz_az_fej;
  136. while(p_atemp!=NULL){ /*kikeresi azt a vadászt amelyik a legtöbbféle vadat lőtte*/
  137. if (vadak_max<=p_atemp->nvadak){
  138. vadak_max=p_atemp->nvadak;
  139. p_legtobb_vadat_lott=p_atemp;
  140. }
  141. p_atemp=p_atemp->p_kov;
  142. }
  143. printf("%.0f",p_legtobb_vadat_lott->penz);
  144. 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*/
  145.  
  146. }
  147.  
  148. elovadasz* beszur_elovadasz (elovadasz *p_elofej, char nev[],char nemzet[], int hanyadik){
  149. int i;
  150. elovadasz *uj;
  151. uj=(elovadasz*) calloc(1,sizeof(elovadasz));
  152.  
  153. for(i=0;i<2;i++)
  154. uj->nev[i]=nev[i];
  155.  
  156. for (i=0;i<3;i++)
  157. uj->nemzet[i]=nemzet[i];
  158.  
  159. uj->hanyadik=hanyadik;
  160.  
  161. uj->p_kov=p_elofej;
  162. p_elofej=uj;
  163.  
  164. return p_elofej;
  165.  
  166. }
  167.  
  168. monogramm_def *beszur_monogramm (monogramm_def *p_monogrammfej, char nev[]){
  169. int i;
  170. monogramm_def *uj;
  171. uj=(monogramm_def*) calloc(1,sizeof(monogramm_def));
  172.  
  173. /*strcpy(új->monogramm,nev);*/
  174. for(i=0;i<2;i++)
  175. uj->monogramm[i]=nev[i];
  176.  
  177. uj->n_edik=1;
  178.  
  179. uj->p_kov=p_monogrammfej;
  180. p_monogrammfej=uj;
  181.  
  182. return p_monogrammfej;
  183. }
  184.  
  185.  
  186. monogramm_def* keres_monogramm (monogramm_def *p_monogrammfej, char monogramm0,char monogramm1){
  187. monogramm_def *p_mtemp;
  188. p_mtemp=p_monogrammfej;
  189.  
  190. while(p_mtemp!=NULL) {
  191. if(p_mtemp->monogramm[0]==monogramm0 && p_mtemp->monogramm[1]==monogramm1)
  192.  
  193. return p_mtemp;
  194. p_mtemp=p_mtemp->p_kov;
  195. }
  196. return 0;
  197. }
  198. vadaszazonosito* beszur_vadaszazonosito (vadaszazonosito* p_vadasz_az_fej,char nev[]){
  199. int i;
  200. vadaszazonosito* uj;
  201. uj=(vadaszazonosito*) calloc(1,sizeof(vadaszazonosito));
  202.  
  203. /*strcpy(új->vadasznev,nev);*/
  204. for(i=0;i<4;i++)
  205. uj->vadasznev[i]=nev[i];
  206.  
  207. for(i=0;i<27;i++)
  208. uj->vadak[i]=0;
  209.  
  210. uj->nvadak=0;
  211. uj->penz=0;
  212.  
  213.  
  214. uj->p_kov=p_vadasz_az_fej;
  215. p_vadasz_az_fej=uj;
  216.  
  217. return p_vadasz_az_fej;
  218. }
  219.  
  220. /*a vadások neveit átalakítja hogy a sorszáma bekerüljön a nevébe mint karakter*/
  221. void nev_atalakito (int szam, char betu[], char nev[]){
  222. int temp;
  223. temp=szam;
  224. temp=temp%10;
  225. szam=(szam-temp)/10;
  226.  
  227. switch (szam) {
  228. case 0: betu[2]='0'; break;
  229. case 1: betu[2]='1'; break;
  230. case 2: betu[2]='2'; break;
  231. case 3: betu[2]='3'; break;
  232. case 4: betu[2]='4'; break;
  233. case 5: betu[2]='5'; break;
  234. case 6: betu[2]='6'; break;
  235. case 7: betu[2]='7'; break;
  236. case 8: betu[2]='8'; break;
  237. case 9: betu[2]='9'; break;
  238. }
  239.  
  240. switch (temp){
  241. case 0: betu[3]='0'; break;
  242. case 1: betu[3]='1'; break;
  243. case 2: betu[3]='2'; break;
  244. case 3: betu[3]='3'; break;
  245. case 4: betu[3]='4'; break;
  246. case 5: betu[3]='5'; break;
  247. case 6: betu[3]='6'; break;
  248. case 7: betu[3]='7'; break;
  249. case 8: betu[3]='8'; break;
  250. case 9: betu[3]='9'; break;
  251. }
  252.  
  253.  
  254. betu[0]=nev[0];
  255. betu[1]=nev[1];
  256.  
  257. }
  258.  
  259. vadaszazonosito* keres_azonosito(vadaszazonosito* p_vadasz_az_fej, unsigned char adat[]){
  260. vadaszazonosito* p_temp;
  261. p_temp=p_vadasz_az_fej;
  262. while(p_temp!=NULL) {
  263. 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])
  264. return p_temp;
  265.  
  266. p_temp=p_temp->p_kov;
  267. }
  268. return 0;
  269. }
  270.  
  271. void datum (unsigned char dat[]){
  272.  
  273. dat[5]+=13;
  274. if (dat[5]-honapok[dat[4]]>0){
  275. dat[5]-=honapok[dat[4]];
  276. dat[4]++;
  277. if (dat[4]>12)
  278. dat[4]-=12;
  279. }
  280. }
  281.  
  282. vadasz_licence * beszur_vadasz_licence (vadasz_licence* p_vadasz_licence_fej, unsigned char nev[]){
  283. int i;
  284. vadasz_licence *uj;
  285. uj=(vadasz_licence*) calloc (1, sizeof(vadasz_licence));
  286.  
  287. for(i=0;i<6;i++)
  288. uj->nev[i]=nev[i];
  289. uj->p_kov=p_vadasz_licence_fej;
  290. p_vadasz_licence_fej=uj;
  291.  
  292. return p_vadasz_licence_fej;
  293. }
  294.  
  295. vadasz_licence* keres_vadasz_licence(vadasz_licence* p_vadasz_licence_fej, unsigned char adat_trofea[]){
  296. vadasz_licence *p_temp;
  297. p_temp=p_vadasz_licence_fej;
  298. while(p_temp!=NULL){
  299. if(p_temp->nev[0]==adat_trofea[0] && p_temp->nev[1]==adat_trofea[1] && p_temp->nev[2]==adat_trofea[2] &&
  300. p_temp->nev[3]==adat_trofea[3] && p_temp->nev[4]==adat_trofea[4] &&p_temp->nev[5]==adat_trofea[5] ){
  301. return p_temp;
  302. }
  303. p_temp=p_temp->p_kov;
  304. }
  305. return NULL;
  306. }
  307.  
  308. double penz_atalakit (long szam){
  309. int eltol;
  310. eltol=(sizeof(long)-3)*8;
  311. szam=szam<<eltol;
  312. szam=szam>>eltol;
  313. if (szam<0)
  314. szam*=-1;
  315.  
  316. return (double) szam;
  317. }
  318.  
  319. int keres_vad(vadaszazonosito *p_vadasz, char vadszam){
  320. int i;
  321.  
  322. for(i=0;i<p_vadasz->nvadak;i++)
  323. if(p_vadasz->vadak[i]==vadszam)
  324. return 1;
  325. return 0;
  326. }
Add Comment
Please, Sign In to add comment