VC++图书管理系统.docx
《VC++图书管理系统.docx》由会员分享,可在线阅读,更多相关《VC++图书管理系统.docx(91页珍藏版)》请在冰点文库上搜索。
VC++图书管理系统
C++程序设计课程设计报告
(2011--2012年度第2学期)
图书管理系统的设计
专业
学生姓名
班级
学号
指导教师
完成日期
2012年6月22日
学生成绩管理系统的设计
1概述
1.1课程设计目的
1、巩固并加深学生对C++语言程序设计知识的理解;
2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;
3、进一步掌握和应用VC++6.0集成开发环境;
4、提高运用C++语言解决实际问题的能力;
5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统;
6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。
1.2课程设计内容
课题名称:
图书管理系统的开发
说明:
实现简单图书信息的管理。
要求:
1)权限管理:
增加或删除系统操作人员,并指定操作人员的权限;
2)读者管理:
设置不同的读者身份,并对读者相关信息进行管理,包括建立新的读者,编辑已有的读者信息和删除读者信息的操作;
3)图书类别的管理:
对图书的类别进行管理;
4)图书入库管理:
录入新的图书信息;
5)图书信息修改管理:
对已有的图书信息进行修改,包括删除指定图书操作;
6)图书借还管理:
实现对图书的借出和归还的管理;
7)图书查询管理:
通过各种查询方式可以来进行查询,比如书号,书名,作者等;
8)图书超期管理:
对超期的情况能自动给出提示信息。
2系统需求分析
2.1系统目标
实现简单图书信息的管理。
如:
登陆权限管理、读者管理、图书信息(入库、修改、借还、查询、超期)管理、罚金管理
2.2主体功能
1)权限管理:
增加或删除系统操作人员,并指定操作人员的权限;
2)读者管理:
设置不同的读者身份,并对读者相关信息进行管理,包括建立新的读者,编辑已有的读者信息和删除读者信息的操作;
3)图书类别的管理:
对图书的类别进行管理;
4)图书入库管理:
录入新的图书信息;
5)图书信息修改管理:
对已有的图书信息进行修改,包括删除指定图书操作;
6)图书借还管理:
实现对图书的借出和归还的管理;
7)图书查询管理:
通过各种查询方式可以来进行查询,比如书号,书名,作者等;
8)图书超期管理:
对超期的情况能自动给出提示信息。
2.3开发环境
VC++6.0集成开发环境、ACCESS2003数据库
3系统概要设计
3.1系统的功能模块划分
整个图书管理系统分为四个模块。
分别为图书管理模块、借阅管理模块、读者管理模块和系统管理模块。
3.2系统流程图
表BOOK
4系统详细设计
用access2003建立名为“Library”的数据库,创建4个表,分别为:
BOOK,CLERK,READER,BORROW和FINE。
利用ODBC数据源管理器配置与数据库对应的数据源
建立名为“Library”的MFC单文档应用程序向导
在名为StdAfx.h的头文件中添加#include
4.1系统登录模块设计
添加系统登录对话框,属性设置为
控件类型
ID
属性设置
Button
IDC_CONFIRM
Caption设为“登录[&L]”
Button
IDC_CANCEL
Caption设为“取消[&C]”
StaticText
默认
Caption设为“请输入用户名和密码”
StaticText
默认
Caption设为“用户名”
StaticText
默认
Caption设为“密码”
EditBox
IDC_LOGIN_NAME
默认
EditBox
IDC_LOGIN_PASSWORD
password
双击对话框打开ClassWizard对话框,为IDD_LOGIN添加CLoginMDlg类,按下表为该类添加成员变量。
控件ID
变量名
数据类型
IDC_LOGIN_NAME
m_strName
CString
IDC_LOGIN_PASSWORD
m_strPassword
CString
创建一个新类,名为CClerkDataSet,在BaseClass中选择CRecordset
添加消息映射
最后输入按键的执行代码。
4.2系统主界面设计
其中信息可以查看管理员信息,图书信息,读者信息;日常工作中包含图书借阅,图书归还,缴纳罚款;查询中包含读者查询;帮助中可以查看系统帮助
4.3图书信息管理模块设计
添加书籍信息对话框,属性设置为IDD_BOOK_MAINTAIN,微软雅黑,10号字体
控件类型
ID
属性设置
Button
IDC_FIRST
标题设为“第一条[&F]”
Button
IDC_PRIOR
标题设为“上一条[&P]”
Button
IDC_NEXT
标题设为“下一条[&N]”
Button
IDC_LAST
标题设为“末一条[&L]”
Button
IDC_NEW
标题设为“新增[&N]”
Button
IDC_ENQUERY
标题设为“查询[&Q]”
Button
IDC_EDIT
标题设为“修改[&E]”
Button
IDC_DELETE
标题设为“删除[&D]”
Button
IDC_SAVE
标题设为“保存[&S]”
Button
IDC_CANCEL_REC
标题设为“取消[&C]”
Button
IDC_EXIT
标题设为“推出[&X]”
StaticText
默认
标题设为“书名”
StaticText
默认
标题设为“书籍条码”
StaticText
默认
标题设为“书名”
StaticText
默认
标题设为“书籍条码”
StaticText
默认
标题设为“作者”
StaticText
默认
标题设为“出版社”
StaticText
默认
标题设为“出版日期”
StaticText
默认
标题设为“尚能借出”
EditBox
IDC_BOOKNAME_Q
默认
EditBox
IDC_BOOKID_Q
默认
EditBox
IDC_BOOKNAME
默认
EditBox
IDC_BOOKID
默认
EditBox
IDC_AUTHOR
默认
EditBox
IDC_PRESS
默认
EditBox
IDC_PRESSDATE
默认
EditBox
IDC_FLAG_BORROW
默认
为IDD_BOOK_MAINTAIN添加成员变量
创建一个新类,名为CBookDataSet,方法步骤同CClerkDataSet,添加消息映射
最后输入按钮代码
4.4管理员、读者信息管理模块设计
管理员信息管理
添加管理员信息对话框,属性设置为IDD_CLERK_MAINTAIN,微软雅黑,10号
控件类型
ID
属性设置
Button
IDC_FIRST
标题设为“第一条[&F]”
Button
IDC_PRIOR
标题设为“上一条[&P]”
Button
IDC_NEXT
标题设为“下一条[&N]”
Button
IDC_LAST
标题设为“末一条[&L]”
Button
IDC_NEW
标题设为“新增[&N]”
Button
IDC_ENQUERY
标题设为“查询[&Q]”
Button
IDC_EDIT
标题设为“修改[&E]”
Button
IDC_DELETE
标题设为“删除[&D]”
Button
IDC_SAVE
标题设为“保存[&S]”
Button
IDC_CANCEL_REC
标题设为“取消[&C]”
Button
IDC_EXIT
标题设为“退出[&X]”
StaticText
默认
标题设为“用户姓名”
StaticText
默认
标题设为“用户条码”
StaticText
默认
标题设为“用户姓名”
StaticText
默认
标题设为“用户条码”
StaticText
默认
标题设为“身份证号”
StaticText
默认
标题设为“密码”
StaticText
默认
标题设为“职位”
EditBox
IDC_USERNAME_Q
默认
EditBox
IDC_USERID_Q
默认
EditBox
IDC_USERNAME
默认
EditBox
IDC_USERID
默认
EditBox
IDC_IDCARD
默认
EditBox
IDC_PASSWORD
默认
DropList
IDC_POSITION
默认
其中职位有
为IDD_CLERK_MAINTAIN添加成员变量
建立新类CClerkMDlg,按图书信息模块设计步骤做相似操作,添加消息映射
最后输入按钮代码
读者信息管理
添加读者信息对话框,属性设置为IDD_READER_MAINTAIN,微软雅黑,10号
控件类型
ID
属性设置
Button
IDC_FIRST
标题设为“第一条[&F]”
Button
IDC_PRIOR
标题设为“上一条[&P]”
Button
IDC_NEXT
标题设为“下一条[&N]”
Button
IDC_LAST
标题设为“末一条[&L]”
Button
IDC_NEW
标题设为“新增[&N]”
Button
IDC_ENQUERY
标题设为“查询[&Q]”
Button
IDC_EDIT
标题设为“修改[&E]”
Button
IDC_DELETE
标题设为“删除[&D]”
Button
IDC_SAVE
标题设为“保存[&S]”
Button
IDC_CANCEL_REC
标题设为“取消[&C]”
Button
IDC_EXIT
标题设为“推出[&X]”
StaticText
默认
标题设为“读者姓名”
StaticText
默认
标题设为“读者条码”
StaticText
默认
标题设为“读者姓名”
StaticText
默认
标题设为“读者条码”
StaticText
默认
标题设为“身份证号”
EditBox
IDC_READERNAME_FOR_Q
默认
EditBox
IDC_READERID_FOR_Q
默认
EditBox
IDC_READERNAME
默认
EditBox
IDC_READERID
默认
EditBox
IDC_IDCARD
默认
为IDD_READER_MAINTAIN添加消息函数
建立新类CReaderDataSet,按上述步骤做相似操作,添加消息映射
最后输入按钮代码
4.5借书还书管理模块设计
借书管理
添加图书借阅对话框,属性设置为IDD_LENDOUT,微软雅黑,10号字体
控件类型
ID
属性设置
Button
IDC_CONFIRM
Caption设为“确定[&O]”
Button
IDC_CANCEL
Caption设为“取消[&C]”
StaticText
默认
Caption设为“读者编码”
StaticText
默认
Caption设为“书籍编码”
EditBox
IDC_READER_ID
默认
EditBox
IDC_BOOK_ID
默认
为IDD_LENDOUT添加成员变量
建立新类LendOutDlg,按上述步骤做相似操作,添加消息响应
最后输入按钮代码
还书管理
添加图书归还对话框,属性设置为IDD_ReturnBook,微软雅黑,10号
控件类型
ID
属性设置
Button
IDC_CANCEL
标题设为“退出[&X]”
StaticText
默认
标题设为“图书代码”
StaticText
默认
标题设为“读者姓名”
StaticText
默认
标题设为“借书日期”
StaticText
默认
标题设为“还书日期”
StaticText
默认
标题设为“超期天数”
EditBox
IDC_EDITBook_ID
默认
EditBox
IDC_EDITReaderName
默认
EditBox
IDC_EDITBorrowDate
默认
EditBox
IDC_EDITReturnDate
默认
EditBox
IDC_EDITDays
默认
为IDD_ReturnBook添加成员变量
建立新类CReturnBookDlg,按上述步骤做相似操作,添加消息映射
最后输入代码
4.6借书、罚金查询查询模块设计
借书查询
添加借书查询对话框,属性设置为IDD_DLGREADERQRY,微软雅黑,10号
控件类型
ID
属性设置
Button
IDC_QUERY
标题设为“查询[&E]”
StaticText
默认
标题设为“读者ID”
StaticText
默认
标题设为“读者姓名”
StaticText
默认
标题设为“读者身份证号”
EditBox
IDC_READERID
默认
EditBox
IDC_READERNAME
Disabled
EditBox
IDC_READERIDCARD
Disabled
ListBox
IDC_LISTBOOK
默认
为IDD_DLGREADERQRY添加成员变量
建立新类CReaderQryDlg,按上述步骤做相似操作,添加消息映射
最后输入代码
罚金查询
添加缴纳罚金对话框,属性设置为IDD_FINE,微软雅黑,10号字体
控件类型
ID
属性设置
Button
IDC_CONFIRM
Caption设为“确定[&O]”
Button
IDC_EXIT
Caption设为“取消[&C]”
StaticText
默认
Caption设为“读者条码”
StaticText
默认
Caption设为“读者姓名”
StaticText
默认
Caption设为“罚款金额”
StaticText
默认
Caption设为“过期天数”
StaticText
默认
Caption设为“日期”
EditBox
IDC_READER_ID
默认
EditBox
IDC_READER_NAME
Disabled
EditBox
IDC_AMOUNT
Disabled
EditBox
IDC_AMOUNT
Disabled
EditBox
IDC_FINE_DATE
Disabled
为IDD_FINE添加成员变量
建立新类CFineHistoryDataSet,按上述步骤做相似操作,添加消息映射
最后输入代码
5测试
5.1测试方案
采用黑盒测试方法。
对功能进行逐一测试,在输入合理及不合理的数据后测试系统的正常运作情况
测试1:
系统登录测试
测试2:
图书管理测试
测试3:
读者管理测试
测试4:
管理员管理测试
测试5:
借书测试
测试6:
还书测试
测试7:
借书、罚金查询测试
5.2测试结果
1、登录测试:
正确登录错误登录
2、图书管理测试
新增
3、读者管理测试
修改
4、管理员管理测试
查询
5、借书测试
借阅成功
借阅失败
6、还书测试
7、借书、罚金查询测试
借书查询
罚金查询
6小结
在这次的课程设计中,让我学到了很多在课堂上和书本上学不到的知识,我在这次课程设计中最大的收获有以下几方面:
一、领略到了数据库设计在计算机领域的重要性。
数据库作为一个永久存储形式在应用中发挥着重要的作用。
在数据库设计中,我明白了数据库设计不是范式越高越好的,我们要根据我们的应用来决定,一切应该以需求为首要选择。
二、对编程环境、一些控件的使用和界面的设计更加熟悉。
因为《图书管理系统》中设计到很多控件的使用,只有很好的使用这些控件才可以给出一个很好的界面呈现在用户面前。
这样更有利于数据库和用户之间的交流。
三、利用软件工程学开发系统。
虽然这个《图书管理系统》是一个小的系统,但从这个小的项目中也让我明白了数据库作为任何一个系统的后台的重要性,在开发系统设计和实现中学到和总结很多经验和教训。
参考文献
[1]谭浩强. C程序设计(第三版).北京:
清华大学出版社,2005
[2]谭浩强. C程序设计题解与上机指导(第三版).北京:
清华大学出版社,2005
附录
附录1源程序清单
附录1.1系统登录模块源程序
CLoginDlg:
:
CLoginDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CLoginDlg:
:
IDD,pParent)
{
//{{AFX_DATA_INIT(CLoginDlg)
m_strName=_T("");
m_strPassword=_T("");
//}}AFX_DATA_INIT
m_bSuccess=FALSE;
m_strUSERID=_T("");
}
voidCLoginDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLoginDlg)
DDX_Text(pDX,IDC_LOGIN_NAME,m_strName);
DDV_MaxChars(pDX,m_strName,8);
DDX_Text(pDX,IDC_LOGIN_PASSWORD,m_strPassword);
DDV_MaxChars(pDX,m_strPassword,8);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLoginDlg,CDialog)
//{{AFX_MSG_MAP(CLoginDlg)
ON_BN_CLICKED(IDC_CONFIRM,OnConfirm)
ON_BN_CLICKED(IDC_CANCEL,OnCancel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CLoginDlgmessagehandlers
voidCLoginDlg:
:
OnConfirm()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CClerkDataSetmrsDataSet;/*声明记录集*/
CStringmSqlStr;
UpdateData(TRUE);
if(m_strName.IsEmpty())/*判断用户名信息是否为空*/
{
AfxMessageBox("请输入用户名!
");
return;
}
mSqlStr="SELECT*FROMCLERKWHERENAME='";
mSqlStr=mSqlStr+m_strName;
mSqlStr=mSqlStr+"'ANDPASSWORD='";
mSqlStr=mSqlStr+m_strPassword;
mSqlStr=mSqlStr+"'";
if(!
mrsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr))
{
AfxMessageBox("CLERK表打开失败!
");
return;
}
if(!
mrsDataSet.IsEOF())
{
//Openallfunctionforuser
m_bSuccess=TRUE;
m_strUSERID=mrsDataSet.m_CLERK_ID;
CDialog:
:
OnOK();
}
else
{
AfxMessageBox("登录失败!
");
m_strUSERID=_T("");
return;
}
}
voidCLoginDlg:
:
OnCancel()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CDialog:
:
OnCancel();
}
附录1.2系统主界面源程序
voidCMainFrame:
:
OnLoginIn()
{
//TODO:
Addyourcommandhandlercodehere
CLoginDlgmDlg;
if(mDlg.DoModal()==IDOK)
{
m_bLogin=TRUE;
m_strUserName=mDlg.m_strName;
m_strUserID=mDlg.m_strUSERID;
}
else
{
m_bLogin=FALSE;
m_strUserName=_T("");
m_strUserID=_T("");
}
CStringName;
Name="当前用户:
"+m_strUserName;
m_wndStatusBar.SetPaneText(0,Name);
}
voidCMainFrame:
:
OnUpdateFine(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(m_bLogin);
}
voidCMainFrame:
:
OnUpdateBookMaintain(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(m_bLogin);
}
voidCMainFrame:
:
OnUpdateConfigMaintain(CCmdUI*pCmdUI)
{
//TODO:
AddyourcommandupdateUIhandlercodehere
pCmdUI->Enable(m_bLogin);
}
voidCMainFrame:
:
OnUpdateLendOut(CCmdUI*pCmdUI)
{