图书馆占座系统(七)

第一次更新(2018.8.19 19:50)

嗯,好久没更新了,是因为做项目做兴奋了,图书馆占座系统已经开发完了,另外我又开发了其他两个系统,这个另说。

上一章讲到cookie,登录过去的界面判断cookie是否存在后,存在即进行操作,不存在就跳转到登录页面,前面已经讲过我们可以读取数据库中的座位号在网页加载后实时显示出来已经被占的座位,现在我们需要占座以及取消座位,当点击一个座位时,系统判断这个座位是否被占,如果被占提醒,否则开始查询用户是否存在占座,如果不存在占座就把座位号写入数据库,如果存在就提示存在,取消后再占。
以下是代码:
点击座位时:

    $(function() {
    $(".img").click(function() {
        var seat_num = $(this).attr("name");
        element = document.getElementsByName(seat_num);
        if (element[0].src.match("no")) {
            var ggg = boom(seat_num);
            if (ggg == 0) {
                alert('此座位未占');
                if (confirm('此座位未占,是否需要占座?')) {
                    element[0].src = "yes.png";
                    changeee(seat_num)
                }
            } else {
                alert('你已经占坐座位了,请取消后再占')
            }
        } else if (element[0].src.match('yes')) {
            abc = cba(seat_num);
            if (abc == 1) {
                if (confirm('是否取消占座?(点击确定取消占座)')) {
                    abc = cba(seat_num);
                    qqq = zzz();
                    if (qqq == 1) {
                        alert('取消成功');
                        element[0].src = "no.png"
                    } else {
                        alert(qqq);
                        alert('取消失败')
                    }
                }
            } else {
                alert('这个座位有人了,请取消您自己的座位')
            }
        }
    })
})

这段代码的意思是
先获取当前点击对象的name,在获取这个点击对象的src中是否含有no或者yes,(no是没有占座。yes是占座),当检查到这个座位有人占了,则执行一个查询函数,查询这个座位是否是自己的座位,
js代码如下

else if(element[0].src.match('yes')){

                                            abc =cba(seat_num);
                                            if (abc==1)//是自己的座位
                                                {

                                            if(confirm('是否取消占座?(点击确定取消占座)')){

                                                abc=cba(seat_num);//判断当前点击座位是否为自己的座位



                                                qqq=zzz();//调用设置座位为空函数即取消占座
                                                if(qqq==1){
                                                    alert ('取消成功');
                                                element[0].src="no.png";
                                                }
                                                else{
                                            alert(qqq);
                                            alert('取消失败');
                                        }
                                                //cheak(flag1);//调用取消函数,并写入数据库
                                                }
                                                }
                                    else{
                                            alert('这个座位有人了,请取消您自己的座位');
                                    }

                                                //


                                    }

如果是yes,则运行cba()这个函数,并把当前座位值传给这个函数,并将返回值赋给abc(原谅我的命名);
以下是该函数:

