源码分享-基于android移动端的校内二手交易平台

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

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

一、项目介绍

1.二手物品资源管理功能    
   老师、学生均可以在平台发布想要售卖的物品,并配上实物图片、价格及相关描述。
   老师学生均可以在平台上选择想要购买的物品,然后留言卖家进行购买
2.留言沟通模块。
   买家可以在卖家的物品下留言,进行协商。
   卖家可以在自己物品的留言上进行回复,与买家协商。
3.二手物品信息管理模块
   卖家能够在物品卖出后,标明物品已售出,以后不会再显示
   卖家可以随时调整物体的价格、图片、相关描述。
4.物品分类搜索模块
   所有发布售卖的物品,都要由卖家进行归类,买家可以在分类中寻找或者搜索相关描述进行寻找。
5. 用户登录验证模块
  老师或学生在注册时进行身份验证,上传工作证或学生证,由后台人工验证。

二、运行环境

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接口的编写以及以及数据的回调

四、数据库设计

/*
Navicat MySQL Data Transfer

Source Server         : mysql
Source Server Version : 50537
Source Host           : localhost:3306
Source Database       : shoppingdb

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

Date: 2017-03-27 18:08:40
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `category`
-- ----------------------------
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (
  `cgId` int(50) NOT NULL AUTO_INCREMENT,
  `cgName` varchar(100) NOT NULL,
  PRIMARY KEY (`cgId`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of category
-- ----------------------------
INSERT INTO `category` VALUES ('10', '衣服');
INSERT INTO `category` VALUES ('11', '电脑');
INSERT INTO `category` VALUES ('12', '书籍');
INSERT INTO `category` VALUES ('13', '生活用品');

-- ----------------------------
-- Table structure for `collect`
-- ----------------------------
DROP TABLE IF EXISTS `collect`;
CREATE TABLE `collect` (
  `cId` int(50) NOT NULL AUTO_INCREMENT,
  `cUserId` varchar(100) NOT NULL,
  `cUserName` varchar(100) NOT NULL,
  `cShopId` varchar(50) NOT NULL,
  PRIMARY KEY (`cId`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of collect
-- ----------------------------
INSERT INTO `collect` VALUES ('24', '19', 'pony1028', '14');
INSERT INTO `collect` VALUES ('25', '19', 'pony1028', '15');
INSERT INTO `collect` VALUES ('26', '19', 'pony1028', '7');

-- ----------------------------
-- Table structure for `review`
-- ----------------------------
DROP TABLE IF EXISTS `review`;
CREATE TABLE `review` (
  `rid` int(50) NOT NULL AUTO_INCREMENT,
  `rUserId` varchar(50) NOT NULL,
  `rUserName` varchar(100) NOT NULL,
  `rShopId` varchar(100) NOT NULL,
  `rReviewContent` varchar(300) NOT NULL,
  `rReplyContent` varchar(300) DEFAULT NULL,
  `rCreatime` varchar(100) NOT NULL,
  PRIMARY KEY (`rid`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of review
-- ----------------------------
INSERT INTO `review` VALUES ('16', '3', 'Pony', '4', '谢谢王医生的祝福', '新的一年要开心哦', '2017-02-06 15:33');
INSERT INTO `review` VALUES ('17', '19', 'pony1028', '7', '哟哟哟', '', '2017-03-02 10:11');
INSERT INTO `review` VALUES ('18', '19', 'pony1028', '7', '我哦哟', '', '2017-03-02 10:12');
INSERT INTO `review` VALUES ('19', '19', 'pony1028', '7', '我的购买', '', '2017-03-02 10:15');
INSERT INTO `review` VALUES ('20', '19', 'pony1028', '7', '我的购买我的', '', '2017-03-02 10:49');
INSERT INTO `review` VALUES ('21', '19', 'pony1028回复pony1028', '7', '', '', '2017-03-02 11:18');
INSERT INTO `review` VALUES ('22', '19', 'pony1028回复pony1028', '7', '', '', '2017-03-02 11:18');
INSERT INTO `review` VALUES ('23', '19', 'pony1028回复pony1028', '7', '我的测试', '', '2017-03-02 11:39');
INSERT INTO `review` VALUES ('24', '19', 'pony1028', '5', '一年又一年', '', '2017-03-02 11:40');
INSERT INTO `review` VALUES ('25', '19', 'pony1028回复pony1028', '5', '我哦的', '', '2017-03-02 11:40');
INSERT INTO `review` VALUES ('26', '23', 'ponylove', '10', '我喜欢', '', '2017-03-03 09:19');
INSERT INTO `review` VALUES ('27', '23', 'ponylove', '6', '哟哟dadadada', '', '2017-03-03 09:28');
INSERT INTO `review` VALUES ('28', '18', 'pony', '6', '我的数据', '', '2017-03-03 10:20');
INSERT INTO `review` VALUES ('29', '26', 'tom', '10', '我的评论', '', '2017-03-03 15:08');
INSERT INTO `review` VALUES ('30', '26', 'tom回复ponylove', '10', '我对你的回复', '', '2017-03-03 15:08');

-- ----------------------------
-- Table structure for `shop`
-- ----------------------------
DROP TABLE IF EXISTS `shop`;
CREATE TABLE `shop` (
  `sId` int(50) NOT NULL AUTO_INCREMENT,
  `sName` varchar(100) NOT NULL,
  `sMoney` varchar(100) NOT NULL,
  `sPhone` varchar(100) NOT NULL,
  `sMessage` varchar(100) NOT NULL,
  `sImage` varchar(500) NOT NULL,
  `sCreatime` varchar(100) NOT NULL,
  `userId` varchar(100) NOT NULL,
  `sState` varchar(50) NOT NULL,
  `sPayUsererId` varchar(50) DEFAULT NULL,
  `sPayUserName` varchar(100) DEFAULT NULL,
  `sCategory` varchar(100) NOT NULL,
  PRIMARY KEY (`sId`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of shop
-- ----------------------------
INSERT INTO `shop` VALUES ('5', '手机', '5000', '15249243002', '我的产品', '20170227180957.jpg,40a4121a0de1035497dd5b1be5e22408.jpg,8d4e394f7a78fe67633038484d32bfee.jpg,f0003cffb54179d88bb7067b1359c88c.jpg', '08:42', '19', '1', '', null, '10');
INSERT INTO `shop` VALUES ('6', '电脑', '6000', '1524243002', '哦用', '8d4e394f7a78fe67633038484d32bfee.jpg,f0003cffb54179d88bb7067b1359c88c.jpg', '08:47', '19', '2', '23', 'ponylove', '11');
INSERT INTO `shop` VALUES ('7', '房子', '5000', '15249243002', '摸摸摸', 'a6b530da80a8cc6a64464104d43c0274.jpg,mmexport1488441286592.jpg', '09:15', '19', '1', '', null, '10');
INSERT INTO `shop` VALUES ('10', '测试产品', '600', '15249243002', '哟哟哟', '20170227173507.jpg,20170227175206.jpg,20170227180710.jpg,20170227180957.jpg,8d4e394f7a78fe67633038484d32bfee.jpg,f0003cffb54179d88bb7067b1359c88c.jpg,20170301_020341.jpg,S70302-101551.jpg', '08:43', '19', '2', '26', 'tom', '13');
INSERT INTO `shop` VALUES ('11', '书记', '66', '15249243002', '喔喔喔', '20170226_095040.jpg,S70226-102427.jpg,44f13dad3384161f4086589a871401b1.jpg', '09:19', '23', '1', '', null, '12');
INSERT INTO `shop` VALUES ('12', '我的手机', '666', '15249243002', '哟哟哟', 'mmexport1488441286592.jpg', '10:49', '19', '1', null, null, '12');
INSERT INTO `shop` VALUES ('13', '我的电脑最好了', '5000', '15249428888', '这个是我的电脑', 'Screenshot_2017-03-03-15-03-17.png,Screenshot_2017-03-03-15-03-21.png,Screenshot_2017-03-03-15-03-48.png,Screenshot_2017-03-03-15-03-56.png', '15:07', '26', '1', null, null, '13');
INSERT INTO `shop` VALUES ('14', '我Mook', '666', '55555', '他们', 'S70327-153418.jpg', '16:09', '19', '1', null, null, '11');
INSERT INTO `shop` VALUES ('15', '衣服', '5555', '1525', '拉拉裤', '2e968922b717a4543d287479386c32d3.jpg,e449da8d8f54be75106341d1584853be.jpg,f41966d0cb59480e91103566df404564.jpg,cd4f86adddf369a6c7b3132907e5b7dd.jpg,aba4fbde71bc71cf8e48607c31be1da4.jpg,5df8d69b7208661a13e5fe00df88920a.jpg,6ef00a11682c3f09c318432a3d1fef66.jpg,8681bb0e575090cd82e00d26d443ac2c.jpg', '16:10', '19', '1', null, null, '12');

-- ----------------------------
-- 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,
  `utype` varchar(50) NOT NULL,
  `adminState` varchar(50) NOT NULL,
  `uimage` varchar(500) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('18', 'pony', '15249243', '123456', '2017-02-28 23:11', '1', '2', '');
INSERT INTO `user` VALUES ('19', 'pony1028', '15249243002', '123456', '2017-02-28 23:12', '2', '2', '');
INSERT INTO `user` VALUES ('23', 'ponylove', '15249248989', '123456', '2017-03-02 17:27', '1', '2', 'f0003cffb54179d88bb7067b1359c88c.jpg,a6b530da80a8cc6a64464104d43c0274.jpg');
INSERT INTO `user` VALUES ('25', 'ay', '15249245656', '123456', '2017-03-03 08:46', '1', '3', 'mmexport1488441286592.jpg');
INSERT INTO `user` VALUES ('26', 'tom', '15249242323', '123456', '2017-03-03 15:06', '2', '2', 'Screenshot_2017-03-03-15-03-21.png,Screenshot_2017-03-03-15-03-56.png');
 

五、部分代码

1:创建图书


public class CreateShoppingActivity extends BaseActivity {

    // title
    private TextView mTvTitle;
    // 返回
    private ImageView mIvBack;
    // 查询按钮
    private Button mbtnAdd;

    private EditText metMoney;
    private EditText metName;
    private EditText metMessage;
    private EditText metPhone;


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

    @Override
    public void initWidget() {


        metPhone = (EditText) findViewById(R.id.metPhone);
        metMessage = (EditText) findViewById(R.id.metMessage);
        metMoney = (EditText) findViewById(R.id.metMoney);
        metName = (EditText) findViewById(R.id.metName);

        mbtnAdd = (Button) findViewById(R.id.mbtnAdd);
        mIvBack = (ImageView) findViewById(R.id.mIvBack);
        mTvTitle = (TextView) findViewById(R.id.mTvTitle);
        mTvTitle.setText("添加产品");
        mIvBack.setVisibility(View.VISIBLE);
        mIvBack.setOnClickListener(this);
        mbtnAdd.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

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

        case R.id.mbtnAdd:
            JobAction(true);
            break;
        }
    }

    @Override
    public void initData() {


    }

    /**
     * 用户的登录
     * 
     * @param isShow
     */
    private void JobAction(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "addMessage");
        params.put("sName", metName.getText().toString());
        params.put("sMoney", metMoney.getText().toString());
        params.put("sPhone",metPhone.getText().toString());
        params.put("sMessage",metMessage.getText().toString());
        params.put("userId",MemberUserUtils.getUid(this));
        httpPost(Consts.URL + Consts.APP.ShopAction, params, Consts.actionId.resultFlag, isShow, "正在提交...");
    }

    @Override
    protected void callBackSuccess(ResponseEntry entry, int actionId) {
        super.callBackSuccess(entry, actionId);
        
        ToastUtil.show(CreateShoppingActivity.this, entry.getRepMsg());
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                CreateShoppingActivity.this.finish();
            }
        }, 1000);
    }

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

    }

}
 

