校园闲置物品交易平台的Android设计与实现

 

1 引言 1

1.1 研究背景及意义 1

1.2 研究现状 1

2 相关理论及技术介绍 3

2.1 相关理论介绍 3

2.2 配置系统开发环境 3

3 总体设计 5

3.1 课题内容与功能设计 5

3.2 系统模块设计 5

4 软件分析 7

4.1 系统概要设计 7

4.1.1 系统流程图 7

4.1.2 系统整体框架图 9

4.2 系统功能设计 10

4.2.1 首页管理模块 10

4.2.2 个人中心 10

4.2.3 发布页面 10

4.2.4 评价 11

4.2.5 订单查询 11

4.3 系统接口设计 11

4.3.1 面向对象的接口设计原则 11

4.3.2 项目流程图 12

4.4 数据库设计 12

4.4.1 数据表 12

4.4.2 数据实体 13

4.4.3 数据库创建 13

5.1详细设计 16

5.1.1 类图 16

5.2实现效果 17

iv.setImageBitmap( (Bitmap)data ); 30

6.1 测试目的 36

1、提高软件的质量 36

2、保证软件的安全 36

3、降低软件开发成本 36

4、降低企业风险 36

5、提升用户体验感 36

6.2 测试计划 37

表2-1  测试计划 37

6.2.1测试方法 37

6.2.2测试流程 37

6.2.3测试用例 38

6.3 测试实施 38

6.4 测试评价 39

7.1 全文总结 40

7.2 工作展望 41

致谢 43

最后,向在百忙中抽出时间对本文进行评审并提出宝贵意见的各位老师表示衷心地感谢! 43

参考文献 44

  1. 引言
    1. 研究背景及意义

在国内,具有几千年的商业历史,但是以电商的发展为基础的商业模式相比与国外的发展还是比较晚的。我国电子商务模式的发展最早是在1999年,从次以后电子商务便是登上了历史的舞台,并且在北京上海等各大城市迅速发展起来。基于互联网的电子商务,以互联网为基础的线上二手交易平台也逐渐兴起,各种二手交易平台也层出不穷。

国外的互联网及计算机技术的发展带动了电子商务的发展,其中电子商务发展的早期就是美国,法国和日本。美国是最早开始电子商务的国家,电子商务的发展给美国政府带来了极大的经济效益。日本紧随美国见到电子商务有巨大的的经济效益,其政府也根据当时的日本国情制定了一系列的电子商务发展的战略规划。也使得电子商务能够迅速发展。法国的机械制造业在当时十分发达,并且经济水平十分发达。因此在电子商务的发展方面也是十分迅速。电子商务的发展也代表了网络二手交易的水平。为解决大量的二手闲置的问题,国外也出现了好多的二手交易平台。

    1. 研究现状

每一名当代大学生或多或少拥有一定的闲置物品 ,如果这些物品一直被闲置 下去,势必会对学生、对学校、对社会造成一定的影响。

大学校园二手交易市场是连接闲置资源拥有者和需要者的纽带,能够在校园内完成资源的合理配置。

建立大学校园二手交易市场,具有很重要的现实意义。们的生活发生了很大的变化,越来越高科技化。在普遍校园生活中,学生们经常会出现很多闲置的物品,比如书籍、手机、电脑等其他日常生活用品。如何处理这些物品也成为了学生们日常关注的问题,尤其是学生毕业时有些同学会拿到二手交易市场进行廉价的交易,更有些人会因为麻烦等原因不愿意搬运而当作废品卖掉甚至扔掉。这不仅不利于环保,而且还造成了资源的浪费。因此开发了这个android校园二手交易app,通过本系统就能买到便宜且实用的物品,并且人群都在校园内,能很快的完成交易。根据学生实际的需要,本校园二手交易app支持书籍、电脑、手机、自行车等其他二手可重复使用物品的销售等功能,从而达到环保和可持续发展的目的;


  1.  相关理论及技术介绍
    1. 相关理论介绍

面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。

基本思想:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。

本系统是基于Android 系统开发,Android Studio 是 Android 的官方 IDE。它专为 Android 而打造,可以加快您的开发速度,帮助您为每款 Android 设备构建最高品质的应用;每个 SDK 平台版本都包含以下软件包:Android SDK 平台软件包。您必须拥有此软件包,才能针对相应版本编译您的应用。多个 System Image 软件包。您必须至少拥有其中一个软件包,才能在 Android 模拟器上运行相应版本。

SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本。它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需要占用几百kB的存储空间,这也是Android移动设备采用SQLite数据库的重要原因之一。

SQLite 是遵守ACID的关系型数据库管理系统。这里的ACID是指数据库事务正确执行的4个基本要素,即原子性(Atomicity)、致性 ( Consistency)、 隔离性( lolation). 持久性( Durabilily )。它能够支持Windows/Linux/UNIX等主流的操作系统,能够跟很多程序语言,例如Tcl、C#、PHP、 Java等相结合。比起Mysql、PostgreSQL 这两款开源数据库管理系统来讲,SQLite的处理速度更快。

    1. 配置系统开发环境 

导入工程如下图,在Android studio中file 选择open选项,然后选择需要导入工程即可

校园闲置物品交易平台的Android设计与实现_第1张图片

Android studio版本:Android Studio Dolphin | 2021.3.1 Patch 1

Gradle版本:classpath "com.android.tools.build:gradle:4.1.2"

Java版本:1.8以上

开发工具:Android Studio版本:3.5以上


  1. 总体设计
    1. 课题内容与功能设计

本课题要求实现一种面向校园二手物品交易系统平台。故结合现实校园中的用户使用习惯与可以目标,我们设计了以下具体功能:一,用户注册登录;二,发布闲置的物品,进行交易;三,浏览已发布二手商品列表;四,个人信息;五,修改密码及其他展示;六,实现能二手物品的购买以及评价。

    1. 系统模块设计

本系统是基于Android系统开发,对Android应用设计开发需要有一定移动端app的设计思路,使用Android SDK以及轻量级数据库SQLite,本系统设计主要包含,依据设计的总体架构对各个功能模块进行划分,并分别对各个模块作详细设计。同时,设计完成数据库的逻辑结构,以配合功能模块的数据处理;

   设计完成数据库的逻辑结构,以配合功能模块的数据处理,开发设计图如下:

校园闲置物品交易平台的Android设计与实现_第2张图片

系统方案设计

校园二手交易平台可以帮助同学们处理手上暂时不用的闲置物品,或买卖,或交易,在校园内搭建一个需要提供真实信息才可注册的二手交易平台,便于租界书籍,买卖闲置物品。同校同学之间交易省去邮寄的时间和邮费,更加方便快捷。如图3-2所示。

校园闲置物品交易平台的Android设计与实现_第3张图片

  1. 软件分析
    1.  系统概要设计
      1.  系统流程图

校园闲置物品交易平台的Android设计与实现_第4张图片

启动app之后判断是否注册过,注册之后需要登录,登录校验成功之后将进入首页,进入二手交易

      1.  系统整体框架图

 当前校园二手商品繁杂、有利用价值的物品随意被废弃,面对这个问题,本文设计一个基于Android的前后端结合的校园闲置物品交易平台系统,主要完成以下工作:

1. 进行校园市场以及学生需求的分析,将系统分为二手商品管理员,分拣员,配送员、普通用户注册登录,商品信息,用户需求以及地址的录入、删除、修改以及线上客服和线下一对一配送模块。

2. 数据存储是使用sqlite数据库实现对交易平台用户信息的存储。

3. 实现人性化管理,在遇到特殊问题时可以线上申诉,平台进行人工客服反馈。并设有管理员,有权限能够对商品数量、商品信息进行增删改查。

4.校园二手市场主要分为客户端〈Android)和后台管理系统两大部分,客户端为用户提供给一个处理闲置物品、找到物美价廉的商品的平台,管理员可以管理用户信息和交互数据,还可以更新客户端的版本。本系统非常巧妙地迎合了学生对互联网+生活的需求,实现了信息的快捷共享和交互,充分发挥了校园跳蚤市场的作用,使闲置资源得到优化配置,如下是系统设计的框架图:

校园闲置物品交易平台的Android设计与实现_第5张图片

    1. 系统功能设计 
      1.  首页管理模块

   首页管理模块主要包含展示商品列表以及分类展示相关的发布的列表,展示物品的分类信息。用户可以通过浏览商品列表来寻找心仪的商品,并根据自己的需求进行筛选和排序。在分类展示的部分,可根据商品种类、品牌等信息来展示商品,帮助用户更方便地寻找他们想要的商品。此外,首页管理模块还可以包含推荐商品和今日热门商品等功能,以及一些特别活动和促销信息的展示,以吸引用户的眼球。

      1. 个人中心

