目录
一、 需求 3
二、 主体框架 3
- 整体框架 3
- 数据的流向 4
三、 数据库设计 5 - 整体设计图 5
- 数据库表 6
- 数据库表关系图 6
四、 实现 7 - 代码的组成 7
a) 后端代码组成说明 7
b) 客户端代码组成说明 9 - 编码风格约定 11
- 文件清单 12
五、 使用说明 13 - 主界面 13
- 验证码登录界面 14
- 密码登录界面 15
- 商品界面 15
- 口袋(购物车)界面 16
- 我的页面 16
六、 小组工作情况 17
七、 使用到的技术 17
八、 小结 18
四、实现
1.代码的组成
a)后端代码组成说明
客户端使用了SpringBoot框架,主要可分为Mapper层,Service层,Controller层,Bean层,接下来以图片配文字的形式说明大致功能。
package cn.fishei.jleme.ui.viewModel
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.Transformations
import androidx.lifecycle.ViewModel
import cn.fishei.jleme.logic.model.PasswordLoginArgs
import cn.fishei.jleme.logic.model.UserArgs
import cn.fishei.jleme.logic.repository.Repository
//参考书本P545、619
class UserViewModel: ViewModel() {
private val codeLiveData = MutableLiveData<String>()
private val phoneLoginLiveData = MutableLiveData<UserArgs>()
private val locationLiveData = MutableLiveData<String>()
private val passwordLoginLiveData = MutableLiveData<PasswordLoginArgs>()
// 验证码
val backInfo = Transformations.switchMap(codeLiveData){ code ->
Repository.sendCode(code)
}
fun resultStatus(phone: String) {
codeLiveData.value = phone
}
// 手机登录注册
val phoneLiveData = Transformations.switchMap(phoneLoginLiveData){ loginPhone ->
Repository.userLogin(loginPhone.Phone, loginPhone.code, loginPhone.cookie)
}
fun resultPhoneCode(phone: String, code:String, cookie: String) {
phoneLoginLiveData.value = UserArgs(phone, code, cookie)
}
// 地址
val locationData = Transformations.switchMap(locationLiveData){ token ->
Repository.getLocation(token)
}
fun resultLocation(token: String){
locationLiveData.value = token
}
//密码登录
val passwordLogin = Transformations.switchMap(passwordLoginLiveData){ passwordLogin ->
Repository.getPasswordLogin(passwordLogin.Phone, passwordLogin.password)
}
fun resultPasswordLocation(phone: String, password: String){
passwordLoginLiveData.value = PasswordLoginArgs(phone, password)
}
//修改信息
// fun reviseAddress = Transformations.switchMap(reviseData){ reviseData->
// Repository.reviseAddress(reviseData.message,reviseData.code)
// }
//
// fun resultReviseAddress(){
// reviseData.value =
// }
}