2:商品详情


public class ShopMessageActivity extends BaseActivity implements ReviewListner {

    // 标题
    private TextView mTvTitle;
    // 返回
    private ImageView mIvBack;
    private TextView mIvStu;
    private TextView mtvMoney;
    private TextView mtvPhone;
    private TextView mtvName;
    private TextView metMessage;
    private ListviewForScrollView mListMessage;
    private ShopModel shopModel;
    private EditText metContent;
    private Button mbtnSend;
    private int checkFlag = 1;
    private String userName;
    private List<ImageView> views = new ArrayList<ImageView>();
    private List<SelectImageItem> infos = new ArrayList<SelectImageItem>();
    private CycleViewPager cycleViewPager;

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

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.mIvBack:
            finish();
            break;
        case R.id.mbtnSend:
            
            if (MemberUserUtils.getUid(this).equals("")) {
                Intent intent = new Intent(this, LoginActivity.class);
                startActivity(intent);
            } else {
                if (TextUtils.isEmpty(metContent.getText().toString())) {
                    ToastUtil.ShowCentre(this, "请输入评论内容");
                    return;
                }
                hideSoft(this, metContent);
                if (checkFlag == 1) {
                    ReviewAction(true);
                } else {
                    ReplyAction(true, userName);
                }
            }

