深藏blue——团队编程实战

深藏blue 团队 2023-04-22 23:32:29
这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里软工实践——团队编程实战
这个作业的目标实现澳网竞猜完整GUI界面及基础功能,有余力实现附加功能
其他参考文献相关链接置于文末

目录

  • 1. 项目仓库地址
  • 2. 程序运行方式
  • 3. Gitcode 的提交日志
  • 4. 问题与回答
  • 5. 功能实现思路描述
  • 5.1 AddRecord
  • 5.2 FindMessageById
  • 5.3 AddUser
  • 5.4 FindUserByOpenId
  • 5.5 FindUserCompetition
  • 5.6 IsUserExist
  • 5.7 UpdateMessage
  • 6. 程序截图说明
  • 7. 功能需求分析建模
  • 7.1 需求分析(NABCD 模型)
  • 7.2 功能结构图
  • 7.3 用况图
  • 7.4 类图
  • 8. 组员职责分工及贡献比例
  • 9. 合作中遇到的问题及解决方法
  • 10. PSP表格
  • 11. 参考文献

1. 项目仓库地址

项目仓库链接

微信小程序体验二维码,体验版需要加入体验账号,需要的请找组长加入体验账号

二维码链接:http://101.42.2.242/images/%E6%BE%B3%E7%BD%91%E7%8C%9C%E7%90%83/QR.jpg

2. 程序运行方式

(1)微信扫描小程序测试二维码进入小程序测试版本

(2)登录账户:15105060708

​ 密码:123456

​ (需要用以上的账户和密码才能成功登录)

管理员界面暂时无法测试,因为测试版本无法获取openid,只有上线后才能获取到openid才能进入管理员界面

3. Gitcode 的提交日志

commit次数取所有分支的次数总和

组员commit次数
222000429蔡佳鑫30
052006130谢思雄10
222000129黄钰婷26
222000131魏诗卉34
222000434杨蕊蘭28
222000433罗彤10
222000227周禹辰4
222000235阿布都拉·托合提5
222000206甘圣鑫10
小组commit次数
前端小组72
后端小组76

截图仅展示部分信息

在这里插入图片描述

4. 问题与回答

  • 用户如何快速知道有竞猜功能并参与竞猜?

竞猜功能就在小程序的首页,在用户授权登录后即可看到竞猜功能。

  • 竞猜结果如何告知用户?

当比赛结束后,管理员将信息处理后,会通过微信的通知告知用户。通过微信提供的一个接口,可以实现给用户发送通知。可以让用户快速知道自己的猜球结果。

  • 如何保证一人一号?防止用户多次注册账号参与竞猜。

这个也是通过微信授权时的唯一的openID来进行登录,当用户是第一次登录时,对其进行信息的填写,即注册;当用户已登录过,则不可重复注册。用微信提供的唯一的openID来保证一人一号。

5. 功能实现思路描述

5.1 AddRecord

功能描述:该功能是用于在用户下注完后,将用户投票的记录存入数据库。

功能实现思路:通过按下下注后返回的信息和用户的openID,将其存入数据库,便于后续读取用户的战绩记录展示于个人中心界面

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  var OPENID=wxContext.OPENID;
  return await db.collection('UserCompetiton').add({
    // data 字段表示需新增的 JSON 数据
    data: {
      CompetitionId:event.CompetitionId,
      openId:OPENID
    }
  })
}

5.2 FindMessageById

功能描述:该功能是用于竞猜首页展示所有的赛程的信息。

功能实现思路:通过日期升序排序获取数据库中的赛程信息,展示在竞猜首页。

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  return await db.collection("CompetitionMessage").orderBy("RaceTime","asc").get()
}

5.3 AddUser

功能描述:该功能用于将新用户的信息传入数据库

功能实现思路:通过IsUserExist判断该用户是否已注册过,如果是未注册的用户则将信息传入数据库。

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  var OPENID=wxContext.OPENID;
   return await db.collection('User').add({
    // data 字段表示需新增的 JSON 数据
    data: {
      Name:event.Name,
      Address:event.Address,
      Integral:0,
      OpenId:OPENID,
      Profit:0,
      ProfitRate:0,
      Telephone:event.Telephone,
      VoteCount:0,
      Image:event.Image
    }
  })
}

