图书管理系统数据库设计MYSQL实现(20210123135943)

合集下载

数据库课程设计(图书管理系统)实验报告

数据库课程设计(图书管理系统)实验报告

海南大学应用科技学院数据库系统原理课程设计报告————图书管理系统组长:学号:组员:学号:组员:学号:组员:学号:指导老师:起始时间:起始时间:目录第一章概述 (3)1.1项目背景 (3)1.2软件定义 (3)1.3编写目的 (3)1.4开发环境 (3)第二章需求分析 (4)2.1信息要求 (4)2.2处理要求 (7)2.3安全性与完整性要求 (8)第三章概念结构设计 (21)3.1流程图及数据字典 (21)3.2全局E-R图 (23)第四章逻辑结构设计 (24)4.1关系模式 (24)4.2基本表 (25)4.3视图 (30)4.4索引 (32)第五章数据库与表的创建与实施 (33)第六章主要模块设计及代码 (38)第七章总结 (41)第八章参考文献 (41)第一章概述1.1项目背景随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

作为计算机应用的一部分,使用计算机对图书信息进行管理,有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等.这些优点能够极大地提高图书管理的效率,也是图书馆的科学化、正规化管理,是与世界接轨的重要条件。

1.2编写目的记录图书借阅情况是非常繁琐工作。

使用计算机可以高速,快捷地完成工作.有鉴于此,开发一套图书馆信息管理系统,是十分必要的。

采用数据库技术开发的图书馆信息管理系统可以用来实现对图书的信息管理,可以提高管理的效率.图书馆都是封闭式管理,要求藏书全部公开开放,师生共享,开架阅览。

这种阅览方式是适合当前我国国情、发挥图书馆应用作用的最佳方式,也是素质教育的最好体现。

它充分发挥了图书馆的功效,最大限度地为师生服务,这也是图书馆自动化管理的最终目标。

实现这一目标,必须有现代化的管理手段和管理体制。

1.3 软件定义图书管理系统,是一个由人、计算机等组成的能进行管理信息的收集、传递、加工、保存、维护和使用的系统。

《图书管理系统》数据库设计

《图书管理系统》数据库设计

数据库设计题某高校的图书管理系统需求描述如下:●该系统有图书管理员和读者两类用户。

●实现按图书类别、ISBN、图书名称、关键词(每种图书最多可同时录入4个关键词)、出版社或作者(每种图书最多可同时录入3个作者)等手段检索图书信息;实现图书的借出和归还管理,并可对图书的借用情况进行各种查询和统计。

●图书管理员负责添加、删除和更新图书信息。

所有图书实行分类管理,每一种图书属于且仅属于某一类;每一种图书由ISBN唯一标识;每一种图书可能库存多册。

●图书管理员负责添加、删除和更新读者信息。

读者分教师、职工、研究生和本科生等几种类别,对于不同类别的读者可以同时借阅图书的册数不一样,图书的借期也不一样。

●读者可以按规定在一定期限内借阅一定数量的图书,同一种图书仅允许在借1册,只有图书有库存时才能借阅。

读者可以预订目前借不到的图书。

一旦预订的图书被归还或购买入库,系统立即通知预订者。

●读者逾期不归还图书的,每本每天按一定的标准(如0.1元/本·天)收取罚金;丢失图书的可以买相同版次的新书归还(图书管理员对归还的新书按丢失图书的信息编码入库)或按原价3倍的金额进行赔偿(图书管理员删除丢失图书的库存信息)。

请完成:1.分别画出借书、还书业务的处理流程。

2.设计该图书管理系统的E-R模型,E-R图重点是描述各实体集之间的联系,对于E-R图中的每一个实体集请通过数据字典定义它的相关属性。

3.将E-R模型转化为关系模式,请标出每一个关系中的主码和外码。

4.定义一个视图Utilization,它实现按年、ISBN汇总统计图书借阅情况,视图中包含年份、ISBN、图书名称、库存册数、借阅次数、平均每册借阅次数等属性。

1.图2 还书流程类似于实体集“借阅归还记录”和联系集“借阅图书”、“读者借阅”可画出实体集“预订记录”和联系集“预订图书”、“读者预订”。

3.图书分类号:Bookclass (classNo, className)图书:Book (ISBN, classNo, bookName, authorNo, keywordNo, publishingName, price, publishingDate, shopDate, shopNum, retainedNum)作者:Author (authorNo, authorName, sex, workunit)图书作者:BookAuthor (authorNo, ISBN)关键词:Keyword (keywordNo, keyword)图书关键词:BookKeyword (keywordNo, ISBN)借阅归还记录:Borrow (borrowNo, readerNo, ISBN, borrowDate, shouldDate, returnDate,borrowEmployeeNo,returnEmployeeNo)读者:Reader (readerNo, readerName, sex, identitycard, workunit, readerClassNo)读者分类:ReaderClass (readerClassNo, readerClass, borrowNumLimit, borrowTimeLimit) ——readerClass的取值有:”教师”、”职工”、”本科生”、”研究生”等图书管理员:Employee (employeeNo, employeeName, sex, salary)处罚单:Ticket (ticketNo, ticketClass, ticketAmount, borrowNo, ticketEmployeeNo) ——ticketClass的取值有:”逾期归还”、”丢失赔偿”、”丢失赔书”等一个借书单可以同时借阅多本不同的书。

图书管理系统数据库设计-MYSQL实现

图书管理系统数据库设计-MYSQL实现

图书管理系统数据库设计一、系统概述1、系统简介图书管理是每个图书馆都需要进行的工作。

一个设计良好的图书管理系统数据库能够给图书管理带来很大的便利。

