模拟手机缴费系统的开发与设计

上传人:1888****888 文档编号:37426911 上传时间:2021-11-03 格式:DOC 页数:37 大小:315.01KB
收藏 版权申诉 举报 下载
模拟手机缴费系统的开发与设计_第1页
第1页 / 共37页
模拟手机缴费系统的开发与设计_第2页
第2页 / 共37页
模拟手机缴费系统的开发与设计_第3页
第3页 / 共37页
资源描述:

《模拟手机缴费系统的开发与设计》由会员分享,可在线阅读,更多相关《模拟手机缴费系统的开发与设计(37页珍藏版)》请在装配图网上搜索。

1、附件1:封面 Linux系统应用与编程课程设计说明书 设计题目: 模拟手机缴费系统 专 业: 计算机科学与技术 指导教师: 班 级: 学 号: 姓 名: 同 组 人: 计算机科学与工程学院 2013年06月27日前言 伴随着社会的发展,网络信息交流已经渐渐取代面对面的交谈。其中手机是一种不可缺少的通信工具,他已经渗入到人们的社会生活的各个方面。由于经常要使用手机,所以还要涉及到手机服务收费,手机交费系统的开发就很有必要了。 当代是一个追求效率的时代,随着们生活水平的提高,消费项目,服务种类的增加,社会需要方便和快捷的缴费方式。在当今网络社会,技术成熟,发挥网络技术优势,利用网络实现快捷缴费已经

2、成为可能。 利用电子商务网络以及众多的营业网点实时收费,在几乎不增加系统负担的情况既可缓解目前收费单位营业厅的紧张状况,又方便用户缴费,提高了费用回收率。手机缴费系统是基于UNIX Socket和mysql数据库设计一个交易型中间件系统。在Linux环境下使用GNU C+,在Linux make开发工具的管理和控制下,利用Linux系统提供的Socket库和mysql数据库在网络底层开发交易型中间件,同时简要介绍了客户端和服务器的工作模式。此模拟手机交费系统采用“客户端中间件服务器”模式,其中主要包括三大部分: 客户端,中间件和服务器端。客户端主要实现用户管理、查询、交易(交费,购物等),撤销

3、和统计等功能;中间件要完成与客户要求相符的功能是本地的本地处理,否则发往服务器端接受客户端数据,组织服务器端所需数据,重组服务端返回数据,并返回给客户方;服务器端主要实现客户端或中间件提出的业务请求并做好留迹工作。 本设计主要是利用UNIX系统提供的Socket库在网络底层,C+语言,mysql数据库,以及软件工程的思想方法和TCP/IP设计出的一个模拟手机交费中间件系统。本设计包括了模拟手机交费系统的开发环境,设计目的,总体设计,详细设计,具体实现代码,以及设计中遇到的问题及解决方法。将服务器端,中间件和客户端进行连接后可模拟出现实中手机交费的的功能。它可以实现手机费用查询,话费充值,打印花

4、费清单详目等基本功能。目录前言21、系统环境(硬件环境、软件环境)42、设计目的和要求42.1、设计目的42.2、设计要求53、总体设计63.1系统模型63.2系统流程图74、详细设计84.1设计方法84.2功能模块说明84.3开发接口说明85、调试与测试115.1调试115.2运行结果126、遇到的问题及解决方法14主要问题:147、源程序清单157.1客户端157.2中间件247.3服务器278、心得体会349、参考文献371、系统环境(硬件环境、软件环境)硬件环境:intel p4 3.06GHz 80G硬盘软件环境:基于windows xp虚拟机下的Red Linux 或者Fedora

5、操作系统2、设计目的和要求2.1、设计目的基于UNIX Socket和MySQL数据库,设计一个交易型中间件系统。这里的中间件是指交易型中间件。交易型中间件是指用在不同行业、不同部门间的通讯转发和协议转换的软件,在不同的行业、不同的系统间提供通讯转发和协议转换的桥梁作用。例如电子商务、银行代理业务软件等都是这种类型的软件。本设计不是基于WEB的,不需要很多与WEB开发相关的知识,主要是利用linux系统提供的Socket库在网络底层,开发交易型中间件。模拟手机缴费系统,通过对移动通信话费查询与缴费业务进行了系统全面的分析研究。针对现有系统中实时性不足而造成用户欠费太多使公司企业蒙受损失的问题。

