Я пишу программу в visual studio 6.0 это графический интерфейс пользователя.я использую MFC классы для графического интерфейса, он хранит записи для книг.В этой программе я получил необработанное исключение Ошибка нарушения доступа при попытке просмотреть записи.Я сохраняю записи в файле, используя обработку файлов в классе CFile.Когда я нажимаю кнопку «ОК» в окне сообщения об ошибке, это приводит меня к окну просмотра, запрашивающему имя файла как OUTPUT.C, но я не могу найти такой файл, и когда я нажимаю кнопку «Отмена» в этом окне просмотра, я перехожуФайл разборки, указывающий стрелку на эту строку 1021674C movsx edx,byte ptr [ecx]
.Я отчаянно хочу вашей помощи, это мое последнее задание, и я должен представить его завтра утром, пожалуйста, помогите мне.Я надеюсь, что я правильно опишу проблему, чтобы вы, ребята, могли ее правильно понять, пожалуйста, помогите мне.Код программы ниже:
#include "afxwin.h"
#include "resource.h"
struct books
{
char bookname[25];
char authorname[40];
float price;
int copies;
unsigned int ispn;
int page;
char issue_date[15];
char avail[10];
};
CFile fp("book.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
CString b_name;
unsigned int b_ispn;
class about_dialog:public CDialog
{
public:
about_dialog():CDialog(IDD_DIALOG1)
{
}
};
class add_dialog:public CDialog
{
private:
struct books b;
CString s[4];
public:
add_dialog():CDialog(IDD_DIALOG2)
{
b.price =0.0;
b.copies = b.page = 0;
b.ispn = 0 ;
}
void DoDataExchange(CDataExchange *p)
{
DDX_Text(p,IDC_EDIT1,s[0]);//name
DDX_Text(p,IDC_EDIT2,s[1]);//author
DDX_Text(p,IDC_EDIT3,b.copies);//copies
DDX_Text(p,IDC_EDIT4,b.ispn);//ispn
DDX_Text(p,IDC_EDIT5,b.price);//price
DDX_Text(p,IDC_EDIT6,b.page);//pages
DDX_Text(p,IDC_COMBO5,s[2]);//issu date
DDX_Text(p,IDC_COMBO6,s[3]);//availabel
}
void save()
{
CDialog::OnOK();
strcpy(b.bookname,s[0]);
strcpy(b.authorname,s[1]);
strcpy(b.issue_date,s[2]);
strcpy(b.avail,s[3]);
fp.SeekToEnd();
fp.Write(&b,sizeof(b));
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(add_dialog,CDialog)
ON_COMMAND(IDSAVE,save)
END_MESSAGE_MAP()
class getbook_dialog:public CDialog
{
public:
struct books b;
getbook_dialog():CDialog(IDD_DIALOG3)
{
b_name="";
b_ispn=0;
}
void DoDataExchange(CDataExchange *p)
{
DDX_Text(p,IDC_EDIT1,b_ispn);
DDX_Text(p,IDC_EDIT2,b_name);
}
};
class modify_dialog:public CDialog
{
private:
CString s[4];
struct books b;
public:
modify_dialog(struct books bb):CDialog(IDD_DIALOG2)
{
b=bb;
s[0]=bb.bookname;
s[1]=bb.authorname;
s[2]=bb.issue_date;
s[3]=bb.avail;
}
void DoDataExchange(CDataExchange *p)
{
DDX_Text(p,IDC_EDIT1,s[0]);//name
DDX_Text(p,IDC_EDIT2,s[1]);//author
DDX_Text(p,IDC_EDIT3,b.copies);//copies
DDX_Text(p,IDC_EDIT4,b.ispn);//ispn
DDX_Text(p,IDC_EDIT5,b.price);//price
DDX_Text(p,IDC_EDIT6,b.page);//pages
DDX_Text(p,IDC_COMBO5,s[2]);//issu date
DDX_Text(p,IDC_COMBO6,s[3]);//availabel
}
void save()
{
CDialog::OnOK();
strcpy(b.bookname,s[0]);
strcpy(b.authorname,s[1]);
strcpy(b.issue_date,s[2]);
strcpy(b.avail,s[3]);
fp.Seek(-(long)sizeof(b),CFile::current);
fp.Write(&b,sizeof(b));
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(modify_dialog,CDialog)
ON_COMMAND(IDSAVE,save)
END_MESSAGE_MAP()
class myframe: public CFrameWnd
{
public:
myframe()
{
CString mywindowclass;
CBrush mybrush;
mybrush.CreateSolidBrush(RGB(255,255,255));
mywindowclass = AfxRegisterWndClass(CS_HREDRAW |CS_VREDRAW,AfxGetApp()->LoadStandardCursor(IDC_ARROW),mybrush,AfxGetApp()->LoadIcon(IDI_ICON1));
Create(mywindowclass,"DATABASE",WS_OVERLAPPEDWINDOW,rectDefault,0,MAKEINTRESOURCE(IDR_MENU1));
}
void about()
{
about_dialog diag;
diag.DoModal();
}
void addrec()
{
Invalidate();
add_dialog diag;
diag.DoModal();
}
void byname()
{
struct books b;
CClientDC d(this);
CRect r;
int y;
char str[90];
fp.SeekToBegin();
y=0;
GetClientRect(&r);
CBrush mybrush(RGB(255,255,255));
d.FillRect(&r,&mybrush);
while(fp.Read(&b,sizeof(b))>=sizeof(b))
{
sprintf(str,"%-25s %-40s",b.bookname,b.copies);
d.TextOut(0,y,str,strlen(str));
y+=15;
}
}
void author()
{
struct books b;
CClientDC d(this);
int y;
char str[90];
CRect r;
GetClientRect(&r);
CBrush mybrush(RGB(255,255,255));
d.FillRect(&r,&mybrush);
fp.SeekToBegin();
y=0;
while(fp.Read(&b,sizeof(b))>=sizeof(b))
{
sprintf(str,"%-25s %-20s %-6u %-10s",b.bookname,b.authorname,b.page,b.copies);
d.TextOut(0,y,str,strlen(str));
y+=15;
}
}
void ispn()
{
struct books b;
CClientDC d(this);
int y;
char str[90];
CRect r;
GetClientRect(&r);
CBrush mybrush (RGB(255,255,255));
d.FillRect(&r,&mybrush);
fp.SeekToBegin();
y=0;
while(fp.Read(&b,sizeof(b))>=sizeof(b))
{
sprintf(str,"%-25s %-20s %-15s %-15s",b.bookname,b.authorname,b.ispn,b.avail);
// d.TextOut(0,y,str,strlen(str));
y+=15;
}
}
void modifyrec()
{
Invalidate();
bool found;
struct books b;
getbook_dialog diag;
if(diag.DoModal()==IDOK)
{
found = false;
fp.SeekToBegin();
while(fp.Read(&b,sizeof(b))>=sizeof(b))
{
if(b.ispn == b_ispn && strcmp(b.bookname,b_name)==0)
{
found = true;
break;
}
}
if(found == true )
{
modify_dialog mdiag(b);
mdiag.DoModal();
}
else
MessageBox("Record Not Found","Modify Record....");
}
}
void delrec()
{
bool found;
struct books b;
Invalidate();
getbook_dialog diag;
if(diag.DoModal()==IDOK)
{
found = false;
fp.SeekToBegin();
CFile ft("temp.dat",CFile::modeCreate | CFile::modeWrite);
while(fp.Read(&b,sizeof(b))>= sizeof(b))
{
if(b.ispn==b_ispn && strcmp(b.bookname,b_name)==0)
{
found = true;
}
else
ft.Write(&b,sizeof(b));
}
if(found == false )
MessageBox("Record Not Found","Delete Record....");
fp.Close();
ft.Close();
CFile::Remove("book.txt");
CFile::Rename("temp.dat","book.txt");
fp.Open("book.txt",CFile::modeCreate |CFile::modeNoTruncate |CFile::modeReadWrite);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(101,about)
ON_COMMAND(201,addrec)
ON_COMMAND(301,byname)
ON_COMMAND(302,author)
ON_COMMAND(303,ispn)
ON_COMMAND(401,modifyrec)
ON_COMMAND(501,delrec)
END_MESSAGE_MAP()
class myapp:public CWinApp
{
public:
int InitInstance()
{
myframe *fr;
fr = new myframe;
fr->ShowWindow(SW_SHOWMAXIMIZED);
m_pMainWnd = fr;
return 1;
}
};
myapp app;