基于android的自习室座位预约

博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;

🍅文章末尾获取源码下载方式🍅

源码下载:

https://download.csdn.net/download/u014388322/88524625

目录

一、项目介绍

二、运行环境

三、软件截图

四、部分代码

1:预约教室

2:选择时间

五、更多Android课程设计

六、源码获取


一、项目介绍

1:学生通过学号、年级、专业等信息进行注册,注册后可成为app会员以完成登录并进入管理预约的主界面。

2:预约选座采用自选座位方式:会员可自选自习室座位进行预约座位。预约开始时间为每日7:00-22:00,指定时间内末来确认扫码签订,座位将被释放,同时被记录为违规。

3:选取座位时长最长为4h,可在使用结束前30min内续约,如果该位置后续时段被别的同学预约,可以新预约其他座位。

4:选座后具有主动签退和自动签退两种方式:主动签退即提前离开时用户自行签退,及时释放资源给他人使用。自动签退即到结束时间,系统会自签退。

5:超出预约时间15min还未签到即“违约”,如果违约次数超过3次,7天内将不能使用座位预约功能。

二、运行环境

1:客户端使用Android stuido进行开发;
2:服务端后台使用Myeclipse2014进行开发;
3:mysql数据库进行数据存储;
4:需要jdk1.7以上
5:使用雷电模拟器或者Androidstuio自带的模拟器进行运行

三、软件截图

四、部分代码

1:预约教室


public class RoomMessageActivity extends BaseActivity {
    RoomModel intersetModel;
    // title
    private TextView mTvTitle;
    // 返回
    private ImageView mIvBack;

