C Program Dosya Güncelleme
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
/* Dosya Güncelleme
Dosyada bilgileri tutulan öğrencilerden final notu 55 ile 59 arasında olan
tüm öğrencilerin notuna 5 puan ekleyerek dosyayı güncelleyen(update) program kodu
// Rastgele Erişimli Dosya
*/
#include <stdio.h>
#include <locale.h>
struct ogrenci
{
int numara;
char ad[20];
float final_notu;
};
void main()
{
setlocale(LC_ALL, "Turkish");
struct ogrenci bilgi;
int i = 1;
FILE* myPtr;
if ((myPtr = fopen("student.dat", "r+")) == NULL)
printf("Dosya Açılamadı\n");
/*
r+ -> Dosya hem okuma hem de yazma için açılır.
Dosya yok ise açılamaz.
*/
else
{
fread(&bilgi, sizeof(struct ogrenci), 1, myPtr); //İlk Kaydı Okur
/*fread: Dosyadan belirtilen kadar bayt okuyup hafızaya atar.
fread(bellek, boyutu, sayısı, dosya_gosterici);
bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak
bellekte saklanacağı alan
boyutu= okutulacak alanı uzunluğu
sayısı= verinin tekrarlanma sayısı
*/
while (!feof(myPtr)) //Dosyanın sonuna gelene kadar devam et.
/*
feof(Dosya İşaretçisi): Dosyanın sonunu gösterir.
*/
{
if (bilgi.final_notu >= 55 && bilgi.final_notu <= 59)
{
bilgi.final_notu += 5;
fseek(myPtr, (i - 1) * sizeof(struct ogrenci), SEEK_SET);
/* fseek: Dosyadaki konumu belirtilen işaretçinin konumunu ayarlar.
fseek(dosya_gostericisi,offset,symbolic_constant)
offset= dosyadaki konumu gösteren işaretçi
symbolic_constant= dosyanın neresinden okumaya başlayacağını gösterir.
SEEK_SET - başından başla
SEEK_CUR - mevcut bulunan konumdan başla
SEEK_END - dosyanın sonundan başla
*/
fwrite(&bilgi, sizeof(struct ogrenci), 1, myPtr);
/*fwrite: bellekteki görüntüsü ile dosyaya yazar.
fwrite(bellek, boyutu, sayısı, dosya_gosterici);
bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak
bellekte saklanacağı alan
boyutu= okutulacak alanı uzunluğu
sayısı= verinin tekrarlanma sayısı
*/
}
i++; //Bir sonraki kayıt için indisi artırır.
//Sıradaki kaydı oku.
fseek(myPtr, (i - 1) * sizeof(struct ogrenci), SEEK_SET);
fread(&bilgi, sizeof(struct ogrenci), 1, myPtr);
}
printf("Hesaplar Güncellendi");
}
fclose(myPtr); //Açılmış olan dosyayı kapatır.
}
C Programlama Dosyadan Dosyaya Kopyalama
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
/* Dosyadan Dosyaya Kopyalama
Sıralı erişimli "notlar.txt" isimli bir dosyada öğrenci no(int), ad ve not(float) bilgisi tutulmaktadır.
Bu dosyada yer alan kayıtlar arasında ismi "Ahmet" olan ve notu 60 ve üzerinde olan öğrencileri
"basari.dat" isimli rastgele erişimli bir dosyaya yazarak aktaran kod
// Sıralı Erişimli Dosya -> Rastgele Erişimli Dosya
*/
#include <stdio.h>
#include <string.h>
#include <locale.h>
struct ogrenci
{
int no;
char ad[20];
float not;
};
int main(void)
{
setlocale(LC_ALL, "Turkish");
FILE* ptr1, * ptr2;
struct ogrenci kayit;
ptr1 = fopen("notlar.txt", "r");
ptr2 = fopen("basari.dat", "w");
if (ptr1 != NULL && ptr2 != NULL)
{
fscanf(ptr1, "%d %s %f", &kayit.no, kayit.ad, &kayit.not);
/* fscanf: Dosyadan okuma yapan bir işlevdir.
fscanf(dosya_gostericisi, "%d %s %f", &myInt, myString, &myFloat)
*/
while (!feof(ptr1)) //Dosyanın sonuna gelene kadar devam et.
/*
feof(Dosya İşaretçisi): Dosyanın sonunu gösterir.
*/
{
if (strcmp(kayit.ad, "Ahmet") == 0 && kayit.no >= 60)
fwrite(&kayit, sizeof(struct ogrenci), 1, ptr2);
fscanf(ptr1, "%d %s %f", &kayit.no, kayit.ad, &kayit.not);
}
fclose(ptr1);
fclose(ptr2);
//fclose: Açılmış olan bir dosyayı kapatır.
}
}
/*
strcmp= birinci yazı ile ikinci yazı birbirine eşit ise 0 değeridir.
*/
C Programlama Bilgiyi Ekrana Basma
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
/* Bilgiyi Ekrana Basma
Dosyada bilgileri tutulan öğrencilerden en yüksek ikinci final notuna
sahip öğrencinin numara,ad ve notunu bilgilerini ekranan basan kod
// Rastgele Erişimli Dosya
*/
#include <stdio.h>
#include <locale.h>
struct ogrenci
{
int numara;
char ad[40];
float not;
};
void ikinciMax(FILE*okuPtr)
{
struct ogrenci bilgi, max1, max2;
fread(&bilgi, sizeof(struct ogrenci), 1, okuPtr); //İlk Kaydı okur.
/* fread: Dosyadan belirtilen kadar bayt okuyup hafızaya atar.
fread(bellek, boyutu, sayısı, dosya_gosterici);
bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak
bellekte saklanacağı alan
boyutu= okutulacak alanı uzunluğu
sayısı= verinin tekrarlanma sayısı
*/
max1 = bilgi;
max2 = bilgi;
while (!feof(okuPtr)) //Dosyanın sonuna gelene kadar devam et.
/*
feof(Dosya İşaretçisi): Dosyanın sonunu gösterir.
*/
{
if (bilgi.not> max1.not)
{
max2 = max1;
max1 = bilgi;
}
else if (bilgi.not> max2.not)
max2 = bilgi;
fread(&bilgi, sizeof(struct ogrenci), 1, okuPtr);
}
printf("İkinci En Büyük Final Notu Olan Öğrenci\n");
printf("%d\t%s\t%2.f\n", max2.numara, max2.ad, max2.not);
}
int main(void)
{
setlocale(LC_ALL, "Turkish");
FILE* myPtr;
if ((myPtr = fopen("student.dat", "r")) == NULL)
printf("Dosya Açılamadı\n");
else
ikinciMax(myPtr);
}
C Programlama Bilgiyi Ekrana Basma (2)
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
/* Bilgiyi Ekrana Basma (2)
Dosyada bilgileri tutulan öğrencilerden en düşük ikinci final notuna
sahip öğrencinin numara,ad ve notunu bilgilerini ekranan basan kod
// Rastgele Erişimli Dosya
*/
#include <stdio.h>
#include <locale.h>
struct ogrenci
{
int numara;
char ad[40];
float not;
};
void ikinciMin(FILE*okuPtr)
{
struct ogrenci bilgi, min1, min2;
fread(&bilgi, sizeof(struct ogrenci), 1, okuPtr); //İlk Kaydı okur.
/* fread: Dosyadan belirtilen kadar bayt okuyup hafızaya atar.
fread(bellek, boyutu, sayısı, dosya_gosterici);
bellek= dosyadan okutulacak yazdırılacak verinin geçici olarak
bellekte saklanacağı alan
boyutu= okutulacak alanı uzunluğu
sayısı= verinin tekrarlanma sayısı
*/
min1 = bilgi;
min2 = bilgi;
while (!feof(okuPtr)) //Dosyanın sonuna gelene kadar devam et.
/*
feof(Dosya İşaretçisi): Dosyanın sonunu gösterir.
*/
{
if (bilgi.not<min1.not)
{
min2 = min1;
min1 = bilgi;
}
else if (bilgi.not < min2.not)
min2 = bilgi;
fread(&bilgi, sizeof(struct ogrenci), 1, okuPtr);
}
printf("İkinci En Düşük Final Notu Olan Öğrenci\n");
printf("%d\t%s\t%2.f\n", min2.numara, min2.ad, min2.not);
}
int main(void)
{
setlocale(LC_ALL, "Turkish");
FILE* myPtr;
if ((myPtr = fopen("student.dat", "r")) == NULL)
printf("Dosya Açılamadı\n");
else
ikinciMin(myPtr);
}
C Programlama Yer Değiştirme
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
/* Yer Değiştirme */
#include <stdio.h>
#include <locale.h>
#define MAX_SIZE 25
struct student {
int schoolnumber;
char name[MAX_SIZE];
char surname[MAX_SIZE];
};
void display(FILE*);
int main()
{
setlocale(LC_ALL, "Turkish");
struct student school;
int i;
int students;
printf("Öğrenci Sayısını Giriniz: ");
scanf("%d", &students);
printf("\n");
FILE* fptr;
if ((fptr = fopen("student.txt", "w")) == NULL)
printf("Dosya Açılamadı\n");
else
{
rewind(fptr);
//fprintf(fptr, "%-28s%-30s%10s\n", "Öğrencinin Okul Numarası", "Öğrencinin Soyadı", "Öğrencinin Adı");
for (i = 0; i < students; ++i)
{
printf("%d. Öğrenci\n", i + 1);
printf("Öğrencinin Okul Numarası:");
scanf("%d", &school.schoolnumber);
printf("Öğrencinin Adı:");
scanf("%s", &school.name);
printf("Öğrencinin Soyadı:");
scanf("%s", &school.surname);
printf("\n");
fprintf(fptr, "%-10d%-16s%-16s\n", school.schoolnumber, school.name, school.surname);
}
fclose(fptr);
}
printf("\nÖğrenci Bilgileri Dosyaya Yazıldı\n");
display(fptr);
printf("\nYer Değiştirme Yapıldı\n");
fclose(fptr);
}
void display(FILE* fptr)
{
struct student tmp1 = {0,"",""};
struct student tmp2 = {0,"",""};
if ((fptr = fopen("student.txt", "r+")) == NULL)
printf("Dosya Açılamadı\n");
else
{
fseek(fptr, (0) * sizeof(struct student), SEEK_SET);
fread(&tmp1, sizeof(struct student), 1, fptr);
fseek(fptr, (2) * sizeof(struct student), SEEK_SET);
fread(&tmp2, sizeof(struct student), 1, fptr);
fseek(fptr, (0) * sizeof(struct student), SEEK_SET);
fwrite(&tmp2, sizeof(struct student), 1, fptr);
fseek(fptr, (2) * sizeof(struct student), SEEK_SET);
fwrite(&tmp1, sizeof(struct student), 1, fptr);
}
}
C Programlama Dosya Örnek Uygulama
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
/* Dosya Örnek Uygulama
Öğrencilere ait numara, isim, vize ve final notunun tutulduğu “notlar.txt” isimli dosya üzerinde işlemler yapabileceğiniz bir C programı yazınız. Buna göre programın menüsü şu şekilde olacaktır:,
1- Dosya oluştur / veri gir
2- Dosyadan oku / listele
3- Geçme notu 60 üstü olanları listele
4- Dosyada geçme notu 60 ve üstü olanları “gecenler.txt”, düşük olanları ise “kalanlar.txt” dosyasına yazdır.
5- Dosya boyutunu ekrana yazdır.
Not: Her bir menü seçeneği bir fonksiyon ile yapılıcaktır.
*/
#include <stdio.h>
#include <locale.h>
struct ogrenci {
int okul_no;
char isim[40];
int vize_notu;
int final_notu;
};
void dosyaOlustur()
{
struct ogrenci okul;
int i;
int ogrenci_sayisi;
printf("Öğrenci Sayısını Giriniz: ");
scanf("%d", &ogrenci_sayisi);
printf("\n");
FILE* fptr;
if ((fptr = fopen("notlar.txt", "w")) == NULL)
printf("Dosya Açılamadı\n");
else
{
for (i = 0; i < ogrenci_sayisi; ++i)
{
printf("%d. Öğrenci\n", i + 1);
printf("Öğrencinin Okul Numarası:");
scanf("%d", &okul.okul_no);
printf("Öğrencinin Adı:");
scanf("%s", okul.isim);
printf("Öğrencinin Vize Notu:");
scanf("%d", &okul.vize_notu);
printf("Öğrencinin Final Notu:");
scanf("%d", &okul.final_notu);
printf("\n");
fprintf(fptr, "%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu);
}
fclose(fptr);
}
printf("\nÖğrenci Notları Dosyaya Yazıldı\n");
}
void dosyaOku()
{
struct ogrenci okul;
FILE* fptr;
if ((fptr = fopen("notlar.txt", "r")) == NULL)
printf("Dosya Açılamadı\n");
else
{
fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu);
while (!feof(fptr))
{
printf("%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu);
fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu);
}
}
fclose(fptr);
}
void listele()
{
struct ogrenci okul;
FILE* fptr;
int gecme_notu;
if ((fptr = fopen("notlar.txt", "r")) == NULL)
printf("Dosya Açılamadı\n");
else
{
fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu);
gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6);
while (!feof(fptr))
{
if (gecme_notu >= 60)
{
printf("%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu);
}
fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu);
gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6);
}
}
fclose(fptr);
}
void dosyaKopyalama()
{
struct ogrenci okul;
FILE* fptr = fopen("notlar.txt", "r");
FILE* kalan = fopen("kalanlar.txt", "w");
FILE* gecen = fopen("gecenler.txt", "w");
int gecme_notu;
if (fptr == NULL)
printf("Dosya Açılamadı\n");
else
{
fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu);
gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6);
while (!feof(fptr))
{
if (gecme_notu >= 60)
{
fprintf(gecen, "%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu);
}
else
{
fprintf(kalan, "%d\t%s\t%d\t%d\n", okul.okul_no, okul.isim, okul.vize_notu, okul.final_notu);
}
fscanf(fptr, "%d%s%d%d", &okul.okul_no, okul.isim, &okul.vize_notu, &okul.final_notu);
gecme_notu = (okul.vize_notu * 0.4) + (okul.final_notu * 0.6);
}
}
printf("\nGeçenler ve Kalanlar İçin Ayrı Dosyalar Oluşturuldu.\n");
fclose(kalan);
fclose(gecen);
fclose(fptr);
}
void dosyaBoyutu()
{
int i = 0;
char k;
FILE* fptr = fopen("notlar.txt", "r");
if (fptr == NULL)
printf("Dosya Açılamadı\n");
else
{
k = fgetc(fptr);
while (!feof(fptr))
{
i++;
k = fgetc(fptr);
}
}
printf("Dosyanın Boyutu: %d Byte\n", i);
fclose(fptr);
}
int main()
{
setlocale(LC_ALL, "Turkish");
int sec = 6;
while (sec != 7)
{
printf("\n1 - Dosya Oluştur\n"
"2 - Dosyayı Oku\n"
"3 - Dersi Geçen Öğrencilerin Listesi\n"
"4 - Geçenler Ayrı Dosyaya Kalanları Ayrı Dosyaya Yazdır\n"
"5 - Dosya Boyutunu Ekrana Yazdır\n"
"6 - Çıkış\n");
printf("Seçiminizi Yapınız:");
scanf("%d", &sec);
printf("\n");
if (sec == 1) dosyaOlustur();
else if (sec == 2) dosyaOku();
else if (sec == 3) listele();
else if (sec == 4) dosyaKopyalama();
else if (sec == 5) dosyaBoyutu();
else if (sec == 6) exit(0);
}
}