数据库图书管理系统代码

数据库图书管理系统代码,第1张

create database db

use db

create table 借阅等级信息(

借阅等级 int primary key,

最长借阅时间 int,

最大借阅数量 int,

)

insert into 借阅等级信息 values

(0, 30, 10),

(1, 60, 20),

(2, 90, 30),

(3, 120, 40)

create table 读者信息(

姓名 char(15) not null,

证件号 char(12) primary key,

借阅等级 int default 0,

累计借书 int default 0,

foreign key(借阅等级) references 借阅等级信息(借阅等级)

)

insert into 读者信息(姓名, 证件号, 借阅等级) values

('张三', '541607120165', 1),

('李四', '541707010185', 3),

('王五', '541707120165', 1),

('赵六', '541505980268', 2),

('孙七', '541407010169', 0),

('周八', '541307010489', 1)

create table 出版社信息(

出版社 varchar(20) primary key,

地址 varchar(25),

联系电话 char(7)

)

insert into 出版社信息 values

('清华大学出版社', '北京', '4979421'),

('晟威出版社', '天津', '5564130'),

('南海出版公司', '海南', '4984910'),

('上海文艺出版社', '上海', '6640239')

create table 图书信息(

索书号 char(15) primary key,

作者 char(15),

书名 char(15),

出版社 varchar(20),

出版时间 date,

foreign key(出版社)references 出版社信息(出版社)

)

insert into 图书信息 values

('b12987', '严蔚敏', '数据结构', '清华大学出版社', '2012-02-06'),

('b97894', '东野圭吾', '幻夜', '南海出版公司', '2004-08-02'),

('b16546', '吴玉华', '物理实验教程', '清华大学出版社', '2013-05-15'),

('b89490', '张雪峰', '考研指点', '晟威出版社', '2016-12-12'),

('b56400', '郏宗培', '纸上寻仙记', '上海文艺出版社', '2011-02-05')

create table 单本图书信息(

条码号 char(7) primary key check(len(条码号) = 7),

索书号 char(15),

馆藏地 varchar(40),

书刊状态 varchar(6) check(书刊状态 in ('可借', '借出', '非可借')),

历史借阅量 int default 0,

foreign key(索书号)references 图书信息(索书号)

)

insert into 单本图书信息(条码号, 索书号, 馆藏地, 书刊状态) values

('t987628', 'b97894', '三楼A8', '借出'),

('t594805', 'b97894', '二楼C7', '可借'),

('t984910', 'b89490', '五楼A2', '借出'),

('t940566', 'b12987', '负一楼D3', '借出')

create table 借阅信息(

借阅号 char(6) primary key,

借阅时间 date,

归还时间 date,

图书条码号 char(7),

借阅人证件号 char(12),

foreign key(图书条码号) references 单本图书信息(条码号),

foreign key(借阅人证件号) references 读者信息(证件号)

)

create table 评论信息(

评论号 char(8) primary key,

评分 numeric(2, 1),

内容 varchar(200),

评论时间 date,

评论者id char(12),

索书号 char(15),

foreign key(索书号)references 图书信息(索书号),

foreign key(评论者id)references 读者信息(证件号)

)

insert into 评论信息 values

('p12391', 8.9, '很有趣', '2015-06-24', '541707010185', 'b97894'),

('p98523', 7.8, '受益颇多', '2016-05-22', '541307010489', 'b89490'),

('p94606', 6.8, '完全看不懂orz', '2017-05-02', '541607120165', 'b12987')

create table 主题词信息(

ID char(8) primary key,

类别 char(15),

索书号 char(15),

foreign key(索书号)references 图书信息(索书号)

)

insert into 主题词信息 values

('z64400', '计算机', 'b12987'),

('z95410', '物理', 'b16546'),

('z98500', '考研', 'b89490'),

('z64165', '推理\悬疑', 'b97894'),

('z69850', '仙侠', 'b56400')

use db

go

create trigger trigger1

on 借阅信息

after insert

as

begin 

update 读者信息                                                 --更改读者累计借书量

set 累计借书 = 累计借书 + 1                                   

from 读者信息, inserted

where 读者信息.证件号 = inserted.借阅人证件号

update 单本图书信息                                             --更改图书状态

set 单本图书信息.书刊状态 = '借出'

from inserted, 单本图书信息

where inserted.图书条码号 = 单本图书信息.条码号

update 单本图书信息

set 历史借阅量 = 历史借阅量 + 1                                 --更改图书历史借阅量