    private TextView mtv1, mtv2, mtv3, mtv4, mtvMessagetitle;
    private Button mbtnPay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_roommessage);
        initWidget();
        initData();
    }

    @Override
    public void initWidget() {

        mtv1 = (TextView) findViewById(R.id.mtv1);
        mtv2 = (TextView) findViewById(R.id.mtv2);
        mtv3 = (TextView) findViewById(R.id.mtv3);
        mtv4 = (TextView) findViewById(R.id.mtv4);
        mtvMessagetitle = (TextView) findViewById(R.id.mtvMessagetitle);

        mbtnPay = (Button) findViewById(R.id.mbtnPay);
        mbtnPay.setOnClickListener(this);

        mIvBack = (ImageView) findViewById(R.id.mIvBack);
        mTvTitle = (TextView) findViewById(R.id.mTvTitle);
        mTvTitle.setText("自习室详情");
        mIvBack.setVisibility(View.VISIBLE);
        mIvBack.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.mIvBack:
                RoomMessageActivity.this.finish();
                break;

            case R.id.mbtnPay:


                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");// 设置日期格式
                UserModel userModel = (UserModel) MemberUserUtils.getBean(this, "user_messgae");
                if(Integer.valueOf(userModel.getUserNumber())>3){

                    try{
                        CustomToast.showToast(this,"您违规次数已超3次,你可在"+dateDiff(df.format(new Date()),userModel.getUserWGTime(), "yyyy-MM-dd HH:mm")+"后预约");
                    }catch (Exception e){
                        e.printStackTrace();
                    }

                }else{

                    if(isInDate(new Date(),"07:00:00" , "22:00:00")){
                        if (intersetModel.getApplyNumber()==Integer.valueOf(intersetModel.getRoomNumber())) {
                            CustomToast.showToast(this, "此自习室预约人数已满");
                            return;
                        }

                        Intent intent = new Intent(this, PayMessageActivity.class);
                        intent.putExtra("msg",intersetModel);
                        startActivity(intent);
                        finish();
                    }else{
                        CustomToast.showToast(this,"当前时间不可预约哦!");
                    }

                }

                break;

        }
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void initData() {

        intersetModel = (RoomModel) this.getIntent().getSerializableExtra("msg");
        mtvMessagetitle.setText(intersetModel.getRoomName());
        mtv1.setText(intersetModel.getRoomAddress());
        mtv2.setText(intersetModel.getRoomNumber() + "人");
        mtv4.setText("已经预约:"+intersetModel.getApplyNumber()+"/"+intersetModel.getRoomNumber() );


    }

    /**
     * 判断时间是否在时间段内
     *
     * @param date
     *            当前时间 yyyy-MM-dd HH:mm:ss
     * @param strDateBegin
     *            开始时间 00:00:00
     * @param strDateEnd
     *            结束时间 00:05:00
     * @return
     */
    public static boolean isInDate(Date date, String strDateBegin,
                                   String strDateEnd) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = sdf.format(date);
        // 截取当前时间时分秒
        int strDateH = Integer.parseInt(strDate.substring(11, 13));
        int strDateM = Integer.parseInt(strDate.substring(14, 16));
        int strDateS = Integer.parseInt(strDate.substring(17, 19));
        // 截取开始时间时分秒
        int strDateBeginH = Integer.parseInt(strDateBegin.substring(0, 2));
        int strDateBeginM = Integer.parseInt(strDateBegin.substring(3, 5));
        int strDateBeginS = Integer.parseInt(strDateBegin.substring(6, 8));
        // 截取结束时间时分秒
        int strDateEndH = Integer.parseInt(strDateEnd.substring(0, 2));
        int strDateEndM = Integer.parseInt(strDateEnd.substring(3, 5));
        int strDateEndS = Integer.parseInt(strDateEnd.substring(6, 8));
        if ((strDateH >= strDateBeginH && strDateH <= strDateEndH)) {
            // 当前时间小时数在开始时间和结束时间小时数之间
            if (strDateH > strDateBeginH && strDateH < strDateEndH) {
                return true;
                // 当前时间小时数等于开始时间小时数,分钟数在开始和结束之间
            } else if (strDateH == strDateBeginH && strDateM >= strDateBeginM
                    && strDateM <= strDateEndM) {
                return true;
                // 当前时间小时数等于开始时间小时数,分钟数等于开始时间分钟数,秒数在开始和结束之间
            } else if (strDateH == strDateBeginH && strDateM == strDateBeginM
                    && strDateS >= strDateBeginS && strDateS <= strDateEndS) {
                return true;
            }
            // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数小等于结束时间分钟数
            else if (strDateH >= strDateBeginH && strDateH == strDateEndH
                    && strDateM <= strDateEndM) {
                return true;
                // 当前时间小时数大等于开始时间小时数,等于结束时间小时数,分钟数等于结束时间分钟数,秒数小等于结束时间秒数
            } else if (strDateH >= strDateBeginH && strDateH == strDateEndH
                    && strDateM == strDateEndM && strDateS <= strDateEndS) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }


    public static String dateDiff(String startTime, String endTime, String format) throws Exception {
        // 按照传入的格式生成一个simpledateformate对象
        SimpleDateFormat sd = new SimpleDateFormat(format);
        long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
        long nh = 1000 * 60 * 60;// 一小时的毫秒数
        long nm = 1000 * 60;// 一分钟的毫秒数
        long ns = 1000;// 一秒钟的毫秒数
        long diff;
        // 获得两个时间的毫秒时间差异
        diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();
        long day = diff / nd;// 计算差多少天
        long hour = diff % nd / nh;// 计算差多少小时
        long min = diff % nd % nh / nm;// 计算差多少分钟
        long sec = diff % nd % nh % nm / ns;// 计算差多少秒//输出结果
        System.out.println("时间相差:" + day + "天" + hour + "小时" + min + "分钟" + sec + "秒。");
        return day + "天" + hour + "小时" + min + "分钟" + sec + "秒";
    }
}
 

2:选择时间


public class PayMessageActivity extends BaseActivity implements TimePickerDialog.TimePickerDialogInterface {


    // 标题
    private TextView mTvTitle;
    // 返回
    private ImageView mIvBack;
    private TextView mtvPrice;
    private Button mPay;
    private RadioGroup mrdChoice;
    private RadioButton mrbWeiXin = null;
    private RadioButton mrbPay = null;

    private TextView mtvName;

    RoomModel intersetModel;


    private EditText applyTheme;
    private EditText applyPerson;

    private TextView applyStartTime;
    private TextView applyEndTime;


