图书馆管理系统数据库设计需求分析 1.1.图书资料基本管理1、新书编号、登记、入库:将新购入的书籍按照国家统一的分类编号;登记书号、书名、作者、出版社等基本信息,将新购图书入库。2检索查询:按照各种组合条件对书库图书进行查询,也可以进行模糊查询。3、图书资料统计:根据要求对图书总数、各类图书数以及图书单价合计统计,打印日常报表。4旧书出库处理:通过查询确定过期期刊杂志、旧书籍以及由于丢失等其他原因需要从书库中撤销的图书资料,并从书库中撤除。1.2图书资料借阅管理1、借还书管理:主要负责日常的借书登记、还书登记,和逾期未还图书的催还工作。2、检索查询:按照各种组合条件对图书借阅情况查询,也可以进行模糊查询。3借书统计:统计各类书借阅情况,借阅次数;统计个人借书情况,打印日常报表。4、定期整理图书借阅信息:将还书情况总结整理后彻底删除。此外,图书管理人员还要定期做整理图书资料的全部图书清单、分类印图书清单、借阅清单以及整理填写各种报表等工作。2、数据库的概念结构设计2.1 借书业务流程 2.2 新书购进入库业务流程
2. 3 还书业务流程 2.4 销书业务流程 3、数据流程图
符号说明:
实体 处理逻辑 数据流 数据存储
3.1 系统的总数据流程图
3.2结构处理流程图 3还书处理数据流程图 4 购书处理数据流程图 4、数据字典(1) 数据项的描述
数据项名:学号数据项含义说明:学生的唯一编号别名:数据类型:字符型长度:10取值范围:‘0000000000’-‘9999999999’ 取值说明:第1位为校区代码,2-3位为入学年份,。。。。。。与其他数据项的关系
表4-1 数据项的定义数据项编号 数据项名称 简述 类型及宽度 取值范围 图书编号 表4-2 数据流的描述数据流编号 数据流名称 简 述 数据流来源 数据流去向 数据流组成 数据流量 高峰流量 图书编号+书名+借阅证号 表4-3 处理逻辑的描述处理逻辑编号 处理逻辑名称 简述 输入的数据流 处理 输出的数据流 处理频率
表4-4 数据存储的描述434
图书馆管理系统数据库设计数据存储编号 数据存储名称 简 述 数据存储组成 相关联的处理 借阅证号+借书次数+姓名+图书条形码+图书编号+借书日期+应还日期+还书标志+管理员编号 表4-5 外部实体的描述外部实体编号 外部实体名称 简述 外部实体组成 输入的数据流 输出的数据流 (2) 数据流的描述数据流编号: D1数据流名称: 借书单 简述:借阅者所要借的图书信息单数据流来源:借阅者数据流去向:借书处理模块数据流组成:图书编号+书名+借阅证号等 数据流量:200张/天高峰流量:400张/天
数据流编号: D2数据流名称: 图书 简述:借阅者从图书馆所借的图书数据流来源:借书处理模块数据流去向:借阅者数据流组成:图书编号+图书名+条形码号+出版社+出版日期+入库日期+作者+单价等 数据流量:300本/天 高峰流量:500本/天
数据流编号: D3数据流名称: 图书 简述:借阅者要准备归还给图书馆的图书数据流来源:借阅者数据流去向:还书处理模块数据流组成:图书编号+图书名+条形码号+出版社+出版日期+入库日期+作者+单价等 数据流量:300本/天高峰流量:500本/天
数据流编号: D4数据流名称:不合格借书单 简述:经借书处理模块验证不合格的借书单数据流来源:借书处理模块数据流去向:借阅者数据流组成:图书编号+书名+借阅证号等 数据流量: 50张/天高峰流量:100张/天
数据流编号: D5数据流名称: 借书清单 简述:经借书处理模块处理后的借书情况数据单数据流来源:借书处理模块数据流去向:图书库存情况存档数据流组成:图书编号+图书名+借阅日期+借阅证号+管理员编号等 数据流量: 200张/天高峰流量:400张/天
数据流编号:D6数据流名称:还书清单 简述:还书信息清单数据流来源:还书处理模块数据流去向:图书库存情况存档数据流组成:图书编号+图书名+借阅证号+还书日期+管理员编号等 数据流量:150本/天高峰流量:400本/天
数据流编号:D7数据流名称:订书单简述:订购新书的信息单 数据流来源:采购员数据流去向:购书处理模块数据流组成:图书名+图书数量+价格+采购员姓名+采购单位名称+图书出版社+出版日期等 数据流量:1张/3个月高峰流量:1张/月
数据流编号:D8数据流名称:购书清单 简述:购买图书后的信息单数据流来源:购书处理模块数据流去向:管理员数据流组成: 图书名+图书数量+价格+采购员姓名+采购员编号+出版社+出版日期+供货商名称+采购日期等 数据流量: 1张/3个月高峰流量:1张/月
数据流编号: D9数据流名称: 入库新书清单 简述:准备入库图书信息单数据流来源:管理员数据流去向:新书入库处理模块数据流组成:图书编号+图书名+数量+管理人员编号+入库日期等 数据流量:1张/3个月 高峰流量:1张/月
数据流编号: D10数据流名称: 入库清单 简述:刚新入库图书的信息单数据流来源:新书入库处理模块数据流去向:图书库存情况存档数据流组成:图书编号+图书名+数量+管理人员编号+入库日期等 数据流量:1张/3个月 高峰流量:1张/月
数据流编号:D11数据流名称:销书计划 简述:准备从书库中撤除一部分图书的计划数据流来源:管理员数据流去向:销书处理模块数据流组成:图书编号+图书名称+入库日期+管理员编号+日期+数量等 数据流量:1张/6个月高峰流量:1张/月
数据流编号:D12数据流名称:销书清单
图书馆管理系统数据库设计 简述:通过销书处理刚从书库中撤除的图书信息单数据流来源:销书处理模块数据流去向:图书库存情况存档数据流组成:图书编号+图书名称+入库日期+管理员编号+出库日期+数量+总价等 数据流量:1张/6个月高峰流量:1张/月
数据流编号:D13 数据流名称:借书单 简述:借阅者所要借书的信息单数据流来源:借阅者数据流去向:审核处理模块数据流组成:图书编号+图书名+借阅证号等 数据流量:200张/天高峰流量:400张/天
数据流编号:D14数据流名称:不合格借书单 简述:经审核处理模块处理后,不合格的借书单数据流来源:审核处理模块数据流去向:借阅者数据流组成:图书编号+图书名+借阅证号等 数据流量:50张/天 高峰流量:100张/天
数据流编号:D15数据流名称:合格的借书单 简述:经审核处理后符合规定的借书单数据流来源:审核处理模块数据流去向:书借出处理模块数据流组成:图书编号+图书名+借阅证号等 数据流量:200张/天高峰流量:400张/天5、E—R图及表的设计(1) ER图
实 体 属 性 联 系
(2) 表设计
/* Table: BOOK1 */
create table BOOK1( BNO char(10) not null, BID char(10) , BNAME char(20) , WRITER char(8) , PRINTER char(20) , FLAG char(4) , NUM1 numeric(5) , NUM2 numeric(5) , DATE1 date , primary key (BNO));
create table BOOK2( BID char(10) not null, BNO char(10) , DATE1 date , DATE2 date , SORTS numeric(5) , PRICE numeric(8,2) , primary key (BID));create table LOG( NUM numeric(5) not null, USERID char(10) , PASSWORD char(10) , DATE1 date , primary key (NUM));create table STUBROW( SNO char(10) not null, SNUM numeric(5) not null, BID char(10) , BNO char(10) , DATE1 date , DATE2 date , FLAG char(2) , ID char(10) , primary key (SNO, SNUM));create table TEABROW( SNO char(10) not null, SNUM numeric(5) not null, BID char(10) , BNO char(10) , DATE1 date , DATE2 date , FLAG char(2) , ID char(10) , primary key (SNO, SNUM));create table SPASS( SNO char(10) not null, SNUM numeric(5) , SNAME char(8) , SEX char(4) , CLASS char(8) , DATE1 date , primary key (SNO));create table TPASS( TNO char(10) not null, TEA_SNO char(10) , SNUM numeric(5) , TNAME char(8) ,
图书馆管理系统数据库设计 SEX char(4) , CLASS char(8) , DATE1 date , primary key (TNO));create table USER( NUM numeric(5) , USER char(10) , ID char(10) , FLAG char(5) );create table SFK( SNUM numeric(5) not null, SNO char(10) not null, DATE1 date , MONEY numeric(8,2) , ID char(10) , primary key (SNUM));create table TFK( TNUM numeric(5) not null, TNO char(10) not null, DATE1 date , MONEY numeric(8,2) , ID char(10) , primary key (TNUM));6、应用程序的编制(1)编程语言的选择VB语言为用户提供大量的界面元素(在VB中称为控件对象),例如“窗体”“菜单”“命令按钮”“工具按钮”“检查框”等等,用户只需要利用鼠标,键盘把这些控件对象若东到适当的位置,设置他们的大小,形状,属性等,就可以设计出所需要的应用程序界面。6.2相关程序代码及界面void AddRecord(CList &TelList) { system("cls"); CNode *pNode; CTelRecord *pTel; char szName[20],szNumber[20], kind[20], writer[20]; cout<<"\n\t\t ◇请输入书名(输入0结束) :"; cin.getline (szName,20); while(strcmp(szName,"0")) { cout<<"\t\t ◇请输入书的编号 :"; cin.getline(szNumber,20); cout<<"\t\t ◇请输入书的种类(社科,自科,文学,工具书,其他):"; cin.getline(kind,20); cout<<"\t\t ◇请输入作者的姓名 :"; cin.getline(writer,20); pTel=new CTelRecord; pTel->SetRecord(szName,szNumber,kind,writer); pNode=new CNode; pNode->InputData(pTel); TelList.AddNode(pNode); system("cls"); cout<<"\n\t\t ☆请输入书名(输入0结束):"; cin.getline(szName,20);
} cout<
void LookUpRecord(CList &TelList) { system("cls"); CNode *pLook; char szName[20]; cout<<"\n\t\t ☆请输入您想要查找的书名(输入0结束)"; cin.getline(szName,20); while(strcmp(szName,"0")) { CTelRecord tele(szName,"0","0","0");
pLook=TelList.LookUp(tele); if(pLook) { cout<ShowNode(); } else cout<<"\n\t\t !!!在里面找不到 "<ShowNode(); TelList.DeleteNode(pLook);
图书馆管理系统数据库设计cout<<"\n\t\t◎"<GetData(); outfile.write((char *)pTel,sizeof(CTelRecord)); pnode=TelList.GetListNextNode(pnode); } outfile.close(); } void Operate(string &strChoice,CList &TelList) { void TongJi(CList &TelList); if(strChoice=="1") AddRecord(TelList); else if(strChoice=="2") DisplayRecord(TelList); else if(strChoice=="3") LookUpRecord(TelList); else if(strChoice=="4") DeleteRecord(TelList); else if(strChoice=="5") TongJi(TelList); else if(strChoice=="0") StoreFile(TelList); else cout<<"\n\t\t\t !!!输入错误,请重新输入您的选择."<{ ifstream infile("BOOK.dat",ios::binary); if(!infile) { cout<<"\n\t\t !!!对不起,没有找到数据文件,无法导入数据."; return; }
CNode*pNode; CTelRecord*pTel; while(!infile.eof()) { pTel=new CTelRecord; infile.read((char *)pTel,sizeof(CTelRecord)); pNode=new CNode; pNode->InputData(pTel); TelList.AddNode(pNode);
}
TelList.DeleteNode(pNode); infile.close(); } void TongJi(CList &TelList)
{ system("cls"); int a,b,i,j,k, d,e,f,g,m,n; CTelRecord sk("0","0","社科","0"); CTelRecord zk("0","0","自科","0"); CTelRecord wx("0","0","文学","0"); CTelRecord gj("0","0","工具书","0"); CTelRecord qt("0","0","其他","0");
a=TelList.tongji(sk); b=TelList.tongji(zk); i=TelList.tongji(wx); j=TelList.tongji(gj); k=TelList.tongji(qt);
cout<<'\t'<<"↑"<0;d--)cout<0;d--,e--,f--,g--,m--,n--) { cout<a)cout<<" ";else cout<<"■"; cout<<'\t'; if(f>b)cout<<" ";else cout<<"■"; cout<<'\t'; if(g>i)cout<<" ";else cout<<"■"; cout<<'\t'; if(m>j)cout<<" ";else cout<<"■"; cout<<'\t'; if(n>k)cout<<" ";else cout<<"■"; cout<} int main() { CList TelList; system("cls"); cout<