| 班级 |
软工19网工34 |
| 要求 |
团队作业4——项目冲刺 |
| 目标 |
连续七天的冲刺 |
目录
- 第一篇
- 1.会议照片
- 2.各个成员在 Alpha 阶段认领的任务
- 3.明日各个成员的任务安排
- 4.整个项目预期的任务量
- 5.敏捷开发前的感想
- 6.团队期望
- 第二篇
- 1.站立式会议
- 2.项目燃尽图
- 3.代码签入
- 4.模块的最新截图
- 5.每人总结
- 第三篇
- 1.站立式会议
- 2.项目燃尽图
- 3.代码签入
- 4.模块的最新截图
- 5.每人总结
- 第四篇
- 1.站立式会议
- 2.项目燃尽图
- 3.代码签入
- 4.模块的最新截图
- 5.每人总结
- 第五篇
- 1.站立式会议
- 2.项目燃尽图
- 3.代码签入
- 4.模块的最新截图
- 5.每人总结
- 第六篇
- 1.站立式会议
- 2.项目燃尽图
- 3.代码签入
- 4.模块的最新截图
- 5.每人总结
- 第七篇
- 1.站立式会议
- 2.项目燃尽图
- 3.代码签入
- 4.模块的最新截图
- 5.每人总结
第一篇
1.会议照片
2.各个成员在 Alpha 阶段认领的任务
| 成员 |
任务 |
| 蔡鑫源 |
完成博客随笔、UI设计 |
| 纪培浩 |
设计数据库和编写API接口 |
| 罗汉光 |
界面开发、android |
| 拜合提亚尔 |
调试、测试 |
3.明日各个成员的任务安排
| 成员 |
任务 |
| 蔡鑫源 |
对APP的界面进行美化 |
| 纪培浩 |
数据库设计 |
| 罗汉光 |
定义各功能模块接口 |
| 拜合提亚尔 |
制定组装测试计划 |
4.整个项目预期的任务量
APP的大概界面构思和设计,大功能模块代码编写。正式进入产品的原型设计阶段。UI、UE开始设计,形成初步的效果图。在经过确认后界面的效果图正式设计完成。产品在设计图完成后,进入研发阶段。通过编程语言形成正式的程序。至此,App的制作过程就完成了一大部分,可以进入测试部进行测试。
5.敏捷开发前的感想
对于需要多人合作的项目而言,一套科学的开发流程尤为重要。在很多情况下,单靠个人能力很难完全处理各种错综复杂的问题并采取切实高效的行动。所有这些问题都需要团队成员互相关联共同合作建立羁绊来解决问题,统一思想,分工合作互相信,并进行必要的行动协调,开发团队的应变能力和持续的创作能力,依靠团队合作的力量创造奇迹。
6.团队期望
不求快,只求好。
第二篇
1.站立式会议
a.会议照片
b.工作表格
| 成员 |
昨天已完成的工作 |
今天计划完成的工作 |
工作中遇到的困难 |
| 蔡鑫源 |
对APP的界面进行美化 |
部分接口实现 |
无 |
| 纪培浩 |
数据库设计 |
注册代码实现 |
无 |
| 罗汉光 |
定义各功能模块接口 |
注册界面设计 |
无 |
| 拜合提亚尔 |
制定组装测试计划 |
对已完成的文档进行评审 |
无 |
2.项目燃尽图

3.代码签入
package controller
import (
"github.com/gin-gonic/gin"
"net/http"
"model"
)
//注册
func Register(c *gin.Context) {
var user model.User
err := c.BindJSON(&user)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"Error": err.Error()})
}
//用户名已存在
if err = model.UserIsExists(user.UserName); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"Error": err.Error()})
}
if err = model.CreateAUser(&user); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"Error": err.Error()})
} else {
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "Success",
"data": user,
})
}
}
4.模块的最新截图