6、采用开发工具Linux进行系统设计。基于linux Socket和mysql数据库,设计一个交易型中间件系统。提供通讯转发和协议转换的桥梁作用。例如电子商务、银行代理业务软件等都是这种类型软件。这里的中间件是指交易型中间件。交易型中间件是指用在不同行业、不同部门间的通讯转发和协议转换的软件,在不同的行业、不同的系统间。这里主要是利用linux系统提供的Socket库在网络底层,开发交易型中间件。本次设计要求实现对移动话费信息输入、查询、编辑以及话费统计各明细项目的数据编辑;可自主设定条件从而达到对话费数据的多角度查询功能;方便导入、导出数据及输出报表。2.2、设计要求(1)客户端客户端程序可命

7、名为client,要求带有两个命令行参数一个是服务(自己定义,并保存在/etc/services中,比如mysvr1 5678),另一个是目的主机(自己定义,并保存在/etc/hosts内,也可使用DNS来解析),缺省时为本机。客户端至少要实现如下功能:用户管理;查询;交易(交费,购物等);撤销;留迹;本地业务统计。客户端的环境可以是Windows系统,也可以的Linux系统。(2)中间件中间件程序命名为middleware,要带有三个参数,一个是用于服务器的服务(名字,与客户端同),第二个作为请求的服务(自己定义,并保存在/etc/services中,要区别于客户端,比如mysvr2 567

8、9),第三个为目的主机(定义在/etc/hosts内),缺省时为本机。中间件要完成与客户要求相符的功能:是本地的本地处理,否则发往服务器方。具体地是:接收客户方数据;组织服务器方所需数据;重组服务方返回数据,并返回给客户方;留迹;本地业务统计。中间件的环境可以是Windows系统,也可以的Linux系统。(3)服务器服务器程序可命名为server,要求带有一个服务参数,与中间件的mysvr2同。服务器方程序要完成客户端或中间件提出的业务请求,并做好留迹工作。服务端环境必须是Linux系统。(4)留迹或log留迹或log工作在客户端、中间件和服务器三方都要做,以供统计或核对使用。客户端或中间件方

9、可以使用文本文件或数据库,但在服务器方必须使用MySQL数据库。3、总体设计3.1系统模型LogClient 2Client 1 请求1 请求2 返回 返回 Log中 间 件(Middleware)请求服务 响应服务Log Middleware服务器端(Server)请求数据 返回结果 Log MiddlewareMysql database这个程序是模拟手机交费系统,所以运行时服务器一直处于工作状态,等待来自中间件发过来的服务或数据。而中间件只有在客户端传来数据或者要求服务时才处于运行状态。C/S应用程序中复制寻找数据的步伐只需要访问一个中间件系统,由中间件完成网络中获得的数据源或服务,进行

10、事先传输客户请求,重组回复信息,最后将结果送回应用程序的任务。3.2系统流程图Socker()建立服务方套接字,描述符为sbingd()绑定套接字与本地地址和端口Linsten()通知TCP,准备接受Socker()建立服务方套接字,描述符为saccept()等待客户方连接Connect()建立与服务方链接recv()/read()读取客户方数据Send()/write()向服务器方发送请求成功后返回与s具相同特性的新套接字服务处理及数据加等待服务器方send()/write向客户方提供服务结果recv()/read读取服务方数据Close()关闭新套接字s,结束本次对话Close()关闭最初

11、套接字s,结束服务器Close()关闭最初套接字s,结束本次对话4、详细设计4.1设计方法在Linux环境下,使用GNU C+,在UNIX/Linux make开发工具的的管理和控制下,利用UNIX/Linux Socket库在网络的底层进行开发设计。4.2功能模块说明本系统主要由服务器,中间件,和客户端构成。(1)客户机:只负责发送和接收请求信息,此模块的目的就是将信息呈现给用户看,并提供相应的操作选择。此模块处理信息的过程较简单,原理如基本功能的现金支付所述,在此不再多做介绍。(2)中间件:与客户机和服务器相连接,通过判断倒数第二个字符来判断选择哪个服务器,具体的是把客户端发来的信息转发给

