Waňov web

PB071 Jazyk C - 11. cvicení

Výplatní listina a výcetka platidel

Úvod:

Pracovníci, kterí chystají zamestnancum výplaty, potrebují vedet, kolik bankovek a mincí od kazdého druhu budou potrebovat, aby bylo mozno kazdému vyplatit presnou cástku. Proto se sestavují výcetky platidel, kde je kazdá cástka rozepsána na jednotlivé bankovky a mince a jejich pocty se potom sectou a vyzádají v bance.

Zadání:

Napiste program, který bude ze souboru císt pro kazdého pracovníka následující data (oddelená bezným zpusobem, tj. jedním nebo více bílými znaky):

Pro kazdý prectený záznam program vypíse ve vhodném formátu príjmení, jméno (v tomto poradí odchylném od poradí na vstupu) a plat. Pri výplate v hotovosti rozepíse cástku na jednotlivé bankovky a mince, pri výplate na úcet nebo postou pouze uvede zpusob úhrady (slovne, ne pouze kód).

Na záver program vypíse rekapitulaci: sumární cástku vyplacenou vsem v hotovosti, její rozepsání na jednotlivá platidla (pocet x hodnota = cástka v daném platidle), dále sumární cástku prevedenou na bankovní úcty a sumární cástku zaslanou postou.

Pozadavky:

Poznámky:


Riešenie:


vycetka.c
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>


FILE *in,*out;
char meno[30],prijmeni[30],sposob;
long int plat,hotovost,ucet,posta;
unsigned int peniaze[]={5000,2000,1000,500,200,100,50,20,10,5,2,1},
             celkovo[12],kusy[12];
int i,j,ende;
/*----------------------------MINCOVKA---------------------------------------*/
 int mincovka(int suma)
{return 0;}
/*=============================MAIN==========================================*/
int main(int argc,char *argv[])
{
if(argc<3)
   {printf("Zadaj parametre: vstupny subor a vystupny subor; ");return 1;} 
if(argc>=3)
   {if((in=fopen(argv[1],"r"))==NULL)
      {printf("CHYBA: Vstupny subor sa nepodarilo otvorit.");return 2;}
    if((out=fopen(argv[2],"w"))==NULL)
            {printf("CHYBA: Vystupny subor sa nepodarilo vytvorit");
             fclose(in);return 2;}
   }

fprintf(out,"\n     Vypis bankoviek a minci potrebnych na vyplaty\n");
fprintf(out,"\nPRIEZVISKO\n");
fprintf(out,"MENO         PLAT  ");
while(peniaze[i]!=0)
{
fprintf(out,"%5d",peniaze[i]);
i++;
}
fprintf(out,"\n--------"
"-----------------------------------------------------------------------\n");
           
while( fscanf(in,"%s %s %ld %c",meno,prijmeni,&plat,&sposob)!=EOF)
{
 meno[10]='\0';
 prijmeni[20]='\0';
 fprintf(out,"%-21s\n%-11s %5ld: ",prijmeni,meno,plat);
 if (sposob=='p') {fprintf(out,"Zaslane  poukazkou.");posta+=plat;}
 if (sposob=='u') {fprintf(out,"Prevod na ucet.");ucet+=plat;}
 if ((sposob!='h')&&(sposob!='p')&&(sposob!='u'))
    {fprintf(out,"Chybny sposob platby: %c",sposob);ende=4;}
i=0;
if (sposob=='h') 
{hotovost+=plat; 
while(peniaze[i]!=0)
 { kusy[i]=(int)(plat/peniaze[i]);
   plat-=kusy[i]*peniaze[i];
   celkovo[i]+=kusy[i];
   fprintf(out,"%5d",kusy[i]); 
  i++;
 }
} 
fprintf(out,"\n");
};
/*---------------------- KONECNY VYPIS ----------------------------------*/

fprintf(out,
"\nREKAPITULACIA:\n\n"
"Celkovo vyplatene v hotovosti: %6ld Kc , a to v \n\n"
,hotovost);
i=0;
while(peniaze[i]!=0)
{
fprintf(out,"%6d x %6d Kc =  %7ld Kc \n",celkovo[i],peniaze[i],
        (long int)(celkovo[i]*peniaze[i]));

i++;
}

fprintf(out,
"Celkovo zaslane na ucet:       %6ld Kc\n\n"
"celkovo zaslane poukazkov:     %6ld Kc\n\n"
,ucet,posta);


fclose(in);
fclose(out);
return ende;
}