安卓APP源码和设计报告——购物APP的设计与实现

news2024/12/23 13:10:45

2021—2022学年第二学期期末考试

《Android手机软件开发》实践考核

项目设计说明书

项目名称: 购物APP的设计与实现

专 业: 计算机科学与技术

学 号:

姓 名:

任课教师:

2022年6月12日

目 录

1.项目概述11

2.项目需求分析11

3.开发环境22

4.界面设计22

4.1登录22

4.2主页面22

4.3商品详情页面33

4.4商品页面44

4.5购物车页面55

4.6个人界面66

5.数据存储77

6.项目开发与实现88

6.1登录88

6.2主页面88

6.3商品详情页面88

6.4商品页面88

6.5购物车页面99

6.6个人界面99

7.开发总结99

1.项目概述

如今,随着互联网技术的日新月异,移动互联网技术的提高。电子商务行业已经成为了当今的一个热门的话题。虽然,电子商务行业在国内起步比较晚,但是由于国内阿里巴巴、京东等优秀的企业,使得我国在电子商务领域的地位排在世界前列。虽然,电子商务技术已经趋于成熟,但是对于市场来说,电子商务软件的需求仍然很大。有很高的研究价值和市场价值。

随着科技的进步,电子产品的普及,智能手机品牌不断扩大,功能逐渐完善,使得移动应用出现了井喷式的产生和爆炸式的发展。由于移动应用的多元化人性化,更新快、新鲜度高、使得80后、90成为智能手机,app 的主要用户。

购物商城App 的设计响应现代信息化的潮流,跟上时代发展的步伐,便利使用安卓设备进行移动网上购物作为购物商城设计的目的。其中用到类似淘宝商城和京东商城的设计原理,创造功能合理、界面友善、满足使用者简单的网上购物体验。

该系统共包括六个主要页面,其中五个activity页面,四个fragment页面。

2.项目需求分析

在移动互联网不普及的时候,我们需要携带大量的现金,去固定的集市购买我们的生活所需。在过去,没有电子商务的时候,如果我们需要购买一件商品显得非常的不容易,同时,购买的过程中我们需要携带现金,这一行为存在着很大的安全隐患。在交易的时候,卖家和买家需要花很长的时间清点现金,但还是有少付、多付或者存在支付假币的情况。

随着互联网技术的普及,中国电子商务从起初的举步维艰的萌芽期,到如今的鼎盛时期,经历了很长时间。从1997年我国的B2B中国化工网上线,以及C2C模式的易趣网上线,标志着,我国的电子商务行业开始进入了萌芽期,但是这个时候,互联网技术不发达,大众对电子商务缺乏准确的认识和了解,这一阶段成立的互联网公司,显得有心无力。一直到2003年阿里巴巴成立淘宝,推出支付宝开始,大量的网民开始进行网购,这个时候腾讯推出了基于C2C模式的拍拍网,我国电子商务三足鼎立的格局形成。

本次项目设计的目的在于结合现在电子商务发展的特点和趋势,市场上电子商务产业的有优缺点,开发出一款方便快捷安全的购物APP。

3.开发环境

本次开发使用的开发工具:

操作系统:WIN10系统

开发工具:JDK8 Android Studio 4.0.1

API版本:Android API 30

4.界面设计

4.1登录

用户可以通过登录账号密码,来进行APP功能使用,同时查看账号订单,并更改个人信息。登录页面效果如图4-1所示:

图4-1 登录页面

4.2主页面

用户浏览网上商城,可以在网上商城首页查看产品详细信息,并点击进入商品详情查看,可通过点击事件设置喜欢,并添加购物车。主页面效果如图4-2所示:

图4-2 主页面

4.3商品详情页面

此页面用来展示商品详情及介绍。商品详情页面效果如图4-3所示:

图4-3商品详情页面

4.4商品页面

在商品界面,可以通过点击左侧分类通知栏,进入商品分类,并进行添加购物车。商品页面效果如图4-4所示:

图4-4 商品页面

4.5购物车页面

选择完商品后可进入购物车页面,查看自己要购买的商品,可修改某一商品数量、取消购买某商品和清空整个购物车。购物车页面效果如图4-5所示:

