校车订票系统报告

上传人:无*** 文档编号:101507957 上传时间:2022-06-05 格式:DOC 页数:43 大小:659.50KB
收藏 版权申诉 举报 下载
校车订票系统报告_第1页
第1页 / 共43页
校车订票系统报告_第2页
第2页 / 共43页
校车订票系统报告_第3页
第3页 / 共43页
资源描述:

《校车订票系统报告》由会员分享,可在线阅读,更多相关《校车订票系统报告(43页珍藏版)》请在装配图网上搜索。

1、-移动通信与无线网络大作业报告校车订票系统课程:学校:组长:组员:完成时间:目录一需求分析21 引言21.1 工程背景21.2 工程描述22 工程概述22.1 目标22.2 业务流程图23 根本介绍23.1 功能模块23.2 人工处理过程23.3 尚未解决的问题24 软件界面24.1 软件登录界面24.2 预订车票界面24.3 查看订票记录2二系统数据构造设计21 逻辑构造设计要点:22 数据构造与程序的关系:22.1 静态数值需求22.2 时间特性需求22.3 灵活性22.4 数据管理能力需求23 数据库设计描述23.1 数据库分析23.2 数据库设计说明2三系统总体设计21 总体设计描述2

2、1.1 系统功能设计21.2 系统的总体构造21.3 子模块描述2四视图设计21 E-R图22 数据流图23 程序描述23.1 客户端程序23.2 效劳器端程序23.3 后台数据库24 功能描述24.1 整体流程设计24.2 客户端的主要功能24.3 效劳器的主要功能24.4 软件时序图24.5 数据库接口2五程序实现21.1 客户端21.2 效劳器21.3 加密与解密2六总结2附录2效劳器程序21.1 数据库功能实现21.2 自动更*票21.3 响应客户端实现2手机端程序22.1 通信配置22.2 访问效劳器22.3 平安22.4 天气信息22.5 日期2一需求分析1 引言1.1 工程背景作

3、为一所远离市区的高等学府,*学校的教师和学生对于往返于城区与校区的交通需求十分强烈,而校车恰好成为最正确的选择。但由于校车的预订供不应求,不少同学更是深夜12点走在去往*楼的路上,只为能够订购一*校车车票,非常不方便。此外不少同学订购到车票后,由于一些原因不能按时乘坐校车,只能在QQ群里到处发布转让校车车票信息,但仍会造成校车车票的浪费。在这一背景下,本小组开发了一整套系统解决这一问题,其中包括校车订票系统的手机应用软件、后端数据库管理系统、后端管理程序,致力于为学生及时便捷的提供校车信息以及更新。1.2 工程描述为*大学开发一套完整的校车订票系统,包括校车预约的安卓手机应用、效劳器端程序设计

4、、数据库管理设计等,方便学校对校车信息的及时发布和更新,学生也能够随时根据需要订购校车车票,有效地防止了出现校车浪费的不良情况。图 1 校车订票系统整体框架图2 工程概述2.1 目标该系统是要将学校校车管理系统信息化,使操作方便,且效率高。本设计的订票系统软件分为效劳器端和客户端两局部:1客户端局部由用户使用,通过C/S的方式实现,用户可使用APP通过互联网进展操作。2效劳器端软件由管理员使用,通过B/S的方式实现,管理员通过管理界面可对数据库进展操作和管理。2.2 业务流程图该图为校车票网上订票系统业务流程图图2 校车票网上订票系统业务流程图3 根本介绍3.1 功能模块本设计包含的功能模块有

5、:初始化模块, 系统功能模块, 打印模块, 校车信息管理模块, 退票信息管理模块, 客户类型信息管理模块, 订票信息管理模块。各子系统功能定义如下:初始化模块系统初始时,由操作系统调用,执行完毕后进入消息循环状态。系统功能模块接收系统功能区的相应信息,启动校车信息查询、订票管理、学生信息查询、学生*管理、学生设置、用户和密码管理。校车信息管理模块添加校车信息、更新校车信息、删除校车信息、查询校车信息等信息。学生信息管理模块添加学生*、修改学生*、删除学生*等信息。订票信息管理模块添加车票、修改车票、删除订票、查询剩余订票等信息。3.2 人工处理过程效劳器端的人工处理数据的输入学校根据需要来输入