5.4 FindUserByOpenId

功能描述:该功能用于通过openid查找user的信息。

功能实现思路:通过唯一的openid在数据库中查找到唯一的一条数据记录,并返回。

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  var OPENID=wxContext.OPENID;
  db.collection('User').where({
    OpenId:OPENID
  }).update({
    data:{
      Integral:_.inc(5)
    }
  });
  return await db.collection("User").where({
    OpenId:OPENID
  }).get()
}

5.5 FindUserCompetition

功能描述:该功能用于查找user的所有战绩展示于个人信息界面

功能实现思路:通过唯一的openid在数据库中查找到唯一的一条数据记录,并返回。

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  return await db.collection("UserCompetiton").where({
    openId:OPENID
  }).get()
}

5.6 IsUserExist

功能描述:该功能用于通过判断用户是否是新用户

功能实现思路:通过获取到的openid在数据库中查找,若有查找到则不是新用户,即存在,返回true;若查不到则是新用户,返回false。

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  var OPENID=wxContext.OPENID;
  //通过openid获取数据库中的记录数
  var count=db.collection("User").where({
    OpenId:OPENID
  }).count();
  
  if( count==0 )  return false;
  else return true;
}

5.7 UpdateMessage

功能描述:该功能用于更新投票积分与赔率

功能实现思路:用户投票后,更新用户的积分,并重新计算赔率,更新赔率。当投的积分越多时,赔率按一定的比率降低。

// 云函数入口函数
exports.main = async (event, context) => {
   if( event.flag==1 ) {
    return await db.collection('CompetitionMessage').doc(event._id).update({
      data:{
        ParticipantOneIntegral:_.inc(1),
        VoteCount:_.inc(1)
      }
    })
  }
  else {
    db.collection("CompetitionMessage").doc(event._id).update({
      data:{
        ParticipantTwoIntegral:_.inc(1),
        VoteCount:_.inc(1)
      }
    })
  }
}

6. 程序截图说明

注:页面颜色过多导致录制gif文件较大无法上传,使用全局色表可以有效减少gif大小但颜色会变得比较阴间...图片仅供参考
1.基础功能

  • 概览

  • 页面下方的Tab导航条可以在首页、排行榜和个人页面间切换

    在这里插入图片描述

  • 登录页

  • 因时间有限,且小程序正式上线后才能获取OpenId来进行验证唯一用户,但上线需要一定时间审核,故表单登录功能尚未完善,只能使用默认账户登录。
       默认账号:15105060708
       密码:123456

    在这里插入图片描述

  • 首页

  • 首页上方有可滑动的轮播图

    在这里插入图片描述

  • 点击赔率数字既可下注

    在这里插入图片描述

  • 排行榜

    在这里插入图片描述

4.附加功能展示

  • 赔率计算:

    详见5.7

    在这里插入图片描述

  • 管理员界面:
    概览如下,首页由三个按钮分别链接其他功能页面进行管理

    在这里插入图片描述

  • 管理员可以记录比分并输入结束时间

    在这里插入图片描述

  • 管理员可以修改兑换物品积分和名称

    在这里插入图片描述

  • 管理员可以查看和封禁用户

    在这里插入图片描述

7. 功能需求分析建模

7.1 需求分析(NABCD 模型)

N(Need,需求)

  • 澳大利亚网球公开赛备受广大体育爱好者所喜爱,用户希望能有一个澳网竞猜平台,提供一个充满趣味和挑战的在线体育竞猜体验。
  • 竞猜玩法简单,收益直观,看比赛的用户一般都会参与到其中。

A(Approach,做法)

  • 可以先搭建一个小程序初版。完成基本功能后,看看用户有什么需求,或者改进的地方,进行优化完善。
  • 协同使用微信开发者工具和GitCode进行团队开发。
  • 前端页面的编写,团队开发过程中统一参考官网提供的文档。
  • 前后端数据的交互使用云开发的方式进行,包括云数据库、云函数、云存储、云调用等。

B (Benefit,好处)

  • 使用微信小程序实现,无需下载,占用内存空间小,运行速度快。
  • 页面简洁大方,模块清晰,无垃圾广告,用户体验感好。
  • 操作简单,不存在过多功能与数据,对于初次接触的用户十分友好。

