数据结构课程设计报告3824141.docx
- 文档编号:24680208
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:35
- 大小:333.46KB
数据结构课程设计报告3824141.docx
《数据结构课程设计报告3824141.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告3824141.docx(35页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告3824141
(此文档为word格式,下载后您可任意编辑修改!
)
课程设计报告
Android平台手机的应用软件
一、设计任务与目标
设计要求:
Android手机用户可以通过手机浏览自己所需要查看的饭店信息。
当用户注册成为本软件的注册用户后,除了对饭店进行搜索以外还可以对饭店进行评价和利用本软件内嵌的GoogleMap查询饭店的具体位置和行车路线
本系统为用户提供以下功能:
1.对不同需求人群的餐饮查找,查找方式分为热点地区、用餐目的、菜系、地标建筑、热门菜。
2.用户通过查询可了解到饭店以及饭菜的具体信息,包括饭店地址、电话、菜系、环境风格、包间数量。
3.用户可通过软件中内嵌的Map进行饭店地址、行车路线的具体查询。
4.用户通过登录系统后对饭店进行评价。
系统的开发方法总结如下:
(1)调查,了解各个场所与场所或者是各个景点与景点之间的信息,路径和距离,从外来人员或者参观者和走访者的角度出发,该如何设计才能满足用户需求。
(2)分析,对调查得到的数据进行分析,根据其要求实现的功能分析系统结构和界面将实现的基本功能。
(3)设计与开发,设计系统界面并编辑实现其各个功能的代码。
(4)调试,在设计完成后,调试系统运行的状况,修改完善系统,然后进行测试。
二、方案设计与论证
为了更加清晰地表达系统的业务功能模块,画出用例图,对于不同的角色,所承担的任务各自不同,功能不一样,如图3-2-1客户端游客用例图、图3-2-2客户端用户用例图、图3-2-3管理端用例图:
图3-2-1客户端游客用例图
图3-2-2客户端用户用例图
图3-2-3管理端用例图
3.3解决方案
应用软件的定位是一个“北京美食搜索”,是一个通过网络的搜索引擎。
据以上分析,该系统的架构如图3-3系统构架图:
图3-3系统构架图
三、算法说明
(一)根据需求分析和用例分析,该系统的数据库可以有以下实体构成:
用户信息id、名字、密码、昵称、手机号、权限、创建时间、饭店
餐厅评论信息id、餐厅id、评论内容、发出评论id、评论时间
餐厅信息Id、餐厅名字、餐厅地址、餐厅电话、人均消费、营业时间、停车位、行车路线、能否刷卡、无折扣项、注意事项
餐厅设备信息id、餐厅id、营业面积、无烟区、能否刷卡、大厅座位、小包数、中包数、大包数
服务项目id、餐厅id、自助餐、能否包场、能分餐、团餐要求
菜价信息id、餐厅id、菜名、价格
地铁沿线id、地铁线名、地名、北纬、东经
所有商区id、城区、地名、北纬、东经
菜系id、菜系、菜名
热门菜id、菜名
地标建筑id、城区、地名、地标名字、北纬、东经
热点地区id、地名、北纬、东经
用餐目的id、目的分类
实体-关系模型
系统的实体-关系模型如图4-4-6所示:
图4-4-6实体-关系模型图
(二)主要算法设计及相关算法补充
先创建图存储各个景点或场所,以图的顶点表示景点或场所,以边表示路径,再利用算法求出各个地方的最短路径,然后根据需要进行补充相关算法。
四、全部源程序清单
/*
*@登录方式
*用户填好登录信息后,点击登录发送给服务器登录信息
*
*当服务器接受并确认登录信息后,直接进行登录操作,并返回给手机端这边登录成功否标识
*
*手机端这边判断登录成功否标识是否为成功标识,若是则将mark.USERNAME改为用户昵称,并提示“登录成功”,若否则提示“登录失败”
*
*@点击不同的查找方式
*------点击按地标时,跳转到
*/
packagecom.food;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.UnsupportedEncodingException;
importjava.util.ArrayList;
importjava.util.HashMap;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.client.ClientProtocolException;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.message.BasicNameValuePair;
importorg.json.JSONException;
importorg.json.JSONObject;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.content.DialogInterface;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.ListView;
importandroid.widget.SimpleAdapter;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassstartextendsActivity{
TextViewusernickname;
TextViewlandmark;
TextViewhotSpace;
TextViewallCityProper;
TextViewdinnerTarget;
TextViewsubway;
TextViewallDish;
TextViewhotDish;
publicstaticButtonlogin;
Buttonregister;
Buttonsearch;
EditTextsearchEdite;
ListViewlist;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.start);
setTitle("掌握美食");
usernickname=(TextView)this.findViewById(R.id.usernickname);
landmark=(TextView)this.findViewById(R.id.landmark);
hotSpace=(TextView)this.findViewById(R.id.hotSpace);
allCityProper=(TextView)this.findViewById(R.id.allCityProper);
dinnerTarget=(TextView)this.findViewById(R.id.dinnerTarget);
subway=(TextView)this.findViewById(R.id.subway);
allDish=(TextView)this.findViewById(R.id.allDish);
hotDish=(TextView)this.findViewById(R.id.hotDish);
login=(Button)this.findViewById(R.id.login);
register=(Button)this.findViewById(R.id.register);
search=(Button)this.findViewById(R.id.search);
searchEdite=(EditText)this.findViewById(R.id.searchEdite);
list=(ListView)this.findViewById(R.id.listView);
usernickname.setText(mark.NICKNAME);//设置用户默认昵称为“游客”或者已登录用户昵称
//点击当前用户名的时候若为“游客模式”者显示"当前为游客模式请先登录"
//若为“用户模式”则跳转到用户基本信息界面
usernickname.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(mark.NICKNAME=="游客"){
Toast.makeText(getApplication(),"当前为游客模式"+"\n"+"请先登录",Toast.LENGTH_SHORT).show();
}else{
Intentit=newIntent(start.this,userInformation.class);
startActivity(it);
}
}
});
/*
*获得服务中饭店查询排行榜
*
*@向服务器发送数据searchNum(searchNum=usernickname)获得饭店查询排行榜并显示出
*
*@接受服务器的信息由——searchnum获得是否成功标识
*——num获得饭店总数
*restaurantname+i获得饭店名
*(i为0-9,例如restaurantName1、restaurantName2)
*/
if(mark.ifn==1){
StringsearchNum="searchNum";
//发送请求
HttpClienthttpclient=newDefaultHttpClient();
HttpPosthttppost=newHttpPost(mark.SERVERSEARCHNUM);
ArrayList
nvps.add(newBasicNameValuePair(searchNum,usernickname.getText().toString()));
try{
UrlEncodedFormEntityentityin=newUrlEncodedFormEntity(
nvps,"gbk");
httppost.setEntity(entityin);
}catch(UnsupportedEncodingExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
//接受数据
finalArrayList
try{
HttpResponseresponse=httpclient.execute(httppost);
HttpEntityentityout=response.getEntity();
BufferedReaderbr=newBufferedReader(
newInputStreamReader(entityout.getContent(),"gbk"));
Stringline="";
StringBuffersb=newStringBuffer();
while((line=br.readLine())!
=null){
sb.append(line);
}
if(entityout!
=null){
try{
JSONObjectjson=newJSONObject(sb.toString());
mark.SERVERSEARCHNUM=json.getString("searchnum");//获得是否成功标识
Stringnums=json.getString("num");//获得饭店总数
intnum=Integer.parseInt(nums);//将饭店查询次数转换成整形
//intnum=json.getInt("num");
for(inti=1;i<=num;i++)
{
HashMap
Stringname="restaurantname"+i;
map.put(searchNum,json.getString(name));
searchlist.add(map);
}
//
}catch(JSONExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}catch(ClientProtocolExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
//_
SimpleAdapteradapter=newSimpleAdapter(
start.this,searchlist,R.layout.item,
newString[]{searchNum},newint[]{R.id.ItemTitle});
list.setAdapter(adapter);
//--
}
/*
*//判断用户模式
//若为游客模式执行登录1.将用户状态标识改为注册用户模式
//2.将昵称改为注册用户名
//3.并将“登录”Button改为“登出”
//
//若为注册用户模式即进行登出操作1.将用户状态标识改为游客模式
//2.将昵称改为游客
//3.并将“登出”Button改为“登录”
*注册用户登录服务器
*
*@向服务器发送数据username和password
*
*@接受服务器的信息由——userinout获得是否成功标识
*——nickname获得用户昵称
*
*@登录成功后将“登录”Button改为“登出”
*
*/
login.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//判断用户模式
//若为游客模式执行登录1.将用户状态标识改为注册用户模式
//2.将昵称改为注册用户名
//3.并将“登录”Button改为“登出”
//
//若为注册用户模式即进行登出操作1.将用户状态标识改为游客模式
//2.将昵称改为游客
//3.并将“登出”Button改为“登录”
if(mark.USERIN==mark.REGISTERUSERIN){
mark.USERIN=mark.TOURISTIN;//将用户状态标识改为游客模式
mark.NICKNAME="游客";//将昵称改为游客
login.setText("登录");//将“登出”Button改为“登录”
Toast.makeText(getApplication(),"用户退出!
",
Toast.LENGTH_SHORT).show();
return;
}
LayoutInflaterfactory=LayoutInflater
.from(start.this);
finalViewtextEntryView=factory.inflate(
R.layout.login,null);
finalTextViewusername=(TextView)textEntryView.findViewById(R.id.username_edit);
finalTextViewpassword=(TextView)textEntryView.findViewById(R.id.password_edit);
AlertDialogdlg=newAlertDialog.Builder(
start.this).setTitle("用户登录")
.setView(textEntryView).setPositiveButton("登录",
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,
intwhichButton){
if(mark.ifn==1){
//发送请求
HttpClienthttpclient=newDefaultHttpClient();
HttpPosthttppost=newHttpPost(mark.SERVERLOGIN);
ArrayList
nvps.add(newBasicNameValuePair("username",username.getText().toString()));
//加密密码
//{
//}
//
nvps.add(newBasicNameValuePair("password",password.getText().toString()));
try{
UrlEncodedFormEntityentityin=newUrlEncodedFormEntity(
nvps,"gbk");
httppost.setEntity(entityin);
}catch(UnsupportedEncodingExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
//接受数据
finalArrayList
try{
HttpResponseresponse=httpclient.execute(httppost);
HttpEntityentityout=response.getEntity();
BufferedReaderbr=newBufferedReader(
newInputStreamReader(entityout.getContent(),"gbk"));
Stringline="";
StringBuffersb=newStringBuffe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 3824141