基于安卓大学生兼职APP设计与实现

发布于:2022-12-20 ⋅ 阅读:(405) ⋅ 点赞:(0)

目 录
第一章 绪论 1
1.1选题背景及意义 1
1.1.1系统开发背景 1
1.1.2目的及意义 2
1.2 Android软件开发的发展趋势与前景 2
1.2.1 Android发展趋势 2
1.2.2 Android开发前景 3
1.3研究主要内容 4
第二章 发环境及相关技术概述 5
2.1 Android系统概述 5
2.1.1 Android系统简介 5
2.1.2 Android系统架构 5
2.1.3 Android系统平台优势 6
2.2 SQLite数据库简介 6
2.3 Bmob后端云数据库概述 6
第三章 系统需求分析 8
3.1可行性分析 8
3.1.1经济可行性 8
3.1.2技术可行性 8
3.1.3操作可行性 9
3.2功能需求分析 10
3.2.1业务流分析 10
3.2.2数据字典 11
3.2.3数据库逻辑结构设计 13
3.3 ER图 15
第四章 系统核心模块设计 17
4.1系统总体设计 17
4.1.1 系统设计思想 17
4.1.2 系统体系架构 17
4.2系统类图 18
4.3系统功能模块划分 21
第五章 系统编码及实现 22
5.1 服务端编码实现 22
5.1.1管理员登陆实现 22
5.1.2 注册用户管理 23
5.1.3 招聘信息管理 23
5.1.4 求职信息管理 24
5.2 客户端编码实现 24
5.2.1 手机端注册用户登录 24
5.2.2 企业用户主界面 26
5.2.3 招聘信息 27
5.2.4 求职信息 28
5.2.5 我的招聘 28
5.2.6 个人用户主界面 31
5.2.7 我的求职 32
5.2.8 我的收藏 33
第六章 系统测试 34
6.1 系统测试环境 34
6.2 测试方法概述 34
6.3 测试用例 35
6.4 本章小结 37
第七章 总结与展望 38
7.1总结 38
7.3展望 38
致 谢 39
参考文献 40
附录 41
第三章 系统需求分析
3.1可行性分析
跟着借鉴课业和社会压力的接续增长,门生对时间安排解放度的需要也越来越猛烈,越来越急迫,而黉舍的工作消息鼓吹和通常经管是务必下达召唤的,这此中就发现了一个非常大的冲突,而跟着社会的接续开展,这种冲突越来越显得凸起。办理之道,是将古代资源网经管的政务处分服无延长到网页,并做好消息分享和安排,以更合理地应用现有资源举行政务实行。可行性钻研的目标,即是用非常小的价格在尽大概短的时间内断定疑问是否可以或许办理。要到达这个目标,务必剖析几种要紧的大概解法的利害,从而校验原定的体系范围和指标是否实际,体系实现后所能带来的效益是否大到值得投资开辟这个体系的水平。所以,可行性钻研本色上是要举行一次大大收缩简化了的体系剖析和计划的历程,也即是在较高档次上以较空洞的方法举行的体系剖析和计划的历程。
体系的可行性剖析要紧包含经济上的可行性、技术上的可行性和操纵上的可行性。本体系的可行性剖析以下:
3.1.1经济可行性
因为工作网站所请求的硬件(电脑及关联硬件)和应用情况(ANDROID+SQL),环境趋势上都轻易采购到或从关联网站下载,而据不彻底观察统计本校门生电脑领有率是85%-90%摆布,体系老本要紧密集在本经管体系的开辟与保护上,对黉舍和门生不会导致太重的经济累赘。而一旦此体系投入应用,不但能够削减黉舍试验室等大众借鉴资源的工作强度,进步资源分享率,在不增长现有资源的条件下进步资源应用率,极大限制的利便了门生借鉴和工作消息鼓吹。并且,指标体系不是非常繁杂,开辟的周期较短,职员经济支付不大,所节减的大批人力、财力发生的效益将远弘远于本鼓吹体系的开辟老本,因此从经济方面讲开辟此体系是可行的。
3.1.2技术可行性
工作网站的开辟基于B/S模式,要紧包含前端使用法式的开辟以及背景数据库的确立和保护两个方面。关于前者请求应具有功效完整、易于使用等特色,而关于后者则请求能确立数据同等性和完整性强、数据平安性好的库。
ANDROID的工作道理是:开始,经历客户端的涉猎器,以超文本(HTML)模式经历表单(FORM)向Web服务器提出请求。接着,服务器获得客户端的请求后,由Web服务器上的ANDROID引擎把ANDROID代码、关联组件、Java剧本以及HTML代码,转化为Servlet代码。而后,由ANDROID引擎挪用Web服务器端的Java编译器对Servlet代码举行编译。末了,由Java假造机实行编译文件,并把客户端的请求后果以规范HTML页面的模式回笼。本体系是在单机Windows XP的情况下开辟的,本机既安置了涉猎器,又安置了tomcat4.1服务器,如许电脑同时饰演服务器端与客户端的脚色,仿真成网络情况,使这个体系能够利便的开辟。体系要紧应用ANDROID和JavaBean来开辟动静网络,应用HTML来计划静态网络,还应用了Microsoft Visual Studio .NET 2003来计划网络的雅观性。本体系接纳的是Microsoft MySql数据库,要紧应用SQL语句走访它。ANDROID经历Java说话的JDBC技术与数据库相连,只有数据库有JDBC的驱动法式就可与之相连。所以从技术方面讲开辟此体系是可行的。
3.1.3操作可行性
鼓吹栏等古代工作消息鼓吹资源,非常利便门生举行借鉴,不过有一个坏处,它具有不变性,门生要到鼓吹栏前才气接管到黉舍工作消息鼓吹消息,非常不利便,而工作局势变更却是没有可展望性,非常多时分非常多门生每每会由于没有实时稽查关照而误了非常多事件。目前实行的工作消息鼓吹体系好似下几个坏处,一是导致非常多的门生由于没有实时稽查而误了非常多事件,二是导致黉舍在鼓吹体系方面的投入。而导致这种鼓吹渠道和门生需要极不调和的为难地势的真正缘故,是由于这此中的鼓吹体系的不完整和不体系。因此,只需办理黉舍内现有鼓吹体系的建设增长网页渠道,即可办理上述疑问。
而据不彻底统计,本校门生中计算机领有率为85%摆布,而且,黉舍机房的上机卡在本校门生中是人手一张。因此本校门生彻底有前提完成在线稽查工作消息鼓吹消息。而当今门生的课业越来越忙,社会压力越来越大,本文转载自http://www.biyezuopin.vip/onews.asp?id=15137因此门生非常急迫地需要一种更适用更利便的借鉴技巧。
本校经管办公室配置齐备,在古代工作消息鼓吹方面做得非常体系,具有着做只能雇用APP的底子硬件前提。
综上所述,本智能雇用APP非常有须要,也非常有前提做到智能雇用APP,以更利便毕业生对工作消息的盘问,更合理地使现有工作消息鼓吹资源发扬非常大的好处。
3.2功能需求分析
3.2.1业务流分析
工作网站工作流程为:体系启动并进来体系第一页界面,在页面用户登录栏举行登录。全部用户都能够涉猎体系主页面。经历权限校验,门生只能涉猎岗亭消息、雇用工消息、消息动静、体系宣布等消息,以及举行留言。经管员能够举行体系背景的全部操纵,包含经管上述消息及体系经管员帐号经管、数据备份及数据规复。