C (Competitors,竞争)

经过分析,我们的主要竞争对手为其他小组的项目,澳大利亚网球公开赛相关平台的竞猜模块。

我方优势

  • 模块清晰,操作简单,界面美观,用户体验好。
  • 相较于传统服务器方式,云开发方式开发成本低,开发速度快,部署简单。
  • 流量入口多,传播速度快。常见的流量入口有微信搜索、发现入口、线下小程序、小程序码、公众号内链、转发小程序等。用户扫码/聊天分享/微信搜索即可分享传播我们的产品。
  • 无需下载安装,系统契合度高,无需考虑手机/电脑系统环境。

我方劣势

  • 我方数据主要从官方网站爬取,可能存在数据较少等问题,相对于官方网站而言,官方网站的数据来源更丰富,能够提供各种用户需要的赛事信息。
  • 我方结构简单,维护成本低的同时网页的响应、交互速度必然有所下降,可能会造成用户体验感下降。

D(Delivery,推广)

  • 首先可以把小程序介绍给身边的同学和朋友等,收集他们的反馈,再让家人朋友再分享给身边的人。
  • 线下地推、小程序二维码推广、群聊传播
  • 通过微博,抖音,b站等社交平台推广,同时给用户提供反馈方式,积极维护提问和评论区。
  • 优化小程序描述关键词。微信小程序搜索支持模糊匹配,在设置小程序的关键词和描述时,注意结合用户的使用场景和搜索习惯设置。
  • 可以以小程序名创建一个官方微博账号或微信公众号。例如,微信公众号推文内插入文字、图片等引导进入小程序卡片,点击直接跳转小程序。

    7.2 功能结构图

img

7.3 用况图

img

7.4 类图

img

8. 组员职责分工及贡献比例

小组学号姓名
前端小组222000429蔡佳鑫、052006130谢思雄、222000129黄钰婷、222000433罗彤、222000235阿布都拉·托合提
后端小组222000131魏诗卉、222000434杨蕊蘭、222000227周禹辰、222000206甘圣鑫
组员工作内容贡献比例
222000429蔡佳鑫博客、管理员界面的前端10.8%
052006130谢思雄排行榜界面的前端11.3%
222000129黄钰婷首页竞猜界面的前端12.9%
222000131魏诗卉后端的云函数、API13.7%
222000434杨蕊蘭后端的云函数13.3%
222000433罗彤博客、管理员界面的前端11.3%
222000227周禹辰后端的云函数6.5%
222000235阿布都拉·托合提个人中心界面的前端、管理员界面的前端11.2%
222000206甘圣鑫后端的云函数6.5%

9. 合作中遇到的问题及解决方法

  • 222000429蔡佳鑫
  • 遇到的问题:微信开发工具自带的上传gitcode的工具时好时坏,工具虽然好用,可以实现及时 的拉取与推送,但当长时间未拉取与推送后,与时代“脱轨”,会出现很多错误......

  • 解决方法:最终实在没用办法,跳过工具直接通过gitcode上传代码。

  • 052006130谢思雄
  • 遇到的问题:1>如何制作排行榜表格?

    ​ 2>如何制作排行榜背景图?

    ​ 3>如何获取用户的昵称和头像?

  • 解决方法:前两个问题都是属于基础的前端问题,借助chatgpt即可快速完成

​ 1>

​ 2>