图4-5购物车页面

4.6个人界面

用户在个人界面登录后,可在此页面查看订单,并进行个人信息的修改。个人界面效果如图4-6所示:

图4-6登录页面

5.数据存储

Android提供了四种数据存储方式:

  1. 使用Preference存储数据:Preference采用“键-值”对方式组织和管理数据,其数据存储在XML文件中。相对于其他方式,它是一个轻量级的存储机制。该方式实现比较简单,适合简单数据的存储。
  2. 使用File存储数据:文件存储的特点介于Preference与SQLite之间。从存储量来看,文件存储是一个“重量级”存储机制,比Preference方式更适合存储较大的数据;从存储结构化来看,这种方式不同于SQLite,不适合结构化的数据存储。
  3. 使用SQLite存储数据:SQLite使用数据库作为存储方式,它是一个重量级的存储机制,适合大数据量的数据存储,通过这种方式能够很容易的对数据进行增加、插入、删除、更新等操作。相比Preference和文件存储,使用SQLite较为复杂。
  4. ContentProvider:数据共享,四大组建之一。

本次项目开发使用了使用File存储数据,代码如下:

public class DataServer {

private static List<String> snackOrderList;

private static List<Snack> homeList;

private static List<Snack> fujianList;

private static List<Snack> guangxiList;

private static List<Snack> guangzhouList;

private static List<Snack> beijingList;

private static List<Snack> chongqingList;

private static List<User> accountList;

public static List<Snack> getHomeList() {

if (homeList == null) {

homeList = new ArrayList<Snack>() {{

add(new Snack("苹果13", 5999, R.mipmap.sp1, "苹果13一般指iPhone 13。"));

add(new Snack("华为mate40", 5888, R.mipmap.sp2, "华为Mate40一般指HUAWEI Mate 40。"));

add(new Snack("联想Y9000P", 8999, R.mipmap.sp3, "联想Y9000P采用了双面金属设计,搭载16英寸四边窄边框屏,支持杜比视界。"));

}

return homeList;

}

6.项目开发与实现

6.1登录

此页面显示登录页面的信息,布局文件在activity_login.xml,顶部使用LinearLayout组件来进行LOGO展示,下方使用EditText组件来显示登录账号及密码,使用户进行账号登录功能。

6.2主页面

此页面显示主页面的信息,布局文件在activity_main.xml,顶部用了有个ImageView配件来进行页面展示,下面用fragment组件来进行商品展示,通过点击事件可以调用DetailActivity页面,同时跳转到activity_detail.xml来对用户进行商品页面展示。

6.3商品详情页面

此页面显示商品详情页面的信息,布局文件在activity_detail.xml,顶部用ImageView来进行商品图片展示,在下面用两个TextView组件来进行商品详情展示,并添加了一个Button按钮调用通过onCreate功能来进行添加到购物车的功能。

6.4商品页面

此页面显示商品页面的信息,布局文件在fragment_snack.xml,左边使用LinearLayout组件写了一个分类布局,来进行商品分类的实现,在右边则用LinearLayout组件展示添加到购物车的实现,通过调用BaseQuickAdapter方法来对购物车功能进行实现及提示。

6.5购物车页面

此页面显示购物车页面的信息,布局文件在fragment_place.xml,页面下方使用LinearLayout组件来进行商品金额的显示,右侧用Button来实现下单功能,通过AppCompatActivity调用OrderActivity页面对添加到购物车的商品进行展示,使用户来对挑选的商品进行炒作。

6.6个人界面

此页面显示个人页面的信息,布局文件在fragment_my.xml,此页面用了多个LinearLayout组件来进行设计,在ScrollView配件中,添加了一个图像组件及两个TextView组件,来进行用户的登录功能。下面用一个LinearLayout中设定了查看订单及未来得及添加的功能,在下方设置了多个TextView组件来进行个人信息的添加和修改。

7.开发总结

在这学期Android的学习中不仅学习了相关的专业知识,更让我对Android系统有了一个更加深入的了解,在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。但在期末项目开发中,功能设计并不是很完善,还有许多地方需要进行修改改进,时间有限是因素之一,其次是因为对于技术开发仍然有些不足。

回顾以前所走的路,太多的是无奈和迷茫,这次跟随老师的安卓学习就像是我人生道路上的航标,为我指明了前进的方向,使我对自己的前途充满了信心,同时也知道了自己的前进方向。

我会在接下来的学习时间里,认真学习,充分利用时间完成相应的学科作业,并合理安排时间进行复习,以此更好的完成接下来的期末考试。


附录:

1.登录

DBHelper(MainActivity.this,"db_project",null,1);

Button btn_login=findViewById(R.id.btn_login);

EditText login_username=findViewById(R.id.login_username);

EditText login_password=findViewById(R.id.login_password);

btn_login.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//1.获取输入的用户名和密码

String username=login_username.getText().toString();

String password=login_password.getText().toString();

//2.去数据库里进行查询

Cursor cursor=helper.getReadableDatabase().query("tb_user",null,"username=? and password=?",new String[]{username,password},null,null,null);

if (cursor.moveToNext()){

//跳转

Intent intent=new Intent(MainActivity.this,MActivity.class);

Bundle bundle=new Bundle();

bundle.putCharSequence("username",cursor.getString(2));

bundle.putCharSequence("id",cursor.getString(0));

intent.putExtras(bundle);

// Toast.makeText(MainActivity.this,cursor.getString(2),Toast.LENGTH_SHORT).show();

startActivity(intent);

}else {

//没有查询到

Toast.makeText(MainActivity.this, "请输入正确的用户名和密码", Toast.LENGTH_SHORT).show();

}

}

});

