数据库设计报告图书管理系统Word文档下载推荐.docx
- 文档编号:22064189
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:29
- 大小:308.21KB
数据库设计报告图书管理系统Word文档下载推荐.docx
《数据库设计报告图书管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据库设计报告图书管理系统Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
5.分析关系模式各属于第几范式,阐明理由;
图书属于BCNF,因为其中的每个决定因素都包含了码
借书证属于BCNF,因为其中的每个决定因素都包含了码
管理员属于BCNF,因为其中的每个决定因素都包含了码
借阅属于BCNF,因为其中的每个决定因素都包含了码
预约属于BCNF,因为其中的每个决定因素都包含了码
6.开发环境:
VC++,SQLServer通过ODBC连接
二、详细设计
1、数据库设计;
建立admin表
CREATETABLE[dbo].[admin](
[admin_id][nchar](10)NOTNULL,
[admin_password][nchar](10)NULL,
[admin_name][nchar](10)NOTNULL,
[admin_contact][nchar](15)NULL,
PRIMARYKEYCLUSTERED
([admin_id]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
建立book表
CREATETABLE[dbo].[book](
[book_ISBN][nchar](10)NOTNULL,
[book_subject][nchar](10)NULL,
[book_title][nchar](10)NULL,
[book_press][nchar](10)NULL,
[book_year][int]NULL,
[book_authors][nchar](10)NULL,
[book_price][numeric](5,2)NULL,
[book_total_num][int]NULL,
[book_stocked_num][int]NULL,
([book_ISBN]ASC
建立card表
CREATETABLE[dbo].[card](
[card_num][nchar](10)NOTNULL,
[name][nchar](10)NOTNULL,
[unit][nchar](15)NULL,
[rank][nchar](10)NULL,
([card_num]ASC
)
ALTERTABLE[dbo].[card]WITHCHECKADDCONSTRAINT[c1]CHECK(([rank]='
教师'
OR[rank]='
研究生'
本科生'
))
ALTERTABLE[dbo].[card]CHECKCONSTRAINT[c1]
建立borrow表
CREATETABLE[dbo].[borrow](
[borrow_date][date]NULL,
[return_date][date]NULL,
[admin_id][nchar](10)NULL,
FOREIGNKEY([admin_id])REFERENCES[dbo].[admin]([admin_id])
FOREIGNKEY([book_ISBN])REFERENCES[dbo].[book]([book_ISBN])
FOREIGNKEY([card_num])REFERENCES[dbo].[card]([card_num])
)
建立order表
CREATETABLE[dbo].[order](
[order_date][date]NULL,
[admin_id][nchar](10)NULL,
([card_num]ASC,[book_ISBN]ASC
2、图书管理系统实现与截图
窗口界面
借书模块部分程序
voidCBookBorrowDlg:
:
OnOK()
{//将编辑框中的数据更新到成员变量m_strCardNum和m_strBookNum中
UpdateData();
if(m_strCardNum=="
"
){AfxMessageBox("
请输入借书证号!
);
return;
}
if(m_strBookNum=="
){
AfxMessageBox("
请输入索书号!
return;
//如果卡号不存在,则拒绝借书
if(!
IsValidCard(m_strCardNum)){
//CDialog:
OnOK();
//调用基类CDialog的OnOK函数来关闭对话框
读者未找到您的注册信息!
return;
//如果有书到期,也返回
if(AnyBookExpired(m_strCardNum)){
return;
//如果要借的书没有库存,也返回
AllowedToBorrow(m_strBookNum)){
//以上都没有问题,才能外借图书
if(BorrowBook(m_strCardNum,m_strBookNum)){
借书成功"
else{
借书失败"
CDialog:
}
boolCBookBorrowDlg:
IsValidCard(constCString&
card_num)
{
//检查card表是否打开
m_cardSet.IsOpen()){
m_cardSet.Open();
//指定查询条件card_num为用户卡号
m_cardSet.m_strFilter.Format("
card_num='
%s'
card_num);
m_cardSet.Requery();
//结果集如果为空则表示卡号不存在
if(m_cardSet.IsEOF()){
该卡号不存在"
returnfalse;
returntrue;
AnyBookExpired(constCString&
{
if(!
m_borrowSet.IsOpen()){
m_borrowSet.Open();
}
m_borrowSet.m_strFilter.Format("
andreturn_dateisnull"
m_borrowSet.Requery();
CTimetoday=CTime:
GetCurrentTime();
//得到今天的日期
CTimeSpandiffDays;
while(!
m_borrowSet.IsEOF())
{
diffDays=today-m_borrowSet.m_borrow_date;
//计算已借图书的时间
if(diffDays.GetDays()>
30){
您有书过期了,请尽快还书!
//超过30天,则报错返回
returntrue;
m_borrowSet.MoveNext();
AllowedToBorrow(constCString&
book_ISBN)
{if(!
m_bookSet.IsOpen()){
m_bookSet.Open();
//指定查询条件book_ISBN
m_bookSet.m_strFilter.Format("
book_ISBN='
book_ISBN);
m_bookSet.Requery();
//结果集为空则表明该书不存在
if(m_bookSet.IsEOF()){
该书不存在"
if(m_bookSet.m_book_stocked_num==0){
该书已经被借空!
BorrowBook(constCString&
card_num,constCString&
m_bookSet.IsOpen()){
//将book表中书的库存-1
m_bookSet.Edit();
m_bookSet.m_book_stocked_num=m_bookSet.m_book_stocked_num-1;
m_bookSet.Update();
//在borrow表中增加一条借书记录
m_borrowSet.IsOpen()){
m_borrowSet.Open();
m_borrowSet.AddNew();
m_borrowSet.m_card_num=card_num;
m_borrowSet.m_book_ISBN=book_ISBN;
m_borrowSet.m_borrow_date=CTime:
m_borrowSet.m_admin_id=admin;
m_borrowSet.Update();
m_borrowSet.Requery();
OnBorrowlist()
请输入卡号!
cardnum=m_strCardNum;
CBorrowListDlgborrowlist;
//构造“借书记录”对话框
borrowlist.DoModal();
//显示“借书记录”对话框
批量入库部分代码
voidCBookEnrollDlg:
inti;
stringstr;
strings="
;
chartmp[100];
CStringm_book_ISBN;
CStringm_book_subject;
CStringm_book_title;
CStringm_book_press;
intm_book_year;
CStringm_book_authors;
doublem_book_price;
intm_book_total_num;
ifstreamfile;
if(m_address.IsEmpty())
{AfxMessageBox("
不能为空"
else
{file.open(m_address);
//打开文件
file)
{AfxMessageBox("
文件打开失败!
if(file){while(getline(file,str,'
\n'
//用getline函数读取文件中的每一行
{intk=0;
intm=0;
intj=0;
inttotal=0;
inta;
intb=0;
doubleprice=0;
for(i=0;
i<
=7;
i++)
{a=0;
while(str[b]!
='
'
&
str[b]){
//读取每一行中的内容,以遇到'
为结束
tmp[a]=str[b];
b++;
a++;
}
b++;
tmp[a]='
\0'
s=tmp;
//调用c_str()函数把string类型转换为cstring类型
switch(i){
case0:
m_book_ISBN=s.c_str();
break;
case1:
m_book_subject=s.c_str();
break;
case2:
m_book_title=s.c_str();
case3:
m_book_press=s.c_str();
//将输入的字符串对应转化为对应的年份
case4:
intyear;
year=(tmp[0]-48)*1000+(tmp[1]-48)*100+(tmp[2]-48)*10+(tmp[3]-48);
m_book_year=year;
case5:
m_book_authors=s.c_str();
//将输入的字符串转化为对应的价格
case6:
doublepoint;
point=((double)tmp[a-1]-48)/100+((double)tmp[a-2]-48)/10;
for(k=0;
k<
a-3;
k++)
price=price*10+(tmp[k]-48);
price+=point;
m_book_price=price;
break;
//将输入的字符串转化为对应的库存数量
case7:
for(m=0;
m<
a;
m++)
total=total*10+(tmp[m]-48);
m_book_total_num=total;
}}
//检测book表是否打开
if(!
m_bookSet.Open();
//如果该书已经存在,在原来的库存量基础上加上入库的数量即可
m_bookSet.m_strFilter.Format("
m_book_ISBN);
m_bookSet.Requery();
m_bookSet.IsEOF()){
m_bookSet.Edit();
m_bookSet.m_book_total_num+=m_book_total_num;
m_bookSet.m_book_stocked_num+=m_book_total_num;
m_bookSet.Update();
continue;
//如果该书不存在
m_bookSet.AddNew();
m_bookSet.m_book_ISBN=m_book_ISBN;
m_bookSet.m_book_subject=m_book_subject;
m_bookSet.m_book_title=m_book_title;
m_bookSet.m_book_press=m_book_press;
m_bookSet.m_book_year=m_book_year;
m_bookSet.m_book_authors=m_book_authors;
m_bookSet.m_book_price=m_book_price;
m_bookSet.m_book_total_num=m_book_total_num;
m_bookSet.m_book_stocked_num=m_book_total_num;
m_bookSet.Update();
AfxMessageBox("
入库成功"
CDialog:
单本入库部分代码
voidCBookSingleEnrollDlg:
CStringstr="
//检测book表是否打开
//输入不能为空
if(m_book_ISBN.IsEmpty()||m_book_subject.IsEmpty()||m_book_title.IsEmpty()||m_book_press.IsEmpty()||m_book_year==0||m_book_authors.IsEmpty()||m_book_price==0||m_book_total_num==0){
请输入完整信息"
book_ISBN='
//如果该书已经存在
m_bookSet.Edit();
m_bookSet.m_book_total_num+=m_book_total_num;
m_bookSet.m_book_stocked_num+=m_book_total_num;
m_bookSet.Update();
入库成功!
//如果该书不存在
m_bookSet.AddNew();
m_bookSet.m_book_ISBN=m_book_ISBN;
m_bookSet.m_book_subject=m_book_subject;
m_bookSet.m_book_title=m_book_title;
m_bookSet.m_book_press=m_book_press;
m_bookSet.m_book_year=m_book_year;
m_bookSet.m_book_authors=m_book_authors;
m_bookSet.m_boo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 设计 报告 图书 管理 系统