686
社区成员




这个作业属于哪个课程 | 2023年福大-软件工程实践-W班 |
---|---|
这个作业要求在哪里 | 软工实践——团队编程实战 |
这个作业的目标 | 实现澳网竞猜完整GUI界面及基础功能,有余力实现附加功能 |
其他参考文献 | 相关链接置于文末 |
微信小程序体验二维码,体验版需要加入体验账号,需要的请找组长加入体验账号
二维码链接:http://101.42.2.242/images/%E6%BE%B3%E7%BD%91%E7%8C%9C%E7%90%83/QR.jpg
(1)微信扫描小程序测试二维码进入小程序测试版本
(2)登录账户:15105060708
密码:123456
(需要用以上的账户和密码才能成功登录)
管理员界面暂时无法测试,因为测试版本无法获取openid,只有上线后才能获取到openid才能进入管理员界面
commit次数取所有分支的次数总和
组员 | commit次数 |
---|---|
222000429蔡佳鑫 | 30 |
052006130谢思雄 | 10 |
222000129黄钰婷 | 26 |
222000131魏诗卉 | 34 |
222000434杨蕊蘭 | 28 |
222000433罗彤 | 10 |
222000227周禹辰 | 4 |
222000235阿布都拉·托合提 | 5 |
222000206甘圣鑫 | 10 |
小组 | commit次数 |
---|---|
前端小组 | 72 |
后端小组 | 76 |
截图仅展示部分信息
竞猜功能就在小程序的首页,在用户授权登录后即可看到竞猜功能。
当比赛结束后,管理员将信息处理后,会通过微信的通知告知用户。通过微信提供的一个接口,可以实现给用户发送通知。可以让用户快速知道自己的猜球结果。
这个也是通过微信授权时的唯一的openID来进行登录,当用户是第一次登录时,对其进行信息的填写,即注册;当用户已登录过,则不可重复注册。用微信提供的唯一的openID来保证一人一号。
功能描述:该功能是用于在用户下注完后,将用户投票的记录存入数据库。
功能实现思路:通过按下下注后返回的信息和用户的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
}
})
}
功能描述:该功能是用于竞猜首页展示所有的赛程的信息。
功能实现思路:通过日期升序排序获取数据库中的赛程信息,展示在竞猜首页。
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return await db.collection("CompetitionMessage").orderBy("RaceTime","asc").get()
}
功能描述:该功能用于将新用户的信息传入数据库
功能实现思路:通过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
}
})
}
功能描述:该功能用于通过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()
}
功能描述:该功能用于查找user的所有战绩展示于个人信息界面
功能实现思路:通过唯一的openid在数据库中查找到唯一的一条数据记录,并返回。
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext();
return await db.collection("UserCompetiton").where({
openId:OPENID
}).get()
}
功能描述:该功能用于通过判断用户是否是新用户
功能实现思路:通过获取到的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;
}
功能描述:该功能用于更新投票积分与赔率
功能实现思路:用户投票后,更新用户的积分,并重新计算赔率,更新赔率。当投的积分越多时,赔率按一定的比率降低。
// 云函数入口函数
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)
}
})
}
}
注:页面颜色过多导致录制gif文件较大无法上传,使用全局色表可以有效减少gif大小但颜色会变得比较阴间...图片仅供参考
1.基础功能
概览
页面下方的Tab导航条可以在首页、排行榜和个人页面间切换
登录页
因时间有限,且小程序正式上线后才能获取OpenId来进行验证唯一用户,但上线需要一定时间审核,故表单登录功能尚未完善,只能使用默认账户登录。
默认账号:15105060708
密码:123456
首页
首页上方有可滑动的轮播图
点击赔率数字既可下注
排行榜
4.附加功能展示
详见5.7
N(Need,需求)
A(Approach,做法)
B (Benefit,好处)
C (Competitors,竞争)
经过分析,我们的主要竞争对手为其他小组的项目,澳大利亚网球公开赛相关平台的竞猜模块。
我方优势
我方劣势
D(Delivery,推广)
小组 | 学号姓名 |
---|---|
前端小组 | 222000429蔡佳鑫、052006130谢思雄、222000129黄钰婷、222000433罗彤、222000235阿布都拉·托合提 |
后端小组 | 222000131魏诗卉、222000434杨蕊蘭、222000227周禹辰、222000206甘圣鑫 |
组员 | 工作内容 | 贡献比例 |
---|---|---|
222000429蔡佳鑫 | 博客、管理员界面的前端 | 10.8% |
052006130谢思雄 | 排行榜界面的前端 | 11.3% |
222000129黄钰婷 | 首页竞猜界面的前端 | 12.9% |
222000131魏诗卉 | 后端的云函数、API | 13.7% |
222000434杨蕊蘭 | 后端的云函数 | 13.3% |
222000433罗彤 | 博客、管理员界面的前端 | 11.3% |
222000227周禹辰 | 后端的云函数 | 6.5% |
222000235阿布都拉·托合提 | 个人中心界面的前端、管理员界面的前端 | 11.2% |
222000206甘圣鑫 | 后端的云函数 | 6.5% |
遇到的问题:微信开发工具自带的上传gitcode的工具时好时坏,工具虽然好用,可以实现及时 的拉取与推送,但当长时间未拉取与推送后,与时代“脱轨”,会出现很多错误......
解决方法:最终实在没用办法,跳过工具直接通过gitcode上传代码。
遇到的问题:1>如何制作排行榜表格?
2>如何制作排行榜背景图?
3>如何获取用户的昵称和头像?
解决方法:前两个问题都是属于基础的前端问题,借助chatgpt即可快速完成
1>
2>
3>观看b站视频学习:微信小程序获取用户头像昵称自动登录2023_哔哩哔哩_bilibili
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。
1)遇到的问题:之前没有使用过微信开发者工具,不知道如何通过微信开发者工具直接实现团队项目并上传到gitcode。
解决方法:在这里我们花了挺长时间的,又因为时间紧迫,所以我们安排两个人研究这个团队合作的方法,而其余分别去写API接口和前端页面调用。最终我们发现,微信开发者工具中有有一个“版本管理”的按钮功能,通过这个按钮中的“拉取”、“上传”,即可以分别实现gitcode的上传和拉取功能,达到团队合作的目的。
心得:相比于直接就开始盲目的编程,事先熟悉一下编程工具是非常重要的,他能解决很多本来不该存在的Bug。
2)遇到的问题:微信开发者工具中的云函数一开始一直报错,无法运行。
解决方法:通过报错的信息在网上查找资料和文档,以及微信官方的文档,我们才发现云函数中的配置是非常多的,而我们一开始的学习视频中并没有提到这一点,因此我们也下意识的忽略了。最终,还是通过官方文档解决了问题。
心得:遇到问题不要盲目查询,或许可以查找一下官方的手册(
前提是他是中文的T_T。3)遇到的问题:时间短暂,前台和后台需要同步运行,该如何协调?
解决方法:这个问题我们最后决定花半个小时的时间先写一下前端需要的、后端将要实现的API的接口,之后无论是前端人员还是后端人员都根据API进行接口的调用或编写。
心得:这点很赞,只需要一点点的时间,就能大幅度提高开发的效率,且接口代码规范。非常适合之后的编程大作业继续实现。
遇到的问题:使用微信开发者工具编写云函数并运行时报错functionname parameter could not be found
解决方法:通过搜索查询相关问题得知是由于环境ID未配置
遇到的问题:使用微信云开发进行多人合作的问题
①由于对微信开发者工具的不熟悉,我们不知如何在其中连接团队远程gitcode仓库;②明明仓库文件夹是空的,却不能在其中新建项目,开发者工具总会提醒其中已有项目解决方法:①通过不断探索试错,我们摸索出:克隆团队仓库到本地→在仓库中创建项目→提交项目→其他成员克隆→导入项目→配置git仓库认证→抓取仓库指定分支→使用拉取推送等操作进行合作开发的方式。
②删除本地的项目文件不会删除开发者工具内的项目记录,若记录存在,则工具会认为项目文件存在,故每次删除项目文件后,应及时删除记录文件。
遇到的问题:对于前后端的分离和api的设计不了解
解决方法:上网查找相关的资料和教程,主要通过csdn交流社区和chatgpt,两种方法各有利弊,相互结合最后获得结果。如果实在无法解决也可以向组员寻求帮助,这就是团队编程的优势所在。
遇到的问题:微信开发者工具提供手机微信预览功能,但是有些功能的实现和页面的显示上存在不一致,还有对于小程序开发所使用的组件和函数不熟练。
解决方法:通过浏览器浏览和查看微信开发者工具中的帮助文档,基本已解决。
1)遇到的问题:在编写后端程序后尝试与前端对接时会出错
解决方法:起初以为是后端api的数据格式有出现错误,因此排查了所有api的数据格式都没找到,结果在前端api检查后发现是漏写了一个数据的api,发现之后很快就解决了
心得:有时候只细致检查一处是发现不了错误的,从全局上检查有可能更快发现错误。
2)遇到的问题:后端程序无法保持持续接受数据
解决方法:通过报错的信息在网上查找资料和文档,以及微信官方的文档,才发现是因为云函数中的配置出错导致的,而我由于没有完整学完学习视频因此无法意识到这个错误了。最后在进一步学习了相关配置的知识后解决了这个问题
心得:无论要完成什么工作,最重要的总是事前的准备工作要完善。
3)遇到的问题:如何在短时间内完成软件的设计方案与开发安排
解决方法:我们通过参照其它团队分享的软件开发建议以及我们至今的团队协作经历,很快就完成了设计和工作安排
心得:有一个成熟的团队做参考可以从中学习到很多提高团队合作效率的办法,这也是为什么加入过一个团队更能提高总体素质。
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 655 | 635 |
• Analysis | • 需求分析 (包括学习新技术) | 150 | 180 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 45 |
• Coding | • 具体编码 | 360 | 350 |
• Code Review | • 代码复审 | 30 | 40 |
• Test | • 测试 | 60 | 40 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 695 | 685 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 565 | 585 |
• Analysis | • 需求分析 (包括学习新技术) | 120 | 130 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 45 |
• Coding | • 具体编码 | 300 | 350 |
• Code Review | • 代码复审 | 30 | 40 |
• Test | • 测试 | 60 | 40 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 605 | 635 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 15 | 20 |
Development | 开发 | 605 | 655 |
• Analysis | • 需求分析 (包括学习新技术) | 100 | 110 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 45 |
• Coding | • 具体编码 | 360 | 420 |
• Code Review | • 代码复审 | 30 | 20 |
• Test | • 测试 | 60 | 40 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 640 | 705 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
• Estimate | • 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 615 | 685 |
• Analysis | • 需求分析 (包括学习新技术) | 120 | 130 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 10 | 10 |
• Design | • 具体设计 | 40 | 45 |
• Coding | • 具体编码 | 360 | 400 |
• Code Review | • 代码复审 | 30 | 50 |
• Test | • 测试 | 45 | 40 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 645 | 725 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 15 |
• Estimate | • 估计这个任务需要多少时间 | 15 | 15 |
Development | 开发 | 625 | 665 |
• Analysis | • 需求分析 (包括学习新技术) | 120 | 150 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 25 |
• Coding | • 具体编码 | 360 | 400 |
• Code Review | • 代码复审 | 30 | 40 |
• Test | • 测试 | 60 | 30 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 660 | 710 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 645 | 625 |
• Analysis | • 需求分析 (包括学习新技术) | 100 | 110 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 45 |
• Coding | • 具体编码 | 400 | 370 |
• Code Review | • 代码复审 | 30 | 40 |
• Test | • 测试 | 60 | 40 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 695 | 685 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 505 | 625 |
• Analysis | • 需求分析 (包括学习新技术) | 60 | 80 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 45 |
• Coding | • 具体编码 | 300 | 320 |
• Code Review | • 代码复审 | 30 | 50 |
• Test | • 测试 | 60 | 30 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 545 | 575 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
• Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 645 | 625 |
• Analysis | • 需求分析 (包括学习新技术) | 100 | 110 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 45 |
• Coding | • 具体编码 | 400 | 370 |
• Code Review | • 代码复审 | 30 | 40 |
• Test | • 测试 | 60 | 40 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 695 | 685 |
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 15 |
• Estimate | • 估计这个任务需要多少时间 | 10 | 15 |
Development | 开发 | 475 | 535 |
• Analysis | • 需求分析 (包括学习新技术) | 60 | 80 |
• Design Review | • 设计复审 | 10 | 10 |
• Coding Standard | • 代码规范(为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 30 | 45 |
• Coding | • 具体编码 | 300 | 320 |
• Code Review | • 代码复审 | 30 | 50 |
• Test | • 测试 | 30 | 20 |
Reporting | 报告 | 20 | 30 |
• Size Measurement | • 计算工作量 | 10 | 15 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 10 | 15 |
合计 | 505 | 580 |
小程序云函数遇到的问题(未安装wx-server-sdk依赖 | errMsg: Environment not found)
看PSP表格,小组成员效率方面控制的不错呀!赞!
未来如果要继续迭代,类图你们认为还可以如何改进?