6、校车信息、学生等信息的具体数据,但必须保证其正确性和准确性。数据的修改学生根据需要对指定的数据进展修改,由于记录繁多,因此用户首先要输入一定的查询条件,缩小记录范围,然后再从该范围中找到指定的记录进展修改,保证修改的内容的正确性和准确性后可更新数据库的数据。数据的删除学生根据需要对指定的数据进展删除,由于记录繁多,因此用户首先要输入一定的查询条件,缩小记录范围,然后再从该范围中找到制定的记录进展删除,保证将要删除的内容的正确性和准确性后可删除掉数据库中的数据。数据的查询学生根据需要查询数据库中的所有数据,用户需输入一定的查询条件,然后可按照输入的查询依据查询新数据库的数据。客户端的人工处理注册

7、用户必须注册才能进展订票操作,在此,用户必须填写个人的真实并准确的详细信息。查询用户通过填写一定的查询条件,可查询用户所需要的校车信息、班次时间等。订票用户可通过互联网进展订票操作,填写准确的订票信息后提交订票。3.3 尚未解决的问题客户端尚未解决的问题客户端尚未解决的问题是,仅在安卓平台下进展了软件开发,未对IOS系统的手机进展开发,这会使得局部学生无法获得订票信息。效劳器尚未解决的问题效劳器尚未解决的问题是,如何与学校的学生*数据库连接,获取正确的数据库信息。4 软件界面4.1 软件登录界面国科大的学生可以通过该软件注册*,并登录自己的*,订购校车的班次。图 3 国科大校车订票系统手机软件

8、登录界面4.2 预订车票界面成功登录学生*后,系统理解切换到车票预订界面,在校学生可以提前预订以后三天的车票。图 4 校车预订车票界面4.3 查看订票记录在校学生如果需要查看自己的订票信息,车次以及时间,可以在这个界面进展查询。图 4 校车订票记录界面二系统数据构造设计1 逻辑构造设计要点:按照需求分析设计数据库中的字段,建立一个逻辑上的数据库的构造。在数据库软件(MySQL)中建立数据库,并要保证数据库最低要符合第二范式。2 数据构造与程序的关系:2.1 静态数值需求支持并行操作的用户。处理多条记录数据。表或文件的最小为2048字节,最大无限制。2.2 时间特性需求响应时间应在人的感觉和视觉

9、事件范围内;更新处理时间,随着应用软件的版本升级,以及网络的定期维护更新。2.3 灵活性当需求发生*些变化时,管理应用软件操作方式、数据构造、运行环境根本不会发生变化,变化只是将对应的数据库文件内的记录改变,或将过滤条件改变即可。2.4 数据管理能力需求本应用软件可管理多条记录,本应用软件根本约用1,300千字节空间,所有文件均放置在数据库中调用,查询数据、文件、记录时,通过库文件名直接进展操作或通过存储过程来完成操作。3 数据库设计描述3.1 数据库分析需将数据库设计成关系模式最低符合第二范式的标准。按照需求分析,确定系统的实体。根据实体分析的结果,在数据库中应建立如下数据表:student

10、 (学生信息表)、school(校车信息表)、ticketsreservation (订票信息表)、ticketsleft (余票信息表)、account (注册信息表)、message推送信息表,其中ticketsreservation (订票人信息表)和account (注册信息表)用来存放订票人的信息, car_infor(校车信息表)和message推送信息表用来保存校车信息,同时各个数据表间也存在着相应的连接的关系,例如在student(学生信息表)中包含有学生的*信息、校车车次、校车时间等相关字段用来与订票人数据表和校车信息表建立联系。3.2 数据库设计说明学生信息表 studen

11、t:在此数据表中,存放的是具体学生的详细信息,为学校学生信息数据库的数据,在学生信息中包含有乘客的一些根本信息和订票人的*、校车车次、校车等级等字段与其他表相连接的字段。表1 学生信息表属性名属性类型属性释义StunoChar(20)*StunameVarchar(50)学生*PhonenoChar(20)手机号BlacklistTinyint黑 0,1,2校车信息表 schoolbus:表2 校车班次的信息表属性名属性类型属性释义BusnoChar(20)车号StartplaceVarchar(50)乘车地点StarttimeTime开车时间订票信息表 ticketsreservation:

