که اطلاعات را در فایل ذخیره کند و برای گرفتن اطلاعات از کلاس استفاده کند :11:
Printable View
که اطلاعات را در فایل ذخیره کند و برای گرفتن اطلاعات از کلاس استفاده کند :11:
قسمت لیست پیوندی تو همین انجمن رو بخون به دردت میخوره
سیستم کتابخانه ای با برنامه پاسکال
نرم افزار کتابخانه دیجیتال شرکت فناوران اطلاعات وستا به آدرسکد:http://www.vestasoft.ir
بورو حالشو ببر داداش
این یه قسمتیش ایراد د ارهکد:#include<iostream.h>
#include <conio.h>
#include<string.h>
#include<stdio.h>
/********************************* Class Word *******************************/
class Book
{
public:
Book() { Next=NULL; }
char B_Name[30];
char B_Writer[30];
Book *Next;
};
/****************************** Class ArrayList *******************************/
class ArrayList
{
public:
ArrayList();
ArrayList(char *);
~ArrayList();
void Add(char *,char *);
int Del(char ,char *);
int Search(char ,char *);
void Show(void);
char Na[30],Wr[30];
private:
Book *Head;
Book *Address1;
Book *Address2;
FILE *fp;
char FilePath[100];
};
////////////////////////////// ArrayList::ArrayList() ////////////////////////
ArrayList::ArrayList()
{
Head=NULL;
Address1=NULL;
Address2=NULL;
strcpy(FilePath,"Library.DB");
if( (fp=fopen(FilePath,"a+b"))==NULL )
{
cout<<"\n\n Unable to open file assigned !!!\n\n ";
getch();
}
else
{
Book Temp;
char na[30];
char wr[30];
fseek(fp,0,SEEK_SET);
while( !feof(fp) )
{
fread(&Temp,sizeof(Temp),1,fp);
strcpy(na,Temp.B_Name);
strcpy(wr,Temp.B_Writer);
Add(na,wr);
}// Fill The ArrayList
}// else
}
////////////////////////////// ArrayList::ArrayList() ////////////////////////
ArrayList::ArrayList(char *Path)
{
Head=NULL;
Address1=NULL;
Address2=NULL;
strcpy(FilePath,Path);
if( (fp=fopen(FilePath,"a+b"))==NULL )
{
cout<<"\n\n Unable to open file assigned !!!\n\n ";
getch();
}
else
{
Book Temp;
fseek(fp,0,SEEK_SET);
while( !feof(fp) )
{
fread(&Temp,sizeof(Temp),1,fp);
Add(Temp.B_Name,Temp.B_Writer);
}// Fill The ArrayList
}// else
}
////////////////////////////// ArrayList::~ArrayList() ////////////////////////
ArrayList::~ArrayList()
{
delete Na;
delete Wr;
delete FilePath;
fclose(fp);
}
///////////////////////////// ArrayList::Add /////////////////////////////////
void ArrayList::Add(char *na,char *wr)
{
// cheack if this is Employer Or Member
// if this is Employer do folowing
Book *Temp=new(Book);
strcpy(Temp->B_Name,na);
strcpy(Temp->B_Writer,wr);
Temp->Next=Head;
Head=Temp;
fwrite(Temp,sizeof(Temp),1,fp);
}
///////////////////////////// ArrayList::Del /////////////////////////////////
int ArrayList::Del(char nw,char *str)
{
// cheack if this is Employer Or Member
// if this is Employer do folowing
if( Search(nw,str) )
{
Book *Temp=new(Book);
Temp=Address1;
if(Address2)
Address2->Next=Address1->Next;
else
Head=Temp->Next;
delete Temp;
return 1;
}// if search was not found
return 0;
}
///////////////////////////// ArrayList::Search /////////////////////////////////
int ArrayList::Search(char nw,char *str)
{
Book *Temp=new Book;
Temp=Head;
Address2=NULL;
while(Temp)
{
Address1=Temp;
if(nw=='n' && !strcmp(Temp->B_Name,str) )
{
strcpy(Na,Temp->B_Name);
strcpy(Wr,Temp->B_Writer);
return 1;
}
if(nw=='w' && !strcmp(Temp->B_Writer,str) )
{
strcpy(Na,Temp->B_Name);
strcpy(Wr,Temp->B_Writer);
return 1;
}
Address2=Temp;
Temp=Temp->Next;
} // while Temp
return 0;
}
///////////////////////////// ArrayList::Show /////////////////////////////////
void ArrayList::Show(void)
{
Book *Temp=new(Book);
Temp=Head;
cout<<"\n\n =========================== ";
while( Temp!=NULL )
{
cout<<"\n Book Name: "<<Temp->B_Name;
cout<<" Book Writer:"<<Temp->B_Writer;
cout<<"\n --------------------------";
Temp=Temp->Next;
}
cout<<"\n\n =========================== ";
delete Temp;
getch();
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
char Detect(void)
{
int i;
do{
clrscr();
cout<<"\n 1) Book Name ";
cout<<"\n 2) Book Writer";
cout<<"\n\n Make your chice: ";
cin>>i;
switch(i)
{
case 1: return 'n';
case 2:return 'w';
}
}while(1);
}
//////////////////////////////////// Main() ///////////////////////////////////
void main(void)
{
int i;
char na[30];
char wr[30];
ArrayList Dic;
do{
clrscr();
cout<<"\n 1) Add Item ";
cout<<"\n 2) Delete Item";
cout<<"\n 3) Search";
cout<<"\n 4) Show All";
cout<<"\n 5) Exit";
cout<<"\n\n Make Your Choice: ";
cin>>i;
switch(i)
{
case 1:
clrscr();
cout<<"\n\n Please enter an B_Name word: ";
cin>>na;
cout<<"\n\n Please enter its B_Writer meaning: ";
cin>>wr;
Dic.Add(na,wr);
break;
case 2:
clrscr();
cout<<"\n\n Please enter the word you want to delete :";
cin>>na;
if(Dic.Del(Detect(),na))
cout<<"\n\n One item deleted !!! ";
else
cout<<"\n\n The word was not found !!! ";
break;
case 3:
clrscr();
cout<<"\n\n Please enter the word you want to search :";
cin>>na;
if( Dic.Search(Detect(),na) )
{
cout<<"\n\n Finding word is success !!! \n";
cout<<"\n The B_Name word : "<<Dic.Na;
cout<<"\n The B_Writer word :"<<Dic.Wr;
}
else
cout<<"\n\n The word was not found !!! ";
getch();
break;
case 4:
clrscr();
Dic.Show();
break;
}// switch
}while(i!=5);
}
وقتی که میخاد فایل رو باز کنه تا اطلاعاتو تو لیست پیوندی قرار بده (تو کانستراکتورش) برای دفعه اول هم که فایل چیزی توش نیست وارد حلقه while میشه در صورتی که از لحاظ منطقی فایل خالیه و چیزی توش نیست و نباید وارد حلقه بشه