结对编程,一次治愈的编程体验

从个人编程到结对编程,加了一些需求,GUI,短信验证码,存用户和密码,算题目结果,计算得分

于是我和可熊就开始了愉快的分工,我做后端,他做前台,到时候一拼就行了😊

也就是所有的方法,出题,解题,注册,登陆,短信验证这些我解决

可熊负责UI,程序框架,工程主体,。

 

考虑到本次要做UI和短信验证,果断放弃c++,我们选择了java,利用swing来做UI

而且短信验证的jdk好像就只有c没有,这次是C党的完全失败(大雾)

 

所以我们把个人项目的c++代码,又用java写了一遍,其中涉及到编码又出现了问题

我为了打出÷,²,等特殊字符,将项目默认的编码方式从GBK改成了UTF-8,

而可雄是默认的GBK,结果最后对接的时候输出的题目都是乱码,。

 

说到我负责的前端,因为我不是很会写类,面向对象学的不好,所以这些需求

我都是用方法的形式解决的,比如出题,我就写了三个方法,小学,初中,高中各一个

public static String primary_produce() //小学
    
public static String middle_produce() //初中
    
public static String high_produce()  //高中

都返回一个string,做题的界面直接调用就行了

 

解题部分,我也写了三个方法一一对应

public static double primaryanswer(String s)

public static double middleanswer(String s)

public static double highanswer(String s)

传入的是product里面所返回的string,返回的是正确答案(double型)

这三个解题的方法体现到了编程的算法,我利用递归来消去括号,然后算出结果

其中要特别考虑小学里面会出现除0,初中的根号下负数,高中的tan90

对于这些结果我都直接返回一个Infinity

 

还有登陆,我写了一个check方法,比较用户的输入和数据库的内容

由于时间关系,并没有用云数据库,只是在本地用一个txt存储(汗)

 

注册是这次最麻烦的一个环节,申请阿里云的短信签名一直过不了,。

最后不得不用榛子云的服务,这里放一下他们的网站

跟一个钓鱼网站一样,让人无力吐槽,不过他们的jdk异常的好用,真香!

public static void main(String argv[]) throws Exception{
        
        ZhenziSmsClient client = new ZhenziSmsClient("http://sms_developer.zhenzikj.com","100002","be6bacaa-a4ff-4db1-8416-169b5bb227c1");
        String result = client.send("15616216776", "这里是开阿,您的验证码为4396");
        System.out.println(client.balance());    
        
    }

在导入官网的jdk后,用上面的方法就可以实现短信验证码了,很简单

 

由于我写的全是方法,所以这次用的是可熊的工程,他留好位置,把我的方法复制进去就可以直接用

关于UI部分,可熊网上买了相关书籍,然后一天速成UI,。

经过两天的爆肝,就写出了这次的程序,。

这里摘录一些可熊的代码,贯彻了他一味的特点,编程习惯很好,命名,结构,注释都很优雅!

