精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
学员刘同学以高中文凭在学习10天C语言基础后,成功完成了本实践,并且在YY上进行了语音交流。
制作这个代码的目的就是实践ATM机的一些简单功能,题目要求如下:
定义1个结构体类型ACCOUNT_STRU来表示一个银行帐户。
定义1个ACCOUNT_STRU数组来表示银行。
写个函数来表示ATM的功能的模拟:
开户
销户
查询余额
查询最后5笔明细
存款
取款
转帐
退出
程序启动后,以代码方式生成几个帐户,新帐户通过键盘输入数据来生成。
从题意分析,要写这个代码,要用到的技术有:函数、结构体、数组、循环、输入输出、字符串的处理、Dos环境下的循环界面和复杂操作符的使用等。
首先,在函数部分,我用main函数来构造主框架,也就是实现Dos环境下的循环,用了一些子函数来实现ATM机的单个功能,来供主函数调用,还写了一个用来验证密码的函数来供这些子函数调用。另外还把帐户明细的处理封装成了函数,在存款、取款和转帐功能里调用。
首先,如果没有各个功能的子函数,主函数的代码肯定有至少200行了,拆成子函数后,各个函数的长度控制在30行左右,在阅读上方便了很多。有些具备通用性的代码封装成子函数,也是我在实践中发现的,有的也是在老师提示下想到。
另外函数的声明形式和函数定义形式也进行了实践。
我用结构体来实现个人的帐户功能,结构体里设计的成员是根据功能来确定的,首先是帐户ID,整型的;密码,字符串;余额,整型的;状态,表示帐户是否注销,或可用;明细数组,整型数组;明细偏移,整型的。
这里老师引导我从功能上来确定成员,比如状态,由于银行帐户的数据的模拟形式是数组类型,是静态全局的,某个帐户不存在分配和释放的情况,所以要注销就只能通过标志来实现,标志就演变为状态变量。
并且老师再次强调复杂的功能在提供了合适的数据成员基础上,也是容易实现的。比如要实现最后5笔明细,有5笔不是一笔,肯定要用数组了。最后5笔,隐含的意思要知道现在有多少笔,所以要定义个整型变量来记录下多少笔。知道有多少笔,在少于5笔时,就把新明细写到当前笔对应的项里,在大于5笔时就向上移动数组,把新明细写入到数组最后里。
用一个结构体数组来代表银行。函数中用到的数组有很多,比如说银行存放每个帐户的信息,这就用到数组来表示。
主函数main函数的框架主要就由数组循环while语句和一个switch语句来组成,而各个子函数中用到的循环就更多,比如说开户,这就要写一个for循环或者while循环来实现在输入错误时,返回到循环开始的功能,让用户再次输入。
输入和输出
而输入输出就用到gets(),和scanf来实现各个数据的键入和显示。
字符串处理
在字符串的处理上,我用了一些比如strcmp的字符串来比较两个数据的大小。
Dos环境下的循环界面
而Dos环境下的循环界面,是由主函数main来实现,这个循环是为了在主界面,也就是菜单界面中来选择各个功能,实现各个功能后,能再回到主界面供用户选择,或者是退出。在循环中就是一个switch语句,来实现选中的子函数的功能。switch判断的是输入的结果字符串对应的整型值。如果输入9,则表示退出。
整个流程的伪代码为:
提示
输入
while(判断提示)
{
转换提示
根据转换结果调用子功能
提示
再输入
}
复杂操作符的使用
取模,在设计存款时,考虑每张纸币必须是100的,所以就用了%来判断金额。
初学者错误
模糊,对概念有深入印象,对形式和分几个要点说不上来。
遇到的编译错误有:
下面有函数定义,上面没有函数声明,则函数不能用。
函数的调用写成了函数的声明
函数的返回值怎么用
函数的声明和函数定义不一样,比如返回值不一样,参数类型不一样。
对字符串的比较用了==号,strcmp
结构体成员的访问,开始直接用结构体数组里某项来用,没想到要用点.来访问数据成员。
这个代码写了330多行,花费了10个小时左右的时间。写这个代码让我学会在写代码时,首先就是要态度端正,要在心里就重视起来,这样在写的时候就会用心去写,效率也会提高。再来就是要有耐心,因为想要让一个函数实现一个功能,就必须先构思,思考自己应该会用到什么样的技术,而一个小的功能用到的技术就很多,用的到代码就可能就会很长。而在技术点不清楚的时候一定要耐心的思考,仔细的回忆学到的知识点,触类旁通。接触到不懂的地方就要多问,自己也要思考,联想。
有代码发布前,老师在逻辑上检查出了一些错误,让我对于严谨二字又有了深切的感悟,大的功能总是要反应到变量使用这些细节上的,细节写对了,才能保证大的功能。