现代软件工程作业第十二题(原十四题)

12. 开发软件有很多种方式,从软件运行的平台来看,可以在下面的平台运行:

  • 网页 (只要有浏览器就可以访问软件或服务)
  • Windows 平台 (例如最新的Windows 10 支持 PC,Surface,Mobile,甚至Xbox 运行)
  • 安卓平台
  • iOS 平台 (Mac 和 iPhone)

请找一个同学结对 (参看本书结对编程的内容),两人共同工作 (不能分开干活),从上面的列表中选取两个平台,在每个平台上,写一个最简单的 "Hello World" 类型的程序,把写程序的经历写成博客发布出来,内容包括:

- 什么平台, 用什么编程语言,什么软件构建环境 (IDE),什么软件工程的工具,开发的流程大概是什么,最后程序的源码,和用户界面是什么?

(可以从网上查找相关资料,甚至源程序都可以参考其他人的, 但是要自己把程序编译,运行)

1.选择在网页上输出一个:Hello World

编写一个servlet来在网页上显示helloworld,所用语言为Java,具体的开发流程和构建环境如下:

首先在Java Resources下的src下新建立一个包,之后建立MyServlet类。

代码编写如下:

package page;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

public class MyServlet extends HttpServlet{
   @Override
public void service(ServletRequest req, ServletResponse res)
        throws ServletException, IOException {
    // TODO Auto-generated method stub
       res.setContentType("text/html");
       res.setCharacterEncoding("utf-8");
       PrintWriter writer=null;
       try{
       writer=res.getWriter();
       writer.write("Hello World!");
       }catch(IOException e){
           e.printStackTrace();
       }
}
}

配置好servlet之后,将工程添加部署到Server,然后运行Server。运行成功后,打开浏览器输入:http://localhost:8080/firstweb/hello.do

可以得到网页上显示的 Hello World

2.选择在安卓平台上输出一个:Hello World

选用原有的安卓平台开发的app,修改代码来显示出hello world。配置环境等为安卓app开发特定环境,所用语言为Java,代码和界面如下:

package com.example.audiosharer;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class Second extends Activity {

    private Button search;
    private EditText cityname;
    //private SayHello helloworld;
    private ImageView weatherImage;
    private TextView temperature;
    private TextView weather;
    private TextView wind;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads().detectDiskWrites().detectNetwork()
                .penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
                .penaltyLog().penaltyDeath().build());

        setContentView(R.layout.second);

        search = (Button) findViewById(R.id.search);
        cityname = (EditText) findViewById(R.id.cityname);
        //helloworld = (SayHello) findViewById(R.id.helloworld);
        weatherImage = (ImageView) findViewById(R.id.weatherImage);

        temperature = (TextView) findViewById(R.id.temperature);
        weather = (TextView) findViewById(R.id.weather);
        wind = (TextView) findViewById(R.id.wind);

        changeWeather("南京");

        search.setOnClickListener(new OnClickListener() {

            @Override
            private String[] getDate() {
                return new String[] {"Hello World"};
            }
            public void onClick(View arg0) {
                changeWeather(cityname.getText().toString());

            }
        });
    }

    public void changeWeather(String cityname){
        String serverURL = "http://v.juhe.cn/weather/index?key=206b256d722ae1d509bd9760f22fbc69&dtype=json&cityname=" + cityname + "&format=1";
        String result = "";
        HttpGet httpRequest = new HttpGet(serverURL);// 建立http get联机

        try {
            HttpResponse httpResponse = new DefaultHttpClient()
                    .execute(httpRequest);
            if (httpResponse.getStatusLine().getStatusCode() == 200)
                result = EntityUtils.toString(httpResponse.getEntity());// 获取相应的字符串
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }// 发出http请求

        // System.out.println("====================>" + result);

        String tempStr = "";
        String weatherStr = "";
        String windStr = "";
        try {
            JSONTokener jsonParser = new JSONTokener(result);
            JSONObject weatherJson = (JSONObject) jsonParser.nextValue();

            tempStr = weatherJson.getJSONObject("result")
                    .getJSONObject("today").getString("temperature");
            weatherStr = weatherJson.getJSONObject("result")
                    .getJSONObject("today").getString("weather");
            windStr = weatherJson.getJSONObject("result")
                    .getJSONObject("today").getString("wind");
        } catch (JSONException e) {
            e.printStackTrace();
        }

        temperature.setText("        " + tempStr);
        weather.setText("                " + weatherStr);
        wind.setText("              " + windStr);

        if (weatherStr == "晴") {
            weatherImage.setImageResource(R.drawable.weathericon_condition_01);
        } else if (weatherStr.trim().contains("多云")) {
            weatherImage.setImageResource(R.drawable.weathericon_condition_03);
        } else if (weatherStr.trim().contains("阴")) {
            weatherImage.setImageResource(R.drawable.weathericon_condition_04);
        } else if(weatherStr.trim().contains("雾")){
            weatherImage.setImageResource(R.drawable.weathericon_condition_05);
        } else if(weatherStr.trim().contains("沙尘暴")){
            weatherImage.setImageResource(R.drawable.weathericon_condition_06);
        } else if(weatherStr.trim().contains("阵雨")){
            weatherImage.setImageResource(R.drawable.weathericon_condition_07);
        } else if (weatherStr.trim().contains("雨")) {
            weatherImage.setImageResource(R.drawable.weathericon_condition_08);
        } else if (weatherStr.trim().contains("小雨")) {
            weatherImage.setImageResource(R.drawable.weathericon_condition_08);
        } else if (weatherStr.trim().contains("大雨")) {
            weatherImage.setImageResource(R.drawable.weathericon_condition_09);
        } else if (weatherStr.trim().contains("雷阵雨")) {
            weatherImage.setImageResource(R.drawable.weathericon_condition_10);
        } else if(weatherStr.trim().contains("雪")){
            weatherImage.setImageResource(R.drawable.weathericon_condition_11);
        } else if(weatherStr.trim().contains("小雪")){
            weatherImage.setImageResource(R.drawable.weathericon_condition_12);
        } else if(weatherStr.trim().contains("大雪")){
            weatherImage.setImageResource(R.drawable.weathericon_condition_13);
        } else if(weatherStr.trim().contains("雨夹雪")){
            weatherImage.setImageResource(R.drawable.weathericon_condition_14);
        }
    }

}

