安徽工业大学
《面向对象程序设计语言》课程设计报告
图书管理系统
学号:149074329 姓名:李家景
目录
1 问题分析与功能定义 2对象(类)设计及实现 3核心控制设计 4测试分析 5心得体会 6源程序代码
项目名称:图书管理系统设计
一、 问题分析与功能定义
二十一世纪是信息的社会,信息作为社会最主要的资源,将成为战略资源引起人们广泛的关注.如何获取信息?图书是我们最好的获取信息的方式,但由于图书馆图书收藏量大大增加,使传统的图书管理员的工作日益繁重起来。迫使人们起用新的管理方法来管理图书,但如何把图书管理员从繁重的工作中解脱出来呢?
科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普及和使用。信息化时代的到来成为不可抗拒的潮流,人类文明正在进入一个崭新的时代。因此,图书管理系统也以方便、快捷、费用低的优点正慢慢地进入人们的生活,将传统的图书管理方式彻底的解脱出来,提高效率,减轻工人人员以往繁忙的工作,减小出错的概率,使读者可以花更多的时间在选择书和看书上。从而使人们有更多时间来获取信息、了解信息、掌握信息 .
1、设计内容及要求
设计一个图书馆管理系统,完成图书管理和读者管理的功能,并能对借阅信息进行管理,要求完成一下功能,图书资料管理,可以添加、修改、删除、查询书籍信息,读者资料管理,可以添加、修改、删除、查询读者信息;借书管理,可以进行添加借书信息;还书管理,可以进行还书信息;
该项目是在Visual C++ 6.0的平台下用c++语言实现,创建对象,程序运行开始,打开文件并将其分别链入链表之中;程序结束关闭并保存文件。整体系统功能全部由链表实现。
2、模块图
图书馆管理系统 借书 还书 读者维护 图书维护 离开
二、对象(类)设计及实现 1、概要设计
Reader读者类、RDatabase读者库类、Book图书类、BDatabase 图书库类
class RDatabase //读者库类 int top;// 读者记录指针 Reader read[Maxr];// 读者记录 RDatabase() ;//构造函数,将reader。txt读到read[]中 void clear();//删除所有读者信息 int addreader(int n,char *na);//增添读者信息 Reader *query(int readerid);//按编号查找 void disp();//输出所有读者信2、详细设计 1)类的原型描述 class Reader //读者类 int tag;//删除标记1:已删0:未删 int no;//读者编号 char name[10];//读者姓名 int borbook[Maxbor]; //所借图书 Reader() {} char *getname() //获取姓名 int gettag() //获取删除标记 int getno() //获取读者编号 void setname(char na[])//设置姓名 void delbook() //设置删除标记 void addreader(int n,char *na); //增加读者 void borrowbook(int bookid); //借书操作 int retbook(int bookid); //还书操作 void disp(); //输出读者信息 class Book //图书类 int tag; //删除标记1:已删0:未删 int no; //图书编号 char name[20];//书名 int onshelf;//是否在架1:在架0:已借 Book() {} char *getname();//获取姓名 int getno();//获取图书编号 int gettag(); //获取删除标记 void setname(char na[]);//设置书名 void delbook();//删除图书 void addbook(int n,char *na);//增加图书 int borrowbook() ;//借书操作 void retbook();//还书操作 void disp();//输出图书 息 int Readernum();//记录读者信息 void readerdata();//读者库维护 ~RDatabase();//析构函数,将read[]写入reader。txt文件中 class BDatabase //图书库类 int top;//图书记录指针 Book book[Maxb];//图书记录 BDatabase() ;//构造函数,将book.txt读到book[]中 void clear();//全删 int addbook(int n,char *na);//增加图书 Book *query(int bookid);//查找图书 void disp();//输出所有图书信息 void bookdata();//图书库维护 ~BDatabase();//析构函数,将book[]写入book.txt文件中
三、核心控制设计
1、在主函数中我们要做的操作包括:
(1)建立1个Reader读者类、1个RDatabase读者库类、1个Book图书类、1个BDatabase 图书库类
(2)建立菜单界面。完成以下内容: ①进入功能必须打开菜单,然后用户根据菜单选择相应的操作方式,如查看数据、编辑图书数据以及修改图书数据、维护图书的采购信息。添加、删除、查看读者个人信息,浏览图书信息.
② 能够对图书基本信息、图书采购信息、图书的借阅人信息进行统计,统计的结果能够以表格的形式来表示。
(3) 将图书基本信息、图书采购信息、图书的借阅人信息存储在相应的文件中。 (4) 系统界面友好,易操作。 2、本程序应具备的功能: A.添加、借阅、还书功能:
(1)添加读者和图书信息。
(2)借阅尚在架的图书。 (3)读者归还的图书。
B.查找功能
(1) 根据图书的编号查找图书信息. (2)根据读者的编号查找读者的信息. C。系统的操作
(1) 系统在进入时,要有菜单提示;
(2) 系统在用户退出时,有一定的提示。 3、算法分析
1)添加操作:(读者信息的添加与图书信息的添加类似)
包括两个部分,先通过输入设备输入信息,系统获取;然后添加入读者数据库read。txt文件中。 ㈠获取信息
void Reader::addreader(int n,char *na) //增加读者 { tag=0;
输入n和na no=n; strcpy(name,na); tag=0; no=n; no=n; strcpy(name,na); for (int i=0;i〈Maxbor;i++)
borbook[i]=0;
int i=0 }
i i++; int RDatabase::addreader(int n,char *na) //增添读者信息 { der *p=query(n); if (p==NULL) { top++; read[top]。addreader(n,na); cout〈〈”读者添加成功\"〈 N Y top++; read[top].addreader(n,na); cout<<\"读者添加成功 \"< return 0; ㈡析构函数写入新读者的编号跟姓名 RDatabase::~RDatabase() { fstream file(\"reader。txt”,ios::out); for (int i=0;i<=top;i++) { if(read[i]。gettag()==0) file。write((char *)&read[i],sizeof(read[i])); else file.close(); } } 流程图: fstream file(\"reader.txt\ int i=0 当i<=top read[i].gettag()==0 Y N file.write((char *)&read[i],sizeof(reafile.close(); d[i])); i++ 2)借书操作:利用for语句和if语句,通过判断图书的borbook的编号是否为0,来判断图书是否未被借走或还没有被借完。 void Reader::borrowbook(int bookid) //借书操作 { for (int i=0;i〈Maxbor;i++) if (borbook[i]==0) { borbook[i]=bookid; return; } int i=0 } 当i Y N borbook[i]=bookid; return; i++ 3)还书操作:利用for语句和if语句,通过判断图书的borbook的编号是否为要还书的编号,来判断是否借出此书. int Reader::retbook(int bookid) //还书操作 { for(int i=0;i〈Maxbor;i++) { if(borbook[i]==bookid) { borbook[i]=0; return 1; int i=0 当i } else continue; } 流程图: (4)查找功能:利用for语句和if语句,寻找与要查询的编号相同的读者编号或图书编号,如果找到,向系统返回相应的编号,输出相应的信息。(读者的查找与图书查找类似) Reader *query(int readerid) //按编号查找 { for (int i=0;i〈=top;i++) if(read[i]。getno()==readerid&&read[i]。gettag()==0) return &read[i]; return NULL; } int i=0 流程图: 当i<=top read[i].getno()==readerid Y &&read[i].gettag()==0 N return &read[i]; i++; return NULL; 四、测试分析 (一)、此系统存在问题 1) 未设登录密码保护系统,是整个图书管理系统失去了一定的安全性; 2) 程序运行界面 此界面运行时选择4有时会出现内存读取错误; 1)当输入错的数据类型时 可能导致内存错误; 2)读者、图书信息不完善; 3)命名不是很规范; 4)信息存储有限; 五、心得体会 通过这次课程设计让我逐步学会了如何运用C++面向对象程序设计的设计思想和方法来解决实际问题。 比如这次设计图书管理系统,首先我考虑是在实际应用时用户一般进行什么操作,对哪些对象进行操作。很显然我需要建立两个类,包括图书类和读者类,同时考虑到图书和读者不止一个,所以还需两个类,图书库类和读者库类,这两个类分别将其信息传递给图书类和读者类。确定了类之后,则需要对类的内容进行扩充.由于我需要这个系统完成对图书管理和读者管理的功能,并能对借阅信息进行管理,要求完成一下功能,图书资料管理,可以添加、修改、删除、查询书籍信息,读者资料管理,可以添加、修改、删除、查询读者信息;借书管理,可以进行添加借书信息;还书管理,可以进行还书信息。所以在对应的类下建立相应功能函数.建立功能函数后就是构造主函数。主函数的作用就是通过向对象发送信息、对象接受信息启动相应的方法来实现相应的操作。 当然在这些过程中要保证面向对象程序设计的抽象、封装、多态和继承的特点.在设计本系统中虽然综合考虑到了图书管理的各个方面,界面设计简洁,数据库设计合理,但依然还有一些不足。 为了能够较好地完成本次课程设计,我详细阅读教材,以及网上搜索,和到图书馆查找相关资料等。在做课程设计的过程中,我在利用所学的知识同时,又学到了很多实例化的理论知识和软件工程的一些实践,总结了一些经验和方法强化了我的实际动手能力,同时也找到自己的不足,我一定会继续学习增加自己的 编程能力和调试能力,在今后的学习中我将会更加的努力,增加自己的知识储备,拓宽自己的知识面,锻炼自己的能力,使我的综合素质得到较大的提高. 在这设计的过程中我也出现过一些比较严重的错误,后来在同学的指点下我改正了自己的错误,并最终成功调试除了程序.当程序调试出来的那一瞬间,我感觉自己完成了一件非常了不起的事,好有成就感.在以后的日子,我将会继续我的兴趣继续深入学习程序设计,相信在越来越多的尝试之后,自己会不断进步不断提高的。 最后感谢老师的指导与同学的帮助,使我能顺利完成这次程序设计。 六、源程序代码 #include #include 〈fstream>//输入/输出文件流类 using namespace std; const int Maxr=100;//最多的读者 const int Maxb=100;//最多的图书 const int Maxbor=5;//每位读者最多借五本书 //读者类,实现对读者的信息的描述 class Reader { private: int tag; //删除标记 1:已删 0:未删 int no; //读者编号 char name[10]; //读者姓名 int borbook[Maxbor];//所借图书 public: Reader() {} //构造函数 char *getname() { return name; } //获取姓名 int gettag() { return tag; } //获取删除标记 int getno() { return no; } //获取读者编号 void setname(char na[]) //设置姓名 { strcpy(name,na); } void delbook() //设置删除标记 { tag=1; } void addreader(int n,char *na); //增加读者 void borrowbook(int bookid); //借书操作 int retbook(int bookid); //还书操作 void disp(); //输出读者信息 }; void Reader::addreader(int n,char *na) //增加读者 { tag=0; no=n; strcpy(name,na); for (int i=0;i〈Maxbor;i++) borbook[i]=0; } void Reader::borrowbook(int bookid) //借书操作 { for (int i=0;i { cout << setw(5) 〈〈 no 〈< setw(10) 〈< name 〈< \" 借书编号:[”; for (int i=0;i private: int top; //读者记录指针 Reader read[Maxr];//读者记录 public: RDatabase(); //构造函数,将reader。txt读到read[]中 void clear() //删除所有读者信息 { top=—1; } int addreader(int n,char *na); //增添读者信息 Reader *query(int readerid) //按编号查找 { for (int i=0;i〈=top;i++) if(read[i]。getno()==readerid&& read[i].gettag()==0) return &read[i]; return NULL; } void disp(); //输出所有读者信息 int Readernum(); //得到读者编号 void readerdata(); //读者库维护 ~RDatabase(); // 析构函数,将read[]写入reader.txt文件中 }; RDatabase::RDatabase() //构造函数,将reader。txt读到read[]中 { Reader s; top=-1; fstream file(”reader。txt”,ios::in); while (1) { file。read((char *)&s,sizeof(s)); if (!file) break; top++; read[top]=s; } file。close(); } RDatabase::~RDatabase() // 析构函数,将read[]写入reader.txt文件中 { fstream file(\"reader。txt”,ios::out); for (int i=0;i〈=top;i++) if(read[i]。gettag()==0) file。write((char *)&read[i],sizeof(read[i])); else file。close(); } int RDatabase::addreader(int n,char *na) //增添读者信息 { Reader *p=query(n); if (p==NULL) { top++; read[top]。addreader(n,na); cout<<”读者添加成功”〈〈endl; return 1; } return 0; } void RDatabase::disp() //输出所有读者信息 { for (int i=0;i〈=top;i++) read[i]。disp(); } int RDatabase::Readernum() { return top; } void RDatabase::readerdata() //读者库维护 { char choice; char rname[100]; //读者姓名 int readerid; Reader *r; do { cout <〈\"\\n\\n\\\欢迎进入读者维护界面\\n\\n\\n\\ 1 新 增\\n\\n\\ 2 更 改\\n\\n\\ 3 删 除\\n\\n\\ 4 查 找\\n\\n\\ 5 显 示\\n\\n\\ 6 全 删\\n\\n\\ 0 退 出”〈〈endl; cin 〉〉 choice; switch (choice) { case ’1': cout 〈< \"输入读者编号:”; cin >〉 readerid; cout 〈〈 \"输入读者姓名:”; cin >〉 rname; addreader (readerid,rname); break; case ’2': cout 〈〈 ”输入读者编号:”; cin 〉> readerid; r=query(readerid); if (r==NULL) { cout 〈< \" 该读者不存在 \"〈〈endl; break; } cout 〈< \"输入新的姓名:”; cin >〉 rname; r—>setname(rname); break; case ’3’: cout 〈〈 ” 输入读者编号:”; cin >> readerid; r=query(readerid); if (r==NULL) { cout 〈<” 该读者不存在\" << endl; break; } r->delbook(); break; case ’4’: cout 〈〈 ”读入读者编号:\"; cin 〉〉 readerid; r=query(readerid); if (r==NULL) { cout 〈〈”该读者不存在”〈< endl; break; } r—〉disp(); break; case ’5': disp(); break; case ’6': clear(); break; default:if (choice!=’0') cout〈〈”输入错误,请从新输入:\";break; } }while (choice!='0’); } //图书类,实现对图书的描述,图书的编号,书名,借出,还入等 class Book { private: int tag;//删除标记 1:已删 0:未删 int no;//图书编号 char name[20];//书名 int onshelf;//是否再架 1:再架 0:已借 public: Book(){} char *getname() { return name; }//获取姓名 int getno(){ return no; }//获取图书编号 int gettag(){ return tag; }//获取删除标记 void setname(char na[])//设置书名 { strcpy(name,na); } void delbook(){ tag=1;}//删除图书 void addbook(int n,char *na)//增加图书 { tag=0; no=n; strcpy(name,na); onshelf=1; } int borrowbook()//借书操作 { if (onshelf==1) { onshelf=0; return 1; } return 0; } void retbook()//还书操作 { onshelf=1; } void disp()//输出图书 { cout << setw(6) 〈〈 no 〈< setw(18) <〈 name << setw(10) 〈〈(onshelf==1? \"在架”:”已借\") <〈endl; } }; //图书库类,实现对图书的维护,查找,删除等 class BDatabase { private: int top; //图书记录指针 Book book[Maxb]; //图书记录 public: BDatabase()//构造函数,将book。txt读到book[]中 { Book b; top=—1; fstream file(”book.txt\",ios::in); while (1) { file.read((char *)&b,sizeof(b)); if (!file) break; top++; book[top]=b; } file.close(); } void clear()//全删 { top=-1; } int addbook(int n,char *na);//增加图书 Book *query(int bookid)//查找图书 { for (int i=0;i〈=top;i++) if (book[i]。getno()==bookid &&book[i]。gettag()==0) { return &book[i]; } return NULL; } void bookdata();//图书库维护 void disp() //输出图书 { for (int i=0;i<=top;i++) if (book[i]。gettag()==0) book[i].disp(); } ~BDatabase();//析构函数,将book[]写到book。txt文件中 }; int BDatabase::addbook(int n,char *na)//增加图书 { Book *p=query(n); if (NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } BDatabase::~BDatabase()//析构函数,将book[]写到book。txt文件中 { fstream file(\"book。txt”,ios::out); for (int i=0;i〈=top;i++) if (book[i]。gettag()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } void BDatabase::bookdata() { char choice; char bname[40]; int bookid; Book *b; do { cout 〈<”\\n\\n\\n\\\欢迎进入图书维护界面 \"< case '1’: cout <〈 \"输入图书编号:”<〈endl; cin 〉〉 bookid; cout 〈< ”输入图书书名:\"〈 break; } b—〉disp(); break; case '5’: disp(); break; case '6’: clear(); break; default:if(choice!='0’) cout〈〈”输入错误,请从新输入:\"; } }while (choice!=’0'); } void showmenu() { cout<〈\" \"; cout<<\"|-——-—--———-——-—--———--—--———-——---———--——————————---———————--————-——-|”〈〈endl; cout<〈” ”; cout〈〈”|-—-—-设计者:童安蓉,杨丹,刘蕙娟,邓小伟——--完成时间:2010年12月28日—--|\"〈〈endl; cout<〈\" ”; cout〈<”|-————————————-—-———图 书 管 理 系 统---————-————-—---———-—-|\"〈〈endl; cout<〈” ”; cout〈〈\"|--—--——————-—--———-—--——--———-———————-—-—-——-——--———-—-|”〈〈endl; cout〈<\" \"; cout〈<”| 1.借 书 |”<〈endl; cout〈<\" ”; cout<<”| 2.还 书 |”〈 cout<〈”| 4.读 者 维 护 |”<〈endl; cout〈〈” \"; cout<〈\"| 0。退出:将数据保存到磁 盘 |”< cout<<”|——-———-——-——-————-——-——————-————————————-———————-——---—|”〈〈endl; cout<〈” ”; cout<〈\"| 1。借书 |〈” cout〈<”| 3。图书维护 |”〈〈endl; cout〈〈” \"; cout<〈\"| 4.读者维护 |”<〈endl; cout<〈\" \"; cout〈〈\"| 0。退出:将数据保存到磁盘 |”〈 char choice; int bookid,readerid; //图书编号,读者编号 RDatabase ReaderDB; //读者库 Reader *r; //读者 BDatabase BookDB; //图书库 Book *b; //图书 cout〈〈”正在打开系统,请稍后。.。”〈〈endl; showmenu(); //显示菜单 cout<〈”\\\请选择菜单中的数字以便处理数据:”; cin >〉 choice; while (choice!=’0’) { switch (choice) { case '1': //输入读者编号和要借的图书 cout <〈” 借书 读者编号:\"; cin 〉>readerid; cout 〈〈\" 图书编号: ”; cin >>bookid; r=ReaderDB。query(readerid); //按编号查找 if (NULL==r) { cout 〈〈” 不存在该读者,不能借书”〈〈 endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout 〈〈” 不存在该图书,不能借书”〈< endl; break; } if (b->borrowbook()==0) { cout 〈< \" 该图书已借出,不能借书”〈< endl; break; } r—〉borrowbook(b—〉getno()); break; case ’2’: //还书操作 cout<<\"还书\\n 读者编号:”; cin >>readerid; cout 〈< \" 图书编号:\"; cin 〉>bookid; r=ReaderDB。query(readerid);//按编号查找 if (r==NULL) { cout 〈〈” 不存在该读者,不能还书” 〈< endl; break; } b=BookDB.query(bookid); if (b==NULL) { cout <〈\" 不存在该图书,不能还书\" 〈〈endl; break; } b->retbook(); r—>retbook(b-〉getno()); break; case ’3’: //图书维护 BookDB。bookdata(); break; case ’4’: //读者维护 ReaderDB。readerdata(); break; default:if ((choice!='0')) cout〈<”输入错误,请从新输入:”; } showtip(); cin >> choice; } cout〈<”谢谢您的使用!再见!\"<〈endl; return 0; } 2:MFC项目: 一:应用程序的名称 图书管理系统 二:课程设计的目的 通过独立设计完成制作一个图书管理系统,更加理解了MFC单文档程序的构成框架,以及各个类之间数据传递的关系。同时,在设计制作的过程中,C++语言是基础,在熟悉MFC Windows 程序设计的同时,也复习了C++程序语言设计 三:功能函数 void CMyView::OnButton1()//增加书籍 void CMyView::OnButton2()//删除书籍 void CMyView::OnButton3()//版本属性 void CMyView::OnButton4()//查询书籍 四:运行过程 首页 增加书籍 删除书籍 五:部分代码: // 图书管理系统View.cpp : implementation of the CMyView class // #include ”stdafx。h” #include \"图书管理系统.h\" #include ”chaxun。h\" #include \"图书管理系统Set.h” #include ”图书管理系统Doc。h” #include \"图书管理系统View。h” #include ”banquan.h” #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMyView IMPLEMENT_DYNCREATE(CMyView, CRecordView) BEGIN_MESSAGE_MAP(CMyView, CRecordView) //{{AFX_MSG_MAP(CMyView) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyView construction/destruction CMyView::CMyView() : CRecordView(CMyView::IDD) { //{{AFX_DATA_INIT(CMyView) m_pSet = NULL; //}}AFX_DATA_INIT // TODO: add construction code here } CMyView::~CMyView() { } void CMyView::DoDataExchange(CDataExchange* pDX) { CRecordView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyView) DDX_FieldText(pDX, IDC_EDIT1, m_pSet—〉m_ISBN, m_pSet); DDX_FieldText(pDX, IDC_EDIT2, m_pSet—〉m_name, m_pSet); DDX_FieldText(pDX, IDC_EDIT3, m_pSet—〉m_writer, m_pSet); DDX_FieldText(pDX, IDC_EDIT4, m_pSet—〉m_publish, m_pSet); DDX_FieldText(pDX, IDC_EDIT5, m_pSet-〉m_publish_time, m_pSet); DDX_FieldText(pDX, IDC_EDIT6, m_pSet—>m_price, m_pSet); //}}AFX_DATA_MAP } BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CRecordView::PreCreateWindow(cs); } void CMyView::OnInitialUpdate() { m_pSet = &GetDocument()->m_mySet; CRecordView::OnInitialUpdate(); GetParentFrame()—>RecalcLayout(); ResizeParentToFit(); } ///////////////////////////////////////////////////////////////////////////// // CMyView printing BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CMyView diagnostics #ifdef _DEBUG void CMyView::AssertValid() const { CRecordView::AssertValid(); } void CMyView::Dump(CDumpContext& dc) const { CRecordView::Dump(dc); } CMyDoc* CMyView::GetDocument() // non—debug version is inline { ASSERT(m_pDocument—>IsKindOf(RUNTIME_CLASS(CMyDoc))); return (CMyDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMyView database support CRecordset* CMyView::OnGetRecordset() { return m_pSet; } ///////////////////////////////////////////////////////////////////////////// // CMyView message handlers void CMyView::OnButton4() { // TODO: Add your control notification handler code here chaxun Dlgquery; CString value; if (Dlgquery。DoModal()==IDOK)//“模式窗口方式打开,结束前不能操纵父窗口” { value=”ISBN=+”+Dlgquery。m_query+\"”; m_pSet—〉m_strFilter=value; m_pSet—>Requery(); UpdateData(FALSE); } } void CMyView::OnButton2() { // TODO: Add your control notification handler code here m_pSet—〉Delete(); m_pSet->MoveNext(); if (m_pSet—〉IsEOF()) m_pSet—〉MoveLast(); if (m_pSet—>IsBOF()) m_pSet->SetFieldNull(NULL); UpdateData(FALSE); } void CMyView::OnButton1() { // TODO: Add your control notification handler code here m_pSet—〉MoveLast(); UpdateData(); m_pSet—>AddNew(); m_pSet—〉m_ISBN=m_pSet-〉m_ISBN; m_pSet-〉m_name=m_pSet->m_name; m_pSet—>m_writer=m_pSet-〉m_writer; m_pSet->m_publish=m_pSet->m_publish; m_pSet->m_price=m_pSet—〉m_price; m_pSet->m_publish_time=m_pSet->m_publish_time; m_pSet—>Update(); UpdateData(FALSE); } void CMyView::OnButton3() { // TODO: Add your control notification handler code here banquan a; a.DoModal(); } 因篇幅问题不能全部显示,请点此查看更多更全内容