package com.myapp.activity;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.myapp.activity.LoginActivity.LoginThread;
import com.myapp.adapter.ZpListAdapter;
import com.myapp.adapter.ZpListAdapter.ViewHolder;
import com.myapp.common.HttpUtil;
import com.myapp.common.URLImageParser;
import com.myweb.domain.News;
import com.nostra13.universalimageloader.core.ImageLoader;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.method.ScrollingMovementMethod;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.os.Build;

public class SearchDetailActivity extends ActionBarActivity {

	private ProgressDialog pd;

	private TextView tv1;

	private TextView tv2;

	private TextView tv3;

	private TextView tv4;

	private TextView tv5;

	Map<String, Object> newsMap;

	private String id;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_search_detail);

		Intent intent = getIntent();

		id = intent.getStringExtra("id");

		/* 显示ProgressDialog */
		pd = ProgressDialog.show(SearchDetailActivity.this, "标题", "加载中,请稍后……");

		tv1 = (TextView) findViewById(R.id.textView1);

		tv2 = (TextView) findViewById(R.id.textView2);

		tv3 = (TextView) findViewById(R.id.textView3);

		tv4 = (TextView) findViewById(R.id.textView4);

		tv5 = (TextView) findViewById(R.id.textView5);

		tv5.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {

				Intent intent = new Intent(SearchDetailActivity.this,
						BoardListActivity.class);

				intent.putExtra("id", id);

				// 启动Activity
				startActivity(intent);
			}
		});

		tv5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); // 下划线

		tv4.setMovementMethod(ScrollingMovementMethod.getInstance());

		newsMap = new HashMap<String, Object>();

		Thread newsDetailThread = new Thread(new NewsDetailThread());

		newsDetailThread.start();

	}

	// 获取新闻列表多线程
	class NewsDetailThread implements Runnable {

		public void run() {
			try {

				JSONObject paraObj = new JSONObject();

				paraObj.put("id", id);

				paraObj.put("action", "view");

				String result = HttpUtil.getJsonFromServlet(paraObj.toString(),
						"NewsService");

				if (!result.equals("")) {

					News news = JSONObject.parseObject(result, News.class);

					Map<String, Object> newsMap1 = new HashMap<String, Object>();

					newsMap1.put("id", String.valueOf(news.getId()));

					newsMap1.put("title", news.getTitle());

					newsMap1.put("typeid", String.valueOf(news.getTypeid()));

					newsMap1.put("createTime", news.getCreatetime());

					newsMap1.put("createUser", news.getCreateuser());

					newsMap1.put("count", news.getReplynum());

					newsMap1.put("content", news.getContent());

					Message msg = new Message();

					msg.what = 1;// 访问成功并有返回值

					msg.obj = newsMap1;

					handler.sendMessage(msg);

				}

			} catch (Exception ex) {

				System.out.println("ex: " + ex.getMessage());

				Message msg = new Message();

				msg.what = 0;// 网络异常

				handler.sendMessage(msg);

			}
		}
	}

	Handler handler = new Handler() {
		public void handleMessage(Message msg) {

			super.handleMessage(msg);

			switch (msg.what) {

			case 0:
				pd.dismiss();// 关闭ProgressDialog

				Toast.makeText(getApplicationContext(), "登录失败,请检查网络是否畅通!",
						Toast.LENGTH_SHORT).show();
				break;

			case 1:
				pd.dismiss();// 关闭ProgressDialog

				try {
					newsMap = (Map<String, Object>) msg.obj;

					String cs = newsMap.get("content").toString();

					id = newsMap.get("id").toString();

					tv1.setText(newsMap.get("title").toString());

					tv2.setText("发布人:" + newsMap.get("createUser").toString());

					String createTime = newsMap.get("createTime").toString();

					if (!createTime.equals("")) {
						createTime = createTime.substring(0,
								createTime.indexOf(" "));
					}

					tv3.setText("发布时间:" + createTime);

					tv4.setMovementMethod(ScrollingMovementMethod.getInstance());

					URLImageParser imgOBJ = new URLImageParser(tv4,
							SearchDetailActivity.this);// 实例化URLImageGetter类

					Spanned content = Html.fromHtml(cs, imgOBJ, null);

					tv4.setText(content);

					if (newsMap.get("typeid").toString().equals("-1")) {
						tv5.setVisibility(View.INVISIBLE);
					} else {
						tv5.setVisibility(View.VISIBLE);

						tv5.setText("评论(" + newsMap.get("count").toString()
								+ ")");
					}

				} catch (Exception ex) {
					System.out.print(ex.getMessage());
				}
			}

		}
	};

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		// getMenuInflater().inflate(R.menu.news_detail, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		return super.onOptionsItemSelected(item);
	}

}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到