windows课程设计图书管理系统.docx
《windows课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《windows课程设计图书管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
windows课程设计图书管理系统
一、设计分析
1.整个程序设计成以下几个大的模块:
1系统管理,下属可以实现又分为:
用户管理、注销/重新登录、退出系统三个功能。
2.基础数据设置,下属可以实现:
罚款设置、图书类别设置、读者类别设置三个功能。
3.借阅管理,下属分为:
借书、还书、借书查询、还书查询四个模块。
4.书库管理,下属分为:
新书入库、图书查询和图书挂失三个模块。
5.读者管理,下属分为:
读者登记、读者信息查询、读者注销三个功能。
6.数据库管理,下属分为:
数据库备份、数据库恢复两个模块
书库管理模块在整体程程序中格的位置:
图1.1书库管理模块在整体程程序中格的位置
用户管理数据库采用的是SQLServer数据库,建立用户权限表以及设备信息表,通过MFCODBC方式访问,使用类CRecordset的函数MoveFirst()、MoveLast()、MoveNext()、MovePrev()、IsBOF()、IsEOF()对设备信息表实现遍历操作,使用类CRecordset的函数AddNew增加设备或者函数Delete删除信息。
并根据用户登录情况确定用户是否可以修改设备信息,以此实现后台数据与前台界面操作的一致。
在帐户被通过后,用户可以使用它来登录系统,登录时系统自动查找用户表,判断帐户是否存在,存在则提示用户登录成功,并显示可以的操作;否则,提示不存在该用户,返回登录界面,让用户重新输入信息。
另外,经过这个验证的过程,提醒用户牢记帐号和密码,防止他人盗窃个人信息,从而提高用户信息的安全性。
进行登录操作时,访问到了用户表(User)。
在用户未成功登录时,个人资料功能是被禁止的。
只有成功登录以后,用户才有资格修改自己的资料,包括基本信息的修改,帐户(昵称或密码)的更新,帐号是不可以更改的,一旦服务器分配以后,始终与帐户绑定。
方便管理员管理帐户,也使得系统具有一定的稳定性。
该模块访问到了用户表和个人信息表。
备注:
当在修改密码时,系统会确认旧密码,如果输入的旧密码错误,系统会弹出出错信息,否则才允许更新密码。
并且,如果修改昵称,系统会把修改后的昵称更新到两个表中,使得数据能够保持同步,方便管理员的管理和维护,提高了系统的可靠性。
系统具有数据录入、数据修改、记录查询、报表打印等功能。
较全面满足了材料库存管理的各项工作。
该系统采用模块化原理编程,做到了模块规模适中,本身相对独立。
模块化使程序结构清晰,易于设计、易于理解,提高了系统的可靠性。
用户的需求具体体现在各种信息的提供、保存、更新和查询统计,这就要求数据库结构能充分满足各种信息的输出和输入。
收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的详细设计打下基础。
2.书库模块分析:
书库管理需要实现三个功能,分别是新书入库、图书挂失和图书查询。
模块主体设计如下:
图1.2模块主体
二、流程图(或功能模块图)
总程序设计框图:
图2.1总程序设计框图
书库管理系统设计框图:
图2.2书库管理系统设计框图
三、实验各个模块代码及相关分析说明:
书库管理模块在整个程序中的位置
图3.1书库管理模块在整个程序中的位置
1.新书入库模块
先使用VS中的MFC控件建立如下框图
图3.2新书入库模块
2.图书查询模块
图3.3图书查询模块
3.图书挂失模块
图3.4图书挂失模块
四、实验代码:
1.新书入库模块
#include"stdafx.h"
#include"Library.h"
#include"NewBookDlg.h"
#include"BookTypeSet.h"
#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,"图书类别");
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.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);
//初始化图书类型
CBookTypeSetrecordset;
if(!
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,"select*frombookType"))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
returnFALSE;
}
while(!
recordset.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("请输入图书类型!
");
return;
}
if(m_strBookName.IsEmpty())
{
AfxMessageBox("请输入图书名称!
");
return;
}
CStringstrSQL;
CTimecurrent=CTime:
:
GetCurrentTime();
strSQL.Format("select*frombookInfowherecode='%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();
AfxMessageBox("该图书编号已经存在,请重新输入!
");
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_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();
//更新列表
CStringstrTime;
m_ctrList.InsertItem(0,m_strBookCode);
m_ctrList.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);
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);
}
voidCNewBookDlg:
:
OnButtonAll()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
m_ctrList.DeleteAllItems();
m_ctrList.SetRedraw(FALSE);
UpdateData(TRUE);
CStringstrSQL;
strSQL.Format("select*frombookInfo");
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
inti=0;
CStringstrTime;
while(!
m_recordset.IsEOF())
{
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);
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.GetYear(),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);
}
voidCNewBookDlg:
:
OnButtonDelete()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
inti=m_ctrList.GetSelectionMark();
if(0>i)
{
AfxMessageBox("请选择一条记录进行删除!
");
return;
}
CStringstrSQL;
strSQL.Format("select*frombookInfowherecode='%s'",m_ctrList.GetItemText(i,0));
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
AfxMessageBox("打开数据库失败!
");
return;
}
m_recordset.Delete();
m_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);
}
voidCNewBookDlg:
:
OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)
{
//TODO:
Addyourcontrolnotificationhandlercodehere
inti=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.GetItemText(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
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CBorrowSearchDlgdialog
CBorrowSearchDlg:
:
CBorrowSearchDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CBorrowSearchDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CBorrowSearchDlg)
m_strBookCode=_T("");
m_strReaderCode=_T("");
//}}AFX_DATA_INIT
}
voidCBorrowSearchDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBorrowSearchDlg)
DDX_Control(pDX,IDC_LIST1,m_ctrList);
DDX_Text(pDX,IDC_EDIT_BOOKCODE,m_strBookCode);
DDX_Text(pDX,IDC_EDIT_READERCODE,m_strReaderCode);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBorrowSearchDlg,CDialog)
//{{AFX_MSG_MAP(CBorrowSearchDlg)
ON_BN_CLICKED(IDC_BUTTON_SEARCH,OnButtonSearch)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CBorrowSearchDlgmessagehandlers
BOOLCBorrowSearchDlg:
:
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.InsertColumn(6,"借出日期");
m_ctrList.InsertColumn(7,"归还日期");
m_ctrList.InsertColumn(8,"操作员");
m_ctrList.SetColumnWidth(0,60);
m_ctrList.SetC