12、表3 订票信息表属性名属性类型属性释义BusnoChar(20)车号StunoChar(20)*BusdateDate乘车年月日BustimeTime乘车时间BueweekTinyint乘车星期 1,2,3,4,5,6,7管理订票的一些信息,包括历史记录等等余票信息表 ticketsleft:表4 余票信息表属性名属性类型属性释义BusnoChar(20)车号Ticketsnoint余票数BusdateDate乘车年月日BustimeTime乘车时间BueweekTinyint乘车星期 1,2,3,4,5,6,7班次余票信息,管理还有多少车票可以订购账号信息表 account:表5 注册学生信

13、息表属性名属性类型属性释义AccountnoChar(20)账号AccountkeyChar(20)密码学生注册*管理,对应于车次的关系数据推送信息表 message:表6 消息推送信息表属性名属性类型属性释义messagenoChar(20)编号AccountnoChar(20)发布账号MessagetimeDatetime发布时间ContentVarchar(100)内容用于学校发布校车信息的数据。三系统总体设计1 总体设计描述总体设计是软件开发人员根据软件需求说明书的要求,运用构造化程序设计思想,将软件自上而下逐层分解成多个软件模块,直到分解成每一个模块只具有单一的功能,能用一个或几个程

14、序实现的树形构造为止。总体设计阶段还要定义各模块的数据传递关系,设计软件的编码方案、文件存储策略、输入输出格式,以及硬件和系统软件配置,最后编制概要设计说明书。总体设计的内容主要包括:构造化模块设计;代码设计;文件设计;输入设计;输出设计;系统软硬件配置设计;编制设计说明书。总体设计过程可分为两个主要阶段:(1) 功能设计,确定车站售票系统的实现方案;构造设计,确定该软件的构造。功能设计是在需求分析的根底上进展的,这里所说的功能是泛指的,不仅指问题定义中列出的功能,还包括软件定义时确定的任何一个独立的数据加工或处理步骤,例如添加、删除、查询和各个特定功能的算法实现等。(2) 构造设计,是将整个

15、系统按照不同的功能和层次划分为一个个功能简单明确且相对独立的局部模块,每个模块实现系统的一项具体功能,自顶向下,逐步细化。构造设计是确定程序由哪些模块组成,以及这些模块之间的关系。1.1 系统功能设计本系统分三个模块,登录功能模块;管理员功能模块,实现车票和车次管理;普通用户功能模块,实现车票和个人信息管理。校车车票网上订票系统简单、操作灵活、方便、反响快速、计算准确,系统运行稳定、平安可靠,而且有良好的交互界面,让使用者可以方便、快速地掌握。1.2 系统的总体构造根据系统分析,按照构造化程序设计的要求得到了下面的系统功能模块图:删除车次发布车次更新车次管理员功能选择 校车消息推送消息天气信息

16、校车票网上订票系统 修改信息 修改信息账户重置普通用户功能选择 查询信息 车次查询 时间查询车票管理始shi预订车票退去车票图5 校车车票网上订票系统总体功能图1.3 子模块描述各个子模块描述如下:1.登录功能模块:翻开手机应用程序,进入登录功能模块,选择登录身份区别是普通用户或是系统管理员。2.管理员功能模块:车次管理功能模块主要实现车次的添加、车次更新、删除等功能。同时为了更好的提供出行信息,管理员可以根据天气信息推荐学生注意天气的变化等信息,温馨地关心学生。3.普通用户功能模块:(1)查询功能模块:主要完成车票信息查询、订票信息查询等功能。(2)车票管理功能模块:主要完成校车车票的订票,

17、退票等功能。(3)个人信息管理功能模块:主要完成个人信息的修改等功能。四视图设计1 E-R图2 数据流图数据流程图是以图形的方式表达在问题*息的变换和传递过程。它把系统看成是由数据流联系的各种概念的组合,用分解及抽象手段来控制需求分析的复杂性,采用分层的数据流程图来表示一个复杂的系统。(1) 校车车票网上订票系统系统登录数据流图:开场登录身份识别管理员/普通用户管理员操作用户 完毕图6 校车车票网上订票系统登录管理数据流图(2) 校车车票网上订票系统车票查询数据流图:普通用户登录 查询选择 车次信息查询 订票信息查询个人信息查询 修改个人信息 完毕图7 校车车票网上订票系统查询管理数据流图(3

18、) 校车车票网上订票系统车次、车票、时间管理数据流图:图9 校车车票网上订票系统车次、车票管理数据流图3 程序描述3.1 客户端程序本套校车车票订票系统软件的客户端应用程序以手机软件程序编写,客户使用手机安装下载通过互连网络对数据库进展访问,并完成客户端可以完成的功能。3.2 效劳器端程序本套校车车票订票系统软件的效劳器端应用程序,在linu*平台下编写前台控制软件,用电脑主机充当效劳器,管理员通过使用该软件来进展对数据库中的数据进展管理。3.3 后台数据库本套校车车票订票系统软件的后台数据库使用MySQL来搭建后台数据库效劳器,用来存放所有的数据。4 功能描述4.1 整体流程设计图10 整体

