基于C下的图书管理系统方案_第1页
基于C下的图书管理系统方案_第2页
基于C下的图书管理系统方案_第3页
基于C下的图书管理系统方案_第4页
基于C下的图书管理系统方案_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要:随着信息技术在管理中的应用越来越深入和广泛,管理信息系统的实施在技术上也逐渐成熟。图书馆管理系统作为一种管理信息系统,已成为图书馆开展现代图书管理和信息服务的基础。根据图书馆管理系统的特点,设计了图书馆管理系统,并在VC环境下结合SQL server2000实现了该系统。同时,通过保证数据的一致性和完整性系统具有功能齐全、交互性好、界面友好的特点。关键词:图书管理;数据一致性; SQL2005目录TOC o 1-3 h u HYPERLINK l _Toc7357 第 1 章 引言 根据上面的ER图在数据库中创建一个数据表。下面介绍主要数据表的结构: tb_bookinfo(图书信息表)

2、:图书信息表用于存放图书信息。表 tb_bookinfo 的结构如下:字段名称数据类型长度首要的关键描述书名varchar30书名条码varchar10条码作者varchar30作者书商varchar30图书类别价格钱钱价格备忘录varchar100评论种类varchar30类型 tb_booksstorage(图书存储信息表):图书馆信息表用于存储图书馆信息。表 tb_booksstorage 的结构如下:字段名称数据类型长度首要的关键描述条码varchar30条码存储名称varchar30图书馆名称书号漂浮书籍数量 tb_bookmove_main(图书移动信息表):图书移动信息表用于存储

3、图书移动信息。表 tb_bookmove_main 的结构如下:字段名称数据类型长度首要的关键描述移动IDvarchar30移动号码贮存varchar30图书馆名称柜台varchar30柜台操作员varchar30操作员移动时间约会时间移动时间 tb_bookkinds(书种信息表):书种信息表用于存放书种信息。表 tb_bookkinds 的结构如下:字段名称数据类型长度首要的关键描述书类varchar30书的种类详细设计(这部分都是贴图代码,这个方法不行,要介绍关键技术和实现方法,而不是涉及到的简单实现方案,会暴露缺点!贴代码不能介绍实现的)解决方案还是要转换成文字描述的实施方案!这部分需

4、要大改)4.1 商业设计4.1.1业务流程图图书管理系统业务流程图如下:入库退货查询图书入库图书查询管理图书销售管理图书价格管理入库登记入库退货查询图书入库图书查询管理图书销售管理图书价格管理入库登记入库查询图书掉价图书调拨入库查询图书掉价图书调拨销售查询图书定价销售查询图书定价入库退货入库退货销售退货查询操作员销售退货查询4.1.2主窗体设计图书馆管理系统的主界面由两部分组成:菜单栏和工具栏区域。客户区充满了大学图书馆的位图。整体设计效果采用对话结构设计。运行结果如下:(这张图是什么?意思?说明你的软件太简陋了?)4.2 系统登录模块设计4.2.1系统登录模块概述(登录部分是最简单的部分,不

5、需要贴图或代码,贴出来会很尴尬)为了防止非法用户进入系统,程序中设计了一个“系统登录”窗口。程序启动时,首先显示登录窗口以进行用户验证。如果用户输入的用户名和密码不正确,将被禁止进入系统。 “系统登录”模块运行效果如下:4.2.2系统登录技术分析及实现流程为了保证当用户在一个控件上按下“Enter”键时,焦点会定位在下一个控件上,这可以通过将“Enter”键转换为“Tab”键来实现。在本模块中,系统采用这种方法。输入“用户名”并按“Enter”键后,焦点将移至“用户密码”文本框。实现方法如下:BOOL CDlgLogin:PreTranslateMessage(MSG* pMsg)if (pM

6、sg-message=WM_KEYDOWN)&(pMsg-hwnd!=m_confirm.m_hWnd)&(pMsg-hwnd!= m_cancel.m_hWnd)if (pMsg-wParam =13) / 如果按下“Enter”键pMsg-wParam = 9; / 转换为“Tab”键返回CDialog:PreTranslateMessage(pMsg); / 默认处理4.3 操作员管理模块的实现4.3.1操作员管理模块概述操作员管理模块主要实现操作员信息的添加、修改和删除功能。删除操作员信息时,不要删除所有操作员,否则无法进入系统。算子线模块运行结果如下:4.3.2运营商管理模块技术分析

