结对编程:带ui设计的学生答题系统
带ui的学生答题系统
1.功能
(1)实现登录和注册,可以通过手机验证码进行验证
(2)根据类型和数量出题,生成试卷并且题目不重复
(3)计算分数
2.方法
(1)利用二叉树生成题目,直接计算(答案为小数)
(采用逆波兰表达式也可以计算)
(2)利用xml存储账户信息
(3)利用正则表达式筛选题目,匹配密码
(4)利用c#的可视化开发工具做界面
3.个人项目复用
(1)虽然个人项目使用的是java,结对项目使用的是c#,但这两门语言有太多相似之处,复制后直接能用。
主要复用了个人项目里的二叉树结构类
(2)两门语言在细节方面有点区别,文件操作等代码均不可复用。
4.总结
(1)由于数据长度限制,计算机的计算会有误差。
(2)初期用java swing 做了一个,发现做出来的ui界面不太好看,转而使用c#,浪费了不少时间(java也有可视化开发工具,但安起来太麻烦)。在开发之前选对方向很重要。
(3)算法+结构
¥结构
在做结对项目时,各种类之间功能没有明显区分导致结构不清晰,重写类并进行功能分门别类后情况有所改观,编程语言是工具,但还不能算学问,如何组织结构才是难点。
(1)强大的正则表达式
在进行密码格式验证时采用正则表达式可以简化代码量,比如匹配6-10位包含大小写字母和数字的密码
采用正则表达式中的环视和零宽断言都可以解决这一问题。
环视:^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])[0-9A-Za-z]{6,10}$
(2)Xml
Xml和json都是对数据的组织方法
Xml中的数据存储行式就和计算机上的目录树差不多,一个标签套另一个标签,在你知道里面的数据存储形式时会非常好用(不知道就炸了)
¥算法
本次项目较为简单,但简单之中算法也无处不在
(1)根据正确答案生成其他三个错误选项
问题转化为生成三个随机但不重复不为0的数字
----我的方案
生成一个随机数存储在数组中
重复生成随机数,与数组中的元素进行对比,不相同便采用。
重复此过程
----解决方案:
算法导论教程生成不重复的随机数算法
New 一个int[n]数组,赋值0-n-1(初值可以定具体需要的值)
在后n-i个数中随机选一个数与第i个交换
重复此过程即可完成。
--感想:我真的low爆了
(2)如何计算答案
波兰表达式和逆波兰表达式,具体可以自行百度
主要采用了栈和队列,将中缀表达式转化为后缀表达式便可以利用运算符的位置来表征运算顺序,从而去掉括号。
示例
中缀表达式:a + bc + (d * e + f) * g
后缀表达式:a b c * + d e * f + g * +
从中可以看出在表达式中括号并不是必须的,采用后缀表达式去掉了括号,但还保证了计算顺序与中缀表达式一致。
--感想:???我家大括号成了冗余数据
数学家真强,五体投地.jpg