19、系统设计思路4.2 客户端的主要功能用户订票的全部过程图11 用户订票流程图图12订票逻辑图图13历史订单查询及删除逻辑4.3 效劳器的主要功能图14 管理员程序实现流程4.4 软件时序图设计软件程序时,时序图包含如下的四个元素:1)对象,2) 生命线, 3) 消息,4) 激活。图14 用户预订车票时序图图15用户退票时序图4.5 数据库接口本套校车订票系统软件效劳器端的程序是使用eclipse来编写完成,建立eclipse与数据库的连接使用了ADODB的对象来完成,每个模块中都使用了Recordset、mand、Connection的对象,因此在模块中对三者的对象进展定义(分别为:rs、cm

20、d、),并且将连接数据库的语句写好并翻开连接,在其他的模块中共同调用这三个对象来对数据库进展操作。图16 软件具体实现接口五程序实现1.1 客户端通信方式有和Socket两种。(1) 通信:连接使用的是请求响应方式,即在请求时建立连接通道,当客户端向效劳器发送请求后,效劳器端才能向客户端返回数据(2)Socket通信: 在双方建立起连接后就可以直接进展数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想效劳器发送请求图17 TCP通信模型的Socket于是本设计选择安卓Socket编程方式实现: 效劳器端: 首先声明一个ServerSocket对象并且指定端口号, 然后调用Serv

21、ersocket的accept()方法接收客户端的数据,accept()方法在没有数据进展接收的处于堵塞状态。 一旦接收到数据,通过inputstream读取接收的数据 客户端: 创立一个Socket对象,指定效劳器端的ip地址和端口 通过inputstream读取数据,获取效劳器发出的数据 最后将要发送的数据写入到outputstream即可进展TCP协议的socket数据传输。天气预报的实现局部,通过资料查询,我们发现有如下免费天气预报获取途径,如下所示: Google的天气预报API 中央气象台 中国气象局 WeatherWebService 其中Web*ml.天气预报 Web 效劳,数

22、据每2.5小时左右自动更新一次,准确可靠。包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据。于是我们选择这一资源进展天气信息的推送。1.2 效劳器在效劳器上的程序由于要承受多个用户的请求,程序的灵活性和强健性必须要得到保证,于是本设计采用多线程程序设计思想,对校车系统进展了一些测试。多线程程序有如下优点:1) 线程间方便的通信机制 2) 提高应用程序响应 3) 使多CPU系统更加有效 4) 改善程序构造设计思路:多线程的程序构造能够极大的便利程序设计,本设计将整个系统进展功能模块的分解,使得每个功能模块独立不相关,每个模块占用一个线程,独立和协调地完成整个系统的功能

23、,这种程序设计思路方便管理和增加新的功能,可扩展性强。多线程列表效劳器是否可达预售期查询余票查询预定车票今日订单查询订单查询消息详细信息账号验证个人信息查询密码修改班车信息查询退票图18 多线程划分列表事件监听方面,epoll是Linu*内核中的一种可扩展IO事件处理机制,最早在内核中引入,可被用于代替POSI* select 和 poll 系统调用,并且在具有大量应用程序请求时能够获得较好的性能,epoll 与 FreeBSD的kqueue类似,都向用户空间提供了自己的文件描述符来进展操作。epoll负责监听来自应用程序的TCP/IP请求,并反响信息到手机应用端1.3 加密与解密在与效劳器之

24、间的数据交互中,除了可以使用post请求来进展加密请求之外,我们可以使用常见的加密算法,对数据进展加密。本设计采用DES加密算法。DES(Data Encryption Standard),即数据加密标准,是一种使用密钥加密的块算法,DES算法的入口参数有三个: Key、Data、Mode。其中Key为7个字节的工作密钥; Data是要被加密或被解密的8个字节数据; Mode为DES的工作方式, 分为: 加密或解密。DES是一种对称的加密算法,加密和解密使用同一个密钥。本设计使用DES算法进展加密,采用的是CBC模式,填充方式采用PKCS5Padding。CBC模式指的是加密块链模式,算法参加

