smarty练习: 设置试题及打印试卷
数据库表格:shiti, shititimu, timu, kemu, xuanxiang
根据科目设置一个可以添加试题的页面:(如下图)

具体的题目从数据库中查出并形成一张试卷的形式
考试试题设置:
考试试题设置后台:ksset.php
<?php
include("../init.inc.php");
include("../../DBDA.class.php");
$db=new DBDA();
$sql="select * from kemu";
$attr=$db->Query($sql);
$smarty->assign("kemu",$attr);
$smarty->display("ksset.html");
考试试题设置前端:ksset.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>考试设置</title>
<script src="../../jquery-1.11.2.min.js"></script>
</head> <body>
<h1>考试试题设置</h1>
<form action="kschuli.php" method="post">
<div>请输入题目编号:<input type="text" name="code" /></div>
<div>请输入题目名称:<input type="text" name="name" /></div>
<div>请选择考试科目:
<select name="kemu" id="km">
<{foreach $kemu as $v}>
<option value="<{$v[0]}>"><{$v[1]}></option>
<{/foreach}>
</select>
</div>
<div>请输入考试时间:<input type="text" name="shijian" />分钟</div>
<div>请输入题目数量:<input type="text" name="shuliang" id="sl" /></div>
<div>请输入题目分值:<input type="text" name="fenzhi" /></div>
<input type="submit" value="提交" id="tj"/>
</form>
</body>
<script type="text/javascript">
//当发现考试科目中的试题数量小于输入的数量值时怎么办?
//点击提交时进行提醒
$(document).ready(function(e) {
$("#tj").click(function(){
//取科目的数量和输入的数量进行比较
var km=$("#km").val();
var sl=$("#sl").val();
var bs=""; $.ajax({
async:false,
url:"bijiaosl.php",
data:{km:km,sl:sl},
type:"POST",
dataType:"TEXT",
success: function(data){
bs=data;
}
}); if(bs.trim()=="OK")
{
return true;
}
else
{
alert("该科目下题目数量不足!")
return false;
} })
});
</script>
</html>
提交处理页面:kschuli.php
<?php
include("../../DBDA.class.php");
$db=new DBDA();
//往试题表添加考试题目,科目等信息
$code=$_POST["code"];
$name=$_POST["name"];
$kemu=$_POST["kemu"];
$shijian=$_POST["shijian"];
$shuliang=$_POST["shuliang"];
$fenzhi=$_POST["fenzhi"]; $sql="insert into shiti values('{$code}','{$shijian}','{$kemu}','{$name}','{$shuliang}','{$fenzhi}')";
$db->Query($sql,1); //往试题题目表添加具体的题目内容
//根据科目和数量随机生成
//查科目
$all="select code from timu where kemu='{$kemu}'";
$aall=$db->Query($all);//里面包含本科目所有题目代号 $attr=array();//存放生成的试题代号
//根据数量来取
for($i=0;$i<$shuliang;$i++)
{
//随机取代号
$n=rand(0,count($aall)-1);
$daihao=$aall[$n][0];
//判断取出的代号是否重复
if(in_array($daihao,$attr))
{
$i--;//若什么也不添加,循环出的数量会减少,所以若代号重复是,$i减少一次,再加一个
}
else
{
//$aall[$n][0];
array_push($attr,$daihao);
}
} //往shititimu(试题题目)表添加数据
//code(自增长), shiti(试题代号)=$code, timu=$v, shunxu=$k foreach($attr as $k=>$v)
{
$shunxu=$k+1;
$stm="insert into shititimu values('','{$code}','{$v}','{$shunxu}')";
$db->Query($stm,1);
}
header("location:ksset.php");
注意:若该科目的试题数量少于输入的试题数量时,要提醒试题数量不足(如图)