from inserted, 单本图书信息

where inserted.图书条码号 = 单本图书信息.条码号

end

insert into 借阅信息 values

('j13488', '2018-05-01', '2018-08-01', 't987628', '541407010169')

insert into 借阅信息 values

('j14910', '2016-12-11', '2017-01-25', 't984910', '541607120165')

insert into 借阅信息 values

('j97890', '2018-05-14', '2018-06-14', 't940566', '541607120165')

go

create view view_1(图书条码, 借阅者姓名, 编号, 借阅时间, 应还时间)

as

select 图书条码号, 姓名, 证件号, 借阅时间, 归还时间

from 借阅信息, 读者信息

where 借阅信息.借阅人证件号 = 读者信息.证件号 and 归还时间 >getdate()

go

create view view_2(图书条码, 历史总借阅量)

as

select 条码号, 历史借阅量

from 单本图书信息, 图书信息

where 单本图书信息.索书号 = 图书信息.索书号 and 书名 = '幻夜'

go

create view view_3(类别, 图书条码, 历史总借阅量)

as

select 类别, 条码号, 历史借阅量

from 单本图书信息, 图书信息, 主题词信息

where 主题词信息.索书号 = 图书信息.索书号 and 图书信息.索书号 = 单本图书信息.索书号 and 类别 = '考研'

go

create view view_4(读者编号, 条码, 图书名称, 应还日期)

as

select 借阅人证件号, 图书条码号, 书名, 归还时间

from 单本图书信息, 图书信息, 借阅信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号

and 归还时间 >getdate() and 借阅人证件号 = '541607120165'

go

create view view_5(读者编号, 图书条码, 图书名称, 借阅日期, 归还日期)

as

select 借阅人证件号, 图书条码号, 书名, 借阅时间, 归还时间

from 单本图书信息, 图书信息, 借阅信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号

and 借阅人证件号 = '541607120165'

go

create view view_6(读者编号, 图书名称, 评论时间, 评论内容)

as

select 评论者id, 书名, 评论时间, 内容

from 借阅信息, 单本图书信息, 评论信息, 图书信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 评论信息.索书号

and 评论信息.索书号 = 图书信息.索书号 and 评论者id = '541607120165'

go

create view view_7(出版社名称, 图书名称, 出版时间)

as

select top 100 percent 出版社信息.出版社, 书名, 出版时间

from 出版社信息, 图书信息

where 出版社信息.出版社 = 图书信息.出版社

order by 出版时间 asc

--执行

select * from view_1

select * from view_2

select * from view_3

select * from view_4

select * from view_5

select * from view_6

select * from view_7 order by 出版时间 asc

扩展资料:

数据库模型:

对象模型

层次模型(轻量级数据访问协议)

网状模型(大型数据储存)

关系模型

面向对象模型

半结构化模型

平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)

架构

数据库的架构可以大致区分为三个概括层次:内层、概念层和外层。

内层:最接近实际存储体,亦即有关数据的实际存储方式。

外层:最接近用户,即有关个别用户观看数据的方式。

概念层:介于两者之间的间接层。

数据库索引

主条目:数据库索引

数据索引的观念由来已久,像是一本书前面几页都有目录,目录也算是索引的一种,只是它的分类较广,例如车牌、身份z字号、条码等,都是一个索引的号码,当我们看到号码时,可以从号码中看出其中的端倪,若是要找的人、车或物品,也只要提供相关的号码,即可迅速查到正确的人事物。

另外,索引跟字段有着相应的关系,索引即是由字段而来,其中字段有所谓的关键字段(Key Field),该字段具有唯一性,即其值不可重复,且不可为"空值(null)"。

例如:在合并数据时,索引便是扮演欲附加字段数据之指向性用途的角色。故此索引为不可重复性且不可为空。

数据库 *** 作:事务

主条目:数据库事务

事务(transaction)是用户定义的一个数据库 *** 作序列,这些 *** 作要么全做,要么全不做,是一个不可分割的工作单位。

事务的并发性是指多个事务的并行 *** 作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性。

网状数据模型的数据结构 网状模型 满足下面两个条件的基本层次联系的集合为网状模型。 1. 允许一个以上的结点无双亲; 2. 一个结点可以有多于一个的双亲。

参考资料来源:百度百科——数据库

高级语言程序设计(2)课程设计

   

一 程序设计说明书

【设计题目】 图书馆借阅管理

