网络资源模板--基于Android Studio 实现的运动场馆预约

发布于:2025-08-04 ⋅ 阅读:(13) ⋅ 点赞:(0)

目录

一、测试环境说明

二、项目简介

三、项目演示

四、部设计详情(部分)

首页

五、项目源码 


一、测试环境说明

电脑环境

Windows 11

编写语言

JAVA

开发软件

Android Studio  (2020)

开发软件只要大于等于测试版本即可(近几年官网直接下载也可以),若是版本低于测试版本请自行测试。项目需要根据你的软件自行适配

二、项目简介

该项目简介来自网络,具体内容需要自行测试

校运汇体育场地预约系统是一款基于Android平台的移动应用,旨在为校园师生提供便捷的体育场地预约服务。

该系统采用Java语言开发,使用SQLite作为本地数据库存储用户信息和场地预约数据。系统主要功能包括用户注册登录、场地查询预约、个人预约管理以及账户设置等模块。

用户可以通过直观的界面浏览不同日期和类型的体育场地,查看场地预约状态并进行预约操作。系统实现了用户身份验证、场地状态实时更新、预约记录管理等功能,并通过底部导航栏提供流畅的页面切换体验。

在技术实现上,系统采用了MVC架构模式,使用Android原生组件和Material Design设计规范,确保应用的稳定性和良好的用户体验。

该系统有效解决了传统人工预约方式的效率低下问题,为校园体育资源管理提供了数字化解决方案。

该项目由编程乐学团队介入,优化布局完善功能

三、项目演示

网络资源模板--基于Android studio 运动场馆预约

四、部设计详情(部分)

首页

1. 页面的结构

该页面采用经典的垂直线性布局,顶部包含两个文本视图用于显示用户选择的运动场地和预约日期,中间有一个复选框用于筛选未被预约的场地,底部是一个搜索按钮。

页面主体部分是一个列表视图,用于展示筛选后的场地信息。当没有可选场地时,会显示一个提示文本。

整体布局层次清晰,功能分区明确,用户操作流程从选择条件到查看结果自然流畅。

2. 使用到的技术

该页面使用了Android的基础UI组件和数据库技术。布局采用XML定义,通过数据绑定将SQLite数据库中的场地信息展示在列表视图中。

使用了SimpleCursorAdapter作为数据适配器,实现了数据库查询结果的动态展示。页面交互方面采用了活动跳转、对话框提示和Toast通知等技术。

数据筛选功能通过组合SQL查询条件实现,体现了Android基础开发技术的综合应用。

3. 页面详细介绍

这是一个运动场地预约系统的首页面,用户可以通过选择场地类型和预约日期来筛选可用场地。页面提供"只看未被预约"的筛选选项,方便用户快速找到可预约资源。

点击筛选按钮后,系统会根据条件查询数据库并实时更新列表显示。每个场地项都包含预约按钮,用户可以直接点击预约,系统会通过对话框确认操作。

页面设计简洁直观,充分考虑了用户预约场地的核心需求和使用场景。

package com.example.SportApp.Home;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.SportApp.MainActivity;
import com.example.SportApp.MyDatabaseHelper;
import com.example.SportApp.R;

public class HomeFragment extends Fragment {

    private MyDatabaseHelper databaseHelper;
    private String filed_date; // 选择的日期
    private String field_name; // 选择的场地
    private int current_user_id; // 当前用户
    private SimpleCursorAdapter adapter;
    private ListView field_listview;
    private SQLiteDatabase db;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        current_user_id = ((MainActivity) context).getCurrentUser();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // 初始化数据库
        databaseHelper = new MyDatabaseHelper(getContext(), "SportDatabase.db", null, 1);
        db = databaseHelper.getWritableDatabase();

        // 初始化视图
        field_listview = view.findViewById(R.id.field_listview);
        TextView date_text = view.findViewById(R.id.date_text);
        TextView field_text = view.findViewById(R.id.field_text);
        CheckBox reserved_checkbox = view.findViewById(R.id.reserved_checkbox);
        Button search_button = view.findViewById(R.id.search_button);

        // 设置初始适配器(显示所有场地)
        refreshListView(null, null, false);

        // 日期选择点击事件
        date_text.setOnClickListener(v ->
                startActivityForResult(new Intent(getActivity(), SelectDate.class), 1));

        // 场地选择点击事件
        field_text.setOnClickListener(v ->
                startActivityForResult(new Intent(getActivity(), SelectField.class), 2));

        // 筛选按钮点击事件
        search_button.setOnClickListener(v -> {
            boolean onlyAvailable = reserved_checkbox.isChecked();
            refreshListView(filed_date, field_name, onlyAvailable);
        });

        // 列表项点击事件
        field_listview.setOnItemClickListener((parent, view1, position, id) -> {
            Cursor cursor = (Cursor) adapter.getItem(position);
            handleReservation(cursor);
        });
    }

    // 刷新列表视图
    private void refreshListView(String date, String name, boolean onlyAvailable) {
        String query;
        if (date == null && name == null) {
            query = "SELECT * FROM field";
        } else {
            query = "SELECT * FROM field WHERE date = '" + date +
                    "' AND field_name = '" + name + "'";
            if (onlyAvailable) {
                query += " AND reserved = '未被预约'";
            }
        }

        Cursor cursor = db.rawQuery(query, null);

        adapter = new SimpleCursorAdapter(
                getContext(),
                R.layout.reservation_item,
                cursor,
                new String[]{"_id", "field_name", "date", "time", "reserved"},
                new int[]{R.id.field_id, R.id.field_name, R.id.date, R.id.time, R.id.reserved},
                0
        ) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view = super.getView(position, convertView, parent);

                // 设置预约按钮点击事件
                Button reserveButton = view.findViewById(R.id.reserve_button);
                reserveButton.setOnClickListener(v -> {
                    Cursor cursor = (Cursor) getItem(position);
                    handleReservation(cursor);
                });

                return view;
            }
        };

        field_listview.setAdapter(adapter);
    }

    // 处理预约逻辑
    private void handleReservation(Cursor cursor) {
        int field_id = cursor.getInt(cursor.getColumnIndex("_id"));
        String reserved = cursor.getString(cursor.getColumnIndex("reserved"));

        if (reserved.equals("未被预约")) {
            new AlertDialog.Builder(getContext())
                    .setTitle("是否确认预约")
                    .setPositiveButton("确定", (dialog, which) -> {
                        db.execSQL("UPDATE field SET user_id = '" + current_user_id +
                                "', reserved = '已被预约' WHERE _id = " + field_id);
                        Toast.makeText(getContext(), "预约成功", Toast.LENGTH_SHORT).show();
                        refreshListView(filed_date, field_name, false);
                    })
                    .setNegativeButton("取消", null)
                    .show();
        } else {
            Toast.makeText(getContext(), "该场地已被预约", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data == null) return;

        Bundle bundle = data.getExtras();
        if (bundle == null) return;

        switch (requestCode) {
            case 1: // 日期选择返回
                filed_date = bundle.getString("date_data");
                TextView dateTextView = getView().findViewById(R.id.date_text);
                dateTextView.setText(filed_date);
                break;
            case 2: // 场地选择返回
                field_name = bundle.getString("field_data");
                TextView fieldTextView = getView().findViewById(R.id.field_text);
                fieldTextView.setText(field_name);
                break;
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (db != null) {
            db.close();
        }
    }
}

五、项目源码 

👇👇👇👇👇快捷方式👇👇👇👇👇


网站公告

今日签到

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