$function cba(seat_num){
            var flag11=null;

            if (window.XMLHttpRequest){
                                                    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                    xmlhttp=new XMLHttpRequest();
                    }   
                    else {
                                                    // IE6, IE5 浏览器执行代码
                            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                         }

                xmlhttp.onreadystatechange=function(){//onreadystatechange此函数意思为当服务器响应
                                                //已经做好被处理的准备是做出的响应
                        if (xmlhttp.readyState==4 && xmlhttp.status==200){//readystate的值为4或status为200时代表服务器可以与之通信

                            flag11=xmlhttp.responseText;

                        }}
            xmlhttp.open("GET","一楼6.php?seat_num="+seat_num,false);
                    xmlhttp.send();//请求方式为post才有用
                    return flag11;

这是一个ajax函数,我们通过ajax函数将座位号传入php文件,并将返回值赋给flag11
以下是php代码

$show_seat=$_GET['seat_num'];

$name=$_COOKIE["name"];//取出name的cookie值



$sql = "select seat from ceshi.ceshi1  where name='$name'";



$obj = mysql_query($sql);
$rows = mysql_fetch_row($obj);//返回结果,当前座位号被存在了$rows[0]中;
if($rows[0]==$show_seat){
    echo 1;
}
else{
    echo 0;
}

首先获取座位号和当前用户名,然后查询当前用户名下的座位表中的座位号,如果传入的座位号和当前座位号相等,则返回1,否则返回0;
现在来看js代码
当返回值是1的时候,也就证明这个点击座位是当前的用户所占的座位,则调用zzz()函数,并把得到的返回值赋给qqq,
以下是zzz()的函数,

function zzz() {

    var qqq = null; //必须在外面先声明!
    if (window.XMLHttpRequest) {
        // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xmlhttp = new XMLHttpRequest();
    } else {
        // IE6, IE5 浏览器执行代码
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function() { //onreadystatechange此函数意思为当服务器响应
        //已经做好被处理的准备是做出的响应
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { //readystate的值为4或status为200时代表服务器可以与之通信
            qqq = xmlhttp.responseText;
            console.log(qqq);
        }

    }
    xmlhttp.open("GET", "一楼5.php", false);
    xmlhttp.send(); //请求方式为post才有用
    return qqq; //return一定要写在这,并且需要在调用函数下声明!

}

我们通过ajax直接调用php文件。将返回值赋给qqq,并把qqq返回给原函数
以下是php代码

$name=$_COOKIE["name"];//取出name的cookie值


$sql = "update ceshi.ceshi1 SET seat='null' where name = '$name'";


$obj = mysql_query($sql);




if ($obj&&mysql_affected_rows($link))//判断是否执行sql语句和判断是否对数据库执行操作       
{
    echo 1;

}else
{
    echo 0;
}

先用cokie获得当前的用户名,然后修改当前用户名下的座位号为null,这里不能用delete,因为delete是删除整条记录,而不能仅仅删除一个记录,然后判断操作是否成功,若成功返回1,否则返回0

再来看html代码
如果是1,则提示取消成功,如果是0提示取消失败,
当cba函数返回值是0,即当前用户并不是此座位的占有者提示、”这个座位有人了,请值您自己的座位”

下面来讲当点击的是没人占的座位时,
先判断所在用户是否存在已占座位,运行boom函数并传入座位号,将返回值赋给ggg;一下是代码

function boom(seat) {

    var fff = null; //必须在外面先声明!
    if (window.XMLHttpRequest) {
        // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xmlhttp = new XMLHttpRequest();
    } else {
        // IE6, IE5 浏览器执行代码
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function() { //onreadystatechange此函数意思为当服务器响应
        //已经做好被处理的准备是做出的响应
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { //readystate的值为4或status为200时代表服务器可以与之通信
            fff = xmlhttp.responseText;
            alert(fff);
        }

    }
    xmlhttp.open("GET", "一楼4.php?seat=" + seat, false);
    xmlhttp.send(); //请求方式为post才有用
    return fff; //return一定要写在这,并且需要在调用函数下声明!
}

我们把座位号传入php文件
以下是PHP代码

$seat=$_GET['seat'];

$name=$_COOKIE["name"];//取出name的cookie值

$sql = "select seat from ceshi.ceshi1  where name= '$name'";//判断当前用户名seat下是否有值,



$obj = mysql_query($sql);//在执行成功时返回true,出错返回false
//echo $obj;
$rows = mysql_fetch_row($obj);//返回一个数组,数组的值为查询到的,先把sql语句扔进sql软件,软件的出的结果就是这个row的遏制
//echo $rows[0];


if ($rows[0]=='null')//当返回的值不为null,即有座位,返回有座位标识
{   

    echo  0;
}
else{
    echo $rows[0];
    echo 1;
}

首先获得座位号和当前用户名;在查找当前用户名下的座位值,如果是null代表没有座位,返回0,如果有返回当前当前的座位值,js函数拿到返回值后将此值返回给主函数,如果返回的是0,代表该用户没有占座,则执行changeee函数
执行changeee函数
下面是这个函数的代码


                function changeee(seat_num){

                    if (window.XMLHttpRequest){
                                                    // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                    xmlhttp=new XMLHttpRequest();
                    }   
                    else {
                                                    // IE6, IE5 浏览器执行代码
                            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                         }

                xmlhttp.onreadystatechange=function(){//onreadystatechange此函数意思为当服务器响应
                                                //已经做好被处理的准备是做出的响应
                        if (xmlhttp.readyState==4 && xmlhttp.status==200){//readystate的值为4或status为200时代表服务器可以与之通信

                    xmlhttp.open("GET","一楼.php?seat_num="+seat_num,false);
                    xmlhttp.send();//请求方式为post才有用

            }

将座位号传入php,
php代码如下

$name=$_COOKIE["name"];//取出name的cookie值
$seat=$_GET['seat_num'];
//确认座位//
$sql = "update ceshi.ceshi1 set seat='$seat' where name='$name'";

获取当前用户名字和座位号,并将座位号写入数据库。然后在主函数内将图标颜色改变,
那么至此,图书馆占座系统的基本操作就完成了。

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
图书馆管理系统 一.图书馆管理系统需求分析 1、系统目标设计 系统开发的总目标是实现内部图书借阅管理的系统化、规范化和自动化。 能够对图书进行注册登记,也就是将图书的基本信息(如:书的编号、书名、作者、价格等)预先存入数据库中,供以后检索。 能够对借阅人进行注册登记,包括记录借阅人的姓名、编号、班级、年龄、性别、地址、电话等信息。 提供方便的查询方法。如:以书名、作者、出版社、出版时间(确切的时间、时间段、某一时间之前、某一时间之后)等信息进行图书检索,并能反映出图书的借阅情况;以借阅人编号对借阅人信息进行检索;以出版社名称查询出版社联系方式信息。 提供对书籍进行的预先预订的功能。 提供旧书销毁功能,对于淘汰、损坏、丢失的书目可及时对数据库进行修改。 能够对使用该管理系统的用户进行管理,按照不同的工作职能提供不同的功能授权。 提供较为完善的差错控制与友好的用户界面,尽量避免误操作。 2、系统功能需求分析 (1) 读者管理:读者信息的制定、输入、修改、查询,包括种类、性别、借书数量、借书期限、备注等。 (2) 书籍管理:书籍基本信息制定、输入、修改、查询,包括书籍编号、类别、关键词、备注。 (3) 借阅管理:包括借书,还书,预订书籍,续借,查询书籍,过期处理和书籍丢失后的处理。 (4)系统管理:包括用户权限管理,数据管理和自动借还书机的管理 UML的图书馆管理系统建模设计 2 满足以上需求的系统主要包含有一下几个子系统 (1)基本业务功能子系统:该系统中主要包含了借书还书和预订等功能。 (2)基本数据录入功能子系统:该子系统主要包含有书籍信息和读者信息录入功能。 (3)信息查询子系统:包含了多功能的查询书籍信息和读者信息。 (4)数据库管理功能子系统:主要包含了借阅信息管理功能,书籍信息管理功能和预订信息管理功能。 (5)帮助功能子系统。 二、系统动态建模 1、用例图、 3 图书馆管理系统的用例图 从用例图中我们可以看出管理员和读者之间对本系统所具有的用例。 管理员所包含的用例有: (1) 登录系统:管理员可以通过登录该系统进行各项功能的操作 (2) 书籍管理:包括对书籍的增删改等。 UML的图书馆管理系统建模设计
以下是一个简单的图书馆占座系统的C语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 20 #define NUM_SEATS 10 typedef struct { int id; char name[MAX_NAME_LEN]; int reserved; } Seat; void print_seats(Seat seats[]) { printf("Current seat reservations:\n"); for (int i = 0; i < NUM_SEATS; i++) { if (seats[i].reserved == 0) { printf("Seat %d: vacant\n", seats[i].id); } else { printf("Seat %d: reserved by %s\n", seats[i].id, seats[i].name); } } } int main() { Seat seats[NUM_SEATS]; char input[MAX_NAME_LEN]; int seat_num; int num_reserved = 0; // initialize seats for (int i = 0; i < NUM_SEATS; i++) { seats[i].id = i+1; seats[i].reserved = 0; } // main loop while (1) { print_seats(seats); printf("Enter your name to reserve a seat (or 'quit' to exit): "); fgets(input, MAX_NAME_LEN, stdin); if (strcmp(input, "quit\n") == 0) { break; } input[strlen(input)-1] = '\0'; // remove newline character printf("Enter seat number to reserve (1-%d): ", NUM_SEATS); scanf("%d", &seat_num); getchar(); // consume newline character // check if seat is already reserved if (seats[seat_num-1].reserved == 1) { printf("Sorry, seat %d is already reserved.\n", seat_num); continue; } // reserve the seat seats[seat_num-1].reserved = 1; strcpy(seats[seat_num-1].name, input); num_reserved++; printf("Seat %d reserved by %s.\n", seat_num, input); } printf("Goodbye! %d seats reserved.\n", num_reserved); return 0; } ``` 该程序使用了一个简单的结构体来表示座位,其中包含了座位编号、座位预约者的姓名和是否已经被预约。程序提供了一个 `print_seats()` 函数来打印当前的座位预约情况。在主循环中,程序会要求用户输入姓名和座位号来进行预约。程序会检查该座位是否已经被预约,如果是,则提示用户重新选择。如果该座位尚未被预约,则程序会将该座位的预约状态设置为已预约,并将预约者的姓名保存在座位数据结构中。程序会一直循环直到用户输入 `quit` 为止。最后程序会输出预约座位的数量,并退出程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值