【问题描述】图书馆,适合用C++面向对象的功能来描述。图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分。设计一个读者类Reader,记录每个读者基本信息;读者库类Rdatabase,记录所有读者信息;图书类Book, 记录每本书的基本信息;图书库类Bdatabase, 记录所有图书信息。

【基本要求】

1读者库类RDatabase中,其构造函数中,将read.txt文件中所有读入读者记录rede[]中。处理完毕,在析构函数中将read[]中的所有未删记录写入到read.txt中。

2图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。处理完毕,在析构函数中将book[]中的所有未删记录写入到book.txt中。

3 利用构造函数完成读者和图书数据初始化,完成内存分配。程序结束前,析构函数完成所申请的堆内存空间。

4 编写主函数,对所编写的矩阵类进行全面测试。要求用户界面采用菜单方式。测试中需要读者和图书数据通过I/O流从磁盘文件读入,同时显示在屏幕上。得到的数据通过I/O流写入磁盘文件保存,同时显示在屏幕上。

5 源程序中要有充分的注释,报告中要有详细的流程图和文字材料。

【类的设计】

该程序包含了四个类,如下:

1.Reader类,有读者的基本管理功能,具有以下私有数据:

int tag//删除标记 1:已删;0:未删

int no//读者编号

char name[10]//读者姓名

int borbook[Maxbor]//所借图书

2.读者库类Rdatabase, 具有以下私有数据:

int top//读者记录指针

Reader read[Maxr]//读者记录

3.图书库类Book,有一本图书的基本功能,有以下私有数据:

int tag//删除标记 1:已删;0:未删

int no//图书编号

char name[20]//书名

int onshelf//是否在架 1在架 0已借

4.图书库类BDatabase,有以下私有数据:

int top//图书记录指针

Book book[Maxb]//图书记录

【特殊函数的设计说明】

构造函数

1.Reader类中构造函数Reader(),初始化函数;

2.读者库类RDatabase中,其构造函数Rdatabase(),将read.txt文件中所有读入读者记录rede[]中。

3.Book类中构造函数Book(),初始化函数;

4.图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。

 

拷贝构造函数

Reader类中的拷贝构造函数将getname()的返回值读者姓名拷贝到setname()中,Book类中的拷贝构造函数将getname()函数的返回值图书名拷贝到图书名设置函数setname()中。

 

析构函数

1.读者库类RDatabase中,其析构函数~Rdatabase(),将read[]中的所有未删记录写入到read.txt中;

2.图书库类BDatabase中,其析构函数~Bdatabase(),将book[]中的所有未删记录写入到book.txt中。

 

运算符重载

重载了“=”,当比较读者编号和图书编号时,重载;重载位运算符“〈〈”和“〉〉”等。

 

【主要函数算法流程图】

 

【程序的使用方法】

1.进入 *** 作页面,按提示 *** 作;

2.首先,新增图书和读者信息,之后就可以对以存在的信息进行 *** 作;

3. *** 作当中,可以随时增加,更改和删除图书或读者信息;

4.当选择退出时,进行清屏。

 

二 程序上机调试报告

【语法错误及其排除】

1.在敲程序时,有很多拼写错误,例好多处把Readdata()误打Readdate();结束的分号,在不同的输入法状态下输入,这些小错误刚开始很难发现,不过有了经验,就很容易了。

2.创建新的构造函数时,使用出现了错误。重载构造函数要注意函数的访问权限,结果就不会出现错误。

【算法错误及其排除】

1.读者类中借书 *** 作函数中,采用循环语句时判断读者已借图书量时for(int i=0i<Maxbori++)误写为for(int i=1i<Maxbori++),使循环发生错误。

2.指针使用错误,指针b和r混淆,导致编译错误得到“error C2660: 'retbook' : function does not take 1 parameters”错误报告。

三 程序测试结果

【收获及体会】

除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计这段时间,时刻都感觉自己有好多不懂,要学的太多了!经过这次课程设计,让我对C++这门语言有了更深的认识, *** 作能力有了提高。要想得到敲的代码运行出来后的满足感,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才达到所要的运行结果。学习编程,需要多揣摩,实践,实践,再实践,编程技能才能更上一层楼,此外还得多向高手请教!

【源程序代码】

//********************

//图书馆借阅管理

//班级:

//学号:

//姓名:

//********************

#include<iostream.h>

#include<iomanip.h>

#include<string.h>

#include<fstream.h>

const int Maxr=1000//最多的读者

const int Maxb=10000//最多的图书

