博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的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课程设计
六、源码获取
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