绥化学院程序设计实践实验报告范例 参考
附:项目三书写格式
项目三:汇款系统
1、实验目的:
(1)掌握C语言整型变量、实型变量、字符数组的初始化、引用。
(2)掌握C语言的循环控制、通过循环控制引用字符数组中的元素进行操作。 (3)通过对部分C库函数的使用,掌握最基本的程序控制,字符数组操作,自定义函数的编写。
(3)了解C语言中数组参数的传递如何通过指针来实现。 2、项目简介
电子汇兑系统是国家邮政局为了适应市场竞争,彻底改变传统邮政汇兑的手工方式,建立的一个连接国家邮政局、31个省局、2468个县局和大量的基层网点的安全、稳定高效的系统,它将传统邮政汇兑的传递实物汇票的方式改变为以电子信息传递汇兑数据,以电子信息作为业务交易。业务种类有普通、电子汇款、加急汇款、特急汇款。本项目仅仅模拟了电子汇兑电子汇款中计算汇费的部分,不包括邮政电子汇兑其他附加服务所收取的费用。下面我们来了解一下汇费计算的具体需求: (1)国内邮政电子汇兑每笔汇款最高限额为5万元,最低汇款限额每笔为1元。 (2)限额内按汇款金额的1%收取汇费,每笔汇款最低汇费2元,最高汇费50元。
3、需求分析
我们根据项目需求简介中汇费计算的具体需求,来分析一下汇费的计算方法,如下:
限额内按汇款金额的1%收取汇费:汇费 = 汇款金额 × 0.01
每笔汇款最低汇费2元:如果汇费小于最低汇费,则汇费 = 2元。 每笔汇款最高汇费50元:如果汇费大于最高汇费,则汇费 = 50元。 下面,举例来说明汇费的计算方法。 汇款金额计算方法
1600元:计算公式为 1600 × 0.01 = 16元
6000元:计算公式为 6000 × 0.01 = 60元 大于最高汇费50元,则汇费 = 50元。 10元:计算公式为 10 × 0.01 = 0.1元 小于最低汇费2元,则汇费 = 2元。
4、系统设计
(1)功能概述:输入汇款金额,计算出应缴纳的汇费。 (2)系统主要功能:
1.主函数:循环录入汇款金额,并计算出汇费,录入?0?表示结束。
2.数据的合法性检查:输入汇款金额,检查数据的合法性,必须大于等于1,小于等于50000,必须是包含一个小数点的金额格式。 3.计算:根据汇款金额,计算出应缴汇费。 (3)汇款系统流程图:
41
绥化学院程序设计实践实验报告范例 参考
开始录入汇款金额格式非法格式是否合法格式合法0非 01-50000小于1或者大于50000计算汇费0 结束打印汇费结束5、系统实现
(1)系统主函数main()实现
在主函数中,循环获得录入的汇款金额,把汇款金额当做参数,传递给格式判断函数,判断汇款金额格式是否合法,格式非法则停止当前循环,进入下一次循环;格式合法然后判断汇款金额是0还是正常汇款金额(1到50000),0表示退出程序;非正常汇款金额(小于1或者大于50000)停止当前循环,进入下一次循环;如果是正常汇款金额把正常汇款金额当作参数,传递给汇费计算函数,计算返回应缴汇费。最后把结果打印到屏幕上,进入下一次循环。 在主函数main()之前添加需要的系统头文件: #include
包含以上系统头文件后才能正常调用C语言的库函数,首先得到用户录入的汇款金额。功能的实现是通过C语言的字符串处理函数gets实现的。接着调用自定义函数CheckMoney检查汇款金额格式是否合法。如果汇款金额格式非法,则提示“录入的金额格式非法!” continue停止当前这一遍循环,然后直接尝试下一遍循环继续提示用户“请录入汇款金额(元),0表示结束:”。
如果汇款金额格式合法,首先调用atof函数将汇款金额字符数组转换成实型数据,然后判断汇款金额是否是?0?,如果用户录入?0?则break退出循环,正常结束程序。
如果汇款金额非?0?,然后判断汇款金额是否低于最低汇款限额1元。如果低于最低汇款限额,则提示“低于最低汇款限额!” continue停止当前这一遍循环,然后直接尝试下一遍循环继续提示用户“请录入汇款金额(元),0表示结束:”。 如果汇款金额不低于最低汇款限额1元,则判断录入的汇款金额是否超过最高汇款限额50000元。如果超过最高汇款限额,则提示“超过最高汇款限额!” continue停止当前这一遍循环,然后直接尝试下一遍循环继续提示用户“请录入汇款金额(元),0表示结束:”。 如果汇款金额格式正常,没有超出汇款金额限制范围,则调用自定义函数Get_Fee根据汇款金额计算汇费,然后调用printf函数显示应收汇费。继续下一遍循环继续提示用户“请录入汇款金额(元),0表示结束:”。 (2)自定义函数CheckMoney
函数CheckMoney的形参money为指向字符数组的指针变量,函数开始执行时,money指向实参cmoney[0]。为什么函数CheckMoney的参数要定义成指针呢?
42
绥化学院程序设计实践实验报告范例 参考
因为:数组的名字就是指向首元素的指针,取数组元素可以通过指针运算获得,数组参数的传递通过指针来实现。首先调用C语言的字符串库函数memset初始化临时字符数组变量cStrTmp,然后调用同样是C语言的字符串库函数memcpy将money中的内容复制到cStrTmp中。 6、源码
#include
//检查录入的汇款金额格式是否合法。 int CheckMoney(char * money); //根据汇款金额计算汇费。 double Get_Fee(double money); main() {
char cmoney[100];//汇款金额
double dmoney = 0,dfee = 0;//汇款金额,汇费
printf(\ printf(\ ***\\n\ printf(\ (欢迎光临汇款系统) ***\\n\ printf(\ ***\\n\ printf(\ for(;;) {
memset(cmoney, 0 , sizeof(cmoney)); printf(\请录入汇款金额(元),0表示结束:\ gets(cmoney);
//检查录入的汇款金额格式是否合法 if(CheckMoney(cmoney)) {
printf(\录入的金额格式非法!\\n\ continue; }
dmoney = atof(cmoney); //判断是否退出循环 if(dmoney == 0) {
break; }
//判断汇款金额是否低于最低汇款限额1元 if(dmoney < 1) {
printf(\低于最低汇款限额!\\n\ continue; }
//判断汇款金额是否超过最高汇款限额50000元 if(dmoney > 50000) {
43
绥化学院程序设计实践实验报告范例 参考
printf(\超过最高汇款限额!\\n\ continue; }
//根据汇款金额计算汇费 dfee = Get_Fee(dmoney);
printf(\汇款金额:%8.2f元,应收汇费:%8.2f元\\n\ }
exit(0); }
//检查录入的汇款金额格式是否合法。输入参数:汇款金额。返回值:1 格式非法;0 格式正确
int CheckMoney(char * money) {
char cStrTmp[100];//
int i,length = 0,flag = 0;//循环变量,字符串长度,小数点出现的次数标志 memset(cStrTmp, 0, sizeof(cStrTmp));
memcpy(cStrTmp, money, sizeof(cStrTmp)); length = strlen(cStrTmp);
//循环检查字符串中每一个字符的合法性 for(i=0; i //如果小数点出现大于1次,格式非法 if(flag > 1) { return 1; } //如果小数点出现,小数点出现的次数标志加1 if(cStrTmp[i] == '.') { flag += 1; continue; } //如果字符不是数字,格式非法 if(!isdigit(cStrTmp[i])) { return 1; } } return 0; } //根据汇款金额计算汇费。输入参数:汇款金额。返回值:汇费。 double Get_Fee(double money) { double fee = 0; //收取1%汇费 fee = money * 0.01; //最低汇费2元 if(fee < 2) 44 绥化学院程序设计实践实验报告范例 参考 { fee = 2; } //最高汇费50元 if(fee > 50) { fee = 50; } return fee; } 45

