【毕业设计.课程设计】基于Android的校园闲置物品交易平台的设计与实现

摘  要

随着移动互联网迅速发展,拥有移动应用的人数剧增,同时电商也飞快的发展,移动硬件终端的轻巧方便,使手机已成为人们日常生活中的一部分,Android手机操作系统以其特有的系统语言开放性,软件市场多样性,已成为手机操作系统的主流。本文以校园商品交易全过程为研究对象,以商品购买流程为研究线索,跟踪用户商品购买动态,反馈商品购买评价,现在线交易闲置物品,为在校人员提供一个完全开放的二手交易平台,同时,也在一定程度上方便了学生间的相互交流为用户提供友好的购物体验为目的,设计一款有价值的Android系统的校园二手应用,基于安卓平台的校园二手商品交易APP设计与实现,客户端采用Android Studio作为开发平台,实现用户管理、商品分类管理、商品信息管理、用户留言管理、管理员密码修改等功能;客户端主要实现了用户登录、注册、商品信息发布、买家留言、个人信息修改等功能;

关键词:互联网;交易平台;移动应用系统设计


Abstract

With the rapid development of the mobile internet, the number of people with mobile applications has increased dramatically, while e-commerce has also developed rapidly. The lightweight and convenient mobile hardware terminals have made mobile phones a part of people's daily life. Android mobile phone operating system has become the mainstream of mobile phone operating system with its unique system language openness and software market diversity. This paper takes the whole process of campus commodity trading as the research object, takes the commodity purchase process as the research clue, tracks the user's commodity purchase dynamics, feeds back the commodity purchase evaluation, and now trades idle goods online, providing a completely open second-hand trading platform for the school staff, at the same time, it also facilitates the mutual exchange between students and provides users with a friendly shopping experience to a certain extent, Design a valuable campus second-hand application of Android system, and design and implement the campus second-hand commodity trading APP based on Android platform. The client uses Android Studio as the development platform to realize user management, commodity classification management, commodity information management, user message management, administrator password modification and other functions; The client mainly realizes user login, registration, commodity information release, buyer message, personal information modification and other functions;.

Key Words: internet; Trading platform; Mobile application system design

 

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 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,本系统设计主要包含,依据设计的总体架构对各个功能模块进行划分,并分别对各个模块作详细设计。同时,设计完成数据库的逻辑结构,以配合功能模块的数据处理;

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

 

系统方案设计

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

 

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

 

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

      1.  系统整体框架图

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

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

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

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

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

 

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

   首页管理模块主要包含展示商品列表以及分类展示相关的发布的列表 

      1. 个人中心

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

      1. 发布页面

   用户根据自己需求可以发布生活日常,发布学习相关,电子产品等等

      1. 评价   

 对二手交易的商品进行评价,可以将自己购买或者发布的商品进行评价

      1.  订单查询

    查看用户登录的购买订单

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

六大设计原则主要是指:

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

开闭原则(Open Closed Principle);

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

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

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

依赖倒置原则(Dependence Inversion Principle)

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

4.3.2 实体类图

用户信息实体图

 

商品实体类图

 

    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数据库实现对交易平台用户信息的存储。

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

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

5.1详细设计

5.1.1 类图

 

   

5.2实现效果

    登录注册页面

 

 

登录注册部分代码

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();

            }

    }

}

首页页面

 

首页部分代码

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<String, Object> item;  // 列表项内容用Map存储

        final List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); // 列表

        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<String, Object>();  // 为列表项赋值

                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<String, Object>();

        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<String, Object>();

        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<String, Object>();

        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;

        }

    }

}

我的页面

 


  1. 系统测试

6.1 测试目的

1、提高软件的质量

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

2、保证软件的安全

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

3、降低软件开发成本

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

4、降低企业风险

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

5、提升用户体验感

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

6.2 测试计划

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

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

表2-1  测试计划

测试模式

测试功能

测试步骤

期望效果

功能测试

注册登录

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

实现验证成功

页面能否跳转

单击页面

页面实现跳转

发布二手商品

发布不同类别的的商品

显示正常

查看个人信息

不进入我的页面

个人信息展示正常

6.2.1测试方法

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

6.2.2测试流程

一、项目测试流程步骤有哪些?

