PDA

View Full Version : سوال: ویرایش اطلاعات ذخیره شده



jeson_park
پنج شنبه 19 خرداد 1390, 14:30 عصر
سلام
یه ساختمان به شکل زیر داریم


struct Detail{
char name[10];
char family[20];
long id;
float avg;
int flag;
char address[50];
};

حالا با استفاده از متدی به نام add اطلاعلتمون رو از کاربر می گیریم و درون ساختمان ذخیره می کنیم


void add()
{

// clrscr();
Detail student;
char *s;
FILE *fp;
fp=fopen("student.txt","a");
gets(student.name);
cout<<"Name:";
gets(student.name);
cout<<"\nFamily:";
gets(student.family);
cout<<"\nId-Number:";
gets(s);
student.id=atoi(s);
cout<<"\nMoadel:";
gets(s);
student.avg=atof(s);
cout<<"\nAddress:";
gets(student.address);
student.flag=1;
fwrite(&student,sizeof(Detail),1,fp);
fclose(fp);
}

همون طور که میبینید در این متد ما اطلاعاتمون رو درون یک فایل به نام student.dat ذخیره کردیم
حالا اگه بخوایم یه تابع به نام edit بنویسیم برای ویرایش این اطلاعات باید چیکار کنیم؟؟
چون نمی دونم چه طوری باید فایل sudetn.dat رو ویرایش کنم
ممنون میشم اگه تابع edit رو برام بنویسید :خجالت:

jeson_park
پنج شنبه 19 خرداد 1390, 17:54 عصر
سلام
کسی نیست جواب منو بده؟؟
این بابا چرا تشکر زدیه زیر پست من؟؟:قهقهه:

quiet_programmer
پنج شنبه 19 خرداد 1390, 18:38 عصر
با سلام.

اگه cpp کنیش که راهتره. من کد cpp از Edit رو میزارم شاید به کمک بیاد.

این کد رو به سادگی میتونی به c تبدیلش کنی. با جایگذاری sekg با fseek و iso::beg با SEEK_SET و tellg با ftell و غیره

void Edit()
{
clrscr();
Detail student;
long int id;
bool check_exist=false;
fstream EditF("student.txt",ios::in | ios::out |ios::binary);
cout<<"\nEnter an ID to Edited :";
cin>>id;
EditF.seekg(0,ios::beg);

while(EditF.read((char *)&student,sizeof(struct Detail)))
{
if(student.id==id)
{
check_exist=true;
break;
}
}
if(check_exist)
{
int CurrentPos=EditF.tellp();
CurrentPos-=sizeof(Detail);

/*ويرايش اطلاعات*/

EditF.seekp(CurrentPos,ios::beg);
EditF.write((char*)&Student,sizeof(Detail));
cout<<"\n\t\tStudent with ID : < "<<Student.id<<" > Edit successfully.\n\n";
}
else cout<<"\n\nYour wanted Student does not exist\n\n";
EditF.close();
getch();
clrscr();
}

در ضمن فایلت رو بصورت باینری باز کن.

jeson_park
پنج شنبه 19 خرداد 1390, 20:01 عصر
با تشکر
اما توی turboc++ 5 توی خط زیر اررو میده
int CurrentPos=EditF.tellp();

quiet_programmer
پنج شنبه 19 خرداد 1390, 20:21 عصر
چه اروری میده؟

quiet_programmer
پنج شنبه 19 خرداد 1390, 20:37 عصر
این هم اونچیزایی که میخواستی

void Display()
{
clrscr();
Detail student;
cout<<"\t\tInformation of the all student in store:\n\n";
ifstream in("student.txt",ios::in | ios::binary);
while(in.read((char *)&student,sizeof(class Detail)))
{
/*دستورات نمايش مثلا*/
cout<<student.id<<endl;
}
cout<<"\nPress any key to continue...";
getch();
}
//----------------------------
void Add()
{
clrscr();
Detail student;
fstream store("student.txt",ios::in |ios::out | ios::binary);
cout<<"Enter spicification of a student :\n";
store_cars.seekg(0,ios::end);
/*دريافت اطلاعات از کاربر مثلا*/
cout<<"Enter ID :";
cin>>student.id;

store.write( (char*)&student,sizeof(class Detail));
store.close();
cout<<"\nDone successfully.\nPress any key to continue...\n\n";
getch();
}
//----------------------------

در ضمن کتابخونه های زیر رو هم include کن

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<fstream.h>
#include<stdlib.h>

jeson_park
پنج شنبه 19 خرداد 1390, 21:39 عصر
سلام
هیچ کدوم از این توابع کار نمی کنن

quiet_programmer
شنبه 21 خرداد 1390, 16:18 عصر
یعنی چی که کار نمیکنن؟

اگه خطا میده شماره خطا یا متن خطا رو ذکر کنید.
من هم با bcc32.exe و هم با turbo C++ v3.0 کامپایل کردم و مشکلی نداشته.