《网络程序设计》课程设计-基于android平台的网络注册登录器.doc_第1页
《网络程序设计》课程设计-基于android平台的网络注册登录器.doc_第2页
《网络程序设计》课程设计-基于android平台的网络注册登录器.doc_第3页
《网络程序设计》课程设计-基于android平台的网络注册登录器.doc_第4页
《网络程序设计》课程设计-基于android平台的网络注册登录器.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告课程名称 网络程序设计课程设计 课题名称 网络注册登录器 专 业 网络工程 班 级 1102 学 号 01 姓 名 指导教师 2014年 9 月 12 日湖南工程学院课 程 设 计 任 务 书课程名称 网络程序设计 课 题 网络注册登录器 专业班级 网络工程1102 学生姓名 学 号 01 指导老师 审 批 任务书下达日期 2014 年 9 月 1 日任务完成日期 2014 年 9 月 12 日一、课程设计概述 1.1 课程设计题目 一个基于android平台的网络程序实现注册,登录 1.2 课程设计要求 (1)能正确连接外部网络 (2) 能实现注册 (3) 能实现正确登录 (4) 能够在手机上使用该系统二、硬件平台搭建2.1 jdk安装 jdk是java语言的原创者推出的原始开发环境。采用jdk开发java程序能够很快理解程序中各部分代码之间的关系,有利于理解java面向对象的设计思想。在windows上安装jdk非常简单,访问oracle官方网站下载页面,网址为/technetwork/indexes/downloads/index.html,也可从其他网站下载。下载完成后,双击运行jdk安装程序并根据提示设定环境变量。2.2 android sdk安装以及系统设置 下载好sdk包后,将zip文件解压缩至合适的地方。在下文中,默认sdk安装目录为$sdk_root 。l linux下,打开文件/.bash_profile或者/.bashrc,找到设定path环境变量的一行,将$sdk_root/tools的完整路径加入其中。如果没有找到设定path变量的行,可以自己添加一行: export path=$path:l mac下,在home目录中找到文件.bash_profile,和linux的一样处理。如果还没有在机器上设定这个文件,可以创建一个.bash_profile文件。l windows下,右键点击【我的电脑】,选择【属性】,在【高级】页中,点击【环境变量】按键,在弹出的对话框中双击“系统变量”中的变量“path”,将$sdk/tools的完全路径加入其中。通过将$sdk/tools加入系统路径,在运行adb和其它一些命令行工具时就不需要键入完全路径名了。需要注意到是,当升级了sdk后,如果安装路径有变动的话,不要忘记了更新path变量的设置,将其指向变动后的路径。配置sdk有两种方法:第一种,通过sdk下载器自动下载和配置。适合网络好,下载速度快的情况;第二种,借助工具下载sdk文件,手工配置。适合网络不是很好,下载速度慢的情况下。2.3eclipse安装以及adt工具的安装 下载eclipse安装包后,无需安装,只需解压缩,点击“eclipse.exe”文件即可运行。 android为eclipse定制了一个插件,即android develpoment tools(adt),目的是为用户提供一个强大的综合环境用于开发android应用程序。adt扩展了eclipse的功能,可以让用户快速建立android项目,创建应用程序界面,在基于android框架api的基础上添加组件,以及用sdk工具集调试应用程序,甚至导出签名(或未签名)的apks以便发行应用程序。安装adt:启动eclipse,选择helpinstall new software,在出现的对话框里,点击add按钮,在对话框的name一栏输入adt,然后点击archive.,浏览和选择已经下载的adt插件压缩文件,点击ok。返回可用软件的视图,你会看到这个插件,然后选择developmer tools,点击next,最后重启eclipse。硬件平台搭建好后,便可以开始创建项目了。三、软件设计 3.1 软件总体设计此软件为一款网络软件,采用cs模式工作,服务器端用c语言编写,客户端为android应用程序,相互间用socket通信。 3.2服务器端设计先安装好mysql数据库,建立好相关数据库jsb,以及表userinfo( name char10,password char10)。再用c编程连接好数据库,然后在4000端口监听,等待连接,相关逻辑代码如下:while(1)int i=1,j=0,k=0;int tf=1;sockconn=accept(socksrv,(sockaddr *)&addrclient,&len);memset(recvbuf,0,200);recv(sockconn,recvbuf,200,0);while(recvbufi)if(recvbufi=+)tf=0;i+;elseif(tf)usernamej=recvbufi;i+;j+;elseuserpaormek=recvbufi;i+;k+;switch(recvbuf0)case 1:char mysqlzl 200;memset(mysqlzl,0,200);sprintf(mysqlzl,insert into userinfo values(%s,%s);,username,userpaorme);printf(%s,mysqlzl);res = mysql_query(my_con,mysqlzl);/用户注册break;case 2:char mysqlzl 200;memset(mysqlzl,0,200);sprintf(mysqlzl,select * from userinfo where name=%s and password=%s,username,userpaorme);mysql_query(my_con,mysqlzl); /登陆查询 my_res = mysql_store_result(my_con);my_row = mysql_fetch_row(my_res); if( my_row!=null )send(sockconn,sucessn,strlen(sucessn)+1,0);elsesend(sockconn,failedn,strlen(failedn)+1,0);break;closesocket(sockconn); 服务器截图3.3 android客户端设计 次软件包含三个界面,3界面的视图设计分别如下:主界面注册界面登陆成功跳转界面在主界面点击登陆,登陆按钮回调函数首先获取用户名和密码输入框的值,然后用事先规定好的格式将数据传给服务器,再接收服务器的返回信息,如返回sucess,则进入登陆成功跳转界面,否则提示用户名或密码错误。点击注册按钮进入注册界面后,在完成相关用户名和密码输入之后,点击注册按钮,注册按钮回调函数获取用户名和密码,比较两次输入的密码是否相同,相同的话,按事先规定好的格式将数据传给服务器,注册成功,不相同的话,提示两次密码不同。 四、总结与改进展望 在此次课程设计中,不仅了解到了android以及网络编程的有关知识,而且学习了java语言以及eclipse等编程环境。有几点需要特别注意:(1) 要明确课程设计的要求,想好系统应该包含哪些功能模块。否则,在软件设计的后期,再想添加新的功能就需要花费大量的时间。(2) 要对android系统有一定的了解。在软件设计过程中,大量的用到了android系统的四大组件:activity(提供可视化的界面)、service(运行在后台的服务程序)、broadcast receiver(广播事件处理机制)、content provider(使应用程序相互访问数据)。只有对这些组件熟练掌握后,才能够真正设计出稳健搞笑的多媒体播放器。(3) 要对java语言熟练掌握。android软件开发都是用java语言写的,而java又是由类组成的。而java语言本身又含有众多机制,只有深刻理解这些机制后,才能轻松地实现自己想要的功能。(4) 要对界面设计有一定的了解。android所有的布局都放在了res/layout中,而所有的菜单选项都放在了res/menu中。合理的布局对人性化的界面也是至关重要的。 (5)要具备快速上网查资料的能力。面对从没接触过的知识,要有信心才是最重要的。另外,网上的很多现成的资料都可借鉴、学习。在熟练理解了别人的应用程序的基础上,再做二次开发。个人收获:1. 现学现做的能力。从图书馆借一些参考光盘,对某项内容的原理大致了解后,直接运行它的源代码,先观察效果,给大脑直接的印象,然后再去理解程序。2.上网查资料的能力。网络是一个十分强大的信息工具。网上有大量的android参考资料以及很多著名的android论坛,这上面为我提供了大量的有用信息。尤其是碰到错误时,上网搜一搜,能很快找到解决办法。3.英语阅读能力。因为很多资料都是起源于国外,而很多参考书也是英文的。此外,android官网以及著名的android论坛都是英文版,此外,具备一定的英语阅读能力也是非常重要的。4.与同学间的交流探讨。大家经常交流,有助于开拓自己的思维,取长补短,共同解决碰到的问题,这正是一个相互学习的过程。6、 附录v 服务器c源码:#include #include #include #include #include /发生错误时,输出错误信息,关闭连接,退出程序 void error_quit(const char *str, mysql *connection) fprintf(stderr, %s : %d: %sn, str, mysql_errno(connection), mysql_error(connection); if( connection != null ) mysql_close(connection); exit(1); int main(int argc, char *argv) mysql *my_con; mysql_res *my_res; mysql_field *my_field; mysql_row my_row; int rows, i; int res; word wversionrequested;wsadata wsadata;socket socksrv,sockconn;sockaddr_in addrsrv;sockaddr_in addrclient;char sendbuf200,recvbuf200;int error,len;char username 10;char userpaorme 20;memset(username,0,10);memset(userpaorme,0,20);my_con = malloc( sizeof(mysql) );memset(recvbuf,0,200); /连接数据库 mysql_init(my_con); my_con = mysql_real_connect(my_con, localhost, root, abc123, jsb, 0, null, client_found_rows); if( null = my_con ) error_quit(mysql connection fail, my_con); printf(mysql connection successn); wversionrequested=makeword(1,1);error=wsastartup(wversionrequested,&wsadata);if(error!=0)printf(启动套接字失败);return 0;if(lobyte(wsadata.wversion)!=1|hibyte(wsadata.wversion)!=1)wsacleanup();return 0;socksrv=socket(af_inet,sock_stream,0);addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);addrsrv.sin_family=af_inet;addrsrv.sin_port=htons(4000);bind(socksrv,(sockaddr *)&addrsrv,sizeof(sockaddr);printf(开始监听n);listen(socksrv,5);len=sizeof(sockaddr);while(1)int i=1,j=0,k=0;int tf=1;sockconn=accept(socksrv,(sockaddr *)&addrclient,&len);memset(recvbuf,0,200);recv(sockconn,recvbuf,200,0);while(recvbufi)if(recvbufi=+)tf=0;i+;elseif(tf)usernamej=recvbufi;i+;j+;elseuserpaormek=recvbufi;i+;k+;switch(recvbuf0)case 1:char mysqlzl 200;memset(mysqlzl,0,200);sprintf(mysqlzl,insert into userinfo values(%s,%s);,username,userpaorme);printf(%s,mysqlzl);res = mysql_query(my_con,mysqlzl);/用户注册break;case 2:char mysqlzl 200;memset(mysqlzl,0,200);sprintf(mysqlzl,select * from userinfo where name=%s and password=%s,username,userpaorme);mysql_query(my_con,mysqlzl); /登陆查询 my_res = mysql_store_result(my_con);my_row = mysql_fetch_row(my_res); if( my_row!=null )send(sockconn,sucessn,strlen(sucessn)+1,0);elsesend(sockconn,failedn,strlen(failedn)+1,0);break;/printf(client says:%sn,recvbuf);closesocket(sockconn);/释放空间,关闭连接mysql_free_result(my_res); mysql_close(my_con); free(my_con); return 0; v android客户端界面源代码:v activity_main.xml v zhucei.xml: v dlcg.xml: v mainactivity.java:package com.example1.jsb;import java.io.bufferedreader;import java.io.bufferedwriter;import java.io.ioexception;import java.io.inputstreamreader;import java.io.outputstreamwriter;import java.io.printwriter;import .socket;import .unknownhostexception;import android.os.bundle;import android.app.activity;import android.content.intent;import android.view.menu;import android.view.view;import android.widget.*;public class mainactivity extends activity public button button1;public button button2;public bufferedreader in;public printwriter out;public socket socket; override protected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); button1=(button) this.findviewbyid(r.id.dlbutton); button1.setonclicklistener(new buttonclicklistener(); button2=(button) this.findviewbyid(r.id.zcbutton); button2.setonclicklistener(new buttonclicklistener(); private final class buttonclicklistener implements view.onclicklistener public void onclick(view v) if(button1=(button)v) edittext user=(edittext)findviewbyid(r.id.username); string username=user.gettext().tostring(); edittext pass=(edittext)findviewbyid(r.id.userpass); string userpass=pass.gettext().tostring(); textview ztl=(textview)findviewbyid(r.id.ztlview); try socket= new socket(45, 4000);in = new bufferedreader(new inputstreamreader(socket.getinputstream();out =new printwriter(new bufferedwriter(new outputstreamwriter( socket.getoutputstream(), true); string sendmsg=2+username+userpass;out.println(sendmsg);string fwq=in.readline();if(fwq.equals(sucess)intent intent = new intent(); / 设置intent的源地址和目标地址 intent.setclass(mainactivity.this, dlcg.class); startactivity(intent); mainactivity.this.finish();else if(fwq.equals(failed)ztl.settext(用户名或密码不对!);elseztl.settext(fwq);/socket.close(); catch (unknownhostexception e) / todo auto-generated catch blocke.printstacktrace(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace(); else if(button2=(button)v) intent intent = new intent(); / 设置intent的源地址和目标地址 intent.setclass(mainactivity.this, zhucei.class); startactivity(intent); override public boolean oncreateoptionsmenu(menu menu) / inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; v zhucei.javapackage com.example1.jsb;import java.io.bufferedreader;import java.io.bufferedwriter;import java.io.ioexception;import java.io.inputstreamreader;import java.io.outputstreamwriter;import java.io.printwriter;import .socket;import .unknownhostexception;import android.os.bundle;import android.app.activity;import android.view.menu;import android.view.view;import android.widget.*;public class zhucei extends activity public button button1;public button button2;public bufferedreader in;public printwriter out;public socket socket; override protected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.zhucei); button1=(button) this.findviewbyid(r.id.zhuceibutton); button1.setonclicklistener(new buttonclicklistener(); button2=(button) this.findviewbyid(r.id.backbutton); button2.setonclicklistener(new buttonclicklistener(); private final class buttonclicklistener implements view.onclicklistener public void onclick(view v) if(button1=(button)v) try socket= new socket(45, 4000);in = new bufferedreader(new inputstreamreader(socket.getinputstream();out =new printwriter(new bufferedwriter(new outputstreamwriter( socket.getoutputstream(), true); /string fwq=in.readline();/socket.close(); catch (unknownhostexception e) / todo auto-generated catch blocke.printstacktrace(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace(); edittext user=(edittext)findviewbyid(r.id.zcusername); string username=user.gettext().tostring(); edittext pass=(edittext)findviewbyid(r.id.zcuserpass); string password=pass.gettext().tostring(); edittext apass=(edittext)findviewbyid(r.id.zcaguserpass); string apassword=apass.gettext().tostring(); if(password.equals(apassword) if(out!=null) string senm =1+username+password; out.println(senm); textview view1=(textview)findviewbyid(r.id.zhuceiynview); view1.settext(注册成功!); else textview view1=(textview)findviewbyid(r.id.zhuceiynview); view1.settext(网络问题注册未成功); else textview view1=(textview)findviewbyid(r.id.zhuceiynview);view1.settext(两次输入密码不相同,请从新输入!); else if(button2=(button)v) zhucei.this.finish(); try socket.close(); catch (ioexception e) / todo auto-generated catch blocke.printstacktrace(); override public boolean oncreateoptionsmenu(menu menu) / inflate the menu; this adds items to the action bar if it is present. getmenuinflater().inflate(r.menu.main, menu); return true; v dlcg.java:package com.example1.jsb;import java.io.bufferedreader;import java.io.bufferedwriter;import java.io.

温馨提示

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

评论

0/150

提交评论