PDA

View Full Version : سوال: مشكل در برنامه ( كار با فايل (مبتدي))



karim orooji
یک شنبه 13 دی 1388, 17:22 عصر
سلام دوستان
ميخوام با اين كد كه ميدونم مشكل داره يه سري اطلاعات گرفته ودر يك فايل متني ذخبره كنه
اما نميدونم چرا ذخيره نميشه
ممنون ميشم كمكم كنيد
اينم كدي كه فعلا نوشتم

#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <conio.h>
class library{
char ch;
int row;
char name_book[21];
char name_nevisande[21];
char date[9];
float piece;
char subject[40];
long num_book;
public:
library(){row=3;};
void input(); //read file
void search_subject(); //serach subject
void search_name_book(); //search name_book
void buy_book(); //buy book
void search_num_book(); //search number_book
long piece_buy_book(); //hazineh buy_book
}emp;
//===========input===================
void library::input()
{
char ch;
ofstream fp("user",ios::out);
//fp.open("user",ios::out);
if(!fp){
cout<<"cannat file open";
exit(0);
}
cout<<" name_book "<<" name_nevisande "<<" date dd/mm/yy "<<" piece "
<<" subject "<<" num_book ";
cout<<"\n================================================ ================================";
while(1)
{
gotoxy(1,row);
cin>>name_book;
if(!name_book[0])
break;
gotoxy(10,row);
cin>>name_nevisande;
gotoxy(20,row);
cin>>date;
gotoxy(30,row);
cin>>piece;
gotoxy(40,row);
cin>>subject;
gotoxy(50,row);
cin>>num_book;
cin>>ch;
if(ch=='n')
break;
fp.write((char *)&emp,sizeof(class library));
row++;
}
cout<<"Enter characters (\n and enter to end)\n";
fp.close();
cout<<"output from file : \n";
ifstream in("user",ios::in | ios::binary);
ofstream out("test",ios::out | ios::binary);
if(!in && !out){
cout<<"cannot open file";
exit(0);
}
//fp1.open("user",ios::in);
in.read((char *)&emp,sizeof(class library));
while(!in.eof())
{
/*gotoxy(1,row);
cout<<emp.name_book;
gotoxy(5,row);
cout<<emp.name_nevisande;
gotoxy(10,row);
cout<<emp.date;
gotoxy(15,row);
cout<<emp.piece;
gotoxy(20,row);
cout<<emp.subject;
gotoxy(25,row);
cout<<emp.num_book;*/
out.write((char *)&emp,sizeof(class library));
in.read((char *)&emp,sizeof(class library));
}
in.close();
out.close();
}
//==========main=====================
void main()
{
library st;
st.input();
}

mortezamsp
دوشنبه 14 دی 1388, 12:05 عصر
متغير هاي نوع char برا همشون اندازه تعيين نكرده بودي . مشكلت اين بود .

class library{
char ch;
int row;
char name_book[21];
char name_nevisande[21];
char date[9];
float piece;
char subject[40];
long num_book;


فايل ها رو نميدونم .

karim orooji
چهارشنبه 16 دی 1388, 10:33 صبح
كسي نيست اين مشكلمو حل كنه

mortezamsp
چهارشنبه 16 دی 1388, 17:00 عصر
چرا ! هست !

فکرکنم مشکل از اونجاییکه تو در درون خود شئ emp میخوای اون شئ رو بریزی تو فایل ! من اون تابع input رو از کلاس خارج کردم و شئ emp رو بصورت آرگومان دریافت کردم ، کار درست شد . این هم کد شما البته با کلی تخلیص(خلاصه سازی) :

#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <conio.h>
#include<stdio.h>
#include<string.h>
class library{
public :
char ch;
int row;
char name_book[21];
char name_nevisande[21];
char date[9];
float piece;
char subject[40];
long num_book;
public:
library(){row=3;};
void input(); //read file
void search_subject(); //serach subject
void search_name_book(); //search name_book
void buy_book(); //buy book
void search_num_book(); //search number_book
long piece_buy_book(); //hazineh buy_book
};
//===========input===================
void input( library* emp )
{
clrscr() ;
char ch;
ofstream fp ( "user.txt" , ios::out ) ;
if( !fp )
{
cout<<"err" ;
getch() ;
}

cout<<" name_book "<<" name_nevisande "<<" date dd/mm/yy "<<" piece "
<<" subject "<<" num_book ";
cout<<"\n================================================ ================================";

while(1)
{
gotoxy(1,emp->row);
cin>>emp->name_book;
if(!emp->name_book[0])
break;
gotoxy(10,emp->row);
cin>>emp->name_nevisande;
gotoxy(20,emp->row);
cin>>emp->date;
gotoxy(30,emp->row);
cin>>emp->piece;
gotoxy(40,emp->row);
cin>>emp->subject;
gotoxy(50,emp->row);
cin>>emp->num_book;
fp.write( (char*)&emp ,sizeof(class library) ) ;
ch=getch();
if(ch=='n')
break;
emp->row++;
}
fp.close() ;
}
//==========main=====================
void main()
{
library st;
input( &st );
}

karim orooji
چهارشنبه 16 دی 1388, 23:20 عصر
دوست عزيز ممنون از توجهتون اما اين برنامه هنور اطلاعات دو ذخيره نميكنه و يه شرط پايان نداره كه بگه كجا و به چه صورت از گرفتن اطلاعات جلوگيري كنه ( منظورم مثلا بازدن كليد صفر از برنامه خارج شود و اطلاعات در بانك ذخبره شده باشد)