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文件了,非常简单好用。

这里简单的说明一下使用方法,有什么不会的或者需要新的功能的话直接去阅读源代码就好了。

canRead($filePath)){
		//echo "yes";
	}else{
		//版本不对的时候切换版本
		$objPHPExcelReader = new PHPExcel_Reader_Excel5();
		if($objPHPExcelReader->canRead($filePath)){
		}else{
			echo "";
			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里面的数值
	//对于那些特殊的数据,比如日期等等可以通过行列值来特殊处理一下
	//为了简单,这里直接拼接SQL语句然后直接插入数据
	//在数据量不是很大的情况下不会占很大内存
	$allInsertNumber = 0;
	$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);
		$allInsertNumber++;
		if ($b) {
			echo "yes";
			$insertSuccessNumber++;
		}else{
			echo "no";
		}
		//echo "$sql";
	}
	echo "共 $allInsertNumber 条数据,成功执行 $insertSuccessNumber 条数据!";
	mysql_close($link);
	//工具函数 解决中文乱码
	function convertToUTF8($str){
		return iconv('utf-8','gb2312', $str);
	}
	//格式化读出的日期
	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;
	}
?>

到上面为止 就可以向数据库里插入图书数据了












你可能感兴趣的:(php)