-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
390 lines (354 loc) · 20 KB
/
main.c
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
// HASAN CEYHAN 20010011091 - Veri Yapıları Dersi Telefon Rehber Uygulaması
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
// Kütüphanelerimi ekledim, kayıt tutacak olan struct yapımı oluşturdum. Telefon numarası neden int değil çünkü C'de int üzerinde gezmek zor.
// Bir tane main() fonksiyonum var içinde menü yapısı var. Menü yapısıyla kullanıcdan talepler alınarak program işleniyor.
// İlk olarak main()'de boş bir kayıt oluşturuyorum içini NULL olarak tanımlıyorum bundan sonraki işlemlerde içi doldurularak devam edecek program.
// "->" structer elemanına, structer'ı gösteren bir pointer ile ulaşır.
struct kaydol{
char isim[50];
char soyisim[50];
char telefonNumarasi[20];
struct kaydol * birSonraki;
};
// Fonksiyonun çağrıldığı yerden "ilkKayit" değişken bilgisini alarak, kullanıcının eklediğini yeni kaydı "ilkKayit"'a ekler. Yeni kayıdın "birSonraki" bilgisine önceki "ilkKayit"'ı tanımlanır. Sonuçta yeni "ilkKayit" bilgisini döndürür.
// MAİN'DEN ilkKayit BURAYA GÖNDERİLDİ.
struct kaydol* ilkSirayaKisiEkle(struct kaydol *ilkKayit){
// DAHA ÖNCE HİÇ KİMSE REHBERE EKLENMEMİŞSE İF BLOĞUNA GİRER.
if (ilkKayit == NULL){
// HAFIZADA YER AÇILDI VE KULLANICIDAN BİLGİLER ALINDI.
ilkKayit = (struct kaydol*) malloc(sizeof(struct kaydol));
printf("\nİsim yazınız (Ali-Kadir-Mustafa): "); scanf("%s",ilkKayit->isim);
printf("Soyisim yazınız (Ateş-Duvar-Kitap): "); scanf("%s",ilkKayit->soyisim);
printf("Telefon numarası: "); scanf("%s",ilkKayit->telefonNumarasi);
// STRUCT'TA YER ALAN birSonraki KISMINA ilkKayit'ı EŞİTLEDİK.
// BÖYLELİKLE TEK BİR KİŞİ DAHİ OLSA DÖNGÜ KENDİSİNİ GÖSTERECEK YANİ İLK EKLENEN KİŞİYİ GÖSTERİYOR. SONUÇ OLARAK DAİRESEL YAPIYI KURDUK.
ilkKayit->birSonraki = ilkKayit; // TEK ELEMANLI OLDUĞU İÇİN KENDİ ADRESİNİ GÖSTERDİ.
return ilkKayit;
// ilkKayit main'de fonksiyonu çagırdıgımız ilk kayda eşitleniyor.
// daireselde basa ekledıgım ıcın her yenı eklenen kayıt ilkkayit oluyor.
}
else{
// HAFIZADA YER AÇTIK.
struct kaydol *newKayit = (struct kaydol*) malloc(sizeof(struct kaydol));
// TELEFON NUMARALARININ ÇAKIŞMA İHTİMALİNE İSTİNADEN ayniTelefonNumarasi İSMİNDE DEĞİŞKEN OLUŞTURULDU. 1 OLDUĞU SÜRECE KAYIT EKLENECEK.
int ayniTelefonNumarasi =1;
while(ayniTelefonNumarasi == 1){
printf("\nİsim yazınız (Ali-Kadir-Mustafa): "); scanf("%s",newKayit->isim);
printf("Soyisim yazınız (Ateş-Duvar-Kitap): "); scanf("%s",newKayit->soyisim);
printf("Telefon numarası: "); scanf("%s",newKayit->telefonNumarasi);
// birSonraki (SONRAKİ DEĞİŞKENİN ADRESİNİ TUTUYOR) İSİMLİ POİNTER'A ilkKayit'ın ADRESİ ATANDI.
newKayit->birSonraki = ilkKayit;
// telefonNumarasiSorgula FONKSİYONU SAYESİNDE AYNI NUMARANIN OLUP OLMADIĞI KONTROL EDİLİYOR.
ayniTelefonNumarasi = telefonNumarasiSorgula(ilkKayit, newKayit->telefonNumarasi);
// telefonNumarasiSorgula isimli FONKSİYONUN DEĞERİ 1 OLDUĞU SÜRECE DÖNGÜ DEVAM EDER VE KİŞİ EKLENİR.
}
// araBul DEĞİŞKENİYLE EKLENEN 2. , 3. ... KAYIT EŞİTLENİYOR.
struct kaydol * araBul = ilkKayit;
while (araBul->birSonraki!=ilkKayit)
araBul = araBul->birSonraki;
// İLK EKLENEN KİŞİNİN ADRESİNİ BAĞLIYORUZ KAYBOLMAMASI İÇİN. (ADRESİNİ ATIYORUZ)
araBul->birSonraki = newKayit;
// BUNLAR BİRBİRİNE BAĞLI OLDUĞU İÇİN ilkKayit ARTIK newKayit OLMUŞ OLUYOR.
ilkKayit= newKayit;
return ilkKayit;
// BUNDAN SONRA SÜREKLİ AYNI İŞLEM YAPILIYOR. birSonraki KISMINA ÖNCEKİ KİŞİNİN ADRESİ EKLENİYOR SONRADA ilkKayit OLARAK TANIMLANIYOR.
// eklenen kayıtların adresi sürekli ilkKayit'ın adresine eşit oluyor.
// son ekelnen kayıt adresi ilkKayit oluyor.
}
}
// Rehberde yer alan her şey gösterilir.
void rehberEkrandaGoster(struct kaydol *ilkKayit){
// ADRESİNİ TUTUYORUZ.
struct kaydol * araBul = ilkKayit;
// ilkKayit DEĞİŞKENİ BOŞSA YANİ KİŞİ EKLENMEMİŞSE KULLANICIYA BİLGİLENDİRME MESAJI VERİLİYOR.
if(ilkKayit == NULL){
printf("\nTelefon rehberinde herhangi bir veriye ulaşılamadı!\n\n");
return;
}
// EĞER ilkKayit NULL DEĞİLSE DOLUYSA İLK KİŞİNİN BİLGİLERİNİ BURADA YAZDIRIYORUZ.
printf("\nİsim Soyisim: %s %s \nTelefon Numarası: %s\n\n",araBul->isim,araBul->soyisim,araBul->telefonNumarasi);
// araBul DEĞİŞKENİ, sonraki ADRES (SONRAKİ KİŞİ) VARSA ONU BULUYOR.
araBul = araBul->birSonraki;
// BİRDEN FAZLA KİŞİ VARSA AŞAĞIDAKİ DÖNGÜ ÇALIŞIR.
while(araBul != ilkKayit){
// BİRDEN FAZLA KİŞİ VARSA ONLARIDA BURADA YAZDIRIYORUZ
printf("\nİsim Soyisim: %s %s \nTelefon Numarası: %s\n\n",araBul->isim,araBul->soyisim,araBul->telefonNumarasi);
// araBul DEĞİŞKENİ SONRAKİ ADRES (SONRAKİ KİŞİ) VARSA ONU BULUYOR. BULAMAYANA KADAR DÖNGÜ DEVAM EDER.
araBul = araBul->birSonraki;
}
}
// Rehber aynı telefon numarasının olup olmadığının kontrolu yapılır.
int telefonNumarasiSorgula(struct kaydol *ilkKayit, char telefonNumarasi[]){
char telefonRehberindekiNumara[20];
// ADRESİNİ TUTUYORUZ.
struct kaydol * araBul = ilkKayit;
// strcpy() fonksiyonu --> İkinci parametre, birinci parametreye kopyalanır.
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(telefonRehberindekiNumara, araBul->telefonNumarasi);
// "kontrolEtChar" FONKSİYONU 0 DEĞERİNİ DÖNDÜRÜRSE TELEFON REHBERİNDE O NUMARA BULUNMUŞ DEMEKTİR.
int telefonNumarasiKarsilastirma = kontrolEtChar(telefonRehberindekiNumara, telefonNumarasi);
if(telefonNumarasiKarsilastirma == 0 ){
printf("\nTelefon numarası daha önce kaydedilmiş. Tekrar deneyiniz.\n");
return 1;
}
// araBul DEĞİŞKENİ, SONRAKİ ADRES (SONRAKİ KİŞİ) VARSA ONU BULUYOR.
araBul = araBul->birSonraki;
// BİRDEN FAZLA KİŞİ VARSA AŞAĞIDAKİ DÖNGÜYE GİRERİZ. SONRAKİ KİŞİYİ BULANA KADAR DÖNGÜ DÖNER.
while(araBul != ilkKayit){
char telefonRehberindekiNumara[20];
// strcpy() fonksiyonu --> İkinci parametre, birinci parametreye kopyalanır.
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(telefonRehberindekiNumara, araBul->telefonNumarasi);
// "kontrolEtChar" FONKSİYONU 0 DEĞERİNİ DÖNDÜRÜRSE TELEFON REHBERİNDE O NUMARA BULUNMUŞ DEMEKTİR.
int telefonNumarasiKarsilastirma = kontrolEtChar(telefonRehberindekiNumara, telefonNumarasi);
if(telefonNumarasiKarsilastirma == 0 ){
// printf fonksiyonu ile ekranda bilgilendirme mesajı verilir.
printf("\nTelefon numarası daha önce kaydedilmiş. Tekrar deneyiniz.\n");
return 1;
}
// araBul DEĞİŞKENİ SONRAKİ ADRES (SONRAKİ KİŞİ) VARSA ONU BULUYOR. BULAMAYANA KADAR DÖNGÜ DEVAM EDER.
araBul = araBul->birSonraki;
}
return 0;
}
// Telefon rehberinden telefon numarası girilerek aramanın gerçekleştirilmesi.
void telefonNumarasiylaAramaYap(struct kaydol *ilkKayit, char aranacakTelNo[]){
char telefonRehberindekiNumara[20];
// araBul DEĞİŞKENİ OLUŞTURULUP ilkKayit BUNA EŞİTLENDİ.
struct kaydol * araBul = ilkKayit;
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(telefonRehberindekiNumara, araBul->telefonNumarasi);
// "kontrolEtChar" FONKSİYONU 0 DEĞERİNİ DÖNDÜRÜRSE TELEFON REHBERİNDE O NUMARA BULUNMUŞ DEMEKTİR.
int telefonNumarasiKarsilastirma = kontrolEtChar(telefonRehberindekiNumara, aranacakTelNo);
if(telefonNumarasiKarsilastirma == 0 ){
// BULUNAN İLK KİŞİ YAZDIRILIR.
printf("\nİsim Soyisim: %s %s \nTelefon Numarası: %s\n\n",araBul->isim,araBul->soyisim,araBul->telefonNumarasi);
return;
}
// araBul DEĞİŞKENİ SONRAKİ ADRES (SONRAKİ KİŞİ) VARSA ONU BULUYOR.
araBul = araBul->birSonraki;
// ARANAN NUMARA İLK KİŞİYE AİT DEĞİLSE AŞAĞIDAKİ DÖNGÜYE GİRERİZ.
while(araBul != ilkKayit){
char telefonRehberindekiNumara[20];
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(telefonRehberindekiNumara, araBul->telefonNumarasi);
// "kontrolEtChar" FONKSİYONU 0 DEĞERİNİ DÖNDÜRÜRSE TELEFON REHBERİNDE O NUMARA BULUNMUŞ DEMEKTİR.
int telefonNumarasiKarsilastirma = kontrolEtChar(telefonRehberindekiNumara, aranacakTelNo);
if(telefonNumarasiKarsilastirma == 0 ){
// BULUNAN 2. , 3. , 4. ... KİŞİ EKRANA YAZDIRILIR.
printf("\n\nİsim Soyisim: %s %s \nTelefon Numarası: %s\n\n",araBul->isim,araBul->soyisim,araBul->telefonNumarasi);
return;
}
// araBul DEĞİŞKENİ SONRAKİ ADRES (SONRAKİ KİŞİ) VARSA ONU BULUYOR. BULAMAYANA KADAR DÖNGÜ DEVAM EDER.
araBul = araBul->birSonraki;
}
printf("\n\nEşleşmiş herhangi bir kişiye rastlanmadı.\n\n");
}
// Telefon rehberinden telefon numarası girilerek kişinin silinmesi.
// Neden 2 ayrı silme işlemi var birisinde dairesel bağı koparmamak için böyle yapılıyor.
struct kaydol* kayitSil(struct kaydol *ilkKayit, char silmekIstenilenTelefonNumarasi[]){
char telefonRehberindekiNumara[20];
// araBul DEĞİŞKENİ OLUŞTURULUP ilkKayit BUNA EŞİTLENDİ.
struct kaydol * araBul = ilkKayit;
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(telefonRehberindekiNumara, araBul->telefonNumarasi);
// İLK KİŞİYİ SİLECEKSEK BU BLOK ÇALIŞIR ************************************************************
// "kontrolEtChar" FONKSİYONU 0 DEĞER DÖNDÜRÜRSE GİRİLEN TELEFON NUMARASIYLA KARŞILAŞILMIŞ DEMEKTİR.
int telefonNumarasiKarsilastirma = kontrolEtChar(telefonRehberindekiNumara, silmekIstenilenTelefonNumarasi);
if(telefonNumarasiKarsilastirma == 0 ){
// BURDAKİ DÖNGÜYLE SON ELEMAN (KİŞİ) ARANIYOR. NEDEN SON KİŞİ BULUNUYOR? İLK KİŞİYİ SİLECEĞİMİZ İÇİN SON KİŞİYLE ARASINDAKİ DAİRESEL BAĞI KOPARMAMALIYIZ.
while (araBul->birSonraki !=ilkKayit){
araBul = araBul->birSonraki; // SON ELEMAN BULUNUYOR.
}
// DAİRESEL BAĞI KOPARMAMAK İÇİN İLK KİŞİNİN ADRESİ SON KİŞİNİN ADRESİNE ATANIYOR.
araBul->birSonraki =ilkKayit->birSonraki;
// free() fonksiyonunun kullanımı hakkında bilgi. malloc() fonksiyonu ile tahsis edilen belleği boşaltır.
free(ilkKayit); // TUTULAN İLK KİŞİNİN ADRESİ BOŞALTILIR.
ilkKayit = araBul->birSonraki; // ilkKayit'ın ADRESİ NORMALDE BOŞ ÇÜNKÜ SİLDİK. BURADA araBul'un BULDUĞU SON KİŞİNİN ADRESİNİ ATIYORUZ.
printf("\n%s numaralı telefon numarası silindi.\n\n", silmekIstenilenTelefonNumarasi);
return ilkKayit;
}
// ARADAN VEYAHUT SONDAN SİLME İŞLEMİ ************************************************************
while(araBul->birSonraki != ilkKayit){
char telefonRehberindekiNumara[20];
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(telefonRehberindekiNumara, araBul->birSonraki->telefonNumarasi);
// "kontrolEtChar" FONKSİYONU 0 DEĞER DÖNDÜRÜRSE GİRİLEN TELEFON NUMARASIYLA KARŞILAŞILMIŞ DEMEKTİR.
int telefonNumarasiKarsilastirma = kontrolEtChar(telefonRehberindekiNumara, silmekIstenilenTelefonNumarasi);
if(telefonNumarasiKarsilastirma == 0 ){
struct kaydol * temp; // SİLİNECEK KİŞİ İÇİN GEÇİCİ BİR DEĞİŞKEN OLUŞTURULDU.
temp=araBul->birSonraki; // SİLİNECEK ÖĞE GEÇİCİ BİR DEĞİŞKENE ATANDI.
araBul->birSonraki = araBul->birSonraki->birSonraki; // SİLİNECEK ÖĞENİN ÖNCESİYLE SONRASININ ADRESLERİ BAĞLANIYOR.
free(temp); // SİLİNECEK ÖĞE SİLİNDİ.
printf("\n%s numaralı telefon numarası silindi.\n\n", silmekIstenilenTelefonNumarasi);
return ilkKayit;
}
araBul = araBul->birSonraki; // DÖNGÜNÜN İÇİNDE BULAMAZSA araBul BİRSONRAKİ KAYDI HAREKET ETTİRİYOR.
}
printf("\n\nHerhangi bir veriye ulaşılamadı!\n\n");
return ilkKayit;
}
// Rehberde arama yapmamıza (isim-soyisme göre) yarayan fonksiyon.
void isimSoyisimRehberdeBul(struct kaydol *ilkKayit, char isim[], char soyisim[]){
char rehberdekiIsim[50],rehberdekiSoyisim[50];
struct kaydol * araBul = ilkKayit;
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(rehberdekiIsim, araBul->isim);
strcpy(rehberdekiSoyisim, araBul->soyisim);
// "kontrolEtChar" FONKSİYONU 0 DEĞER DÖNDÜRÜRSE GİRİLEN İSİM-SOYİSİMLE KARŞILAŞILMIŞ DEMEKTİR.
int isimleriKarsilastir = kontrolEtChar(rehberdekiIsim, isim);
int soyisimleriKarsilastir = kontrolEtChar(rehberdekiSoyisim, soyisim);
if(isimleriKarsilastir == 0 && soyisimleriKarsilastir == 0){
// Bulunan isim ve soyisim ekrana yazdılır.
printf("\nİsim Soyisim: %s %s \nTelefon Numarası: %s\n\n",araBul->isim,araBul->soyisim,araBul->telefonNumarasi);
printf("****************************************************************************************************\n\n");
return;
}
araBul = araBul->birSonraki; // DÖNGÜNÜN İÇİNDE BULAMAZSA araBul BİRSONRAKİ KAYDI HAREKET ETTİRİYOR.
while(araBul != ilkKayit){
// kontrolEtChar FONKSİYONUNDA KULLANMAK İÇİN KOPYALAMA İŞLEMİ GERÇEKLEŞTİRİLDİ.
strcpy(rehberdekiIsim, araBul->isim);
strcpy(rehberdekiSoyisim, araBul->soyisim);
// "kontrolEtChar" FONKSİYONU 0 DEĞER DÖNDÜRÜRSE GİRİLEN İSİM-SOYİSİMLE KARŞILAŞILMIŞ DEMEKTİR.
int isimleriKarsilastir = kontrolEtChar(rehberdekiIsim, isim);
int soyisimleriKarsilastir = kontrolEtChar(rehberdekiSoyisim, soyisim);
if(isimleriKarsilastir == 0 && soyisimleriKarsilastir == 0){
// Bulunan isim ve soyisim ekrana yazdılır.
printf("\n\nİsim Soyisim: %s %s \nTelefon Numarası: %s\n\n",araBul->isim,araBul->soyisim,araBul->telefonNumarasi);
return;
}
araBul = araBul->birSonraki; // DÖNGÜNÜN İÇİNDE BULAMAZSA araBul BİRSONRAKİ KAYDI HAREKET ETTİRİYOR.
}
printf("\n\nEşleşmiş herhangi bir kişiye rastlanmadı.\n\n");
}
// Char (isim-soyisim) verilerinin aynı olup olmadığını karşılaştıran fonksiyon.
int kontrolEtChar(char a[], char b[]){
int tempNumber=1;
// ÖZETLE "tempNumber" DEĞERİ 0 İSE AYNI, DEĞİLSE FARKLIDIR.
int i=0; char g[50];
int q = 0;
while (a[i] == b[i]) // İSİMLER KARŞILAŞTIRILIYOR.
if (a[i++] == '\0') // HAFIZADAN AYRILAN DİZİNİN SONUNA YANİ HASAN YAZDIK DİYELİM N HARFİNDEN SONRA \0 YAZILIYOR BU DA BİTTİĞİNİ GÖSTERİYOR.
return(0); // DÖNGÜDEN ÇIKAR VE 0 DÖNER.
return tempNumber;
}
// Telefon rehberi soyisimlere göre sıralanır.
void soyismeGoreSirala(struct kaydol *ilkKayit){
int yerDegistirildi, i;
struct kaydol *ilkPointer;
struct kaydol *ikinciPointer = NULL;
if (ilkKayit == NULL){
return;
}
do{
// ilk önce ilkKayit yapılır BÜTÜN FONKSİYONLARDA YAPILDI
// dairesel olduğu için ilk önce ilkKayit'ı dışarda döngünün dışında işliyoruz. Dairesel olmasaydı döngü NULL'u görünce duracağı için doğrusalda direk döngüye girilebilirdi.
yerDegistirildi = 0;
ilkPointer = ilkKayit;
// strcmp() FONKSİYONUNUN KULLANIMI HAKKINDA BİLGİ
// int strcmp(const char *str1, const char *str2);
// Str1 parametresi ile gösterilen karakter dizisini str2 parametresi ile gösterilen karakter dizisi ile karşılaştırır.
// Eğer her iki karakter dizisindeki tüm karakterler aynı ise sıfır değeri, aksi takdirde sıfırdan farklı bir değer geri döndürür.
if (strcmp(ilkPointer->soyisim,ilkPointer->birSonraki->soyisim)>0){ // aynı isim çıkarsa 0 dönüyor ama ısım soyısım farklıysa ıslem gerceklestırılıyor
yerDegistir(ilkPointer, ilkPointer->birSonraki); // - çıkarsa sıralama zaten dogurudur
yerDegistirildi = 1;
}
ilkPointer = ilkPointer->birSonraki;
// ilkKayit döngü görürse durur o yüzden döngu yapıalcak her fonksyıonda dısarda ilkKayit a işlem yapıp ilkPointer/araBul birSonraki kayda eşleyip dönguye gırıyoruz
while (ilkPointer->birSonraki != ilkKayit){
if (strcmp(ilkPointer->soyisim,ilkPointer->birSonraki->soyisim)>0){
yerDegistir(ilkPointer, ilkPointer->birSonraki);
yerDegistirildi = 1;
}
ilkPointer = ilkPointer->birSonraki;
}
ikinciPointer = ilkPointer;
}
while (yerDegistirildi);
printf("\nSoyisimlerine göre sıralama gerçekleştirildi.\n");
}
// Rehberdeki kayıtların yerlerini değiştirmek için yazılmış fonksiyon.
void yerDegistir(struct kaydol *degistir1, struct kaydol *degistir2){
char geciciIsim[50],geciciSoyisim[50];
char geciciTelefonNumarasi[15];
strcpy(geciciIsim,degistir1->isim);
strcpy(degistir1->isim,degistir2->isim);
strcpy(degistir2->isim,geciciIsim);
strcpy(geciciSoyisim,degistir1->soyisim);
strcpy(degistir1->soyisim,degistir2->soyisim);
strcpy(degistir2->soyisim,geciciSoyisim);
strcpy(geciciTelefonNumarasi,degistir1->telefonNumarasi);
strcpy(degistir1->telefonNumarasi,degistir2->telefonNumarasi);
strcpy(degistir2->telefonNumarasi,geciciTelefonNumarasi);
}
int main (){
setlocale(LC_ALL, "Turkish");
// ilkKayit'ı DÖNGÜYE SOKARSAK DÖNGÜ ÇALIŞMAZ O YÜZDEN ilkKayit'ı DIŞARDA YAPIYORUZ.
struct kaydol * ilkKayit = NULL; // "ilkKayit" değerine NULL değer atandı.
int yapilacakIslemSecimi;
char isim[50];
char soyisim[50];
do{
printf("1 - Telefon rehberine veri girişi yapmak için 1'e basınız. \n");
printf("2 - Telefon rehberinde isme göre arama yapmak için 2'ye basınız. \n");
printf("3 - Telefon numarasiyla arama yapmak için 3'e basınız. \n");
printf("4 - Telefon rehberini görmek için 4'e basınız.' \n");
printf("5 - Telefon rehberini soyisimlerine göre görmek için 5'e basınız. \n");
printf("6 - Telefon rehberiniden telefon numarası girerek kayıt silmek için 6'ya basınız. \n");
printf("7 - Çıkış! \n");
printf("\nLütfen gerçekleştirmek istediğiniz işlemin numarasını tuşlayınız: "); scanf("%d", &yapilacakIslemSecimi);
// 1
if (yapilacakIslemSecimi == 1){
// Yeni eklenen veri ("ilkKayit") ilkSirayaKisiEkle fonksiyonuna aktarılarak ilk değer yerine geçer.
ilkKayit = ilkSirayaKisiEkle(ilkKayit);
//system("CLS");
printf("\nTelefon rehberine bir kişi başarıyla eklendi.\n\n");
}
// 2
if (yapilacakIslemSecimi == 2){
if(ilkKayit == NULL){
printf("\nHerhangi bir veriye ulaşılamadı!\n\n");
}
else{
printf("\nAramak istediğiniz kişinin ismini yazınız: "); scanf("%s", isim);
printf("Aramak istediğiniz kişinin soyisminini yazınız: "); scanf("%s", soyisim);
isimSoyisimRehberdeBul(ilkKayit,isim,soyisim);
}
}
// 3
if (yapilacakIslemSecimi == 3){
if(ilkKayit == NULL){
printf("\nHerhangi bir veriye ulaşılamadı!\n\n");
}
else{
char aranacakTelNo[15];
printf("\nAramak istediğiniz kişinin telefon numarasını tuşlayınız: "); scanf("%s",aranacakTelNo);
telefonNumarasiylaAramaYap(ilkKayit,aranacakTelNo);
}
}
// 4
if (yapilacakIslemSecimi == 4){
rehberEkrandaGoster(ilkKayit);
}
// 5
if (yapilacakIslemSecimi == 5){
soyismeGoreSirala(ilkKayit);
rehberEkrandaGoster(ilkKayit);
}
// 6
if (yapilacakIslemSecimi == 6){
if(ilkKayit == NULL){
printf("\nHerhangi bir veriye ulaşılamadı!\n\n");
}
else{
char silmekIstenilenTelefonNumarasi[15];
printf("\nSilmek istediğiniz telefon numarasını tuşlayınız: "); scanf("%s",silmekIstenilenTelefonNumarasi);
ilkKayit = kayitSil(ilkKayit,silmekIstenilenTelefonNumarasi);
}
}
}
while(yapilacakIslemSecimi !=7);
return 0;
}