数据库系统原理书店信息管理系统.docx
- 文档编号:29238235
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:18
- 大小:169.90KB
数据库系统原理书店信息管理系统.docx
《数据库系统原理书店信息管理系统.docx》由会员分享,可在线阅读,更多相关《数据库系统原理书店信息管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
数据库系统原理书店信息管理系统
Access课程设计
题目书店信息管理系统
一.题目
二.功能
三.设计
四.数据库的实现
五.数据模式
六.系统实施
七.参考文献
八.设计感想
某书店信息管理系统
一.题目:
某书店信息管理系统
二.功能:
1.通过用户登陆及身份验证确定用户对数据的操作权限。
以系统管理员身份登陆时享有对所有数据查阅及进行任意操作的权限,以普通用户登陆时只享有查阅数据的权限,且数据内容的开放程度由管理员设定。
2.对管理员,会员,普通职员及图书资料档案的管理。
3.对书店经营期间的所有支出,收入已及盈亏情况进行记录。
4.对书店经营期间各个方面的监控及实时处理。
包括供书商提供图书的价格是否合理,管理员及职员工作态度是否认真和是否出差错,顾客对书店经营的意见,哪些书销售情况好,哪些差,购买图书的数量种类,书店设施的磨损以及是否需要维修或者更换添加。
三.设计:
1.用户要求
1.会员档案
数据包括:
会员证号、姓名、性别、出生日期、身份证号、单位、通讯地址、邮政编码、联系电话、办证日期、会员期限、照片、职业等。
2.图书档案
数据包括:
书号、书名、作者、出版单位、出版日期、版次、单价、内容提要、分类号、索书号、藏书册数、每册图书馆藏注册号、所在书库、入库日期等。
3.检索系统
能根据书号、书名、作者、出版单位、内容提要关键字、分类号、索书号、每册图书馆藏注册号等进行查询。
4.进书系统
输入书号后,能根据借书号判断该书进货时间,书库中是否还有该书可卖,是否需要再进货。
5、卖书系统
对一定时间段卖出去的书做出各种统计。
2.总体功能框图:
3.数据流:
3.1档案管理子系统数据流图
3.2财务管理子系统数据流图
3.3经营管理子系统数据流图
说明:
1.收银员享有修改会员数据,销售记录数据,创建会员数据的操作权限。
2.供货商包括图书供应商,家具供应商等书店可能涉及到的物品的供应
商,不限及某一种和某一个供货商。
3.采购,财务,主管部门由书店规模决定,可能仅仅是一个人,也可能是有组织有一定成员的独立部门。
4.业务范围:
1.采购和出售各种图书,从中赢利,根据顾客需要调整购买图书的种类和数量。
2.办理会员顾客,会员购书实行折扣,根据会员累计消费情况举行会员优惠活动,吸引顾客办理会员和会员消费。
四.数据库的实现
1.
1>建立数据库ST-COURSE
2>各表的建立,如2.3物理结构的设计。
3>录入数据
2.数据表的创建和设计
使用Access数据库管理系统建立应用系统,首先需要创建一个数据库。
然后在该数据库中添加
所需的表、查询、窗体、报表、宏等对象。
3.数据库的创建
首先,使用向导设计“书店管理系统”数据库,然后才进行表的设计。
具体步骤如下:
(1)启动MicrosoftAccess2003,出现“MicrosoftAccess”数据库设计界面。
(2)单击工具栏上的新建按钮
,在Access2003窗体的右边出现“新建文件”任务窗格。
(3)在该任务窗格中选择
项,系统弹出“模板”对话,单击“常用”选项卡,然后选择其中的
模板。
(4)单击“确定”按钮,这时出现要选择数据库的保存路径的对话框。
在“文件名”右边的文本框里输入文件名为“书店管理系统”。
(5)单击“创建”按钮,就进入数据库窗口。
至此,就创建了“书店管理系统”数据库。
4.E-R图
五.数据模式
现将其中几个表的关系数据模式给出:
1.书籍信息(书籍编号,书名,作者,进货价格,进货数量,供书商编号,剩余数量)
2.供书商(供书商编号,名称,地址,联系电话)
3.会员(会员编号,姓名,性别,联系方式,会员有效期,累计消费,享有优惠)
4.数据库创建表
六.系统实施
基于MocrosoftVisualStudio的MFC平台,将数据库及MFC连接并进行相应的处理的代码如下:
(1)头文件的基本设置
#include
#include
#include
#include
#include
#include
#include
#defineCOURSE_NO15
//注意定义的大小应为数据库中定义的长度加一,CString的结束字符也算在内
#defineLEN10/////////////////变量的长度,一般属性列的长度定义都为
#defineCODE_LEN6///////////////密码的长度
BOOLFindBookDlg:
:
OnInitDialog()///初始化列表框的函数
{
CDialog:
:
OnInitDialog();
///初始化列表框
m_list.SetTextColor(RGB(0,0,0));
m_list.SetBkColor(RGB(255,255,255));
m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
m_list.InsertColumn(0,_T("书号"),LVCFMT_CENTER,100);
m_list.InsertColumn(1,_T("书名"),LVCFMT_CENTER,100);
m_list.InsertColumn(2,_T("作者"),LVCFMT_CENTER,100);
m_list.InsertColumn(3,_T("价格"),LVCFMT_CENTER,100);
m_list.InsertColumn(4,_T("所属类型"),LVCFMT_CENTER,100);
returnTRUE;
}
BEGIN_MESSAGE_MAP(FindBookDlg,CDialog)
ON_BN_CLICKED(IDC_BUTTON1,&FindBookDlg:
:
OnBnClickedButton1)
END_MESSAGE_MAP()
//FindBookDlgmessagehandlers
(2)查询信息按钮的消息响应函数(以查询书籍信息为例)。
voidFindBookDlg:
:
OnBnClickedButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
//初始化环境
ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);
ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
//建立连接
ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);
ret=SQLConnect(serverhdbc,(SQLCHAR*)"BookInfo",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"",SQL_NTS);
if(!
SQL_SUCCEEDED(ret))
return;
//初始化语句句柄
ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);
//执行SQL语句
CHARSQL[256];
if(m_BookNo!
=""&&m_BookName!
="")
{
ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"SELECT*FROMBookInfoWHEREBookNo='m_BookNo'ANDBookName='m_BookName'",SQL_NTS);
if(!
(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO))
{
AfxMessageBox(_T("你输入的书号和书名不匹配,请重新出入!
书号和书名可以任输一个!
"));
FindBookDlgdlg;
dlg.DoModal();
}
}
elseif(m_BookNo!
="")
{
sprintf(SQL,"SELECT*FROMBookInfoWHEREBookNo='%s'",m_BookNo);
ret=SQLExecDirect(serverhstmt,(SQLCHAR*)SQL,SQL_NTS);
}
elseif(m_BookName!
="")
{
sprintf(SQL,"SELECT*FROMBookInfoWHEREBookNo='%s'",m_BookName);
ret=SQLExecDirect(serverhstmt,(SQLCHAR*)SQL,SQL_NTS);
}
elseif(m_BookNo==""&&m_BookName=="")
ret=SQLExecDirect(serverhstmt,(SQLCHAR*)"SELECT*FROMBookInfo",SQL_NTS);
m_list.DeleteAllItems();
if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)
{
ret=SQLBindCol(serverhstmt,1,SQL_C_CHAR,BookNo,LEN,&cbBookNo);
ret=SQLBindCol(serverhstmt,2,SQL_C_CHAR,BookName,LEN,&cbBookName);
ret=SQLBindCol(serverhstmt,3,SQL_C_CHAR,BookAuthor,LEN,&cbBookAuthor);
ret=SQLBindCol(serverhstmt,4,SQL_C_FLOAT,&BookPrice,0/*sizeof(FLOAT)*/,&cbBookPrice);
ret=SQLBindCol(serverhstmt,5,SQL_C_CHAR,BookType,LEN,&cbBookType);
}
while((ret=SQLFetch(serverhstmt))!
=SQL_NO_DATA_FOUND)
{
CStringtemp;
temp.Format("%f",BookPrice);////////////将double型转换为字符型
if(ret==SQL_ERROR)
{
AfxMessageBox(_T("ERROR!
"));
return;
}
introw=m_list.InsertItem(0,(LPCTSTR)BookNo);
m_list.SetItemText(row,1,(LPCTSTR)BookName);
m_list.SetItemText(row,2,(LPCTSTR)BookAuthor);
m_list.SetItemText(row,3,(LPCTSTR)temp);
m_list.SetItemText(row,4,(LPCTSTR)BookType);
}
SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);
UpdateData(false);
}
(3)消费模块(以书店进货为例)这里只给出查询信息按钮的消息响应函数
voidNewBookDlg:
:
OnBnClickedOk()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
//初始化环境
ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);
ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
//建立连接
ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);
ret=SQLConnect(serverhdbc,(SQLCHAR*)"BookInfo",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"",SQL_NTS);
if(!
SQL_SUCCEEDED(ret))
return;
//初始化语句句柄
ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);
//执行SQL语句
ret=SQLPrepare(serverhstmt,(SQLCHAR*)"INSERTINTOBookInfo(BookNo,BookName,BookAuthor,BookPrice,BookType)VALUES(?
?
?
?
?
)",SQL_NTS);
if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)
{
lstrcpy((char*)BookNo,m_BookNo);
lstrcpy((char*)BookName,m_BookName);
lstrcpy((char*)BookAuthor,m_BookAuthor);
BookPrice=m_BookPrice;
lstrcpy((char*)BookType,m_BookType);
ret=SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,LEN,0,BookNo,0,&cbBookNo);ret=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,LEN,0,BookName,0,&cbBookName);
ret=SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,LEN,0,BookAuthor,0,&cbBookAuthor);
ret=SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,sizeof(FLOAT),0,&BookPrice,0,&cbBookPrice);
ret=SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,LEN,0,BookType,0,&cbBookType);
}
//处理结果集并执行预编译后的语句
ret=SQLExecute(serverhstmt);
OnOK();
}
七.参考文献
1数据库系统原理
李建中主编电子工业出版社
2数据库系统概论
杨开英主编武汉理工大学出版社
3数据库原理及应用
张冬青主编中国轻工业出版社
4数据库应用
张晓华主编重庆大学出版社
八.设计感想
刚开始设计这个数据信息管理系统时候对他的定位是一个小型的书店管理系统,其规模也就是个人开设的书店,软件开发完后使用者是店主,同时店主也是收银员,管理职员和办理会员。
店主即系统管理员。
但后来思考的深入,考虑细节的过多,不知不觉中偏离了这个定位,后面将会说明
设计功能机构框图时参考了同学的模式,将功能模块化,感觉这样功能结构直观,清晰,且实现的时候比较有层次会宜于实现,但到后来发现,其实模块及模块完全独立实现是不可能的,很多功能的实现是重叠的,例如管理档案和经营管理,经营管理中要根据雇员工作情况进行人事变动,以及图书的购进等,都需要对档案进行修改,而很多经营方案也需要根据档案提出,以及财务管理肯定及经营管理之间相互作用,总之所有功能是一个相互联系的整体,不可能是象框图那样独立的单元,但最后仍旧以模块化的框图表示了其功能,因为如果考虑到联系进行框图绘制出来的结果很复杂,在实现的时候使人思维混乱。
反而不如简单清晰的表现。
关于数据流,因为考虑到系统不大,本想画一个整体的包括所有数据流向的图,但在绘制过程中从经营者的现实角度出发,发现许多需要处理的信息,如顾客意见,职员工作表现,会员的种种权利等等,对所有信息的处理都依靠一个店主在表现时候很不明了,于是不自觉的多出了采购,主管,财务等部门,使真个设计前后有点不协调,但其实这三个部门可以是一个人,即店主;尽管我已经尽最大努力使所有信息的流向和处理过程画进了第三个数据流图中,但很多信息,如职员工作表现反映给主管,主管做决定调整人事及工资,反映给财务和人事部门,财务发放工资,人事招聘解雇员工等等,由于能力有限,无法组织一个条理清晰,线条不交叉的图形,所以不得不删除了。
对业务范围个人理解是经营范围,虽然感觉不大准确,但若做其他理解则其和功能的描述有重复,所以就按自己想法写了。
设计过程中关于书店的业务流程等都是自己根据想象凭空捏造的,现实情况将会比想象复杂的多,仅仅依靠当前的设计是不可能完成现实要求的,有时间将会对书店进行实际调查,进一步完善这份设计。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统 原理 书店 信息管理
![提示](https://static.bdocx.com/images/bang_tan.gif)