            break;
        case R.id.mIvStu:
            
            if (shopModel.getColectState().equals("true")) {
                deleteCollect(true, shopModel);
            } else {
                collectMsg(true);
            }
            
            break;
        }
    }

    @Override
    public void initWidget() {
        
        
        mIvStu = (TextView) findViewById(R.id.mIvStu);
        mIvStu.setText("收藏");
        mIvStu.setVisibility(View.VISIBLE);
        mIvStu.setOnClickListener(this);
        mbtnSend = (Button) findViewById(R.id.mbtnSend);
        metMessage = (TextView) findViewById(R.id.metMessage);
        mtvName = (TextView) findViewById(R.id.mtvName);
        mtvMoney = (TextView) findViewById(R.id.mtvMoney);
        mtvPhone = (TextView) findViewById(R.id.mtvPhone);

        mListMessage = (ListviewForScrollView) findViewById(R.id.mListMessage);
        mIvBack = (ImageView) findViewById(R.id.mIvBack);
        mTvTitle = (TextView) findViewById(R.id.mTvTitle);
        metContent = (EditText) findViewById(R.id.metContent);

        cycleViewPager = (CycleViewPager) getFragmentManager().findFragmentById(R.id.fragment_shop_image);

        mIvBack.setVisibility(View.VISIBLE);
        mIvBack.setOnClickListener(this);
        mbtnSend.setOnClickListener(this);
        mTvTitle.setText("商品详情");

    }

    @Override
    public void initData() {

        try {
            shopModel = (ShopModel) this.getIntent().getSerializableExtra("msg");
            mtvName.setText(shopModel.getsName());
            mtvMoney.setText(shopModel.getsMoney());
            mtvPhone.setText(shopModel.getsPhone());
            metMessage.setText(shopModel.getsMessage());
            

            if (shopModel.getColectState().equals("true")) {
                mIvStu.setText("已收藏");
            } else {
                mIvStu.setText("收藏");
            }
            
            

            for (int i = 0; i < shopModel.getsImage().split(",").length; i++) {
                SelectImageItem info = new SelectImageItem();
                info.setUrl(Consts.URL_IMAGE + shopModel.getsImage().split(",")[i]);
                info.setSid(i);
                infos.add(info);
            }

            // 将最后一个ImageView添加进来
            views.add(ViewFactory.getImageView(this, infos.get(infos.size() - 1).getUrl()));
            for (int i = 0; i < infos.size(); i++) {
                views.add(ViewFactory.getImageView(this, infos.get(i).getUrl()));
            }
            // 将第一个ImageView添加进来
            views.add(ViewFactory.getImageView(this, infos.get(0).getUrl()));

            // 设置循环,在调用setData方法前调用
            cycleViewPager.setCycle(true);

            // 在加载数据前设置是否循环
            cycleViewPager.setData(views, infos, mAdCycleViewListener);
            // 设置轮播
            cycleViewPager.setWheel(true);

            // 设置轮播时间,默认5000ms
            cycleViewPager.setTime(2000);
            // 设置圆点指示图标组居中显示,默认靠右
            cycleViewPager.setIndicatorCenter();

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

    private void ReviewAction(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "addMessage");
        params.put("rUserId", MemberUserUtils.getUid(this));
        params.put("rUserName", MemberUserUtils.getName(this));
        params.put("rShopId", shopModel.getsId());
        params.put("rReviewContent", metContent.getText().toString());
        params.put("rReplyContent", "");

        httpPost(Consts.URL + Consts.APP.ReviewAction, params, Consts.actionId.resultCode, isShow, "正在提交...");
    }

    private void ListNoticesMessage(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "listNoticesMessage");
        params.put("rNewsId", shopModel.getsId());
        httpPost(Consts.URL + Consts.APP.ReviewAction, params, Consts.actionId.resultFlag, isShow, "正在提交...");
    }

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

        switch (actionId) {

        case Consts.actionId.resultCode:
            metContent.setText("");
            ListNoticesMessage(false);
            break;
        case Consts.actionId.resultFlag:
            List<ReviewModel> list_result = mGson.fromJson(entry.getData(), new TypeToken<List<ReviewModel>>() {
            }.getType());

            ReplyAdapter replyAdapter = new ReplyAdapter(ShopMessageActivity.this, list_result, ShopMessageActivity.this);
            mListMessage.setAdapter(replyAdapter);

            break;
        case Consts.actionId.resultSix:
            shopModel.setColectState("true");
            mIvStu.setText("已收藏");
            ToastUtil.show(this, entry.getRepMsg());
            break;

        case Consts.actionId.resultSeven:
            shopModel.setColectState("false");
            mIvStu.setText("收藏");

            ToastUtil.show(this, entry.getRepMsg());
            break;
            
        default:
            break;
        }

    }

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

    }

    private ImageCycleViewListener mAdCycleViewListener = new ImageCycleViewListener() {

        @Override
        public void onImageClick(SelectImageItem info, int position, View imageView) {
            if (cycleViewPager.isCycle()) {
                position = position - 1;
                Intent intentPicture = new Intent(ShopMessageActivity.this, ShowCreatePicturesActivity.class);
                intentPicture.putExtra("flagMyShop", "myShop");
                intentPicture.putExtra("piction_path", (Serializable) infos);
                // intentPicture.putExtra("modelMessage", list_result.get(pos));
                startActivityForResult(intentPicture, 6);
//                Toast.makeText(ShopMessageActivity.this, "position-->" + info.getContent(), Toast.LENGTH_SHORT).show();
            }

        }

    };

    /*
     * 隐藏软键盘
     */
    public void hideSoft(Context context, EditText edittext) {
        try {
            if (edittext != null && context != null) {
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void setRemove(int pos, ReviewModel reviewModel) {
        userName = reviewModel.getrUserName() ;
        metContent.setHint("回复:" + reviewModel.getrUserName());
        checkFlag = 2;

    }

    private void ReplyAction(boolean isShow, String userName) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "addMessage");
        params.put("rUserId", MemberUserUtils.getUid(this));
        params.put("rUserName", MemberUserUtils.getName(this) + "回复" + userName);
        params.put("rShopId", shopModel.getsId());
        params.put("rReviewContent", metContent.getText().toString());
        params.put("rReplyContent", "");
        httpPost(Consts.URL + Consts.APP.ReviewAction, params, Consts.actionId.resultCode, isShow, "正在提交...");
    }
    private void collectMsg(boolean isShow) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "collectMsg");
        params.put("cUserId", MemberUserUtils.getUid(this));
        params.put("cUserName", MemberUserUtils.getName(this));
        params.put("cShopId", shopModel.getsId());
        httpPost(Consts.URL + Consts.APP.ShopAction, params, Consts.actionId.resultSix, isShow, "正在加载...");
    }

    private void deleteCollect(boolean isShow, ShopModel shopModel) {
        AjaxParams params = new AjaxParams();
        params.put("action_flag", "deleteCollect");
        params.put("cShopId",shopModel.getsId());
        params.put("cUserId", MemberUserUtils.getUid(this));
        httpPost(Consts.URL + Consts.APP.ShopAction, params, Consts.actionId.resultSeven, isShow, "正在加载...");
    }
}
 

六、浏览更多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/87437406

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Android毕业设计源码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值