基于Android的校园外卖系统app

这篇具有很好参考价值的文章主要介绍了基于Android的校园外卖系统app。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

一、项目功能介绍

Android客户端功能描述:

1:登录注册:用户可以通过自己的信息进行账号的注册

2:商家查看:查看发布的外卖商家信息

3:商家详情:用户点击某一个商家之后可以查看商家的地址和联系方式信息

4:外卖分类:用户在点餐的详情页面可以根据分类信息进行美食的选择;

5:订单支付:用户选择完美食之后可以查看自己选择的信息,以及对美食信息进行支付

6:我的订单:用户可以查看自己的订单信息;

7:个人信息:用户登录之后可以查看用户的基本资料以及对密码信息进行修改

后台服务端功能描述:

1:用户管理:可以查看注册的用户信息

2:订单信息:查看用户的订单信息

3:商家信息:添加商家信息以及对商家信息进行查看

二、运行环境

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

三、使用技术

总体设计逻辑和思路:
1:先设计数据库表文件
2:写服务端jsp页面以及写api接口给客户端提供数据
3:完成后台服务端的数据交互,也就是jsp页面数据的存储和显示
4:进行客户端页面的开发;
5:进行客户端对api接口的调用,也就是获取数据库的数据以及在客户端进行显示

移动端:
1:使用android原生控件以及xml布局文件来完成界面的显示
2:使用java代码完成功能的数据和逻辑交互
3:使用http网络请求完成数据的请求;
4:使用json数据解析完成客户端数据的回调和显示

服务端后台:
1:使用mysql完成数据的存储
2:使用jdbc完成数据库和代码的逻辑交互
3:使用jsp完成网页数据的显示
4:使用java代码完成api接口的编写以及以及数据的回调

四、运行截图信息

基于Android的校园外卖系统app

​说明:后台信息管理界面

基于Android的校园外卖系统app

说明:用户登录之后的首页界面,也就是商家的列表界面,点击之后可以查看详情的​信息界面;

基于Android的校园外卖系统app

说明:个人信息界面,可以查看用户的信息,我的订单​,修改密码信息;

基于Android的校园外卖系统app

说明:用点餐界面,用户在此界面可以根据分类点餐,也可以选择美食的数量信息,选择完之后可以进行美食的支付操作;

基于Android的校园外卖系统app

说明:订单信息确认界面;

基于Android的校园外卖系统app

说明:我的订单界面,可以查看自己的历史订单信息;

四、部分代码

1:商家列表


public class StoreFragment extends BaseFragment {

    // 获取view
    private View rootView;
    // 获取控件
    private ListView mListMessage;
    List<TypeModel> list_result = new ArrayList<TypeModel>();
    MaterialRefreshLayout materialRefreshLayout;
    private boolean isPrepared;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_newsload, null);
        isPrepared = true;
//        setlazyLoad();
        initWidget();
        initData();
        return rootView;
    }

    /**
     * 加载数据的方法,只要保证isPrepared和isVisible都为true的时候才往下执行开始加载数据
     */
    @Override
    protected void setlazyLoad() {
        super.setlazyLoad();

        if (!isPrepared || !isVisible) {
            return;
        }
        if (list_result.size() == 0) {
            initWidget();
            initData();
        }
    }
    @Override
    public void initWidget() {

        mListMessage = (ListView) rootView.findViewById(R.id.mListMessage);
        materialRefreshLayout = (MaterialRefreshLayout) rootView.findViewById(R.id.refresh);
        materialRefreshLayout.setLoadMore(false);
        materialRefreshLayout.setMaterialRefreshListener(new MaterialRefreshListener() {
            @Override
            public void onRefresh(final MaterialRefreshLayout materialRefreshLayout) {
                CampusAction(false);
                materialRefreshLayout.finishRefresh();
            }
            @Override
            public void onRefreshLoadMore(MaterialRefreshLayout materialRefreshLayout) {
                //上拉加载更多...
                // 结束上拉刷新...
                materialRefreshLayout.finishRefreshLoadMore();
            }
        });


    }

    @Override
    public void onClick(View v) {

    }

    @Override
    public void initData() {
        CampusAction(true);
        mListMessage.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {

                Intent intent = new Intent(getActivity(), LookStoreActivity.class);
                intent.putExtra("msg",list_result.get(pos));
                startActivity(intent);
            }
        });

    }

    private void CampusAction(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "listTypePhone");
        httpPost(Consts.URL + Consts.APP.FoodAction, params, Consts.actionId.resultCode, isShow, "正在加载...");
    }
    
    
    

    @Override
    protected void callBackSuccess(ResponseEntry entry, int actionId) {
        super.callBackSuccess(entry, actionId);

        switch (actionId) {
        case Consts.actionId.resultCode:
            materialRefreshLayout.finishRefresh();


            if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {

                String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
                if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
                    list_result = mGson.fromJson(entry.getData(), new TypeToken<List<TypeModel>>() {
                    }.getType());
                    StorListAdapter    campusAdapter = new StorListAdapter(getActivity(), list_result);
                    mListMessage.setAdapter(campusAdapter);
                } else {
                }
            }
            break;
        default:
            break;
        }

    }

    @Override
    protected void callBackAllFailure(String strMsg, int actionId) {
        super.callBackAllFailure(strMsg, actionId);
        ToastUtil.show(getActivity(), strMsg);

    }

    
    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

    }


}
 

