1、windows课程设计图书管理系统一、设计分析 1. 整个程序设计成以下几个大的模块:1系统管理,下属可以实现又分为:用户管理、注销/重新登录、退出系统三个功能。2.基础数据设置,下属可以实现:罚款设置、图书类别设置、读者类别设置三个功能。3.借阅管理,下属分为:借书、还书、借书查询、还书查询四个模块。4.书库管理,下属分为:新书入库、图书查询和图书挂失三个模块。5.读者管理,下属分为:读者登记、读者信息查询、读者注销三个功能。6.数据库管理,下属分为:数据库备份、数据库恢复两个模块书库管理模块在整体程程序中格的位置:图1.1 书库管理模块在整体程程序中格的位置用户管理数据库采用的是SQL S
2、erver数据库,建立用户权限表以及设备信息表,通过MFC ODBC方式访问,使用类CRecordset的函数MoveFirst()、MoveLast()、MoveNext()、MovePrev()、IsBOF()、IsEOF()对设备信息表实现遍历操作,使用类CRecordset的函数AddNew增加设备或者函数Delete删除信息。并根据用户登录情况确定用户是否可以修改设备信息,以此实现后台数据与前台界面操作的一致。在帐户被通过后,用户可以使用它来登录系统,登录时系统自动查找用户表,判断帐户是否存在,存在则提示用户登录成功,并显示可以的操作;否则,提示不存在该用户,返回登录界面,让用户重新
3、输入信息。另外,经过这个验证的过程,提醒用户牢记帐号和密码,防止他人盗窃个人信息,从而提高用户信息的安全性。进行登录操作时,访问到了用户表(User)。在用户未成功登录时,个人资料功能是被禁止的。只有成功登录以后,用户才有资格修改自己的资料,包括基本信息的修改,帐户(昵称或密码)的更新,帐号是不可以更改的,一旦服务器分配以后,始终与帐户绑定。方便管理员管理帐户,也使得系统具有一定的稳定性。该模块访问到了用户表和个人信息表。 备注:当在修改密码时,系统会确认旧密码,如果输入的旧密码错误,系统会弹出出错信息,否则才允许更新密码。并且,如果修改昵称,系统会把修改后的昵称更新到两个表中,使得数据能够保
4、持同步,方便管理员的管理和维护,提高了系统的可靠性。系统具有数据录入、数据修改、记录查询、报表打印等功能。较全面满足了材料库存管理的各项工作。该系统采用模块化原理编程,做到了模块规模适中,本身相对独立。模块化使程序结构清晰,易于设计、易于理解,提高了系统的可靠性。用户的需求具体体现在各种信息的提供、保存、更新和查询统计,这就要求数据库结构能充分满足各种信息的输出和输入。收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后面的详细设计打下基础。2.书库模块分析:书库管理需要实现三个功能,分别是新书入库、图书挂失和图书查询。模块主体设计如下: 图1.2 模块主体二、流程图(或功能
5、模块图)总程序设计框图: 图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#define new DE
6、BUG_NEW#undef THIS_FILEstatic char THIS_FILE = _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_s
7、trWriter = _T(); m_strBrief = _T(); /AFX_DATA_INITvoid 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_strBookTy
8、pe); 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_MAPBEG
9、IN_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_MAPEND_MESSAGE_MAP()/ CNewBookDlg message handle
10、rsBOOL CNewBookDlg: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.Inser
11、tColumn(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
12、(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); /初始化图书类型 CBookTypeSet 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(); r
13、eturn TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CNewBookDlg:OnButtonNew() / TODO: Add your control notification handler code here UpdateData(); if(m_strBookCode.IsEmpty() AfxMessageBox(请输入图书编号!); return; if(m_strBookType.IsEmpty
14、() AfxMessageBox(请输入图书类型!); return; if(m_strBookName.IsEmpty() AfxMessageBox(请输入图书名称!); 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
15、_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_recordse
16、t.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_reco
17、rdset.Close(); /更新列表 CString strTime; 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-
18、%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
19、);void CNewBookDlg:OnButtonAll() / TODO: Add your control notification handler code here m_ctrList.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(打开数据库失败!,数据库错误,M
20、B_OK); return ; int i=0; CString strTime; 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_pres
21、s); 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.Clo
22、se(); m_ctrList.SetRedraw(TRUE); void CNewBookDlg:OnButtonDelete() / TODO: Add your control notification handler 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
23、); 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
24、 = _T(); UpdateData(FALSE);void CNewBookDlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) / TODO: Add your control notification handler code here int i = m_ctrList.GetSelectionMark(); m_strBookType = m_ctrList.GetItemText(i,2); m_strBookCode = m_ctrList.GetItemText(i,0); m_strBookName = m_ctrList.Ge
25、tItemText(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#def
26、ine new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CBorrowSearchDlg dialogCBorrowSearchDlg:CBorrowSearchDlg(CWnd* pParent /*=NULL*/) : CDialog(CBorrowSearchDlg:IDD, pParent) /AFX_DATA_INIT(CBorrowSearchDlg) m_strBookCode = _T(); m_strReaderCode = _T(); /AFX_DATA_INITvoid CBorrow
27、SearchDlg: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_MAPBEGIN_MESSAGE_MAP(CBorrowSearchDlg, CDi
28、alog) /AFX_MSG_MAP(CBorrowSearchDlg) ON_BN_CLICKED(IDC_BUTTON_SEARCH, OnButtonSearch) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CBorrowSearchDlg 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.InsertColumn(6,借出日期); m_ctrList.InsertColumn(7,归还日期); m_ctrList.InsertColumn(8,操作员); m_ctrList.SetColumnWidth(0,60); m_ctrList.SetC
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1