图书管理系统数据库设计MYSQL实现(20210123135943)
- 格式:docx
- 大小:15.04 KB
- 文档页数:8
海南大学应用科技学院数据库系统原理课程设计报告————图书管理系统组长:学号:组员:学号:组员:学号:组员:学号:指导老师:起始时间:起始时间:目录第一章概述 (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的取值有:”逾期归还”、”丢失赔偿”、”丢失赔书”等一个借书单可以同时借阅多本不同的书。
图书管理系统数据库设计一、系统概述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)在借阅记录表中是唯一的,不能重复。
.#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 -----------。
图书馆管理系统数据库设计一、需求分析图书馆管理系统应该能够提供所有借阅者的详细信息,以及馆内库存的详细情况,对借书和还书两大功能进行合理的操作并登记。
图书馆管理系统的主要任务是建立详尽的借阅信息,以及馆内的书种及对应书刊的记录,并对借阅者和其借阅的书籍进行登记。
在不同的图书馆之间,图书管理系统会存在一定的差异。
1.1具体功能模块及描述1、安全性管理:给每个管理员一个用户名和密码,以登录图书馆管理系统,便于身份验证,管理员可以拥有最高权限对数据库进行所有操作。
同样拥有一个用户名和密码,但普通用户只能进行查询操作,看个人信息和图书馆中图书信息不可修改它们。
(1)管理员:增加、删除、查询、修改图书信息;增加、删除、查询、修改读者信息;图书借出、图书归还、逾期还书处理、图书注销(2)读者:查询图书信息、查看借书情况、查询个人信息、历史借书情况、超期还书警告。
2、读者信息管理:该功能模块用于管理相关的读者信息,包括的子功能模块如下图所示3、图1—2 “图书管理”功能模块“图书基本信息设置”用于设置图书的类型及相关的信息,内容包括ISBN、书名、版次、类型、作者、出版社、价格、现存量、库存总量。
“图书档案管理”用于设置图书相关信息,内容包括编号、ISBN、入库时间。
“图书征订”用于订购新图书,内容包括征订编号、ISBN、订购数量、订购日期。
“图书注销”用于注销图书,被注销的图书不可以再借出,并且应将图书信息进行修改。
“图书查看”用于查看某本书的情况。
“图书盘点”输出图书的在库清单供盘点使用。
4、图书流通管理:此功能模块用于管理图书流通环节的相关的操作,包括如下图所示的功能模块。
图1—3 “图书流通管理”功能模块“图书借阅”用于登记读者借阅图书的记录并减少图书在库的库存,登记内容包括借阅编号、图书编号、读者编号、借阅时间、应还时间、续借次数、图书状态等。
图书馆管理员作为借阅者的代操纵借书和还书者。
借书时只要输入借阅的书刊编号就可以,然后输入借阅者的借阅卡号,完成后提交,系统验证借阅者是否有效,若有效借阅请求被接收并处理,系统将库存中图书数量减一,同时将读者信息中借书量加一。
图书管理系统地数据库设计一:需求分析:1:图书管理系统地功能图2:系统说明:1.不同地读者类型对不同地图书类型借阅地天数不同,不同地读者可借阅地图书总数不同.2.当图书借阅超期后、弄污、遗失会有相应地处罚.3.同样地图书在管理系统中会有多本,每本之间可以区分.4.用户注册需经系统管理员同意后才可借阅图书.5.读者对预约图书有优先地借阅权.6.读者可以对自己地联系方式信息进行修改.7.图书卡或图书遗失后可申请挂失,挂失后将不能对图书进行借还操作.3:分析各功能所需要用到地数据.用户登录:用户:用户名,密码用户注册:用户:用户名,密码,学号,姓名,系、专业,年级,电话号码,邮箱,性别图书检索:图书:图书号, ISBN号,书名,作者,价格,出版社,出版日期,简介查询借阅信息:借阅:图书,借阅时间,应归还时间,归还时间,续借次数图书续借:续借:用户名,图书,续借时间图书挂失:图书挂失:图书,用户名,挂失时间,取消挂失时间图书卡挂失:图书卡挂失:用户名,挂失时间,取消挂失时间预约图书:预约:用户名,图书名,预约时间,借书时间,是否取消图书管理:系统管理员:帐号,密码,姓名,性别,年龄,职称图书管理员:帐号,密码,姓名,性别,年龄,职称同意读者注册:用户注册:是否同意罚款管理:罚款:用户名,图书,罚款金额,处罚原因,罚款时间借书:用户,图书,借书时间还书:图书,还书时间书掉了,罚款:4:分析实体和实体间地联系实体:读者、图书、系统管理员、图书管理员、读者类型、图书类型联系:1.图书类型图书属于2.读者类型读者属于3.读者图书借阅,预约,挂失,罚款,续借4.图书管理员图书借,还,罚款5.读者读者挂失二:系统地概念模型设计. 每个实体地E -R 图<未完).读者类型读者类型编号类型名称读者读者号姓名不同实体间地联系<未完):读者类型读者属于挂失1m 11挂失时间取消挂失时间综合地E —R 图读者类型读者属于挂失1m 图书类型图书属于1m 限制mn借阅mn续借m n挂失mn预约mn图书管理员系统管理员还mn借mn罚款rn m11三:数据模型地设计:1、把上面地概念模型转换为关系模型: 实体地转换:读者类型<类型编号,类型名称,可借阅地图书数)读者<读者号,密码,姓名,系、专业,年级,电话号码,邮箱,性别,类型编号) 图书类型<类型编号,类型名称)图书<图书号, ISBN 号,书名,作者,价格,出版社,出版日期,简介,类型编号) 图书管理员<帐号,密码,姓名,性别,年龄,职称)系统管理员<帐号,密码,姓名,性别,年龄,职称)联系地转换:借阅限制<读者类型编号,图书类型编号,借阅天数)图书卡挂失<读者号,挂失时间,取消挂失时间)借阅<读者号,图书号,借阅时间,应归还时间,归还时间,)借书<,图书号,读者号,借出时间)还书<图书管理员编号,图书号,还书时间)续借<读者号,图书号,续借时间)图书挂失<读者号,图书号,挂失时间,取消挂失时间)预约<读者号,图书号,预约时间)罚款<图书管理员,读者号,图书号,罚款时间,罚款金额,罚款原因)2、关系地优化:对上述关系模式地优化图书管理员和系统管理员地关系模式相同,为了减少关系模式把这两个关系模式合并为一个关系模式.图书管理员<帐号,密码,姓名,性别,年龄,职称)系统管理员<帐号,密码,姓名,性别,年龄,职称)管理员<帐号,密码,姓名,性别,年龄,职称,类型)借阅地数据处理与三个关系模式:借阅,借书,还书,在借阅地表中包括除了管理员以外地所有信息,则把这三个关系模式进行合并:借阅<读者号,图书号,借阅时间,应归还时间,归还时间,)借书<管理员编号,图书号,读者号,借出时间)还书<图书管理员编号,图书号,还书时间)借阅<读者号,图书号,借阅时间,应归还时间,归还时间,借出图书管理员编号,还出地图书管理员编号)3、最后地关系模式如下:1.读者类型<类型编号,类型名称,可借阅地图书数)2.读者<读者号,密码,姓名,系、专业,年级,电话号码,邮箱,性别,类型编号)3.图书类型<类型编号,类型名称)4.图书<图书号, ISBN号,书名,作者,价格,出版社,出版日期,简介,类型编号)5.管理员<帐号,密码,姓名,性别,年龄,职称,类型)6.借阅限制<读者类型编号,图书类型编号,借阅天数)7.借阅<读者号,图书号,借阅时间,应归还时间,归还时间,借出图书管理员编号,还出地图书管理员编号)8.续借<读者号,图书号,续借时间)9.图书卡挂失<读者号,挂失时间,取消挂失时间)10.图书挂失<读者号,图书号,挂失时间,取消挂失时间)11.预约<读者号,图书号,预约时间)12.罚款<图书管理员,读者号,图书号,罚款时间,罚款金额,罚款原因)四:对每一个关系模式地具体定义每一个关系对应地表名,每一个属性对应地字段名,类型,宽度,是否主键,是否可为空,默认值,说明等.表名或字段名用字母、数字或者下划线组成.不同中文.1.读者类型<类型编号,类型名称,可借阅地图书数)ReaderType表2.读者<读者号,密码,姓名,系、专业,年级,电话号码,邮箱,性别,读者类型编号)Reader表3.图书类型<类型编号,类型名称)BookType表4.图书<图书号, ISBN号,书名,作者,价格,出版社,出版日期,简介,类型编号)Book表5.管理员<帐号,密码,姓名,性别,年龄,职称,类型)Manager表6.借阅限制<读者类型编号,图书类型编号,借阅天数)BorrowLimit表7.借阅<读者号,图书号,借阅时间,应归还时间,归还时间,借出图书管理员编号,还出地图书管理员编号)Borrow表8.续借<读者号,图书号,续借时间)Renew表9.图书卡挂失<读者号,挂失时间,取消挂失时间)RcardLoss表10.图书挂失<读者号,图书号,挂失时间,取消挂失时间)BookLoss表11.预约<读者号,图书号,预约时间)Prebook表12.罚款<图书管理员,读者号,图书号,罚款时间,罚款金额,罚款原因)Punishment表。
图书管理系统数据库设计《数据库原理与应⽤》课程设计图书管理系统数据库设计1.概述1.1. 项⽬背景随着信息化的发展,计算机技术已慢慢渗透到我们的⽇常⽣活当中。
对于学⽣宿舍管理系统也开始⽤到计算机技术,这样有助于⽅便管理员的管理和维护⼯作,⽽我设计的课题就是学⽣宿舍管理系统,采⽤Sql数据库技术并且从我们的⽣活实际出发,来设计这个数据库。
充分的运⽤数据库知识来对学⽣公寓的信息以及学⽣的基本信息可以查询及修改。
最终可以⽅便管理端管理每个宿舍点,客户端实现学⽣信息的查询,货物出楼登记、查询,来访者的查询、登记等的基本功能。
1.2. 系统说明了解⽬前宿舍管理的现状、存在的问题及员⼯的想法。
通过实地调查和问答-记录的⽅式了解⽬前急需改善的⼯作模式和管理⽅式是什么,并充分了解宿舍管理的⼯作业务流程,记录和处理相关的数据供⽇后系统的分析使⽤。
2.需求分析2.1. 需求分析1.需求分析经过实际分析调查,⼀个学⽣宿舍管理系统主要是要⽅便宿舍管理⼈员的⼯作,提⾼其⼯作效率,不仅可以⽅便于⼴⼤同学,以及教师和其它相关⼈员。
最终实现更加⽅便的管理学⽣宿舍。
管理端主要实现管理⼯作,是为宿舍管理中⼼的⾼级管理者使⽤的,主要实现⽤户的管理,学⽣的管理,⼯作⼈员的管理。
管理包括:建⽴、删除、查询、显⽰等基本⼯作。
客户端是运⾏在每⼀栋宿舍的管理点,⽅便其宿舍管理⼈员、学⽣及其他⼈员。
客户端实现了学⽣的信息查询,货物出楼登记、查询,来访者的查询、登记。
2.系统功能分析本系统主要有以下功能要求:系统功能:新建⽤户、删除⽤户,更改密码、退出系统数据库操作功能: 精确查询、浏览查询、修改记录,删除记录、建⽴记录其他3.功能描述:(1)能够⽤户、院系、专业、⼯作⼈员的录⼊、查询、游览操作且保证数据的完整性。
(2)能够对学⽣的基本情况进⾏查询、修改、浏览操作。
(3)能对来访者进⾏登记、查询、修改操作。
(4)能对货物出楼进⾏登记、查询、修改操作。
mysql创建图书馆书库表格,mysql图书馆管理系统的数据库《mysql图书馆管理系统的数据库》由会员分享,可在线阅读,更多相关《mysql图书馆管理系统的数据库(16页珍藏版)》请在⼈⼈⽂库⽹上搜索。
1、mysql 图书馆管理系统的数据库,数据库 library,操作员表 operator 书库 books 学⽣信息表 students_information 操作过程表process,操作员表 operator,操作员表 operator,create table operator ( id char(9) not null primary key, name varchar(10) not null ); insert into operator values (100001230,aa),(100001231,bb),(100001232,cc),(100001233,dd),(100。
2、001234,ee),(100001235,ff);,书库 books,书库 books,create table books ( title varchar(20) not null, date_of_publication date, author varchar(15) not null, ISBN char(13) not null primary key, number_of_copies int not null, position varchar(30) ); insert into books values (没有任何借⼝,2008-11-01,杰伊.瑞芬博瑞,97875006。
3、83858,20,⼆楼 成功/激励),(钢铁是怎样炼成的,1997-05-12,奥斯特洛夫斯基,9787530125403,25,⼆楼 成功/激励),(⽔浒传,1998-11-15,施耐庵,9787530112454,10,⼀楼⽂学类),(⼩时代,2009-11-15,郭敬明,9782345612454,1,⼀楼⽂学类);,学⽣信息表 students_information,学⽣信息表 students_information,create table students_information ( id char(9) not null primary key, name varchar(1。
基于MySQL的图书馆信息管理系统设计一、本文概述明确本文的研究目标,即设计一个基于MySQL的图书馆信息管理系统,并介绍研究的主要内容。
1、1随着信息技术的飞速发展,图书馆作为知识的宝库,其管理效率和服务质量的高低直接影响着读者的阅读体验。
传统的图书馆管理模式已经难以满足现代图书馆高效、精准、便捷的管理需求。
因此,开发一套基于MySQL的图书馆信息管理系统显得尤为重要。
本文旨在探讨基于MySQL的图书馆信息管理系统的设计,包括系统架构、功能模块、数据库设计等,以期提高图书馆的管理效率和服务水平,为读者提供更加优质的阅读服务。
MySQL作为一种广泛使用的开源关系型数据库管理系统,具有性能稳定、可靠性高、易用性强等特点,非常适合用于构建图书馆信息管理系统。
通过MySQL,我们可以实现图书信息的存储、查询、更新、删除等操作,从而实现对图书馆资源的有效管理和利用。
本文首先对图书馆信息管理系统的需求进行分析,明确系统的功能模块和数据库设计;详细介绍系统的架构设计和数据库设计,包括数据库表的创建、索引优化、数据备份与恢复等;对系统的实现进行阐述,并给出相应的结论和展望。
通过本文的研究,我们可以为图书馆信息管理系统的设计提供有益的参考和借鉴,推动图书馆管理向数字化、智能化方向发展,为广大读者提供更加便捷、高效的服务。
2、2在设计基于MySQL的图书馆信息管理系统之前,对系统需求进行深入分析是至关重要的。
通过需求分析,我们可以明确系统的功能要求、性能要求以及用户界面的需求,从而确保最终设计出的系统能够满足图书馆的实际工作需求。
我们需要明确图书馆信息管理系统的核心功能。
这包括但不限于图书的借阅与归还、图书信息的查询与更新、读者的信息管理、图书的采购与入库等。
系统还应支持对图书借阅情况的统计与分析,以便图书馆能够及时了解图书的流通情况,为图书采购和管理提供数据支持。
性能需求方面,系统需要保证高可用性、稳定性和安全性。
基于数据库设计的图书馆管理系统图书馆管理系统是一种用于管理图书馆资料和相关信息的软件系统,具有图书借阅管理、读者管理、图书馆藏管理等功能。
在当前信息化社会,图书馆为了更好地服务读者,更有效地利用资源,提高工作效率,推行数字化图书馆建设,越来越多地采用计算机技术来管理馆藏和提供服务。
1. 数据库设计图书馆管理系统是一种复杂的信息管理系统,包含了多种对象和数据信息。
因此,数据库设计是本系统设计的重要环节之一。
在数据库设计中,需考虑到数据存储的安全、有效和便捷,以及应用系统的高效运行和可扩展性等因素。
本系统采用三层架构模式,即表示层、业务逻辑层和数据访问层。
其中,表示层为了让用户直观地、方便地操作系统,通常采用Web页面方式表现。
业务逻辑层负责完成业务逻辑的处理,包括数据验证、处理和业务规则的实施等。
而数据访问层则是实现对数据库访问的封装,完成数据获取的过程。
(2) ER模型设计在ER模型中,图书馆管理系统主要由三个实体:读者、书籍和借阅,它们之间的关系如下图所示。
其中,读者和书籍是多对多关系,借阅与读者和书籍都有关系。
在ER模型中,每个实体都有特定的属性,属性为二元组(名称,类型)。
读者(Reader){A1, A2, A3, ……}书籍(Book){B1, B2, B3, ……}借阅(Borrow){A1, B1, LendDate, ReturnDate, Operator}(3)关系型数据库设计在本系统设计中,采用MySQL关系型数据库。
在MySQL中,读者、书籍和借阅分别有不同的表格,它们之间的关系是通过表之间的外键关联而实现的。
读者表格(Reader):ReaderNo:读者编号Name:读者姓名Gender:性别ReaderType:读者类型Valid:读者有效性……书籍表格(Book):BookNo:书籍编号BookName:书籍名称Author:作者Publisher:出版社PublishDate:出版日期Keywords:关键字……2. 系统功能设计(1)读者管理读者管理包括读者的添加、修改、查询和删除等操作。
图书管理系统数据库设计一、系统概述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、系统实现中存储函数和存储过程的设计要求给出功能描述和代码。