const int Maxbor=8//每位读者最多借8本书

class Reader //读者类

{

int tag//删除标记 1已删;0未删

int no//读者编号

char name[10]//读者姓名

int borbook[Maxbor]//所借图书

public :

Reader(){}//构造函数

char *getname(){return name}//获取读者姓名

int gettag(){return tag}//获取删除标记

int getno(){return no}//获取读者编号

void setname(char na[])//设置读者姓名

{

strcpy(name,na)

}

void delbook(){tag=1}//设置删除标记

void addreader(int n,char *na)//增加读者

{

tag=0

no=n

strcpy(name,na)

for(int i=0i<Maxbori++)

borbook[i]=0

}

void borrowbook(int bookid)//借书 *** 作

{

for(int i=0i<Maxbori++)

{

if(borbook[i]==0)

{

borbook[i]=bookid

}

}

}

int retbook(int bookid)//还书 *** 作

{

for(int i=0i<Maxbori++)

{

if (borbook[i]==bookid)

{

borbook[i]=0

return 1

}

}

return 0

}

void disp()//输出读者信息

{

cout<<setw(5)<<no<<setw(10)<<name<<"借书编号:"

for(int i=0i,Maxbori++)

if(borbook[i]!=0)

cout<<borbook[i]<<endl

}

}

 

class RDatabase//读者库类

{

int top//读者记录指针

Reader read[Maxr]//读者记录

public:

RDatabase()//构造函数,将reader.txt读到read[]中

{

Reader s

top=-1

fstream file("reader.txt",ios::in)

while(1)

{

file.read((char*)&s,sizeof(s))

if(!file)break

top++

read[top]=s

}

file.close()

}

void clear()//删除所有读者信息

{

top=-1

}

int addreader(int n,char *na)//添加读者,检查是否已存在

{

Reader *p=query(n)

if(p==NULL)

{

top++

read[top].addreader(n,na)

return 1

}

return 0

}

Reader*query(int readerid)//按编号查找

{

for(int i=0i<=topi++)

if(read[i].getno()==readerid&&read[i].gettag==0)

return &read[i]

return NULL

}

void disp()//删除读者所有信息

{

for(int i=0i<=topi++)

read[i].disp()

}

void readerdata()//读者库维护

~RDatabase()//析构函数,将read[]写入reader.txt文件中

{

fstream file("reader.txt",ios::out)

for(int i=0i<=topi++)

if(read[i].gettag()==0)

file.write((char*)&read[i],sizeof(read[i]))

file.close()

}

}

void RDatabase::readerdata()

{

int choice=1

char rname[20]

int readerid

Reader*r

while(choice!=0)

{

cout<<"读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl

cin>>choice

switch(choice)

{

case 1:

cout<<"请输入读者编号:"

cin>>readerid

cout<<"读入读者姓名:"

cin>>rname

addreader(readerid,rname)

break

case 2:

cout<<"请输入读者编号:"

cin>>readerid

r=query(readerid)

if(r==NULL)

{

cout<<"读者不存在"<<endl

break

}

cout<<"请输入新读者姓名:"

cin>>rname

r->setname(rname)

break

case 3:

cout<<"请输入读者编号:"

cin>>readerid

r=query(readerid)

if(r==NULL)

{

cout<<"读者不存在"<<endl

break

}

r->delbook()

break

case 4:

cout<<"请输入读者编号:"

cin>>readerid

r=query(readerid)

if(r==NULL)

{

cout<<"该读者编号不存在"<<endl

break

}

case 5:

disp()

break

case 6:

clear()

break

}

}

}

 

class Book//图书类

{

int tag//删除标记 1:已删;0:未删

int no//图书编号

char name[20]//书名

int onshelf//是否在架 1在架 0已借

public:

Book(){}

char*getname(){return name}//获取读者姓名

int getno(){return no}//获取图书编号

int gettag(){return tag}//获取删除标记

void setname(char na[])//设置书名

{

strcpy(name,na)

}

void delbook(){tag=1}//删除图书

void addbook(int n,char*na)//增加图书

{

tag=0

no=n

strcpy(name,na)

onshelf=1

}

int borrowbook()//借书 *** 作

{

if(onshelf==1)

{

onshelf=0

return 1

}

return 0

}

void retbook()//还书 *** 作

{

onshelf=1

}

void disp()//输出图书

{

cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl

}

}

 

class BDatabase//图书库类