5.每人总结
| 成员 |
总结 |
| 蔡鑫源 |
革命仍未胜利 |
| 纪培浩 |
加油! |
| 罗汉光 |
今天很充实 |
| 拜合提亚尔 |
加油! |
第三篇
1.站立式会议
a.会议照片
b.工作表格
| 成员 |
昨天已完成的工作 |
今天计划完成的工作 |
工作中遇到的困难 |
| 蔡鑫源 |
部分接口实现 |
上传代码、完成博客随笔 |
无 |
| 纪培浩 |
注册代码实现 |
登录代码实现 |
无 |
| 罗汉光 |
注册界面设计 |
登录界面设计 |
无 |
| 拜合提亚尔 |
对已完成的文档进行评审 |
制定模块测试方案 |
无 |
2.项目燃尽图

3.代码签入
package controller
import (
"errors"
"fmt"
"github.com/dgrijalva/jwt-go"
"github.com/dgrijalva/jwt-go/request"
"github.com/gin-gonic/gin"
"log"
"net/http"
"model"
"time"
)
const (
SecretKey = "biubiu647"
)
type User struct {
Username string `json:"username"`
Password string `json:"password"`
}
type Token struct {
Token string `json:"token"`
}
//登录
func Login(c *gin.Context) {
var user User
err := c.BindJSON(&user)
//获取json失败
if err != nil {
c.JSON(http.StatusForbidden, gin.H{"error": "error in decode request"})
return
}
//查不到记录
var uuser model.User
if err = model.GetAUser(&uuser, user.Username); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"Error": err.Error()})
return
} else {
//密码不对
if uuser.Password != user.Password {
c.JSON(http.StatusInternalServerError,
gin.H{"Error": errors.New("password error").Error()})
return
}
}
token := jwt.New(jwt.SigningMethodHS256)
var claims = make(jwt.MapClaims)
claims["Username"] = user.Username
claims["Password"] = user.Password
//token过期时间
claims["exp"] = time.Now().Add(time.Hour * time.Duration(24)).Unix()
//token创建时间
claims["iat"] = time.Now().Unix()
token.Claims = claims
//加密生成token
tokenString, err := token.SignedString([]byte(SecretKey))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Sign token error"})
return
}
//resp := Token{
// tokenString,
//}
//jsonByte, err := json.Marshal(resp)
//if err != nil {
// c.JSON(http.StatusInternalServerError, gin.H{"error": "error in json token"})
// return
//}
//log.Println(string(jsonByte))
//返回token
c.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"msg": "Success",
"token": tokenString,
})
}
//权限验证中间件
func ValidDataTokenMiddleWare(c *gin.Context) {
token, err := request.ParseFromRequest(c.Request, request.AuthorizationHeaderExtractor,
func(token *jwt.Token) (interface{}, error) {
return []byte(SecretKey), nil
})
if err != nil {
//log.Println(err.Error())
c.Writer.WriteHeader(http.StatusUnauthorized)
_, _ = fmt.Fprint(c.Writer, "Unauthorized access")
c.Abort()
return
} else {
if token.Valid {
log.Printf("Authorized user is %s\n")
c.Next()
} else {
c.Writer.WriteHeader(http.StatusUnauthorized)
_, _ = fmt.Fprint(c.Writer, "token is not valid")
c.Abort()
return
}
}
}
func Safe(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"msg": "authorized success",
})
}
4.模块的最新截图

5.每人总结
| 成员 |
总结 |
| 蔡鑫源 |
再接再厉 |
| 纪培浩 |
加油! |
| 罗汉光 |
又是充实的一天 |
| 拜合提亚尔 |
加油! |
第四篇
1.站立式会议
a.会议照片
b.工作表格
| 成员 |
昨天已完成的工作 |
今天计划完成的工作 |
工作中遇到的困难 |
| 蔡鑫源 |
上传代码、完成博客随笔 |
完成博客随笔 |
无 |
| 纪培浩 |
登录代码实现 |
网络连接 |
无 |
| 罗汉光 |
登录界面设计 |
漂流瓶界面设计 |
无 |
| 拜合提亚尔 |
制定模块测试方案 |
进行模块测试和调试 |
无 |
2.项目燃尽图