​ 3>观看b站视频学习:微信小程序获取用户头像昵称自动登录2023_哔哩哔哩_bilibili

  • 222000129黄钰婷
  • 1)遇到的问题:云开发 git pull 拉取团队项目时,提示callback returned unsupported credentials type,
    从最字面上的意思理解是在拉取或者合并时,没有拿到有效凭证,也就是git的配置上有问题。
    网上提示可能是更新了开发者工具或者是用户名密码输入错误导致的,那么你就需要检查一下你的版本管理的设置
    打开你的版本管理,打开设置重新输入你的用户名和密码再试一下。但是我之前git pul ,git push了十几次都是可以的。

    而且我配置的时候用的是ssh公钥,根本就没有输入过用户名和密码。

  • 解决方法:不用微信开发者工具提供的git pull 功能,直接在项目根目录下用git bash操作。

  • 2)遇到的问题:微信小程序组件swiper(轮播图)无法显示,使用了components引入swiper和直接在wxml文件引用swiper组件两种方法,都没成功。
    后面在微信开发者工具的调试器的Wxml页面发现,swiper没有添加父级容器。

  • 解决方法:给swiper添加一个父级容器view。

  • 222000131魏诗卉
  • 1)遇到的问题:之前没有使用过微信开发者工具,不知道如何通过微信开发者工具直接实现团队项目并上传到gitcode。

  • 解决方法:在这里我们花了挺长时间的,又因为时间紧迫,所以我们安排两个人研究这个团队合作的方法,而其余分别去写API接口和前端页面调用。最终我们发现,微信开发者工具中有有一个“版本管理”的按钮功能,通过这个按钮中的“拉取”、“上传”,即可以分别实现gitcode的上传和拉取功能,达到团队合作的目的。

  • 心得:相比于直接就开始盲目的编程,事先熟悉一下编程工具是非常重要的,他能解决很多本来不该存在的Bug。

  • 2)遇到的问题:微信开发者工具中的云函数一开始一直报错,无法运行。

  • 解决方法:通过报错的信息在网上查找资料和文档,以及微信官方的文档,我们才发现云函数中的配置是非常多的,而我们一开始的学习视频中并没有提到这一点,因此我们也下意识的忽略了。最终,还是通过官方文档解决了问题。

  • 心得:遇到问题不要盲目查询,或许可以查找一下官方的手册(前提是他是中文的T_T

  • 3)遇到的问题:时间短暂,前台和后台需要同步运行,该如何协调?

  • 解决方法:这个问题我们最后决定花半个小时的时间先写一下前端需要的、后端将要实现的API的接口,之后无论是前端人员还是后端人员都根据API进行接口的调用或编写。

  • 心得:这点很赞,只需要一点点的时间,就能大幅度提高开发的效率,且接口代码规范。非常适合之后的编程大作业继续实现。

  • 222000434杨蕊蘭
  • 遇到的问题:使用微信开发者工具编写云函数并运行时报错functionname parameter could not be found

  • 解决方法:通过搜索查询相关问题得知是由于环境ID未配置

  • 222000433罗彤
  • 遇到的问题:使用微信云开发进行多人合作的问题
    ①由于对微信开发者工具的不熟悉,我们不知如何在其中连接团队远程gitcode仓库;②明明仓库文件夹是空的,却不能在其中新建项目,开发者工具总会提醒其中已有项目

  • 解决方法:①通过不断探索试错,我们摸索出:克隆团队仓库到本地→在仓库中创建项目→提交项目→其他成员克隆→导入项目→配置git仓库认证→抓取仓库指定分支→使用拉取推送等操作进行合作开发的方式。
    ②删除本地的项目文件不会删除开发者工具内的项目记录,若记录存在,则工具会认为项目文件存在,故每次删除项目文件后,应及时删除记录文件。

  • 222000227周禹辰
  • 遇到的问题:对于前后端的分离和api的设计不了解

  • 解决方法:上网查找相关的资料和教程,主要通过csdn交流社区和chatgpt,两种方法各有利弊,相互结合最后获得结果。如果实在无法解决也可以向组员寻求帮助,这就是团队编程的优势所在。

  • 222000235阿布都拉·托合提
  • 遇到的问题:微信开发者工具提供手机微信预览功能,但是有些功能的实现和页面的显示上存在不一致,还有对于小程序开发所使用的组件和函数不熟练。

  • 解决方法:通过浏览器浏览和查看微信开发者工具中的帮助文档,基本已解决。

  • 222000206甘圣鑫
  • 1)遇到的问题:在编写后端程序后尝试与前端对接时会出错

  • 解决方法:起初以为是后端api的数据格式有出现错误,因此排查了所有api的数据格式都没找到,结果在前端api检查后发现是漏写了一个数据的api,发现之后很快就解决了

  • 心得:有时候只细致检查一处是发现不了错误的,从全局上检查有可能更快发现错误。

  • 2)遇到的问题:后端程序无法保持持续接受数据

  • 解决方法:通过报错的信息在网上查找资料和文档,以及微信官方的文档,才发现是因为云函数中的配置出错导致的,而我由于没有完整学完学习视频因此无法意识到这个错误了。最后在进一步学习了相关配置的知识后解决了这个问题

  • 心得:无论要完成什么工作,最重要的总是事前的准备工作要完善。

  • 3)遇到的问题:如何在短时间内完成软件的设计方案与开发安排

  • 解决方法:我们通过参照其它团队分享的软件开发建议以及我们至今的团队协作经历,很快就完成了设计和工作安排

  • 心得:有一个成熟的团队做参考可以从中学习到很多提高团队合作效率的办法,这也是为什么加入过一个团队更能提高总体素质。

