已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 数据库系统原理及其应用教程数据库系统原理及其应用教程 课程设计报告课程设计报告 题目名称题目名称: :网上图书销售系统网上图书销售系统 任课教师:任课教师: 姓姓 名:名: 学学 号:号: 2010 年年 12 月月 30 日日 2 目 录 摘摘 要要3 1 1 引言引言3 2 2 需求分析需求分析3 2.1 功能需求 3 2.2 数据描述 5 2.3 数据库描述 6 3 3 概要设计概要设计6 3.1 系统运行环境 6 3.2 系统功能模块设计 7 3.3 系统处理流程 7 3.4 接口设计 8 4 4 详细设计详细设计8 4.1 登录模块及主界面 9 4.2 图书录入模块 10 4.3 图书销售模块 15 4.4 销售统计模块 20 4.5 查询库存模块 22 5 5 系统测试系统测试25 6 6 操作手册操作手册29 7 7 结论结论29 7.1 系统功能 29 7.2 系统不足和改进 29 7.3 总结 30 参考文献参考文献30 评评 语语 3131 3 摘 要 随着计算机的普及书店规模的不断扩大,使图书销售管理成为书店管 理中的一个重要课题。通过图书销售管理系统可以解决书店管理中遇到的 各种问题。本系统分析了市场需求和实际需要,利用 vc+连接 sql 数 据库的方式,主要实现了书店的网上图书销售管理,该系统具有处理图书 录入、图书销售、销售统计、查询库存等功能。 关键词:关键词:图书;销售;库存 1 1 引言引言 传统的图书销售管理方法,都是通过人工统计和计算的管理方式进行的。 这样的管理方法不但费时费力,也容易产生计算上的错误和疏漏;计算机技术 的全面普及,打破了书店管理的传统管理方法,提高了管理效率的同时,克服 了传统管理方法中易产生的问题,使管理员能够有序的、全面的对图书销售和 库存进行管理。 网上图书销售系统可以完成书店的日常管理,如图书录入、图书销售、销 售统计、查询库存等功能,迅速准确地对已售图书和剩余库存进行统计和汇总 工作,大大提高了书店的管理效率和准确性。 2 2 需求分析需求分析 2.1 功能需求 2.1.1 待开发软件的功能需求 本系统是根据书店的实际需求而开发的,要求稳定、可靠的实现图书销售 4 的自动化管理,通过本系统可以达到以下目标: 1. 图书录入,包括图书的基本信息,如分类、进价、售价、作者等。 2. 图书销售,包括图书的售价、折扣、销售日期,并实现对库存量的修改。 3. 销售统计,包括按图书类型、书名、作者、出版社等进行统计。 4. 查询库存,对指定的某本图书剩余库存量进行查询。 5. 售完图书查询,对已售完图书进行查询。 2.1.2 待开发软件的功能 按照用户需求,要满足以上功能,我设计出了图书销售管理系统的系统功能图, 如图 2.1 所示。 图书销售管理系统 图书 录入 查询 库存 图书 销售 销售 统计 售完 图书 查询 图 2.1 图书销售管理系统的系统功能图 综合系统要求,对图 2.1 所示的系统功能解释如下: 图书录入,包括图书的基本信息,如分类、进价、售价、作者等。 图书销售,包括图书的售价、折扣、销售日期,并实现对库存量的修改。 销售统计,包括按图书类型、书名、作者、出版社等进行统计。 查询库存,对指定的某本图书剩余库存量进行查询。 售完图书查询,对已售完图书进行查询。 通过以上分析,可以得到仓库管理系统的数据流图,如图 2.2 所示。 5 管理员 图书信息 处理 图书管理 反馈信息 图书信息 反馈信息 记录数据 数据库 图 2.2 图书管理系统的数据流图 2.2 数据描述 2.2.1 数据库概要说明 数据库中包括管理员信息表、图书基本信息表、图书类型表、图书销售记 录表等 4 个数据表。 图 2.3 所示的即为本系统中数据库中的数据表结构图,该数据表结构图包 含系统所有数据表。可以清晰地反应数据库信息。 图 2.3 数据表结构图 2.2.22.2.2 主要数据表的结构 表 2.1 pwd(管理员信息表) 字段名数据类型字段大小描述 idint4管理员帐号 passwordnvarchar50r密码 表 2.2 bookinfo(图书基本信息表) 字段名数据类型字段大小描述 bookidint4图书编号 booknamenvarchar50图书名称 categoryidint4图书类型编号 authornvarchar50作者 6 publishernvarchar50出版社 publishdatesmalldatetime4出版日期 purchasefloat8进价 pricefloat8售价 stockint4库存本数 discountint4折扣 barcodenvarchar50条形码 表 2.3 bookcategory(图书类型表) 字段名数据类型长度描述 categoryidint4图书类型编号 categorynamenvarchar8图书类型名称 表 2.4 booksale(图书销售记录表) 字段名数据类型长度描述 idint4销售记录编号 bookidint4图书编号 salepricefloat8实际售价 saledatesmalldatetime4销售日期 2.3 数据库描述 本软件采用sql数据库。 3 概要设计 本系统是根据书店的实际需求而开发的,完全能够帮助书店实现高效、准 确的图书销售自动化管理。在分析阶段,我们已经提出了系统的结构和数据字 典。本节我们将对系统的使用环境作简要介绍,并对该系统作概要设计。 3.1 系统运行环境 pc 机 windows 操作系统 visual c+6.0 7 3.2 系统功能模块设计 在前面系统功能分析的基础上,结合 visual c+程序编制的特点,得到如 图 3.1 所示的系统功能模块图。 图书销售管理系统 图书录入模块(m2) 查询库存模块(m5) 图书销售模块(m3) 销售统计模块(m4) 售完图书查询模块(m6) 管理员登录模块(m1) 图 3.1 图书销售管理系统功能模块图 各模块功能分配如下: (1)用户登陆功能:管理员登陆模块(m1) 。 (2)图书录入功能:图书录入模块(m2) 。 (3)图书销售功能:图书销售模块(m3) 。 (4)销售统计功能:销售统计模块(m4) 。 (5)查询图书库存功能:查询库存模块(m5) 。 (6)售完图书查询功能:售完图书查询模块(m6) 。 3.3 系统处理流程 (1)系统启动,进入身份验证。 (2)初始化系统,导入数据库。 (3)录入图书信息。 (4)图书销售。 (5)统计图书销售信息。 8 (6)查询图书库存信息。 (7)查询已售完图书信息。 (8)退出系统。 3.4 接口设计 3.4.1 外部接口 (1) 用户界面 采用图形用户界面,包含菜单、按钮、对话框等元素。 (2) 软件接口 软件运行于visual c+6.0平台上。 (3) 硬件接口 运行于pc机上。 3.4.2 内部接口 (1)用户登陆模块(m1):由相应事件驱动消息激活,完成用户登陆功能, 之后进入消息循环状态。 (2)图书销售模块(m3):由相应事件驱动消息激活,完成图书销售功能, 之后进入消息循环状态。 (3)销售统计模块(m4):由相应事件驱动消息激活,完成销售统计功能, 之后进入消息循环状态。 (4)查询库存模块(m5):由相应事件驱动消息激活,完成查询库存功能, 之后进入消息循环状态。 (5)售完图书查询模块(m6):由相应事件驱动消息激活,完成售完图书 查询功能,之后进入消息循环状态。 4 详细设计 该系统采用 vc+6.0 中的 mfc 连接 sql 数据库的方式,使用图形用户界面, 主要实现图书录入、图书销售等功能。下面具体对各模块进行介绍。 9 4.1 登录模块及主界面 在登录界面(如图 4.1 所示)中输入用户名和密码,登录成功后进入主界 面。登陆框流程图如图 4.2 所示,系统主界面如图 4.3 所示,单击某个按钮就 能弹出某个功能的界面。 图 4.1 系统登录界面 输入用户名 开始 验证密码是否正确 输入密码 登录成功进入主界面 结束 是 否 选择帐号类型 图 4.2 登录模块流程图 10 4.2 图书录入模块 4.2.1 实现目标 添加图书信息,图书录入对话框的设计如图 4.4 所示。 “保存”按钮对应的 方法为 raddbookdlg:onsave(),流程图如图 4.5 所示。 图 4.4 图书录入对话框 11 开始 结束 输入图书基本信息 判断输入是否正 确且完整 添加该信息到关联表并写 入数据库 是 否 图 4.5 raddbookdlg:onsave()方法的流程图 4.2.2 设计步骤 (1)向项目中添加一个新 dialog 资源,资源 id 为 idd_addbook。在 idd_ygtjk 对话框资源中单击鼠标右键,执行弹出快捷菜单的“properties” 菜单命令,打开“dialog properties”对话框。在“dialog properties”对话框中 选择 general 选项卡,更改其“caption”文本框内容为“图书信息录入” 。 (2)从 controls 面板上向 dialog 资源中添加所需控件,更改资源的属性, 并为资源设置相对应的变量,如表 4.1 所示。 表 4.1 图书录入 dialog 资源属性设置 member variables idproperties typemember idc_bk_category默认文本categoryname idc_bk_name默认文本bookname idc_bk_author默认文本author idc_bk_publisher默认文本publisher idc_bk_date默认日期/时间publishdate 12 idc_bk_purchase默认数字purchase idc_bk_price默认数字price idc_bk_payoff默认数字price idc_bk_stock默认数字stock idc_bk_barcode默认文本barcode idc_bk_discount默认数字discount idc_resetcaption 重填 idc_savecaption 添加 idcancelcaption 退出 4.2.3 代码分析 (1)打开 classwizard 窗口,添加在 oninitdialog 成员函数,向 oninitdialog 添加代码如下: bool raddbookdlg:oninitdialog() cdialog:oninitdialog(); / todo: add extra initialization here getbookgategory(); return true; / return true unless you set the focus to a control / exception: ocx property pages should return false (2)当用户单击“保存“按钮时,实现添加图书功能,其响应代码如下: void raddbookdlg:onsave() / todo: add your control notification handler code here updatedata(true); if(!isvalidinput() return ; if(idyes != afxmessagebox(“确定要保存吗?“,mb_yesno) /放弃保存 return ; 13 if(savedata() afxmessagebox(“保存成功!“); /保存后重置数据 m_bhasnewbook = true; onreset(); getdlgitem(idc_bk_category)-setfocus(); else afxmessagebox(“保存失败!“); (3)判断输入信息是否正确的函数是 isvalidinput() ,其响应代码如下: bool raddbookdlg:isvalidinput() cstring str = “0123456789“; if(m_strbookcategory.isempty() | m_strbookcategory.findoneof(str) != -1) afxmessagebox(“输入有误!图书类型不能为空或包含数字。“); getdlgitem(idc_bk_category)-setfocus(); return false; if(m_strbookname.isempty() afxmessagebox(“输入有误!书名不能为空。“); getdlgitem(idc_bk_name)-setfocus(); return false; if(m_strauthor.isempty() | m_strauthor.findoneof(str) != -1) 14 afxmessagebox(“输入有误!作者名称不能为空或包含数字。“); getdlgitem(idc_bk_author)-setfocus(); return false; if(m_strpublisher.isempty()| m_strpublisher.findoneof(str) != -1) afxmessagebox(“输入有误!出版社名称不能为空或包含数字。“); getdlgitem(idc_bk_publisher)-setfocus(); return false; if(m_dpurchase setfocus(); return false; if(m_dprice setfocus(); return false; if( m_ldiscount 100) afxmessagebox(“图书折扣应为 0-100 之间正值!“); getdlgitem(idc_bk_discount)-setfocus(); return false; if(m_lstock setfocus(); return false; if(m_strbarcode.isempty() | m_strbarcode.getlength() 15) afxmessagebox(“条形码应为 15 位整数!“); getdlgitem(idc_bk_barcode)-setfocus(); return false; /afxmessagebox(m_strbookname + “rn“ + /m_strbookcategory + “rn“ + /m_strauthor + “rn“ + /m_strpublisher + “rn“ + /m_strbarcode ); return true; 4.3 图书销售模块 4.3.1 实现目标 实现图书销售功能,图书销售对话框设计如图 4.6 所示。 “销售”按钮对应 的方法为 rsalebookdlg:onok(),流程图如图 4.7 所示。 16 图 4.6 图书销售对话框 开始 结束 输入书名或条 形码 判断输入是否正确 且 findbook()函数 返回值为 1 添加该信息到关联 表并写入数据库 是 否 图 4.7 rsalebookdlg:onok()方法的流程图 4.3.2 实现步骤 (1)向项目中添加一个新 dialog 资源,资源 id 为 idd_salebook。在 idd_yggongzitj 对话框资源中单击鼠标右键,执行弹出快捷菜单的 “properties”菜单命令,打开“dialog properties”对话框。在“dialog properties”对话框中选择 general 选项卡,更改其“caption”文本框内容为 “图书销售。 ” (2)从 controls 面板上向 dialog 资源中添加相关控件,更改资源的属性, 并为资源设置相对应的变量,如表 3.2 所示: 表 4.2 图书销售添加 dialog 资源属性设置 member variables idproperties typemember idc_sbk_name默认文本bookname 17 idc_sbk_barcode默认文本barcode idc_sbk_price默认数字price idc_sbk_saleprice默认数字saleprice idc_sbk_discount默认数字discount idc_sbk_date默认日期/时间saledate idokcaption 销售 idcancelcaption 退出 4.3.3 代码分析 (1)为“销售”按钮添加代码,实现图书销售功能,代码如下: void rsalebookdlg:onok() / todo: add extra validation here if(!m_breadysale) m_breadysale = findbook(); else updatedata(true); cstring strmsg; strmsg.format(“是否出售?n 书名:%sn 价格:%.2f”,m_strbookname ,m_dsaleprice); if(idyes = afxmessagebox(strmsg,mb_yesno) modifystock();/修改图书库存 savesalerecord();/记录销售记录 init(); updatedata(false); getdlgitem(idc_sbk_name)-setfocus(); m_editdiscount.enablewindow(false); 18 /cdialog:onok(); (2)判断销售是否能够成功的函数是 rsalebookdlg:findbook(),其代码 如下: bool rsalebookdlg:findbook() / todo: add your control notification handler code here updatedata(true); cstring strsql ; _variant_t var; double dpurchase; if(!m_strbookname.isempty() strsql.format(“select * from bookinfo where bookname = “%s“ and stock 0“, m_strbookname); else if(!m_strbarcode.isempty() strsql.format(“select * from bookinfo where barcode = “%s“ and stock 0“, m_strbarcode); else afxmessagebox(“请输入书名或条码!“); getdlgitem(idc_sbk_name)-setfocus(); return false; crbooksaleapp* papp = (crbooksaleapp*)afxgetapp(); try papp-m_precordset-open(strsql.allocsysstring(), papp-m_pconnection.getinterfaceptr() adlockoptimistic, adcmdtext); 19 if(papp-m_precordset-adoeof) afxmessagebox(“查无此书!请输入书名或条码无误。“); papp-m_precordset-close(); return false; var = papp-m_precordset-getcollect(“bookid“); if(var.vt != null) m_lbookid = var.lval; var = papp-m_precordset-getcollect(“discount“); if(var.vt != null) m_ldiscount = var.lval; var = papp-m_precordset-getcollect(“price“); if(var.vt != null) m_dprice = var.dblval; var = papp-m_precordset-getcollect(“purchase“); if(var.vt != null) dpurchase = var.dblval; var = papp-m_precordset-getcollect(“categoryid“); if(var.vt != null) m_lcategory = var.lval; papp-m_precordset-close(); catch(_com_error * e) afxmessagebox(e-errormessage(); m_editdiscount.enablewindow(m_dprice = dpurchase); m_ldiscount = (m_dprice = dpurchase) ? m_ldiscount :100;/售价小于 20 进价时,不允许打折 m_dsaleprice = m_dprice * (double(m_ldiscount)/100); /计算折后价 updatedata(false); return true; 4.4 销售统计模块 4.4.1 实现目标 实现对已销售的图书进行统计的功能,销售统计对话框如图 4.8 所示。 图 4.8 销售统计对话框 4.4.2 设计步骤 (1)向项目中添加一个新 dialog 资源,资源 id 为 idd_report。在 idd_report 对话框资源中单击鼠标右键,执行弹出快捷菜单的“properties” 菜单命令,打开“dialog properties”对话框。在“dialog properties”对话框中 选择 general 选项卡,更改其“caption”文本框内容为“销售统计” 。 (2)从 controls 面板上向 dialog 资源中添加相应控件,更改资源的属性, 并为资源设置相应的变量,如表 4.3 所示: 表 4.3 用户信息管理 dialog 资源属性设置 member variables idproperties typemember idc_radio2默认单选框 idc_radio3默认单选框 idc_radio4默认单选框 idc_radio5默认单选框 21 idc_radio6默认单选框 idc_static默认单选框 idokcaption 确定 idcancelcaption 取消 4.4.3 代码分析 查询函数为 crbooksaleview:onsalereport(),代码如下: void crbooksaleview:onsalereport() / todo: add your command handler code here rreportdlg dlg; dlg.m_ireporttype = m_ireporttype ; if(idok = dlg.domodal() m_ireporttype = dlg.m_ireporttype; /设置销售报表标题 /前 2 个标题类型为用户模式和书店管理模式,故此处加 2 int ititletype = 0; switch(m_ireporttype) case 0:/图书类型统计 ititletype = category_report_title; break;case 1:/图书名称统计 ititletype = bookname_report_title; break; case 2:/图书作者统计 ititletype = author_report_title; break; case 3:/出版社统计 ititletype = publisher_report_title; 22 break; case 4:/全部销售记录统计 ititletype = sale_report_title; break; default: break; settitle(ititletype); showreport(); 4.5 查询库存模块 4.5.1 实现目标 实现对已销售的图书进行统计的功能,销售统计对话框如图 4.9 所示。 图 4.9 查询库存对话框 4.5.2 设计步骤 (1)向项目中添加一个新 dialog 资源,资源 id 为 idd_query。在 idd_query 对话框资源中单击鼠标右键,执行弹出快捷菜单的“properties” 菜单命令,打开“dialog properties”对话框。在“dialog properties”对话框中 选择 general 选项卡,更改其“caption”文本框内容为“查询” 。 (2)从 controls 面板上向 dialog 资源中添加相应控件,更改资源的属性, 并为资源设置相应的变量,如表 4.4 所示: 23 表 4.4 库存查询 dialog 资源属性设置 member variables idproperties typemember idc_book_category默认组合框 idc_book_name默认文本bookname idc_book_author默认文本author idc_book_publisher默认文本publisher idokcaption 确定 idcancelcaption 取消 4.5.3 代码分析 (1) “确定”按钮的函数为 rquerydlg:onok(),代码如下: void rquerydlg:onok() / todo: add extra validation here updatedata(true); /单独处理类型为全部的情况,0 表示选择类型为全部 m_ctrlcategory.getlbtext(m_ctrlcategory.getcursel(),m_strcategory); if(m_strcategory = _t(“全部“) m_strcategory = _t(“); cdialog:onok(); (2)组合框根据图书类型查询的函数为 rquerydlg:getbookgategory(), 代码如下: void rquerydlg:getbookgategory() int num = 0; cstring strsql; _variant_t var; m_ctrlcategory.resetcontent();/清空组合框中原有数据 /生成 sql 查询语句,在数据苦中查找图书类型 24 strsql.format(sql_select_categoryname); crbooksaleapp* papp = (crbooksaleapp*)afxgetapp(); try papp-m_precordset-open(strsql.allocsysstring(), papp-m_pconnection.getinterfaceptr(), adopendynamic, adlockoptimistic, adcmdtext); /遍历数据库中 bookcategory 表,获取全部图书类型 while(!(papp-m_precordset-adoeof) var = papp-m_precordset-getcollect(“categoryname“); if(var.vt != null) m_ctrlcategory.addstring(lpcstr)_bstr_t(var); papp-m_precordset-movenext(); num+; m_ctrlcategory.addstring(“全部“); papp-m_precordset-close(); catch(_com_error * e) afxmessagebox(e-errormessage(); /设置当前选择类型为全部 m_ctrlcategory.setcursel(num); 25 26 5 5 系统测试系统测试 进入 vc+6.0,打开工程 rbooksale.dsw,然后进入源程序,接着编译和 运行即可运行。下面将给出系统运行的过程。 (1)打开程序后,选择“使用书店身份登录” ,输入密码“111” ,进入主 对话框,如图 5.1。 图 5.1 主对话框 (2)在功能菜单下选择图书录入功能,添加一本新的图书信息,如图 5.2。 图 5.2 添加图书信息 (3)点击“返回”按钮后,系统会自动显示现有图书信息,如图 27 5.3。 图 5.3 系统自动显示现有图书信息 (4)在功能菜单下进入图书销售对话框,卖出一本c+教程 ,如图 5.4。点击返回按钮后,系统会显示当前所有图书剩余库存信息,如图 5.4。 图 5.4 图书销售 (5)点击结束销售后,系统会自动显示当前所有图书的库存信息, c+ 教程的库存量已减少一本,如图 5.5。 28 图 5.5 完成销售后的库存信息 (6)在功能菜单下进入销售统计对话框,查询全部销售清单,并给出已 售出图书总本数,如图 5.6。 图 5.6 查询所有图书销售清单 (7)在功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度学习视域下小学数学单元主题教学探索
- 新疆行政职业能力2011年5月
- 浙江行政职业能力72
- 2013年7月2日上午辽宁省公务员面试真题
- 广西申论真题2011年
- 河南公共基础知识模拟16
- 地方公务员浙江申论72
- 2024届中考数学一次方程(组)天天练(4)及答案
- 江苏省南京市六校2024-2025学年高一上学期期中联合调研考试 数学 含答案
- 建筑工程一般刷(喷)浆工程施工工艺质量管理标准化指导图示
- 酒店竞争对手分析报告
- 《工伤预防知识教育》课件
- 青岛版二年级上册数学《认识方向》单元整体备课设计
- 国际航空运费计算
- 蛔虫病学习课件
- 期末教师总结大会活动方案
- GB/T 43512-2023全钒液流电池可靠性评价方法
- 2024年中国华能集团招聘笔试参考题库含答案解析
- 铁路运输调度安全管理-调度安全风险管理
- 2024年上海申能集团招聘笔试参考题库含答案解析
- 2024中式烹调师(中级)模拟考试题库整套
评论
0/150
提交评论