对应的用户可以展示信息以及修改个人信息,查看个人的订单以及评论信息

      1. 发布页面

   用户根据自己需求可以发布生活日常,发布学习相关,电子产品等等,买卖交易,发布旅游方案等多种类型的闲置信息。APP会根据用户的选择推送相关的信息给他们。同时,用户也可以通过搜索功能来查找自己需要的商品或服务。闲置APP还会提供在线交流、支付和评价功能,以保证交易的安全和质量。用户可以在APP上与卖家或买家进行沟通,并可以通过APP完成交易的支付和评价。同时,闲置APP还会提供一些优惠和折扣活动,以吸引更多的用户使用。对于电子产品的买卖交易,APP还会提供相关的保障措施,如检测、保修等,以确保用户的权益。总之,闲置APP可以方便用户进行各种类型的交易,帮助用户买到自己需要的商品或服务,同时也可以帮助用户将闲置物品变现,提高生活质量。

      1. 评价   

 对二手交易的商品进行评价,可以将自己购买或者发布的商品进行评价,是的,对于二手交易的商品,购买者和卖家都可以对商品进行评价,这有助于其他用户了解商品的质量和卖家的信誉度。评价可以包括描述商品的准确性、物品质量的良好程度、价格合理、交易平稳等指标。评价系统可以建立信任度和口碑,从而增加二手交易的安全性和可靠性。对于发布者,他们也应该关注买家的反馈和评论,以便他们提高自己的交易技巧和处理问题的能力;

      1.  订单查询

    查看用户登录的购买订单,对于闲置APP,用户登录后可以查看自己的购买订单历史,以便及时跟踪和管理自己的交易记录。

在设计订单系统时,可以考虑以下几点:

创建订单:用户在购买商品时,可以创建一个订单,并在订单中填写购买商品的信息,如名称、价格、数量、地址等。

支付方式:支持多种支付方式,例如支付宝、微信支付、银联支付等。

订单状态和跟踪:订单在不同的状态之间变化,例如已付款、待发货、已发货、已签收等。用户可以随时查看订单状态和跟踪信息,以了解订单的最新进展情况。

评价系统:用户可以在完成订单后,对商品或卖家进行评价,以便其他用户更好地了解商品和卖家的信誉度。

以上是一些设计订单系统的基本考虑因素,当然还有很多

    1. 系统接口设计
      1. 面向对象的接口设计原则

六大设计原则主要是指:

单一职责原则(Single Responsibility Principle);

开闭原则(Open Closed Principle);

里氏替换原则(Liskov Substitution Principle);

迪米特法则(Law of Demeter),又叫“最少知道法则”;

接口隔离原则(Interface Segregation Principle);

依赖倒置原则(Dependence Inversion Principle)

把这 6 个原则的首字母(里氏替换原则和迪米特法则的首字母重复,只取一个)联合起来就是:SOLID(稳定的),其代表的含义也就是把这 6 个原则结合使用的好处:建立稳定、灵活、健壮的设计。

校园闲置物品交易平台的Android设计与实现_第6张图片

4.3.2 实体类图

校园闲置物品交易平台的Android设计与实现_第7张图片

商品实体类图

    1. 数据库设计
      1.  数据表

本系统是使用Android 轻量级的数据库 sqlite数据库,根据数据库的特征,将使用的数据实体类创建数据表

User 表

表名称:User表

字段名称

字段类型(长度)

字段说明

Id

Int

主键(id)

name

String

名称

pwd

String

密码

Phone

String

电话

Dep

String

描述

addListTime

String

最后修改时间

duration

long

商品表

表名称:shopping表

字段名称

字段类型(长度)

字段说明

Id

Int

主键

Name

String

名称

Price

String

价格

ShoppingID

String

商品id

Count

string

数量

Dec

String

描述

Select

String

已选

Time

时间

订单表

表名称:order表

字段名称

字段类型(长度)

字段说明

Id

Int

主键

Order

String

订单

Name

String

名称

Time

String