10. PSP表格

  • 222000429蔡佳鑫
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2020
• Estimate• 估计这个任务需要多少时间2020
Development开发655635
• Analysis• 需求分析 (包括学习新技术)150180
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3045
• Coding• 具体编码360350
• Code Review• 代码复审3040
• Test• 测试6040
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计695685
  • 052006130谢思雄
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2020
• Estimate• 估计这个任务需要多少时间2020
Development开发565585
• Analysis• 需求分析 (包括学习新技术)120130
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3045
• Coding• 具体编码300350
• Code Review• 代码复审3040
• Test• 测试6040
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计605635
  • 222000129黄钰婷
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划1520
• Estimate• 估计这个任务需要多少时间1520
Development开发605655
• Analysis• 需求分析 (包括学习新技术)100110
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3045
• Coding• 具体编码360420
• Code Review• 代码复审3020
• Test• 测试6040
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计640705
  • 222000131魏诗卉
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划1010
• Estimate• 估计这个任务需要多少时间1010
Development开发615685
• Analysis• 需求分析 (包括学习新技术)120130
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1010
• Design• 具体设计4045
• Coding• 具体编码360400
• Code Review• 代码复审3050
• Test• 测试4540
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计645725
  • 222000434杨蕊蘭
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划1515
• Estimate• 估计这个任务需要多少时间1515
Development开发625665
• Analysis• 需求分析 (包括学习新技术)120150
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3025
• Coding• 具体编码360400
• Code Review• 代码复审3040
• Test• 测试6030
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计660710
  • 222000433罗彤
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2020
• Estimate• 估计这个任务需要多少时间2020
Development开发645625
• Analysis• 需求分析 (包括学习新技术)100110
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3045
• Coding• 具体编码400370
• Code Review• 代码复审3040
• Test• 测试6040
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计695685
  • 222000227周禹辰
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2020
• Estimate• 估计这个任务需要多少时间2020
Development开发505625
• Analysis• 需求分析 (包括学习新技术)6080
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3045
• Coding• 具体编码300320
• Code Review• 代码复审3050
• Test• 测试6030
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计545575
  • 222000235阿布都拉·托合提
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划2020
• Estimate• 估计这个任务需要多少时间2020
Development开发645625
• Analysis• 需求分析 (包括学习新技术)100110
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3045
• Coding• 具体编码400370
• Code Review• 代码复审3040
• Test• 测试6040
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计695685
  • 222000206甘圣鑫
PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划1015
• Estimate• 估计这个任务需要多少时间1015
Development开发475535
• Analysis• 需求分析 (包括学习新技术)6080
• Design Review• 设计复审1010
• Coding Standard• 代码规范(为目前的开发制定合适的规范)1510
• Design• 具体设计3045
• Coding• 具体编码300320
• Code Review• 代码复审3050
• Test• 测试3020
Reporting报告2030
• Size Measurement• 计算工作量1015
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划1015
合计505580

11. 参考文献

微信官方文档

git-代码撤销、回滚到任意版本

小程序云函数遇到的问题(未安装wx-server-sdk依赖 | errMsg: Environment not found)

...全文
476 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

看PSP表格,小组成员效率方面控制的不错呀!赞!
未来如果要继续迭代,类图你们认为还可以如何改进?

686

社区成员

发帖
与我相关
我的任务
社区描述
2023年福州大学软件工程实践课程W班的教学社区
软件工程团队开发软件构建 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • aboutazhang
  • 郭渊伟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