2:美食列表


public class FoodFragment extends BaseFragment implements FoodAddListner {

    MainModel mainModel;
    private List<FoodModel> listMsgSearch = new ArrayList<FoodModel>();
    // 获取view
    private View rootView;
    // 获取控件
    private ListView mListMessage;

    private ListView mListChoiceMessage;
    private CheckBox mllType;
    private List<TypeModel> list_result_type = new ArrayList<TypeModel>();
    private boolean isPrepared;// 预加载标志

    private TextView mtvFoodNumber;
    private LinearLayout mllGoBuy;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_selected, null);
        isPrepared = true;
        setlazyLoad();
        return rootView;
    }

    /**
     * 加载数据的方法,只要保证isPrepared和isVisible都为true的时候才往下执行开始加载数据
     */
    @Override
    protected void setlazyLoad() {
        super.setlazyLoad();

        if (!isPrepared || !isVisible) {
            return;
        }
        if (listFood.size() == 0) {
            initWidget();
            initData();
        }
    }

    @Override
    public void initWidget() {
        mListChoiceMessage = (ListView) rootView.findViewById(R.id.mListChoiceMessage);
        mllType = (CheckBox) rootView.findViewById(R.id.mllType);
        mListMessage = (ListView) rootView.findViewById(R.id.mListMessage);
        mtvFoodNumber = (TextView) rootView.findViewById(R.id.mtvFoodNumber);

        mllGoBuy = (LinearLayout) rootView.findViewById(R.id.mllGoBuy);

        mllGoBuy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getActivity(),PayMessageActivity.class);
                intent.putExtra("msg",(Serializable) list_result_choice);
                intent.putExtra("payMoney",shopMoneyPrice+"");
                getActivity().startActivity(intent);
            }
        });

    }

    @Override
    public void onClick(View v) {


    }


    @Override
    public void initData() {

        TypeModel type = new TypeModel();

        type.setTypeId("-1");
        type.setTypeId("-1");
        type.setTypeId("-1");


        mllType.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton arg0, boolean arg1) {

                ChoiceMessageAdapter choiceMessageAdapter = new ChoiceMessageAdapter(getActivity(), list_result_type);
                mListChoiceMessage.setAdapter(choiceMessageAdapter);

                if (arg1) {
                    mListChoiceMessage.setVisibility(View.VISIBLE);
                } else {
                    mListChoiceMessage.setVisibility(View.GONE);
                }
            }
        });

        listPhoneMessage(false);
    }


    private void listPhoneMessage(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "listPhoneMessage");
        httpPost(Consts.URL + Consts.APP.FoodAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
    }

    private List<FoodModel> listFood = new ArrayList<FoodModel>();
    FoodChocieListAdapter lookListAdapter;
    @Override
    protected void callBackSuccess(ResponseEntry entry, int actionId) {
        super.callBackSuccess(entry, actionId);

        switch (actionId) {
            case Consts.actionId.resultFlag:
                if (null != entry.getData() && !TextUtils.isEmpty(entry.getData())) {

                    String jsonMsg = entry.getData().substring(1, entry.getData().length() - 1);
                    if (null != jsonMsg && !TextUtils.isEmpty(jsonMsg)) {
                        mainModel = mGson.fromJson(entry.getData(), MainModel.class);
                        list_result_type = mainModel.getFlagTop();
                        listFood = mainModel.getFlagFood();
                        lookListAdapter= new FoodChocieListAdapter(getActivity(), listFood, this);
                        mListMessage.setAdapter(lookListAdapter);
                    }
                }
                break;


        }

    }

    @Override
    protected void callBackAllFailure(String strMsg, int actionId) {
        super.callBackAllFailure(strMsg, actionId);
        ToastUtil.show(getActivity(), strMsg);

    }


    private FoodModel foodModelAdapter;


    @Override
    public void setJian(int pos, FoodModel carModel) {
        Log.i("pony_log:", pos + "");
        carModel.setTotalNumber(carModel.getTotalNumber() - 1);
        listFood.set(pos, carModel);
        lookListAdapter.notifyDataSetChanged();
        TotalMoney();
    }

    @Override
    public void setJia(int pos, FoodModel carModel) {
        Log.i("pony_log:", pos + "");
        carModel.setTotalNumber(carModel.getTotalNumber() + 1);
        listFood.set(pos, carModel);
        lookListAdapter.notifyDataSetChanged();
        TotalMoney();
    }
    private List<FoodModel> list_result_choice = new ArrayList<FoodModel>();

    Double shopMoneyPrice ;
    private void TotalMoney() {
        shopMoneyPrice = 0.0;
        list_result_choice.clear();
        for (int i = 0; i < listFood.size(); i++) {
            shopMoneyPrice = shopMoneyPrice + (Double.valueOf(listFood.get(i).getfMoney()) * listFood.get(i).getTotalNumber());
            if (listFood.get(i).getTotalNumber()>0) {
                list_result_choice.add(listFood.get(i));
            }
        }
        mtvFoodNumber.setText(shopMoneyPrice + "元");
    }
}
 

