这个选课系统是我去年指导的一个计算机专业毕业设计项目,采用前后端分离架构,前端使用uni-app框架开发微信小程序,后端采用Java+SSM框架。系统主要面向高校学生选课场景,实现了课程浏览、选课退课、教学资源查看、师生互动等核心功能。
为什么选择这个技术栈?uni-app的跨平台特性让学生只需编写一套代码就能发布到多个平台,极大降低了开发成本。而后端选择SSM框架是因为它足够轻量且文档丰富,适合学生快速上手。数据库选用MySQL 5.7也是考虑到它在高校环境中的普及度和稳定性。
前端采用uni-app+Vue.js的组合,这是经过多方考量后的选择:
提示:在实际开发中,我们发现uni-app的picker组件在iOS和Android上的表现不一致,最终通过自定义组件解决了这个问题。
后端架构采用经典的MVC模式:
code复制SSM框架组成:
Spring - 控制反转和依赖注入
Spring MVC - 请求路由和视图解析
MyBatis - 数据库持久层
数据库设计遵循第三范式,主要表包括:
选课功能是系统的核心,我们实现了以下关键点:
核心代码逻辑:
javascript复制// 选课API调用示例
function selectCourse(courseId) {
uni.request({
url: 'https://api.example.com/select',
method: 'POST',
data: {
studentId: getApp().globalData.userId,
courseId: courseId
},
success: (res) => {
if(res.data.code === 0) {
uni.showToast({title: '选课成功'});
} else {
uni.showToast({title: res.data.msg, icon: 'none'});
}
}
});
}
教师端实现了:
特别要注意的是文件上传功能:
java复制// 文件上传Controller示例
@PostMapping("/upload")
public Result upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return Result.error("请选择文件");
}
String fileName = file.getOriginalFilename();
String filePath = "/uploads/";
File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
return Result.ok("上传成功", filePath + fileName);
} catch (IOException e) {
e.printStackTrace();
}
return Result.error("上传失败");
}
在测试阶段发现课程列表加载缓慢,我们采取了以下优化措施:
跨域问题:
微信登录失败:
数据库连接超时:
开发环境配置:
打包发布步骤:
bash复制# uni-app打包命令
npm run build:mp-weixin
提交微信审核注意事项:
我们提供了两种部署方式:
传统部署:
Docker容器化部署:
dockerfile复制FROM tomcat:9.0
COPY ./webapps/ROOT.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]
在实际使用中,可以考虑以下扩展方向:
这个项目从技术选型到最终上线历时3个月,最大的收获是认识到良好的架构设计对后期维护的重要性。特别是在用户量增加后,最初的数据库设计就暴露出了一些性能问题,这也让我更加重视前期的需求分析和系统设计阶段。