    TimePickerDialog mTimePickerDialog;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay_message);
        initWidget();
        initData();
    }

    private int choiceType = 1;

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.mIvBack:
                finish();
                break;
            case R.id.mPay:

                try {

                    Log.i("pony_log","-------------------");


                    SimpleDateFormat dfChoice = new SimpleDateFormat("HH:mm");// 设置日期格式


                    Date startChoice = dfChoice.parse(applyStartTime.getText().toString());
                    Date endChoice = dfChoice.parse(applyEndTime.getText().toString());


                    String format = "HH:mm";
                    Date startTimeFr = new SimpleDateFormat(format).parse("07:00");
                    Date endTimeFr = new SimpleDateFormat(format).parse("22:00");


                    if (!isEffectiveDate(startChoice,startTimeFr, endTimeFr)) {
                        CustomToast.showToast(this, "时间需在07:00-22:00之间");

                        return;
                    }
                    if (!isEffectiveDate(endChoice, startTimeFr, endTimeFr)) {
                        CustomToast.showToast(this, "时间需在07:00-22:00之间");
                        return;
                    }


                    DateFormat df = new SimpleDateFormat("HH:mm");
                    Date startTime = df.parse(applyStartTime.getText().toString());
                    Date endTime = df.parse(applyEndTime.getText().toString());

                    long diffOne = startTime.getTime();
                    long diffTwo = endTime.getTime();
                    long timeMessage = diffTwo - diffOne;

                    if (timeMessage <= 14400000) {
                        OrderAction(true);
                    } else {
                        CustomToast.showToast(this, "最长预约为4小时,请重新选择时间");
                        return;
                    }
//
//                    Date startTime = df.parse("18:30");
//                    Date endTime = df.parse("20:30");
//
//                    Date choiceTime = df.parse(applyStartTime.getText().toString().substring(11,applyStartTime.getText().toString().length()));
//                    long diffOne = startTime.getTime() - choiceTime.getTime();
//                    long diffTwo = endTime.getTime() - choiceTime.getTime();
//
//                    if (diffOne<=0&&diffTwo>=0) {
//
//                    }else{
//                        CustomToast.showToast(this, "预约期限仅限当日的晚自习时间(18.30-20.30)");
//                        return;
//                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }


                break;

            case R.id.applyStartTime:
                flag = true;
                choiceType = 1;
                mTimePickerDialog.showTimePickerDialog();
                break;
            case R.id.applyEndTime:
                flag = true;
                choiceType = 2;
                mTimePickerDialog.showTimePickerDialog();
                break;

        }
    }

    @Override
    public void initWidget() {

        mTimePickerDialog = new TimePickerDialog(this);


        applyStartTime = (TextView) findViewById(R.id.applyStartTime);
        applyEndTime = (TextView) findViewById(R.id.applyEndTime);
        applyStartTime.setOnClickListener(this);
        applyEndTime.setOnClickListener(this);

        mtvName = (TextView) findViewById(R.id.mtvName);
        mPay = (Button) findViewById(R.id.mPay);
        mtvPrice = (TextView) findViewById(R.id.mtvPrice);
        mIvBack = (ImageView) findViewById(R.id.mIvBack);
        mTvTitle = (TextView) findViewById(R.id.mTvTitle);
        mTvTitle.setText("预约确认");
        mIvBack.setVisibility(View.VISIBLE);
        mIvBack.setOnClickListener(this);
        mPay.setOnClickListener(this);

        applyTheme = (EditText) findViewById(R.id.applyTheme);
        applyPerson = (EditText) findViewById(R.id.applyPerson);


    }

    int timeMgs;

    @Override
    public void initData() {

        intersetModel = (RoomModel) this.getIntent().getSerializableExtra("msg");
        mtvPrice.setText(intersetModel.getRoomName());
        mtvName.setText(intersetModel.getRoomNumber() + "人");


    }

    /**
     * 订单的添加
     *
     * @param isShow
     */
    private void OrderAction(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "addAply");
        params.put("applyMessageId", intersetModel.getRoomId() + "");
        params.put("applyMessageName", intersetModel.getRoomName());
        params.put("applyStartTime", applyStartTime.getText().toString());
        params.put("applyEndTime", applyEndTime.getText().toString());
        params.put("applyUserId", MemberUserUtils.getUid(this));
        params.put("applyUserName", MemberUserUtils.getName(this));
        httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultFlag, isShow, "正在预约...");
    }

    @Override
    protected void callBackSuccess(ResponseEntry entry, int actionId) {
        super.callBackSuccess(entry, actionId);
        ApplyObservable.getInstance().notifyStepChange("ok");
        FaultObservable.getInstance().notifyStepChange("ok");
        CustomToast.showToast(PayMessageActivity.this, entry.getRepMsg() + ",可在我的预约查看");
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                PayMessageActivity.this.finish();
            }
        }, 2000);
    }

    @Override
    protected void callBackAllFailure(String strMsg, int actionId) {
        super.callBackAllFailure(strMsg, actionId);
        CustomToast.showToast(PayMessageActivity.this, strMsg);
    }

    @Override
    public void positiveListener() {
        String year = mTimePickerDialog.getYear() + "";

        String hour = mTimePickerDialog.getHour() + "";
        String minute = mTimePickerDialog.getMinute() + "";
        String month;
        String day;

        if (mTimePickerDialog.getMonth() < 9) {
            month = "0" + (mTimePickerDialog.getMonth());
        } else {
            month = "" + (mTimePickerDialog.getMonth());
        }
        if (mTimePickerDialog.getDay() < 9) {
            day = "0" + (mTimePickerDialog.getDay());
        } else {
            day = "" + (mTimePickerDialog.getDay());
        }
        if (mTimePickerDialog.getMinute() < 9) {
            minute = "0" + (mTimePickerDialog.getMinute());
        } else {
            minute = "" + (mTimePickerDialog.getMinute());
        }

        if (mTimePickerDialog.getHour() < 9) {
            hour = "0" + (mTimePickerDialog.getHour());
        } else {
            hour = "" + (mTimePickerDialog.getHour());
        }
        // giveToTime.setText(year + "-" + month + "-" + day);

        if (choiceType == 1) {
//            if (flag) {
                mTimePickerDialog.showTimePickerDialog();
//                applyStartTime.setText(year + "-" + month + "-" + day);
//            } else {
//                applyStartTime.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute);
//            }

            applyStartTime.setText(hour + ":" + minute);

        } else {
//            if (flag) {
//                mTimePickerDialog.showTimePickerDialog();
//                applyEndTime.setText(year + "-" + month + "-" + day);
//            } else {
//                applyEndTime.setText(year + "-" + month + "-" + day + " " + hour + ":" + minute);
//            }
            applyEndTime.setText(hour + ":" + minute);
        }


        flag = false;

    }

    private boolean flag = true;

    @Override
    public void negativeListener() {
        // TODO Auto-generated method stub

    }

    /**
     * 把毫秒数转换成时分秒
     *
     * @param millis
     * @return
     */
    public static String millisToStringShort(long millis) {
        StringBuilder strBuilder = new StringBuilder();
        long temp = millis;
        long hper = 60 * 60 * 1000;
        long mper = 60 * 1000;
        long sper = 1000;
        if (temp / hper > 0) {
            strBuilder.append(temp / hper).append(":");
        }
        temp = temp % hper;

        if (temp / mper > 0) {
            strBuilder.append(temp / mper);
        }

        return strBuilder.toString();
    }

    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
        if (nowTime.getTime() == startTime.getTime()
                || nowTime.getTime() == endTime.getTime()) {
            return true;
        }

        Calendar date = Calendar.getInstance();
        date.setTime(nowTime);

        Calendar begin = Calendar.getInstance();
        begin.setTime(startTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }
}
 

五、更多Android课程设计

AndroidStudio课程设计-通讯录系统(高分毕设,Android期末作业,Android课设,AndroidStudio资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/u014388322/88063330?spm=1001.2014.3001.5503
AndroidStudio的智慧校园系统(高分毕设,Android期末作业,Android课设)资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/u014388322/88062241?spm=1001.2014.3001.5503
AndroidStudio实现的天气预报系统(高分毕设,Android期末作业,Android课设)_android期末资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/u014388322/87938777?spm=1001.2014.3001.5503
AndroidStudio期末大作业校园快递领取系统(Android课设,新手小白必看)_androidstudio期末大作业资源-CSDN文库icon-default.png?t=N7T8https://download.csdn.net/download/u014388322/87929440?spm=1001.2014.3001.5503

六、源码获取

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android毕业设计源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值