12、哪个服务器。通过服务器反馈回来信息的特殊字符来判断此信息是由哪个服务器发送而来。简单来说,中间件在整个分布式系统中起数据总线的作用,将各种异构系统通过中间件有机地结合成一个整体。(3)服务器: 手机服务器在这一部分,需要实现的功能是直接缴费。它的过程是接收从中间件过来的信息,在手机服务器的客户账户上相应加上对应的话费,即更新手机服务器数据库。更新成功直接之后,将缴费成功的信息传回中间件。4.3开发接口说明Mysql提供有多种开发接口:PHP,ODBC,PERL,C/C+,JAVAC常用的开发接口有:mysql_init,mysql_real_connect,mysql_query,mysql_

13、store_result,mysql_fetch_row,mysql_free_result,mysql_close,mysql_init(1)mysql_init作用:是初始化MYSQL变量,为mysql_real_connect()做准备。用法:MYSQL *mysql_init(MYSQL *mysql) 返回值:MYSQL句柄或描述符;内存不足是为NULL;(2)mysql_real_connect功能:链接mysql数据库;用法:MYSQL *mysql_real_connect(MYSQL *mysql,const char *host, const char *user,cons

14、t char *passwd, const char *db,unsigned int port, const char *unix_socket,unsigned int client_flag)说明:如果port!=0,则将作为TCP/IP端口使用,默认为0;如果unix_socket!=NULL,则可指定socket或命名PIPE,默认为NULL;Client_flag可以指定特定的值(略),默认为0.(3)mysql_query功能:查询实施用法:int mysql_query(MYSQL *mysql, const char *query) 说明:query为数据库操作命令字符串,本

15、义是查询(select),可包括select,update,insert,delete等对数据库操作的命令。mysql_query不能用来处理二进制数据,处理二进制数据可使用mysql_real_query。返回值:0表示正常,非0表示发生了错误。(4)mysql_store_resul功能:结果集处理。如果使用mysql_query运行的是一个SELECT语句,或其它可以返回结果的查询,可用函数mysql_store_result来访问返回结果并并将其保存在一个变量中,以便做进一步处理。用法:MYSQL_RES *mysql_store_result(MYSQL *mysql)MYSQL_R

16、ES *mysql_use_result(MYSQL *mysql)说明:mysql为mysql_real_connect函数的返回值。(5)结果集的使用使用了mysql_store_result函数保存结果后,可以使用以下函数对结果集进行处理。获得结果集中的行数:my_ulonglong mysql_num_rows(MYSQL_RES *result)获得结果集行的域字段数:unsigned int mysql_num_fields(MYSQL_RES *result)unsigned int mysql_num_fields(MYSQL *mysql)读取结果集中的一行:MYSQL_RO

17、W mysql_fetch_row(MYSQL_RES *result)获取结果集中行的域段数:unsigned int mysql_field_count(MYSQL *mysql)获得结果集中的域的属性:MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)获得域属性数组:MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)查询被update、delete、insert等受影响的行:my_ulonglong mysql_affected_rows(MYSQL *mysql) (6)善后工作当对数据库

18、使用完毕后,应对所创建的变量等进行释放:mysql_free_result(result);mysql_close(&mysql);(7)错误处理方法有2:利用函数的返回值来判断函数执行是否正确;2.使用mysql提供的错误号和错误信息:错误号:unsigned int mysql_errno(MYSQL *mysql)错误信息:char *mysql_error(MYSQL *mysql)(8)辅助函数获取客户机版本信息:char *mysql_get_client_info(void)获取主机信息:char *mysql_get_host_info(MYSQL *mysql)获取协议版本信

19、息:unsigned int mysql_get_proto_info(MYSQL *mysql)获取服务器版本信息:char *mysql_get_server_info(MYSQL *mysql) 获取可用数据库列表:MYSQL_RES *mysql_list_dbs(MYSQL *mysql, const char *wild)获取数据库的可有表列表:MYSQL_RES *mysql_list_tables(MYSQL *mysql, const char *wild)5、调试与测试5.1调试(1)把数据库文件导入数据库#mysql u root c1.sh#mysql u root m

