windows课程设计图书管理系统文档格式.docx
《windows课程设计图书管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《windows课程设计图书管理系统文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
2采用界面选择与编辑框两种输入方式,输出结果直接显示在售票对话框中.输入的数据必须符合程序所规定的合法输入方式,对不合法的信息输入将提示无法处理.
3输入输出的要求
采用界面选择与编辑框两种输入方式,输出结果直接显示在售票对话框中.输入的数据必须符合程序所规定的合法输入方式,对不合法的信息输入将提示无法处理。
4使用界面编程、网络、数据库、文件系统、线程和进程、异常处理等知识。
特别是数据库的应用,用来存储数据和提供数据。
对于网络主要进行网络通信,连接客户端和服务器端。
四、开发工具介绍
1。
总体介绍:
VisualStudio是一套完整的开发工具集,用于生成ASP。
NETWeb应用程序、XMLWebServices、桌面应用程序和移动应用程序。
VisualBasic、VisualC++、VisualC#和VisualJ#全都使用相同的集成开发环境(IDE),利用此IDE可以共享工具且有助于创建混合语言解决方案。
另外,这些语言利用了.NETFramework的功能,通过此框架可使用简化ASPWeb应用程序和XMLWebServices开发的关键技术。
2。
功能介绍:
创建满足关键性要求的多层次的智能客户端、Web、移动或基于MicrosoftOffice的应用程序.使用VisualStudio2010,专业开发人员能够:
使用改进后的可视化设计工具、编程语言和代码编辑器,享受高效率的开发环境。
在统一的开发环境中,开发并调试多层次的服务器应用程序.
使用集成的可视化数据库设计和报告工具,创建SQLServer2005解决方案.
使用VisualStudioSDK创建可以扩展VisualStudioIDE的工具。
Microsoft为单独工作或在小型团队中的专业开发人员提供了两种选择,VisualStudio2005ProfessionalEdition和用于MicrosoftOffice系统的VisualStudio2005工具。
每种版本都在标准版的特性上进行了扩展,包括用于远程服务程序开发和调试、SQLServer2005开发的工具,以及完整的、没有限制的开发环境.每种产品都可以单独购买或打包定购。
专业开发人员喜欢自由的使用。
NETFramework2。
0,它是一种稳健的、功能齐备的开发环境,支持创建扩展VisualStudio集成开发环境的工具.
3。
主要部分
运行库实际上在组件的运行时和开发时操作中都起到很大的作用,尽管名称中没有体现这个意思。
在组件运行时,运行库除了负责满足此组件在其他组件上可能具有的依赖项外,还负责管理内存分配、启动和停止线程和进程,以及强制执行安全策略.在开发时,运行库的作用稍有变化;
由于做了大量的自动处理工作(如内存管理),运行库使开发人员的操作非常简单,尤其是与今天的COM相比。
特别是反射等功能显著减少了开发人员为将业务逻辑转变为可重用组件而必须编写的代码量。
该框架为开发人员提供了统一的、面向对象的、分层的和可扩展的类库集(API)。
目前,C++开发人员使用Microsoft基础类,而Java开发人员使用Windows基础类。
该框架统一了这些完全不同的模型,还为VisualBasic和JScript程序员提供了对类库的访问。
通过创建跨所有编程语言的公共API集,公共语言运行库使得跨语言继承、错误处理和调试成为可能。
从JScript到C++的所有编程语言具有对框架的相似访问,开发人员可以自由选择它们要使用的语言。
ASP。
NET建立在。
NETFramework的编程类的基础上,为Web应用程序模型提供了一组可简化Web应用程序生成的控件和基础结构.ASP。
NET包括可用于封装通用HTML用户界面元素(如文本框、按钮和列表框)的一组控件。
但这些控件在Web服务器上运行,并以HTML的形式将其用户界面呈现在浏览器中。
在服务器上,这些控件公布面向对象的编程模型,该模型为Web开发人员提供面向对象编程的丰富功能.ASP。
NET还提供基础结构服务,如状态管理和进程回收,从而可以进一步减少开发人员必须编写的代码数量,并提高应用程序的可靠性。
另外,ASP.NET使用这些同样的概念使开发人员能够以服务的形式交付软件。
使用XMLWebServices功能,ASP。
NET开发人员可以编写他们的业务逻辑,并使用ASP.NET基础结构通过SOAP交付该服务。
五、设计思路
整体思路分析:
1。
整个程序设计成以下几个大的模块:
1系统管理,下属可以实现又分为:
用户管理、注销/重新登录、退出系统三个功能.
基础数据设置,下属可以实现:
罚款设置、图书类别设置、读者类别设置三个功能。
借阅管理,下属分为:
借书、还书、借书查询、还书查询四个模块.
4.书库管理,下属分为:
新书入库、图书查询和图书挂失三个模块。
5。
读者管理,下属分为:
读者登记、读者信息查询、读者注销三个功能。
6.数据库管理,下属分为:
数据库备份、数据库恢复两个模块
书库管理模块在整体程程序中格的位置:
用户管理数据库采用的是SQLServer数据库,建立用户权限表以及设备信息表,通过MFCODBC方式访问,使用类CRecordset的函数MoveFirst()、MoveLast()、MoveNext()、MovePrev()、IsBOF()、IsEOF()对设备信息表实现遍历操作,使用类CRecordset的函数AddNew增加设备或者函数Delete删除信息。
并根据用户登录情况确定用户是否可以修改设备信息,以此实现后台数据与前台界面操作的一致.
在帐户被通过后,用户可以使用它来登录系统,登录时系统自动查找用户表,判断帐户是否存在,存在则提示用户登录成功,并显示可以的操作;
否则,提示不存在该用户,返回登录界面,让用户重新输入信息。
另外,经过这个验证的过程,提醒用户牢记帐号和密码,防止他人盗窃个人信息,从而提高用户信息的安全性.进行登录操作时,访问到了用户表(User)。
在用户未成功登录时,个人资料功能是被禁止的.只有成功登录以后,用户才有资格修改自己的资料,包括基本信息的修改,帐户(昵称或密码)的更新,帐号是不可以更改的,一旦服务器分配以后,始终与帐户绑定。
方便管理员管理帐户,也使得系统具有一定的稳定性。
该模块访问到了用户表和个人信息表.
备注:
当在修改密码时,系统会确认旧密码,如果输入的旧密码错误,系统会弹出出错信息,否则才允许更新密码。
并且,如果修改昵称,系统会把修改后的昵称更新到两个表中,使得数据能够保持同步,方便管理员的管理和维护,提高了系统的可靠性。
系统具有数据录入、数据修改、记录查询、报表打印等功能。
较全面满足了材料库存管理的各项工作。
该系统采用模块化原理编程,做到了模块规模适中,本身相对独立。
模块化使程序结构清晰,易于设计、易于理解,提高了系统的可靠性。
用户的需求具体体现在各种信息的提供、保存、更新和查询统计,这就要求数据库结构能充分满足各种信息的输出和输入.收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的详细设计打下基础。
2.书库模块分析:
书库管理需要实现三个功能,分别是新书入库、图书挂失和图书查询。
模块主体设计如下:
六、流程图(或功能模块图)
总程序设计框图:
书库管理系统设计框图:
七,实验各个模块代码及相关分析说明:
书库管理模块在整个程序中的位置
1.新书入库模块
先使用VS中的MFC控件建立如下框图
然后再确定按钮添加以下对应函数
#include”stdafx。
h"
#include”Library.h"
#include”NewBookDlg。
#include”BookTypeSet。
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CNewBookDlgdialog
CNewBookDlg:
:
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_INIT
}
voidCNewBookDlg:
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);
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_MAP
}
BEGIN_MESSAGE_MAP(CNewBookDlg,CDialog)
//{{AFX_MSG_MAP(CNewBookDlg)
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_MAP
END_MESSAGE_MAP()
//CNewBookDlgmessagehandlers
BOOLCNewBookDlg:
OnInitDialog()
CDialog:
OnInitDialog();
//设置列表
m_ctrList.InsertColumn(0,”图书编号”);
m_ctrList.InsertColumn(1,”图书名称”);
m_ctrList。
InsertColumn(2,”图书类别"
InsertColumn(3,"
作者”);
InsertColumn(4,"
出版社”);
m_ctrList.InsertColumn(5,"
图书价格”);
InsertColumn(6,”登记日期”);
InsertColumn(7,"
备注说明"
SetColumnWidth(0,60);
SetColumnWidth(1,120);
m_ctrList.SetColumnWidth(2,80);
SetColumnWidth(3,80);
SetColumnWidth(4,80);
m_ctrList.SetColumnWidth(5,80);
m_ctrList.SetColumnWidth(6,80);
m_ctrList.SetColumnWidth(7,80);
SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//初始化图书类型
CBookTypeSetrecordset;
if(!
recordset。
Open(AFX_DB_USE_DEFAULT_TYPE,”select*frombookType"
))
{
MessageBox("
打开数据库失败!
"
数据库错误"
,MB_OK);
returnFALSE;
}
while(!
IsEOF())
m_ctrBookType.AddString(recordset。
m_type);
recordset。
MoveNext();
}
recordset。
Close();
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
voidCNewBookDlg:
OnButtonNew()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
if(m_strBookCode.IsEmpty())
{
AfxMessageBox("
请输入图书编号!
”);
return;
if(m_strBookType。
IsEmpty())
AfxMessageBox(”请输入图书类型!
if(m_strBookName.IsEmpty())
AfxMessageBox(”请输入图书名称!
CStringstrSQL;
CTimecurrent=CTime:
GetCurrentTime();
strSQL.Format(”select*frombookInfowherecode='
%s'
”,m_strBookCode);
m_recordset。
Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
MessageBox(”打开数据库失败!
,”数据库错误”,MB_OK);
return;
}
if(m_recordset.GetRecordCount()!
=0)
m_recordset.Close();
该图书编号已经存在,请重新输入!
m_recordset.Close();
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE))
MessageBox(”打开数据库失败!
”,"
,MB_OK);
//添加图书记录
m_recordset。
AddNew();
m_recordset.m_code=m_strBookCode;
m_name=m_strBookName;
m_recordset.m_type=m_strBookType;
m_recordset.m_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;
Update();
//更新列表
CStringstrTime;
m_ctrList.InsertItem(0,m_strBookCode);
SetItemText(0,1,m_strBookName);
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());
SetItemText(0,6,strTime);
m_ctrList.SetItemText(0,7,m_strBrief);
//更新界面显示
m_strBookType=_T("
m_strBookName=_T("
m_strPrice=_T(”"
m_strPress=_T(”"
m_strWriter=_T(””);
UpdateData(FALSE);
OnButtonAll()
//TODO:
m_ctrList.DeleteAllItems();
m_ctrList.SetRedraw(FALSE);
UpdateData(TRUE);
CStringstrSQL;
strSQL。
Format(”select*frombookInfo”);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
打开数据库失败!
”数据库错误”,MB_OK);
return;
inti=0;
CStringstrTime;
while(!
m_ctrList。
InsertItem(i,m_recordset。
m_code);
m_ctrList.SetItemText(i,1,m_recordset.m_name);
m_ctrList.SetItemText(i,2,m_recordset。
m_type);
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.GetYear(),m_recordset.m_in_date。
GetMonth(),m_recordset.m_in_date。
GetDay());
SetItemText(i,6,strTime);
m_ctrList.SetItemText(i,7,m_recordset.m_brief);
i++;
m_recordset。
MoveNext();
m_recordset.Close();
m_ctrList.SetRedraw(TRUE);
OnButtonDelete()
Addyourcontrolnotificationhandlercodeh