25、了初始向量。下面的代码就是获取一个初始向量,这种模式的特点是:1) 加密的密文长度为8个字节; 2) 当明文使用一样的密钥和初始向量的时候,CBC模式总是产生一样的密文; 3) 密文块不能再次排列; 4) 为防止一样的明文产生一样的密文,可以使用不同的初始化向量; 5) 一个错误发生以后, 当前和以后的密文都会被影响。在不同的平台上,只要能保证这几个参数的一致,就可以实现加密和解密的一致性:加密和解密的密钥一致; 采用CBC模式的时候,要保证初始向量一致; 采用一样的填充模式。六总结在现今移动互联网浪潮下,校车订票系统作为一个典型的应用,正在便利我们的生活,人们的生活越来越离不开手机,人们的大

26、局部活动,交友,娱乐也越来越多依赖手机。关于手机APP的设计和用户需求分析,也给我们小组所有成员带来了许多思考。小组设计的初衷在于解决生活中的一些力所能及的事情,或许这些设计不算很完美,却锻炼了我们发现问题,解决问题,提出问题的能力,让我们在未来的科研路上,可以脚踏实地,少走弯路。本设计将校车订票系统分三局部进展,手机客户端,效劳器端,数据库。手机客户端界面设计美观,操作简单方便;效劳器端在笔记本电脑上,运行在Linu*操作系统下,采用多线程框架编写程序,方便程序管理与更新。校车订票系统从功能上实现:效劳端目前具备发布以及更新订票信息,注册*,管理数据库等功能;客户端上具备订票信息查询,余票查

27、询,注册*,天气信息获取,预订车票以及退订车票等功能。不过本设计还存在许多缺乏的地方,表现在如下二个方面:1) 进度上:由于没有获取国科大学生的根本信息以及校车的真实信息,校车订票系统还未整体测试和完善。此外稳定性及流畅性各种方面都未获得验证。2) 设计上:校车订票系统设计思路传统,创新上存在缺乏。附录效劳器程序1.1 数据库功能实现*include btbs.h*include *include *include *include *include *include *include *include static pthread_mute*_t mute* = PTHREAD_MUTE*_

28、INITIALIZER;void *book_ticket(void *arg)if (arg = NULL)return NULL;arg_attr arg_ = *(arg_attr*)arg;MYSQL my_connection;my_connection = *(arg_.my_connection);int client_fd = arg_.client_fd;int cmd1024 = 0;char studentId20 = 0;char startplace50= 0;char year6 = 0;char month3 = 0;char day4 = 0;char week