时间

Count

string

数量

Address

String

地址

Price

String

价格

Total

总额

      1.  数据实体
      2. 数据库创建

public class DatabaseOpenHelper {

    private final String TAG = DatabaseOpenHelper.class.getSimpleName();

    private DbManager.DaoConfig daoConfig;

    private static DbManager dbManager;

    private final String DB_NAME = "home.db";

    private final int DB_VERSION = 1;

    private DatabaseOpenHelper() {

        daoConfig = new DbManager.DaoConfig()

                .setDbName(DB_NAME)

                .setDbVersion(DB_VERSION)

                .setDbOpenListener(db -> db.getDatabase().enableWriteAheadLogging())

                .setDbUpgradeListener((db, oldVersion, newVersion) -> {

                }).setTableCreateListener((db, table) -> {

                });

        dbManager = x.getDb(daoConfig);

    }

    public static DbManager getInstance() {

        if (dbManager == null) {

            DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper();

        }

        return dbManager;

    }

创建数据库trans.db 文件,db操作辅助类的,需要打开数据以及更新数据库的数据,需要修改字段将升级字段即可

  1. 软件设计与实现

1. 进行校园市场以及学生需求的分析,将系统分为二手商品管理员,分拣员,配送员、普通用户注册登录,商品信息,用户需求以及地址的录入、删除、修改以及线上客服和线下一对一配送模块。

2. 使用sqlite数据库实现对交易平台用户信息的存储SQLite是一款轻量级的关系型数据库管理系统,它被广泛应用于嵌入式设备和移动应用中。下面是SQLite数据库的一些主要技术点介绍:

 数据类型:SQLite支持的数据类型包括INTEGER、REAL、TEXT、BLOB以及NULL。嵌套事务:SQLite支持嵌套事务,这意味着一个事务可以包含另一个事务。如果内部事务失败,所有的更改都将回滚,包括外部事务。 数据库触发器:SQLite支持触发器,这是一种在特定的数据库操作(如插入、更新或删除)发生时自动执行的程序。支持SQL:SQLite支持大部分的SQL语法和命令,包括SELECT、UPDATE、INSERT、DELETE、JOIN和SELECT INTO等。索引:SQLite支持创建索引来优化查询速度。ACID事务支持:SQLite支持ACID事务,确保数据的一致性、可靠性和持久性。备份和恢复:SQLite提供了诸如备份和恢复数据库等功能,使得操作数据库更加安全和方便。 跨平台支持:SQLite可运行于各种操作系统和平台上,包括Windows、Linux、iOS和Android等。

3. 实现人性化管理,在遇到特殊问题时可以线上申诉,平台进行人工客服反馈。并设有管理员,有权限能够对商品数量、商品信息进行增删改查。

4.校园二手市场主要分为客户端〈Android)和后台管理系统两大部分,客户端为用户提供给一个处理闲置物品、找到物美价廉的商品的平台,管理员可以管理用户信息和交互数据,还可以更新客户端的版本。本系统非常巧妙地迎合了学生对互联网+生活的需求,实现了信息的快捷共享和交互,充分发挥了校园跳蚤市场的作用,使闲置资源得到优化配置。

5.1详细设计

5.1.1 类图

校园闲置物品交易平台的Android设计与实现_第8张图片

   

5.2实现效果

    登录注册页面

校园闲置物品交易平台的Android设计与实现_第9张图片

登录注册部分代码

public class LoginActivity  extends AppCompatActivity {

    ActivityLoginStuBinding loginBinding;

    private String type = "";

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        loginBinding = ActivityLoginStuBinding.inflate(getLayoutInflater());

        setContentView(loginBinding.getRoot());

