【达内课程】安卓页面和组件练习项目(航空订票系统)

主页面实现

效果图
在这里插入图片描述
主页面是一个登录页面,输入用户名密码,如果错误提示,如果正确则跳转菜单页。

判断用户名密码是否正确使用的是 UserService 的 login 方法。

activity_main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/main_bg"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingTop="50dp">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/logo" />

    <EditText
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="50dp"
        android:layout_marginRight="30dp"
        android:background="@mipmap/input"
        android:hint="用户名"
        android:paddingLeft="20dp"
        android:textColor="@android:color/white"
        android:textColorHint="#fff" />

    <EditText
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginLeft="30dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="30dp"
        android:background="@mipmap/input"
        android:hint="密码"
        android:inputType="textPassword"
        android:paddingLeft="20dp"
        android:textColor="@android:color/white"
        android:textColorHint="#fff" />

    <ImageButton
        android:id="@+id/loginbutton"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_marginTop="30dp"
        android:background="#0000"
        android:scaleType="fitXY"
        android:src="@mipmap/login" />

</LinearLayout>

MainActivity

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";//习惯用当前类名当作TAG

    EditText editText1;
    EditText editText2;
    ImageButton imageButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        setViews();
        setListeners();
    }

    private void setViews() {
        editText1 = findViewById(R.id.username);
        editText2 = findViewById(R.id.password);
        imageButton = findViewById(R.id.loginbutton);

    }

    private void setListeners() {
        imageButton.setOnClickListener(view -> doLogin());
    }


    /*
     * 1、获取输入框用户名和密码
     * 2、新建 Service实例 赋给 service
     * 3、调用 service.login(username,password)中方法
     *     并获得它返回的运算结果赋值给b
     * 4、b如果是true
     *       5、跳转到下一个页面
     *       6、销毁当前登录窗口
     * 7、否则
     *       8、显示登录失败
     * */
    private void doLogin() {
        String userName = editText1.getText().toString();
        String password = editText2.getText().toString();
        Log.d(TAG, "用户名:" + userName + "密码:" + password);
        UserService service = new UserService();
        boolean b = service.login(userName, password);
        Log.d(TAG, "登录是否成功" + b);
        if (b) {
            startActivity(new Intent(this, MenuActivity.class));
            finish();
        } else {
            Toast.makeText(this, "登录失败请检查用户名和密码", Toast.LENGTH_SHORT).show();
        }
    }
}

其中 User

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String toString() {
        return "{" + username + "," + password + "}";
    }
}

其中 UserService

public class UserService {
    private static final String TAG = "UserService";

    public User[] findAll() {
        //获得用户信息
        String[][] a = {{"Pinkman", "White", "Mike"}, {"123", "456", "789"}};
        /*[[a,b,c],[*,*,*]]
         * -------   --------
         *    0        1
         * */
        //新建 User[]数组,长度a[0].length
        User[] users = new User[a[0].length];
        //遍历 users 数组
        //在每个位置新建 User对象
        for (int i = 0; i < users.length; i++) {
            users[i] = new User(a[0][i], a[1][i]);
        }
        Log.d(TAG, "系统用户数据:" + Arrays.toString(users));
        return users;
    }

    public boolean login(String userName, String password) {
        //调用上面方法获得所有用户信息
        User[] a = findAll();
        for (int i = 0; i < a.length; i++) {
            String u = a[i].getUsername();
            String p = a[i].getPassword();
            if (u.equals(userName) && p.equals(password)) {
                return true;
            }
        }
        return false;
    }
}

菜单页面页实现

效果图
在这里插入图片描述
菜单页有两个按钮,点击第一个跳转网点查询,点击第二个跳转航班查询

activity_menu

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/main_bg"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#0000"
        android:src="@mipmap/buttonbg"    />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#0000"
        android:src="@mipmap/buttonbg" />

</LinearLayout>

MenuActivity

public class MenuActivity extends AppCompatActivity {
    ImageButton imageButton1;
    ImageButton imageButton2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_menu);

        setViews();
        setListeners();
    }

    private void setViews() {
        imageButton1 = findViewById(R.id.imageButton1);
        imageButton2 = findViewById(R.id.imageButton2);
    }

    private void setListeners() {
        imageButton1.setOnClickListener(view -> startActivity(new Intent(MenuActivity.this, BranchSearchActivity.class)));
        imageButton2.setOnClickListener(view -> startActivity(new Intent(MenuActivity.this, FlightSearchActivity.class)));
    }
}

网点查询实现

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

activity_branch_search

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <!--标题栏开始-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#004080">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#0000"
            android:padding="10dp"
            android:src="@mipmap/home" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="网点查询"
            android:textColor="@android:color/white" />

    </RelativeLayout>
    <!--标题栏结束-->

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:background="#87CEEB"
        android:entries="@array/cities"
        android:padding="5dp" />

    <ImageButton
        android:id="@+id/imageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="20dp"
        android:background="#ffff"
        android:src="@mipmap/search" />

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:scaleType="fitXY"
        android:src="@mipmap/line" />

    <!--占满剩余空间-->
    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

BranchSearchActivity

public class BranchSearchActivity extends AppCompatActivity {
    Spinner spinner;
    ImageButton imageButton;
    ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_branch_search);

        setViews();
        setListeners();
    }

    private void setViews() {
        spinner = findViewById(R.id.spinner);
        imageButton = findViewById(R.id.imageButton);
        listview = findViewById(R.id.listview);
    }

    private void setListeners() {
        imageButton.setOnClickListener(view -> search());
    }

    private void search() {
        //从下拉菜单中获得城市
        String city = (String) spinner.getSelectedItem();
        //新建业务逻辑运算组件对象
        BranchService branchService = new BranchService();
        //调用它的方法获得查询结果
        Branch[] branches = branchService.findByCity(city);
        //新建String[]数组,长度是branches.length
        String[] a = new String[branches.length];
        //遍历a数组
        for (int i = 0; i < a.length; i++) {
            Branch b = branches[i];
            a[i] = "\nID:" + b.getId() +
                    "\nName" + b.getName() +
                    "\nAddress" + b.getAddress();
        }

        //在列表控件中显示
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, a);
        listview.setAdapter(adapter);
    }
}

