Samarqand davlat unversiteti raqamli texnolagiyalar fakulteti amaliy matematika va informatika yo


A'zo funktsiyalari bilan fayl kiritish/chiqarish



Download 65,83 Kb.
bet4/8
Sana10.07.2022
Hajmi65,83 Kb.
#772699
1   2   3   4   5   6   7   8
Bog'liq
Pragrammalash mustaqil ish 2-tarjimasi

A'zo funktsiyalari bilan fayl kiritish/chiqarish
Hozircha biz main() funksiyasiga I/U fayli tafsilotlarini boshqarishga ruxsat berdik. Murakkab sinflardan foydalanganda, sinfning a'zo funktsiyalari sifatida fayl kiritish-chiqarish operatsiyalarini kiritish tabiiydir. Ushbu bo'limda biz buni amalga oshiradigan ikkita dasturni ko'rsatamiz. Birinchisi oddiy a'zo funktsiyalaridan foydalanadi
Har bir ob'ekt faylni o'qish va yozish uchun javobgardir. Ikkinchisi qandayligini ko'rsatadi
Statik a'zo funktsiyalari bir vaqtning o'zida sinfning barcha ob'ektlarini o'qishi va yozishi mumkin.
Ba'zan sinfning har bir a'zosiga faylni o'qish va yozishga ruxsat berish mantiqiy.
Buoddiy yondashuv va bir vaqtning o'zida o'qilishi yoki yozilishi kerak bo'lgan ko'p ob'ektlar bo'lmasa yaxshi ishlaydi. In bu misolda biz a'zo funksiyalarini - diskOut() va diskIn() - shaxs sinfiga qo'shamiz.
Ushbu funksiyalar ob'ektga o'zini diskka yozish va o'zini qayta o'qish imkonini beradi.
Biz bir nechta soddalashtirilgan taxminlarni qildik. Birinchidan, sinfning barcha ob'ektlari saqlanadi.
PERSFILE.DAT deb nomlangan bir xil fayl. Ikkinchidan, yangi ob'ektlar har doim faylning oxiriga qo'shiladi.
DiskIn() funksiyasining argumenti bizga fayldagi istalgan shaxs uchun ma'lumotlarni o'qish imkonini beradi.
Kimga fayl oxiridan tashqari ma'lumotlarni o'qishga urinishning oldini olish uchun biz statik a'zo funktsiyasini o'z ichiga olamiz, diskCount(), bu faylda saqlangan odamlar sonini qaytaradi. Bunga ma'lumotlarni kiritishda dastur, faqat familiyadan foydalaning; joylarga ruxsat berilmaydi. Mana REWOBJ ro'yxati:
// rewobj.cpp
// person objects do disk I/O
#include // fayl oqimlari uchun
#include
using namespace std;
class person // shaxslar toifasi
{
protected:
char name[40]; // shaxsning ismi
int age; // odamning yoshi
public:
void getData(void) // shaxs ma'lumotlarini olish
{
cout << “\n Enter last name: “; cin >> name;
cout << “ Enter age: “; cin >> age;
}
void showData(void) // shaxs ma'lumotlarini ko'rsatish{
cout << “\n Name: “ << name;
cout << “\n Age: “ << age;
}
void diskIn(int); //read from file
void diskOut(); // statik faylga yozing
int diskCount(); // Qaytish raqami
// fayldagi shaxslar
};
void person::diskIn(int pn) // pn shaxs raqamini o'qing
{ // fayldan
ifstream infile; // oqim hosil qilish
infile.open(“PERSFILE.DAT”, ios::binary); // uni oching
infile.seekg( pn*sizeof(person) ); // faylni ko'chirish ptr
infile.read( (char*)this, sizeof(*this) ); // bir kishini o'qing
}
void person::diskOut() // fayl oxirigacha shaxsni yozing
{ ofstream outfile; // oqim hosil qilish
// uni oching
outfile.open(“PERSFILE.DAT”, ios::app | ios::binary);
outfile.write( (char*)this, sizeof(*this) ); // unga yozing
}
int person::diskCount() // qaytarilgan shaxslar soni
{ // faylda
ifstream infile;
infile.open(“PERSFILE.DAT”, ios::binary);
infile.seekg(0, ios::end); // oxiridan 0 baytgacha o'ting
//calculate number of persons
return (int)infile.tellg() / sizeof(person);
}
int main()
{
person p; // bo'sh odam qilish
char ch;
do { // odamlarni diskka saqlash
cout << “Enter data for person:”;
p.getData(); // ma'lumotlarni olish
p.diskOut(); // diskka yozish
cout << “Do another (y/n)? “; cin >> ch;
} while(ch==’y’); // foydalanuvchi "n" ni kiritmaguncha
int n = person::diskCount(); // faylda nechta odam bor?
cout << “There are “ << n << “ persons in file\n”;
for(int j=0; j{
cout << “\nPerson “ << j;
p.diskIn(j); // diskdan odamni o'qish
p.showData(); // ko'rsatuvchi shaxs}
cout << endl;
return 0;
}
Bu erda juda ko'p kutilmagan hodisalar bo'lmasligi kerak; siz ushbu dasturning aksariyat elementlarini ko'rgansiz oldin. U DISKFUN dasturi bilan bir xil ishlaydi. Biroq, e'tibor bering, hammasi
Diskning ishlashi tafsilotlari main() ga ko'rinmaydi, ular shaxs sinfida yashiringan.
Biz o'qishimiz va yozishimiz kerak bo'lgan ma'lumotlarning qaerdaligini oldindan bilmaymiz, chunki har birimiz
ob'ekt xotiraning boshqa joyida. Biroq, bu ko'rsatkich har doim qaerda ekanligimizni aytadi a'zo funksiyasida bo'lganimizda. Read() va write() oqim funksiyalarida o'qiladigan yoki yoziladigan ob'ektning xotira manzili *this va uning o'lchami sizeof(*this).
Dastur ishlayotgan paytda faylda allaqachon ikki kishi bo'lgan deb hisoblasak, ba'zi natijalar
boshlandi:
Enter data for person:
Enter name: Acheson
Enter age: 63
Enter another (y/n)? y
Enter data for person:
Enter name: Dulles
Enter age: 72
Enter another (y/n)? n
Person #1
Name: Stimson
Age: 45
Person #2
Name: Hull
Age: 58
Person #3
Name: Acheson
Age: 63
Person #4
Name: Dulles
Age: 72
Agar foydalanuvchi o'rnatish o'rniga sinf tomonidan ishlatiladigan fayl nomini belgilash imkoniyatiga ega bo'lishini istasangiz.
Biz bu erda qilganimizdek, uni a'zo funktsiyalariga kiritsangiz, siz statik a'zo o'zgaruvchisini yaratishingiz mumkin (aytaylik char fileName[]) va uni o'rnatish uchun statik funksiya. Yoki har bir ob'ektni berishni xohlashingiz mumkin
statik bo'lmagan funksiyadan foydalangan holda u bog'langan fayl nomi.

Download 65,83 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish