一、项目简介——带UI的小初高做题软件
(1)所有功能通过图形化界面操作
(2)用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册
(3)用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字。用户在登录状态下可修改密码,输入正确的原密码,再输入两次相同的新密码后修改密码成功
(4)跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量。用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目,题目全部为选择题),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;最后一题提交后,界面显示分数,分数根据答对的百分比计算;用户在分数界面可选择退出或继续做题
(5)生成题目的要求:
小学 | 初中 | 高中 | ||
---|---|---|---|---|
难度要求 | +,-,*./ | 平方,开根号 | sin,cos,tan | |
备注 | 只能有+,-,*./和() | 题目中至少有一个平方或开根号的运算符 | 题目中至少有一个sin,cos或tan的运算符 |
二、结对分工
本次结对编程,由我和欧阳生同学共同完成。我们采用了JAVA GUI来实现了本次项目——带UI的小初高做题软件。编译环境为IntelliJ IDEA 2021.1.1 x64,JDK版本为1.11。使用的数据库为MySQL,云服务器为82.157.124.211,发送短信平台为榛子云。
我们具体分工如下:前期共同分析了采用哪种UI界面,最后选定了曾经学习过的GUI来进行完成;经过查询资料,共同商议决定采用性价比较高的榛子云作为发送短信的平台。其中UI设计,设置选项,各界面的跳转连接等功能由我实现;出题,解题,注册账号等功能由欧阳生同学进行实践。后期,我们共同完成了前后端的合并,并共同对软件进行了测试和改进。
三、具体过程
1、复用个人项目实现出题模块
本次的出题模块,我们选择复用之前已经实现了的个人项目的代码
create类中包含三个方法:primary,middle,high,分别用来实现出小学,初中,高中难度的题目。去掉了之前的文件流操作,采用字符串数组进行存储。
这三个方法完成的工作包括:生成随机数,生成随机符号,判断括号生成是否符合要求,将数字与运算符号,三角函数等符号进行组合。通过复用xiao_xue,chu_zhong,gao_zhong三个个人项目中的类可以轻松完成。
2、实现做题功能的模块
经过查找资料,发现可以使用Javascript里的eval()函数实现计算。eval函数是一种接受字符串作为参数,并且可以将接受的字符串转换成js表达式并且立即执行该表达式。
根据该函数要求写出计算的函数:
经过多次测试,发现该方法很好用。
3、各界面UI设计
使用了Java的Swing组件完成了JavaGUI的设计
使用了Jpanel作为整个窗口的设计,JButton作为按钮,JTextField作为文本框进行文本的输入。对于每个按键都进行其响应函数的设计,保证每个按键都有着其后续的作用。
对于每个能够进行文本输入的地方也进行了限制,防止输入奇怪的东西导致报错甚至程序崩溃;对于一些不合法的输入,也会进行弹窗以提示用户输入的问题,保证了良好的用户体验。在前端UI的设计上,保证留出恰当的接口与后端对接,保证从前端读到的数据和后端的数据流通,进行数据库层面的增删查操作。
登陆界面,用户名和密码会与数据库中数据进行比对。
注册界面,对于密码进行比对,同时检验其合法性。
选择难度界面,不同按键响应不同函数。
选择题目数量界面。
题目界面。
得分界面。
数据库,短信发送等部分详见欧阳生同学的博客。
四、总结
对于结对编程项目,我觉得和队友的合作很重要。本次我和欧阳生同学的配合合作还是非常默契的,我们对于前后端自己所负责的部分都很清晰,也方便了我们在对接时解决很多的问题。这也是我第一次和他人合作完成项目,是一场非常宝贵的经验,一个成功的软件工程师一定是在不断的合作中练就的。
欧阳生同学细心靠谱,我俩的项目完成的速度也比较快,靠谱的队友就是成功的一半!小组合作我觉得沟通非常重要,我们在前期已经构思好了基本的一些框架,比如哪些东西怎样去完成实现,到真正动手去做就会得心应手,在完善的过程中可能会有一些变化,这就需要及时和队友进行沟通,也方便对方进行调整。
经验教训就是还是要好好学习!做项目就会发现还是有很多地方不足,对于知识的应用有着很大的漏洞;还要锻炼自己查资料的能力,做到“有效查资料”。对于自己的模块尽量做到尽善尽美,多次进行测试,否则的话你不知道对接起来都会有什么奇奇怪怪的问题。在软件工程的学习上,道阻且长,继续加油。