Obrada zahteva za kredit u banci¶
Autor zadatka: Olja Anđelovski <andjelovski.olja@uns.ac.rs>
U ulaznoj datoteci krediti.txt
nalaze se:
ime potražioca kredita (jedna reč, do 15 karaktera)
prezime potražioca kredita (jedna reč, do 15 karaktera)
vrsta kredita (jedna reč, do 8 karaktera)
odobren (jedna reč, do 2 karaktera)
iznos kredita (pozitivan, celobrojan broj)
učešće (pozitivan, celobrojan broj)
kamata (godišnja kamata, pozitivan realan broj, izražen u procentima)
broj godina (pozitivan ceo broj, broj godina na koje je kredit uzet)
Ulazna datoteka krediti.txt:
Dragan Dragic stambeni ne 3600000 500000 2.5 10
Sava Tomic kes ne 7000000 20000 4 5
Luka Lukic auto da 2606000 110000 5.99 5
Tatjana Jovic auto da 1400000 0 7.5 7
Teodor Matic kes ne 4500000 20000 5.99 11
Nikola Nesic kes da 200000 0 8 3
Milica Markovic stambeni ne 8000000 20000 2.5 4
Kroz argumente komandne linije proslediti vrstu kredita i naziv ulazne datoteke (Pogledati stavku 1.).
Pronaći sve odobrene kredite određene vrste (vrste koju prosledite kao argument) i izračunati zaradu banke od odobrenih kredita.
Rezultate ispisati u izlazni fajl <vrsta kredita iz argumenata>.txt
pri čemu ukupnu zaradu treba ispisati na dve decimale.
Ukoliko za datu vrstu kredita ne postoje odobreni krediti u izlaznu datoteku ispisati “Nema odobrenih kredita.” (Pogledati stavku 3.)
Primer poziva:
./a.out kes krediti.txt
Primer računanja zarade banke za jednu stavku:
(iznos kredita – učešće) / 100 * kamata * broj godina
Očekivani izlaz za odgovarajuću vrstu kredita:
primer izlazne datoteke za unetu vrstu kredita
stambeni
, u datotecistambeni.txt
:Nema odobrenih kredita.primer izlazne datoteke za unetu vrstu kredita
kes
, u datotecikes.txt
:Nikola Nesic kes da 200000 0 8 3 Ukupna zarada banke je 48000.00 din.
Primer rešenja¶
1#include <stdlib.h>
2#include <string.h>
3#include <stdio.h>
4
5#define MAX_IME_PREZIME 16
6#define MAX_VRSTA 9
7#define MAX_ODOBREN 3
8#define MAX_NIZ 30
9
10struct krediti {
11 char ime[MAX_IME_PREZIME];
12 char prezime[MAX_IME_PREZIME];
13 char vrsta[MAX_VRSTA];
14 char odobren[MAX_ODOBREN];
15 unsigned iznos_kredita;
16 unsigned ucesce;
17 float kamata;
18 unsigned broj_godina;
19};
20
21FILE *safe_fopen(char filename[], char mode[], int error_code);
22void ucitaj_kredite(FILE *in, struct krediti krediti[], int *n);
23void izlazni_podaci(struct krediti krediti[], int n, char vrsta_kredita[]);
24void ispisi_kredit(FILE *out, struct krediti kredit);
25
26int main(int arg_num, char **args) {
27 if (arg_num != 3) {
28 printf("Program treba pokrenuti sa: %s vrstaKredita krediti.txt\n",
29 args[0]);
30 exit(1);
31 }
32
33 char *vrsta_kredita = args[1];
34 char *krediti_in_filename = args[2];
35
36 FILE *in = safe_fopen(krediti_in_filename, "r", 1);
37
38 struct krediti krediti[MAX_NIZ];
39
40 int n = 0;
41
42 ucitaj_kredite(in, krediti, &n);
43 izlazni_podaci(krediti, n, vrsta_kredita);
44
45 fclose(in);
46
47 return 0;
48}
49
50FILE *safe_fopen(char filename[], char mode[], int error_code) {
51 FILE *fp = fopen(filename, mode);
52 if(fp == NULL) {
53 printf("Can't open '%s'!", filename);
54 exit(error_code);
55 }
56 return fp;
57}
58
59void ucitaj_kredite(FILE *in, struct krediti krediti[], int *n){
60 *n = 0;
61 while(fscanf(
62 in, "%s %s %s %s %u %u %f %u",
63 krediti[*n].ime,
64 krediti[*n].prezime,
65 krediti[*n].vrsta,
66 krediti[*n].odobren,
67 &krediti[*n].iznos_kredita,
68 &krediti[*n].ucesce,
69 &krediti[*n].kamata,
70 &krediti[*n].broj_godina
71 ) != EOF) {
72 (*n)++;
73 }
74}
75
76void ispisi_kredit(FILE *out, struct krediti kredit) {
77 fprintf(out, "%s %s %s %s %u %u %f %u\n",
78 kredit.ime,
79 kredit.prezime,
80 kredit.vrsta,
81 kredit.odobren,
82 kredit.iznos_kredita,
83 kredit.ucesce,
84 kredit.kamata,
85 kredit.broj_godina);
86}
87
88void izlazni_podaci(struct krediti krediti[], int n, char vrsta_kredita[]) {
89 int i;
90 float zarada = 0;
91 int postoji = 0;
92 FILE *out;
93 char vrsta[MAX_VRSTA];
94
95 strcpy(vrsta, vrsta_kredita);
96 out = safe_fopen(strcat(vrsta,".txt"), "w", 2);
97
98 for(i=0; i<n; i++) {
99 if(strcmp(krediti[i].vrsta, vrsta_kredita)== 0) {
100 postoji = 1;
101 if(strcmp(krediti[i].odobren, "da") == 0) {
102 ispisi_kredit(out, krediti[i]);
103 zarada += (krediti[i].iznos_kredita - krediti[i].ucesce)/100
104 * krediti[i].kamata * krediti[i].broj_godina;
105 }
106 }
107 }
108
109 if(postoji == 0) {
110 printf("Uneta vrsta kredita ne postoji");
111 exit(11);
112 }
113 else {
114 if(zarada != 0) {
115 fprintf(out, "\nUkupna zarada banke je %.2f din.", zarada);
116 }
117 else {
118 fprintf(out, "\nNema odobrenih kredita.");
119 }
120 fclose(out);
121 }
122}