{

int top//图书记录指针

Book book[Maxb]//图书记录

public:

BDatabase()//构造函数,将book.txt读到book[]中

{

Book b

top=-1

fstream file("book.txt",ios::in)

while(1)

{

file.read((char*)&b,sizeof(b))

if(!file)break

top++

book[top]=b

}

file.close()

}

void clear()//全删

{

top=-1

}

int addbook(int n,char*na)//增加图书

{

Book*p=query(n)

if(p==NULL)

{

top++

book[top].addbook(n,na)

return 1

}

cout<<"新增成功!"<<endl

}

Book*query(int bookid)//查找图书

{

for(int i=0i<=topi++)

if(book[i].getno()==bookid&&book[i].gettag()==0)

return NULL

}

void bookdata()//图书库维护

void disp()

{

for(int i=0i<=topi++)

if(book[i].gettag()==0)

book[i].disp()

}

~BDatabase()//析构函数,将book[]写入book.txt文件中

{

fstream file("book.txt",ios::out)

for (int i=0i<=topi++)

if(book[i].gettag()==0)

file.write((char*)&book[i],sizeof(book[i]))

file.close()

}

}

void BDatabase::bookdata()

{

int choice

char bname[40]

int bookid

Book *b

while(choice!=0)

{

cout<<"图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl

cin>>choice

switch(choice)

{

case 1:

cout<<"输入图书编号:"

cin>>bookid

cout<<"输入图书书名:"

cin>>bname

addbook(bookid,bname)

break

case 2:

cout<<"输入图书编号:"

cin>>bookid

b=query(bookid)

if(b==NULL)

{

cout<<"该图书不存在"<<endl

break

}

cout<<"输入新书名:"

cin>>bname

b->setname(bname)

cout<<"更名成功!"<<endl

break

case 3:

cout<<"输入图书编号:"

cin>>bookid

b=query(bookid)

if(b==NULL)

{

cout<<"该图书不存在!"<<endl

break

}

b->delbook()

break

case 4:

cout<<"请输入图书编号:"

cin>>bookid

b=query(bookid)

if(b==NULL)

{

cout<<"该书不存在!"<<endl

break

}

b->disp()

break

case 5:

disp()

break

case 6:

clear()

break

}

}

}

 

void main()

{

int choice=1,bookid,readerid

RDatabase ReaderDB

Reader *r

BDatabase BookDB

Book *b

while(choice!=0)

{

cout<<" 1借书      "<<endl

cout<<" 2还书      "<<endl

cout<<" 3图书维护  "<<endl

cout<<" 4读者维护  "<<endl

cout<<" 0离开      "<<endl

cin>>choice

switch(choice)

{

case 1:

cout<<"借书,请输入读者编号:"

cin>>readerid

cout<<"图书编号:"

cin>>bookid

r=ReaderDB.query(readerid)

if(r==NULL)

{

cout<<"哈哈,借书成功!"

break

}

b=BookDB.query(bookid)

if(b==NULL)

{

cout<<"不存在该书!"<<endl

break

}

if(b->borrowbook()==0)

{

cout<<"该书已借"<<endl

break

}

r->borrowbook(b->getno())

break

cout<<"借书成功!"<<endl

case 2:

cout<<"还书,请输入读者编号:"

cin>>readerid

cout<<"请输入图书编号;"

cin>>bookid

r=ReaderDB.query(readerid)

if(r==NULL)

{

cout<<"不存在该读者!"<<endl

break

}

b->retbook()

r->retbook(b->getno())

break

cout<<"还书成功!"<<endl

case 3:

BookDB.bookdata()

break

case 4:

ReaderDB.readerdata()

break

}

}

}

【输出结果】

1借书

2还书

3图书管理

4读者服务

0退出

3

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1

输入图书编号:1111

输入图书书名:武林外传

新增成功!

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1

输入图书编号:2222

输入图书书名:今夜无眠

新增成功!

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

0

1借书

2还书

3图书管理

4读者服务

0退出

4

读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出

1

请输入读者编号:001

读入读者姓名:周强

读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出

0

1借书

2还书

3图书管理

4读者服务

0退出

1

借书,请输入读者编号:001

图书编号:1111

哈哈,借书成功! 1借书

2还书

3图书管理

4读者服务

0退出

2

还书,请输入读者编号:001

请输入图书编号;1111

还书成功!

1借书

2还书

3图书管理

4读者服务

0退出

3

图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

2

输入图书编号:2222

输入新书名:金庸全集

更名成功!

Press any key to continue


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6659493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存