Hogyan írjunk egy C program , hogy a funkció a paraméterek , amit a felhasználó szeretne szűrni ?
Solution:
- /* TODO:
- A program elején megnézni, hogy van-e elemszám.txt, ha nincs, akkor billről olvasok, az olvasás végén kiírom az i értékét az elemszám.txt-be
- Utána kiírom az i darab letter-t (ami már meg van csinálva). Ha volt elemszám.txt, akkor beolvasom az elemszámot és a levelekből beolvasok elemszám darab levelet.
- Ezután az üres tömbbe belepakolom az olvasott leveleket, aztán billentyűről olvasunk, de úgy, hogy az i=elemszámmal, ebben az esetben
- a billről olvasás végén.
- Szűrések: a függvény paramétere az hogy a felhasználó mire akar szűrni
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h> //file control options
- #include <sys/types.h> //open
- #include <sys/stat.h>
- #include <errno.h> //perror, errno
- const int MAX = 256;
- typedef struct level
- {
- char firstName[30];
- char lastName[30];
- char town[30];
- char street[20];
- int houseNumber;
- char gift[30];
- char date[11];
- } Letter;
- int elemszam_olvas();
- void elemszam_ir(int *i);
- void level_ir(Letter level[], int size);
- int main(int argc, char ** argv)
- {
- Letter level[256];
- Letter l;
- char answer[] = "i";
- int i = 0;
- int j = 0;
- int k = 0;
- int m = 0;
- int elemek = elemszam_olvas();
- while(strcmp("n", answer) != 0) {
- printf("Add meg a vezetekneved: ");
- scanf("%s", &l.firstName);
- printf("Add meg a keresztneved: ");
- scanf("%s", &l.lastName);
- printf("Add meg a varosod nevet: ");
- scanf("%s", &l.town);
- printf("Add meg az utcat: ");
- scanf("%s", &l.street);
- printf("Add meg a hazszamot: ");
- scanf("%d", &l.houseNumber);
- printf("Add meg a kivant ajandekot: ");
- scanf("%s", &l.gift);
- printf("Datum: ");
- scanf("%s", &l.date);
- int update = 0;
- for (m=0; m<i; m++)
- {
- if( (strcmp(level[m].firstName, l.firstName) == 0) &&
- (strcmp(level[m].lastName, l.lastName) == 0))
- {
- level[m] = l;
- update = 1;
- printf("update");
- }
- }
- if (update == 0){
- level[i]=l;
- printf("add");
- i += 1;
- }
- printf("Van meg gyerek? i/n");
- scanf("%s", &answer);
- printf("\n");
- }
- elemszam_ir(&i);
- level_ir(level, elemek);
- printf("\nelemszam: %d", elemek);
- int fstatus4 = open("levelek",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
- if(fstatus4 < 0)
- {
- perror("Cannot open file levelek\n");
- exit(1);
- }
- for (k = 0; k < elemek; k++){
- Letter level;
- read(fstatus4,&level,sizeof(Letter));
- if (strcmp(level.gift, "auto") == 0){
- printf("%s %s kert: %s -t\n", level.firstName, level.lastName, level.gift);
- }
- }
- close(fstatus4);
- return 0;
- }
- int elemszam_olvas()
- {
- int elemszam;
- int fstatus2 = open("elemszam.txt",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
- if(fstatus2 < 0)
- {
- perror("Cannot open file elemszam.txt\n");
- exit(1);
- }
- read(fstatus2,&elemszam,sizeof(int));
- close(fstatus2);
- return elemszam;
- }
- void elemszam_ir(int *i)
- {
- int fstatus = open("elemszam.txt",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
- if(fstatus < 0)
- {
- perror("Cannot open file elemszam.txt\n");
- exit(1);
- }
- write(fstatus,&i,sizeof(int));
- close(fstatus);
- }
- void level_ir(Letter level[], int size)
- {
- int j = 0;
- int fstatus3 = open("levelek",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
- if(fstatus3 < 0)
- {
- perror("Cannot open file levelek\n");
- exit(1);
- }
- for(j = 0; j < size; j++)
- {
- write(fstatus3,level[j],sizeof(Letter));
- }
- close(fstatus3);
- }