29、end3 = 0;strcpy(cmd, arg_ d);strcpy(studentId, arg_.op_cmd0);strcpy(startplace, arg_.op_cmd1);strcpy(year, arg_.op_cmd2);strcpy(month, arg_.op_cmd3);strcpy(day, arg_.op_cmd4);strcpy(weekend, arg_.op_cmd5);int retval;/mysql_query(arg_.my_connection, set names utf8);retval = mysql_query(&my_connection

30、, cmd);printf(%sn, cmd);if (!retval)MYSQL_RES *res_ptr = mysql_use_result(&my_connection);if (res_ptr)MYSQL_ROW sqlrow = mysql_fetch_row(res_ptr);if (sqlrow)if(send(client_fd, e*isted, sizeof(e*isted), 0) = -1)fprintf(stderr, send in book_ticket failed %sn, strerror(errno);elsechar cmd11024 = 0;char

31、 cmd21024 = 0;if (strcmp(startplace, 雁栖湖校区) = 0 & strcmp(weekend, 0) = 0)sprintf(cmd1, insert into TicketsReservation values(C1, %s, %s-%s-%s, 07:20:00), studentId, year, month, day);sprintf(cmd2, update TicketsLeft set ticketsno = ticketsno - 1 where ticketsno 0 and busno = C1 and busdate = %s-%s-%

32、s, year, month, day);else if(strcmp(startplace, 雁栖湖校区) = 0 & strcmp(weekend, 1) = 0)sprintf(cmd1, insert into TicketsReservation values(E1, %s, %s-%s-%s, 07:20:00), studentId, year, month, day);sprintf(cmd2, update TicketsLeft set ticketsno = ticketsno - 1 where ticketsno 0 and busno = E1 and busdat

33、e = %s-%s-%s, year, month, day);else if(strcmp(startplace, 玉泉路校区) = 0 & strcmp(weekend, 0) = 0)sprintf(cmd1, insert into TicketsReservation values(C2, %s, %s-%s-%s, 15:00:00), studentId, year, month, day);sprintf(cmd2, update TicketsLeft set ticketsno = ticketsno - 1 where ticketsno 0 and busno = C2

34、 and busdate = %s-%s-%s, year, month, day);elsesprintf(cmd1, insert into TicketsReservation values(E2, %s, %s-%s-%s, 18:00:00), studentId, year, month, day);sprintf(cmd2, update TicketsLeft set ticketsno = ticketsno - 1 where ticketsno 0 and busno = E2 and busdate = %s-%s-%s, year, month, day);print

35、f(%sn, cmd1);printf(%sn, cmd2);pthread_mute*_lock(&mute*);mysql_query(&my_connection, cmd2);pthread_mute*_unlock(&mute*);if (mysql_affected_rows(&my_connection)mysql_query(&my_connection, cmd1);if(send(client_fd, True, sizeof(True), 0) = -1)fprintf(stderr, send in book_ticket failed %sn, strerror(er

36、rno);elseif(send(client_fd, False, sizeof(False), 0) = -1)fprintf(stderr, send in book_ticket failed %sn, strerror(errno);mysql_free_result(res_ptr);elsefprintf(stderr, book_ticket error %d: %sn, mysql_errno(&my_connection), mysql_error(&my_connection);close(client_fd);return NULL;void *drop_ticket(

37、void *arg)if (arg = NULL)return NULL;arg_attr arg_ = *(arg_attr*)arg;MYSQL my_connection;my_connection = *(arg_.my_connection);int client_fd = arg_.client_fd;int cmd1024 = 0;char studentId20 = 0;char startplace50= 0;char year6 = 0;char month3 = 0;char day4 = 0;char weekend3 = 0;strcpy(cmd, arg_ d);s

38、trcpy(studentId, arg_.op_cmd0);strcpy(startplace, arg_.op_cmd1);strcpy(year, arg_.op_cmd2);strcpy(month, arg_.op_cmd3);strcpy(day, arg_.op_cmd4);strcpy(weekend, arg_.op_cmd5);int retval = mysql_query(&my_connection, cmd);if (!retval)if (mysql_affected_rows(&my_connection)char cmd1024 = 0;sprintf(cmd

39、, update TicketsLeft set ticketsno = ticketsno + 1 where busno = (select busno from SchoolBus where startplace = %s and weekend = %s) and busdate = %s-%s-%s, startplace, weekend, year, month, day);mysql_query(&my_connection, cmd);if (mysql_affected_rows(&my_connection)if(send(client_fd, True, sizeof

40、(True), 0) = -1)fprintf(stderr, send in drop_ticket failed %sn, strerror(errno);elseprintf(update in drop_ticket failedn);close(client_fd);return NULL;void *check_account(void *arg)if (arg = NULL)return NULL;arg_attr arg_ = *(arg_attr*)arg;MYSQL my_connection;my_connection = *(arg_.my_connection);in

41、t client_fd = arg_.client_fd;int cmd1024 = 0;strcpy(cmd, arg_ d);int retval;/mysql_query(arg_.my_connection, set names utf8);retval = mysql_query(&my_connection, cmd);printf(%sn, cmd);if (!retval)MYSQL_RES *res_ptr = mysql_use_result(&my_connection);if (res_ptr)MYSQL_ROW sqlrow = mysql_fetch_row(res

42、_ptr);if (sqlrow)if(send(client_fd, True, sizeof(True), 0) = -1)fprintf(stderr, send in check_account failed %sn, strerror(errno);elseif(send(client_fd, False, sizeof(False), 0) = -1)fprintf(stderr, send in check_account failed %sn, strerror(errno);mysql_free_result(res_ptr);elsefprintf(stderr, chec

43、k_account error %d: %sn, mysql_errno(&my_connection), mysql_error(&my_connection);close(client_fd);return NULL;void *modify_passwd(void *arg)if (arg = NULL)return NULL;arg_attr arg_ = *(arg_attr*)arg;MYSQL my_connection;my_connection = *(arg_.my_connection);int client_fd = arg_.client_fd;int cmd1024

44、 = 0;strcpy(cmd, arg_ d);int retval;/mysql_query(arg_.my_connection, set names utf8);retval = mysql_query(&my_connection, cmd);if (!retval)if (mysql_affected_rows(&my_connection)if(send(client_fd, True, sizeof(True), 0) = -1)fprintf(stderr, send in modify_passwd failed %sn, strerror(errno);elseif(se

45、nd(client_fd, FALSE, sizeof(FALSE), 0) = -1)fprintf(stderr, send in modify_passwd failed %sn, strerror(errno);elsefprintf(stderr, modify_passwd error %d: %sn, mysql_errno(&my_connection), mysql_error(&my_connection);if(send(client_fd, FALSE, sizeof(FALSE), 0) = -1)fprintf(stderr, send in modify_pass

46、wd failed %sn, strerror(errno);close(client_fd);return NULL;void *query(void *arg)if (arg = NULL)return NULL;arg_attr arg_ = *(arg_attr*)arg;MYSQL my_connection;my_connection = *(arg_.my_connection);int client_fd = arg_.client_fd;int cmd1024 = 0;strcpy(cmd, arg_ d);/sleep(10);int retval;/mysql_query

47、(arg_.my_connection, set names utf8);retval = mysql_query(&my_connection, cmd);if (!retval)MYSQL_RES *res_ptr = mysql_use_result(&my_connection);if (res_ptr)MYSQL_ROW sqlrow;char buf4*1024;memset(buf, 0, sizeof(buf);while(sqlrow = mysql_fetch_row(res_ptr)unsigned int field_count = 0;while (field_cou

48、nt 0)strcat(buf, *);printf(%sn, buf);if (send(client_fd, buf, strlen(buf), 0) = -1)fprintf(stderr, send in query failed %sn, strerror(errno);elseprintf(nothingn);if (send(client_fd, , strlen(,), 0) = -1)fprintf(stderr, send in query failed %sn, strerror(errno);mysql_free_result(res_ptr);elsefprintf(

49、stderr, query %d: %sn, mysql_errno(&my_connection), mysql_error(&my_connection);close(client_fd);return NULL;1.2 自动更*票*include *include *include *include *include *include *include *include *include *include *include *include *include *include *include btbs.h*define MA*EVENTS 64*define QUERY_PRE_SAL

50、E 2 /查询预售期*define QUERY_TICKETS 3 /查询车票*define BOOK_TICKETS 4 /订票*define QUERY_ORDERS_TODAY 5 /查询今日订单*define QUERY_ORDERS 6 /查询订单*define PUSH_MESSAGE 7 /推送消息*define CHECK_ACCOUNT 9 /验证账户*define QUERY_PERSON_INFO 10 /查询个人信息*define MODIFY_PASSWD 11 /修改密码*define QUERY_SCHOOL_BUS 12 /查询校车信息*define DROP_

51、TICKETS 13 /退票int str_split(char *str1, .);int get_first_field(const char *str);int main(int arg, char *args)if (arg 2)return -1;int port = atoi(args1);int st = socket(AF_INET, SOCK_STREAM, 0);/初始化socketstruct sockaddr_in addr;/定义一个ip地址构造memset(&addr, 0, sizeof(addr);addr.sin_family = AF_INET;/将addr

52、构造的属性定位位TCP/IP地址addr.sin_port = htons(port);/将本地字节顺序转化位网论字节顺序addr.sin_addr.s_addr = htonl(INADDR_ANY);/INADDR_ANY代表这个server上所有的地址/将IP与server程序绑定if (bind(st, (struct sockaddr *)&addr, sizeof(addr) = -1)printf(bind failed %sn, strerror(errno);return E*IT_FAILURE;/设置socket为非阻塞的int flags, ret;flags = ft

53、l(st, F_GETFL, 0);if (flags = -1)printf(ftl %sn, strerror(errno);return E*IT_FAILURE;flags |= O_NONBLOCK;ret = ftl(st, F_SETFL, flags);if (ret = -1)printf(ftl %sn, strerror(errno);return E*IT_FAILURE;/监听客户端的连接请求ret = listen(st, SOMA*CONN);if (ret= -1)printf(listen %sn, strerror(errno);return E*IT_FAILURE;/连接数据库MYSQL my_connection;mysql_init(&my_connection);if (mysql_real_connect(&my_connection, localhost, root, 2222, ReservationSystem, 0, NULL, 0)mysql_query(&my_connection, set names utf8);printf(connection successn);elsefprintf(stderr, connection failedn);if (mysql_errno(&my_connect

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!