使用ajax来进行处理,处理页面:bijiaosl.php
<?php
include("../../DBDA.class.php");
$db=new DBDA();
$km=$_POST["km"];
$sl=$_POST["sl"];
$sql="select count(*) from timu where kemu='{$km}'";
$zs = $db->StrQuery($sql);
if($zs>=$sl)
{
echo "OK";
}
else
{
echo "NO";
}
形成试卷页面:
形成试卷页面后台:shijuan.php
<?php
include("../init.inc.php"); include("../../DBDA.class.php");
$db=new DBDA(); $sql="select * from shiti";
$attr=$db->Query($sql); $shuzu=array();//存储题目信息
//判断考试名称的值是否为空
if(empty($_POST["ksmc"]))
{ }
else
{
//取出试题的代号
$code=$_POST["ksmc"];
$stm="select * from shititimu where shiti='{$code}'";
$atm=$db->Query($stm); //根据代号去查找相应的题目及选项
foreach($atm as $v)
{
//题目代号
$tmdh=$v[2];
//题目顺序
$tmsx=$v[3]; //从题目表中取出试题的题目
$sname="select name from timu where code='{$tmdh}'";
$aname=$db->StrQuery($sname); //从选项表中取出相应的选项
$sxx="select name,xuanxiang from xuanxiang where timu='{$tmdh}'";
$axx=$db->Query($sxx); $timuall=array("tmsx"=>$tmsx,"tmmc"=>$aname,"tmxx"=>$axx);
$shuzu[]=$timuall; } } $smarty->assign("shiti",$attr);
$smarty->assign("timu",$shuzu);
$smarty->display("shijuan.html");
形成试卷页面前端:shijuan.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>试卷页面</title>
</head> <body>
<h1>试题详情</h1>
<form action="shijuan.php" method="post">
<div>请选择考试名称:
<select name="ksmc">
<{foreach $shiti as $v}>
<option value="<{$v[0]}>"><{$v[3]}></option>
<{/foreach}>
</select>
<input type="submit" value="查询" />
</div>
</form><br /> <div>
<{foreach $timu as $v}> <div><{$v.tmsx}>、<{$v.tmmc}>( )</div>
<{foreach $v.tmxx as $v1}>
<div><{$v1[1]}>:<{$v1[0]}></div>
<{/foreach}><br />
<{/foreach}> </div> </body>
</html>
smarty练习: 设置试题及打印试卷的更多相关文章
- 6月6 Smarty练习----设置题目及打印试卷
所需要的数据库表格:shiti, shititimu, timu, kemu, xuanxiang 考试试题的设置: 考试试题后台:ksset.php <?php include(" ...
- 面试题12:打印1到最大的n位数
// 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> ...
- 算法笔记_189:历届试题 横向打印二叉树(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树 ...
- 【剑指offer】面试题 17. 打印从 1 到最大的 n 位数
面试题 17. 打印从 1 到最大的 n 位数 题目描述 题目:输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999. 解答过 ...
- Excel2010表格里设置每页打印时都有表头
在打印Excel表格时常常会出现如果存在多页打印时,往往从第二页开始就会出现没有表头的情况,导致到后面都不清楚对应的是哪个数据,查看时也很麻烦,下面就将为大家介绍如何在Excel表格里设置每页打印时都 ...
- Logback设置SQL参数打印
一.hibernate中设置SQL参数打印: (主要是第一句) <logger name="org.hibernate.type.descriptor.sql.BasicBinder& ...
- NPOI导出EXCEL 打印设置分页及打印标题
在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方法,但一直都没有起到作用.经过研究是要设置 sheet1.FitToPage = false; 而 ...
- EPSON LQ610K 设置税控盘打印发票的格式
问题困扰 之前一直是手动调试发票打印格式,浪费发票纸张不说,而且还浪费时间.今天在Parrells Desktop里利用Bonjour设置打印机的时候,找到了EPSON网站有这方面的介绍,根据上面的提 ...
- [转]NPOI导出EXCEL 打印设置分页及打印标题
本文转自:http://www.cnblogs.com/Gyoung/p/4483475.html 在用NPOI导出EXCEL的时候设置分页,在网上有查到用sheet1.SetRowBreak(i)方 ...
随机推荐
- js中给函数传参函数时,函数加括号与不加括号的区别
<!doctype html><html><head><script> function show() { alert("123") ...
- HttpClient支持使用代理服务器以及身份认证
HttpClient Authentication Doument: http://hc.apache.org/httpclient-3.x/authentication.html HttpClien ...
- 无线通信技术协议-Zigbee 3.0
物联网的无线通信技术有:短距离的无线局域网通信技术和长距离的无线广域网通信技术. 短距离局域网通信技术有Zigbee.Wi-Fi.Bluetooth.Z-wave.6LoWPAN等. 长距离广域网通信 ...
- MSP430 中断优先级
MSP430的中断优先级.打开关闭.中断嵌套 优先级顺序从高到低为: PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */ PORT1_VECTOR (4 * ...
- Web2py也有意思的
多学学,以后可以方便的自己写代码了. 对于各种WEB框架,这也是打一个基础的时候. 相信学入门了,对PHP的,JAVA的WEB框架,都是能理解更深入的. def index(): "&quo ...
- WebAPI 用户认证防篡改实现HMAC(二)签名验证 AbsBaseAuthenticationAttribute--转
public class ActionFilter : ActionFilterAttribute { public override void OnActionExecu ...
- GitHub的使用详解!Windows GitHub ,Sublime Git GitGutter的使用!
Github是什么? 它是代码管理工具. 在公司写的代码,不需要U盘拷贝回家,不需要放到网盘中.只需要上传到git上,就可以回家继续拷贝下来了. 比起svn要好, svn只适合局域网工作,离开局域网, ...
- linux串口驱动分析——打开设备
串口驱动是由tty_driver架构实现的.一个应用程序中的函数要操作硬件,首先会经过tty,级级调用之后才会到达驱动之中.本文先介绍应用程序中打开设备的open函数的整个历程. 首先在串口初始化中会 ...
- DPDK2.1开发者手册4-7
Mempool Labrary 一个内存池(memory pool)就是固定大小对象的分配器.在dpdk中,它是通过名字来标示唯一性的,且使用环形队列来保存没有使用的空闲对象.它提供了一些可选项服务例 ...
- Scala-的元组和映射
package com.mengyao.scala.function /** * Scala 映射 * Scala中的Key,Value集合被称为映射,映射中的每一个key,value称为对偶 * ...