        initView();

    }

    private void initView(){

        loginBinding.editAddress.getText();

        loginBinding.editPwd.getText();

        loginBinding.radioGroupUnassured.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override

            public void onCheckedChanged(RadioGroup group, int checkedId) {

                //获取被选中的radiobutton的id

                RadioButton rcheck = (RadioButton) findViewById(checkedId);

                //获取

                String checkText = rcheck.getText().toString();

                type = checkText;

                SharePrefUtils.setLoginType(type);

                Toast.makeText(LoginActivity.this, "您选中的是:" + checkText, Toast.LENGTH_SHORT).show();

            }

        });

    }

        public void loginClick(View v) {

            int i = v.getId();

            if (i == R.id.btn_login) {

                loginBinding.progressCircular.setVisibility(View.VISIBLE);

//                try {

                   Thread.sleep(2500);

//                } catch (InterruptedException e) {

//                    e.printStackTrace();

//                }

                if(TextUtils.isEmpty(type)){

                    Toast.makeText(LoginActivity.this,"请选择用户类型",Toast.LENGTH_LONG).show();

                    return;

                }

                if(!TextUtils.isEmpty(loginBinding.editAddress.getText().toString())&&loginBinding.editAddress.getText().toString().equals("admin")){

                    if(!TextUtils.isEmpty(loginBinding.editPwd.getText().toString())&&loginBinding.editPwd.getText().toString().equals("admin123")){

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

                        intent.putExtra("user", "admin");

                        startActivity(intent);

                    }

                }else {

                    if (TextUtils.isEmpty(loginBinding.editAddress.getText().toString())) {

                        Toast.makeText(LoginActivity.this, "用户名不能为空", Toast.LENGTH_LONG).show();

                        return;

                    } else if (TextUtils.isEmpty(loginBinding.editPwd.getText().toString())) {

                        Toast.makeText(LoginActivity.this, "密码不能为空", Toast.LENGTH_LONG).show();

                        return;

                    }

                    UserDao userDao = new UserDao();

                    UserBean userBean = userDao.getUser(loginBinding.editAddress.getText().toString());

                    if (userBean != null) {

                        if (userBean.getName().toString().equals(loginBinding.editAddress.getText().toString())

                                && userBean.getPwd().toString().equals(loginBinding.editPwd.getText().toString())) {

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

                            intent.putExtra("user", userBean.getName().toString());

                            startActivity(intent);

                            loginBinding.progressCircular.setVisibility(View.GONE);

                        } else {

                            loginBinding.progressCircular.setVisibility(View.GONE);

                            Toast.makeText(LoginActivity.this, "类型不对或者密码错误!", Toast.LENGTH_LONG).show();

                        }

                    } else {

                        loginBinding.progressCircular.setVisibility(View.GONE);

                        Toast.makeText(LoginActivity.this, "还未注册 ,请先注册!", Toast.LENGTH_LONG).show();

                    }

                }

//                    }

//                });

            } else if (i == R.id.btn_register) {

                Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);

                startActivity(intent);

            } else if (i == R.id.btn_forget_pwd) {

//                forgetPwd();

            } else if (i == R.id.btn_tip) {

//                forwardTip();

            }

    }

}

首页页面

校园闲置物品交易平台的Android设计与实现_第10张图片

首页部分代码

public class MainPage extends AppCompatActivity implements View.OnClickListener{

    String TABLENAME = "iteminfo";

    Intent intent;

    byte[] imagedata;

    Bitmap imagebm;

