大三上的web程序课程设计需要做一个mini学生成绩管理系统,完成后有这些体会,系统已开源至Github
https://github.com/86XIng/Student-Achievement-Management-System
团队介绍:https://86xing.github.io/6XIng.github.io/deeptech/
课程详情 登陆页面 后台管理主页面
功能之一:选课功能
- 前期需求分析真的很重要
我们小组有王晨旭和刘俊洲的指导,他们在软件所的项目经验告诉他们要做好需求分析再编码,于是我们在他们的指导下开了很多次会,讨论出来一大堆问题。比如课程表的设计,转专业学生如何选课,重修的学生怎么办,公选课没有固定的班级怎么和班级表形成映射,教室的分配问题等等,我们在白板上画出了E/R图,甚至是表的设计图以及我们能想到的初步的解决方案,虽然这些需求在这次项目中没有用到,但也让我们感受到想做好一个完整的项目其实是很不容易的。
- 先分工把目录定好然后整合
第一次展示的时候,我们小组的前后台没有整合到一起,是因为我们都是分开完成的,在各自电脑上新建的vs项目,无法合并到一起。吃过这次亏过后,我把整个的项目目录和空文件先搭建了起来推送到git上,在云端建立数据库,新控件什么的依赖包先安上,避免合并时因为每个人生成的webconfig文件不同而报错。
- 每个人的水平不一样,一定要多交流
最开始说要用git仓库管理的时候我认为git这种东西应该是不用特别强调,看下教程就能满足我们这次项目需求的,结果git仓库的push记录都是我的,一问才知道,大家原来对这个东西一头雾水,光是理解概念就耗费了很多时间,于是我在简书上针对这次项目需要用到的命令给他们做了总结https://www.jianshu.com/p/3ea955d63b7a,效果很好,几乎每个人都学会了用命令行来控制git
- Md5算法,session的名称及secretkey什么的,应该尽早定下来
关于md5加密,我们小组前期做的时候全都是用的明文密码,我们也知道这肯定是要改的,但是什么时候改,怎么改,很长一段时间内都没人定下来,可能每个人写的算法不一样调用的函数不相同导致求出的hash不同什么的,于是写了一个方法以及使用教程,在我们组内统一使用https://www.jianshu.com/p/73082e546de6。session这个最后发现在.net 里调用十分方便,统一一下名称即可,secretkey,过期时间等等无需关心、
- 富文本编辑器js插件上传图片问题
以前一直以为webpages技术是后台渲染,不能写接口的,.net写接口只能使用mvc5,有一段时间甚至在学mvc5考虑换一个,但最后挂念于组员可能来不及学就放弃了,但是查阅资料的过程中我发现有一个文件后缀名为ashx的神奇东西好像类似于接口的意思,网上的教程也比较少,利用其它平台开发的后台知识利用vs平台强大的智能提示功能花了一下午,探索出来在webpages框架下写接口的一套流程,并且根据wangeditor这个富文本编辑器的说明文档http://www.wangeditor.com/,写了一个简单的接口。写接口的过程中突然意识到.net做开发的便捷之处,ashx配合绑定的数据集,开发起来特别方便快捷,甚至一句sql语句都没有写,调用自己命名的方法代码看着也整洁了不少。
另一个问题是如何获取富文本编辑器里的内容,富文本编辑器封装了获取的方法,但是是放在js代码里的,通过后台代码无法直接取得,想了两种办法,一种是用ajax请求,再写一个接口,通过ajax向后台传值,但是这就得再写一个接口,或者是在pageload里加代码,不优雅,否决。另一种解决方法是在论坛里看到的,放置一个隐藏的输入框,用js把内容获取到后复制到这个隐藏input框的value中去,再加上runat=server就可以在后台间接获取到输入的值了,测试了一下,这种解决方法比较完美,字数上没有限制。
- 帮刘老师解决新控件绑定图片时遇到的问题
新控件绑定数据做一些开发确实方便,但是迫于网上教程过少,而且我们接触的不多,会遇到很多这样那样的问题,比如说图片无法绑定的问题。我们存在数据库里的图片仅仅是图片的名称,没有相对和绝对路径,在要用到的时候再另行拼接。刘老师的问题是,新控件无法像拼接字符串一样拼接文件路径,这一点我一开始以为是刘老师没有尝试,最后我尝试了一晚上,用各种手段也没能利用已有知识在新控件后台代码里拼接上相对路径。刘老师问了研究生学长和软件所的同学都没能得到满意的答复,最后我利用jQuery对每个td里含有图片的路径进行拼接,勉强让图片展示了出来。至于好点的解决方案,我想应该是在数据库或者数据集里解决比较好,但由于时间紧迫问题接踵而至也未能成功尝试。
- 帮刘老师解决新控件局部刷新导致密码框一输入密码丢失时遇到的问题
新控件对密码框进行了封装,密码会由于省市下拉框联动时的页面刷新而消失,而普通的输入框则没这个问题,由于软件所和研究生学长从来没在新控件里同时用到密码框和联动效果,这个问题只能自己想办法解决,用老师上课讲的updatapanel的话,一展开编辑栏就会触发postback事件,我想着可能是有更高级的办法,让刘老师都试了其他的update类的控件都不行,于是便放弃这种思路,转为前端的方法。我的方法和论坛里的很多人类似,藏一个隐藏的输入框,当键盘输入时,把密码同时赋值给那个隐藏的输入框,然后页面刷新的时候再把隐藏输入筐里的值赋值给密码框,单纯站在用户的角度上测试的时候也没什么问题,但是安全性上可能有所损失。
- 文件名值清零问题,本次开发中遇到的最大的坑
public partial class manage_admin_manager_manage_course_change_course_info : System.Web.UI.Page
{
liuchuxiongTableAdapters.课程表TableAdapter CourseTable = new liuchuxiongTableAdapters.课程表TableAdapter();
int index = 0;
string relativePath=null;
……}
在做编辑课程信息的时候,刘老师遇到了这样一个奇怪的问题,让晨旭和俊洲看,也觉得没毛病,但是就是在插入和删除的时候,图片的路径就清零了,这可能是我们这个项目中遇到的最大的坑,得益于vs强大的调试功能,排除了获取文件名失败,存储图片失败,相对路径错误,数据库插入失败,数据集错误等等等等一大堆怀疑对象后我偶然间发现了问题所在,一个最容易忽视的问题,每次执行updata方法或者insert方法后都会从头也就是从我贴的代码开始重新对变量赋值,relativePath也就是在这个时候清零的,这就涉及到高级程序语言设计的知识了,只是这次被刘老师遇到了,我觉得我们在以后的开发中也很可能遇到。我的解决方法就是声明一个静态类,类中放一个静态成员变量为relativePath,当然也可以使用构造函数的办法。这个坑比较深,也暴露出我们对高级程序语言的理解还不合格,只知其然而不知其所以然。
- 选课多页面同时开启时的逻辑问题
陈雪做的选课和退课页面,由于我们使用的后台系统框架是允许多窗口同时运行的,这就导致了,先同时打开选课和退课页面,然后在选课后打开已经开启的退课页面,退课页面需要手动刷新才能看到新选的课,反之亦然。如何使一个静态页面在后台数据有更新时刷新,我想到了用ajax不断向后台请求,后台一有更新就立即刷新页面,但是这也有问题,如果多名学生同时选同一门课由于后台数据不断更新页面也会一直刷新导致无法正常选课。还有一种可以解决的就是websocket技术,参考网页股票交易系统,实时更新数据,但是能力不够无法完成,最后折中取巧,令每当鼠标移入或移出页面时自动刷新一次,虽然体验还是不够完美,但现阶段只有这样才能解决这个问题
- 还有很多很多其它的小问题迫于时间和篇幅便不再赘述,但正如曾老师暑期实习时所说,对于计算机这个专业的学生:坑,只会越踩越多。学海无涯,只能以此来勉励自己,虽然这是我们自己做出的第一个可以用的系统,但功能和业务逻辑都还非常简单,甚至不能称之为一个系统,前路还长,有更多的坑等着我们去跳,去踩。
首页2
首页3
网友评论