软件工程实务是一门将软件工程理论知识应用于实践的学科,它的学习目标包括以下几个方面:
-
掌握软件开发的全流程:软件开发过程涉及到需求分析、系统设计、编码实现、测试与维护等多个环节,软件工程实务的学习目标是帮助学生全面理解软件开发的全流程,并能够有效地管理和协调各个环节。
-
掌握软件质量保证和控制的方法和技术:为了提高软件开发的效率和质量,软件工程实务的学习目标是帮助学生掌握软件质量保证和控制的方法和技术,如软件测试、代码审查、性能优化等,从而确保软件的质量和可靠性。
-
培养团队协作和沟通能力:软件开发是一个需要多人协作的过程,因此,软件工程实务的学习目标也包括培养团队协作和沟通能力。学生需要学会有效的沟通和协作,以确保项目的进度和质量。
-
掌握面向对象编程的方法和技术:面向对象编程是软件开发中普遍采用的编程方法,软件工程实务的学习目标之一是帮助学生掌握面向对象编程的方法和技术,如类的设计、封装、继承、多态等,从而提高代码的可维护性和可重用性。
利用我们所学知识完成一个最基本的登录注册:
登录前端代码::
<template>
<view class="container">
<view class="login-box">
<view class="title">用户登录</view>
<form method="post" class="form">
<view class="form-item">
<text class="iconfont icon-username"></text>
<input type="text" placeholder="请输入账号" v-model="formData.username" @blur="validateUsername"
class="input">
<p v-if="errors.username" class="error">{{ errors.username }}</p>
</view>
<view class="form-item">
<text class="iconfont icon-password"></text>
<input type="password" placeholder="请输入密码" v-model="formData.password" @blur="validatePassword"
class="input">
<p v-if="errors.password" class="error">{{ errors.password }}</p>
</view>
</form>
<button type="submit" :disabled="!isValid" @click="login" class="login-button">登录</button>
<button @click="gotolink" class="btn btn-success">注册</button>
<p v-if="errMsg" class="error">{{ errMsg }}</p>
</view>
</view>
</template>
<script>
export default {
data() {
return {
formData: {
username: "",
password: "",
},
errors: {
username: "",
password: "",
},
errMsg: "", // 登录失败时的错误信息
};
},
computed: {
isValid() {
return !Object.values(this.errors).some((error) => error !== "");
},
},
methods: {
gotolink(){
//点击跳转至上次浏览页面
// this.$router.go(-1)
//指定跳转地址
this.$router.replace('/pages/reg/reg')
},
login() {
uni.request({
url: "http://localhost:8888/user/login",
method: "POST",
data: this.formData,
header: {
"custom-header": "hello",
},
success: function(res) {
console.log("请求成功", res.data);
if (res.data.code === 200) {
uni.setStorage({
key: "userInfo",
data: {
username: this.formData.username,
password: this.formData.password,
},
success: function() {
uni.switchTab({
url: '/pages/main/main'
})
this.errMsg = "登录成功";
}.bind(this),
});
} else if (res.data.code === 500) {
// 密码错误
this.errMsg = "用户名或密码错误";
} else {
// 其他错误,显示错误信息
this.errMsg = res.data.msg;
}
}.bind(this),
fail: function(err) {
console.log("请求失败", err);
},
});
},
validateUsername() {
if (!this.formData.username) {
this.errors.username = "用户名不能为空";
} else {
this.errors.username = "";
}
},
validatePassword() {
if (!this.formData.password) {
this.errors.password = "密码不能为空";
} else {
this.errors.password = "";
}
},
},
onLoad() {
uni.getStorage({
key: "userInfo",
success: function(res) {
if (res.data) {
this.formData.username = res.data.username;
this.formData.password = res.data.password;
}
}.bind(this),
fail: function(err) {
console.log("读取本地存储失败", err);
},
});
},
};
</script>
<style lang="scss">
// @import "../../common/uni.css";
.container {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-image:url(../../static/img/wdsj.png);
background-repeat: no-repeat;
background-size: cover;
}
.login-box {
width: 800px;
border-radius: 4px;
padding: 40rpx;
background-color: rgba(255, 255, 255, 0.5);
box-shadow: 0px 1px 10px 0 rgba(0, 0, 0, 0.4);
}
.title {
font-size: 50rpx;
text-align: center;
margin-bottom: 40rpx;
}
.form-item {
display: flex;
align-items: center;
margin-bottom: 20rpx;
background-color: rgba(217, 217, 217, 0.4);
}
.iconfont {
font-size: 30rpx;
color: #edf2ff;
margin-right: 10rpx;
}
.input {
border: none;
outline: none;
font-size: 20px;
flex: 1;
height: 35px;
}
.error {
color: #f00;
font-size: 24rpx;
margin-left: 40rpx;
}
.login-button {//登录
display: block;
width: 100%;
height: 100rpx;
margin-top: 40rpx;
border-radius: 4px;
background-color: rgba(125, 255, 195, 0.5);
color: #ffffff;
font-size: 19px;
border: none;
outline: none;
cursor: pointer;
}
.btn-success{//注册
background-color: rgba(255, 255, 255, 0.5);
color: #ffffff;
}
button:hover{
background: rgba(170, 255, 255, 0.5);
}
</style>
注册前端代码:
<template>
<view class="container">
<view class="login-box">
<view class="title">用户注册</view>
<form method="post" class="form">
<view class="form-item">
<text class="iconfont icon-username"></text>
<input type="text" placeholder="昵称" v-model="formData.nickname" @blur="validateNickname"
class="input">
<p v-if="errors.nickname" class="error">{{ errors.nickname }}</p>
</view>
<view class="form-item">
<text class="iconfont icon-username"></text>
<input type="text" placeholder="用户名" v-model="formData.username" @blur="validateUsername"
class="input">
<p v-if="errors.username" class="error">{{ errors.username }}</p>
</view>
<view class="form-item">
<text class="iconfont icon-password"></text>
<input type="password" placeholder="请输入密码" v-model="formData.password" @blur="validatePassword"
class="input">
<p v-if="errors.password" class="error">{{ errors.password }}</p>
</view>
</form>
<button type="submit" :disabled="!isValid" @click="register" class="login-button">注册</button>
<p v-if="errMsg" class="error">{{ errMsg }}</p>
</view>
</view>
</template>
<script>
export default {
data() {
return {
formData: {
nickname: "",
username: "",
password: "",
},
errors: {
nickname: "",
username: "",
password: "",
},
errMsg: "", // 登录失败时的错误信息
};
},
computed: {
isValid() {
return !Object.values(this.errors).some((error) => error !== "");
},
},
methods: {
register() {
uni.request({
url: "http://localhost:8888/user/register",
method: "POST",
data: this.formData,
header: {
"custom-header": "hello",
},
success: function(res) {
console.log("请求成功", res.data);
if (res.data.code === 200) {
// 注册成功
uni.navigateTo({
url: "/pages/login/login",
});
this.errMsg = "注册成功";
} else if (res.data.message == "昵称不能为空") {
// 密码错误
this.errMsg = "昵称不能为空!";
} else if(res.data.message=="该账号已经存在"){
// 其他错误,显示错误信息
this.errMsg = "该账号已经存在";
}
}.bind(this),
fail: function(err) {
console.log("请求失败", err);
},
});
},
validateNickname() {
if (!this.formData.nickname) {
this.errors.nickname = "昵称不能为空";
} else {
this.errors.nickname = "";
}
},
validateUsername() {
if (!this.formData.username) {
this.errors.username = "用户名不能为空";
} else {
this.errors.username = "";
}
},
validatePassword() {
if (!this.formData.password) {
this.errors.password = "密码不能为空";
} else {
this.errors.password = "";
}
},
},
};
</script>
<style>
// @import "../../common/uni.css";
.container {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #f5f5f5;
justify-content: center;
align-items: center;
background-image:url(../../static/img/wdsj.png);
background-repeat: no-repeat;
background-size: cover;
}
.login-box {
width: 800px;
border-radius: 4px;
padding: 40rpx;
background-color: rgba(255, 255, 255, 0.5);
box-shadow: 0px 1px 10px 0 rgba(0, 0, 0, 0.4);
}
.title {
font-size: 25px;
text-align: center;
margin-bottom: 40rpx;
}
.form-item {
display: flex;
align-items: center;
margin-bottom: 20rpx;
color: white;
height: 35px;
background-color: rgba(217, 217, 217, 0.4);
font-size: 18px;
}
.iconfont {
font-size: 30rpx;
color: #c2c2c2;
margin-right: 10rpx;
}
.input {
border: none;
outline: none;
font-size: 18px;
flex: 1;
}
.error {
color: #f00;
font-size: 24rpx;
margin-left: 40rpx;
}
.login-button {
display: block;
width: 100%;
height: 100rpx;
margin-top: 40rpx;
border-radius: 4px;
background-color: rgba(85, 170, 255, 0.5);
color: #fff;
font-size: 20px;
border: none;
outline: none;
cursor: pointer;
}
button:hover{
background: rgba(85, 170, 255, 0.5);
}
</style>
作为一个软件工程的学习者,我认为在学习软件工程实务过程中,需要注意以下几点:
-
理论与实践并重:软件工程实务是一个实践性很强的学科,理论知识只有与实践相结合才能更好地理解和应用。因此,在学习软件工程实务的过程中,一定要注重理论知识的学习,同时也要积极参与实践操作。
-
多思考、多思考、再多思考:在实践的过程中,我们需要不断地思考问题,并尝试寻找最优解决方案。除此之外,我们还需要学会从他人的设计、代码或文章中获得灵感,并从中吸取经验教训,以不断提高自己的思考能力。
-
团队协作和沟通:在软件工程实务的学习过程中,团队协作和沟通能力也是非常重要的。一个优秀的团队需要合理分配任务,进行有效的沟通和协作。同时,学会倾听他人的建议和意见,提高相互之间的信任和理解。
-
持续学习:软件工程实务是一个发展迅速的学科,新技术和新思想不断涌现。因此,在学习软件工程实务的过程中,需要保持对新技术和新思想的关注,并时刻保持学习的状态,以适应不断变化的需求。
总之,软件工程实务是一个需要不断思考、实践和学习的过程,只有通过不断的努力,才能成为一名优秀的软件工程师。