    @RequiresApi(api = Build.VERSION_CODES.P)

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main_page);

        DatabaseHelper database = new DatabaseHelper(this);

        final SQLiteDatabase db = database.getWritableDatabase();

        GridView listView = (GridView)findViewById(R.id.listView);

        Map item;  // 列表项内容用Map存储

        final List> data = new ArrayList>(); // 列表

        Cursor cursor = db.query(TABLENAME,null,null,null,null,null,null,null); // 数据库查询

        CursorWindow cw = new CursorWindow("test", 999999999);

        AbstractWindowedCursor ac = (AbstractWindowedCursor) cursor;

        ac.setWindow(cw);

        if (cursor.moveToFirst()){

            while (!cursor.isAfterLast()){

                item = new HashMap();  // 为列表项赋值

                item.put("id",cursor.getInt(0));

                item.put("userid",cursor.getString(1));

                item.put("title",cursor.getString(2));

                item.put("kind",cursor.getString(3));

                item.put("info",cursor.getString(4));

                item.put("price",cursor.getString(5));

                imagedata = cursor.getBlob(6);

                imagebm = BitmapFactory.decodeByteArray(imagedata, 0, imagedata.length);

                item.put("image",imagebm);

                cursor.moveToNext();

                data.add(item); // 加入到列表中

            }

        }

        /*

        item = new HashMap();

        item.put("userid","ysh");

        item.put("image", R.drawable.buy_item1);

        item.put("title","一个九成新的篮球");

        item.put("kind","体育用品");

        item.put("info", "刚买没多久,希望转卖出去...");

        item.put("price", "59元");

        data.add(item);

        item = new HashMap();

        item.put("userid","xg");

        item.put("image", R.drawable.buy_item2);

        item.put("title","一个八成新的篮球");

        item.put("kind","体育用品");

        item.put("info", "刚买没多久,希望转卖出去...");

        item.put("price", "59元");

        data.add(item);

        item = new HashMap();

        item.put("userid","hdq");

        item.put("image", R.drawable.buy_item3);

        item.put("title","一个八成新的篮球");

        item.put("kind","体育用品");

        item.put("info", "刚买没多久,希望转卖出去...");

        item.put("price", "59元");

        data.add(item);

        */

        // 使用SimpleAdapter布局listview

        SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, R.layout.listitem, new String[] { "image", "title", "kind", "info", "price" },

                new int[] { R.id.item_image, R.id.title, R.id.kind, R.id.info, R.id.price });

        simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {

            @Override

            public boolean setViewValue(View view, Object data, String textRepresentation) {

                if(view instanceof ImageView  && data instanceof Bitmap){

                    ImageView iv = (ImageView)view;

                    iv.setImageBitmap( (Bitmap)data );

                    return true;

                }else{

                    return false;

                }

            }

        });

        listView.setAdapter(simpleAdapter);

        ImageView kind1 = (ImageView) findViewById(R.id.kind1);

        kind1.setOnClickListener(this);

        ImageView kind2 = (ImageView) findViewById(R.id.kind2);

        kind2.setOnClickListener(this);

        ImageView kind3 = (ImageView) findViewById(R.id.kind3);

        kind3.setOnClickListener(this);

        ImageView kind4 = (ImageView) findViewById(R.id.kind4);

        kind4.setOnClickListener(this);

        // 为列表项设置监听器

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView parent, View view, int position, long id) {

                intent = new Intent(MainPage.this, ItemInfo.class);

                intent.putExtra("id", data.get(position).get("id").toString()); // 获取该列表项的key为id的键值,即商品的id,将其储存在Bundle传递给打开的页面

                startActivity(intent);

            }

        });

        RadioButton btn1 = (RadioButton)findViewById(R.id.button_1);

        RadioButton btn2 = (RadioButton)findViewById(R.id.button_2);

        RadioButton btn3 = (RadioButton)findViewById(R.id.button_3);

        btn1.setOnClickListener(this);

        btn2.setOnClickListener(this);

        btn3.setOnClickListener(this);

    }

    @Override

    public void onClick(View v){

        switch (v.getId()){

            case R.id.kind1:

                Intent KindIntent1 = new Intent(this, KindPage1.class);

                startActivity(KindIntent1);

                break;

            case R.id.kind2:

                Intent KindIntent2 = new Intent(this, KindPage2.class);

                startActivity(KindIntent2);

                break;

            case R.id.kind3:

                Intent KindIntent3 = new Intent(this, KindPage3.class);

                startActivity(KindIntent3);

                break;

            case R.id.kind4:

                Intent KindIntent4 = new Intent(this, KindPage4.class);

                startActivity(KindIntent4);

                break;

            case R.id.button_1:

                Intent button1 = new Intent(MainPage.this, MainPage.class);

                startActivity(button1);

                break;

            case R.id.button_2:

                Intent button2 = new Intent(this,AddItem.class);

                startActivity(button2);

                break;

            case R.id.button_3:

                Intent button3 = new Intent(this,MyselfActivity.class);

                startActivity(button3);

                break;

        }

    }

}

我的页面

校园闲置物品交易平台的Android设计与实现_第11张图片


  1. 系统测试

6.1 测试目的

1、提高软件的质量

软件测试的首要目的就是提高软件的质量,也就是让用户对产品有更好的体验,保证软件的高质量。

2、保证软件的安全

软件测试的第二大目的就是保证软件的安全,有一些软件是经过数据加密的,比如各大银行系统的APP。涉及到资金的支出和存入,对软件的安全性要求是特别高的。所以要通过反复测试来提高产品的安全性,保证产品在上线之后不会出现bug,尤其对于金融方面的APP来说,任何漏洞都是致命的。

