c++图书管理系统范文.docx
《c++图书管理系统范文.docx》由会员分享,可在线阅读,更多相关《c++图书管理系统范文.docx(43页珍藏版)》请在冰豆网上搜索。
![c++图书管理系统范文.docx](https://file1.bdocx.com/fileroot1/2022-11/25/1b3f853f-a38d-4054-a4df-01b6900391b2/1b3f853f-a38d-4054-a4df-01b6900391b21.gif)
c++图书管理系统范文
目录
1概述1
2需求分析1
3系统设计2
3.1总体设计框架2
3.2系统流程分析2
3.3数据库设计3
4系统实现过程4
4.1连接数据库4
4.2用户进入界面4
4.3系统的主界面6
4.4书库管理8
4.5借阅证管理24
4.6系统管理28
5总结30
6参考文献31
1概述
随着人们知识层次的提高图书馆成为日常生活中不可缺少的一部分。
而图书馆的存书量和业务量庞大,仅仅靠传统的记账式管理式不可行的。
图书馆管理系统应运而生,逐渐成为信息化建设的重要组成部分。
图书馆管理系统为学校或者社会型图书馆的管理员提供所有借阅者的详细信息,以及馆内库存的详细情况,对借书和还书两大功能进行合理操纵并登记。
本系统主要包括以下几个主要功能
(1)进入系统前需要身份验证、用户名、密码,输入正确后方可进入。
(2)用户可以根据需要进行书库管理。
(3)用户可以进行借书证的办理、查询、挂失等操作。
(4)用户可以添加账号和修改密码和退出系统等功能。
2需求分析
2.1数据库需求分析
通过对图书馆管理系统功能的分析和实际调查情况,图书馆管理系统需要包括以下数据库信息。
(1)管理员基本信息:
包括图书ID、密码等。
(2)图书信息:
包括图书ID、图书名称、作者、出版社、单价、入库时间、图书总量、现存总量。
(3)借书信息:
包括借书号、借阅卡号、所借图书的名字、借书日期。
(4)借阅卡信息:
包括借阅卡号、读者姓名、性别、出生日期、家庭住址、身份证号码、电话号码、现借书总数。
(5)罚金管理:
包括罚金号、借阅证号、图书号、借出时间、返还时间、罚金。
2.2系统功能分析
本系统功能模块主要包括以下几部分:
身份验证、书库管理、借阅证管理、系统管理和退出。
(1)身份验证:
提供系统的访问控制功能。
(2)书库管理:
包括新书登记、借书、还书、书籍挂失、图书信息查询、借书信息查询等功能。
(3)借阅证管理:
其提供办理借阅证、借阅证信息查询、借阅证挂失功能。
(4)系统管理:
包括添加账号、修改密码和退出系统等功能。
(5)系统管理:
其功能是为系统的使用者提供密码管理和数据备份、恢复管理。
3系统设计
3.1总体设计框架
系统总体设计图如下:
图1图书馆管理系统总计设计图
3.2系统流程分析
在系统运行时的动态模型应该由系统的流程决定。
当用户登录系统后,可以根据拥有的权限来进行书库的管理、借阅证的管理等操作,具体的流程如图2所示。
图2图书馆管理系统流程图
3.3数据库设计
基本表的设计如下:
(1)管理员基本信息表
管理员基本信息表(Admin_Info)包含了图书馆管理员的基本信息,其结构如表1所示。
表1管理员基本信息表
字段名称
数据类型
可否为空
约束条件
说明
WorkID
INTEGER
NOTNULL
主键
地方ID值
User_name
VARCHAR2(24)
NOTNULL
无
姓名
Password
VARCHAR2(24)
NOTNULL
无
密码
(2)图书信息表
图书信息表(Book_Info)包含了图书馆所有图书的基本信息,用来方便读者查询和借阅,其结构如表2所示。
表2:
图书信息表
字段名称
数据类型
可否为空
约束条件
说明
Book_ID
VARCHAR(50)
NOTNULL
主键
书籍ID值
Book_Name
VARCHAR(50)
NOTNULL
无
书名
Writer
VARCHAR(50)
NOTNULL
无
作者
Press
VARCHAR(50)
NOTNULL
无
出版社
Price
float
NOTNULL
无
单价
InLibrary_Data
DATA
NOTNULL
无
入库时间
Total_Amout
INTEGER
NOTNULL
无
总量
Now_Amount
INTEGER
NOTNULL
无
现存量
(3)借阅卡信息表
借阅卡信息表(Proof_Info)包含了所有读者的借阅卡信息,用来方便读者借阅和管理员,其结构如表3所示。
表3:
借阅卡信息表
字段名称
数据类型
可否为空
约束条件
说明
Proof_ID
VARCHAR(50)
NOTNULL
主键
借阅卡ID
Name
VARCHAR(50)
NOTNULL
无
姓名
Sex
VARCHAR(50)
NOTNULL
无
性别
Birth_Time
DATA
NOTNULL
无
出生日期
Address
VARCHAR(50)
NOTNULL
无
地址
ID_Number
VARCHAR(50)
NOTNULL
无
身份证号码
Tel_Number
VARCHAR(50)
NOTNULL
无
电话号码
Now_Borrow_Amount
INTEGER
NOTNULL
无
现借书总量
(4)借书信息表
借书信息表(Borrow_Info)包含了所有图书借阅的信息,用来方便管理员管理图书馆的图书出借情况,其结构如表4所示。
表4:
借书信息表
字段名称
数据类型
可否为空
约束条件
说明
BorrowID
INTEGER
NOTNULL
主键
借书ID
Proof_ID
VARCHAR(50)
NULL
外键(Proof_Info)
借书卡ID
Book_ID
VARCHAR(50)
NULL
外键(Proof_Info)
书籍ID
Borrow_Date
DATA
NULL
无
产品备注
(5)罚单信息表
罚单信息表(Punish_Info)包含了所有读者的罚金信息,用来方便管理员管理图书过期的情况,其结构表如表5所示。
表5罚单信息表
字段名称
数据类型
可否为空
约束条件
说明
Puni_ID
INTEGER
NOTNULL
主键
罚单ID
Proof_ID
VARCHAR(50)
NOTNULL
外键(Proof_Info)
借书卡ID
Book_ID
VARCHAR(50)
NOTNULL
外键(Proof_Info)
图书ID
Borrow_Date
DATA
NOTNULL
无
借出日期
Return_Date
DATA
NOTNULL
无
返还日期
Puni_Money
INTEGER)
NOTNULL
无
罚金
4系统实现过程
打开VisualC++6.0,新建工程名为“Library”的基于对话框的MFCAppWizard[exe]。
VisualC++6.0会自动生成一些类、文件和主题框架。
为了实现系统与数据库的连接,VisualC++6.0有支持ODBC的文件,只需在“stdafx.h”中添加#include"afxdb.h"即可实现和数据库的连接。
4.1连接数据库
当函数启动后,就要连接数据库,需要3个参数:
ODBC数据源名称、数据库用户名称、数据库用户密码。
登录到主界面之前,首先调用管理员登录模块。
从数据库中读入Admin_Info表中的内容,判断用户输入的用户名和密码是否正确。
4.2用户进入界面
功能:
当使用者使用此系统时,只有用户名和密码都正确时,才可以通过进入界面进入此系统的主界面。
其窗体如下:
图3登录界面
主要代码如下。
voidCLibraryDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
UpdateData();
if(m_strUsername.IsEmpty())
{
MessageBox("Pleaseinputyourusername!
","登录系统",MB_OK|MB_ICONEXCLAMATION);
m_strUsername.Empty();
UpdateData(FALSE);
return;
}
if(!
m_database.IsOpen())
{
//连接数据源
if(!
m_database.Open(_T("Library")))
{
MessageBox("连接数据库失败!
","图书管理系统",MB_OK|MB_ICONINFORMATION);
return;
}
}
CLoginSet*m_pLogset=newCLoginSet(&m_database);
//编写SQL语句
CStringstrSQL;
strSQL.Format("select*fromAdmin_InfowhereUser_Name='%s'ANDPassword='%s'",m_strUsername,m_strPassword);
//编写SQL语句结束
m_pLogset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pLogset->GetRecordCount()==0)
{
if(count<5)
{
MessageBox("登录失败!
","图书管理系统",MB_OK|MB_ICONERROR);
count++;
m_strPassword.Empty();
m_strUsername.Empty();
UpdateData(FALSE);
}
else
{
m_database.Close();
MessageBox("您登录失败超过5次,请与管理员联系!
","图书管理系统");
OnOK();
}
}
else
{
m_database.Close();
*b_Login=0;
CDialog:
:
OnOK();
}
}
4.3系统的主界面
功能:
本模块包含了系统的主对话框界面,其中包括书库管理、借阅证管理和系统管理3个部分。
其窗体如:
图4系统主界面
主要代码如下。
voidCLibDBSDlg:
:
OnOK()
{
//TODO:
Addextravalidationhere
CDialog:
:
OnOK();
}
voidCLibDBSDlg:
:
OnButtonNewBook()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CNewBooksDlgNewDlg;
NewDlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonBorrow()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CBorrowDlgdlg;
dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonBookLost()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CBookLostDlgm_dlg;
m_dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonCheckBooks()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CCheckBooksDlgdlg;
dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonCheckBorrow()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CCheckBorrowDlgdlg;
dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonMakeProof()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CNewProofDlgm_dlg;
m_dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonCheckProof()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CCheckProofDlgm_dlg;
m_dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonProofLost()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CProofLostDlgm_dlg;
m_dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonModPasswd()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CChangePasswordDlgm_dlg;
m_dlg.DoModal();
}
voidCLibDBSDlg:
:
OnButtonAddUser()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CAddUserDlgm_dlg;
m_dlg.DoModal();
}
4.4书库管理
书库管理包括新书登记、借书/还书、书籍挂失、图书信息查询和借书信息查询5个部分,下面分别介绍这5部分的功能以及实现过程。
4.4.1新书登记
新书登记管理包括了新书入库、查询图书和显示所有图书的功能。
为了方便添加图书和查询所有图书的基本信息,可以创建一个对话框,界面如图5所示。
图5新书登记界面
(1)入库
入库是图书馆管理系统中最重要的功能之一,入库的实现过程是首先要输入书籍的各种信息,包括书的书号、书名、作者、出版社、价钱、总量、现存量等。
然后判断图书馆中是否存在这种图书,如果存在,那么只是简单的把库存的数量加上新加入的数量,如果不存在,那么就要新建记录。
其函数CNewBooksDlg:
:
OnButtonIn(),代码如下。
voidCNewBooksDlg:
:
OnButtonIn()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
if(m_strBookID.Compare("")==0)
{
MessageBox("请正确填写要求的数据","新书入库登记");
return;
}
if(!
m_database.IsOpen())
{
if(!
m_database.Open(_T("Library")))
{
MessageBox("Cannotaccessdatabase!
","新书登记");
return;
}
}
CBookSet*m_pset=newCBookSet(&m_database);
//判断书库中是否有该书,进行相应操作
//有,把数量加到库中
CStringstrSQL;
strSQL.Format("select*fromBook_InfowhereBook_ID='%s'",m_strBookID);
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pset->GetRecordCount()!
=0)
{
m_pset->Edit();
m_pset->m_Total_Amount=m_pset->m_Total_Amount+m_lTotal;
m_pset->m_Now_Amount=m_pset->m_Now_Amount+m_lNow;
m_pset->Update();
m_pset->Requery();
m_pset->Close();
m_database.Close();
MessageBox("Addingnewbookssuccessfully!
","新书入库登记");
OnButtonCheckBooks();
return;
}
m_pset->Close();
if(m_strBookID==""||m_strBookName==""||m_strWriter==""
||m_strPress==""||m_dPrice==0||m_lTotal==0
||m_lNow==0)
{
MessageBox("请正确填写要求的数据!
","新书登记入库");
m_database.Close();
return;
}
strSQL.Format("select*fromBook_Info");
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
//if(m_pset->GetRecordCount()==0)
//{
//MessageBox("Therearenotanybookinformation!
","新书登记");
//}
m_pset->AddNew();
m_pset->SetFieldNull(&(m_pset->m_Book_ID),FALSE);
m_pset->m_Book_ID=m_strBookID;
m_pset->SetFieldNull(&(m_pset->m_Book_Name),FALSE);
m_pset->m_Book_Name=m_strBookName;
m_pset->SetFieldNull(&(m_pset->m_Writer),FALSE);
m_pset->m_Writer=m_strWriter;
m_pset->SetFieldNull(&(m_pset->m_Press),FALSE);
m_pset->m_Press=m_strPress;
m_pset->SetFieldNull(&(m_pset->m_Price),FALSE);
m_pset->m_Price=m_dPrice;
m_pset->SetFieldNull(&(m_pset->m_Total_Amount),FALSE);
m_pset->m_Total_Amount=m_lTotal;
m_pset->SetFieldNull(&(m_pset->m_Now_Amount),FALSE);
m_pset->m_Now_Amount=m_lNow;
CTimecurTime=CTime:
:
GetCurrentTime();
m_pset->SetFieldNull(&(m_pset->m_InLibrary_Date),FALSE);
m_pset->m_InLibrary_Date=curTime;
m_pset->Update();
m_pset->Requery();
m_pset->Close();
m_database.Close();
MessageBox("Addingnewbookssuccessfully!
","新书入库登记");
OnButtonCheckBooks();
m_strBookID.Empty();
m_strBookName.Empty();
m_strPress.Empty();
m_strWriter.Empty();
m_lNow=0;
m_lTotal=0;
m_dPrice=0.0;
UpdateData(FALSE);
return;
}
(2)查询
查询也是图书馆管理系统中一个很重要的功能,在很多的地方会用到,也是显示数据的一个功能函数。
实现的过程也是首先检查数据库是否打开,以及要查询的书号是否为空。
函数代码如下。
voidCNewBooksDlg:
:
OnButtonCheckBooks()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData();
if(m_strBookID=="")
{
MessageBox("请正确填写信息,(书号?
)","新书登记");
return;
}
if(!
m_database.IsOpen())
{
if(!
m_database.Open(_T("Library")))
{
MessageBox("Cannotaccessthedatabase!
","新书登记");
return;
}
}
CBookSet*m_pset=newCBookSet(&m_database);
CStringstrSQL;
strSQL.Format("select*fromBook_InfowhereBook_ID='%s'",m_strBookID);
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
if(m_pset->GetRecordCount()==0)
{
MessageBox("Nothisbookinthedatabase!
","新书登记");
m_database.Close();
return;
}
//处理表格
m_ctrList.DeleteAllItems();
m_pset->MoveFirst();
charbuf[50];
CDBVariantvarValue;
inti=0;
CStringstrBookName;
while(!
m_pset->IsEOF())
{
m_ctrList.InsertItem(i,buf);
m_ctrList.SetItemText(i,0,m_strBookID);
m_pset->GetFieldValue(1,strBookName);
m_ctrList.SetItemText(i,1,strBookName);
m_pset