|
Admin
Ruh Halim:
Durum: Offline
Üyelik tarihi: Apr 2009
Bulunduğu yer: İstanbul
Yaş: 25
Konular: 292
Mesajlar: 1,466
Tecrübe Gücü: 6
Tecrübe Puanı: 280
|
BILM 102 Algoritma ve Programlama (2008-2009) Ödev 2
Ödev:
Alıntı:
Fatih Üniversitesi
Bilgisayar Mühendisliği
2008-2009 Bahar Dönemi
BiLM 102 Algoritma ve Programlama
Ödev 2
Teslim Tarihi:11-05-2009 Saat 13.00
Bu ödevde, bir kütüphane otomasyon programı yazılacaktır. Programda kitap bilgileri, kategori bilgileri ve kitabı ödünç alan kişilerin bilgileri dosyalarda tutulacaktır. Kitap ve Odunc bilgileri rastgele erişimli dosya , kategori dosyası ise sıralı erişimli dosya olacaktır. Her üç dosyada tutulması gereken kayıt alanları aşağıda listelenmiştir:
Kitap.muh
-------------
- kitap no (kayıt anahtarı)
- kategori adı
- kitap adı
- basım yılı
- yazar adı
- yayınevi
- rafta var mı (evet/hayır veya 1/0)
Odunc.muh
----------------
- odunc no (kayıt anahtarı)
- kitap no
- odunc alan kisi ad ve soyad
- alış tarihi (--/--/--)
- süre (gun sayısı)
- teslim etti mi (evet /hayır veya 1/0)
Kategori.txt
-------------------
- kategori adı
Program aşağıdaki gibi bir menü ile başlıyacak:
* * * * * * * * * * * * * * * * * * * * * *
* 1. Kategori Ekle *
* 2. Kitap Ekle *
* 3. Kitap Bilgileri Güncelle *
* 4. Kitap Listele *
* 5. Kitap Odunc Verme Islemi *
* 6. Kitap Teslim Alma Islemi *
* 7. Oduncteki Kitapları Raporla *
* 8. Çıkış *
* * * * * * * * * * * * * * * * * * * * * *
Menülerin açıklaması :
1. Kategori ekle: sıralı erişimli dosya olan “kategori.txt ” dosyasına kategori adları eklemeyi sağlar.
2. Kitap Ekle: Rastgele erişimli dosya olan “kitap.muh” dosyasına kayıt eklemeyi sağlar. Kitap-no alanı “kitap.muh” dosyasının anahtar alanıdır. Yani aynı kitap numaralı iki kayıt olmamalıdır. Kitap no alan bilgisini bilgisayar otomatik olarak vermelidir. Dosyada kayıt yok ise 1 , kayıt var ise en son kaydın bir fazlasını kitap nosu olarak vermelidir. Kullanıcıdan kategori adını isterken “kategori.txt ” dosyasında kayıtlı kategorilerden seçim yapması zorlanmalı ve seçilen kategori ismi otomatik olarak atanmalıdır. Örnek olarak aşağıdaki gibi yapılabilir:
“Kategori.txt” dosyanızda aşağıdaki kayıtların olduğunu varsayalım:
Bilgisayar
Roman
Egitim
Felsefe
>>Ekliyeceğiniz kitabın kategori numarasını seçiniz:
1. Bilgisayar
2. Roman
3. Egitim
4. Felsefe
>>Seciminiz: 1
Ayrıca kitap ekle menüsünden kitap ekleneceği zaman “raftami” alanı kullanıcıya sorulmadan otomatik olarak “evet” yada “1” olarak doldurulmalıdır.
3. Kitap Bilgilerini Güncelle: Güncellenecek kayıta kullanıcıdan kitap numarası alınarak erişilir. Kullanıcı bu menüyü kullanarak kitap numarasını ve raftamı alanları dışındaki alanları güncelleyebilmelidir. Bir güncelleme işlemi aşağıdaki gibi yapılabilir:
>> Güncellenecek kitabın numarasını giriniz: 3
Bu kitabın kategorisi : Egitim
Guncellemek istiyor musunuz (1-evet 0-hayır) 1
>>Kitabın kategori numarasını seçiniz:
1. Bilgisayar
2. Roman
3. Egitim
4. Felsefe
>>Seciminiz: 1
Degisiklik hafızaya alinmistir.
Bu kitabın adi: C de problem çozme mantiği
Guncellemek istiyor musunuz (1-evet 0-hayır) 0
Bu kitabın basim yili: 2008
Guncellemek istiyor musunuz (1-evet 0-hayır) 0
Bu kitabın yazar adi: Gunay Karlı
Guncellemek istiyor musunuz (1-evet 0-hayır) 0
Bu kitabın yayınevi: Papatya
Guncellemek istiyor musunuz (1-evet 0-hayır) 1
Lutfen yayın evi girisi yapınız: Pusula
Degisiklik hafızaya alinmistir.
Kaydiniz guncellenmistir.
4. Kitap Listele : Rafta olan tüm kitapları listeler
5. Kitap Odunc Verme Islemi: “Odunc.muh” dosyasına kayıt eklenecek şeklide kitapnosu (Kitap.muh dosyasında bu numara var mı yokmu tespit edilmesi lazımdır) alan kisinin ad soyad bilgileri, alış tarihi ve süre bilgileri girilip kayıt atılır. Her kayıt için otomatik olarak bir odunc numarası oluşturulur ve bu kayıt numarası ile kayıtlar eklenir. Kitap dosyasından da aynı kitap bulunup raftamı alanı (hayır yada 0) bilgisi girilerek bu dosyadaki kayıt bilgisi de güncellenir. Tarih bilgisi için gerekli kontrollerin yapılması gerekir.
6. Kitap Teslim Alma İşlemi: Teslim alınacak kitap için kullanıcıdan ödünç numarası istenir. Odunç tablosundan kayıda ulaşılır. Program kullanıcıdan teslim tarihini girmesini ister ve verilen süreyi aşıp aşmadığını kontrol eder. Eğer süreyi aşmış ise her aşılan gün için 5 ytl ödemesi gerekir. 3 gün gecikme yapılmış ise 15 tl ceza ücreti ödemeniz gerekir diye mesaj yazdırır. Teslim işleminin tamamlanması için “odunc.muh” dosyasına teslim etti alanına “evet yada 1” yazılır. Ödünç alınan kitap numarasına bakılıp “kitap.muh” dosyasından ilgili kayıtta raftamı alanı degistirilerek kayıt güncellenir.
7. Oduncteki Kitapları Raporla : Ödünç verilmiş ve geriye teslim edilmemiş tüm kitapları xxx.doc dökümanına liste halinde yazdırılacaktır. Bu raporda aşağıdaki bilgiler yazdırılacaktır.
Odunc No Kitap No Kitap Adı Alan Kisi Alıs Tarihi Kalan gün sayısı
--------- -------- ------------- ----------- -------------- ---------------------
|
Kod:
PHP- Kodu:
#include<stdio.h>
#include<string>
#include<conio.h>
struct Kategori
{
char kategoriAd[25];
int kategorino;
};
struct Kitap
{
char kategori_isim[30];
int kategorino;
char kitapAdi[30];
int basimTarihi;
char yazaradi[30];
char yayinevi[30];
char raftami;
};
struct Odunc
{
int oduncno;
int kategorino;
char ad[25];
char soyad[25];
char alisTarihi[25];
int verilen_sure;
};
void menu(){
printf("\n1.Kategori Ekle\n");
printf("2.Kitap Ekle\n");
printf("3.Kitap Guncelle\n");
printf("4.Kitap Listele\n");
printf("5.Kitap Odunc Verme \n");
printf("6.Kitap Teslim Alma \n");
printf("7.Odunc Raporla\n");
printf("8.Cikis\n");
printf(">>Secim girin:");
}
void kategori_ekle(FILE *kategoriptr)
{
Kategori kategori;
static int no=0;
kategoriptr=fopen("kategori.txt","a+");
if(kategoriptr==NULL)
printf("\n\tDosya acilamadi!");
else{
printf("\n\tLutfen bir kategori ismi giriniz:");
scanf("%s", kategori.kategoriAd);
rewind(kategoriptr);
while(!feof(kategoriptr))
{
fscanf(kategoriptr, "%s%d", kategori.kategoriAd, &no);
}
no++;
kategori.kategorino = no;
printf("\n\tKategori basariyla eklendi...\n");
fprintf(kategoriptr, "%d %s\n", kategori.kategorino, kategori.kategoriAd);
}
}
void kitap_ekle(FILE *kategoriptr, FILE *kitapptr)
{
Kategori kategori;
Kitap kitap = {0};
int secim;
kategoriptr=fopen("kategori.txt","a+");
kitapptr=fopen("kitap.txt","a+");
if(kategoriptr==NULL || kitapptr==NULL)
printf("\n\tDosya acilamadi!");
else{
printf("\n\t>>Ekliyeceginiz kitabin kategorisini secin :");
printf("\n");
rewind(kategoriptr);
fscanf(kategoriptr, "%d%s", &kategori.kategorino,kategori.kategoriAd);
while(!feof(kategoriptr))
{
printf("\n\t\t%d %s", kategori.kategorino, kategori.kategoriAd);
fscanf(kategoriptr, "%d%s", &kategori.kategorino,kategori.kategoriAd);
}
printf("\n\n\t>>Seciminiz: ");
scanf("%d", &secim);
printf("\n");
rewind(kategoriptr);
while(!feof(kategoriptr))
{
fscanf(kategoriptr, "%d%s", &kategori.kategorino,kategori.kategoriAd);
}
if(secim!=kategori.kategorino)
{
printf("\n\thatali secim!!! \n");
}
else
{
rewind(kitapptr);
while(!feof(kitapptr))
fread(&kitap, sizeof(kitap), 1, kitapptr);
kitap.kategorino++;
strcpy(kitap.kategori_isim, kategori.kategoriAd);
printf("\nKitap adi: ");
scanf("%s",kitap.kitapAdi);
printf("Basim yili: ");
scanf("%d", &kitap.basimTarihi);
printf("Yazar adi: ");
scanf("%s",kitap.yazaradi);
printf("Yayinevi: ");
scanf("%s",kitap.yayinevi);
kitap.raftami = 'E';
fseek(kitapptr, sizeof(kitap) * (kitap.kategorino - 1), SEEK_SET);
fwrite(&kitap, sizeof(kitap), 1, kitapptr);
printf("\nKayit tamamlanmistir.\n\n");
}
}
fclose(kategoriptr);
fclose(kitapptr);
}
void kitap_guncelle(FILE *kategoriKayit, FILE *kitapKayit)
{
Kategori kategori;
Kitap kitap;
int kitap_no;
int guncelle, secim=0;
char karakter[5], sec=0;
printf("\n\tGuncellenecek kitabin numarasini giriniz: ");
scanf("%d", &kitap_no);
rewind(kitapKayit);
while(!feof(kitapKayit))
{
fread(&kitap, sizeof(kitap), 1, kitapKayit);
}
if(kitap_no == kitap.kategorino){
printf("\n\tBu kitabin kategorisi: %s\n", kitap.kategori_isim);
printf("\n\tGuncellemek istiyormusunuz (1 - evet 0 - hayir): ");
scanf("%d", &guncelle);
if(guncelle == 0)
printf("\n\tGuncelleme islemi iptal edilmistir.\n\n");
else if(guncelle == 1)
{
printf("\n\t>>Kitabin kategori numarasini seciniz:\n");
rewind(kategoriKayit);
fscanf(kategoriKayit, "%d%s", &kategori.kategorino,kategori.kategoriAd);
while(!feof(kategoriKayit))
{
printf(" %d %s\n", kategori.kategorino, kategori.kategoriAd);
fscanf(kategoriKayit, "%d%s", &kategori.kategorino,kategori.kategoriAd);
}
printf("\n\t>> Seciminiz: ");
scanf("%d", &secim);
printf("\n");
rewind(kategoriKayit);
while(!feof(kategoriKayit))
{
fscanf(kategoriKayit, "%d%s", &kategori.kategorino,kategori.kategoriAd);
}
if(secim != kategori.kategorino)
printf("\n\thatali secim!!! \n");
if(secim == kategori.kategorino)
{
strcpy(kitap.kategori_isim, kategori.kategoriAd);
fseek(kitapKayit, sizeof(kitap) * (kitap.kategorino - 1), SEEK_SET);
fwrite(&kitap, sizeof(kitap), 1, kitapKayit);
printf("\n\tDegisiklik hafizaya alinmistir..\n\n");
}
printf("\n\tMenuden guncellemek istediginiz bilgileri seciniz:\n");
while(sec != '5')
{
printf("\n\t1.Kitap Adi");
printf("\n\t2.Basim Yili");
printf("\n\t3.Yazar Adi");
printf("\n\t4.Yayinevi");
printf("\n\t5.Cikis");
printf("\n\t>>Seciminiz: ");
scanf("%d",sec);
printf("\n\n");
switch(sec)
{
case 1:
printf("\n\tKitap adi: ");
gets(kitap.kitapAdi);
printf("\n\tDegisiklik hafizaya alinmistir.\n");
break;
case 2:
printf("\n\tBasim yili: ");
scanf("%d", &kitap.basimTarihi);
printf("\n\tDegisiklik hafizaya alinmistir.\n");
break;
case 3:
printf("\n\tYazar adi: ");
gets(kitap.yazaradi);
printf("\n\tDegisiklik hafizaya alinmistir.\n");
break;
case 4:
printf("\n\tYayinevi: ");
gets(kitap.yayinevi);
printf("\n\tDegisiklik hafizaya alinmistir...\n\n");
break;
case 5:
printf("\n\tKaydiniz guncellenmistir.\n\n");
break;
default:
printf("\n\tYanlis secim yaptiniz...\n");
}
}
fseek(kitapKayit, sizeof(kitap) * (kitap.kategorino - 1), SEEK_SET);
fwrite(&kitap, sizeof(kitap), 1, kitapKayit);
}
}
else
printf("\n\thatali secim!!! \n");
}
void teslim_alma(FILE *kitapptr, FILE *oduncptr)
{
Kitap kitap;
Odunc odunc={0};
int odunc_no=0;
char teslim_tarihi[15];
printf("\n\tOdunc numarasini giriniz: ");
scanf("%d", &odunc_no);
fseek(oduncptr, sizeof(odunc)* (odunc.oduncno - 1), SEEK_SET);
fread(&odunc, sizeof(odunc), 1, oduncptr);
if(odunc_no != odunc.oduncno)
printf("\n\t%d numarali odunc kaydi bulunamadi....\n\n",odunc_no);
else
{
printf("\n\tTeslim tarihini giriniz (--/--/--): ");
scanf("%s",teslim_tarihi);
getchar();
}
}
void odunc_verme(FILE *kitapptr, FILE *oduncptr)
{
Kitap kitap;
Odunc odunc;
int kitap_no, gun, ay, yil;
printf("\n\tKitap no: ");
scanf("%d", &kitap_no);
fseek(kitapptr, sizeof(kitap) * (kitap_no - 1), SEEK_SET);
fread(&kitap, sizeof(kitap), 1, kitapptr);
if(kitap_no != kitap.kategorino)
printf("\n\t%d numarali kitap kaydi bulunamadi...\n\n", kitap_no);
else
{
while(!feof(oduncptr))
fread(&odunc, sizeof(odunc), 1, oduncptr);
odunc.oduncno++;
odunc.kategorino = kitap.kategorino;
printf("\n\tLutfen asagidaki bilgileri giriniz:\n");
fflush(stdin);
printf("\tAdi: ");
gets(odunc.ad);
printf("\tSoyadi: ");
gets(odunc.soyad);
printf("\tAlis tarihi (--/--/--): ");
gets(odunc.alisTarihi);
printf("\tOdunc verilen_suresi: ");
scanf("%d", &odunc.verilen_sure);
sscanf(odunc.alisTarihi, "%d/%d/%d", &gun, &ay, &yil);
fseek(oduncptr, sizeof(odunc) * (odunc.oduncno - 1), SEEK_SET);
fwrite(&odunc, sizeof(odunc), 1, oduncptr);
kitap.raftami = 'H';
fseek(kitapptr, sizeof(kitap) * (kitap.kategorino - 1), SEEK_SET);
fwrite(&kitap, sizeof(kitap), 1, kitapptr);
printf("\n\tKayit basariyla tamamlandi...\n\n");
}
}
void kitap_listele(FILE *kitapptr)
{
Kitap kitap;
rewind(kitapptr);
fread(&kitap, sizeof(kitap), 1, kitapptr);
printf("-------------------------------------------------------------------------------\n");
printf("Kitap No Kategori Adi Kitap Adi Basim Yili Yazar Adi Yayinevi\n");
printf("-------------------------------------------------------------------------------\n");
while(!feof(kitapptr))
{
printf("%d%20s%20s%10d%16s%12s\n", kitap.kategorino, kitap.kategori_isim, kitap.kitapAdi, kitap.basimTarihi, kitap.yazaradi, kitap.yayinevi);
fread(&kitap, sizeof(kitap), 1, kitapptr);
}
printf("-------------------------------------------------------------------------------\n");
printf("\n");
}
void kitapraporla(FILE *kitapptr, FILE *oduncptr,FILE *XXX)
{
Kitap kitap;
Odunc odunc;
char kitap_adi[30];
XXX=fopen("xxx.doc","w+");
if(XXX==NULL)
printf("dosya acilamadi!");
else{
fseek(kitapptr, sizeof(odunc) * (kitap.kategorino - 1), SEEK_SET);
fread(&kitap, sizeof(kitap), 1, kitapptr);
printf("-----------------------------------------------------------------------\n");
printf("Adi Kitap No Alan Kisi Alis Tarihi verilen Gun Sayisi\n");
printf("-----------------------------------------------------------------------\n");
rewind(oduncptr);
fread(&odunc, sizeof(odunc), 1, oduncptr);
while(!feof(oduncptr))
{
printf("\n%s %d %s %s %s %d\n", kitap.kitapAdi, odunc.kategorino, odunc.ad, odunc.soyad, odunc.alisTarihi, odunc.verilen_sure);
fprintf(XXX,"\n%s %d %s %s %s %d\n", kitap.kitapAdi, odunc.kategorino, odunc.ad, odunc.soyad, odunc.alisTarihi, odunc.verilen_sure);
fread(&odunc, sizeof(odunc), 1, oduncptr);
}
fclose(XXX);
}
}
int main()
{
FILE *kategori,*kitap,*odunc,*rapor;
int secim;
kategori=fopen("kategori.txt","a+");
kitap=fopen("kitap.txt","ab+");
odunc=fopen("odunc.txt","ab+");
rapor=fopen("xxx.doc","w+");
while(secim!=8)
{
menu();
scanf("%d",&secim);
switch(secim)
{
case 1:
kategori_ekle(kategori);
break;
case 2:
kitap_ekle(kategori, kitap);
break;
case 3:
kitap_guncelle(kategori, kitap);
break;
case 4:
kitap_listele(kitap);
break;
case 5:
odunc_verme(kitap,odunc);
break;
case 6:
teslim_alma(kitap, odunc);
break;
case 7:
kitapraporla(kitap,odunc,rapor);
break;
default:
printf("\n\thatali secim!!! \n");
break;
}
}
if(secim==8)
return 0;
getchar();
return 0;
}
Arkadaşlar kodda sorunlar olabilir ben yaptıgım kadarını ekledim, 100 alan biri olursa onuda ekleriz
__________________
Bir coşku var içimde bu gün kıpır kıpır
Uzak çok uzak bir yerleri özlüyorum
Gözlerim parke parke taş duvarlarda
Açılıyor hayal pencerelerim
Hafif bir rüzgar gibi süzülüyorum
Kekik kokulu koyaklardan aşarak
Güvercinler ülkesinde dolaşıyor
Bir çeşme başı arıyorum
Yarpuzlar arasında kendimi bırakıp
Mis gibi nane kokuları arasında
Ruhumu dinlemek istiyorum
Zikre dalmış her şey
Güne gülümserken papatyalar
Dualar gibi yükselir ümitlerim
Güneşle kol kola kırlarda koşarak
Siz peygamber çiçekleri toplarken
Ben çeşme başında uzanmak istiyorum
Huzur dolu içimde
Ben sonsuzluğu düşünüyorum
Ey sonsuzluğun sahibi, sana ulaşmak istiyorum
Durun kapanmayın pencerelerim
Güneşimi kapatmayın
Beton çok soğuk, üşüyorum...
Muhsin YAZICIOĞLU
Dualarımız seninle memleket sevdalısı
т~ツ
|