2.主界面

public class WelcomeActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_welcome);

View decorView = getWindow().getDecorView();

// Hide the status bar.

int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;

decorView.setSystemUiVisibility(uiOptions);

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);

startActivity(intent);

finish();

}

}, 800);

}

3.商品详情页面

public class DetailActivity extends AppCompatActivity {

@BindView(R.id.detailImage)

ImageView image;

@BindView(R.id.detailName)

TextView name;

@BindView(R.id.detailPrice)

TextView price;

@BindView(R.id.detailContent)

TextView detail;

@BindView(R.id.detailAddCartBtn)

Button addCart;

@BindView(R.id.detailFavorite)

ImageView favorite;

public static void actionStart(Context context, Snack snack) {

Intent intent = new Intent(context, DetailActivity.class);

intent.putExtra("snack", snack);

context.startActivity(intent);

}

4.商品页面

public class SnackRightAdapter extends BaseQuickAdapter<Snack, BaseViewHolder> {

public SnackRightAdapter(List<Snack> snacks) {

super(R.layout.item_snack_right, snacks);

}

@Override

protected void convert(@NotNull BaseViewHolder baseViewHolder, Snack snack) {

baseViewHolder.setImageResource(R.id.snackRightImage, snack.getImage())

.setText(R.id.snackRightName, snack.getName())

.setText(R.id.snackRightPrice, "¥" + snack.getPrice());

}

}

5.购物车页面

public class PlaceOrderAdapter extends BaseQuickAdapter<Snack, BaseViewHolder> {

public PlaceOrderAdapter(List<Snack> snacks) {

super(R.layout.item_place_order, snacks);

}

@Override

protected void convert(@NotNull BaseViewHolder baseViewHolder, Snack snack) {

baseViewHolder.setImageResource(R.id.placeOrderImage, snack.getImage())

.setText(R.id.placeOrderName, snack.getName())

.setText(R.id.placeOrderPrice, "¥" + snack.getPrice())

.setText(R.id.orderCountBtn, String.valueOf(snack.getCount()));

}

}

6.个人页面

private void initView() {

if (MyApplication.isLogin()) {

User user = MyApplication.getUser();

image.setImageResource(user.getHeadImage());

nickname.setText(user.getNickname());

username.setText("账号: " + user.getUsername());

}

}

@OnClick(R.id.myUserHead)

void clickImage() {

if (MyApplication.isLogin()) {

Tips.show("已登录");

} else {

LoginActivity.actionStart(getActivity());

}

}

@OnClick(R.id.constraintLayout)

void clickcslayout() {

if (MyApplication.isLogin()) {

Tips.show("已登录");

} else {

LoginActivity.actionStart(getActivity());

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云搭建博客之如何设置网页为中文

今天&#xff0c;在阿里云上参照“我的教程”–“搭建云上博客”中的指导&#xff0c;基于ApachemysqlWordPress搭建个人博客&#xff0c;参照上面的教程完成博客的搭建。但证登录博客后&#xff0c;发现业务展示为英文。在setting—>site language 设置中只有英文&#xff…

(附源码)springboot实验室预约管理系统 毕业设计 261141

实验室预约管理系统的设计与实现 摘 要 远程预约是一种全新的网络租用方式&#xff0c;它通过互联网突破了时间和空间限制&#xff0c;实现了便捷快速的预约与管理功能。在对数据信息有效组织并整合了一定使用功能后&#xff0c;远程预约系统可以方便地实现预约与取消&#xff…

如何在centos上安装nvidia驱动

首先查询服务器的gpu型号 [kfkbigdata-pro01 ~]$ lshw -C display WARNING: you should run this program as super-user. *-display description: VGA compatible controller product: SVGA II Adapter vendor: VMware physical id: f bus info: pci0000:00:0f.0 version: 00…

[附源码]JAVA毕业设计日常办公管理系统(系统+LW)

[附源码]JAVA毕业设计日常办公管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【双碳环保】AcrelCloud-3500餐饮油烟监测云平台应用分析

背景概述 餐饮业油烟是大气中挥发性有机物&#xff08;VOCS&#xff09;和PM10的主要来源之一。近年来随着环保治理的加强&#xff0c;各地餐饮油烟条例相继推出&#xff0c;相关执法部门对大气监测&#xff0c;特别是餐饮油烟的治理监管都非常重视&#xff0c;为贯彻落实大气…

日本知名汽车零部件公司巡礼系列之株式会社123

株式会社123 业务内容&#xff1a; 各种自动组装机检测机的设计制作、半导体•液晶的设计制做、各种自动包装•省力化设备的设计制作、模具刀具的设计制作、各种零件的制作。 公司简介&#xff1a; 资本金&#xff1a;1000万日元&#xff08;2022年汇率折合人民币约50万元&a…

SystemV 信号量(一) —— SystemV信号量的相关操作函数

SystemV IPC 方案的相关内容都是通过 “房间密码”来创建房间&#xff0c;获取到房间的ID&#xff0c;后面其他进程也可以根据这个房间密码来拿到同一个房间的ID。这是理解下面这些操作函数的关键。 目录 1、信号量集合的创建 semget 2、信号量的初始化 / 销毁 semctl 3、信…

C/C++入门001-概述环境搭建与案例

文章目录1.C语言概述1.1 计算机与程序1.1.1 什么是计算机1.1.2 什么是计算机程序 ?1.2 进制转化1.3 计算机语言1.4 C语言发展1.5 安装开发工具与编译器1.5.1 安装 codeblocks1.5.2 设置MinGW的环境变量1.6 C语言的HelloWorld1.6.1 入门1.6.2 demo案例1.C语言概述 参考&#x…

基于jsp+mysql+ssm大学本科考研服务系统-计算机毕业设计

项目介绍 考研是一个艰难辛苦的过程&#xff0c;需要具备充沛的精力&#xff1b;考研是一场旷日持久的战争&#xff0c;需要吃苦耐劳的精神和持之以恒的毅力和意志&#xff0c;如果三天打鱼&#xff0c;两天晒网&#xff0c;那么很难在考研大军中胜出&#xff1b;考研的过程中…

UDP-阿拉伯糖,15839-78-8,UDP-L-Arabinose,阿拉伯糖偶联核苷酸

常用中文名&#xff1a;[[(2R,3S,4R,5R)-5-(2,4-dioxopyrimidin-1-yl)-3,4-dihydroxyoxolan-2-yl]methoxy-hydroxyphosphoryl] [(2R,3R,4S,5S)-3,4,5-trihydroxyoxan-2-yl] hydrogen phosphate 常用英文名&#xff1a;[[(2R,3S,4R,5R)-5-(2,4-dioxopyrimidin-1-yl)-3,4-dihydro…

windows个性化设置--自定义windows系统的u盘图标

选择一张图片&#xff0c;最好是正方形的&#xff0c;作为u盘图标 使用图片编辑软件将图片转换为ico格式 将x.icon图标放到u盘根目录 在u盘根目录下建立一个文本文件&#xff0c;编辑内容 [autorun] iconx.ico保存&#xff0c;将文本文件改名为autorun.inf 之后重新插拔u盘…

mySQL—mySQL事务

文章目录什么是事务&#xff1f;事务定义&#xff1a;设置事务的目的&#xff1a;事务提交&#xff1a;事物的特性原子性&#xff08;A&#xff09;提交分类&#xff1a;一致性&#xff08;C&#xff09;持久性&#xff08;I&#xff09;持久性危机持久性危机如何解决&#xff…

【深度学习】实验6布置:图像自然语言描述生成(让计算机“看图说话”)

DL_class 学堂在线《深度学习》实验课代码报告&#xff08;其中实验1和实验6有配套PPT&#xff09;&#xff0c;授课老师为胡晓林老师。课程链接&#xff1a;https://www.xuetangx.com/training/DP080910033751/619488?channeli.area.manual_search。 持续更新中。 所有代码…

关于JVM:内容以及流程释义

对于JVM、GC、类加载&#xff0c;很多人摸不清楚头绪&#xff0c;不知道他们之间的关系。误以为GC和类加载还有JVM区分统称垃圾回收&#xff0c;实则他们包含的东西很多&#xff0c;很细&#xff0c;完整的了解正个JVM的加载过程&#xff0c;就需要全面理解这些东西。 我认为的…

三节锂电池充电管理芯片,IC电路图,BOM物料表

5V输入升压&#xff0c;三节锂电池充电管理芯片&#xff0c;IC电路图和BOM物料表&#xff1b;20V输入降压&#xff0c;三节锂电池充电管理芯片&#xff0c;IC电路图和BOM物料表。 5V输入&#xff0c;三节锂电充电管理系统 1 5V输入升压&#xff0c;三节锂电池充电管理芯片 FS40…

实现网站都变成灰色-filter

如下&#xff1a;当某些情况发生时一些娱乐网站统一变成灰色系&#xff0c;全站的内容都变成灰色了&#xff0c;包括按钮、图片等等。 怎么实现的&#xff1f; 最简单的是考虑所有的内容都统一换了一个 CSS 样式&#xff0c;图片也全换成灰色的&#xff0c;按钮等样式也统一换…

Web3和区块链入门——Web3历史和Web3是什么?

大家好&#xff0c;我是无用&#xff0c;今天跟大家聊下Web3历史和Web3什么。 Web3历史 Web3.0一词最初由英国计算机科学家蒂姆伯纳斯-李&#xff08;著名的万维网之父&#xff09;在1998年提出&#xff0c;但是他那个时候所说的Web3.0是自己所提出的语义网络&#xff0c;他认为…

Newsletter 2022-11|HStreamDB 0.11 发布

11月我们发布了 HStreamDB 0.11&#xff0c;修复了多项已知问题。同时也在继续推进 HStream Platform 的开发&#xff0c;并计划于本月底上线首个 Alpha 版本。 v0.11 发布 随着云原生流数据库 HStreamDB 项目的日益成熟&#xff0c;为了更好地适应项目发展&#xff0c;我们决…

零基础入门推荐系统 - 新闻推荐 - 实操1

内容导航: 零基础入门推荐系统 - 新闻推荐 - 实操1赛题数据介绍:数据集介绍:读取数据集:零基础入门推荐系统 - 新闻推荐 - 实操1 赛题数据介绍: 赛题以预测用户未来点击新闻文章为任务&#xff0c;数据集报名后可见并可下载&#xff0c;该数据来自某新闻APP平台的用户交互数据…

torch.autograd

torch.autograd torch.autograd: 提供了类和函数&#xff0c;用来对任意的标量函数进行求导&#xff0c;要想使用自动 求导&#xff0c;只需要对已有的代码进行微小的改变&#xff0c;只需要将所有的tensor包含进VariableVariableVariable对象中即可。 torch.autograd.backwa…