3、降低软件开发成本

软件测试的另外一个目的就是降低软件的开发成本,在开发过程中发现bug及时调整,这样的损失是很小的,一旦产品上线或是即将完成开发而发现bug,那么可能会造成产品大改动,这样就意味着以往的精力全部白费。因此测试的存在就是为了降低开发成本。比如迪士尼的一款狮子王的软件,借着狮子王的名声,预期本应是好评如潮,也能通过这款软件获益不匪。但因为在很多系统上都无法使用,所以造成了大量的用户投诉和下线、卸载等。对成本造成了非常大的损失。那如果当时这款软件能够在不同的系统上进行测试,在上线前将所有的问题全部解决掉,肯定会大大降低成本。

4、降低企业风险

除了降低开发成本,还可以降低企业风险,试想,如果软件存在的问题过多,毫无疑问会影响企业的信誉,最终直接导致企业的合作企业变少,直接损害公司的收益。但如果有测试人员在中间严格把关,就完全不会出现这样的问题。

5、提升用户体验感

开发人员在开发过程中都是以顺向思维来写程序代码的,所以很少有开发人员能够站在用户角度去思考,但测试人员不一样,测试要以逆向思维来思考程序会在哪一步有问题,站在用户的角度进行测试,这样上线的产品将很符合用户的需求,用户使用时也比较顺手,增加用户体验感

6.2 测试计划

根据设计的需求编写测试计划

测试计划如下表2-1所示。

表2-1  测试计划

测试模式

测试功能

测试步骤

期望效果

功能测试

注册登录

启动项目 注册用户  然后登录

实现验证成功

页面能否跳转

单击页面

页面实现跳转

发布二手商品

发布不同类别的的商品

显示正常

查看个人信息

不进入我的页面

个人信息展示正常

6.2.1测试方法

测试方法包括黑盒测试、白盒测试、灰盒测试、手动测试和自动化测试。 黑盒测试就是把软件系统当作一个“黑箱”,无法了解或使用系统的内部结构及知识,进行的测试。 一般刚入门的测试都是从黑盒测试开始的。 白盒测试就是设计者可以看到软件系统的内部结构,并且使用软件的内部知识来指导测试数据及方法的测试

6.4 测试评价

测试是为了避免使用过程中出现一些影响用户使用产品的问题,尽量发现项目中存在的问题;

  1. 总结与展望
    1. 全文总结

本系统使用Android 系统 gradle 4.1.2版本编译,SQLite数据库缓存在Android本地数据库,并达到了良好实际效果。

此项目离使用还存在很多的不足,希望能在积累知识点的同时继续完善功能,尽量满足每一个功能,能够达到投入使用的状态,解决用户学习英语的需求,主要问题是云交互阶段和跨端的调式,也是我需要继续挖掘和学习的地方;

此项目虽然不是很完美,但是从中学习到了一个项目的整体设计和实现过程,把理论知识应用到实践中,提升实践能力。本文工作有:

前校园二手商品繁杂、有利用价值的物品随意被废弃,面对这个问题,本文设计一个基于Android的前后端结合的校园闲置物品交易平台系统,主要完成以下工作:

1. 进行校园市场以及学生需求的分析,将系统分为二手商品管理员,分拣员,配送员、普通用户注册登录,商品信息,用户需求以及地址的录入、删除、修改以及线上客服和线下一对一配送模块。

2. 使用sqlite数据库实现对交易平台用户信息的存储。

3. 实现人性化管理,在遇到特殊问题时可以线上申诉,平台进行人工客服反馈。并设有管理员,有权限能够对商品数量、商品信息进行增删改查。

4.校园二手市场主要分为客户端〈Android)和后台管理系统两大部分,客户端为用户提供给一个处理闲置物品、找到物美价廉的商品的平台,管理员可以管理用户信息和交互数据,还可以更新客户端的版本。本系统非常巧妙地迎合了学生对互联网+生活的需求,实现了信息的快捷共享和交互,充分发挥了校园跳蚤市场的作用,使闲置资源得到优化配置。

    1. 工作展望

目前市场上电商发展是非常成熟,随着移动互联网的普及,闲置物品网络交易平台日益成为二手货交易的“主阵地”。交易平台上闲置物品的种类不断增加,喜爱淘货的人群,年轻化的程度也越来越高。在线上交易平台上,卖家可以在平台上发布自己所需要出售的闲置物品,如果有其他感兴趣买家,通常买卖双方可以在线交流,协商价格,然后在平台上或平台下进行交易。

