1. 程式人生 > >php+MySQL圖書管理系統(一)

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;
	}
?>

到上面為止 就可以向資料庫裡插入圖書資料了