1、数据库课程设计“电信收费系统”的一些资料系统基本功能: 1、用户缴费情况查询 银行营业终端通过银行业务处理机向电信业务处理机发出查询请求,同时提供电话号码或合同号,电信业务处理机根据对应的电话号码或合同号,在计费库中查询该用户的徼费情况(每月的总费用、徼费标志、徼费日期)。将用户徼费信息返回给银行业务处理机,银行业务处理机再将费用信息返回给营业终端。 2、用户费用信息查询 银行营业终端通过银行业务处理机向电信业务处理机发出查询请求,同时提供电话号码或合同号,电信业务处理机根据对应的电话号码或合同号,在计费库中查询该用户的费用信息(包括各分项费用信息),将费用信息返回给银行业务处理机,银行业务处
2、理机再将费用信息返回给营业终端。 3、柜员收费帐务查询 银行营业终端通过银行业务处理机向电信业务处理机发出查询请求,同时提供银行柜员编号和日期,电信业务处理机根据对应的柜员编号和日期,在计费库中查询该柜员该段时间内的收费信息,包括总帐和收费明细,将柜员收费信息返回给银行业务处理机,银行业务处理机再将费用信息返回给营业终端。 4、各营业点收费帐务查询 银行营业终端通过银行业务处理机向电信业务处理机发出查询请求,同时提供银行营业点编号和日期,电信业务处理机根据对应的营业点编号和日期,在计费库中查询该营业点所有柜员该段时间内的收费信息,包括总帐和收费明细,将营业点收费信息返回给银行业务处理机,银行业
3、务处理机再将费用信息返回给营业终端。 5、银行全局收费帐务查询 银行营业终端通过银行业务处理机向电信业务处理机发出查询请求,同时提供银行编号和日期,电信业务处理机根据对应的银行编号和日期,在计费库中查询该银行所有柜员该段时间内的收费信息,包括总帐和收费明细,将银行收费信息返回给银行业务处理机,银行业务处理机再将费用信息返回给营业终端。 6、电信帐户费用查询 电信终端通过电信业务处理机向银行业务处理机发出查询请求,同时提供银行帐户,银行业务处理机根据对应的银行帐户,返回该帐户中的资金信息,电信业务处理机再将资金信息返回给电信终端。 7、单个用户缴费请求销帐 银行营业终端通过银行业务处理机向电信业
4、务处理机发出销帐请求,同时提供电话号码或合同号码,电信业务处理机根据对应的提供电话号码或合同号码,在计费库中进行销帐。 8、批量用户徼费请求销帐 银行营业终端通过银行业务处理机向电信业务处理机发出销帐请求,同时提供批量电话号码或合同号码,电信业务处理机根据对应的电话号码或合同号码,在计费库中进行销帐。 9、冲正 (1)银行方提出冲正请求 银行营业终端通过银行业务处理机向电信业务处理机发出冲正请求,同时提供徼费流水号,电信业务处理机根据对应的徼费流水号,在计费库中进行冲正处理。 (2)电信方提出冲正请求 电信营业终端通过电信业务处理机向计费系统发出冲正请求,同时提供徼费流水号,电信业务处理机根据
5、对应的徼费流水号,在计费库中进行冲正处理。 10、相应的接口功能 有相应的接口与电信的催费系统、自动停复机系统相连。 项目背景 近年来, 电信行业经历了很大的变化, 从固定到移动, 从语音到数据, 从电路交换 到分组交换, 从窄带到宽带的变化。 电信运营商在市场和政策的双重影响下, 正面临着 深刻的重组。新技术新业务创造了市场机会, 使新运营商不断兴起。旧运营商为了保持 原有的市场份额也通过兼并改组等方式不断扩大业务范围, 争取为客户提供从传统的 市话、长话、移动、智能网到新兴的数据。用户将来可以在多个运营商提供的多种电信 业务中自由选择。 在这种大背景下, 对电信运营商的计费和其它业务支持系
6、统的要求有了大的变化, 怎么能够达到尽量为用户提供优惠和方便, 以吸引更多用户, 又能够保证企业合理的 收益, 降低运营成本, 维持企业的运行和发展的目的。 电信计费系统成为了电信行业的 运行体系中最重要的支撑系统。 从为用户提供综合服务的运营商的角度来看, 一个好的 计费系统应具有以下特点: 综合性:能够满足同时从不同的数据源中采集数据,并能够对数据进行适当 的处理,并送到数据处理中心去。 灵活性:计费系统是业务规则驱动以及对用户有好。 集成性:系统具备高内聚低耦合性,系统具有良好的接口和可扩展性。 可靠性。对计费业务,要求保证数据的完整性。 2项目需求 根据业务模型和电信业务的需要,该系统
7、的功能需求模块进行分析设计如下: (1)登录模块。实现登录功能的数据处理功能,如果用户名和密码不存在,实现 注册功能。 (2)用户管理模块。开通帐号、用户帐号查询、用户列表、其中开通帐号查询可以更方便用户的查询,用户可以通过开通帐号查询来查取一些相关的信息。 用户列表中具有增加、暂停、修改、和删除等功能。 (3)管理员管理模块。分为:增加管理员,管理员列表和私人信息。管理员 管理包括信息有帐号、登录密码、重复密码、真实姓名、管理员邮箱、联系电话、 登录权限等。登录权限包括:管理员管理、资费管理、用户管理、帐务查询、帐 单查询。管理员列表有:删除、帐号、姓名、电话、邮箱、开户日期、权限、和 修改
8、。私人信息包括:登录密码、重复密码、真实姓名、管理员邮箱、开通日期、 联系电话、 登录权限、 其中登录权限又包括资费管理、 帐务查询、 和管理员管理。管理员管理模块的需求: 管理员开通管理:管理用户帐号,包括账号开通、暂停(枷锁) 、恢复、删除等。 管理员资料管理:管理员资料,包括姓名、身份证号、地址等。 管理员信息有ID、姓名、账号、密码、状态(正常/暂停/关闭) 、联系电话、 Email、开通日起、停止日起、权限(查询/修改/开户/ALL)等。 (4)资费管理模块。完成资费管理模块的增、删、改、查功能。 (5)账单管理模块。需求:整合系统按月生成用户帐单。 账单信息(可参考移动或联通的账单
9、管理模块) : 用户标识信息:账单 ID、姓名、账号、状态、联系电话、开通日起、Email。 账务信息:账号、日期、登录时间长度、本月费用。 账单明细:登录时间、退出时间、时长。 (6)帐务管理模块。需求:按月、年分别生成月帐务信息统计报表和年帐务信息统计表 。 月帐务信息(可参考移动或联通的帐务模块): 生成一个计费月周期中,每一天的帐务信息。 月帐务信息:日期、时长、费用。 年帐务信息(可参考移动或联通的帐务模块): 生成一个计费年周期中,每一月的帐务信息。 年帐务信息:月期、时长、费用。 (7)用户自服务管理模块。需求:用户通过 Internet 自查询自己的当前或历史账单,并 能修改自
10、己的密码或变更相关业务。 用户帐务信息自查询: 用户标识信息:账单 ID、姓名、状态、开通日起。 帐务信息:日期、登录时长、本月费用。 用户信息修改。 账单明细:登录时间、退出时间、时长。 3项目数据库设计数据库是电信资费管理系统中非常重要的环节之一, 一个结构良好的数据库 可以很好的实现系统的查询和管理,并且能够极大的提高系统的运行效率,以及 一个确定数据库存储结构与存取方法的物理设计, 建立起既能够反映现实世界信 息间的联系, 满足用户数据要求和加工要求, 又能被某个数据库管理系统所接受, 同时能实现系统目标,并有效存取数据的数据库。 使用 SQL server 2000/access 数
11、据库进行连接,分别为管理员表、用户表、 资费表、服务器月帐单表、服务器年帐单表、用户消费表、数据采集表。管理员 表包括属性有编号、登录名、登录密码、真实姓名、电话、邮箱地址、登录时间, 其中编号为主键,进行开通帐户时不可输入相同的编号否则系统不做相应操作。 用户表包括属性有编号、登录名、密码、真实姓名、性别、付款方式、用户状态、 电子邮箱、省份、职业、联系电话、公司、公司编码、邮政编码,其中编号也是 主键,方便对用户进行统一管理。资费表包括属性有业务帐号、资费名称、业务 密码、每小时资费、服务器名称、服务器状态,同样帐号是主键,服务器是外键, 要确保有此服务器才可以进行选择。用户消费表包含了各
12、个用户的消费信息,登 录时间、退出时间以及时长,方便用户随时进行查询。服务器月帐单表是各个器 的每个月的资费信息。服务器年帐单表是服务器的年资费表,都是方便管理员进 行查询和管理。另外,还需要数据采集表,用于采集数据。 表 1 管理用户表(user) : 字段名称 字段类型 字段长度 字段说明 id number 6 用户编号 name varchar2 50 用户名 sex varchar2 50 性别 password varchar2 50 用户密码 telephone varchar2 50 电话mail varchar2 date date authority varchar2 ke
13、yq varchar2 keya varchar2 realname varchar2 表 2 顾客用户表(consumer) : 字段名称 字段类型 id number password varchar2 name sex methord job company province telephone mail mailaddress post_code date state varchar2 varchar2 varchar2 varchar2 varchar2 varchar2 varchar2 varchar2 varchar2 varchar2 date varchar250 50 5
14、0 50 50 50 字段长度 6 50 50 50 50 50 50 50 50 50 50 50 50 50 字段长度 6 6 6 50 50 字段长度 50 6 6 6 字段长度 6邮箱 开户日期 用户权限 密码提示问题 密码回答问题 真实姓名 字段说明 帐务帐号 帐务密码 姓名 性别 付款方式 职业 公司 省份 电话 邮箱 公司邮箱 邮政编码 开户日期 状态 字段说明 帐号 登录时长(小时) 费用(元) 状态 开户日期 字段说明 资费名称 月租费用 小时费用 自费说明 字段说明 帐务帐号表 3 帐单信息表(tab) : 字段名称 字段类型 id number time number s
15、pent number state varchar2 date date 表 4 资源类别表(source) : 字段名称 字段类型 name varchar2 month_rent hour_spent introduce number number varchar2表 5 帐务信息表(unit) : 字段名称 字段类型 id numbertime spent state dengtime tuitime namenumber number varchar2 date date varchar26 6 50 50 50 50 字段长度 50 6 6 6 6时长 费用(元) 状态 登录时间 退
16、出时间 服务器名 字段说明 服务器 月使用时间 年使用时间 月份 年份表 6 服务器信息表(serve) : 字段名称 字段类型 name varchar2 month_time number year_time number month number year number4项目功能模块架构图登陆 超级管理 员 普通用户用户管理 用户自服 务 管理员管 理账单管理账务管理用户自服 务图 1 有登录权限的功能模块图登录注册用户管 理资费管 理帐单管 理帐务管 理管理员 管理用户自 服务退出系 统图 2 无登录权限有注册功能模块图 5MVC 设计模式 MVC 设计模式是目前用得比较多的一种设计模
17、式,最早出现在 Smalltalk 中,后来广泛应用于 Java Web 应用程序中。Model(模型)表示业务逻辑层, View(视图)代表表示层,Controller(控制器)代表控制层。 (1)View 在 Java Web 应用程序中, View 部分一般用 JSP 和 HTML 构建。 客户在 View 部分提交请求, 在业务逻辑层处理后, 把处理结果又返回给 View 部分显示出来。 因此,View 部分也是 Web 应程序的用户界面。 (2)Controller Controller 部分一般由 Servlet 组成。当用户请求从 View 部分传过来时, Controller
18、把该请求发给适当的业务逻辑组件处理;请求处理完成后,又返回给 Controller。 后者再把处理结果转发给适当的 View 组件显示。 因此, Controller 在 视图层与业务逻辑层之间起到了桥梁作用,控制了它们两者之间的数据流向。 (3)Model Model 部分包括业务逻辑层和数据库访问层。在 Java Web 应用程序中,业 务逻辑层一般由 JavaBeans 或 EJB(Enterprise JavaBeans,企业级 JavaBeans)构 建。EJB 是 J2EE 的核心组件,可以构建分布式应用系统。与普通 JavaBeans 不 同,它由两个接口和一个实现类组成,并且包
19、含一些固有的用于控制容器生命周 期的方法。 (4)基于 MVC 模式的 Java Web 应用程序实例 按照 MVC 设计模式,用 JSP,Servlet 及 JavaBeans 构建一个登录系统。 该系统的要求是,当用户在登录页面上填入用户名和密码并提交后,系统将 检查该用户是否已经注册;如果该用户已注册,系统将进入主页面,否则就进入 注册页面。 按以下步骤构建这个系统: 1)数据库设计:使用 MS Access 作为数据库,构建数据表 T_UserInfo; 2)构建视图组件:登录页面 login.jsp,主页面 main.jsp,以及注册页面register.jsp; 3)构建控制层组件
20、:一个 Servlet,取名为 loginServlet.java; 4 ) 构 建 业 务 逻 辑 层 组 件 ( Model 组 件 ) 一 个 JavaBean , 取 名 为 : loginHandler.java; 5)构建数据访问层组件:一个数据访问类,取名为 dbPool.java; 6)编译、打包程序; 7)部署该程序到 Web 服务器 Tomcat 中,然后运行。该系统的工作流程如 图 1.3 所示:数据表设计: 用户登录是一个涉及数据库操作的用例。为简便起见,本例使用的数据库为 MS Access。登录涉及的数据表取名为 T_UserInfo,其结构如表 1.5 所示。 表
21、 7 数据表 T_UserInfo 字段名 字段类型 字段描述 文本 (50 b) 文本 (30 b) 用户名, 用户名,主键 密码userName password构建视图组件: 本例有 3 个视图组件,分别是登录页面 login.jsp,主页面 main.jsp 及注册页 面 register.jsp。它们之间的关系是,当用户在登录页面 login.jsp 上填入用户名和 密码并提交后,系统将检查该用户是否已经注册,如果该用户已注册,系统将进 入主页面 main.jsp,否则就进入注册页面 register.jsp。 构建控制组件: 本用例的控制组件是一个 Servlet,叫做 login
22、Servlet。该组件先处理 HTTP 然后调用模型组件或业务逻辑组件 loginHandler 检查该用户是否已 POST 请求,注册,如果已注册,系统转入主页面 main.jsp,否则进入注册页面 register.jsp, 要求用户注册自己的信息。 另外, Servlet 都要在 web.xml 中声明。 loginServlet 在 web.xml 中的声明如代码清单。 构建模型组件: 本用例的模型组件(或称为业务逻辑组件)是 loginHandler。它先从数据访 问组件 dbPool 取得数据库连接,然后检查数据库中是否已有该用户的记录,即 检查该用户是否已注册。如果已注册,返回
23、true,否则返回 false。 构建数据访问组件: 本用例的数据访问组件是 dbPool。dbPool 从一个属性文件 db. properties 中 获得数据库驱动程序名,URL,用户名和密码,然后利用这些信息连接数据库, 取 得 连 接 。 因 为 所 用 数 据 库 是 Access, 数 据 库 驱 动 程 序 采 用 sun.jdbc.odbc.JdbcOdbcDriver,数据库 URL 为 jdbc:odbc:login,其中 login 是本 用例的数据源。db.properties。制订人: 金松河、钱慎一、 制订人: 金松河、钱慎一、黄永丽 信息分析与设计设计说明书 信
24、息分析与设计设计题目:中国移动手机缴费管理系统 手机缴费管理 设计题目:中国移动手机缴费管理系统 专 业: 信息管理与信息系统指导教师: 指导教师: 班 学 姓 级: 号: 名:同 组 人:计算机与信息工程学院 2010 年 12 月 21 日0前言近年来,随着中国的市场经济的高速发展的情况下,社会上出现了很多新消 费模式,由此移动通信行业衍生出很多新的业务,具体情况可总结为以下几点: 人们生活水平的提高,消费项目,服务种类的增加,产生了各种各样好收费 项目。 在这追求效率的时代,社会需要方便和快捷的缴费方式。 通信行业竞争 的日益激烈,移动通信的服务意识越来越高,通过各种服务吸引用户,已成为
25、通 信公司重要的竞争手段。在当今网络社会,技术成熟,发挥网络技术优势,利用 网络实现快捷缴费已经成为可能。 利用电子商务网络以及众多的营业网点实时 收费,在几乎不增加系统负担的情况既可缓解目前收费单位营业厅的紧张状况, 又方便用户缴费,提高了费用回收率。目录一 二 三前言.1 系统环境.3 总体设计.3四 详细设计.4 五 调试与测试.8 六 设计中遇到的问题及解决方法10七 源程序清单.11 八 九 总结,收获与体会.28 参考文献282手机缴费系统一、 系统环境在 Linux 环境下,使用 GNU C 或 GNU C+,在 UNIX/Linux make 开发工具 的的管理和控制下,利用
26、UNIX/Linux Socket 库在网络的底层进行开发设计。二、 设计目的对移动通信话费查询与缴费业务进行了系统全面的分析研究。 针对现有系统 中实时性不足而造成用户欠费太多使公司企业蒙受损失的问题。采用开发工具 Linux+Mysql 进行系统设计。基于 UNIX Socket 和 MySQL 数据库,设计一个交 易型中间件系统。提供通讯转发和协议转换的桥梁作用。例如电子商务、银行代 理业务软件等都是这种类型软件这里的中间件是指交易型中间件。 交易型中间件 是指用在不同行业、 不同部门间的通讯转发和协议转换的软的件, 在不同的行业、 不同的系统间。这里主要是利用 UNIX 系统提供的 S
27、ocket 库在网络底层,开发 交易型中间件。 本设计系统能够通过两种方式提供对移动话费信息输入、查询、编辑以及话 费统计各明细项目的数据编辑,自动计算出话费的各项合计数据;可自主设定条 件从而达到对话费数据的多角度查询功能;方便导入、导出数据及输出报表。三、 总体设计程序设计组成框图实现工具及方法 基本功能 Linux +Mysql+ VMware Workstation 客户端向中间件发送请求,中间件收到请求后, 客户端向中间件发送请求,中间件收到请求后,接收客户方数 方所需数据;重组服务方返回数据, 据;组织服务器 S1 方所需数据;重组服务方返回数据,并返回 给客户方;留迹;本地业务统
28、计。 给客户方;留迹;本地业务统计。 客户端向中间件发送请求,中间件收到请求后, 客户端向中间件发送请求,中间件收到请求后,接收客户方数 方所需数据;重组服务方返回数据, 据;组织服务器 S2 方所需数据;重组服务方返回数据,并返回 给客户方;留迹;本地业务统计。 给客户方;留迹;本地业务统计。 客户端向中间件发送请求,中间件收到请求后, 客户端向中间件发送请求,中间件收到请求后,到数据库里去 寻找用户相关交费的表,再返回给客户端,体现在用户面前。 寻找用户相关交费的表,再返回给客户端,体现在用户面前。现金支付网上缴费话费查询退出系统当完成一次交易时,就可以退出系统。 当完成一次交易时,就可以
29、退出系统。(1)中间件模型 )3(2)流程图 )四、 详细设计 1、基本功能 、1.1 现金支付 客户到操作台缴纳费用,选择现金支付方式后,输入用户的手机号码和欲交 的话费, 客户端根据用户提供的手机号码向中间件发送请求, 中间件收到请求后, 接收客户方数据;组织服务器 S1 方所需数据;重组服务方返回数据,并返回给 客户方。 1.2 网上缴费 客户到操作台缴纳费用,选择网上缴费方式后,输入用户的银行卡号、手机 号码和欲交的花费,客户端根据用户提供的手机号码向中间件发送请求,中间件 收到请求后,接收客户方数据;组织服务器 S2 方所需数据;重组服务方返回数 据,并返回给客户方。41.3 查询
30、通过输入手机号码就可以得到手机用户的基本信息,包含用户名,手机号, 手机余额。 1.4 退出2、函数说明 、mysql_init(&mysql); / 初始化数据结构 mysql_real_connect(&mysql,localhost,root,0,mydb,0,NULL,0); /连接数据库 mysql_query(&mysql,SELECT * FROM person);/执行查询语句 mysql_query result=mysql_store_result(&mysql); /保存结果 int socket(int domain, int type, int protocol);/
31、 创建套接字 int bind(int sockfd,const struct sockaddr *my_addr, int addrlen);/ 绑定本地地址 int listen(int s,int backlog);/ 监听连接 int connect(int sockfd,const structct sockaddr * server_addr, socklen_t addrlen); /建立本地系统和外部系统之间的连接 int accept(int s, struct sockaddr *addr, socklen_t addrlen); / 服务器调用,从等待从编号为 s 的套接
32、字上接受客户连接请求。 send()/write 与 recv()/read();/数据传输 struct servent *getservbyport(int port, const char *protocal); /得到服务器端口号相关的数据结构 struct sockaddr_in short int sin_family; / AF_INET unsigned short int sin_port; / port No. struct in_addr sin_addr; / IP addr. / IP socket 地址3、模块介绍 、本系统主要是由一个客户机,一个中间件以及两个服务
33、器组成,两个服务器 分别负责手机直接缴费和网上银行缴费。以下即是每个模块间的联系图:5client发送数据middle第一个 字符为 1,扣钱 倒数第 二字符 为1 第一个字符 为 2, 倒数第 二个字符为 1,加钱 第一个 字符为 8 倒数第 二个字 符是 1 第一个字 符是 2, 倒 数第二个 字符是 1银行服务器手机服务器总体联系图(1)客户机:只负责发送和接收请求信息,此模块的目的就是将信息呈现给用 户看,并提供相应的操作选择。此模块处理信息的过程较简单,原理如基本功能 的现金支付所述,在此不再多做介绍。 (2)中间件:与客户机和服务器相连接,通过判断倒数第二个字符来判断选择 哪个服务
34、器,具体的是把客户端发来的信息转发给哪个服务器。通过服务器反馈 回来信息的特殊字符来判断此信息是由哪个服务器发送而来。简单来说,中间件 在整个分布式系统中起数据总线的作用, 将各种异构系统通过中间件有机地结合 成一个整体。 (3)服务器:本系统有两个服务器,手机服务器(S2)和银行服务器(S1) 1)手机服务器 在这一部分, 需要实现的功能是直接缴费。 它的过程是接收从中间件过来的信息, 在手机服务器的客户账户上相应加上对应的话费,即更新手机服务器数据库。更 新成功直接之后,将缴费成功的信息传回中间件。具体流程如下:查询用户信息直接缴纳现金中间件处理更新银行数据库6现金缴纳话费工作流程图cli
35、entmiddleService2(手机服务器)注:直接现金缴纳,不需要通过银行服务器。从客户端开始流程,最后更新手机 服务器数据库,即缴费成功。 2)银行服务器 在银行服务器这一块,需要实现的功能是手机网上缴费。它的过程是接收从中间 件过来的信息,在客户所输入的银行账户上扣除相应的手机费用;如果在手机的 服务器那一块出现问题,缴费不成功,银行服务器还负责把之前所扣除的话费给 加上,具体实现流程如下:查询用户信息 switch(v00)手机缴费成功 从银行卡扣钱手机缴费失败 返回扣除费用更新银行数据库选择银行服务器后整个系统的工作流程图Service25 4(手机服务器)client7 1mi
36、ddle26 3Service2(银行服务器)6:虚线表示在手机服务器出错,缴费失败,向银行服务器返回所交的话费。7六、 调试与测试6.1 调试方法: 试方法(1)把数据库文件导入数据库#mysql u root c1.sh #mysql u root middl.sh #mysql u root s1.sh #mysql u root s2.sh(2)启动 Mysql 数据(以 bank 为例)#show database; #use bank; #show tables; #select * from information;(3)对程序进行编译连接#gcc o #gcc o #gcc o
37、 #gcc o c1 m1 s1 s2 c1.c m1.c s1.c s2.c L/usr/lib/mysql -lmysqlclient L/usr/lib/mysql -lmysqlclient L/usr/lib/mysql -lmysqlclient L/usr/lib/mysql -lmysqlclient(4) 创建服务端口#ivi /etc/services进入新创建三个名字zhongjr worl x 500/tcp 501/tcp 502/tcp保存并退出 vi 创建一个域名#ivi /etc/hosts进入新创建一个域名192.168.117.5 保存并退出 vi myht
38、tp(5) 运行程序#./m1 #./s1 #./s2 x world zhongjr myhttp切换到终端 2 切换到终端 3 切换到终端 4#./m1 x86.2 测试结果及简单分析 1、现金支付缴费后手机服务器接受信息,对用户手机费用进行操作,操作后用户手机费 用增加 123 元。 2、网上缴费网上银行缴费,银行服务器与手机服务器都对信息有相应的操作,缴费得到 确认成功后,银行卡上减去 100 元,手机话费加上 100 元。 3、查询输 入 手 机 用 户 , 查 询 用 户 的 基 本 信 息 。 信 息 “1|15993590115|zhongjr|1363.0000000000|
39、0”相对应的意思是“ 操作类型|手机号 |用户名|手机余额|终止传递信息” 4、客户日志文件95、中间件日志文件6、服务器日志文件S1S2七、设计中遇到的问题及解决方法。 设计中遇到的问题及解决方法。(1) 对 Mysql 数据库不够了解,对很多数据结构和算法也理解不够牢固,因 此我们参考了Linux+php+Mysql 基础与提高这本书,学到一些关于 Mysql 的基础知识,才使工作能顺利的进行下去。 (2) 对套接字这样的概念不是很清楚,在老师的辅导和互联网的帮助下,了解 了一些这方面的知识,才使我们的设计开展下来。 (3) 以前对服务器,客户端只是了解理论知识,这次而要自己动手来开发服务
40、 器,这对我们来说,是一个巨大的挑战,服务器就是一个进程,确切的说 是一个守候进程,要实现它的功能,是不容易的事情,你要学会套接字, 地址转换,服务器相关的数据结构和算法才能进行开发和设计。 (4) 还是很多基础的东西没有掌握好,基本的算法也没有完全掌握,参考了教 科书的相关内容后,才开始了我们的课程设计。 (5) 在数据库的编写时,很多要用到的数据类型而我们又没有学过的,只能借 助互联网的强大功能了,由此,我们也学到了很多相关的知识。10八、源程序清单客户机以及两个服务器都会用到 strsplit()函数,作用是分解字符串。void strsplit(char *s,char *v,char
41、 d) int i,j,l; j=0;vj=s; l=strlen(s); for(i=0;il;i+) if(*(s+i)!=|) continue; else *(s+i)=0; v+j=s+i+1; 以下是每个模块中将实现其功能的部分重要代码。1、 客户机 #include #include #include #include #include #include #include #include #include #include #include #include #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL) int set_di
42、sp_mode(int option); int getpasswd(char* passwd, int size); int main(int argc,char *argv) int choose; char name10,passwd10; char send_buf1024=; char tmp1024,phone30,number30,pswd10,money30,myl_buf1024,fd_buf1024; char log=clt.log; int connect_fd;11int ret; int i; int port; int len; int fd; MYSQL mys
43、ql; MYSQL_ROW row; MYSQL_RES *result; struct servent *sp; struct hostent *hp; static struct sockaddr_in srv_addr; if(mysql_init(&mysql)=NULL) fprintf(stderr,Error in mysql_init!n); exit(-1); if(!mysql_real_connect(&mysql,localhost,root,0,users,0,NULL,0) fprintf(stderr,Error in connection: %s %dn,mys
44、ql_error(&mysql),mysql_errno(&mysql); mysql_close(&mysql); exit(-2); system(clear); clear: printf(Enter the user name:); scanf(%s,name); getchar(); set_disp_mode(0); getpasswd(passwd,sizeof(passwd); set_disp_mode(1); system(clear); sprintf(myl_buf,select * from users where name=%s,name); if(mysql_qu
45、ery(&mysql,myl_buf)!=0) fprintf(stderr,Error in query: %s %dn,mysql_error(&mysql),mysql_errno(&mysql); mysql_close(&mysql); exit(-3); if(result=mysql_store_result(&mysql)=NULL) fprintf(stderr,Error in store_result: %s %dn,mysql_error(&mysql),mysql_errno(&mysql); mysql_free_result(result);mysql_close
46、(&mysql); exit(-4); ; if(mysql_num_rows(result)=0) printf(use dont exist!n); goto clear; 12row=mysql_fetch_row(result); if(strcmp(row1,passwd)!=0) printf(The passwd is not turen); goto clear; if(sp=getservbyname(argv1,tcp)=NULL) fprintf(stderr,Error:getservbyname); exit(-1); if(hp=gethostbyname(argv2)=0) fprintf(stderr,Error:gethostbyname); exit(-2); memset(&srv_addr,0,sizeof(srv_addr); srv_addr.sin_family=AF_INET; bcopy(hp-h_add