其中布局中的 cities 是 strings 中的一个 string-array

	<string-array name="cities">
        <item>杭州</item>
        <item>重庆</item>
        <item>广州</item>
    </string-array>

其中 Activity 中的 Branch

public class Branch {
    private String id;
    private String name;
    private String address;

    public Branch(String id, String name, String address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

BranchService

public class BranchService {
    private static final String TAG = "BranchService";

    public Branch[] findByCity(String city) {
        String[][] a = {{"01", "02", "03"}, {"杭州", "重庆", "广州"}, {"1378.1km处", "2027.7km处", "2390.3km"}};

        Branch[] b = new Branch[1];
        for (int i = 0; i < a[0].length; i++) {
            if (city.equals(a[1][i])) {
                b[0] = new Branch(a[0][i], a[1][i], a[2][i]);
            }
        }
        Log.d(TAG, "网点查询结果:" + Arrays.toString(b));
        return b;
    }
}

航班查询实现

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

activity_flight_search

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical">

    <!--标题栏开始-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#004080">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#0000"
            android:padding="10dp"
            android:src="@mipmap/home" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="航班查询"
            android:textColor="@android:color/white" />

    </RelativeLayout>
    <!--标题栏结束-->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:padding="10dp">

        <!--左侧菜单开始-->
        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentBottom="true"
                android:src="@mipmap/flight" />

            <Spinner
                android:id="@+id/spinner1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:layout_toRightOf="@+id/imageView1"
                android:background="#87CEEB"
                android:entries="@array/cities"
                android:padding="5dp" />

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@id/spinner1"
                android:layout_alignLeft="@id/spinner1"
                android:text="出发城市" />

        </RelativeLayout>
        <!--左侧菜单结束-->

        <!--右侧菜单开始-->
        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentBottom="true"
                android:src="@mipmap/flight2" />

            <Spinner
                android:id="@+id/spinner2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true"
                android:layout_toRightOf="@+id/imageView2"
                android:background="#87CEEB"
                android:entries="@array/cities"
                android:padding="5dp" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@id/spinner2"
                android:layout_alignLeft="@id/spinner2"
                android:text="到达城市" />

        </RelativeLayout>
        <!--右侧菜单结束-->

    </LinearLayout>

    <ImageButton
        android:id="@+id/imageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#0000"
        android:src="@mipmap/search"
        android:layout_marginTop="10dp"/>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>


FlightSearchActivity

public class FlightSearchActivity extends AppCompatActivity {
    Spinner sp1;
    Spinner sp2;
    ImageButton imageButton;
    ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_flight_search);

        initViews();
        intetListeners();
    }

    private void initViews() {
        sp1 = findViewById(R.id.spinner1);
        sp2 = findViewById(R.id.spinner2);
        listView = findViewById(R.id.listView);
        imageButton = findViewById(R.id.imageButton);
    }

    private void intetListeners() {
        imageButton.setOnClickListener(view -> search());
    }

    private void search() {
        //获得出发城市和到达城市
        String from = (String) sp1.getSelectedItem();
        String to = (String) sp2.getSelectedItem();
        //新建逻辑运算组件
        //调用它的查询方法获得查询结果
        FlightService flightService = new FlightService();
        FlightPlan[] flights = flightService.findByCity(from, to);
        //新建String[],长度flights.length
        String[] a = new String[flights.length];
        for (int i = 0; i < flights.length; i++) {
            //取出航班对象
            FlightPlan flightPlan = flights[i];
            a[i] = "\nID:" + flightPlan.getId() + "\n出发地:" + flightPlan.getFromairport() + "\n目的地" +
                    flightPlan.getToairport() + "\n时间" + flightPlan.getTime();
        }

        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout
                .simple_list_item_1, a);
        listView.setAdapter(arrayAdapter);
    }
}

其中 FlightPlan

public class FlightPlan {
    private String id;
    private String fromairport;
    private String toairport;
    private String time;

    public FlightPlan(String id, String fromairport, String toairport, String time) {
        this.id = id;
        this.fromairport = fromairport;
        this.toairport = toairport;
        this.time = time;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getFromairport() {
        return fromairport;
    }

    public void setFromairport(String fromairport) {
        this.fromairport = fromairport;
    }

    public String getToairport() {
        return toairport;
    }

    public void setToairport(String toairport) {
        this.toairport = toairport;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }
}

FlightService

public class FlightService {

    public FlightPlan[] findByCity(String from, String to) {
        String temp = from + "," + to;
        String[][] data = {{"杭州,重庆", "杭州,广州", "重庆,广州", "广州,重庆", "广州,杭州", "重庆,杭州"},
                {"001", "002", "003", "004", "005", "006"}, {"9月13日", "9月13日", "9月13日", "9月13日", "9月13日", "9月13日"}};

        FlightPlan[] plan = new FlightPlan[1];
        for (int i = 0; i < data[0].length; i++) {
            if (temp.equals(data[0][i])) {
                plan[0] = new FlightPlan(data[1][i], from, to, data[2][i]);
            }
        }

        return plan;
    }
}

资源下载

主要是 Android 页面布局练习和简单的逻辑练习。Android 小白的第一个项目。

资源下载

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值