-
Notifications
You must be signed in to change notification settings - Fork 0
/
TelefonRehberi.cpp
executable file
·150 lines (127 loc) · 3.75 KB
/
TelefonRehberi.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
struct _TelDef { //Telefon bilgilerini tutan yapı
char adi[30];
char soyadi[30];
char tel_num[12];
struct _TelDef *sonraki; //Listedeki bir sonraki yapıyı gösteren işaretçi
} *_baslangic; //Listenin başlangıç adresini tutar
typedef struct _TelDef TelDef;
void kisiOku(TelDef *dugum, FILE *dosya) //Dosyadan kişi bilgisi okur
{
fgets(dugum->adi, 30, dosya); // Satırı okur ve ilk parametrede gösterilen yere yazar
fgets(dugum->soyadi, 30, dosya);
fgets(dugum->tel_num, 12, dosya);
dugum->adi[strlen(dugum->adi) - 1] = '\0'; //Beklenmedik karakter dönüşümü
dugum->soyadi[strlen(dugum->soyadi) - 1] = '\0';
dugum->tel_num[strlen(dugum->tel_num) - 1] = '\0';
}
void defteriOku() //Dosyayı okur, her kişi için bir düğüm oluşturup bilgileri
{ //saklar ve düğümleri birbirine bağlar
TelDef *dugum;
FILE *dosya = fopen("telefon defteri.txt", "r");
if(!dosya)
return;
if(fgetc(dosya) == '#') { //Dosyada # işareti ile başlayan bölüm bir kişi bilgisidir
_baslangic = dugum = (TelDef *) malloc(sizeof(TelDef)); /* İlk kişi için
yer ayrılır ve başlangıç adresi olarak kaydedilir.*/
kisiOku(dugum, dosya);
}
else {
fclose(dosya); // Dosya boş ise kapat ve çık.
return;
}
while(fgetc(dosya) == '#') { /*Devam eden kişiler içinde yer ayrılır ve
dugumlere kaydedilir*/
dugum->sonraki = (TelDef *) malloc(sizeof(TelDef));
dugum = dugum->sonraki;
kisiOku(dugum, dosya);
}
dugum->sonraki = NULL;
fclose(dosya);
}
bool yeniKisiEkle(TelDef *kisi) //Eklenecek yeni kişi için düğüm oluşturur ve
{ //hem belleğe hem de dosyaya yazar.
TelDef *dugum = _baslangic;
FILE *dosya = fopen("telefon defteri.txt", "a");
if(!dosya)
return false;
fprintf(dosya, "#%s\n", kisi->adi);
fprintf(dosya, "%s\n", kisi->soyadi);
fprintf(dosya, "%s\n", kisi->tel_num);
fclose(dosya);
if(dugum) {
while(dugum->sonraki) //Listenin sonuna gelene kadar devam et
dugum = dugum->sonraki;
dugum->sonraki = (TelDef *) malloc(sizeof(TelDef));
dugum = dugum->sonraki;
}
else //Liste boş ise ilk düğüm
_baslangic = dugum = (TelDef *) malloc(sizeof(TelDef));
dugum->sonraki = NULL;
strcpy(dugum->adi, kisi->adi);
strcpy(dugum->soyadi, kisi->soyadi);
strcpy(dugum->tel_num, kisi->tel_num);
return true;
}
char* numarayiBul(char adi[], char soyadi[]) //Ad ve soyada bakarak numarayı bulur
{
TelDef *dugum = _baslangic;
while(dugum) {
if(!strcmp(adi, dugum->adi) && !strcmp(soyadi, dugum->soyadi))
return dugum->tel_num;
dugum = dugum->sonraki;
}
return NULL;
}
void dokumAl() //Bütün listeyi yazdırır
{
TelDef *dugum = _baslangic;
if(!dugum)
printf("\nListe bos!\n");
while(dugum) {
printf("%s\n%s\n%s\n\n", dugum->adi, dugum->soyadi, dugum->tel_num);
dugum = dugum->sonraki;
}
}
int main()
{
char ch, *numara;
TelDef kisi;
defteriOku(); //Bunu mutlaka çağırıyoruz
do {
fflush(stdin);
printf("\n(Y)eni kisi ekle:\n(N)umara bul:\nDoku(m) al\n(C)ik:\n");
ch = getchar();
if(ch == 'y') {
fflush(stdin);
printf("Eklenecek kisi\nAdi: ");
gets(kisi.adi);
printf("Soyadi: ");
gets(kisi.soyadi);
printf("Telefon numarasi: ");
gets(kisi.tel_num);
if(yeniKisiEkle(&kisi))
printf("\nKisi eklendi\n");
else
printf("\nEklenemedi!\n");
}
if(ch == 'n') {
fflush(stdin);
printf("Bulunacak kisi\nAdi: ");
gets(kisi.adi);
printf("Soyadi: ");
gets(kisi.soyadi);
numara = numarayiBul(kisi.adi, kisi.soyadi);
if(numara)
printf("\nNumara: %s\n", numara);
else
printf("\nKisi bulunamadi!\n");
}
if(ch == 'm')
dokumAl();
} while(ch != 'c');
return 0;
}