uml电子商城项目

博主分享了自己在两周内完成的Android电子商城项目,包括首页、商品详情、评论、登录、购物车和结算等模块。项目中实现了商品图片的异步加载,并处理了高分辨率图片可能导致的内存溢出问题。此外,还讨论了界面设计和功能实现,以及编码过程中的思考和改进。代码部分将逐步分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

正如上次所说,最近两个星期在做一个Android端关于电子商城的项目。在各种繁忙的学业和平时的琐事中抽出两个星期,写了一个还不是非常完善的电子商城项目,算是对前面所学的Android基础知识一次综合运用吧,对我个人而言,也是一次大的总结。正好过完这个小时就双11了,好了,废话不多说,先上图吧。

实际效果图

这是第一个fragment图这里写图片描述这里写图片描述这里写图片描述
首页点进去每一个对应栏目会有相应的详情列表
这里写图片描述
对应的每个商品详情页,图片都是从服务器异步加载过来的,当然这一张张图全是楼主精心的去天猫上抠来的图,可谓是心血之作。
这里写图片描述
这里商品大图页是可以滑动浏览的,当然这边其实很简单,一个viewPager和适配器适配一下网络传过来的图片数据就好了。不过这中间要注意的是,由于抠来的图都是清晰度非常高的,也就是说不经过相应的处理很容易造成内存溢出的困境,所以我们会有相应的处理。这些以后再说,然后是详情页fragment
这里写图片描述
还有评论页,这里因为数据都是我加的,是在懒得打评论,所以基本上没有几个商品有评论,但评论确实都可以加载和展示这一点是没问题的这里写图片描述
这是登录界面,这里有个动画效果是参照别人的写出来的,就是每当焦距从用户栏切到密码栏会有相应的捂脸动作表示不看密码的意思,这里自我感觉也是蛮有趣的这里写图片描述
然后这里是购物车,那个圆点按钮也感觉蛮好的,花了大概半个小时,但觉得还是蛮不错的,这里的每次增加减少都会保存到数据库中,当然我感觉这种方式不太好,我的想法是,当用户点击增加或减少按钮的时候会有一个按钮和edittext弹出来,并且遮住那个数量,当用户更改完成后点击确认更改再确认更改数据,这样容错率会更高一点。不过由于时间比较赶,也就没有做过多的改动了,而且目前增删反应也很流畅,当数量为1
时继续-就会从购物车移除了,点击结算按钮就会跳到相应的结算界面
这里写图片描述
这个界面也可以在商品详情页的点击购买跳转过来,这里会显示出商品的总价格,由于支付宝支付接口没有时间调用了,而且还要涉及到签约什么的问题,这里我是直接给了一个用户余额,足够则会购买成功,否则会他出看看,随随便便6k多,哎~可是楼主其实不是土豪呀~但拿来装逼还是可以用的,吞云吐雾,不就是钱嘛~买!
当然,结果往往事与愿违啊这里写图片描述
好啦,我还是收回一下逗比的性格,言归正传,目前为止两个星期大概就做了这么多,基本上前段后台服务端数据库都是一个人在写,确实蛮累的,但也感觉前段时间学到的知识融会贯通,确实有了一个蛮大的提升的。之前画了用例图画类图画了好几天,后来编码过程中慢慢发现有些不对的地方就慢慢的改,之前一直觉得自己设计不行,但这次到这个成型,虽然界面部分很多是参考天猫,但是界面设计也应该不是我的事,主要是功能点和ui的实现。总之,一件事,决定了做就认真的去做,就算知道或者感觉自己做不了,只要决定了就去做。要不一开始你就不要决定去做,这是我的感受,也是我做人做事的准则吧。

代码

由于代码量比较大,这次不会一次全部贴出来,我会在这里从前到后,按结构跟大家把代码过一遍,其实重要的不在于代码本身,只要思路明确,做什么都不是大问题。后续的代码会在以后跟进。好了,废话不多说,上代码
首先包图这里写图片描述
这里application用我们自己写的BaseApplication

package com.tmall.view.base;

import android.app.Application;
import android.content.Context;
import android.content.res.Resources;
import android.widget.Toast;

public class BaseApplication extends Application {
   
   
    public static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    static Toast mToast;

    public static void makeText(String text) {
        /*
         * if (mToast == null) mToast = new Toast(context);//? mToast.cancel();
         * mToast.setText(text); mToast.show();
         */
        makeText(text, Toast.LENGTH_LONG);
    }

    public static void makeText(String text, int time) {
        if (mToast != null)
            mToast.cancel();
        mToast = Toast.makeText(context, text, time);
        mToast.show();
    }

    public static Resources getRresource(){
        return getRresource();
    }
}


然后就是首页的activity