7、及实现流程使用ADO技术对数据库进行操作时,如果Recordset对象中的数据需要在表中显示,使用如下语句:Temp = (TCHAR*)(_bstr_t)m_pRs-GetFields()-GetItem(long )i)-Value;如果写成如下形式,当字段的数据类型不是字符串时会报错:Temp = m_pRs-GetFields()-GetItem(long)i)-Value.bstrVal;函数 AddOperator() 用于添加运算符。该函数首先调用InfoIsNull()函数判断运营商信息是否为空。如果为空,则提示并退出操作;如果不为空,则使用SQL语句将数据保存到数据表中,实现

8、过程如下:无效CDlgOperator1:AddOperator()/判断基本信息是否为空如果(!InfoIsNull()CString c_operator,c_password,c_level;m_operator.GetWindowText(c_operator); /获取运营商信息m_password.GetWindowText(c_password);m_level.GetWindowText(c_level);int level=atoi(c_level);CString sql;sql.Format( 插入tb_operator值(%s,%s,%d) ,c_operator,c_

9、password,level);if (m_pRs-State =adStateOpen) /关闭SQL语句m_pRs-raw_Close(); /关闭记录集尝试m_pRs-Open(_bstr_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);负载操作员信息();清除接口(); /清除文本框中的文字MessageBox( 操作成功。 , 提示 ,MB_OK);catch (_error *e) / 捕获异常MessageBox( 操作失败。 , 提示 ,MB_OK|MB_ICONERROR);别的M

10、essageBox( 基本信息不能为空。 , 提示 ,MB_OK+MB_ICONINFORMATION);4.4 图书信息管理模块设计4.4.1图书信息管理模块概述图书信息管理主要实现图书信息的添加、修改、删除等功能。为了方便用户操作,程序使用表格来展示所有图书信息。用户添加图书信息后,该图书将显示在表格中。如果用户要修改图书信息,可以在表格中双击要修改的图书信息,信息会显示在上方的文本框和组合框中。用户修改后,点击“修改”按钮完成修改;如果用户要删除图书信息,可以在表格中选择要删除的数据,点击“删除”按钮,系统提示是否删除,点击“是”按钮删除图书信息。图书馆信息管理运行结果如下:4.4.2图

11、书信息管理技术分析与实现过程为方便使用,双击该模块中的列表控件,系统会自动在文本框中显示选中的数据,提高了用户修改信息的效率。添加列表控件的双击事件,实现过程如下:无效CDlgBookInfo1:OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)int行 = m_list.GetSelectionMark();如果(行!=-1)m_bookname.SetWindowText(m_list.GetItemText(row,0);m_shortcode.SetWindowText(m_list.GetItemText(row,1);m_barcode.S

12、etWindowText(m_list.GetItemText(row,2);m_author.SetWindowText(m_list.GetItemText(row,3);m_public.SetWindowText(m_list.GetItemText(row,4);m_price.SetWindowText(m_list.GetItemText(row,5);m_memo.SetWindowText(m_list.GetItemText(row,6);m_kinds.SetCurSel(m_kinds.FindString(0,m_list.GetItemText(row,7);*p结

13、果 = 0;4.5 图书销售模块设计4.5.1图书销售模块概述图书销售模块主要可以实现图书销售信息的实时管理。操作员可以查看到期金额并将每笔交易的记录插入数据库。在该模块中,操作员在输入条码、数量、折扣、价格后按“插入”键,记录将显示在列表中。单击列表中的一行将其选中,然后按“Del”键取消选中该记录。整个交易过程结束后,点击“添加”按钮,将记录保存到数据库中。运行“图书销售”模块的结果如下:4.5.2图书销售技术分析与实现在使用ADO操作数据库时,我们经常会遇到如何调用存储过程的问题。本模块解决方案如下:连接到数据库:_ConnectionPtr m_pCon;m_pCon-ActiveCo

14、nnection = m_pCon.GetInterfacePtr();(2) 设置m_pCom的参数。参数分为adParamInput和adParamOutput。 adParamInput对应的存储过程需要接受值的参数,而adParamOutput是存储过程执行后可以得到输出值的参数。实施过程如下:_ParameterPtr 数组9; /定义参数数据/输入参数数组0 = m_pCom-CreateParameter( a1 ,adVarChar,adParamInput,30);数组1 = m_pCom-CreateParameter( a2 ,adVarChar,adParamInput

15、,30);数组2 = m_pCom-CreateParameter( a3 ,adSingle,adParamInput,30);数组3 = m_pCom-CreateParameter( a4 ,adCurrency,adParamInput,10);数组4 = m_pCom-CreateParameter( a5 ,adCurrency,adParamInput,10);数组5 = m_pCom-CreateParameter( a6 ,adCurrency,adParamInput,10);数组6 = m_pCom-CreateParameter( a7 ,adVarChar,adPar

16、amInput,30);数组7 = m_pCom-CreateParameter( a8 ,adVarChar,adParamInput,30);数组8 = m_pCom-CreateParameter( a9 ,adVarChar,adParamOutput,30); /输出参数设置m_pCom的参数值,注意强制将字符类型变量替换为_bstr_t类型,实现过程如下:数组0-值 = (_bstr_t)c_customer;数组1-值 = (_bstr_t)c_operator;数组2-值 = f_rebate;数组3-值 = f_summoney;数组4-值 = f_paymoney;数组5-

17、值 = f_factmoney;数组6-值 = (_bstr_t)c_selltime;数组7-值 = (_bstr_t)c_counter;将m_pCom的CommandText和CommandType分别设置为存储过程名和adCmdStoredProc,调用Parameters的Append()方法将数组值追加到m_pCom的参数项中。实施过程如下:m_pCom-CommandText = sp_booksell ;m_pCom-CommandType = adCmdStoredProc;for ( int m = 0;mParameters-Append(arraysm);执行存储过程,

18、取出输出参数的值,删除m_pCom和Parameters中的参数项,过程如下:m_pCom-执行(0,NULL,adCmdStoredProc);c_id = (TCHAR*)(_bstr_t)数组8-值; /注意取出值的时候需要强制类型转换for ( int i = 9 ;i 0;i-)m_pCom-Parameters-Delete( long )(i-1);4.6 图书销售查询模块设计4.6.1图书销售查询模块概述图书销售查询主要完成图书销售信息的统计和排名。决策者可以根据图书的销售情况制定采购计划。图书销售查询结果如下:4.6.2图书销售查询技术的分析与实现函数 Query() 用于执

19、行查询操作。该函数首先检查查询条件,然后根据查询条件设置SQL语句,最后执行SQL语句查询数据,并将查询到的数据显示在表中。实施过程如下:无效CDlgSaleQuery3:Query()如果(m_check1.GetCheck() = false )&(m_check2.GetCheck() = false )MessageBox( 请设置查询条件 , 提示 ,64);返回;if ( (m_check1.GetCheck()= true )&(m_check2.GetCheck()= false )CString c_field,c_value;m_fields.GetWindowText(c

20、_field);m_value.GetWindowText(c_value);if (c_field.IsEmpty()|(c_value.IsEmpty() /判断查询参数是否为空MessageBox( 请设置查询条件 , 提示 ,64);返回;CString sql;m_list.DeleteAllItems(); /清空列表中的数据switch (m_fields.GetCurSel() /根据当前选项的索引判断SQL语句case 0: /按书名搜索,按相同条码销量降序排序c_field = 书名 ;sql.Format( select a.bookname,a.barcode,a.au

21、thor,a.bookconcern,a.price,b.numbers from tb_bookinfo a inner join (selectbarcode,sum(numbers) numbers from tb_sell_sub group by barcode)as b on a.barcode = b.barcode and a.bookname = %s order by b.numbers desc ,c_value);休息;case 1: /按条码搜索,同条码按销售额降序排列c_field = 条码 ;sql.Format( select a.bookname,a.barc

22、ode,a.author,a.bookconcern,a.price,b.numbers from tb_bookinfo a inner join (selectbarcode,sum(numbers) numbers from tb_sell_sub group by barcode)as b on a.barcode = b.barcode and a.barcode = %s order by b.numbers desc ,c_value);休息;case 2: /按作者查询,同条码按销售额降序排序c_field = 作者 ;sql.Format( select a.bookname

23、,a.barcode,a.author,a.bookconcern,a.price,b.numbers from tb_bookinfo a inner join (selectbarcode,sum(numbers) numbers from tb_sell_sub group by barcode)as b on a.barcode = b.barcode and a.author = %s order by b.numbers desc ,c_value);休息;case 3: / 通过查询,同条码按销售额降序排列c_field = 书店 ;sql.Format( select a.bo

24、okname,a.barcode,a.author,a.bookconcern,a.price,b.numbers from tb_bookinfo a inner join (selectbarcode,sum(numbers) numbers from tb_sell_sub group by barcode)as b on a.barcode = b.barcode and a.bookconcern = %s order by b.numbers desc ,c_value);休息;m_pRs-raw_Close();m_pRs-Open(_variant_t)sql,m_pCon.G

25、etInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);整数行 = 0;而(!m_pRs-adoEOF)CString 温度;m_list.InsertItem(1000, );对于( int i = 0;iGetFields()-GetItem( long )i)-Value;m_list.SetItemText(row,i,temp);m_pRs-MoveNext(); /移动到下一条记录行+=1;elseif (m_check1.GetCheck()= false )&(m_check2.GetCheck()= true )m_

26、list.DeleteAllItems();CString sql,c_starttime,c_endtime;m_strtime.GetWindowText(c_starttime);m_endtime.GetWindowText(c_endtime);sql.Format( select a.bookname,a.barcode,a.author,a.bookconcern,a.price,b.numbers from tb_bookinfo 一个内连接 (selectbarcode,sum(numbers) numbers from tb_sell_sub where sellid in

27、 (select来自 tb_sell_main 的销售 ID,其中 %s 和 %s 之间的时间间隔按条形码分组)作为 b 上的 a.barcode = b.barcode order by b.numbers desc ,c_starttime,c_endtime);m_pRs-raw_Close();m_pRs-Open(_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);整数行 = 0;而(!m_pRs-adoEOF)CString 温度;m_list.InsertItem(100

28、0, );对于( int i = 0;iGetFields()-GetItem( long )i)-Value;m_list.SetItemText(row,i,temp);m_pRs-MoveNext();行+=1;别的CString c_field,c_value;m_fields.GetWindowText(c_field);m_value.GetWindowText(c_value);if (c_field.IsEmpty()|(c_value.IsEmpty()MessageBox( 请设置查询条件 , 提示 ,64);返回;CString sql,c_starttime,c_end

29、time;m_strtime.GetWindowText(c_starttime);m_endtime.GetWindowText(c_endtime);if (c_field.IsEmpty()|(c_value.IsEmpty()MessageBox( 请设置查询条件 , 提示 ,64);返回;m_list.DeleteAllItems();开关(m_fields.GetCurSel()案例0:c_field = 书名 ;sql.Format( select a.bookname,a.barcode,a.author,a.bookconcern,a.price,b.numbers from

30、 tb_bookinfo 一个内连接 (selectbarcode,sum(numbers) numbers from tb_sell_sub where sellid in (select来自 tb_sell_main 的销售 ID,其中 %s 和 %s 之间的时间间隔按条形码分组)作为 b 在 a.barcode = b.barcode 和 a.bookname = %s order by b.numbers desc ,c_starttime,c_endtime , c_value);休息;案例一:c_field = 条码 ;sql.Format( select a.bookname,a

31、.barcode,a.author,a.bookconcern,a.price,b.numbers from tb_bookinfo 一个内连接 (selectbarcode,sum(numbers) numbers from tb_sell_sub where sellid in (select来自 tb_sell_main 的销售 ID,其中 %s 和 %s 之间的时间按条形码分组)如 b on a.barcode = b.barcode and a.barcode = %s order by b.numbers desc ,c_starttime,c_endtime , c_value)

32、;休息;案例2:c_field = 作者 ;sql.Format( select a.bookname,a.barcode,a.author,a.bookconcern,a.price,b.numbers from tb_bookinfo 一个内连接 (selectbarcode,sum(numbers) numbers from tb_sell_sub where sellid in (select来自 tb_sell_main 的销售 ID,其中 %s 和 %s 之间的时间间隔按条形码分组)as b on a.barcode = b.barcode and a.author = %s or

33、der by b.numbers desc ,c_starttime,c_endtime , c_value);休息;案例3:c_field = 书店 ;sql.Format( select a.bookname,a.barcode,a.author,a.bookconcern,a.price,b.numbers from tb_bookinfo 一个内连接 (selectbarcode,sum(numbers) numbers from tb_sell_sub where sellid in (select来自 tb_sell_main 的销售 ID,其中 %s 和 %s 之间的时间间隔按条

34、形码分组)如 b on a.barcode = b.barcode and a.bookconcern = %s order by b.numbers desc ,c_starttime,c_endtime , c_value);休息;m_pRs-raw_Close();m_pRs-Open(_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);整数行 = 0;而(!m_pRs-adoEOF)CString 温度;m_list.InsertItem(1000, );对于( int i =

35、 0;iGetFields()-GetItem( long )i)-Value;m_list.SetItemText(row,i,temp);m_pRs-MoveNext();行+=1;总结(也可以分成几个小节,每个小节说明不同的东西,比如收获、经验、不足、未来改进等。页数应该在5页左右)该系统实现了图书馆管理系统的典型功能,包括查询所有记录信息,增加搜索功能,具有较高的安全性。但由于自身独立完成,能力有限,仍有部分功能没有实现。并且通过这次课程设计,培养了我对C+编程的兴趣,我的编程能力也得到了提升,但是存在很多不足,无法独立编写功能齐全的代码。写代码需要参考很多资料,问同学们,所以以后要培

36、养独立写代码的能力。设计过程大致分为以下几个步骤:考虑整体设计方案:模块的整体结构和外部设计,功能分配。考虑实现整个程序通常需要的几个模块以及其中使用的 Visual C+ 语言的基本运算符和语句。绘制整体设计方案的流程图:以流程图的形式展示你的基本编程思想。流程图具体化:把流程图中几个主要模块的具体实现想清楚,可以用流程图的形式展示出来,想想实现的关键代码。编辑程序代码:这是一个非常重要且复杂的环节,需要反复修改。在链接过程中,你会发现整体设计和模块思维存在很多问题,需要不断改进。如何实现各个功能的功能并达到预期的效果,也将是一项复杂的工作。代码调试:在VS2008环境下输入代码即可调试并正常运行。在调试过程中,会有很多地方需要精髓,需要充分的耐心和细心,不断的完善和完善程序。通过这样的设计,我对数据库和MFC编程有了更深入的了解,对需求分析的重要性有了更深刻的认识,对一个系统各个部门的流程细节有了更好的了解。更清晰地掌握概念设计的步骤有助于理解分析过程中所需的原则以及获得

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论