2、需求分析图书管理系统的需求定义为:1.学生可以直接通过借阅终端来查阅书籍信息,同时也可以查阅自己的借阅信息。

2.当学生需要借阅书籍时,通过账号密码登陆借阅系统,借阅系统处理学生的借阅,同时修改图书馆保存的图书信息,修改被借阅的书籍是否还有剩余,同时更新学生个人的借阅信息。

3.学生借阅图书之前需要将自己的个人信息注册,登陆时对照学生信息。

4.学生直接归还图书,根据图书编码修改借阅信息5.管理员登陆管理系统后,可以修改图书信息,增加或者删除图书信息6.管理员可以注销学生信息。

通过需求定义,画出图书管理系统的数据流图:数据流图二、系统功能设计三、数据库设计方案图表1、系统E-R模型总体E-R图:管理员E-R图:给出设计的表名、结构以及表上设计的完整性约束。

student:book:book_sort:borrow:存储学生的借书信息return_table:存储学生的归还信息ticket:存储学生的罚单信息manager:3、设计索引给出在各表上建立的索引以及使用的语句。

student:1.为stu_id创建索引,升序排序sql:create index index_id on student(stu_id asc);2.为stu_name创建索引,并且降序排序sql:alter table student add index index_name(stu_name, desc);插入索引操作和结果如下所示:mysql> create index index_id on student(stu_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> alter table student add index index_name(stu_name desc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql>book:1.为book_id创建索引,升序排列sql:create index index_bid on book(book_id);2.为book_record创建索引,以便方便查询图书的登记日期信息,升序:sql:create index index_brecord on book(book_record);插入索引的操作和结果如下所示:mysql> create index index_bid on book(book_id);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> create index index_brecord on book(book_record);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0borrow:1.为stu_id和book_id创建多列索引:sql:create index index_sid_bid on borrow(stu_id asc, book_id asc);插入索引的操作和结果如下所示:mysql> create index index_sid_bid on borrow(stu_id asc, book_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0return_table:1.为stu_id和book_id创建多列索引:sql:create index index_sid_bid on return_table(stu_id asc, book_id asc);插入索引的操作和结果如下所示:mysql> create index index_sid_bid_r onreturn_table(stu_id asc, book_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0ticket:1. 为stu_id和book_id创建多列索引:sql:create index index_sid_bid on ticket(stu_id asc, book_id asc);插入索引的操作和结果如下所示:mysql> create index index_sid_bid on ticket(stu_id asc, book_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0manager:1.为manager_id创建索引:sql:create index index_mid on manager(manager_id);插入索引的操作和结果如下所示:mysql> create index index_mid on manager(manager_id);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 04、设计视图给出在各表上建立的视图以及使用的语句。

图书管理系统数据库设计

图书管理系统数据库设计

图书管理系统数据库设计1. 引言图书管理系统是一个用于管理图书馆馆藏图书的软件系统。

它提供了图书的借阅、归还、查询等功能,方便读者进行图书借阅和图书馆管理员进行图书管理。

本文档将介绍图书管理系统的数据库设计。

通过组织图书、读者、借阅记录等相关数据,实现图书管理系统的各项功能。

2. 数据库设计2.1 数据库结构图书管理系统的数据库主要包含以下几个表:•图书表(books):存储图书的基本信息,如图书编号、名称、作者、出版社等。

•读者表(readers):存储读者的基本信息,如读者编号、姓名、性别、年龄等。

•借阅记录表(borrow_records):存储图书的借阅记录,包括借阅编号、借阅日期、归还日期、读者编号等。

2.2 数据库字段2.2.1 图书表(books)•book_id:图书编号,主键•book_name:图书名称•author:作者•publisher:出版社•publication_date:出版日期•price:价格2.2.2 读者表(readers)•reader_id:读者编号,主键•reader_name:读者姓名•gender:性别•age:年龄•phone:联系电话2.2.3 借阅记录表(borrow_records)•record_id:借阅记录编号,主键•book_id:借阅图书编号,外键•reader_id:借阅读者编号,外键•borrow_date:借阅日期•return_date:归还日期2.3 数据库关系•图书表与读者表之间是多对多的关系,通过借阅记录表进行关联。

•图书表与借阅记录表是一对多的关系,一个图书可以对应多条借阅记录。

•读者表与借阅记录表也是一对多的关系,一个读者可以借阅多本图书。

2.4 数据库约束•图书编号(book_id)在图书表中是唯一的,不能重复。

•读者编号(reader_id)在读者表中是唯一的,不能重复。

•借阅记录编号(record_id)在借阅记录表中是唯一的,不能重复。

用mysql数据库实现的C++图书管理系统

用mysql数据库实现的C++图书管理系统

.#include<fstream>#include<iostream>#include<stdlib.h>#include<ctime>#include<cmath>#include<termios.h>#include <sstream>#include<string.h>#include<assert.h>#include<mysql/mysql.h>//改变字体颜色#define NONE "\033[m"#define RED "\033[0;32;31m"#define GREEN "\033[0;32;32m"#define BLUE "\033[0;32;34m"#define YELLOW "\033[1;33m"#define LIGHT_RED "\033[1;31m"#define LIGHT_GREEN "\033[1;32m"#define LIGHT_BLUE "\033[1;34m"/*在编译程序之前,请先开启mysql服务器(命令为sudo mysqld_safe &),然后再登录mysql客户端(命令为mysql -u root -p)建立数据库stu;建立数据表reader,book;具体操作语句如下:create database stu;create table reader(stu_name varchar(20),stu_phone varchar(15),stu_password varchar(10),stu_num int,debt float,lend_time double,back_time double,count int);create table book(book_name varchar(40),book_aut varchar(40),book_pre varchar(40),book_num int,book_mux int,book_con int);编译时用如下命令:g++ $(mysql_config --cflags) 110.cpp -o t $(mysql_config --libs)*///定义mysql数据库变量MYSQL mysql;MYSQL_RES * results;MYSQL_FIELD *fileds;MYSQL_ROW rows;char strHost[] = "localhost";char strUser[] = "root";char strPasswd[] = "3335599";char strDb[] = "stu";char strSQL[200];unsigned int num_fields;/*程序导读:1.程序中对书的操作,可通过书名,编号来进行,flag=0按书名来操作,flag=1按书编号来操作2.程序中对用户的操作,也可通过姓名,用户ID号或编号两种方式来进行,flag=0按姓名来操作,flag=1按用户ID号或编号来操作3.本程序分5个部分,具体已标识如(1)图书管理...4.本程序即可实现将数据保存至本地即stu.txt,book.txt,又可将数据保存至mysql数据库,只需稍加修改,具体如何修改,在此就不做说明*/using namespace std;class Book{public:string book_name;string book_num;//编号string book_pre;//出版社string book_aut;//作者int book_con;//这样的书还有几本int book_mux;//这样的书总共有几本public:Book(){book_con=0;book_mux=0;}void show_book();};/****************************************(1)图书管理*******************************************/void Book::show_book(){cout<<"书名:"<<book_name<<endl;cout<<"出版社:"<<book_pre<<endl;cout<<"此书的作者:"<<book_aut<<endl;cout<<"ISBN编号:"<<book_num<<endl;cout<<"此书共有"<<book_mux<<"本"<<endl;cout<<"还有"<<book_con<<"本书未借出!"<<endl;}class BookNode{public:Book book;BookNode *next;};BookNode *headbook=NULL;void savebook(BookNode *p);//保存图书信息到数据库void del_sql_book(BookNode *p);//将图书信息从数据库中删除class BookManage{public:int totolbook;public:BookManage(){totolbook=0;}void addbook();void delbook(string s,int num,int flag);void findbook(string s,int flag);//查询图书};void BookManage::addbook(){string h;cout<<"添加输入0,退出输入-1"<<endl; cin>>h;if(h=="-1")return;else if(h=="0")while(1){if(h=="-1")break;else if(h=="0"){string na,nu,p1,aut;int con;BookNode *p=new BookNode;cout<<"请输入书名:"<<endl;cin>>na;p->book.book_name=na;cout<<"请输入ISBN编号:"<<endl;cin>>nu;p->book.book_num=nu;cout<<"请输入出版社:"<<endl;cin>>p1;p->book.book_pre=p1;cout<<"请输入此书的作者:"<<endl;cin>>aut;p->book.book_aut=aut;cout<<"请输入此书共有几本:"<<endl;cin>>con;p->book.book_con=con;p->book.book_mux=con;p->next=headbook;headbook=p;savebook(p);//添加至数据库BookManage::totolbook+=con;cout<<"继续添加输入0,取消添加输入-1"<<endl;cin>>h;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}void BookManage::delbook(string s,int num,int flag){BookNode *p=headbook;if(headbook!=NULL){switch(flag){case 0:if(headbook->book.book_name==s){if(headbook->book.book_con>1){headbook->book.book_con-=num;headbook->book.book_mux-=num;} else{headbook=p->next;totolbook-=num;del_sql_book(p);//从数据库中删除//delete p;}}else if(p->next){for(p=headbook;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->book.book_name==s){if(p->next->book.book_con>1){p->next->book.book_con-=num;headbook->book.book_mux-=num;break;}else{p->next=p->next->next;totolbook-=num;del_sql_book(p->next);//从数据库中删除//delete p->next;break;}}}if(p->next==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;}break;case 1:if(headbook->book.book_num==s){if(headbook->book.book_con>1){headbook->book.book_con-=num;headbook->book.book_mux-=num;} else{headbook=p->next;totolbook-=num;del_sql_book(p);//从数据库中删除//delete p;}}else if(p->next){for(p=headbook;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->book.book_num==s){if(p->next->book.book_con>1){p->next->book.book_con-=num;headbook->book.book_mux-=num;break;}else{p->next=p->next->next;totolbook-=num;del_sql_book(p->next);//从数据库中删除//delete p->next;break;}}}if(p->next==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;}break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}}void BookManage::findbook(string s,int flag){BookNode *p; int h=0;switch(flag){case 0:for(p=headbook;p!=NULL;p=p->next)//先查看是否有此书{if(p->book.book_name==s)break;}if(NULL==p)cout<<YELLOW"此书不存在!"NONE<<endl;for(p=headbook;p!=NULL;p=p->next)//查看名为s的图书共有几本{if(p->book.book_name==s)h++;}if(h>0)cout<<GREEN"这种名字的书共有"<<h<<"本"NONE<<endl;for(p=headbook;p!=NULL;p=p->next)//查看图书,把所有名为s的图书的信息都打印出来{if(p->book.book_name==s){p->book.show_book();//显示出图书的基本信息if(p->book.book_con==0)cout<<YELLOW"该书已全被借出!"NONE<<endl;cout<<endl;}}break;case 1:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_num==s){p->book.show_book();if(p->book.book_con==0)cout<<YELLOW"该书已全被借出!"NONE<<endl;break;}}if(NULL==p)cout<<YELLOW"此书不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}/****************************************(2)用户管理*******************************************/class Admin//管理员{public:string adm_name;//帐号string adm_passw;//密码public:Admin(){adm_name="adm";adm_passw="123";}};class LendBook{public:string bookname[3];int count;//借多少本数time_t lend_time;time_t back_time;LendBook(){count=0;}};class Stu{public:string stu_name;string stu_phone;//联系方式string stu_num;//学号(登录帐号)string password;//密码float debt;//欠费额LendBook lendbook;//用户借书信息public:void show_stu();//把此人所有信息(包括借书)显示出来};void Stu::show_stu(){cout<<"姓名:"<<stu_name<<endl;cout<<"联系电话:"<<stu_phone<<endl;cout<<"ID:"<<stu_num<<endl;cout<<"欠费额:"<<debt<<endl;cout<<"已借书"<<lendbook.count<<"本"<<endl;}class StuNode{public:Stu stu;StuNode *next;};StuNode *headstu=NULL;void savestu(StuNode *p);//保存读者信息到数据库void del_sql_stu(StuNode *p);//将读者信息从数据库中删除class StuManage:public BookManage{private:int totolstu;//用户总数public:StuManage(){totolstu=0;}void addstu();//增加用户void delstu(string s,int flag);//删除用户void findstu(string s,int flag);//查找用户void lendbook(string ss,string s,int flag);//借书void backbook(string ss,string s,int flag);//还书void paydebt(string s);//还款void mux_stu_book();//查询图书管总的图书量与总的用户量};void StuManage::addstu(){string h;cout<<"添加输入0,退出输入-1"<<endl;cin>>h;if(h=="-1")return;else if(h=="0")while(1){if(h=="-1")break;else if(h=="0"){string na,num,p1,pa,pa1,pa2;StuNode *p=new StuNode;cout<<"请输入姓名:"<<endl;cin>>na;p->stu.stu_name=na;cout<<"请输入联系电话:"<<endl;cin>>p1;p->stu.stu_phone=p1;cout<<"请输入ID:"<<endl;cin>>num;p->stu.stu_num=num;p->stu.lendbook.lend_time=0;p->stu.lendbook.back_time=0;while(1){cout<<"请输入六位密码:"<<endl;cin>>pa1;cout<<"请确认六位密码:"<<endl;cin>>pa2;if(pa1==pa2){pa=pa2;p->stu.password=pa;break;}elsecout<<YELLOW"两次密码不一样,请重行输入!"NONE<<endl;}p->stu.debt=0;p->next=headstu;headstu=p;savestu(p);//保存至数据库(StuManage::totolstu)++;//用户总数加一cout<<"继续添加输入0,取消添加输入-1"<<endl;cin>>h;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}void StuManage::delstu(string s,int flag){StuNode *p=headstu;if(headstu!=NULL){switch(flag){case 0:if(headstu->stu.stu_name==s)//当要删除的用户位于链表的头结点位置{headstu=p->next;StuManage::totolstu--;del_sql_stu(p);//从数据库中删除delete p;}else if(p->next)//非头结点位置{for(p=headstu;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->stu.stu_name==s){p->next=p->next->next;totolstu--;del_sql_stu(p->next);//从数据库中删除//delete p->next;break;}}if(p->next==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;}break;case 1:if(headstu->stu.stu_name==s){headstu=p->next;totolstu--;del_sql_stu(p);//从数据库中删除delete p;}else if(p->next){for(p=headstu;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->stu.stu_name==s){p->next=p->next->next;totolstu--;del_sql_stu(p->next);//从数据库中删除//delete p->next;break;}}if(p->next==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;}break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}}void StuManage::findstu(string s,int flag){StuNode *p; int h=0,m=1;switch(flag){case 0:for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_name==s)break;}if(p==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_name==s)h++;}if(h>0)cout<<GREEN"这种名字的用户共有"<<h<<"个"NONE<<endl;for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_name==s){p->stu.show_stu();if(p->stu.lendbook.count>=3){cout<<YELLOW"sorry,您已借满3本书,不能再借了!!!"NONE<<endl;int i=p->stu.lendbook.count;if(i>0)cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<endl;}else{int i=p->stu.lendbook.count;if(i>0)cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<"您已借了"<<p->stu.lendbook.count<<"本书!"<<endl;cout<<"您还可以借"<<3-p->stu.lendbook.count<<"本书!"<<endl;cout<<endl;}}}break;case 1:for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_num==s){p->stu.show_stu();if(p->stu.lendbook.count>=3){cout<<YELLOW"sorry,您已借满3本书,不能再借了!!!"NONE<<endl;int i=p->stu.lendbook.count;cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){ //输出用户所借书的名字cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<endl;}else{int i=p->stu.lendbook.count;cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){ //输出用户所借书的名字cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<"您已借了"<<p->stu.lendbook.count<<"本书!"<<endl;cout<<"您还可以借"<<3-p->stu.lendbook.count<<"本书!"NONE<<endl;cout<<endl;}break;}}if(p==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}void StuManage::mux_stu_book(){StuNode *p;BookNode *q;int i=0,j=0,h=0;for(p=headstu;p!=NULL;p=p->next)i++;cout<<"当前图书馆注册用户数为:"<<i<<endl;for(q=headbook;q!=NULL;q=q->next){h+=q->book.book_mux;j+=q->book.book_con;}cout<<"当前图书馆库存的总书数为:"<<j<<endl;cout<<"已借出图书总数为:"<<h-j<<endl;}void StuManage::lendbook(string ss,string s,int flag)//借书{BookNode *p; StuNode *q;for(q=headstu;q!=NULL;q=q->next){if(q->stu.stu_num==ss){del_sql_stu(q);break;}//丛数据库中删除}if(q==NULL){cout<<YELLOW"此用户不存在!"NONE<<endl;return;}switch(flag){case 0:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_name==s){del_sql_book(p);//从数据库中删除int i=q->stu.lendbook.count;if(i>=3||q->stu.debt>0){if((i>=3)&&(q->stu.debt==0)){cout<<YELLOW"对不起,您借书已超过3本,不能再借!"NONE<<endl;}if((i<3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您因为所借图书超期已欠费,请速交清欠费再借!"NONE<<endl;}if((i>=3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您借书已超过3本且有欠费,不能再借!"NONE<<endl;}}else{//记录下所借书的名字存入用户信息中q->stu.lendbook.bookname[i]=p->book.book_name;time_t now;time(&now);q->stu.lendbook.lend_time=time(&now);//保存借书时间q->stu.lendbook.count++;//所借书数目加一p->book.book_con--;//同样的书的个数减一}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;case 1:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_num==s){del_sql_book(p);//从数据库中删除int i=q->stu.lendbook.count;if(i>=3||q->stu.debt>0){if((i>=3)&&(q->stu.debt==0)){cout<<YELLOW"对不起,您借书已超过3本,不能再借!"NONE<<endl;}if((i<3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您因为所借图书超期已欠费,请速交清欠费再借!"NONE<<endl;}if((i>=3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您借书已超过3本且有欠费,不能再借!"NONE<<endl;}}else{q->stu.lendbook.bookname[i]=p->book.book_name;time_t now;time(&now);q->stu.lendbook.lend_time=time(&now);q->stu.lendbook.count++;p->book.book_con--;//同样的书的个数减一}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}savestu(q);savebook(p);}void StuManage::backbook(string ss,string s,int flag)//还书{BookNode *p; StuNode *q;for(q=headstu;q!=NULL;q=q->next){if(q->stu.stu_num==ss){del_sql_stu(q);break;}//丛数据库中删除}if(q==NULL){cout<<YELLOW"此用户不存在!"NONE<<endl;return;}switch(flag){case 0:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_name==s){del_sql_book(p);//从数据库中删除time_t now;time(&now);q->stu.lendbook.back_time=time(&now);q->stu.lendbook.count--;p->book.book_con++;//同样的书的个数加一time_ts=difftime(q->stu.lendbook.lend_time,q->stu.lendbook.back_time);if(s>2592000)//2592000为一个月的秒数{int t=ceil((s-2592000)/86400);q->stu.debt=t*0.1;}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;case 1:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_num==s){del_sql_book(p);//从数据库删除time_t now;time(&now);q->stu.lendbook.back_time=time(&now);q->stu.lendbook.count--;p->book.book_con++;//同样的书的个数加一//计算借用图书的时间,超过一个月,开始计费time_ts=difftime(q->stu.lendbook.lend_time,q->stu.lendbook.back_time);if(s>2592000)//2592000为一个月的秒数{int t=ceil((s-2592000)/86400);q->stu.debt=t*0.1;}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}savestu(q);savebook(p);}void StuManage::paydebt(string s){StuNode *p;for(p=headstu;p!=NULL;p=p->next)//查找用户{if(p->stu.stu_num==s){p->stu.debt=0;cout<<RED"缴费成功!"NONE<<endl;break;}}if(p==NULL)cout<<YELLOW"该用户不存在!"NONE<<endl;}/****************************************(3)数据保存与下载*******************************************/char stu_str[50];char *change_char(string result){stringstream stream;stream << result; //将string输入流stream >> stu_str; //从i中抽取前面插入的string值return stu_str;}void savestu(StuNode *p)//保存读者信息到数据库{memset((void*)strSQL,0,200);sprintf(strSQL,"insert into reader values(%s,%s,%s,%s,%f,%ld,%ld,%d)",change_char(p->stu.stu_name),change_char( p->stu.stu_phone),change_char(p->stu.password),change_char(p->stu.stu_num),p->stu.debt,(long)(p->stu.lendbook.lend_time),(long)(p->stu.lendbook.back_time),p ->stu.lendbook.count);if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录插入失败!\n");}void savebook(BookNode *p)//保存图书信息到数据库{memset((void*)strSQL,0,200);sprintf(strSQL,"insert into book values(%s,%s,%s,%s,%d,%d)",change_char(p->book.book_name),change_char(p-> book.book_aut),change_char(p->book.book_pre),change_char(p->book.book_nu m),p->book.book_mux,p->book.book_con);if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录插入失败!\n");}void del_sql_stu(StuNode *p)//将读者信息从数据库中删除{memset((void*)strSQL,0,200);sprintf(strSQL,"delete from reader where stu_name='%s'",change_char(p->stu.stu_name));if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录删除失败!\n");}void del_sql_book(BookNode *p)//将图书信息从数据库中删除{memset((void*)strSQL,0,200);sprintf(strSQL,"delete from book where book_name='%s'",change_char(p->book.book_name));if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录删除失败!\n");}/*void savestu()//保存读者信息文件{ofstream outfile("./stu.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;return;}StuNode *p;for(p=headstu;p!=NULL;p=p->next)//数据写入文件{outfile<<p->stu.stu_name<<" "<<p->stu.stu_phone;outfile<<" "<<p->stu.password<<" "<<p->stu.stu_num;outfile<<" "<<p->stu.debt;outfile<<" "<<p->stu.lendbook.lend_time;outfile<<" "<<p->stu.lendbook.back_time;outfile<<" "<<p->stu.lendbook.count;outfile<<" "<<endl;}outfile.close();}void savebook()//保存图书信息文件{ofstream outfile("./book.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;return;}BookNode *p;for(p=headbook;p!=NULL;p=p->next)//数据写入文件{outfile<<p->book.book_name<<" "<<p->book.book_num;outfile<<" "<<p->book.book_pre<<" "<<p->book.book_aut;outfile<<" "<<p->book.book_mux;outfile<<" "<<p->book.book_con;outfile<<" "<<endl;}outfile.close();}*/void loadstu()//从学生数据数据库reader中读取{int i = 0;memset((void*)strSQL,0,100);strcpy(strSQL,"select * from reader");mysql_query(&mysql,strSQL); //查询results = mysql_store_result(&mysql); //获取记录num_fields = mysql_num_fields(results); //获取字段数fileds = mysql_fetch_fields(results); //获取字段数组while((rows = mysql_fetch_row(results)) != NULL) //循环显示{while(i < num_fields){StuNode *p=new StuNode;p->stu.stu_name = (rows[i]?rows[i++]:"NULL");p->stu.stu_phone = (rows[i]?rows[i++]:"NULL");p->stu.password = (rows[i]?rows[i++]:"NULL");p->stu.stu_num = (rows[i]?rows[i++]:"NULL");p->stu.debt = atof(rows[i]?rows[i++]:"NULL");p->stu.lendbook.lend_time = (time_t)(rows[i]?rows[i++]:"NULL");p->stu.lendbook.back_time = (time_t)(rows[i]?rows[i++]:"NULL");p->stu.lendbook.count = atoi(rows[i]?rows[i++]:"NULL");p->next=headstu;//建立用户链表headstu=p;}i = 0;}}void loadbook()//从书数据库中读取{int i = 0;memset((void*)strSQL,0,100);strcpy(strSQL,"select * from book");mysql_query(&mysql,strSQL); //查询results = mysql_store_result(&mysql); //获取记录num_fields = mysql_num_fields(results); //获取字段数fileds = mysql_fetch_fields(results); //获取字段数组while((rows = mysql_fetch_row(results)) != NULL) //循环显示{while(i < num_fields){BookNode *p=new BookNode;p->book.book_name = (rows[i]?rows[i++]:"NULL");p->book.book_aut = (rows[i]?rows[i++]:"NULL");p->book.book_pre = (rows[i]?rows[i++]:"NULL");p->book.book_num = (rows[i]?rows[i++]:"NULL");p->book.book_mux = atoi(rows[i]?rows[i++]:"NULL");p->book.book_con = atoi(rows[i]?rows[i++]:"NULL");p->next=headbook;//建立用户链表headbook=p;}i = 0;}}/*void loadstu()//从学生数据文件读取{ifstream infile("./stu.txt",ios::in);if(!infile){cout<<YELLOW"数据文件不存在,请先建立该文件"NONE<<endl;return;}if(infile.eof()){cout<<YELLOW"数据库为空,请添加数据"NONE<<endl;infile.close();}else{while(infile.peek()!=EOF)//数据从文件读出{StuNode *p=new StuNode;infile>>p->stu.stu_name>>p->stu.stu_phone;infile>>p->stu.password>>p->stu.stu_num;infile>>p->stu.debt>>p->stu.lendbook.lend_time;infile>>p->stu.lendbook.back_time>>p->stu.lendbook.count;if(p->stu.stu_name!=""){p->next=headstu;//建立用户链表headstu=p;}elsedelete p;}infile.close();}}void loadbook()//从书数据文件读取{ifstream infile("./book.txt",ios::in);if(!infile){cout<<YELLOW"数据文件不存在,请先建立该文件"NONE<<endl;return;}if(infile.eof()){cout<<YELLOW"数据库为空,请添加数据"NONE<<endl;infile.close();}else{while(infile.peek()!=EOF)//数据从文件读出{BookNode *p=new BookNode;infile>>p->book.book_name>>p->book.book_num;infile>>p->book.book_pre>>p->book.book_aut;infile>>p->book.book_mux>>p->book.book_con;if(p->book.book_name!=""){p->next=headbook;//建立图书链表headbook=p;}elsedelete p;}infile.close();}}*//****************************************(4)界面部分*******************************************/void MenuAdmin(){cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎来到图书管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 1 增加新书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 2 删除书目$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 3 借书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 4 还书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 5 查询图书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 6 增加读者$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 7 删除读者$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 8 查询用户$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 9 用户交费$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 10 查询用户总数与图书总数$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 0 退出$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>[请选择(输入相应数字)]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;}void MenuStu(){cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎来到图书管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 1 借书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 2 还书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 3 查询图书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 4 个人信息$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 0 退出$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>[请选择(输入相应数字)]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;}int getch()//密码不回显函数1{int c=0;struct termios org_opts, new_opts;int res=0;//----- store old settings -----------。

图书管理系统MySQL设计报告PPT

图书管理系统MySQL设计报告PPT

}
}
return null;
}
管理员登录关键源码
/**
* 管理员进行登录操作的验证方法
* @param numer 登录的账号
* @param pwd
登录的密码
* @return 返回是否登录成功 boolean
*/
public boolean Login(String id,String pwd){
为组长的小组,由组长撘框架,组员写某个类,几个人完成不太相关的各个程序来实现项目的开发! 这次的项目和过去有很大不同,需要组员之间的紧密合作,根据每个人经验的不同,分配不同的任务,边写边交流,促进了组员
之间知识交流,在学习中成长,使项目组成员水平不断进步,提高。这种方式在后面的项目开发中起到了很好的作用!通过讨论可以 统一开发方法和思路,保证项目不同部分的一致性,通过讨论可以采取最适合的方案,使项目最优化!
难点03
用户的还书操作:动态刷新表格信息,还书的右键 操作和批量的还书操作,动态刷新我的可借书籍数 目和最大借书量与我的信用度!
04
管理员界面
界面模块
主要功能
删除操作
更新操作
添加操作
查找操作
面对用户图书管理员 面对用户图书管理员
主要对管理员图书用户的进 行删除操作,从数据库中查 找到学号相关信息进行一系 列的删除操作
return false; } return false;
}
03
用户界面框架
用户模块简介
版块功能
查看个人信息
版块可查看用户的基本信息 打印用户姓名、学号、用户 名、性别以夸赞方式打印!
更新用户基本信息
可更新用户的姓名、性别、 密码 操作!

mysql图书馆管理系统的数据

mysql图书馆管理系统的数据
MySQL图书馆管理系统 的数据
目录 CONTENT
• 图书信息 • 读者信息 • 管理员信息 • 系统设置
01
图书信息
图书类别
图书类别表
用于存储图书的类别信息,包括 类别ID、类别名称和描述。
类别关系表
用于表示图书与类别的关系,记 录哪些图书属于哪些类别。
图书详细信息
图书表
包含图书的基本信息,如ISBN号、 书名、作者、出版日期等。
团体读者
以团体为单位,如学校、 企业等,可批量借阅图书。
读者详细信息
姓名
读者的全名。
性别
读者的性别。
年龄
读者的年龄。
联系方式
读者的联系电话或邮箱。
读者借阅历史
借阅日期
读者借阅图书的日期。
归还日期
读者归还图书的日期。
借阅图书
读者所借阅的图书名称和作者 。
借阅状态
当前图书的借阅状态,如已归 还、逾期未还等。
管理员的联系方式,如电话、邮箱等。
性别
管理员的性别。
登录密码
管理员的登录密码。
管理员操作记录
操作时间
管理员进行操作的时间。
操作内容
管理员进行的操作内容,如添加图书、 删除图书、修改借阅记录等。
操作结果
管理员进行操作后的结果,如成功或 失败。
相关人员
进行该操作的管理员姓名。
04
系统设置
系统参数设置
数据备份与恢复
备份策略
制定数据备份计划,定期对数据库进 行备份,确保数据安全。
恢复方法
根据备份数据,采用不同的恢复策略, 快速恢复系统数据。
感谢您的观看
THANKS
图书详细描述表

图书馆管理系统数据库设计

图书馆管理系统数据库设计

图书馆管理系统数据库设计一、需求分析图书馆管理系统应该能够提供所有借阅者的详细信息,以及馆内库存的详细情况,对借书和还书两大功能进行合理的操作并登记。

图书馆管理系统的主要任务是建立详尽的借阅信息,以及馆内的书种及对应书刊的记录,并对借阅者和其借阅的书籍进行登记。

在不同的图书馆之间,图书管理系统会存在一定的差异。

1.1具体功能模块及描述1、安全性管理:给每个管理员一个用户名和密码,以登录图书馆管理系统,便于身份验证,管理员可以拥有最高权限对数据库进行所有操作。

同样拥有一个用户名和密码,但普通用户只能进行查询操作,看个人信息和图书馆中图书信息不可修改它们。

(1)管理员:增加、删除、查询、修改图书信息;增加、删除、查询、修改读者信息;图书借出、图书归还、逾期还书处理、图书注销(2)读者:查询图书信息、查看借书情况、查询个人信息、历史借书情况、超期还书警告。

2、读者信息管理:该功能模块用于管理相关的读者信息,包括的子功能模块如下图所示3、图1—2 “图书管理”功能模块“图书基本信息设置”用于设置图书的类型及相关的信息,内容包括ISBN、书名、版次、类型、作者、出版社、价格、现存量、库存总量。

“图书档案管理”用于设置图书相关信息,内容包括编号、ISBN、入库时间。

“图书征订”用于订购新图书,内容包括征订编号、ISBN、订购数量、订购日期。

“图书注销”用于注销图书,被注销的图书不可以再借出,并且应将图书信息进行修改。

“图书查看”用于查看某本书的情况。

“图书盘点”输出图书的在库清单供盘点使用。

4、图书流通管理:此功能模块用于管理图书流通环节的相关的操作,包括如下图所示的功能模块。

图1—3 “图书流通管理”功能模块“图书借阅”用于登记读者借阅图书的记录并减少图书在库的库存,登记内容包括借阅编号、图书编号、读者编号、借阅时间、应还时间、续借次数、图书状态等。

图书馆管理员作为借阅者的代操纵借书和还书者。

借书时只要输入借阅的书刊编号就可以,然后输入借阅者的借阅卡号,完成后提交,系统验证借阅者是否有效,若有效借阅请求被接收并处理,系统将库存中图书数量减一,同时将读者信息中借书量加一。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图书管理系统数据库设计一、系统概述1、系统简介图书管理是每个图书馆都需要进行的工作。

一个设计良好的图书管理系统数据库能够给图书管理带来很大的便利。

2、需求分析图书管理系统的需求定义为:1.学生可以直接通过借阅终端来查阅书籍信息,同时也可以查阅自己的借阅信息。

2.当学生需要借阅书籍时,通过账号密码登陆借阅系统,借阅系统处理学生的借阅,同时修改图书馆保存的图书信息,修改被借阅的书籍是否还有剩余,同时更新学生个人的借阅信息。

3.学生借阅图书之前需要将自己的个人信息注册,登陆时对照学生信息。

4.学生直接归还图书,根据图书编码修改借阅信息5.管理员登陆管理系统后,可以修改图书信息,增加或者删除图书信息6.管理员可以注销学生信息。

通过需求定义,画出图书管理系统的数据流图:数据流图二、系统功能设计画出系统功能模块图并用文字对各功能模块进行详细介绍。

系统功能模块图:三、数据库设计方案图表1 、系统 E-R 模型总体 E-R 图:精细化的局部 E-R 图:学生借阅 - 归还 E-R 图:管理员 E-R 图:2、设计表给出设计的表名、结构以及表上设计的完整性约束。

ticket: 存储学生的罚单信息给出在各表上建立的索引以及使用的语句。

student :1.为 stu_id 创建索引,升序排序sql:create index index_id on student(stu_id asc);2.为 stu_name 创建索引,并且降序排序sql:alter table student add index index_name(stu_name, desc); 插入索引操作和结果如下所示:mysql> create index index_id on student(stu_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> alter table student add index index_name(stu_name desc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0 mysql>book:1.为 book_id 创建索引,升序排列 sql:create index index_bid on book(book_id);2.为 book_record 创建索引,以便方便查询图书的登记日期信息,升序: sql:create index index_brecord on book(book_record);插入索引的操作和结果如下所示:mysql> create index index_bid on book(book_id);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> create index index_brecord on book(book_record);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0borrow:1.为 stu_id 和 book_id 创建多列索引: sql:create index index_sid_bid onborrow(stu_id asc, book_id asc); 插入索引的操作和结果如下所示:mysql> create index index_sid_bid on borrow(stu_id asc, book_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0return_table:1.为 stu_id 和 book_id 创建多列索引:sql:create index index_sid_bid on return_table(stu_id asc, book_id asc); 插入索引的操作和结果如下所示:mysql> create index index_sid_bid_r on return_table(stu_id asc, book_id asc); Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0 ticket:1. 为 stu_id 和 book_id 创建多列索引:sql:create index index_sid_bid on ticket(stu_id asc, book_id asc); 插入索引的操作和结果如下所示:mysql> create index index_sid_bid on ticket(stu_id asc, book_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0manager:1.为 manager_id 创建索引:sql:create index index_mid on manager(manager_id); 插入索引的操作和结果如下所示:mysql> create index index_mid on manager(manager_id);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 04、设计视图给出在各表上建立的视图以及使用的语句。

1.在表 student 上创建计算机专业 (cs)学生的视图 stu_cs : sql: create view stu_cs asselect *from student where pro = ‘ cs';操作和结果:mysql> create view stu_cs asselect *from studentwhere stu_pro = 'cs';Query OK, 0 rows affected2. 在表 student, borrow 和 book 上创建借书者的全面信息视图 stu_borrow sql: create view stu_borrow asselect , , , , borrow_date , adddate(borrow_date,30) expect_return_date from student, book, borrowwhere = and = ;操作和结果:mysql> create view stu_borrow asselect , , , , borrow_date , adddate(borrow_date,30) expect_return_date from student, book, borrowwhere = and = ;Query OK, 0 rows affected3.创建类别 1 的所有图书的视图 cs_book : sql: create view cs_book asselect *from bookwhere infrom book_sortwhere sort_id = 1); 操作和结果显示:mysql> create view cs_book asselect *from bookwhere in (select from book_sortwhere sort_id = 1);Query OK, 0 rows affected4.创建个人所有借书归还纪录视图 stu_borrow_return: sql:create view stu_borrow_return as select , , , ,,from student, book, return_tablewhere = and = ;5、设计触发器给出在各表上建立的触发器以及使用的语句。

1.设计触发器 borrow, 当某学生借书成功后,图书表相应的图书不在架上,变为0:sql:create trigger borrow after insert on borrow for each row beginupdate book set book_num = book_num – 1where book_id = ;end 操作与结果显示:mysql> delimiter $$mysql> create trigger trigger_borrow-> after insert on borrow-> for each row-> begin-> update book set book_num = book_num - 1-> where book_id = ;-> end-> $$Query OK, 0 rows affected 在插入表 borrow 之前, book_id = 1 的图书还在架上,为1:学生 1 借了这本书后,在 borrow 中插入了一条记录:在 borrow 中插入这条记录后,book_id =1 的图书,不在架上,为 0: 2.设计触发器 trigger_return, 还书成功后,对应的书籍 book_num 变为 1 : sql:create trigger trigger_return after insert on return_table for each row begin update book set book_num = book_num + 1where book_id = ;end 还书时在 return_table 插入表项:此时图书归还架上:3.定义定时器(事件) eventJob ,每天自动触发一次,扫描视图stu_borrow ,若发现当前有预期归还时间小于当前时间,则判断为超期,生成处罚记录,这个定时器将每天定时触发存储过程 proc_gen_ticket : sql: create event if not exists eventJob on schedule every 1 DAY /* 每天触发 */on completion PRESERVEdo call proc_gen_ticket(getdate()); /* 调用存储过程 */ set global event_scheduler = 1;alter event eventJob on completion preserve enable; /* 开启定时器 */ 操作和结果显示:1). 学生 1 借了图书 1,生成借书记录 stu_borrow 视图,如下:2). 当他在 1 月 27 日前还书时,没有生成罚单:3). 当他在 1 月 27 日后还书时,生成罚单:4.设计触发器 trigger_credit ,若处罚记录超过 30 条,则将这个学生的诚信级设置为0,下次不允许借书: sql:create trigger trigger_creditafter insert on ticketfor each rowbeginif (select count(*) from ticket where stu_id=>30 then update student setstu_integrity = 0 where stu_id = ; end if;end 操作和结果显示,测试时选择插入 ticket 项大于 3,因为 30 太大了,不容易测试:学生 1 超过 3 次超期归还图书后,产生了 4 条罚单:此时触动触发器trigger_credit ,将学生 1 的诚信级设置为 0 :四、应用程序设计与编码实现 1、系统实现中存储函数和存储过程的设计要求给出功能描述和代码。

相关文档
最新文档