版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南民族大学计算机科学学院Windows 系统编程课 程 设 计 报 告题 目: 图书管理系统书库系统设计专 业 08 自动化学 生 姓 名 何龙班 级 学 号指 导 老 师 郑波尽完 成 日 期图书管理系统 书库管理系统一、课题背景 :随着社会信息量的与日俱增, 作为信息存储的主要媒体之一图书, 数量、 规模比以往任何时候都大的多,不论个人还是图书管理部门都需要使用方便而有效的方式来管理自己的书籍。在计算机日益普及的今天,对个人而言若采用一套行之有效的图书管理系统来管理自己的书籍,会方便许多。对图书管理部门而言,以前单一的手工检索已不能满足人们的要求,为了便于图书资料的管理需要有效的图书管理
2、软件。图书管理系统软件是一套功能比较完善的数据管理软件,具有数据操作方便高效迅速等优点。该软件采用数据库软件开发工具进行开发, 具有很好的可移植性, 可在应用范围较广 WINDOW系S列等操作系统上使用。二、课题目的:1. 进一步掌握利用 Visual Studio 进行程序设计的能力2. 基本掌握面向对象程序设计的基本思路和方法3. 加深对数据库的掌握和运用4. 掌握用 VC+ 开发应用程序的的一般步骤和方法5. 进一步加强 C+ 的编程能力和对程序结构的理解6. 学会调试一个较长程序的基本方法三、课题要求:根据所学知识, 编写指定题目的程序, 并规范地完成课程设计报告。 通过课程设计, 加
3、深对Windows程序设计课程所学知识的理解,学会编制结构清晰、风格良好、数据结构适当的 Windows 平台应用程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力。具体要求如下:1 了解 Windows 编程的基础知识, 掌握 MFC 应用程序的基本知识; 基本掌握面向对象程序设计的基本思路和方法;掌握用 VC+ 开发应用程序的一般步骤和方法;系统以 Windows 标准菜单界面方式工作,运行界面友好,演示程序以用户和计算机的对话方式进行。2 采用界面选择与编辑框两种输入方式,输出结果直接显示在售票对话框中。输入的数据必须符合程序所规定的合法输入方式,对不合法的信息输入将提示无法处
4、理。3 输入输出的要求采用界面选择与编辑框两种输入方式, 输出结果直接显示在售票对话框中。 输入的数据必须符合程序所规定的合法输入方式,对不合法的信息输入将提示无法处理。4 使用界面编程、网络、数据库、文件系统、线程和进程、异常处理等知识。特别是数据库的应用,用来存储数据和提供数据。对于网络主要进行网络通信,连接客户端和服务器端。四、开发工具介绍1.总体介绍 :Visual Studio 是一套完整的开发工具集,用于生成 ASP.NET Web 应用程序、 XML Web Services 、桌面应用程序和移动应用程序。 Visual Basic 、Visual C+ 、Visual C# 和
5、 Visual J# 全都使用相同的集成开发环境(IDE) ,利用此 IDE 可以共享工具且有助于创建混合语言解决方案。 另外, 这些语言利用了 .NET Framework的功能,通过此框架可使用简化 ASP Web 应用程序和 XML Web Services 开发的关键技术。2.功能介绍:创建满足关键性要求的多层次的智能客户端、 Web、移动或基于 Microsoft Office 的应用程序。 使用 VisualStudio 2010, 专业开发人员能够:使用改进后的可视化设计工具、编程语言和代码编辑器,享受高效率的开发环境。在统一的开发环境中,开发并调试多层次的服务器应用程序。使用集
6、成的可视化数据库设计和报告工具,创建 SQL Server 2005 解决方案。使用 Visual Studio SDK 创建可以扩展 Visual Studio IDE 的工具。Microsoft 为单独工作或在小型团队中的专业开发人员提供了两种选择, Visual Studio 2005 ProfessionalEdition 和用于 Microsoft Office 系统的 Visual Studio 2005 工具。每种版本都在标准版的特性上进行了扩展, 包括用于远程服务程序开发和调试、 SQL Server2005 开发的工具,以及完整的、没有限制的开发环境。每种产品都可以单独购买或
7、打包定购。专业开发人员喜欢自由的使用 .NET Framework 2.0 ,它是一种稳健的、功能齐备的开发环境,支持创建扩展 Visual Studio 集成开发环境的工具。3.主要部分运行库实际上在组件的运行时和开发时操作中都起到很大的作用, 尽管名称中没有体现这个意思。 在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略。在开发时,运行库的作用稍有变化;由于做了大量的自动处理工作(如内存管理) ,运行库使开发人员的操作非常简单,尤其是与今天的 COM 相比。特别是反射等功能显著减少了开发人员为将业务逻辑转变
8、为可重用组件而必须编写的代码量。该框架为开发人员提供了统一的、面向对象的、分层的和可扩展的类库集 (API) 。目前, C+ 开发人员使用 Microsoft 基础类, 而 Java 开发人员使用 Windows 基础类。该框架统一了这些完全不同的模型,还为Visual Basic 和 JScript 程序员提供了对类库的访问。通过创建跨所有编程语言的公共 API 集,公共语言运行库使得跨语言继承、 错误处理和调试成为可能。 从 JScript 到 C+ 的所有编程语言具有对框架的相似访问,开发人员可以自由选择它们要使用的语言。ASP.NET 建立在 .NET Framework 的编程类的基
9、础上,为 Web 应用程序模型提供了一组可简化 Web应用程序生成的控件和基础结构。 ASP.NET 包括可用于封装通用 HTML 用户界面元素(如文本框、按钮和列表框) 的一组控件。 但这些控件在 Web 服务器上运行, 并以 HTML 的形式将其用户界面呈现在浏览器中。在服务器上,这些控件公布面向对象的编程模型,该模型为 Web 开发人员提供面向对象编程的丰富功能。ASP.NET 还提供基础结构服务, 如状态管理和进程回收, 从而可以进一步减少开发人员必须编写的代码数量,并提高应用程序的可靠性。另外, ASP.NET 使用这些同样的概念使开发人员能够以服务的形式交付软件。使用 XML We
10、b Services 功能, ASP.NET 开发人员可以编写他们的业务逻辑,并使用 ASP.NET 基础结构通过SOAP 交付该服务。五、设计思路整体思路分析 :1. 整个程序设计成以下几个大的模块 :1 系统管理,下属可以实现又分为:用户管理、注销 /重新登录、退出系统三个功能。2.基础数据设置,下属可以实现:罚款设置、图书类别设置、读者类别设置三个功能。3.借阅管理,下属分为:借书、还书、借书查询、还书查询四个模块。4.书库管理,下属分为:新书入库、图书查询和图书挂失三个模块。5.读者管理,下属分为:读者登记、读者信息查询、读者注销三个功能。6.数据库管理,下属分为:数据库备份、数据库恢
11、复两个模块书库管理模块在整体程程序中格的位置:用户管理数据库采用的是 SQL Server 数据库,建立用户权限表以及设备信息表,通过 MFC ODBC 方式访问,使用类 CRecordset 的函数 MoveFirst() 、MoveLast() 、MoveNext() 、MovePrev() 、IsBOF() 、IsEOF() 对设备信息表实现遍历操作,使用类 CRecordset 的函数 AddNew 增加设备或者函数 Delete 删除信息。并根据用户登录情况确定用户是否可以修改设备信息,以此实现后台数据与前台界面操作的一致。在帐户被通过后,用户可以使用它来登录系统,登录时系统自动查找
12、用户表,判断帐户是否存在,存在则提示用户登录成功,并显示可以的操作;否则,提示不存在该用户,返回登录界面,让用户重新输入信息。另外,经过这个验证的过程,提醒用户牢记帐号和密码,防止他人盗窃个人信息,从而提高用户信息的安全性。进行登录操作时,访问到了用户表( User)。在用户未成功登录时,个人资料功能是被禁止的。只有成功登录以后,用户才有资格修改自己的资料,包括基本信息的修改,帐户(昵称或密码)的更新,帐号是不可以更改的,一旦服务器分配以后,始终与帐户绑定。方便管理员管理帐户,也使得系统具有一定的稳定性。该模块访问到了用户表和个人信息表。备注:当在修改密码时,系统会确认旧密码,如果输入的旧密码
13、错误,系统会弹出出错信息,否则才允许更新密码。并且,如果修改昵称,系统会把修改后的昵称更新到两个表中,使得数据能够保持同步,方便管理员的管理和维护,提高了系统的可靠性。系统具有数据录入、数据修改、记录查询、报表打印等功能。较全面满足了材料库存管理的各项工作。该系统采用模块化原理编程,做到了模块规模适中,本身相对独立。模块化使程序结构清晰,易于设计、易于理解,提高了系统的可靠性。用户的需求具体体现在各种信息的提供、保存、更新和查询统计,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的详细设计打下基础。2.书库模块分析:书
14、库管理需要实现三个功能,分别是新书入库、图书挂失和图书查询。模块主体设计如下:六、流程图(或功能模块图)总程序设计框图:书库管理系统设计框图:七,实验各个模块代码及相关分析说明:书库管理模块在整个程序中的位置1.新书入库模块先使用 VS 中的 MFC 控件建立如下框图然后再确定按钮添加以下对应函数#include stdafx.h #include Library.h #include NewBookDlg.h#include BookTypeSet.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE
15、 = _FILE_;#endif/ CNewBookDlg dialogCNewBookDlg:CNewBookDlg(CWnd* pParent /*=NULL*/): CDialog(CNewBookDlg:IDD, pParent) /AFX_DATA_INIT(CNewBookDlg)m_strBookType = _T();m_strBookCode = _T();m_strBookName = _T();m_strPrice = _T(); m_strPress = _T(); m_strWriter = _T(); m_strBrief = _T(); /AFX_DATA_INI
16、Tvoid CNewBookDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CNewBookDlg)DDX_Control(pDX, IDC_COMBO_BOOKTYPE, m_ctrBookType);DDX_Control(pDX, IDC_LIST1, m_ctrList);DDX_CBString(pDX, IDC_COMBO_BOOKTYPE, m_strBookType);DDX_Text(pDX, IDC_EDIT_BOOK_CODE, m_strBookCode);
17、DDX_Text(pDX, IDC_EDIT_BOOK_NAME, m_strBookName);DDX_Text(pDX, IDC_EDIT_BOOK_PRICE, m_strPrice);DDX_Text(pDX, IDC_EDIT_PRESS, m_strPress);DDX_Text(pDX, IDC_EDIT_WRITER, m_strWriter);DDX_Text(pDX, IDC_EDIT_BRIEF, m_strBrief);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CNewBookDlg, CDialog)/AFX_MSG_MAP(CNewBookDlg
18、) ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)ON_BN_CLICKED(IDC_BUTTON_ALL, OnButtonAll)ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CNewBookDlg message handlersBOOL CNewBookDlg:OnInitDialog()CDialog:OnInitDialog();/设置列表m_ct
19、rList.InsertColumn(0, 图书编号 );m_ctrList.InsertColumn(1, 图书名称 );m_ctrList.InsertColumn(2, 图书类别 );m_ctrList.InsertColumn(3, 作者); m_ctrList.InsertColumn(4, 出版社 );m_ctrList.InsertColumn(5, 图书价格 );m_ctrList.InsertColumn(6, 登记日期 ); m_ctrList.InsertColumn(7, 备注说明 );m_ctrList.SetColumnWidth(0,60); m_ctrList.
20、SetColumnWidth(1,120);m_ctrList.SetColumnWidth(2,80); m_ctrList.SetColumnWidth(3,80); m_ctrList.SetColumnWidth(4,80); m_ctrList.SetColumnWidth(5,80); m_ctrList.SetColumnWidth(6,80); m_ctrList.SetColumnWidth(7,80);m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);/初始化图书类型CBookTypeSet
21、recordset ;if(!recordset.Open(AFX_DB_USE_DEFAULT_TYPE,select * from bookType)MessageBox(打开数据库失败 !, 数据库错误 ,MB_OK);return FALSE; while(!recordset.IsEOF()m_ctrBookType.AddString(recordset.m_type);recordset.MoveNext();recordset.Close();return TRUE; / return TRUE unless you set the focus to a control/ EX
22、CEPTION: OCX Property Pages should return FALSE void CNewBookDlg:OnButtonNew()/ TODO: Add your control notification handler code hereUpdateData(); if(m_strBookCode.IsEmpty()AfxMessageBox( 请输入图书编号! ); return;if(m_strBookType.IsEmpty()AfxMessageBox( 请输入图书类型! ); return;if(m_strBookName.IsEmpty()AfxMess
23、ageBox( 请输入图书名称! ); return;CString strSQL;CTime current=CTime:GetCurrentTime();strSQL.Format(select * from bookInfo where code = %s,m_strBookCode);if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败 !, 数据库错误 ,MB_OK);return ; if(m_recordset.GetRecordCount()!=0)m_recordset.Close();A
24、fxMessageBox( 该图书编号已经存在,请重新输入! );return; m_recordset.Close();if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE)MessageBox(打开数据库失败 !, 数据库错误 ,MB_OK);return ; /添加图书记录m_recordset.AddNew();m_recordset.m_code = m_strBookCode ;m_recordset.m_name = m_strBookName ;m_recordset.m_type = m_strBookType ;m_recordset.m
25、_in_date = current ; m_recordset.m_price = m_strPrice ;m_recordset.m_press = m_strPress ;m_recordset.m_writer = m_strWriter ;m_recordset.m_brief = m_strBrief ;m_recordset.m_isBorrow = FALSE;m_recordset.Update(); m_recordset.Close();/更新列表CString strTime;m_ctrList.InsertItem(0,m_strBookCode);m_ctrList
26、.SetItemText(0,1,m_strBookName);m_ctrList.SetItemText(0,2,m_strBookType);m_ctrList.SetItemText(0,3,m_strWriter);m_ctrList.SetItemText(0,4,m_strPress);m_ctrList.SetItemText(0,5,m_strPrice);strTime.Format(%d-%d-%d,current.GetYear(),current.GetMonth(),current.GetDay();m_ctrList.SetItemText(0,6,strTime)
27、; m_ctrList.SetItemText(0,7,m_strBrief);/更新界面显示 m_strBookType = _T(); m_strBookCode = _T(); m_strBookName = _T(); m_strPrice = _T(); m_strPress = _T(); m_strWriter = _T(); m_strBrief = _T(); UpdateData(FALSE);void CNewBookDlg:OnButtonAll()/ TODO: Add your control notification handler code herem_ctrL
28、ist.DeleteAllItems(); m_ctrList.SetRedraw(FALSE); UpdateData(TRUE); CString strSQL;strSQL.Format( select * from bookInfo );if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)MessageBox(打开数据库失败 !, 数据库错误 ,MB_OK); return ;int i=0;CString strTime; while(!m_recordset.IsEOF()m_ctrList.InsertItem(i,m_reco
29、rdset.m_code);m_ctrList.SetItemText(i,1,m_recordset.m_name);m_ctrList.SetItemText(i,2,m_recordset.m_type);m_ctrList.SetItemText(i,3,m_recordset.m_writer);m_ctrList.SetItemText(i,4,m_recordset.m_press);m_ctrList.SetItemText(i,5,m_recordset.m_price); strTime.Format(%d-%d-%d,m_recordset.m_in_date.GetYe
30、ar(),m_recordset.m_in_date.GetMonth(),m_recordset.m_in_date.GetDay();m_ctrList.SetItemText(i,6,strTime);m_ctrList.SetItemText(i,7,m_recordset.m_brief);i+;m_recordset.MoveNext(); m_recordset.Close(); m_ctrList.SetRedraw(TRUE);void CNewBookDlg:OnButtonDelete()/ TODO: Add your control notification hand
31、ler code here int i = m_ctrList.GetSelectionMark();if(0i)AfxMessageBox( 请选择一条记录进行删除! ); return;CString strSQL;strSQL.Format(select * from bookInfo where code = %s ,m_ctrList.GetItemText(i,0);if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)AfxMessageBox( 打开数据库失败 !);return ;m_recordset.Delete();m_
32、recordset.Close();m_ctrList.DeleteItem(i);/更新界面显示 m_strBookType = _T();m_strBookCode = _T();m_strBookName = _T();m_strPrice = _T(); m_strPress = _T();m_strWriter = _T();m_strBrief = _T(); UpdateData(FALSE);void CNewBookDlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)/ TODO: Add your control notific
33、ation handler code hereint i = m_ctrList.GetSelectionMark(); m_strBookType = m_ctrList.GetItemText(i,2);m_strBookCode = m_ctrList.GetItemText(i,0);m_strBookName = m_ctrList.GetItemText(i,1);m_strPrice = m_ctrList.GetItemText(i,5);m_strPress = m_ctrList.GetItemText(i,4);m_strWriter = m_ctrList.GetIte
34、mText(i,3);m_strBrief = m_ctrList.GetItemText(i,7);UpdateData(FALSE); *pResult = 0;2.图书查询模块对查询按钮添加相应的函数如下:#include stdafx.h #include Library.h#include BorrowSearchDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CBorrowSearchDlg dialogCBorrowSearchDlg:CBo
35、rrowSearchDlg(CWnd* pParent /*=NULL*/): CDialog(CBorrowSearchDlg:IDD, pParent) /AFX_DATA_INIT(CBorrowSearchDlg)m_strBookCode = _T();m_strReaderCode = _T();/AFX_DATA_INITvoid CBorrowSearchDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CBorrowSearchDlg) DDX_Control(pD
36、X, IDC_LIST1, m_ctrList);DDX_Text(pDX, IDC_EDIT_BOOKCODE, m_strBookCode);DDX_Text(pDX, IDC_EDIT_READERCODE, m_strReaderCode);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CBorrowSearchDlg, CDialog)/AFX_MSG_MAP(CBorrowSearchDlg)ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnButtonSearch)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CBorrowSe
37、archDlg message handlersBOOL CBorrowSearchDlg:OnInitDialog()CDialog:OnInitDialog();m_ctrList.InsertColumn(0, 读者编号 );m_ctrList.InsertColumn(1, 读者姓名 );m_ctrList.InsertColumn(2, 图书编号 );m_ctrList.InsertColumn(3, 图书名称 );m_ctrList.InsertColumn(4, 图书类别 );m_ctrList.InsertColumn(5, 图书价格 );m_ctrList.InsertCol
38、umn(6, 借出日期 );m_ctrList.InsertColumn(7, 归还日期 );m_ctrList.InsertColumn(8, 操作员 );m_ctrList.SetColumnWidth(0,60); m_ctrList.SetColumnWidth(1,60); m_ctrList.SetColumnWidth(2,80); m_ctrList.SetColumnWidth(3,100); m_ctrList.SetColumnWidth(4,80); m_ctrList.SetColumnWidth(5,80); m_ctrList.SetColumnWidth(6,8
39、0); m_ctrList.SetColumnWidth(7,80); m_ctrList.SetColumnWidth(8,80);m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);return TRUE; / return TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE void CBorrowSearchDlg:OnButtonSearch()/ TODO: Add y
40、our control notification handler code hereUpdateData(); CString strSQL;if(!m_strReaderCode.IsEmpty()&!m_strBookCode.IsEmpty() strSQL.Format(select * from borrowInfo where reader_code = %s and book_code =%s ,m_strReaderCode,m_strBookCode);else if(!m_strReaderCode.IsEmpty()strSQL.Format(select * from borrowInfo where reader_code = %s ,m_strReaderCode); else if(!m_strBookCode.IsEmpty()strSQL.Format(select * from borrowInfo where book_code = %s ,m_strBookCode); elsestrSQL=select * from borrowI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业行政单位审计制度
- 内部审计及风险管理制度
- 基金业风控制度
- 内部审计风险防控制度
- 医院政府采购审计制度
- 呆帐核销专项审计制度
- 脑外伤头痛患者的音乐疗法
- 小额贷款风控制度
- 小学控烟培训教育制度
- 员工消防培训教育制度
- 神州数码集团在线测评题
- 掺混肥料生产管理制度
- 2026年安徽财贸职业学院单招综合素质笔试备考试题附答案详解
- 2026内蒙古事业单位招聘第一阶段减少招聘人数岗位(公共基础知识)测试题附答案
- 胆总管结石课件
- 入孵合同解除协议
- 数据出境安全协议
- 护士交接班礼仪
- 2025年10月自考05677法理学试题及答案含评分参考
- 2025年专升本旅游管理历年真题汇编试卷及答案
- 2026年辽宁医药职业学院单招职业适应性测试必刷测试卷及答案1套
评论
0/150
提交评论