20、iddl.sh#mysql u root s1.sh(2) 创建服务端口Myclt 56787/tcpMymid 56788/tcp(3) 对程序进行编译连接#gcc o cc mainmenu26.c #gcc o mm mid.c #gcc o ss server.c L/usr/lib/mysql -lmysqlclient (4) 运行程序#./mm切换到终端2#./ss切换到终端4#./cc5.2运行结果6、遇到的问题及解决方法主要问题:1、首先遇到的问题是总是提示”段错误”,开始时摸不着头脑,就和同学一块商量查资料,知道所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间,

21、简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址。后来经过我们的讨论,查找错误位置,慢慢修改过来了。2、由于对数据库的了解不够深,所以在服务器中调用数据库出现问题。在实现客户端通过中间件与服务器通信时,总是提示套接字错误。进过调试发现这个问题是在服务器接收到数据后,在查询数据库时没有将参数传给buf,所以服务器没有给客户端回复信息。3、可能是不够细心,所以编程过程中,总是会出现指针类型与字符数组类型不匹配的问题,这是小问题,看着错误提示,稍微修改一下就好了。4、在使用字符分割函数char *strtok(char *str,

22、const char *delim);时,后面那个参数我们使用了空格,所以经常出现警告或者错误。后来我们把后面一个参数改为“|”,问题就解决了。5、还有一个很严重的错误,就是服务器程序中的while循环用错了位置,定义的 sendmg()函数与recmg();函数没有放一起,所以不能实现服务器收到信息后立即回应,以至于运行时出现死循环。解决方法就是:我们把sendmg()函数放在recmg();函数后面,问题就迎刃而解了。7、源程序清单7.1客户端#include #include #include #include #include #include #include #include #i

23、nclude #include #definerec_length200structhostent *hp;structsockaddr_in sin;structservent *sp;charbuf500;ints;charcellnum30;voidmainmenu();voidlogin();voidregcell();voidusrmg();voidquery();voidrecharge();voidsuite();voidusrinfo();void cellinfo();voidbussness();void clientlog();main()if(sp=getservbyn

