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)方 ...
随机推荐
- iOS 数据库操作(使用FMDB)
iOS 数据库操作(使用FMDB) iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...
- codevs 3094 寻找sb4
3094 寻找sb4 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description sb有一天和sml吵架了,她 ...
- 转:Qt编写串口通信程序全程图文讲解
转载:http://blog.csdn.net/yafeilinux/article/details/4717706 作者:yafeilinux (说明:我们的编程环境是windows xp下,在Q ...
- Android视图框架
Android视图框架 Android的UI系统是android应用系统框架最核心,最基础的内容! 1. Android视图系统.层次关系 Android应用设计和Web应用设计类似,也分前端和后端设 ...
- Android入门学习:Android 系统框架及应用程序执行过程
Android基础知识学习 新手上路,还请多多帮助.由于初学,博客内容难免有不正确的地方,还请各位多多指教,相互学习! 主要内容: 1.Android层次架构及主要功能 2.Android编程模型,程 ...
- HDU_2055——刷题不要使用fflush()
Problem Description we define f(A) = 1, f(a) = -1, f(B) = 2, f(b) = -2, ... f(Z) = 26, f(z) = -26; G ...
- 上海西服定制Angry Eagle 顶级西服,私人订制你的美
上海西服定制Angry Eagle 顶级西服,私人订制你的美 上海西服定制Angry Eagle 顶级西服,私人订制你的美
- Linux 系统下查看硬件信息命令大全
有许多命令可以用来查看 Linux 系统上的硬件信息.有些命令只能够打印出像 CPU 和内存这一特定的硬件组件信息,另外一些命令可以查看多种硬件组件的信息. 这个教程可以带大家快速了解一下查看各种硬件 ...
- poj 3182 The Grove bfs
思路:如果要围绕一圈,必须经过一条竖线上的一点,把竖线左端封住,bfs一次,枚举点,再把竖线右端封住,再bfs回起点. #include <iostream> #include <c ...
- Java编程思想-第四章练习题
练习1:写一个程序,打印从1到100的值 public class Print1To100{ public static void main(String args[]){ for(int i = 1 ...