php+MySQL圖書管理系統(一)
第一 用到的技術
技術和語言: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;
}
?>
到上面為止 就可以向資料庫裡插入圖書資料了