• POS消費交易的编程笔记


    《一个菜鸟应用软件工程师的成长故事》(5)

    通过将近一个多月的努力,终于在今天完成了一个不算很完整的POS消费交易工程。在这段时间里,我学习到了很多东西,也遇到过很多问题。幸运的是,绝大部分问题都已经被解决了,没解决的问题,我也会继续努力搞定。

    越是深入学习开发应用程序,对于编程知识的要求就越是细化。没事多看看书,是很有必要的。编程语言一直在发展,我们的知识也要及时更新,否则,落后就要被淘汰!

    下面是我的后续工作笔记。

    -----------------------------------
    日期:2012/9/19,周三
    时间:下午14点20分
    地点:公司
    事件:修改程序(Magnetic)
    -----------------------------------
    1.要特别注意,打印机的开启与关闭是否有冲突,这能导致POS

    机重启。
    2.创建加密区之后,要记得释放加密区所占的内存空间
    -----------------------------------
    日期:2012/9/20,周四
    时间:上午10点18分
    地点:公司
    事件:修改程序(Schemes)
    -----------------------------------
    1.写任何的程序,注释都很重要。
    2.密码加密要用到schems里的.SGN文件,要记得加进工程里。
    -----------------------------------
    日期:2012/9/21,周五
    时间:下午15点34分
    地点:公司
    事件:修改工程(trainone)编译环境
    -----------------------------------
    1.系统函数库里的.cpp函数不要加进工程里,暂时还用不到,如

    果加进去了,而引用不当,会造成很多错误的,编译不能通过。
    2.引用函数的前提是,函数已经被声明和定义,否则会出现错误

    。声明函数,只是告诉编译器这个函数的存在,要准备给它预留

    一点空间,只有定义之后,编译器才会为函数预留出一片内存空

    间,只有在主函数调用这个函数之后,那片内存空间才真正属于

    这个函数。
    3.如果不先声明函数,而直接定义函数,有可能会因为内存空间

    不足而导致系统崩溃。所以,良好的习惯是,先声明函数,再定

    义函数。
    -----------------------------------
    日期:2012/9/24,周一
    时间:下午15点36分
    地点:公司
    事件:修改程序(Schemes)
    -----------------------------------
    1.密码键盘IPP220的代号是IPP2XX。
    2.逻辑的错误最难修正,
    -----------------------------------
    日期:2012/9/25,周二
    时间:下午14点13分
    地点:公司
    事件:修改程序(Input)
    -----------------------------------
    1.可以通过调用SHOWMENU函数来解决金额输入的问题。
    2.给不同类型的变量赋值要强制转换类型。
    -----------------------------------
    日期:2012/9/26,周三
    时间:上午11点33分
    地点:公司
    事件:修改程序(Magnetic)
    -----------------------------------
    1.选择编译方式的时候,最好选择重编译(rebuild),因为如果

    只编译当前工程的话,可能会导致一些修改没能被编译进工程里

    。重编译虽然慢了些,但保证修改的有效性。
    2.算法的优化可以留着工程完成之后再进行。
    -----------------------------------
    日期:2012/9/27,周四
    时间:上午11点30分
    地点:公司
    事件:修改程序(Schemes)
    -----------------------------------
    1.数组的拷贝可以用系统函数来实现。
    2.字符和字节的转换,要考虑好所有情况。
    -----------------------------------
    日期:2012/9/28,周五
    时间:下午15点25分
    地点:公司
    事件:修改程序(FMG)
    -----------------------------------
    1.在IAC里用SEVICESCALL调用USER2。
    2.用SIZEOF计算长度的时候,要注意,字符末尾还存在一个

    NULL终止符。
    3.要想使多个源文件能用同一个结构体,那么就要在头文件里声

    明结构体,在一个源文件中定义变量,其他源文件在使用结构体

    变量前,得在变量前加关键字extern来定义变量,如此,才能正

    确引用。
    比如,在A.C源文件里定义了结构变量ST.AO,那么其他源文件

    要引用CAO,则需定义exetern  ST.CAO;当然,不乏其他方法,

    待以后研究。
    -----------------------------------
    日期:2012/10/09,周二
    时间:下午15点05分
    地点:公司
    事件:修改程序(FMG)
    -----------------------------------
    1.字符串数组的赋值可以有几种方式。
    比如:在定义的时候初始化,char a[20]="hello";
    或者char a[20]={'h','e','l','l','o',};
    由于终止符'/0'的存在,字符串数组的大小要比它存储的字符串长

    度大1.
    2.unsigned long类型变量在输出时,其格式转换说明符为lu,而

    long int则为ld。
    -----------------------------------
    日期:2012/10/10,周三
    时间:下午15点17分
    地点:公司
    事件:修改程序(FMG)
    -----------------------------------
    1.在给字符串数组赋值时,要注意字符串数组的大小是否足够,

    如果不够,则会造成溢出错误。
    2.打印字符串数组的全部内容时,不用FOR循环,直接使用打印

    函数即可。
    3.数字字符串转化为整数输出的函数是atoi。
    -----------------------------------
    日期:2012/10/12,周五
    时间:下午14点17分
    地点:公司
    事件:修改程序(IAC)
    -----------------------------------
    1.驱动人生不如驱动精灵好用。
    -----------------------------------
    日期:2012/10/15,周一
    时间:上午10点30分
    地点:公司
    事件:调试程序(ComSerial)
    -----------------------------------
    1.系统函数库的添加一定要慎重,引用不当会造成某些程序段无

    法正常执行。
    2.Source Insight这款软件的使用,界面很清晰,有很好的全局观

    ,Ctrl+.或者Ctrl+,是执行步骤向前或向后,Ctrl+Shift+F是查找。
    -----------------------------------
    日期:2012/10/16,周二
    时间:下午17点37分
    地点:公司
    事件:调试程序(FMG)
    -----------------------------------
    1.重打印和查询交易虽然内容差不多,但不是一个概念。
    -----------------------------------
    日期:2012/10/17,周三
    时间:下午19点27分
    地点:公司
    事件:调试程序(FMG)
    -----------------------------------
    1.交易汇总的数据应该在一个函数中设为变量,然后循环读取

    BATCH里面存取的交易信息,计算交易汇总量,再显示出来。
    -----------------------------------
    日期:2012/10/18,周四
    时间:下午20点31分
    地点:公司
    事件:调试程序(FMG)
    -----------------------------------
    1.键盘和磁道的开关,一定要注意,操作不当,会导致机器重启
    2.待机界面可以直接刷卡,后台会自动处理,需要进入EMV的一

    个函数里进行卡的参数提取与传递。
    -----------------------------------
    日期:2012/10/19,周五
    时间:上午11点36分
    地点:公司
    事件:调试工程(trainone)
    -----------------------------------
    1.预编译头文件只能解决同一个头文件被同一个源文件多次包含

    的问题,不能解决多个源文件包含同一个头文件的问题。
    2.字节只以八进制的形式在调试窗口里显示,要想看十六进制的

    形态,要点进相应数组的元素里才能查看。
    -----------------------------------
    日期:2012/10/22,周一
    时间:下午19点10分
    地点:公司
    事件:调试程序(FMG)
    -----------------------------------
    1.数组名可以用作指针,但不能作为左值,因为它是常量。
    2.假如int *i;则i++表示指针向前移了一位,*i++则表示i指向的值加

    1。此外,指针不能相加。
    3.MAC的计算函数参数里,数组的长度值要是8的倍数。
    -----------------------------------
    日期:2012/10/25,周四
    时间:下午16点23分
    地点:公司
    事件:调试工程(Trainone)
    -----------------------------------
    1.假如结构体成员是一个字节数组,那么,在一个函数中用它给

    另外一个局部变量(字节数组)赋值的过程中,很有可能会造成

    数据丢失,赋值不准确。造成这样情况的原因,还未知晓。
    2.通过IAC,用SeviceCall调用user2进行数据打印。
    -----------------------------------
    日期:2012/10/26,周五
    时间:上午11点18分
    地点:公司
    事件:调试工程(Trainone)
    -----------------------------------
    1.在打印很多数据的时候,等待时间应该稍微长一些,以保证所

    有需要打印的数据都能打印出来。
    2.结构体变量初始化之后,通过该变量引用的结构体成员都被初

    始化。假如有一个结构体AA,定义结构体变量 AA  a,初始化该

    变量即可用memset(&a,0,sizeof(AA));
    -----------------------------------
    日期:2012/10/29,周一
    时间:下午16点48分
    地点:公司
    事件:调试工程(Trainone)
    -----------------------------------
    1.串口通信和以太网的通信过程差不多,前者要求对发送数据进

    行一些与串口有关的处理,比如填加02...03和校验码,而后者则

    要求添加数据段的长度位。
    2.MAC校验的前提是双方都用同一组密钥,并且安全级别相同。

  • 相关阅读:
    mysql查询不同用户(操作记录)的最新一条记录
    Mysql复制一条或多条记录并插入表|mysql从某表复制一条记录到另一张表
    获取股票数据接口(腾讯)
    uni-app微信相关开发问题记录:微信分享报错"包名不对,请检查包名是否与开放平台填写一致"、Android微信支付只能调起一次的问题、App微信登录与公众号微信登录的unionid不一致
    如何生成Android签名证书、安卓签名获取工具获取APP签名报错:NameNotFoundException: Signs is null的问题
    uniapp微信APP支付踩坑指南:报错errMsg: "requestPayment:fail errors"
    浅析判断一个APP是原生的还是H5页面
    uniapp nvue开发注意事项
    浅析Redis(整合Springboot、订阅发布、集群、雪崩、穿透、击穿)
    uniapp引入iconfont图标及解决真机中iconfont不显示的问题
  • 原文地址:https://www.cnblogs.com/miyosan/p/2745109.html
Copyright © 2020-2023  润新知