1. 测试需求提取与分析。根据需求说明书分析测试功能点,功能是否能够满足用户的实际使用场景,产出测试点。

2. 测试设计。把测试需求转化为具体的测试工作,可以通过等价类划分法等测试设计方法进行业务逻辑设计,搭建测试框架等。

3. 测试用例执行与回归。根据测试用例执行功能测试、性能测试等工作,对有缺陷的模块进行回归测试等。

4. Bug管理。测试过程中记录bug发现过程,bug对系统造成的影响,进行bug管理。

5. 总结。对项目测试过程进行总结归纳,为以后碰到同样的bug提供依据

6.2.3测试用例

注册模块,注册账号是否成功,注册账户是否登录正常

首页商品浏览模块,首页展示所以发布的列表信息情况,以及根据分类情况展示相关的产品,点击该商品可进入详情页面;

发布模块,是否可以根据不同类别的类目发布闲置商品

个人信息模块,展示个人信息

6.3 测试实施

当设计好用例、数据准备好后,就可以将设计好的成果应用于软件,如果在执行用例的过程中,发现软件执行的结果和测试用例中的预期结果不一致,那么,这就是软件缺陷即我们通常听到的软件bug,我们需要把该缺陷报告给相关开发人员进行修改,如何报告呢,即需要记录缺陷,也就是我们通常所说的缺陷报告。那么缺陷报告包含哪些内容;缺陷严重程度:表示软件缺陷所造成的危害的恶劣程度 。缺陷严重程度的分类在不同的软件公司,分类有的也不同,在此给出一种分类,内容如下:

Fatal:致命的错误,造成系统或应用程序崩溃、死机、系统悬挂,或造成数据丢失、主要功能完全丧失等。

Critical:严重错误,主要指功能或特性没有实现,主要功能部分丧失,次要功能完全丧失,或致命的错误声明。

Major:主要错误,这样的缺陷虽然不影响系统的使用,但没有很好的实现功能,没有达到预期效果。如提示信息不太准确,或用户界面差,操作时间长等。

Minor:一些小问题,对功能几乎没有影响,产品及属性仍可使用。

Suggestion:一些友好的建议。

缺陷优先级:表示修复缺陷的先后次序的指标。优先级的分类在不同的软件公司,分类也不尽相同,一般优先级的划分用ABCD或数字1—4表示,A或1表示最高级别,D或4表示最低级别。

最高优先级:立即修复,停止进一步测试。

 次高优先级:在产品发布之前必须修复。

 中等优先级:如果时间允许应该修复。

n最低优先级:可能会修复,但是也能不修复。

6.4 测试评价

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
基于springboot的校园闲置物品交易系统的设计实现包括以下几个方面。 首先,系统需要有用户管理模块。用户可以注册、登录、修改个人信息等操作。用户信息包括用户名、密码、学校、班级等基本信息。 其次,系统需要有物品管理模块。用户可以发布、编辑、删除闲置物品的信息。物品信息包括物品名称、描述、价格、交易方式等。同时,系统需要支持物品的分类和搜索功能,方便用户快速找到自己需要的物品。 然后,系统需要有交易管理模块。用户可以浏览自己发布的物品,进行购买或者预定操作。系统需要有交易记录功能,即用户可以查看自己的交易历史,并与对方进行评价和评分。 另外,系统还需要有消息通知功能。用户之间可以通过系统发送消息,进行交流和协商。系统需要有消息盒子和消息提醒功能,方便用户及时处理交易相关的事务。 最后,系统需要有权限管理模块。对于某些操作(如删除物品、评价用户等),只有管理员具有权限进行操作。系统需要为管理员提供相应的权限管理功能,保证系统的安全和稳定。 实现方面,可以使用springboot框架进行开发,结合数据库存储用户信息、物品信息和交易记录等。前端可以使用HTML、CSS和JavaScript进行开发,通过Ajax和后台进行数据交互。同时,可以使用一些开源框架来简化开发,如Thymeleaf、Spring Security等。 总的来说,基于springboot的校园闲置物品交易系统的设计实现需要考虑用户管理、物品管理、交易管理、消息通知和权限管理等功能,并在开发中合理利用springboot框架和前端开发技术,确保系统的稳定性和安全性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码农乐园

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

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

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

打赏作者

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

抵扣说明:

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

余额充值