khafan_bat
دوشنبه 11 مرداد 1389, 12:16 عصر
خسته نباشید.
ببینید یک استراکچر داریم که در برنامه نقش یک واسط ( نخودی ) بین کاربر و فایل رو بازی میکنه . اطلاعات گرفته شده از کاربر در داده های این استراکچر ذخیره میشوند و توسط دستور write در فایل ذخیره میشوند. این وسط از نظر کار کردن کد هیچ مشکلی وجود نداره اما یک چیزی رو من خوب متوجه نمی شم و اون اینه که موقعی که رکورد رو توسط دستور read از فایل می خونیم چطور داده های استراکچر رو از هم تشخیص میده و مقدار رو در استراکچر از فایل جایگزین میکنه ؟ منظورم اینه که داده ها ی عضو یک استراکچر دقیقا چگونه در فایل ذخیره میشوند. ؟؟
نگاه کنید کد زیر کاملا کار میکنه اما ذهنم هنوز درگیره :
بهتر هست بگم که تابع read دقیقا چطور کار میکنه ؟؟؟؟ آیا هر کدام از فیلد ها رو در یک خط جدا مینویسه ؟ یا پیشت سر هم ؟
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdlib.h>
struct employee {
char name[21];
int hour;
int hp;
} emp;
int main()
{
clrscr();
int row=3;
ofstream fp1("emp.dat",ios::out | ios::binary);
if(!fp1) {
cout<<"Cannot Open file.";
getch();
exit(0);
}
cout<<"Name "
<<"Hour "
<<"Hour Pay";
cout<<"\n---------------------------------------------------------";
// Get data from user and save into file as a record.
while(1){
gotoxy(1,row);
cin>>emp.name;
if(!emp.name[0])
break;
gotoxy(20,row);
cin>>emp.hour;
gotoxy(30,row);
cin>>emp.hp;
fp1.write((char *) &emp,sizeof(struct employee));
row++;
}
fp1.close();
cout<<"\n\nPress a key to see output... ";
getch();
ifstream fp2("emp.dat",ios::in|ios::binary);
if(!fp2) {
cout<<"Cannot open file.";
getch();
exit(0);
}
clrscr();
cout<<"Name "
<<"Hour "
<<"Hour Pay "
<<"Salary";
cout<<"\n---------------------------------------------------------";
row=3;
while(fp2.read((char *) &emp,sizeof(struct employee)))
{
gotoxy(1,row);
cout<<emp.name;
gotoxy(20,row);
cout<<emp.hour;
gotoxy(31,row);
cout<<emp.hp;
gotoxy(45,row);
cout<<emp.hour*emp.hp;
row++;
}
fp2.close();
getch();
return 0;
}
ببینید یک استراکچر داریم که در برنامه نقش یک واسط ( نخودی ) بین کاربر و فایل رو بازی میکنه . اطلاعات گرفته شده از کاربر در داده های این استراکچر ذخیره میشوند و توسط دستور write در فایل ذخیره میشوند. این وسط از نظر کار کردن کد هیچ مشکلی وجود نداره اما یک چیزی رو من خوب متوجه نمی شم و اون اینه که موقعی که رکورد رو توسط دستور read از فایل می خونیم چطور داده های استراکچر رو از هم تشخیص میده و مقدار رو در استراکچر از فایل جایگزین میکنه ؟ منظورم اینه که داده ها ی عضو یک استراکچر دقیقا چگونه در فایل ذخیره میشوند. ؟؟
نگاه کنید کد زیر کاملا کار میکنه اما ذهنم هنوز درگیره :
بهتر هست بگم که تابع read دقیقا چطور کار میکنه ؟؟؟؟ آیا هر کدام از فیلد ها رو در یک خط جدا مینویسه ؟ یا پیشت سر هم ؟
#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdlib.h>
struct employee {
char name[21];
int hour;
int hp;
} emp;
int main()
{
clrscr();
int row=3;
ofstream fp1("emp.dat",ios::out | ios::binary);
if(!fp1) {
cout<<"Cannot Open file.";
getch();
exit(0);
}
cout<<"Name "
<<"Hour "
<<"Hour Pay";
cout<<"\n---------------------------------------------------------";
// Get data from user and save into file as a record.
while(1){
gotoxy(1,row);
cin>>emp.name;
if(!emp.name[0])
break;
gotoxy(20,row);
cin>>emp.hour;
gotoxy(30,row);
cin>>emp.hp;
fp1.write((char *) &emp,sizeof(struct employee));
row++;
}
fp1.close();
cout<<"\n\nPress a key to see output... ";
getch();
ifstream fp2("emp.dat",ios::in|ios::binary);
if(!fp2) {
cout<<"Cannot open file.";
getch();
exit(0);
}
clrscr();
cout<<"Name "
<<"Hour "
<<"Hour Pay "
<<"Salary";
cout<<"\n---------------------------------------------------------";
row=3;
while(fp2.read((char *) &emp,sizeof(struct employee)))
{
gotoxy(1,row);
cout<<emp.name;
gotoxy(20,row);
cout<<emp.hour;
gotoxy(31,row);
cout<<emp.hp;
gotoxy(45,row);
cout<<emp.hour*emp.hp;
row++;
}
fp2.close();
getch();
return 0;
}