1、 网上书店管理系统 言 各种信息资源的有效管理已经成为人们获取信息的关键所在,这也将是社会资源信息化建设的重点。书是人类不可缺少的精神食粮,也是现代社会步入文明的见证。网上书店管理系统的目的是应用信息化的技术对图书进行的管理,减少大量的数据冗余和传统管理的繁琐工作量,实现管理的系统化、科学化。 系统的主要子模块有图书管理,顾客管理等,可实现日常图书进货、发货业务,最终达到提高工作效率的目的。visualc++6.0是一种功能强大行之有效的可视化编程工具,因此此软件是在visualc++6.0环境下编写的。对于我们,随着学习的深入,已经基本全部掌握了visua
2、lc++6.0环境下的程序开发。为了将我们的编程能力提升到一个更高的水平,深化面向对象的编程思维和解决问题的能力,值此课程设计周期间,进行基于visualc++6.0环境的软件开发,利用sqlserver2005作为后台的数据库,以网上书店管理系统作为开始,对visualc++6.0环境和面向对象程序设计进行回忆和熟悉。 本文档详细叙述了基于visualc++6.0环境下的网上书店管理系统的设计过程以及程序源代码。 本文档从概要设计,详细设计,参考源程序代码以及显示程序运行的截屏等方面详尽的介绍了软件开发过程。 此次网上书店管理系统的开发目的是使我们用面向对
3、象的方式来思考和解决问题的能力,并且可以掌握数据库的连接、mfc的设计、类的设计和使用以及c++语法。 本文档的安排如下: 第一章主要介绍了对面向对象c++语言以及vc、sqlserver2005编程环境。第二章主要的介绍说明了本软件的编程思想和总体设计。第三章主要介绍关于软件各个功能的详细设计。 第四章主要对软件进行调试,运行程序并截图,显示运行界面。第五章对课程设计进行总结。 程序在设计的过程中遇到的问题已及时更正,但由于编者的能力和水平有限,本软件和文档中不免会出现一些不期待的错误,望文档读者能够理解和体谅,并欢迎提醒和纠正,在
4、 此表示感谢以及敬意。 1课程设计概述 1.1visualc++6.0概述 visualc++是微软公司的重要产品之一,是一种功能强大行之有效的可视化编程工具。(1)自动化和宏功能。 (2)可以灵活地定制工具栏和菜单。 (3)可以直接运行和调试程序,还可以使用宏语言来自动操作调试器。(4)支持internet连接。 (5)一个新的便捷的项目系统可以允许一个工作区内包含多个不同的项目类型。(6)在工作区内可以包含多个并列的工程文件。 (7)可以在对话框中使用wizardbar将程序同可视化元素联系起来。
5、 (8)findinfile命令支持两个独立的输出窗格,可以保存上一次搜索的结果。这些新特性可以更好地利用visualc++开发工具进行windows应用程序开发。它提供了mfc类库,使用户可以方便的开发自己想实现的功能。visualc++6.0的主要特点: 1.2visualc++6.0运行环境 图1.1visualc++6.0运行环境 1.3关于数据库 数据库的创建是在sqlservermanagementstudioexpress里面用可视化的操作完成。下面用类似的方法建了四个表,分别起名为:book、customer、manager、o
6、rders,建表的同时建立约束条件。然后分别在表中输入列名等数据,分析好数据的安排后注意表之间的联系,属性相对应。 图1.2数据库建表 2软件总体设计 2.1软件总体设计思想 目前社会上信息管理系统发展飞速,越来越多的企事业单位都引入了信息管理软件来管理自己日益增长的各种信息。各种网店也相继采用了不同的管理系统来管理商品信息,取得了很大的成效,网上书店管理系统也在功能上不但完善和加强,为了使书店管理更加规范化,程序化,科学化,我们研发了这次的网上书店管理系统。 本系统的功能是为管理者提供方便的管理、为顾客提供快捷的购买,管理者可以通过
7、登录管理界面实现对图书的添加、修改、删除操作以及发货和查看顾客信息,顾客可以进入图书查询界面通过图书类别、图书名称、图书编号、折扣额度等四种方式查询图书,查到满意的图书后可点击购买。 2.2系统层次图 图2.1系统层次图 2.3各表数据 1)图书信息表book。记录书籍的编号、类别、名称、价格、简介、折扣、库存数量等。 图2.2book表 2)顾客信息表customer。记录顾客的编号、密码、姓名、性别、年龄、住址、联系电话等。 图2.3customer表 3)管理员信息表manager。记录管理员
8、的登录名和密码。 图2.4manager表 4)订单表orders。记录订单号、图书编号、顾客编号、顾客姓名、顾客地址、联系电话、付款方式、发货方式等。 图2.5orders表 2.4基本e-r图 图2.6基本e-r图 3软件详细设计 3.1数据库连接 本软件使用odbc连接数据库,基本思想为为数据库中每个表建立一个recordset类,当要对表中数据进行操作时,创建相关记录集,即可引用类中的响应函数进行添加、修改、删除、查询等操作。 3.2主界面 主界面中显示顾客登录、管理
9、员登录和顾客注册三个按钮,顾客输入登录名和密码后点击顾客登录后进入顾客查询界面,管理员输入登录名和密码后点击管理员登录后进入管理界面,若是新顾客,直接点击注册即可进入注册界面,各对话框之间的连接通过domodal函数实现,若需要进行身份验证,未输入用户名或密码则将弹出提示对话框“请输入用户名和密码。”,输入后系统将进入相应的数据库表查询是否有此信息,若无对应信息则弹出对话框提示输入信息错误,信息正确方可进入下一界面,如顾客登录时,系统使用以下代码完成身份验证功能,同时记录下用户信息以便加入订单://生成查询用户账号和密码的sql语句 msqlstr="select*fromcust
10、omerwherecno='";msqlstr=msqlstr+m_no;msqlstr=msqlstr+"'andcpass='";msqlstr=msqlstr+m_password;msqlstr=msqlstr+"'";if(。customer.open(afx_db_use_default_type,msqlstr)){ afxmessagebox("customer表打开失败。"); return;}if(。customer.isbof){ //openallfunctionforuser m_customer_no=customer
11、m_cno; m_customer_name=customer.m_cname; m_customer_phone=customer.m_cphone; m_customer_add=customer.m_cadd;afxmessagebox("密码正确,欢迎登录。");enddialog(idcancel);cgkcxa;a.domodal;}else{ }afxmessagebox("密码输入错误。。");return;3.3添加功能 本软件的添加功能使用addnew函数,应用在顾客注册、顾客购书、管理员添加新书等模块。
12、 1)顾客注册:新顾客在主界面中点击注册后即可进入注册界面填写自己的各项信息,完成后点击确定,信息添加到customer表中,并利用触发器自动生成顾客编号作为登录名。相关代码如下: setcustomerc;c.open;c.addnew;updatedata(true);if(m_name.isempty||m_phone.isempty||m_add.isempty||m_password.isempty||m_mima.isempty){ messagebox("请输入全部信息。"); return;}if(m_password。=m_mima){
13、 messagebox("密码错误,请确认。"); return;}c.m_cpass=m_password;c.m_cname=m_name;if(m_sex==0) c.m_csex="男";elsec.m_csex="女";c.m_cage=m_age;c.m_cphone=m_phone; c.m_cadd=m_add;c.m_cpass=m_password;if(m_sex==0) c.m_csex="男";elsec.m_csex="女";c.update;c.requery;m_customer_zhanghao=c.
14、m_cno;updatedata(false);m_customer_xingming=m_name;m_customer_mima=m_password; enddialog(idcancel);cxxqra;a.domodal;2)顾客购书:顾客在查询界面中选择想要购买的图书后点击购买可进入购买界面,选择付款方式、送货方式并确认后,相关信息添加到orders表中,并利用触发器自动生成订单号。相关代码如下: csetordersorder;setbookbook;order.open;order.addnew;updatedata(true);if(m_zhifu==
15、0) order.m_opay="网银支付";elseorder.m_opay="货到付款";if(m_songhuo==0) order.m_oconvey="快递";elseorder.m_oconvey="ems";order.m_bno=m_book_no; order.m_cadd=m_customer_add;order.m_cname=m_customer_name;order.m_cno=m_customer_no;order.m_cphone=m_customer_phone;order.update;order.requery;m_ord
16、er_no=order.m_ono;book.open;book.edit;book.m_bstock--;book.update;book.requery; book.close;updatedata(false); cstringtemp;temp.format("购买成功。");afxmessagebox(temp);enddialog(idcancel);cgkcxa;a.domodal;3)管理员添加新书:管理员在管理界面中输入各项信息后点击添加,图示信息即可被添加到book表中,相关代码如下: setbooka,b;a.open;a.addnew
17、updatedata(true);if(m_no.isempty||m_kind.isempty||m_name.isempty||m_price.isempty||m_intro.isempty||m_dis==0||m_stock==0){messagebox("请输入全部信息。"); return;}if(b.isopen)b.close;if(m_no。=_t("")){ b.m_strfilter.format("bno='%s'",m_no); b.open; if(b.m_bno。=_t("")) { me
18、ssagebox("已经有这条记录了。"); return; }}a.m_bno=m_no;a.m_bkind=m_kind;a.m_bname=m_name;a.m_bprice=m_price;a.m_bintro=m_intro;a.m_bdis=m_dis; a.m_bstock=m_stock; cstringaa,bb;m_list.insertitem(0,a.m_bno,0);m_list.setitemtext(0,1,a.m_bkind); m_list.setitemtext(0,2,a.m_bname);
19、 m_list.setitemtext(0,3,a.m_bprice);m_list.setitemtext(0,4,a.m_bintro); aa.format("%d",a.m_bdis); m_list.setitemtext(0,5,aa); bb.format("%d",a.m_bstock);m_list.setitemtext(0,6,bb);a.update;a.requery;updatedata(false);a.close;3.4修改功能 修改功能使用edit函数,主要应用在管理员对图书信息的修改方面,其中图书编号不可
20、修改,若修改则出现错误提示,相关代码如下:setbooka;a.open;a.edit;updatedata(true); if(m_no.isempty){messagebox("请选择图书。"); return;}if(no。=m_no){ messagebox("图书编号不允许修改。"); return;}m_list.deleteallitems;a.m_bkind=m_kind;a.m_bname=m_name;a.m_bprice=m_price;a.m_bintro=m_intro;a.m_bdis=m_dis; a.m
21、bstock=m_stock; cstringaa,bb;m_list.insertitem(0,a.m_bno,0);m_list.setitemtext(0,1,a.m_bkind); m_list.setitemtext(0,2,a.m_bname); m_list.setitemtext(0,3,a.m_bprice);m_list.setitemtext(0,4,a.m_bintro); aa.format("%d",a.m_bdis); m_list.setitemtext(0,5,aa); bb.forma
22、t("%d",a.m_bstock); m_list.setitemtext(0,6,bb);a.update;a.requery; updatedata(false);a.close;3.5删除功能 删除功能使用delete函数,应用在管理员对图书信息的删除及查看订单后发货方面: 1)图书信息删除:管理员查找到要删除的图书后选中,点击删除按钮即可将book表中该图书信息删除,相关代码如下: updatedata(true);intn=m_list.getselectionmark;setbookb; if(m_no.is
23、empty){messagebox("请选择图书。");return;} b.m_strfilter.format("bno='%s'",m_no); b.open; if(b.iseof) {messagebox("没有此记录。");return; } b.delete; m_list.deleteitem(n); b.close;2)发货:管理员查看订单后选中要发送的图书,点击发货即可在orders表中将该订单删除,相关代码如下: intn=m_list.getselectionma
24、rk;//创建订单记录集 csetordersorder; if(m_ono.isempty){ messagebox("请选择订单。"); return;}order.m_strfilter.format("ono='%s'",m_ono);order.open;if(order.iseof){ messagebox("没有此记录。"); return;}while(。order.iseof){order.delete;order.movenext;} //关闭记录集order.close;m_list.de
25、leteitem(n);updatedata(false);3.6查询功能 查询功能应用于顾客购书前对书籍的查询和管理员对书籍的查询,以顾客查询为例,顾客查询可按照图书编号、图书类别、图书名称、折扣额度等四种方式,其中图书类别和图书名称都可实现模糊查询,在相关表中查找到正确信息后显示在列表框内,以图书名称和折扣额度为例,相关代码如下: updatedata(true);setbookbook;if(m_fangshi。=0m_fangshi。=1m_fangshi。=2m_fangshi。=3){ afxmessagebox("请选择查询类别。");
26、 return;}//出现问题:不能读取m_kind,原因:isempty少了小括号 if(m_fangshi==1){ if(m_name.isempty) { afxmessagebox("请输入图书名称。"); return; } setbookbook; if(book.isopen)book.close; cstringtmp; tmp.format("%%%s%%",m_name); m_name=tmp; book.m_strfilt
27、er.format("bnamelike'%s'",m_name); book.open; m_list.deleteallitems; inti=0; if(book.iseof) { messagebox(" 目前暂没有您要的书目。","提示",mb_ok); return;} while(。book.iseof){ cstringaa,bb; m_list.insertitem(i,book.m_bno,0); m_list.setitemtex
28、t(i,1,book.m_bkind); m_list.setitemtext(i,2,book.m_bname); m_list.setitemtext(i,3,book.m_bprice); m_list.setitemtext(i,4,book.m_bintro); aa.format("%d",book.m_bdis); m_list.setitemtext(i,5,aa); bb.format("%d",book.m_bstock); m_list.setitemtext(i,6,bb); i++; book.movenext; }}if(m_fangshi==3){if(m_dis==0){afxmessagebox("请输入查询内容。");return;} if(book.isopen)book.close; book.m_strfilter.format("bdis 第14页 共14页