24、ame(myclt,tcp)=NULL) /get struct servent *sp from /etc/servicesexit(-2);if(hp=gethostbyname(localhost)=0) /get struct hostent *hp from /etc/hosts or DNSexit(-3);/ to build struct sockaddr_in sin from sp & hpbzero(&sin,sizeof(sin);bcopy(hp-h_addr,&sin.sin_addr,hp-h_length);sin.sin_family=hp-h_addrtyp

25、e;sin.sin_port=sp-s_port;if(s=socket(AF_INET,SOCK_STREAM,0)=-1) / create SOCKET sexit(-4);if(connect(s,&sin,sizeof(sin)=-1) /connect to server with struct sockaddr_in sinclose(s); exit(-5); mainmenu();void mainmenu()system(clear);char choice200;printf(-n);printf(| |n);printf(| 1:login |n);printf(| |

26、n);printf(| 2:register |n);printf(| |n);printf(| 3:logout |n);printf(| |n);printf(| |n);printf(-n);while(1)int i=0;printf(Please choose a fuction:);gets(choice);if(strlen(choice)!=1)printf(Invalid input,please try again:n);elseif(choice0=1)login();if(choice0=2)regcell();if(choice0=3)return;void logi

27、n()char password30;char result100;printf(Please input your cellnumber(the length is 11):n);gets(cellnum);while(strlen(cellnum)!=11)printf(your number is too long or too short,please input another one:n);gets(cellnum);printf(Please input your password(the length is 6):n);gets(password);while(strlen(p

28、assword)!=6)printf(your password is too long or too short,please input it again to verify:n);gets(password);sprintf(buf,1%s %s,cellnum,password);if(write(s,buf,rec_length)!=rec_length)close(s);exit(-6);if(read(s,result,rec_length)=0)close(s); exit(-3);if(result0=Y)system(clear);printf(Login Sucessfu

29、lly!n);clientlog(cellnum,LoginSucessfully);usrmg();elseprintf(This number doesnt exsist or your password is wrong!n);clientlog(cellnum,LoginFiled);login();void regcell()char telephone20;char password30;char id20;char result100;printf(You are now registering:n);printf(Input your cellphone number:n);g

30、ets(telephone);while(strlen(telephone)!=11)printf(your number is too long or too short,please input again:n);gets(telephone);printf(please input your password:n);gets(password); while(strlen(password)!=6)printf(your password is too long or too short,please input it again to verify:n);gets(password);

31、printf(please enter your id number:n);gets(id);while(strlen(id)!=18)printf(your id is too short or too long,please input again:n);gets(id);sprintf(buf,2%s %s %s,telephone,password,id);if(write(s,buf,rec_length)!=rec_length)close(s);exit(-6);if(read(s,result,rec_length)=0)close(s); exit(-3);if(result

32、0=Y)system(clear);printf(Congratulate register successfully!n);clientlog(cellnum,RegisterSucessfully);usrmg();elsesystem(clear);printf(This number has already existedn);clientlog(cellnum,RegisterFailed);regcell();void usrmg() char choice200;printf(-n);printf(| |n);printf(| 1:query |n);printf(| 2:rec

33、harge by bank |n);printf(| 3:do bussnss |n);printf(| 4:reback |n);printf(| 5:exit |n);printf(| |n);printf(-n);while(1)printf(Please enter a choice:n);gets(choice);if(strlen(choice)!=1)printf(Invalid choice,please try again:n);gets(choice);elseif(choice0=1)system(clear);query();if(choice0=2)system(cl

34、ear);bankpay();if(choice0=3)system(clear);bussness();if(choice0=4)system(clear);mainmenu();if(choice0=5)exit(0);void query()char choice200;printf(-n);printf(| |n);printf(| 1:check usrinfo |n);printf(| 2:check suite |n);printf(| 3:check cellinfo |n);printf(| 4:reback |n);printf(| 5:exit |n);printf(|

35、|n);printf(-n);while(1)printf(Please enter a choice:n);memset(choice,0,sizeof(choice);gets(choice);if(strlen(choice)!=1)printf(Invalid choice!n);elseif(choice0=1)usrinfo();if(choice0=2)suite();if(choice0=3)cellinfo();if(choice0=4)usrmg();if(choice0=5)exit(0);void bankpay()char bankcardid20;char pass

36、word30;char result100;printf(Please input your bankcard id:n);gets(bankcardid);while(strlen(bankcardid)!=8)printf(your bankcardid is too long or too short,please input again:n);gets(bankcardid);printf(Please input your bankcard password:n);gets(password);while(strlen(password)!=6)printf(your bankcar

37、d password is too long or too short,please input again:n);gets(password);sprintf(buf,3%s %s,bankcardid,password);if(write(s,buf,rec_length)!=rec_length)close(s);exit(-6);if(read(s,result,rec_length)=0)close(s); exit(-3);if(result0=Y)int mon;system(clear);sscanf(result+1,%d,&mon);printf(Pay by bankca

38、rd %d Sucessfully!n,mon);clientlog(cellnum,PaybybankcardSucessfully);usrmg();elsesystem(clear);printf(This number doesnt exsist or your password is wrong.n);clientlog(cellnum,Paybybankcardfailed);usrmg();void suite()int i;char result300;memset(result,0,sizeof(result);sprintf(buf,4);if(write(s,buf,re

39、c_length)!=rec_length)close(s);exit(-6);if(read(s,result,rec_length)=0)close(s); exit(-3);for(i=0;istrlen(result);i+)if(resulti= )resulti=n;printf(%s,result); clientlog(cellnum,querysuite);query();void usrinfo()char result100;sprintf(buf,6);memset(result,0,sizeof(result);if(write(s,buf,rec_length)!=

40、rec_length)close(s);exit(-6);if(read(s,result,rec_length)=0)close(s); exit(-3);printf(cell_num |id_number |namen);printf(%s,result); clientlog(cellnum,queryusrinfo);query();void bussness()char suitenum5;char result100;printf(Please input a number represent for suitetype:n);gets(suitenum);while(strle

41、n(suitenum)!=3)printf(No such suitetype,please choose again:n);gets(suitenum);sprintf(buf,7%s,suitenum);if(write(s,buf,rec_length)!=rec_length)close(s);exit(-6);if(read(s,result,rec_length)=0)close(s); exit(-3);if(result0=Y)system(clear);printf(Choose suite Sucessfully!n);clientlog(cellnum,buyanewsu

42、ite);usrmg();elsesystem(clear);printf(Suite choosen donesnt exist!n);clientlog(cellnum,buyanewsuite failed);usrmg();void cellinfo()char bb100;char b1100;char ch10=5custom;sprintf(buf,%s,ch);if(write(s,buf,rec_length)!=rec_length)close(s);exit(-6);if(read(s,bb,rec_length)=0)close(s); exit(-3);printf(

43、%s,bb);clientlog(cellnum,querycellinfo);query();void clientlog(char * cell,char* activity) char finalstring100=/root/log1 ; strcat(finalstring,cell); strcat(finalstring, ); strcat(finalstring,activity); system(finalstring);7.2中间件#include #include #include #include #include #include #include #include

44、 #include #include #include #define rec_length200main( )/structure defined for request as a clientstructhostent *hp1;structsockaddr_in sin1;structservent *sp1;charsbuf500;intss,pid;char*sservice,*sdest;/structure defined for request as a serverstruct sockaddr_in sin;struct servent *sp;int s,ns,fd;ch

45、arbuf500;char*service;charcid20;charcpd30;charrid20;charrpd30;charpeid20;charcho;intl=0,k=1;charstr200;charbb300;charbd300;charsu5;char cc200;time_t t;if(sp=getservbyname(myclt,tcp)=NULL)fprintf(stderr,Error: getservbyname);exit(-2);if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,Error: socket

46、create);exit(-3);bzero(&sin,sizeof(sin);sin.sin_port=sp-s_port;if(bind(s,&sin,sizeof(sin)=-1)fprintf(stderr,Error: bind);close(s); exit(-4);if(listen(s,5)=-1)fprintf(stderr,Error: listen);close(s); exit(-5);while(1)fd = open(mid.log,O_CREAT | O_APPEND | O_WRONLY,0);t = time(NULL);strcpy(cc,wait a co

47、nnection ); strcat(cc,ctime(&t);write(fd,cc,strlen(cc);fprintf(stderr,nttt Now wait connect .n);if(ns=accept(s,0,0)=-1) / wait a connection */fprintf(stderr,error: accept); continue;t = time(NULL);strcpy(cc,conneted, and then create child proc ); strcat(cc,ctime(&t);write(fd,cc,strlen(cc);if(pid=for

48、k()=-1) / conneted, and then create child procfprintf(stderr,server: fork error!);close(s); exit(-6);if(pid!=0) /parent proce, nothing to do, and to the next loopclose(ns);wait(0);continue;if(pid=0) / entered child proccedureclose(s);/ s is not used in Child,clode it/ request message got from the Cl

49、ient./ Begine a Connection to Server as a Clientif(sp1=getservbyname(mymid,tcp)=NULL)fprintf(stderr,Error: getservbyname ss);exit(-8);if(hp1=gethostbyname(localhost)=0)fprintf(stderr,Error: gethostbyname ss);exit(-9);bzero(&sin1,sizeof(sin1);bcopy(hp1-h_addr,&sin1.sin_addr,hp1-h_length);sin1.sin_fam

50、ily=hp1-h_addrtype;sin1.sin_port=sp1-s_port;if(ss=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,Error: socket s1);exit(-10);if(connect(ss,&sin1,sizeof(sin1)=-1)fprintf(stderr,Error: connect ss);close(ss); exit(-11);/ next 2 Line build request messageprintf(Receive a client connect:clientn);while(1

51、)if(read(ns,buf,rec_length)=0)fprintf(stderr,Read nothing from socket:nsn);close(ns); exit(-7);strcpy(sbuf,buf);if(write(ss,sbuf,rec_length)!=rec_length) /to serverclose(ss); exit(-12);printf(midware get message from ns: %sn,buf);if(read(ss,sbuf,rec_length)=0)close(ss);exit(-7); strcpy(buf,sbuf);if(write(ns,buf,rec_length)!=rec_length)close(ns);exit(-6);

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