3.代码签入
package dao
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var DB *gorm.DB
func InitMySQL() (err error) {
dsn := "root:password@tcp(127.0.0.1:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
DB, err = gorm.Open("mysql", dsn)
if err != nil {
return
}
return DB.DB().Ping()
}
4.模块的最新截图
5.每人总结
| 成员 |
总结 |
| 蔡鑫源 |
好多不会 |
| 纪培浩 |
加油! |
| 罗汉光 |
还是充实的一天 |
| 拜合提亚尔 |
加油! |
第五篇
1.站立式会议
a.会议照片
b.工作表格
| 成员 |
昨天已完成的工作 |
今天计划完成的工作 |
工作中遇到的困难 |
| 蔡鑫源 |
完成博客随笔 |
界面美化、完成博客随笔 |
无 |
| 纪培浩 |
网络连接 |
数据处理 |
无 |
| 罗汉光 |
漂流瓶界面设计 |
聊天界面设计 |
无 |
| 拜合提亚尔 |
进行模块测试和调试 |
对实现过程及已完成的文档进行评审 |
无 |
2.项目燃尽图

3.代码签入
package model
import (
"errors"
"fmt"
)
type User struct {
UserId string `json:"user_id"`
UserName string `json:"user_name"`
Password string `json:"password"`
Age int `json:"age"`
Sex string `json:"sex"`
ImagePath string `json:"image_path"`
}
func CreateAUser(u *User) error {
return dao.DB.Create(u).Error
}
func GetAUser(u *User, username string) error {
return dao.DB.Where("user_name=?", username).First(u).Error
}
func GetAllUser(u []*User) error {
return dao.DB.Find(u).Error
}
func UpdateUser(u *User) error {
return dao.DB.Save(u).Error
}
func DeleteAUser(username string) error {
return dao.DB.Where("user_name=?", username).Delete(User{}).Error
}
func UserIsExists(username string) error {
err := dao.DB.Where("user_name=?", username).Take(User{}).Error
if err == nil {
return errors.New(fmt.Sprintf("The user already exists with UserName:%s", username))
} else {
return nil
}
}
4.模块的最新截图

5.每人总结
| 成员 |
总结 |
| 蔡鑫源 |
博客写的更快了 |
| 纪培浩 |
加油! |
| 罗汉光 |
充实! |
| 拜合提亚尔 |
加油! |
第六篇
1.站立式会议
a.会议照片
b.工作表格
| 成员 |
昨天已完成的工作 |
今天计划完成的工作 |
工作中遇到的困难 |
| 蔡鑫源 |
界面美化、完成博客随笔 |
实现部分接口 |
无 |
| 纪培浩 |
数据处理 |
优化算法 |
无 |
| 罗汉光 |
聊天界面设计 |
服务端开发 |
无 |
| 拜合提亚尔 |
对实现过程及已完成的文档进行评审 |
执行集成测试计划 |
无 |
2.项目燃尽图

3.代码签入
4.模块的最新截图
5.每人总结
| 成员 |
总结 |
| 蔡鑫源 |
快胜利了 |
| 纪培浩 |
加油! |
| 罗汉光 |
今天也是充实的一天 |
| 拜合提亚尔 |
加油! |
第七篇
1.站立式会议
a.会议照片
b.工作表格
| 成员 |
昨天已完成的工作 |
今天计划完成的工作 |
工作中遇到的困难 |
| 蔡鑫源 |
实现部分接口 |
完成博客随笔 |
无 |
| 纪培浩 |
优化算法 |
客户端开发 |
无 |
| 罗汉光 |
服务端开发 |
接口的对接 |
无 |
| 拜合提亚尔 |
执行集成测试计划 |
测试整个软件系统(健壮性测试) |
无 |
2.项目燃尽图

3.代码签入
4.模块的最新截图
5.每人总结
| 成员 |
总结 |
| 蔡鑫源 |
终于结束了 |
| 纪培浩 |
加油! |
| 罗汉光 |
最充实的一天了 |
| 拜合提亚尔 |
加油! |
更多文章请关注《万象专栏》