应用中所显示的界面为:

时间: 2024-10-08 18:47:46

现代软件工程作业第十二题(原十四题)的相关文章

第二题、第三题、第四题

1.以编程方式操作 HttpCachePolicy 类. HttpCachePolicy.SetExpires HttpCachePolicy.SetCacheability |NoCache|Private|Public|Server|ServerAndNoCache |ServerAndPrivate 2<%@ OutputCache Duration="60" VaryByParam="None" %>Duration 和 VaryByParam

LeetCode刷题:第四题 寻找两个有序数组的中位数

题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 直接上代码: double findMedianSortedArray

使用 C# 开发智能手机软件:推箱子(十二)

这是"使用 C# 开发智能手机软件:推箱子"系列文章的第十二篇.在这篇文章中,介绍 Window/AboutDlg.cs 源程序文件. 这个源程序文件包括 AboutDlg 类,该类继承自 System.Windows.Forms.Form 类.表示推箱子的"关于"对话框.例如以下图所看到的:     以下是 Window/AboutDlg.Designer.cs 源程序的部分代码: namespace Skyiv.Ben.PushBox.Window { part

GIS基础软件及操作(十二)

原文 GIS基础软件及操作(十二) 练习十二. ArcMap制图-地图版面设计 设置地图符号-各种渲染方式的使用 使用ArcMap Layout(布局)界面制作专题地图 将各种地图元素添加到地图版面中 提示:在以下练习过程中,请时常注意保存地图文档 渲染图层要素-唯一值符号 在ArcMap中新建地图文档,加载 [空间分析] 扩展模块及[空间分析工具栏] 加载图层:[省会城市.地级市驻地.主要公路.国界线.省级行政区.Hillshade_10k],将地图文档保存到Ex12下,名称为:ChinaMa

华为上机题汇总(十二)

华为上机题汇总(十二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十二 目录 第五十六题 第五十七题 第五十八题 第五十九题 第六十题 第五十六题 56.在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度.本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具"夫妻相"的人. 题目中预先给定一组女士的姓名拼音.输

经典算法题每日演练——第二十二题 奇偶排序

原文:经典算法题每日演练--第二十二题 奇偶排序 这个专题因为各种原因好久没有继续下去了,MM吧...你懂的,嘿嘿,不过还得继续写下去,好长时间不写,有些东西有点生疏了, 这篇就从简单一点的一个“奇偶排序”说起吧,不过这个排序还是蛮有意思的,严格来说复杂度是O(N2),不过在多核的情况下,可以做到 N2 /(m/2)的效率,这里的m就是待排序的个数,当m=100,复杂度为N2 /50,还行把,比冒泡要好点,因为重点是解决问题的奇思妙想. 下面我们看看这个算法是怎么描述的,既然是奇偶,肯定跟位数有

经典算法题每日演练——第十二题 线段树

原文:经典算法题每日演练--第十二题 线段树 这一篇我们来看树状数组的加强版线段树,树状数组能玩的线段树一样可以玩,而且能玩的更好,他们在区间求和,最大,平均 等经典的RMQ问题上有着对数时间的优越表现. 一:线段树 线段树又称"区间树”,在每个节点上保存一个区间,当然区间的划分采用折半的思想,叶子节点只保存一个值,也叫单元节点,所 以最终的构造就是一个平衡的二叉树,拥有CURD的O(lgN)的时间. 从图中我们可以清楚的看到[0-10]被划分成线段的在树中的分布情况,针对区间[0-N],最多有

华为上机题汇总(二十二)

华为上机题汇总(二十二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十二 目录 第一百零六题 第一百零七题 第一百零八题 第一百零九题 第一百一十题 第一百一十一题 第一百零六题 106.去饭店吃饭 一个男人3元 一个女人2元 一个小孩1元 现输入总人数和总花费 #include <iostream> #include <vector> using namespace std; void display(const vector<

使用 C# 开发智能手机软件:推箱子(二十二)

这是"使用 C# 开发智能手机软件:推箱子" 系列文章的第二十二篇.在这篇文章中,介绍 Window/MainForm.Replay.cs 源程序文件.这个源程序文件是 MainForm 类的一部分,该类继承自 System.Windows.Forms.Form 类,表示推箱子的主窗体.而本篇文章讲述的是推箱子"回放"过程,如下图所示: 我们先看看 MainForm.Designer.cs 源程序文件(该文件是由 Visual Studio 2005 IDE 自动生

网络流二十四题

网络流二十四题 网络流是个好东西,希望我也会. 网络流?\(orz\ zsy!!!!!\) P2766 最长不下降子序列问题 考虑我们是如何\(dp\)这个\(LIS\)的. 我们是倒着推,设置\(dp(i)\)代表以\(i\)为起点的\(LIS\)是多少.转移太显然了 \[ dp(i)=max\{dp(j)\}+1,data[i]\le data[j] \] 想一想一个合法的\(LIS\)方案代表着什么,代表着它是由这个式子一个一个推出来的. 考虑一个数字只能用一次,那么我们直接拆成两个点\(