第一 用到的技术
技术和语言:php + MySQL
开发环境:windows 8.1
开发工具:wampsever + sublime2
开源类库:PHPExcel 下载地址
第二 需求分析
模块名称 | 功能描述 |
管理员登陆 | 输入管理员ID, 密码; 登入系统 或 返回ID/密码 错误. |
图书入库 | 1. 单本入库 2. 批量入库 (方便最后测试) 图书信息存放在文件中, 每条图书信息为一行. 一行中的内容如下 ( 书号, 类别, 书名, 出版社, 年份, 作者, 价格, 数量 ) Note: 其中 年份、数量是整数类型; 价格是两位小数类型; 其余为字符串类型 Sample: ( book_no_1, Computer Science, Computer Architecture, xxx, 2004, xxx, 90.00, 2 ) |
图书查询 | 要求可以对书的 类别, 书名, 出版社, 年份(年份区间), 作者, 价格(区间) 进行查询. 每条图书信息包括以下内容: ( 书号, 类别, 书名, 出版社, 年份, 作者, 价格, 总藏书量, 库存 )
可选要求: 可以按用户指定属性对图书信息进行排序. (默认是书名)
|
借书 | 1.输入借书证卡号 显示该借书证所有已借书籍 (返回, 格式同查询模块) 2.输入书号 如果该书还有库存,则借书成功,同时库存数减一。 否则输出该书无库存,且输出最近归还的时间。 |
还书 | 1.输入借书证卡号 显示该借书证所有已借书籍 (返回, 格式同查询模块) 2.输入书号 如果该书在已借书籍列表内, 则还书成功, 同时库存加一. 否则输出出错信息. |
第三 数据库设计
对象名称 | 包含属性 |
书 | 书号, 类别, 书名, 出版社, 年份, 作者, 价格, 总藏书量, 库存 |
借书证 | 卡号, 姓名, 单位, 类别 (教师 学生等) |
管理员 | 管理员ID, 密码, 姓名, 联系方式 |
借书记录 | 卡号, 借书证号 ,借期, 还期, 经手人 (管理员ID) |
建表sql
-- 第一步创建一个数据库 使用默认用户create database Libray; -- 第二步创建各个表结构Create TABLE Book( BookID int(12) PRIMARY KEY, Classification varchar(20), BookName varchar(20), Press varchar(20), PublicTime date, Author varchar(20), Price real, NumberAll int(5), StoreNumber int(5));Create TABLE Card( CardID int(12) PRIMARY KEY, UserName varchar(20), Department varchar(20), Category bit);Create TABLE Admin( AdminID int(12) PRIMARY KEY, Password_MD5 varchar(16), AdminName char(20), Contect char(11));Create TABLE Record( BookID int(12), OutTime date, InTime date, AdminID int(12), CardID int(12), PRIMARY KEY (CardID, BookID), FOREIGN KEY (CardID) REFERENCES Card(CardID), FOREIGN KEY (BookID) REFERENCES Book(BookID));
第四 使用PHPExcel导入图书数据
下载下载地址 好PHPExcel的开源包,然后将classes这个文件夹放置到你的项目中去,使用的时候require(".../PHPExcel.php");后就可以使用使用里面的类来读写xls文件了,非常简单好用。
这里简单的说明一下使用方法,有什么不会的或者需要新的功能的话直接去阅读源代码就好了。
<?php //header("content-type:text/html;charset=utf-8"); //引入PHPExcel require("./phpexcel/PHPExcel.php"); require("./phpexcel/PHPExcel/Reader/Excel2007.php"); require("./phpexcel/PHPExcel/Reader/Excel5.php"); require("./phpexcel/PHPExcel/Cell.php"); //定义文件路径 $filePath = "./tushuxinxi/libray.xls"; $objPHPExcel = new PHPExcel(); $objPHPExcelReader = new PHPExcel_Reader_Excel2007(); //判断文件是否可以读 if($objPHPExcelReader->canRead($filePath)){ //echo "yes"; }else{ //版本不对的时候切换版本 $objPHPExcelReader = new PHPExcel_Reader_Excel5(); if($objPHPExcelReader->canRead($filePath)){ }else{ echo "<Script>alert('文件不存在或者文件不可读, 请检查后重试!');</Script>"; return; } } $objPHPExcel = $objPHPExcelReader->load($filePath); //读取excel文件中的第一个工作表 $currentSheet = $objPHPExcel->getSheet(0); //取到最大的列号 $allColumn = $currentSheet->getHighestColumn(); //取到最大的行号 $allRow = $currentSheet->getHighestRow(); //连接数据库 mysql_connect("127.0.0.1", "root", ""); $link = mysql_connect("127.0.0.1", "root", "") or die("不能连接到数据库".mysql_error()); if($link){ //echo "连接成功!"; } $db_select = mysql_select_db("libray"); if ($db_select) { //echo "yes"; }
//双重循环读取每一个cell里面的数值
<span style="white-space:pre"> </span>//对于那些特殊的数据,比如日期等等可以通过行列值来特殊处理一下
<span style="white-space:pre"> </span>//为了简单,这里直接拼接SQL语句然后直接插入数据
<span style="white-space:pre"> </span>//在数据量不是很大的情况下不会占很大内存
<span style="white-space:pre"> </span>$allInsertNumber = 0;<span style="white-space:pre"> </span>$insertSuccessNumber = 0;
for($currentRow = 2; $currentRow <= $allRow; $currentRow++){ $sql = "insert INTO Book values ("; for($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++){ $str = $currentColumn.$currentRow; $val = $currentSheet->getCell($str)->getValue(); if($currentColumn == 'B' || $currentColumn == 'C' || $currentColumn == 'D' || $currentColumn == 'F'){ $val = convertToUTF8($val); $val = "'".$val."'"; } if ($currentColumn == 'E') { $val = excelTime($val); } if ('A' != $currentColumn) { $sql = $sql.","; } $sql = $sql.$val; } $sql = $sql.")"; $b = mysql_query($sql);
<span style="white-space:pre"> $allInsertNumber++;</span> if ($b) { echo "yes";
<span style="white-space:pre"> </span>$insertSuccessNumber++; }else{ echo "no"; } //echo "$sql"; }
<span style="white-space:pre"> </span>echo "共 $allInsertNumber 条数据,成功执行 $insertSuccessNumber 条数据!"; mysql_close($link); //工具函数 解决中文乱码 function convertToUTF8($str){ return iconv('utf-8','gb2312', $str); }
<span style="white-space:pre"> </span>//格式化读出的日期 function excelTime($date, $time = false) { if(function_exists('GregorianToJD')){ if (is_numeric( $date )) { $jd = GregorianToJD( 1, 1, 1970 ); $gregorian = JDToGregorian( $jd + intval ( $date ) - 25569 ); $date = explode( '/', $gregorian ); $date_str = str_pad( $date [2], 4, '0', STR_PAD_LEFT ) ."-". str_pad( $date [0], 2, '0', STR_PAD_LEFT ) ."-". str_pad( $date [1], 2, '0', STR_PAD_LEFT ) . ($time ? " 00:00:00" : ''); return $date_str; } }else{ $date=$date>25568?$date+1:25569; /*There was a bug if Converting date before 1-1-1970 (tstamp 0)*/ $ofs=(70 * 365 + 17+2) * 86400; $date = date("Y-m-d",($date * 86400) - $ofs).($time ? " 00:00:00" : ''); } return $date; }?>
到上面为止 就可以向数据库里插入图书数据了