private JPanel getStatePanel() {
        if (statePanel == null) {// 状态面板对象为空
            GridBagConstraints gridBagConstraints6 = new GridBagConstraints();// 创建网格限制对象
            gridBagConstraints6.gridx = 2;// 组件位于网格的横向索引为2
            gridBagConstraints6.fill = GridBagConstraints.VERTICAL;// 组件垂直扩大以占据空白区域
            gridBagConstraints6.insets = new Insets(0, 5, 0, 5);// 组件彼此的间距
            gridBagConstraints6.gridy = 0;// 组件位于网格的纵向索引为0
            GridBagConstraints gridBagConstraints4 = new GridBagConstraints();// 创建网格限制对象
            gridBagConstraints4.gridx = 3;// 组件位于网格的横向索引为3
            gridBagConstraints4.gridy = 0;// 组件位于网格的纵向索引为0
            GridBagConstraints gridBagConstraints3 = new GridBagConstraints();// 创建网格限制对象
            gridBagConstraints3.gridx = 6;// 组件位于网格的横向索引为6
            gridBagConstraints3.fill = GridBagConstraints.VERTICAL;// 组件垂直扩大以占据空白区域
            gridBagConstraints3.insets = new Insets(0, 5, 0, 5);// 组件彼此的间距
            gridBagConstraints3.gridy = 0;// 组件位于网格的纵向索引为0
            GridBagConstraints gridBagConstraints11 = new GridBagConstraints();// 创建网格限制对象
            gridBagConstraints11.gridx = 5;// 组件位于网格的横向索引为5
            gridBagConstraints11.insets = new Insets(0, 5, 0, 5);// 组件彼此的间距
            gridBagConstraints11.gridy = 0;// 组件位于网格的纵向索引为0
            nowDateLabel = new JLabel();// “当前日期”标签
            Date now = new Date();// 创建Date对象
            nowDateLabel.setText(String.format("%tF", now));// 设置“当前日期”标签的文本内容
            GridBagConstraints gridBagConstraints2 = new GridBagConstraints();// 创建网格限制对象
            gridBagConstraints2.gridx = 7;// 组件位于网格的横向索引为7
            gridBagConstraints2.weightx = 0.0;// 组件横向上不扩大
            gridBagConstraints2.fill = GridBagConstraints.NONE;// 组件不扩大
            gridBagConstraints2.gridy = 0;// 组件位于网格的纵向索引为0
            nameLabel = new JLabel(" 开阿关阿PRESENT ");// “公司名称”标签
            GridBagConstraints gridBagConstraints1 = new GridBagConstraints();// 创建网格限制对象
            gridBagConstraints1.gridx = 4;// 组件位于网格的横向索引为4
            gridBagConstraints1.fill = GridBagConstraints.VERTICAL;// 组件垂直扩大以占据空白区域
            gridBagConstraints1.weighty = 1.0;// 组件纵向扩大的权重是1.0
            gridBagConstraints1.insets = new Insets(0, 5, 0, 5);// 组件彼此的间距
            gridBagConstraints1.gridy = 0;// 组件位于网格的纵向索引为0
            GridBagConstraints gridBagConstraints = new GridBagConstraints();// 创建网格限制对象
            gridBagConstraints.gridx = 0;// 组件位于网格的横向索引为0
            gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;// 组件水平扩大以占据空白区域
            gridBagConstraints.weightx = 1.0;// 组件横向扩大的权重是1.0
            gridBagConstraints.gridy = 0;// 组件位于网格的纵向索引为0
            statePanel = new JPanel();// 状态面板
            statePanel.setLayout(new GridBagLayout());// 设置状态面板的布局
            statePanel.setBorder(BorderFactory.createBevelBorder(RAISED));// 设置状态面板的边框
            statePanel.add(getStateLabel(), gridBagConstraints);// 向状态面板中添加选定窗体状态标签
            statePanel.add(getJSeparator(), gridBagConstraints1);// 向状态面板中添加分隔符
            statePanel.add(nameLabel, gridBagConstraints2);// 向状态面板中添加“公司名称”标签
            statePanel.add(getJSeparator1(), gridBagConstraints3);// 向状态面板中添加分隔符
            statePanel.add(nowDateLabel, gridBagConstraints11);// 向状态面板中添加“当前日期”标签
            statePanel.add(getCzyStateLabel(), gridBagConstraints4);// 向状态面板中添加“用户”标签
            statePanel.add(getJSeparator2(), gridBagConstraints6);// 向状态面板中添加分隔符
        }
        return statePanel;
    }

 

所以最后我们只花了3个小时就整合成功,可以说是小成功了。,

 

 

 

 

 

 具体就是这样了,成果不是坠吼的,还需要提高姿势水平!

 

posted @ 2018-10-08 20:06  clearl0ve8  阅读(233)  评论(0)    收藏  举报