随着消费理念的转变,人们对二手交易的接受程度明显提升,即使闲置物品消费并不是刚性需求,也不妨碍二手电商市场的发展。购买二手商品是一种消费理念,更是一种生活理念。

人们对物质的需求从“是否拥有”转向“享受更好”,物品更新换代频率加快,可供人们急性二手交易的存量资源不断增加。另一方面,循环经济的理念与法深入人心,“高性价比”的二手商品成为越来越多人购物时的第一选择。供需两方面的共同推动,催生出巨大的二手物品交易市场。此外,受经济的快速发展,国家的政策推动扶持,互联网电商的蓬勃发展,人们消费观念的改变,物流成本的降低等推动因素的影响,预计未来二手商品交易平台市场将快速发展。

   此外,在未来,随着政府对二手交易市场越来越重视,二手商品交易的行业标准也将更统一,信息更透明,服务更完善。

二手商品交易平台的成功取决于平台在二手商品价值链中吸引消费者、第三方商家或其他参与者的能力,以及平台为他们提供卓越体验的能力,而这又取决于多种因素。这些因素包括平台各方面的能力:

(1)及时拓展新的产品类别并提供额外的增值服务,以满足消费者和第三方商家不断变化的需求,

(2)保持平台检验和定价过程的可靠性,

(3)向消费者和第三方商家提供符合他们期望的优质产品,

(4)提供有竞争力的价格,

(5)维护和提高线下网络和在线交易的运营效率、可靠性和客户体验以及服务质量,

(6)提供优质的售后服务等

平台各方面的能力形成独特的竞争优势后,平台上交易的消费品数量就会增多,从而使二手商品交易额增加,并直接影响平台的收入。此外,二手商品交易平台的另一个重要的收入来源是广告


致谢

在老师的耐心指导下完成了此项目及论文,为了保证我们毕业设计的正常进行,学院抽调了优秀的老师指导我们进行毕业设计,并且不时地询问我们毕业设计的进展情况。没有老师们的细心指导我的论文与系统就不可能顺利的完成,再次对你们表示衷心地感谢。老师认真负责的工作态度、严谨的治学风格,使我深受启发;同时也很感谢帮助过我和我一同探讨问题的同学们。为我们这次设计的正常开展提供了必要的基础。本次毕业设计,就要画上一个句号了。

感谢学院给我提供学习的平台,让我在这里接受了系统的学习。

感谢所有关心、支持、帮助过我的良师益友。

最后,向在百忙中抽出时间对本文进行评审并提出宝贵意见的各位老师表示衷心地感谢!


参考文献

 [1]陈春龙. 基于混合推荐的校园二手交易系统的研究与实现[D].辽宁大学,2022.

[2]刘垚祥,罗海霞,吴莹滢,陈关关,叶凯欣.基于Android的校园通APP开发[J].电脑编程技巧与维护,2022(08).

[3]陈镇欣,张明庆,卢宇立.校园二手交易平台小程序的设计与实现[J].福建电脑,2021,37(08).

[4]Jacob May. Android Apps With App Inventor: The Fast And Easy Way To Build Android Apps[M].Tritech Digital Media,2020.

[5]张子欣,高敏,王斯宇,丁雨辰,吴逸帆.校园内部二手交易平台研究[J].合作经济与科技,2020(09).

[6]高慧娟.基于移动学习的“Android软件开发”数字资源库的建设研究[J].科技与创新,2022(17).

[7]焦宇,李民,王欢,余开朝.基于MySQL性能调优的推荐系统优化设计[J].软件导刊,2022,21(09).

[8]李艳杰.基于JAVA与MySQL数据库的移动端题库练习系统的设计与实现[J].黑龙江科学,2022,13(02).

[9]Olga Vilches. Fundamentals Of Android Programming[M].Tritech Digital Media,2022.

  1. Priyanka Tyagi. Pragmatic Flutter:Building Cross-Platform Mobile Apps for Android, iOS, Web & Desktop[M].CRC Press,2021.

项目源码以及论文可以私聊我

你可能感兴趣的:(android)