技术和语言: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的开源包,然后将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;
}
?>
到上面为止 就可以向数据库里插入图书数据了