package com.tmall.view;

import com.example.tmall.R;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;

public class HomeActivity extends FragmentActivity implements
        OnCheckedChangeListener {
   
   
    private HomeFragment homeFragment;
    private BrandFragment brandFragment;
    private CarFragment carFragment;
    private CenterFragMent centerFragMent;

    private FragmentManager fm;
    private FragmentTransaction transaction;

    private RadioButton rbHome;
    private RadioButton rbBrand;
    private RadioButton rbCar;
    private RadioButton rbCenter;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.activity_home);
        findView();
        init();
    }

    private void init() {
        // 创建4个fragment
        homeFragment = new HomeFragment();
        brandFragment = new BrandFragment();
        carFragment = new CarFragment();
        centerFragMent = new CenterFragMent();
        fm = getSupportFragmentManager();
        rbHome.setChecked(true);
    }

    private void findView() {
        rbHome = (RadioButton) findViewById(R.id.rbHome);
        rbHome.setOnCheckedChangeListener(this);
        rbBrand = (RadioButton) findViewById(R.id.rbBrand);
        rbBrand.setOnCheckedChangeListener(this);
        rbCar = (RadioButton) findViewById(R.id.rbCar);
        rbCar.setOnCheckedChangeListener(this);
        rbCenter = (RadioButton) findViewById(R.id.rbCenter);
        rbCenter.setOnCheckedChangeListener(this);
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        int id = buttonView.getId();
        switch (id) {
        case R.id.rbHome:
            if (rbHome.isChecked()) {
                transaction = fm.beginTransaction();
                homeFragment = null;
                homeFragment = new HomeFragment();

                transaction.replace(R.id.flContent, homeFragment);
                transaction.commit();

            }
            break;
        case R.id.rbBrand:
            if (rbBrand.isChecked()) {
                transaction = fm.beginTransaction();
                brandFragment = null;
                brandFragment = new BrandFragment();
                transaction.replace(R.id.flContent, brandFragment);
                transaction.commit();
            }

            break;
        case R.id.rbCar:
            if (rbCar.isChecked()) {
                transaction = fm.beginTransaction();
                carFragment = null;
                carFragment = new CarFragment();
                transaction.replace(R.id.flContent, carFragment);
                transaction.commit();
            }

            break;
        case R.id.rbCenter:
            if (rbCenter.isChecked()) {
                transaction = fm.beginTransaction();
                centerFragMent = null;
                centerFragMent = new CenterFragMent();
                transaction.replace(R.id.flContent, centerFragMent);
                transaction.commit();
            }

            break;

        default:
            break;
        }
    }
}

四个底层显示的fragment

package com.tmall.view;

import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.os.Bundle;
1.系统需求 2 2.需求分析 4 2.1功能设置 4 2.2模块划分 5 2.3识别参与者和用例 6 2.3.1 顾客Customer用例图 7 2.3.2 系统管理员用例 13 2.3 静态结构模型 16 2.3.1 类Customer 17 2.3.2类Goods 18 2.3.3类Order 19 2.3.4管理员 20 2.3.5标题title类 20 2.3.6二级标题类 21 2.3.7公共操作类 22 2.3.8类图 23 3.动态行为模式 23 3.1时序图 23 3.1.1顾客注册成为会员时序图 24 3.1.2顾客反馈信息时序图 25 3.1.3顾客浏览商品时序图 26 3.1.4顾客查询商品时序图 27 3.1.5顾客购买商品时序图 28 3.2.6管理员添加商品时序图 29 3.2.7管理员删除商品时序图 29 3.2.8管理员添加二级商品目录时序图 30 3.2.9管理员删除二级商品目录时序图 31 3.2.10管理员编辑促销产品时序图 31 3.2.11管理员编辑条款信息时序图 32 3.2.12管理员编辑购买流程时序图 33 3.2.13管理员删除会员时序图 34 3.2.14用户结算时序图 35 3.3.活动图 35 3.3.1用户顾客的活动图 35 3.3.2管理端管理员的活动图 36 3.4协作图 38 3.4.1顾客登录协作图 38 3.4.2顾客注册协作图 38 3.4.3顾客浏览商品协作图 39 3.4.4反馈信息协作图 39 3.4.5顾客查询商品协作图 40 3.4.6顾客购买商品协作图 40 3.4.7管理员删除会员协作图 41 3.4.8管理员添加商品协作图 41 3.4.9管理员添加商品标题协作图 42 3.4.10管理员删除商品协作图 42 3.4.11管理员删除标题协作图 43 3.4.12管理员编辑文本协作图 43 4.系统数据库设计 44 4.1数据库的需求分析 44 4.2数据库的逻辑设计 44 5.参考文献: 47
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值