五、数据库设计

/*
Navicat MySQL Data Transfer

Source Server         : mydata
Source Server Version : 50528
Source Host           : localhost:3306
Source Database       : takeaway

Target Server Type    : MYSQL
Target Server Version : 50528
File Encoding         : 65001

Date: 2023-02-23 16:24:17
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for classifytb
-- ----------------------------
DROP TABLE IF EXISTS `classifytb`;
CREATE TABLE `classifytb` (
  `classifyId` int(11) NOT NULL AUTO_INCREMENT,
  `classifyTypeId` int(11) DEFAULT NULL,
  `classifyName` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`classifyId`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of classifytb
-- ----------------------------
INSERT INTO `classifytb` VALUES ('1', '15', '人气必买');
INSERT INTO `classifytb` VALUES ('2', '15', '清爽果茶');
INSERT INTO `classifytb` VALUES ('3', '15', '现煮奶茶');
INSERT INTO `classifytb` VALUES ('4', '15', '零食小吃');
INSERT INTO `classifytb` VALUES ('5', '15', '大单划算');

-- ----------------------------
-- Table structure for foodmsg
-- ----------------------------
DROP TABLE IF EXISTS `foodmsg`;
CREATE TABLE `foodmsg` (
  `fid` int(50) NOT NULL AUTO_INCREMENT,
  `fTitle` varchar(100) NOT NULL,
  `fTyeId` varchar(100) DEFAULT NULL,
  `fTyeName` varchar(255) DEFAULT NULL,
  `fMoney` varchar(255) DEFAULT NULL,
  `fTopState` varchar(255) DEFAULT NULL,
  `fImage` varchar(100) NOT NULL,
  `fStoreId` int(11) DEFAULT NULL,
  PRIMARY KEY (`fid`)
) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of foodmsg
-- ----------------------------

-- ----------------------------
-- Table structure for ordertb
-- ----------------------------
DROP TABLE IF EXISTS `ordertb`;
CREATE TABLE `ordertb` (
  `orderId` int(11) NOT NULL AUTO_INCREMENT,
  `orderMessageId` varchar(255) DEFAULT NULL,
  `orderMessageInfor` varchar(255) DEFAULT NULL,
  `orderMessageMoney` varchar(255) DEFAULT NULL,
  `tableMessage` varchar(255) DEFAULT NULL,
  `orderUserId` varchar(11) DEFAULT NULL,
  `orderUserName` varchar(255) DEFAULT NULL,
  `orderTime` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`orderId`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of ordertb
-- ----------------------------


-- ----------------------------
-- Table structure for typemsg
-- ----------------------------
DROP TABLE IF EXISTS `typemsg`;
CREATE TABLE `typemsg` (
  `typeId` int(50) NOT NULL AUTO_INCREMENT,
  `typeName` varchar(255) DEFAULT NULL,
  `typePhone` varchar(100) DEFAULT NULL,
  `typeAddress` varchar(255) DEFAULT NULL,
  `typeImage` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`typeId`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of typemsg
-- ----------------------------

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `uid` int(50) NOT NULL AUTO_INCREMENT,
  `uname` varchar(100) NOT NULL,
  `uphone` varchar(100) NOT NULL,
  `upswd` varchar(100) NOT NULL,
  `utime` varchar(100) NOT NULL,
  `uaddress` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
 

 六、浏览更多Android毕业设计

毕业设计-基于android的租房信息发布平台的APP_信息发布app源码_Android毕业设计源码的博客-CSDN博客

毕业设计-基于android选课系统的设计与实现_android学生选课系统_Android毕业设计源码的博客-CSDN博客

毕业设计之校园一卡通管理系统的设计与实现_一卡通管理系统实现_Android毕业设计源码的博客-CSDN博客

基于Android的校园二手闲置物品交易系统设计与实现_基于android的二手交易平台_Android毕业设计源码的博客-CSDN博客

基于androidstudio校园快递APP系统的设计与实现_android studio论文_Android毕业设计源码的博客-CSDN博客

基于android的商城购物定制APP_安卓开发购物app_Android毕业设计源码的博客-CSDN博客

 七、下载源码

https://download.csdn.net/download/u014388322/88150982​​​​​​​文章来源地址https://www.toymoban.com/news/detail-460069.html

到了这里,关于基于Android的校园外卖系统app的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot基于微信小程序的校园外卖系统设计与实现-附源码091024

    随着生活质量的日益改善以及生活节奏的日益加快,人们对餐饮需求的质量以及速度也随之发生着变化。为了满足社会需求,餐饮的高质量和快节奏也渐渐使电话订餐和网上订餐业日益发展壮大。这也促使了以大学生为主的校园外卖业的发展。校园外卖主要是以大学生为主的

    2024年02月19日
    浏览(20)
  • (附源码)springboot基于微信小程序的校园外卖系统 毕业设计091024

    Springboot基于微信小程序的校园外卖系统 摘要 随着生活质量的日益改善以及生活节奏的日益加快,人们对餐饮需求的质量以及速度也随之发生着变化。为了满足社会需求,餐饮的高质量和快节奏也渐渐使电话订餐和网上订餐业日益发展壮大。这也促使了以大学生为主的校园外

    2024年02月08日
    浏览(31)
  • springboot基于微信小程序的校园外卖系统 毕业设计-附源码091024

    Springboot基于微信小程序的校园外卖系统 摘要 随着生活质量的日益改善以及生活节奏的日益加快,人们对餐饮需求的质量以及速度也随之发生着变化。为了满足社会需求,餐饮的高质量和快节奏也渐渐使电话订餐和网上订餐业日益发展壮大。这也促使了以大学生为主的校园外

    2024年02月09日
    浏览(21)
  • 基于Django高校学校校园在线外卖订餐系统设计与实现(Pycharm+Python+Mysql)

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。 项目配有对应开发文档、

    2024年03月19日
    浏览(31)
  • 基于Android studio的校园小助手app设计

    基于Android的校园小助手系统设计,包含如下主要功能: 校园资讯 校园天气(和风天气api) 外出申请 我的记账本 课程表 考试安排 基于Android studio的校园小助手系统设计

    2024年02月11日
    浏览(24)
  • 基于android校园新闻APP开发的设计与实现

    目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 研究背景 1 1.2 研究意义 1 1.3研究现状 1 1.4设计思路及内容 2 第二章 系统开发环境及相关技术 3 2.1开发环境 3 2.2 Java SDK 3 2.3 Eclipse 3 2.4 ADT 3 2.5 Android SDK 4 2.6 JSP技术 7 2.7 JSON 8 2.8JDBC技术 8 第三章 系统分析 9 3.1 研究目标 9 3.2 需求分析 9 3

    2024年02月09日
    浏览(16)
  • 基于androidstudio校园快递APP系统的设计与实现

    源码下载: https://download.csdn.net/download/u014388322/87473523 1.课题背景及研究的目的和意义 1.1 课题背景 在其发展速度可谓一日千里的电子商务时代,大学生群体已成为网络购物群体中不可或缺的一部分。因此,高校师生对网购的需求也愈来愈强烈,校园快递的问题也成为了焦点,

    2023年04月24日
    浏览(16)
  • python+vue 校园外卖管理系统

    大学生通常在学校食堂进餐,但是由于食堂的菜品单一,所以很多学生通过网络叫外卖满足个人的饮食喜好。外卖订餐网主要是面向高校的大学生用户,通过外卖的形式,在线订餐,在线查看菜品等信息。系统采用了django/flask框架技术开发,利用mysql数据库进行数据的管理,

    2023年04月15日
    浏览(17)
  • 基于微信小程序的校园外卖平台设计与实现

    博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 2022-2024年最全的计算机软件毕业设计选

    2024年02月22日
    浏览(22)
  • 基于微信小程序的校园外卖平台(源码+文档+包运行)

    毕设帮助、技术解答、源码交流 联系方式见文末。 本文介绍了校园外卖平台的开发全过程。通过分析校园外卖平台管理的不足,创建了一个计算机管理校园外卖平台的方案。文章介绍了校园外卖平台的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设

    2024年01月17日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包