重庆网站建设公司海口,千图网免费素材图库设计,软装设计公司名字,郑州网站托管服务第1章 概述
1.1项目背景
随着科技的发展#xff0c;尤其是计算机技术的迅猛发展#xff0c;图书馆管理的问题从以往的人工管理#xff0c;到现在的电脑化#xff0c;系统化#xff0c;是对图书馆管理方法的质的飞跃#xff0c;这些技术不仅让图书馆管理变得更加方便、快…第1章 概述
1.1项目背景
随着科技的发展尤其是计算机技术的迅猛发展图书馆管理的问题从以往的人工管理到现在的电脑化系统化是对图书馆管理方法的质的飞跃这些技术不仅让图书馆管理变得更加方便、快捷、提高效率对于用户来说也是有极大地帮助系统化的图书馆让人们可以更方便的去找书借书还书等等一系列的功能从而让图书馆实现了它的最大化价值。同时对于图书馆本身来说通过系统它可以提高图书管理的效率,也是图书馆的科学化、正规化管理的最好方法。所以图书馆管理系统的研究开发是一个特别值得去做的研究。
1.2编写目的
根据所学的数据库系统与程序设计的知识针对图书管理系统进行系统的需求分析系统设计数据库设计编码测试等完成题目要求的功能从而达到掌握开发一个小型数据库的目的。
1.3软件定义
本系统采用VC6.0集成开发系统作为前台开发Windows窗体控制平台采用SQLServer2008作为后台数据库的管理程序。
1.4开发环境
本系统适合运用于图书馆针对管理借阅者借阅图书。
下面简单介绍一下本系统的运行环境
操作系统Windows 7
数据库服务器Microsoft SQL Server2008
编程工具VC6.0
绘图工具Microsoft Visio 2010
第2章 需求分析
2.1问题陈述
2.1.1基本功能
图书管理系统实现读者信息的借阅证号、姓名、年龄、职业等信息的管理实现对图书信息的图书号、作者名、出版社、单价等信息点的管理实现借阅信息的借阅证号、书号、时间等信息的管理实现对逾期读者的管理
2.1.2数据库需要实现的功能
创建存储过程查询图书的数量创建视图查询借阅逾期信息创建触发器当增加、删除、修改读者信息或者图书信息时自动修改相应表的数据更新建立数据库相关表之间的参照完整性约束。
2.1.3系统需要实现的功能
能实现以下主要功能
l 图书基本情况的录入、修改、删除等基本操作。
l 实现借书功能。
l 实现还书功能。
l 实现对所有购进图书的分类查询和分类统计。
l 能够按书名、作者等分类查询现有图书的数量。
l 对超期的情况能自动给出提示信息。
2.2业务处理流程 2.3数据流图 2.4数据字典
1图书管理员
简述图书馆管理人员
组成
Admin_idCHAR(7)Admin_passwordCHAR(8)Admin_nameNCHAR(5)
有关处理逻辑系统管理权限的代表。
2读者
简述图书馆借书看书的对象
组成
Reader_idCHAR(7)Reader_passwordCHAR(8)Reader_nameNCHAR(5)Reader_sexNCHAR(1)Reader_ageTINYINTReader_CompanyNVARCHAR(20)Reader_workNVARCHAR(20)
有关处理逻辑图书馆读者权限的代表。
3图书信息表
简述图书馆的书目
组成
Book_idCHAR(6)Book_nameNVARCHAR(20)Book_writerNCHAR(5)Book_publisherNVARCHAR(20)Book_priceSMALLINTBook_introductionNVARCHAR(100)Book_typeNVARCHAR(20)
有关处理逻辑图书馆其他实体对书目的操作。
4借阅信息表
简述图书馆读者借书还书的记录
组成
Reader_idCHAR(7)Book_idCHAR(6)Borrow_timeDATE
有关处理逻辑图书馆的读者与图书之间的关系。
5图书馆采购员
简述图书馆图书采购的工作人员
组成
Shopper_idCHAR(7)Shopper_nameNCHAR(5)Shopper_sexNCHAR(1)Shopper_ageTINYINT
有关处理逻辑图书馆图书增添处理。
6图书采购信息表
简述图书馆采购记录
组成
Shopper_idCHAR(7)Book_idCHAR(6)Shop_timeDATE
有关处理逻辑图书馆采购员与图书的关系。
7图书历史借阅表
简述借书的历史的记录
组成
Reader_idCHAR(7)Book_idCHAR(6)Borrow_timeDATEReturn_timeDATE
有关处理逻辑图书馆的读者与图书之间的关系。
第3章 概念结构设计
3.1ER模型图
3.1.1实体ER图 3.1.2实体联系ER图 3.1.3完整ER模型图 第4章 逻辑结构设计
4.1关系模式
针对图书管理信息系统的需求通过对借书流程的分析以及对ER图的分析设计如下面的关系模式
1读者信息表包括的数据项有(借阅证号、密码、姓名、性别、年龄、所在单位、职业)
2图书信息表包括的数据项有(书号、书名、作者、出版社、价格、内容简介、图书类型、库存)
3借书信息表包括的数据项有(书号、借书时间、借阅证号)
4还书信息表包括的数据项有(书号、还书时间、借阅证号)
5管理员信息表包括的数据项有(管理员号、密码、姓名)
6采购员信息表包括的数据项有(采购员号、姓名、性别、年龄)
7采购信息表包括的数据项有(采购员号、书号、采购时间)
4.2规范化基本表
经过对初始关系模式的规范化处理以下关系模式中不存在部分函数依赖和传递函数依赖已经达到3NF。
1读者信息表包括的数据项有(借阅证号、密码、姓名、性别、年龄、所在单位、职业)
2图书信息表包括的数据项有(书号、书名、作者、出版社、价格、内容简介、图书类型)
3借阅信息表包括的数据项有(书号、借阅证号、借书时间)
4管理员信息表包括的数据项有(管理员号、密码、姓名)
5采购员信息表包括的数据项有(采购员号、姓名、性别、年龄)
6采购信息表包括的数据项有(采购员号、书号、采购时间)
7借阅历史表包括的数据项有(书号、借阅证号、借书时间、还书时间)
模型中画双划线的是主码并且借阅证号和书号是借阅关系的外码采购员号和书号是采购关系的外码。书号、借阅证号、借书时间是借阅历史表的外码
第5章 物理结构设计
5.1数据库结构
本系统数据库表的物理设计是通过SQL命令来创建数据库的对表的数据项以及参照完整性约束进行了设计。如下是部分表创建命令
go
use Library_342
--创建读者表
CREATE TABLE Reader (Reader_id CHAR(7) PRIMARY KEY,Reader_password CHAR(8) NOT NULL,Reader_name NCHAR(5) NOT NULL,Reader_sex NCHAR(1) DEFAULT 男, Reader_age TINYINT,Reader_Company NVARCHAR(20),Reader_work NVARCHAR(20))
--创建图书表
CREATE TABLE Book (Book_id CHAR(6) PRIMARY KEY,Book_name NVARCHAR(20) NOT NULL,Book_writer NCHAR(5),Book_publisher NVARCHAR(20),Book_price SMALLINT,Book_introduction NVARCHAR(100),Book_type NVARCHAR(20) NOT NULL,Book_num int not null,Book_allnum int not null)5.2视图、索引、主关键字、权限
1视图
---创建超期罚款信息视图
CREATE VIEW view_overdue(Reader_id,Reader_name,Book_name,Borrow_time,超期,罚款)
AS
SELECT Reader.Reader_id,Reader.Reader_name,Book.Book_name,Borrow.Borrow_time,DATEDIFF(DAY,Borrow.Borrow_time,CONVERT (date,GETDATE(),112))-30 ,(DATEDIFF(DAY,Borrow.Borrow_time,CONVERT (date,GETDATE(),112))-30)*0.05
FROM Reader,Book,Borrow
WHERE Borrow.Book_idBook.Book_id ANDReader.Reader_idBorrow.Reader_id ANDDATEDIFF(DAY,Borrow.Borrow_time,CONVERT (date,GETDATE(),112))30
--创建图书借阅数量视图
CREATE VIEW view_hotbook(Book_id,Book_name,当前借阅数量,被借阅总次数)
AS
SELECT Book.Book_id,Book.Book_name,Book.Book_allnum-Book.Book_num,Book_allnum-Book.Book_numCOUNT(History.Book_id)
FROM Book,History
WHERE History.Book_idBook.Book_id
GROUP BY Book.Book_id,Book_name,Book.Book_allnum-Book.Book_num2索引
--在图书表上创建关于“图书类型”列的一个升序非聚集索引
CREATE INDEX BookType ON Book(Book_type);3主关键字
详见数据库关系图
4权限
CREATE LOGIN login2 with passwordabcd1234, default_databaseLibrary_342
CREATE USER user2 FOR LOGIN login2 with default_schemadbo
GRANT INSERT,SELECT,UPDATE,DELETE
ON Borrow
TO user25.3数据库关系图 5.4对数据库的操作
1插入、修改、删除
这些基本操作可通过在数据库中直接操作也可以在编写的图书管理系统中进行部分操作
2触发器
--创建TR_Borrow_insert_8_Booknum_exits触发器每次最多能借8本书,判断图书库存,判断是否已借该书并对图书库存进行更新
CREATE TRIGGER TR_Borrow_insert_8_Booknum_exits
ON Borrow AFTER insert
AS
IF (SELECT COUNT(Borrow.Reader_id) FROM Borrow,inserted
WHERE Borrow.Reader_idinserted.Reader_id)8
BEGIN PRINT 最多只能借8本书! ROLLBACK
END
else IF (SELECT Book.Book_num FROM Book,inserted
WHERE Book.Book_idinserted.Book_id)0
BEGIN PRINT 该图书库存不足! ROLLBACK
END
else
BEGIN UPDATE BookSET Book_numBook_num-1WHERE Book_id in (SELECT Book_idFROM inserted)PRINT 图书库存已更新!
END--创建TR_Borrow_Delete_Booknum触发器当删除借阅记录时,对图书库存进行更新并将借阅记录记录到借阅历史表中
CREATE TRIGGER TR_Borrow_Delete_Booknum
ON Borrow AFTER delete
AS
BEGIN UPDATE BookSET Book_numBook_num1WHERE Book_id in (SELECT Book_idFROM deleted)PRINT 图书库存已更新! INSERT INTO History(Reader_id,Book_id,Borrow_time)SELECT deleted.Reader_id,deleted.Book_id,deleted.Borrow_timeFROM deleted
END--创建TR_History_insert_Return_time触发器当还书时还书时间不能比借书时间早
CREATE TRIGGER TR_History_insert_Return_time
ON History AFTER INSERT
AS
IF (SELECT DATEDIFF(DAY,inserted.Return_time,inserted.Borrow_time)
FROM inserted,History
WHERE History.Book_idinserted.Book_id AND History.Reader_idinserted.Reader_id) 0
BEGIN PRINT 归还日期不能比借书日期早! ROLLBACK
END--创建TR_Reader_Delete_Borrow触发器当删除读者时,将该读者的借阅信息删除
CREATE TRIGGER TR_Reader_Delete_Borrow
ON Reader INSTEAD OF delete
AS
BEGIN DELETEFROM BorrowWHERE Borrow.Reader_id in(SELECT Reader_idFROM deleted)PRINT 该读者的借阅信息已删除! DELETEFROM HistoryWHERE History.Reader_id in(SELECT Reader_idFROM deleted)PRINT 该读者的借阅历史已删除! DELETEFROM ReaderWHERE Reader_id in(SELECT Reader_idFROM deleted)PRINT 该读者已删除!
END--创建TR_Book_Delete_Borrow_History触发器当删除图书时,将该图书的借阅信息删除
CREATE TRIGGER TR_Book_Delete_Borrow_History
ON Book INSTEAD OF delete
AS
BEGIN DELETEFROM BorrowWHERE Borrow.Book_id in (SELECT Book_idFROM deleted)PRINT 该图书的借阅信息已删除! DELETEFROM HistoryWHERE History.Book_id in (SELECT Book_idFROM deleted)PRINT 该图书的被借阅历史已删除! DELETEFROM BookWHERE Book_id in(SELECT Book_idFROM deleted)PRINT 该图书已删除!
END3存储过程
--存储过程查询某类图书的数量
CREATE PROCEDURE Book_Type_numBook_type NVARCHAR(20)自然科学
ASSELECT Book_type, COUNT(Book.Book_id) 该类型的图书数量(一样的书只算一本)FROM BookWHERE Book.Book_type Book_type GROUP BY Book_type--存储过程在Reader中插入一行数据其各列数据均通过输入参数获得
CREATE PROC p_InsertReaderReader_id CHAR(7) ,Reader_password CHAR(8),Reader_name NCHAR(5) ,Reader_sex NCHAR(1) , Reader_age TINYINT,Reader_Company NVARCHAR(20),Reader_work NVARCHAR(20)
ASINSERT INTO Reader
VALUES(Reader_id,Reader_password,Reader_name,Reader_sex,Reader_age,Reader_age,Reader_work)第6章 物理结构设计
6.1系统功能结构图 6.2功能描述
1用户登录选择登录系统的用户类型进行不同的功能使用
2查看图书信息查看数据库中各种图书的信息进行其他操作
3修改个人信息对数据库中的个人信息进行更新
4还书借阅信息的更新
5借书插入借阅信息
6查看借阅记录输出个人的借阅情况
7读者管理对读者进行增、删、改操作
8图书管理对图书进行增、删、改操作
9查看当前逾期信息查看数据库中当前用户逾期罚款信息
第7章 代码设计和界面设计
7.1代码设计
1数据库的连接本系统是通过VC嵌入式SQL来进行数据库的连接的主要代码如下
int CONNECT()
{EXEC SQL CONNECT TO MS-20170511WSQV.Library_342 USER abc.abcd; if(sqlca-sqlcode0) { printf(Connection to SQL Server established\n); }else{ printf(ERROR: Connection to SQL Server failed\n);return 1; }
}int DISCONNECT()
{EXEC SQL DISCONNECT ALL;if(sqlca-sqlcode0) { printf(DISConnection to SQL Server established\n); }else{ printf(ERROR: DISConnection to SQL Server failed\n);return 1; } return 1;
}2主函数main系统程序的主函数设计通过调用其他函数来实现管理图书系统
int main()
{int select_num;int login_num;CONNECT();start_meun();while(1){scanf(%d,select_num);switch(select_num){case 1:break;case 0://退出系统{system(cls);DISCONNECT();printf( ------------------------------------------------------------\n);printf( - 感谢使用再见 - \n);printf( ------------------------------------------------------------\n);system(pause);exit(0);}default:printf(输入错误请重新输入:);continue;}break;}while(1){login_meun();//登录界面函数login_numlogin ();//登录处理switch(login_num){case 1:admin();break;case 2:reader();break;}}
}3头文件包含头文件、全局变量定义以及函数声明
#includestdio.h
#includestdlib.h
#includestring.h
char LReader_num[20];
/**********函数声明**********/
int CONNECT();
int DISCONNECT();
void start_meun(); //初始界面
void login_meun(); //登录界面函数
int login (void); //用户登录函数
void admin_menu(); //管理员功能界面函数
void reader_meun(); //读者功能界面函数
void admin(); //管理员函数
void reader(); //读者函数
void admin_reader(); //管理读者函数
void admin_book(); //管理图书函数
void allborrow(); //查看借阅情况函数
void overdue(); //超期罚款函数
void adminreader_menu();
void adminbook_menu();
void addreader(); //增加读者函数
void deletereader(); //删除读者函数
void updatereader(); //修改读者函数
void addbook(); //增加图书函数
void deletebook(); //删除图书函数
void updatebook(); //修改图书函数
void borrowbook(); //借书函数
void returnbook(); //还书函数
void searchpersonborrow();//查看个人借阅函数
void updateme(); //修改个人信息函数
void allbook(); //查看所有图书函数
void allreader(); //查看所有读者函数4用户登录函数本系统用户分为两类一类是读者一类是管理员分别拥有不一样的功能权限区分两者的方法是链接数据库查询登录用户是否在数据库中的读者表中或者管理员表中代码如下
for(;;)
{printf(管理员账号);scanf(%s,admin_num);printf(登陆密码);scanf(%s,admin_pass);EXEC SQL SELECT Admin_id,Admin_password INTO :admin_num,:admin_passFROM AdminWHERE Admin_id:admin_num AND Admin_password:admin_pass;if(sqlca-sqlcode!0){ printf(发生了错误%d\n,SQLCODE);count1;printf(帐号密码错误请重新输入\n);if(count3){system(cls);DISCONNECT();printf( ------------------------------------------------------------\n);printf( - 感谢使用再见 - \n);printf( ------------------------------------------------------------\n);system(pause);exit(0);}continue;} printf(登录成功\n);break;
}读者用户登录同上
5读着管理管理员对于读者的管理操作包括增删改增加读者代码如下
void addreader()
{char YN;printf(输入读者的ID);scanf(%s,LReader_id);printf(输入读者的密码);scanf(%s,LReader_password);printf(输入读者的名字);scanf(%s,LReader_name);printf(输入读者的性别);scanf(%s,LReader_sex);printf(输入读者的年龄);scanf(%d,LReader_age);printf(输入读者的所在单位);scanf(%s,LReader_Company);printf(输入读者的职业);scanf(%s,LReader_work);EXEC SQL INSERT INTO Reader VALUES(:LReader_id,:LReader_password,:LReader_name,:LReader_sex,:LReader_age,:LReader_Company,:LReader_work);if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; } else{printf(增加成功);}printf(是否需要打印(Y/N):);do{scanf(%s,YN);}while(YN ! N YN ! n YN ! Y YN ! y);if (YN y || YN Y){printf(\n%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n,Reader_id,Reader_password,LReader_name,Reader_sex,Reader_age,Reader_Company,Reader_work);printf(%-10s\t%-10s\t%-10s\t%-10s\t%-10d\t%-10s\t%-10s\n,LReader_id,LReader_password,LReader_name,LReader_sex,LReader_age,LReader_Company,LReader_work);printf(打印完成返回主菜单\n);return 1;}printf(操作完成返回主菜单\n);
}删除与修改函数与之类似
6输出所有读者运用游标链接数据库将表中所有信息打印出来代码如下
void allborrow()
{int count0;EXEC SQL DECLARE AX CURSOR FORSELECT Reader_id,Book_id,Borrow_timeFROM Borrow;EXEC SQL OPEN AX;for ( ; ; ){EXEC SQL FETCH AX INTO :LReader_id,:LBook_id,:LBorrow_time;if (sqlca-sqlcode!0){break;}if(count 0){printf(借阅情况未还);printf(\n%-10s %-10s %-15s\n,Reader_id,Book_id,Borrow_time);}printf(%-10s %-10s %-15s\n,LReader_id,LBook_id,LBorrow_time);}EXEC SQL CLOSE AX;count0;EXEC SQL DECLARE BX CURSOR FORSELECT Reader_id,Book_id,Borrow_time,Return_timeFROM History;EXEC SQL OPEN BX;for ( ; ; ){EXEC SQL FETCH BX INTO :LReader_id,:LBook_id,:LBorrow_time,:LReturn_time :LNull;if (sqlca-sqlcode!0){printf(打印完成返回主菜单\n);break;}if(count 0){printf(借阅历史已还);printf(\n%-10s %-10s %-15s %-15s\n,Reader_id,Book_id,Borrow_time,Return_time);}printf(%-10s %-10s %-15s %-15s\n,LReader_id,LBook_id,LBorrow_time,LReturn_time);}EXEC SQL CLOSE BX;
}7图书管理管理员对于图书的管理操作包括增删改删除图书代码如下
void deletebook()
{char YN;printf(请输入你要删除的图书的ID);scanf(%s,LBook_id);EXEC SQL SELECT Book_id,Book_name,Book_writer,Book_publisher,Book_price,Book_introduction,Book_type,Book_num,Book_allnum INTO :LBook_id,:LBook_name,:LBook_writer:LNull,:LBook_publisher:LNull,:LBook_price:LNull,:LBook_introduction:LNull,:LBook_type,:LBook_num,:LBook_allnumFROM Book WHERE Book_id:LBook_id;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; } printf(\n%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n,Book_id,Book_name,Book_writer,Book_publisher,Book_price,Book_intro..,Book_type,Book_num,Book_allnum);printf(%-10s\t%-10s\t%-10s\t%-10s\t%-10d\t%-10s\t%-10s\t%-10d\t%-10d\n,LBook_id,LBook_name,LBook_writer,LBook_publisher,LBook_price,LBook_introduction,LBook_type,LBook_num,LBook_allnum);printf(是否删除该图书Y/N);do{scanf(%s,YN);}while(YN ! N YN ! n YN ! Y YN ! y);if (YN y || YN Y){EXEC SQL DELETEFROM BookWHERE Book_id:LBook_id;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; } else{printf(删除成功返回主菜单\n); }}
}其他操作类似
8借阅信息函数查看当前借阅的信息连接数据库输出已还借阅信息和未还的借阅信息代码如下
void allborrow()
{int count0;EXEC SQL DECLARE AX CURSOR FORSELECT Reader_id,Book_id,Borrow_timeFROM Borrow;EXEC SQL OPEN AX;for ( ; ; ){EXEC SQL FETCH AX INTO :LReader_id,:LBook_id,:LBorrow_time;if (sqlca-sqlcode!0){break;}if(count 0){printf(借阅情况未还);printf(\n%-10s %-10s %-15s\n,Reader_id,Book_id,Borrow_time);}printf(%-10s %-10s %-15s\n,LReader_id,LBook_id,LBorrow_time);}EXEC SQL CLOSE AX;count0;EXEC SQL DECLARE BX CURSOR FORSELECT Reader_id,Book_id,Borrow_time,Return_timeFROM History;EXEC SQL OPEN BX;for ( ; ; ){EXEC SQL FETCH BX INTO :LReader_id,:LBook_id,:LBorrow_time,:LReturn_time :LNull;if (sqlca-sqlcode!0){printf(打印完成返回主菜单\n);break;}if(count 0){printf(借阅历史已还);printf(\n%-10s %-10s %-15s %-15s\n,Reader_id,Book_id,Borrow_time,Return_time);}printf(%-10s %-10s %-15s %-15s\n,LReader_id,LBook_id,LBorrow_time,LReturn_time);}EXEC SQL CLOSE BX;
}9逾期信息函数连接数据库查看视图输出超期罚款信息代码如下
void overdue()
{int count0;EXEC SQL DECLARE QX CURSOR FORSELECT *FROM view_overdue;EXEC SQL OPEN QX;for ( ; ; ){EXEC SQL FETCH QX INTO:LReader_id,:LReader_name,:LBook_name,:LBorrow_time,:LOver_time,:LFine;if (sqlca-sqlcode!0){printf(发生了错误%d\n,SQLCODE);printf(打印完成返回主菜单\n);break;}if(count 0){printf(\n%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n,Reader_id,LReader_name,Book_id,Borrow_time,超期[天],罚款[元]);}printf(%-10s\t%-10s\t%-10s\t%-10s\t%-10d\t%-10f\n,LReader_id,LReader_name,LBook_name,LBorrow_time,LOver_time,LFine);}EXEC SQL CLOSE QX;
}10借书函数读者对于图书的借阅操作代码如下
void borrowbook()
{ char YN;allbook();printf(请输入你要借阅的图书的ID);scanf(%s,LBook_id);EXEC SQL SELECT Book_id,Book_name,Book_writer,Book_publisher,Book_price,Book_introduction,Book_type,Book_num,Book_allnum INTO :LBook_id,:LBook_name,:LBook_writer:LLNull,:LBook_publisher:LLNull,:LBook_price:LLNull,:LBook_introduction:LLNull,:LBook_type,:LBook_num,:LBook_allnumFROM Book WHERE Book_id:LBook_id;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; } printf(\n%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n,Book_id,Book_name,Book_writer,Book_publisher,Book_price,Book_intro...,Book_type,Book_num,Book_allnum);printf(%-10s\t%-10s\t%-10s\t%-10s\t%-10d\t%-10s\t%-10s\t%-10d\t%-10d\n,LBook_id,LBook_name,LBook_writer,LBook_publisher,LBook_price,LBook_introduction,LBook_type,LBook_num,LBook_allnum);printf(是否借阅该图书Y/N);do{scanf(%s,YN);}while(YN ! N YN ! n YN ! Y YN ! y);if (YN y || YN Y){printf(输入借阅时间2017-XX-XX);scanf(%s,LBorrow_time);EXEC SQL INSERT INTO Borrow(Reader_id,Book_id,Borrow_time)VALUES(:LReader_num,:LBook_id,:LBorrow_time);if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; }printf(借阅成功打印借阅信息!\n);EXEC SQL SELECT Reader_id,Book_id,Borrow_time INTO :LReader_id,:LBook_id,:LBorrow_timeFROM BorrowWHERE Reader_id:LReader_num AND Book_id:LBook_id;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; }printf(\n%-10s %-10s %-15s\n,Reader_id,Book_id,Borrow_time);printf(%-10s %-10s %-15s\n,LReader_id,LBook_id,LBorrow_time);printf(操作完成返回主菜单\n);}
}11还书函数读者对于图书的借阅操作代码如下
void returnbook()
{char YN;printf(请输入你要归还的图书的ID);scanf(%s,LBook_id);EXEC SQL SELECT Reader_id,Book_id,Borrow_time INTO :LReader_id,:LBook_id,:LBorrow_timeFROM BorrowWHERE Reader_id:LReader_num AND Book_id:LBook_id;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; }printf(\n%-10s %-10s %-15s\n,Reader_id,Book_id,Borrow_time);printf(%-10s %-10s %-15s\n,LReader_id,LBook_id,LBorrow_time);printf(是否归还该图书Y/N);do{scanf(%s,YN);}while(YN ! N YN ! n YN ! Y YN ! y);if (YN y || YN Y){printf(输入归还时间2017-XX-XX);scanf(%s,LReturn_time);EXEC SQL DELETE FROM BorrowWHERE Reader_id:LReader_num AND Book_id:LBook_id;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; }EXEC SQL UPDATE HistorySET Return_time:LReturn_timeWHERE Reader_id:LReader_num AND Book_id:LBook_id AND Borrow_time:LBorrow_time;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; }printf(归还成功打印信息!\n);EXEC SQL SELECT Reader_id,Book_id,Borrow_time,Return_time INTO :LReader_id,:LBook_id,:LBorrow_time,:LReturn_time:LLNullFROM HistoryWHERE Reader_id:LReader_num AND Book_id:LBook_id AND Borrow_time:LBorrow_time;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; }printf(\n%-10s %-10s %-15s %-15s\n,Reader_id,Book_id,Borrow_time,Return_time);printf(%-10s %-10s %-15s %-15s\n,LReader_id,LBook_id,LBorrow_time,LReturn_time);printf(操作完成返回主菜单\n);}
}12个人信息修改函数读者对于自己的个人信息修改操作代码如下
void updateme()
{char YN;printf(你的个人信息\n);EXEC SQL SELECT Reader_id,Reader_password,Reader_name,Reader_sex,Reader_age,Reader_Company,Reader_work INTO:LReader_id,:LReader_password,:LReader_name,:LReader_sex:LNull,:LReader_age:LNull,:LReader_Company:LNull,:LReader_work:LNullFROM Reader WHERE Reader_id:LReader_num;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; } printf(\n%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n,Reader_id,Reader_password,LReader_name,Reader_sex,Reader_age,Reader_Company,Reader_work);printf(%-10s\t%-10s\t%-10s\t%-10s\t%-10d\t%-10s\t%-10s\n,LReader_id,LReader_password,LReader_name,LReader_sex,LReader_age,LReader_Company,LReader_work);printf(是否修改Y/N);do{scanf(%s,YN);}while(YN ! N YN ! n YN ! Y YN ! y);if (YN y || YN Y){printf(输入新的密码);scanf(%s,LReader_password);printf(输入新的名字);scanf(%s,LReader_name);printf(输入新的性别);scanf(%s,LReader_sex);printf(输入新的年龄);scanf(%d,LReader_age);printf(输入新的所在单位);scanf(%s,LReader_Company);printf(输入新的职业);scanf(%s,LReader_work);EXEC SQL UPDATE ReaderSET Reader_password:LReader_password,Reader_name:LReader_name,Reader_sex:LReader_sex,Reader_age:LReader_age,Reader_Company:LReader_Company,Reader_work:LReader_workWHERE Reader_id:LReader_num;if(sqlca-sqlcode!0) /*sqlcode!0,表示操作不成功*/{printf(发生了错误%d\n,SQLCODE);return 1; } else{printf(修改成功查看修改结果\n);EXEC SQL SELECT Reader_id,Reader_password,Reader_name,Reader_sex,Reader_age,Reader_Company,Reader_work INTO :LReader_id,:LReader_password,:LReader_name,:LReader_sex:LNull,:LReader_age:LNull,:LReader_Company:LNull,:LReader_work:LNullFROM Reader WHERE Reader_id:LReader_id; printf(\n%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n,Reader_id,Reader_password,LReader_name,Reader_sex,Reader_age,Reader_Company,Reader_work); printf(%-10s\t%-10s\t%-10s\t%-10s\t%-10d\t%-10s\t%-10s\n,LReader_id,LReader_password,LReader_name,LReader_sex,LReader_age,LReader_Company,LReader_work); }printf(操作完成返回主菜单\n);return 1;}printf(操作完成返回主菜单\n);
}主要功能代码如上部分功能代码类似不依次举例详见附录或者工程代码文件
7.2界面设计
1初始界面 2登录界面 3管理员功能界面 4读者功能界面 5图书管理界面 6读者管理界面