ATM取款机模拟系统-程序设计-报告(完成版)

更新时间:2024-01-22 17:02:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

目录

三、编程题部分(银行ATM模拟存取系统)

1、设计内容????????????????第2页

2、设计?????????????????? 第2页

(1)数据分析???????????????? 第2页 (2)程序流程分析?????????????? 第3页

3、编码及调试??????????????? 第13页 4、程序运行截图?????????????? 第32页

四、总结与体会??????????????? 第37页 五、参考文献???????????????? 第39页

1

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

三、编程题部分

1、设计内容

完成一个管理类的综合型设计:银行ATM模拟存取系统。要求学生进行数据结构的设计、对函数进行模块化结构化设计、并灵活运用数组、结构体、指针、文件等多种数据类型设计开发系统。通过写程序,学生应掌握用计算机程序设计语言解决实际问题的方法、步骤。该系统应该具有以下功能: 1)账户管理功能 a) 开户:完成账户注册的功能。即输入账户的相关信息。要求账户号长度12位,密码长度不得低于6位,必须使用暗码,账户信息保存到数组中,账户信息最后保存到相关文件中;

b) 账户登录:输入账户、密码,验证是否能够登录该系统; c)密码修改:输入两次相同的密码方可修改。 2)账务管理功能

a) 存款:每笔存款金额大于0元小于等于1000元,以50元为基本单位。需记录交易日期和时间。

b) 取款:每笔取款金额大于等于100元小于等于2000元,以50元为基本单位。需记录交易日期和时间。

c) 转账:每笔转账金额大于等于100元小于等于5000元。需记录交易日期和时间。

3)查询功能 a) 存款记录查询 b) 取款记录查询 c) 转账记录查询 d) 余额查询

4)文件功能及其它功能:数据都应保存在相关文件中。

2、设计

(1) 数据分析(描述定义的各主要变量的作用及意义);

char zhanghao[16];/*用户账号*/ char xingming[9];/*用户姓名*/ char mima[7];/*账户密码*/ char shengfenzheng[19];/*用户身份证号*/ float yue;/*账户余额*/ char kaihushijian[50];/*开户时间*/ char zhanghao[16];/*交易的账号*/ char jiaoyishijian[50];/*交易时间*/ char leixing[5];/*交易类型*/ float jiaoyijine;/*交易金额*/ float jiaoyiyue;/*交易后的余额*/ char duifangzhanghao[12];/*交易时的对方账号*/

2

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

int zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户

序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/ 注册函数:

int baiwei,shiwei,gewei,len;/*定义账号的后三位*/ char mima2[7];/*注册时第二次输入的密码*/

登录函数: char zhanghao[16],mima[7];/*登录时输入的账号和密码*/

装载和保存文件函数: FILE *fp;/*定义文件指针*/

char wenjianming[13];/*定义输入的文件名*/ 存、取款,转账函数:

float jine;/*输入的存、取款,转账金额*/

char t[30];/*把取得的存、取款,转账时间赋给该数组*/ 转账函数:

char duifangzhanghao[16],c;/*输入的对方账号赋给该数组。在判断是否继续时,把输入的字符Y或N赋给c,以便读入选择*/ 修改密码函数:

char mima[7],xinmima1[7],xinmima2[7];/*旧密码,第一次输入的新密码,第二次输入的新密码*/

(2)程序流程分析(描述主程序的基本构成、函数设计、函数的调用关系、各部分的流程图等。)

主程序的基本构成::

struct Zhanghu

{};/*账户的结构体*/ typedef struct

{}Jiaoyi;/*交易记录的结构体*/ int menu(); /*主菜单函数*/

void zhuce(); /*主菜单功能函数—注册函数*/ void denglu(); /*主菜单功能函数登录函数*/ void zhuangzai(); /*主菜单功能函数装载数据函数*/ void baocun(); /*主菜单功能函数保存数据函数*/

int denglu_menu(); /*登录菜单函数*/

void cunkuan(); /*登录菜单功能函数—存款函数*/ void qukuan(); /*登录菜单功能函数—取款函数*/ void zhuanzhang(); /*登录菜单功能函数—转账函数*/ void chaxun(); /*登录菜单功能函数—查询函数*/

void xiugaimima(); /*登录菜单功能函数—修改密码函数*/

int chaxun_menu(); /*查询菜单函数*/

void chaxun_yue(); /*查询菜单功能函数—查询余额函数*/

3

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

void chaxun_mingxi(); /*查询菜单功能函数—查询明细函数*/ void chaxun_cunkuan(); /*查询菜单功能函数—查询存款函数*/ void chaxun_qukuan(); /*查询菜单功能函数—查询取款函数*/ void chaxun_zhuanzhang();/*查询菜单功能函数—查询转账函数*/

函数设计:

本程序在函数设计上采用结构化程序设计方法,自顶向下,逐步根据功能设计函数,逐步细化设计,由浅入深,模块化设计,保证了程序的可读性和质量。先设计主菜单(一级菜单)的功能函数,再设计二级菜单的功能函数,自顶而下,逐步细化。如图示意:

(顶层设计) 注 册 怎(第二层 样设计) 注二级菜单 册

(第三层设计)

主菜单功能 登录 装载 保存 存款 取款 转账 查询 怎样读入 怎样保存

4

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

函数调用关系: main strcpyzhuce strlenstrcmpstrcmpcunkuan strcmp denglu qukuan zhuangzhang strcpy chaxun_menu denglu_menu chaxun_yue chaxun chaxun_mingxi chaxun_cunkuan chaxun_qukuan xiugaimima fopen fscanf fgets zhuangzai chaxun_zhuanzhang fopen fclose fprint baocun fclose menu 5

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

注册函数的流程图:

开始 定义数据变量,调用时间函数,设置账号的随机分配

输入姓名

输入两次密码

N 两次密码相同

Y 输入身份证号

也 号位数既不为 15 Y 不为18

N 输入存款金额

输出账户和第一次

交易的数据清单

结束

6

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

登录函数的流程图: 开始 定义个变量,i=0 输入账号 N i

7

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

修改密码函数的流程图:

开始

输入账号

输入旧密码

密码正确 N return;

Y

输入两次新密码

N

N 两次密码输次数为3 入相同

Y Y return; 密码修改成功

结束

8

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

存款函数的流程图: 开始 system(\

输入存款金额jine jineP!=0||jine<=0 jineP!=0||jine<=0 Y N 调用时间函数 return; 调用strcpy函数复制账号、类型、时间。计算余额 存款成功 输出存款的交易记录 结束 返回 取款函数的流程图:

开始 system(\ 输入取款金额jine 取款金额大于账户余额 Y N jineP!=0|| jine<=0 输出提示, return; N Y return; 调用时间函数 调用strcpy函数复制账号、类型、时间。计算余额 输出存款的交易记录 结束 返回 9

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

转账函数的流程图:

开始

输入对方账号

Y 是否与当前登录return;

账号相同

N

N return; i

Y

输入的账号与已注 Y i=zhanghuxuhao 册的某一账号相同

N 输出对方账号的姓名

i++; N return; 是否继续

Y

输入转账金额jine

Y return; jine大于账户余额

N

jine<=0 Y

N

显示警告信息

10

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

N return; 是否继续

Y 执行转账语句 装载函数的流程图: 输出转账交易记录 开始

输入要读入数结束

据的文件名

找不到该文 Y 返回 件名

N N i

N Y i

从文件中读入交易记录的数据 i++ 信息

i++

关闭文件

结束

11

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

保存函数的流程图:

开始

输入要保存数

据的文件名

新建该文件, 若 Y 返回 打不开文件

N N i

N Y i

把交易记录的数据信息输出到 i++ 保存文件

i++

关闭文件

结束

12

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

3、编码及调试

#include #include #include #include #include

#define ZHANGHUSHU 100

/*账户的结构体*/ struct Zhanghu { char zhanghao[16];/*用户账号*/ char xingming[9];/*用户姓名*/ char mima[7];/*账户密码*/ char shengfenzheng[19];/*用户身份证号*/ float yue;/*账户余额*/ char kaihushijian[50];/*开户时间*/ };

typedef struct /*交易记录的结构体*/ { char zhanghao[16];/*交易的账号*/ char jiaoyishijian[50];/*交易时间*/ char leixing[5];/*交易类型*/ float jiaoyijine;/*交易金额*/ float jiaoyiyue;/*交易后的余额*/ char duifangzhanghao[12];/*交易时的对方账号*/ } Jiaoyi;

struct Zhanghu zhanghu[100];/*定义账户的结构体数组,可以注册100个账户*/

int zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*账户序号,交易序号,当前登录的账户下标,转账时对方的账户下标*/

Jiaoyi jiaoyi[1000];/*定义交易记录的结构体数组,可以保存1000条交易记录*/

int menu(); /*声明 主菜单 函数*/ void zhuce(); /*声明 注册 函数*/ void denglu(); /*声明 登录 函数*/ void zhuangzai(); /*声明 装载数据 函数*/ void baocun(); /*声明 保存数据 函数*/

int denglu_menu(); /*声明 登录菜单 函数*/

13

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

void cunkuan(); /*声明 存款 函数*/ void qukuan(); /*声明 取款 函数*/ void zhuanzhang(); /*声明 转账 函数*/ void chaxun(); /*声明 查询 函数*/

void xiugaimima(); /*声明 修改密码 函数*/

int chaxun_menu(); /*声明 查询菜单 函数*/ void chaxun_yue(); /*声明 查询余额 函数*/ void chaxun_mingxi(); /*声明 查询明细 函数*/ void chaxun_cunkuan(); /*声明 查询存款 函数*/ void chaxun_qukuan(); /*声明 查询取款 函数*/ void chaxun_zhuanzhang();/*声明 查询转账 函数*/

void main()/*主函数*/ { system(\设置运行界面的背景颜色为蓝色*/ printf(\欢迎使用ATM终端机!\\n\\n\\n\\t\\t\\t\ system(\暂停功能*/ system(\清屏*/ for(;;)/*空循环语句*/ {

switch(menu()) /*主菜单选择判断*/ {

case 1:zhuce();/*调用注册函数*/ printf(\ break;

case 2:denglu();/*调用登录函数*/ printf(\ break;

case 3:zhuangzai();/*调用装载数据的函数*/ printf(\ break;

case 4:baocun();/*调用保存数据的函数*/ printf(\ break; case 0:

printf(\欢迎使用ATM终端机管理系统。谢谢!\\n\结束程序*/ printf(\ system(\ exit(0);

14

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

} } }

int menu() /*定义主菜单函数*/ {

char c; do {

system(\每次选择运行前清屏*/ printf(\

printf(\终端机管理系统主菜单********\\n\主菜单选择*/ printf(\ printf(\注册|\\n\ printf(\登录|\\n\ printf(\装载数据|\\n\ printf(\保存数据 |\\n\ printf(\退出 |\\n\

printf(\

printf(\ printf(\ printf(\请作出选择(0-4):\ c=getchar(); /*读入选择*/ }while(c<'0'||c>'4');

return(c-'0'); /*c变为空后返回重新选择*/ }

/***************定义主菜单里的各功能函数函数**********************/

void zhuce() /*定义注册函数*/ { int baiwei,shiwei,gewei,len;/*定义账号的后三位*/ char mima2[7];/*注册时第二次输入的密码*/ char t[30];/*开户时间*/ int i,j=0; time_t rawtime; struct tm *timeinfo; time(&rawtime);/*调用时间函数,取得开户时间*/ timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo)); for(i=0;i

15

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

{ t[i]='\\0'; break; } strcpy(zhanghu[zhanghuxuhao].zhanghao,\复制账号的前12位*/ baiwei=zhanghuxuhao/100; shiwei=zhanghuxuhao/10; gewei=zhanghuxuhao; zhanghu[zhanghuxuhao].zhanghao[12]=baiwei+'0'; zhanghu[zhanghuxuhao].zhanghao[13]=shiwei+'0'; zhanghu[zhanghuxuhao].zhanghao[14]=gewei+'0'; zhanghu[zhanghuxuhao].zhanghao[15]='\\0';

system(\运行前清屏*/

printf(\注册功能————ZHUCE GONGNENG\\n\\n\\n\ printf(\请输入姓名:\ fflush(stdin);/*消耗输入字符后的回车操作*/ scanf(\ do { printf(\请输入6位数密码:\ fflush(stdin); scanf(\ len=strlen(zhanghu[zhanghuxuhao].mima); if(len!=6)/*判断密码是否为6位*/ { printf(\您的密码不是6位数!\ system(\ return; } //此处用字符串长度函数来判断密码的位数 printf(\请再次输入密码:\ fflush(stdin); scanf(\ if(strcmp(zhanghu[zhanghuxuhao].mima,mima2)!=0)/*判断两次密码输入是否相同*/ { j++; printf(\您的密码输入错误!您还有%d次机会输入密码!\\n\ } if(j==3)/*密码输入错误不得超过三次*/ { system(\

16

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

return; } } while (strcmp(zhanghu[zhanghuxuhao].mima,mima2)!=0); do { printf(\请输入身份证号:\ fflush(stdin); scanf(\ len=strlen(zhanghu[zhanghuxuhao].shengfenzheng); if(len!=18&&len!=15)/*判断身份证号位数是否为15位或18 位*/ printf(\身份证号错误!请输入15位或18位身份证号!\\n\ }while(len!=18&&len!=15); printf(\请输入存入金额:\ fflush(stdin); scanf(\

if((int)zhanghu[zhanghuxuhao].yueP!=0)/*存款金额必须为50的整数倍*/ { printf(\本终端机只接受50元或100元面值的存款!\ system(\ return; } strcpy(zhanghu[zhanghuxuhao].kaihushijian,t);/*复制开户时间*/

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[zhanghuxuhao].zhanghao);/**/ strcpy(jiaoyi[jiaoyixuhao].leixing,\存\复制交易类型*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间*/ jiaoyi[jiaoyixuhao].jiaoyijine=zhanghu[zhanghuxuhao].yue;/*第一次交易的账户余额值赋给交易经额的值*/

jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yue;/*第一次交易的账户余额值赋给交易余额的值*/ printf(\开户成功!\\t\ system(\暂停功能*/ //输出账户第一次交易的数据清单 printf(\账号\\t\\t交易类型\\t交易金额\\t余额\\t\\t交易时间\\n\ printf(\

17

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

printf(\ %s\ printf(\ printf(\ %.2f\ printf(\ %s\\t\\n\\n\ zhanghuxuhao++;/*账户序号加一*/ jiaoyixuhao++;/*交易序号加一*/ printf(\

system(\暂停*/ }

void denglu() /******定义登录函数*******/ { char zhanghao[16],mima[7];/*登录时输入的账号和密码*/ int i=0,j=0; system(\清屏*/

printf(\登录功能————DENGLU GONGNENG\\n\\n\\n\进入登录得功能界面*/ printf(\输入账号:\ scanf(\输入账号*/ for( i=0;i

printf(\输入密码:\ scanf(\

18

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

if(strcmp(mima,zhanghu[i].mima)!=0) { j++; printf(\您的密码输入错误!您还有%d次机会输入密码!\\n\\n\ } if(j==3)/*密码输入错误不得超过三次*/ { system(\ return; }

}while(strcmp(mima,zhanghu[i].mima)!=0); for(;;)/*空循环语句*/ {

switch(denglu_menu()) /***登陆界面选择判断***/ {

case 1:cunkuan();/*调用存款函数*/ printf(\ break;

case 2:qukuan();/*调用取款函数*/ printf(\ break;

case 3:zhuanzhang();/*调用转账函数*/ printf(\ break;

case 4:chaxun();/*调用查询函数*/ printf(\ break; case 5:xiugaimima();/*调用修改密码函数*/ printf(\ break; case 0:

return;/*返回上一级菜单界面*/ } } } int denglu_menu()/**********************定义**************************/ { char c; do {

19

登录菜单数

函信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

system(\每次选择运行前清屏*/

printf(\*********欢迎进入 登录界面!*********\\n\\n\/*登录界面菜单选择*/

printf(\存款|\\n\ printf(\取款|\\n\ printf(\转账|\\n\ printf(\查询 |\\n\ printf(\修改密码 |\\n\ printf(\返回 |\\n\

printf(\ printf(\请作出选择(0-5):\ c=getchar(); /*读入选择*/ }while(c<'0'||c>'5');

return(c-'0'); /*c变为空后返回重新选择*/ }

void zhuangzai() /*定义装载函数*/ {

FILE *fp;/*定义文件指针*/ int i; char wenjianming[13];/*定义输入的文件名*/ printf(\请输入打开的文件名(文件名.txt):\ fflush(stdin); scanf(\输入要读入数据的文件名*/ if ((fp=fopen(wenjianming,\找不到输入的文件名*/ { printf(\无法打开该文件!\ system(\ return; } fscanf(fp,\ fscanf(fp,\账号\\t\\t姓名\\t密码\\t身份证号\\t余额\\t开户时间\\n\ for(i=0;i

20

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

{ fscanf(fp,\ fgets(jiaoyi[i].jiaoyishijian,30,fp); fscanf(fp,\ &jiaoyi[i].jiaoyijine,&jiaoyi[i].jiaoyiyue); fgets(jiaoyi[i].duifangzhanghao,16,fp); fscanf(fp,\ } fclose(fp);/*关闭文件*/ printf(\读入成功!\\n\\n\ printf(\ system(\}

void baocun() /***定义保存函数***/ { FILE *fp;/*文件指针*/ int i; char wenjianming[13]; printf(\请输入文件名(输入格式为:文件名.txt):\ fflush(stdin); scanf(\输入要保存的文件名*/ if((fp=fopen(wenjianming,\ { printf(\无法打开文件!\\n\\t\\t\\t\ system(\ return; } fprintf(fp,\ fprintf(fp,\账号\\t\\t姓名 \\t密码\\t身份证号\\t\\t\\t余额\\t\\t\\t开户时间\\n\ for(i=0;i

21

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

system(\}

void cunkuan() /*************************定义存款函数***********************/ { float jine;/*输入的存款金额*/ char t[30];/*把取得的存款时间赋给该数组*/ int i; time_t rawtime; struct tm *timeinfo; system(\清屏*/

printf(\存款功能————CUNKUAN GONGNENG\\n\\n\\n\进入存款功能界面*/ printf(\本终端机只接收50元或100元币值人民币!\\n\\n\\t\\t\\t请输入存款金额:\提示信息*/ scanf(\输入存款金额*/ if((int)jineP!=0||jine<=0)/*存款金额必须为50的整数倍且为正数*/ { printf(\请输入面值为50或100的存款金额!请勿输入负数或0!\\n\\t\\t\\t\ system(\ return; } else/*调用时间函数,把取得的存款时间赋给t数组*/ {

time(&rawtime); timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo)); for(i=0;i

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[dangqianxiabiao].zhanghao);/*把当前登录账号复制给交易记录里的账号*/ strcpy(jiaoyi[jiaoyixuhao].leixing,\存\复制交易类型*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间*/

jiaoyi[jiaoyixuhao].jiaoyijine=jine;/*把存款金额赋给交易金额*/

zhanghu[dangqianxiabiao].yue+=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算存款后的账户余额*/ jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yue;/*交易后的余额等于账户余额*/

22

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

printf(\存款成功!\\t\\t\ system(\

printf(\账号\\t\\t交易类型\\t交易金额\\t交易余额\\t\\t交易时间\\n\输出账户存款交易的数据清单 printf(\ printf(\ %s\ printf(\ printf(\ %.2f\ printf(\ %s\\t\

jiaoyixuhao++;/*交易序号加一*/ printf(\ system(\}

void qukuan() /***********************定义取款函数**************************/ { float jine;/*定义取款金额*/ char t[30];/*把取得的取款时间赋给该数组*/ int i; time_t rawtime; struct tm *timeinfo; system(\清屏*/

printf(\取款功能————QUKUAN GONGNENG\\n\\n\\n\进入取款功能界面*/ printf(\本终端机只可取50或100元币值人民币!\\n\\n\\t\\t\\t请输入取款金额:\ scanf(\/*输入取款金额*/ if(jine> zhanghu[dangqianxiabiao].yue)/*账户余额是否足够取款*/ {

printf(\您的余额不足!\ system(\ return; } if((int)jineP!=0||jine<=0)/*取款金额必须为50的整数倍且为正数*/ { printf(\请输入面值为50或100的存款金额!请勿输入负数或0!\\n\\t\\t\\t\ system(\

23

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

return; } else/*调用时间函数,把取得的交易时间赋给t数组*/ {

time(&rawtime); timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo)); for(i=0;i

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[dangqianxiabiao].zhanghao);/*把当前登录账号复制给交易记录里的账号*/ strcpy(jiaoyi[jiaoyixuhao].leixing,\取\复制交易类型*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间*/

jiaoyi[jiaoyixuhao].jiaoyijine=jine;/*取款金额值赋给交易金额*/

zhanghu[dangqianxiabiao].yue-=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算取款后的账户余额*/ jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yue;/*取款后余额等于账户余额*/ printf(\取款成功!\\t\\t\ system(\ printf(\账号\\t\\t交易类型\\t交易金额\\t交易余额\\t\\t交易时间\\n\输出账户和交易的数据清单 printf(\ printf(\ %s\ printf(\ printf(\ %.2f\ printf(\ %s\\t\

jiaoyixuhao++;/*交易序号加一*/ printf(\ system(\}

void zhuanzhang() /******************************定义转账函数

24

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

********************************/ { char t[30];/*时间数组*/ int i; time_t rawtime; struct tm *timeinfo; float jine;/*转账金额*/

char duifangzhanghao[16],c;/*输入的对方账号赋给该数组。在判断是否继续时,把输入的字符Y或N赋给c,以便读入选择*/ system(\清屏*/

printf(\ 转账功能————ZHUANZHANG GONGNENG\\n\\n\\n\进入转账功能界面*/ printf(\请输入对方账号:\ scanf(\输入对方账号*/

if(strcmp(zhanghu[dangqianxiabiao].zhanghao,duifangzhanghao)==0)/*判断输入的账号是否与当前用户的账号相同*/ { printf(\对不起!用户不能给自己转账!\\t\ system(\ return; } for( i=0;i

time(&rawtime); timeinfo=localtime(&rawtime); strcpy(t,asctime(timeinfo)); for(i=0;i

25

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

if(t[i]=='\\n') { t[i]='\\0'; break; } } printf(\对方姓名:*%s\只显示出对方用户的名,不显示出姓*/ printf(\是否继续?(Y/N): \ fflush(stdin);

scanf(\读入选择*/ if(c!='y'&&c!='Y') { printf(\退出转账功能!欢迎使用其它功能!\\t\ system(\ return; } else do { printf(\请输入转账金额:\ scanf(\ if(jine<=0)/*转账金额不得为非正数*/ { printf(\请不要输入负数或0!\ system(\ } if(jine>zhanghu[dangqianxiabiao].yue)/*转账金额在账户余额范围内*/ {

printf(\对不起!您的余额不足,请在余额范围内进行转账。\\n\\t\\t\ system(\ return; } }while(jine<=0);

printf(\请用户谨慎考虑,以防受骗!\提示谨慎信息*/ printf(\是否确定转账?(Y/N): \ fflush(stdin);

scanf(\读入选择*/ if(c!='y'&&c!='Y') { printf(\退出转账功能!欢迎使用其它功能!\ system(\ return;

26

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

}

strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[dangqianxiabiao].zhanghao);/*把当前用户账号复制给此次交易记录的账号*/ strcpy(jiaoyi[jiaoyixuhao].leixing,\转出\复制交易类型*/ strcpy(jiaoyi[jiaoyixuhao].duifangzhanghao,zhanghu[duifangzhanghuxiabiao].zhanghao);/*复制交易的对方账号*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制交易时间*/ jiaoyi[jiaoyixuhao].jiaoyijine=jine;/*复制交易金额*/

zhanghu[dangqianxiabiao].yue-=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算转账后的账户余额*/ jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[dangqianxiabiao].yue; jiaoyixuhao++; strcpy(jiaoyi[jiaoyixuhao].zhanghao,zhanghu[duifangzhanghuxiabiao].zhanghao);/*复制接受转帐金额的用户账号*/ strcpy(jiaoyi[jiaoyixuhao].leixing,\转入\ strcpy(jiaoyi[jiaoyixuhao].duifangzhanghao,zhanghu[dangqianxiabiao].zhanghao);/*复制转账的用户账号*/ strcpy(jiaoyi[jiaoyixuhao].jiaoyishijian,t);/*复制转账的时间*/ jiaoyi[jiaoyixuhao].jiaoyijine=jine;

zhanghu[duifangzhanghuxiabiao].yue+=jiaoyi[jiaoyixuhao].jiaoyijine;/*计算金额转入后的账户余额*/ jiaoyi[jiaoyixuhao].jiaoyiyue=zhanghu[duifangzhanghuxiabiao].yue;/*账户余额值赋给交易后的余额值*/

jiaoyixuhao++;

printf(\恭喜您!转账成功!\\t\\t\ system(\ printf(\账号\\t\\t交易类型\\t转出金额\\t余额\\t交易时间\\n\输出账户和交易的数据清单 printf(\ printf(\ %s\ printf(\ printf(\ %.2f\ printf(\ %s\\t\\n\ printf(\对方账号:%s\\n\输出对方用户的账号*/

27

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

printf(\ system(\}

void xiugaimima() /****************************定义 修改密码 函数****************************/ { char mima[7],xinmima1[7],xinmima2[7]; int j=0; printf(\请输入原来的密码:\ scanf(\输入旧密码*/

if(strcmp(mima,zhanghu[dangqianxiabiao].mima)!=0)/*判断旧密码正确与否*/ { printf(\您的密码输入错误!\ system(\ return; } do {

printf(\请输入新密码:\ scanf(\ printf(\请再一次输入新密码:\输入两次新密码*/ scanf(\ if(strcmp(xinmima1,xinmima2)!=0)/*判断输入的两次新密码是否相等*/ { j++; printf(\您的密码输入错误!您还有%d次机会输入密码!\\n\ } if(j==3)/*新密码输入错误不得超过三次*/ { system(\ return; } }while(strcmp(xinmima1,xinmima2)!=0); strcpy(zhanghu[dangqianxiabiao].mima,xinmima1);/*拷贝新密码到账户信息里*/ printf(\您的密码修改成功!\ system(\ return; }

void chaxun() /***定义查询函数***/ { for(;;)/*空循环语句*/

28

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

{

switch(chaxun_menu()) /*查询界面选择判断*/ {

case 1:chaxun_yue();/*调用查询余额函数*/ printf(\ break;

case 2:chaxun_mingxi(); /*调用查询明细函数*/ printf(\ break;

case 3:chaxun_cunkuan(); /*调用查询存款函数*/ printf(\ break;

case 4:chaxun_qukuan(); /*调用查询取款函数*/ printf(\ break;

case 5:chaxun_zhuanzhang(); /*调用查询转账函数*/ printf(\ break; case 0:

return; } } }

int chaxun_menu()/*定义查询菜单函数*/ { char c; do {

system(\每次选择运行前清屏*/

printf(\*********欢迎进入 查询界面!*********\\n\\n\/*查询界面菜单选择*/

printf(\查询余额|\\n\ printf(\查询明细|\\n\ printf(\查询存款|\\n\ printf(\查询取款|\\n\ printf(\查询转账|\\n\ printf(\返回|\\n\

printf(\

29

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

printf(\请作出选择(0-5):\ c=getchar(); /*读入选择*/ }while(c<'0'||c>'5');

return(c-'0'); /*c变为空后返回重新选择*/ }

void chaxun_yue() /*定义查询余额函数*/ { printf(\这是查询余额功能\\n\\n\\t\\t\\t\ printf(\您的账户余额为:%.2f\\n\\n\\t\\t\\t\输出账户余额*/ system(\}

void chaxun_mingxi() /*定义查询明细函数*/ { int i; system(\清屏*/

printf(\查询明细————CHAXUN MINGXI\\n\\n\\t\\t\\t\进入查询明细界面*/ printf(\您的账号:%s\ printf(\交易类型 交易金额 交易余额\\t\\t交易时间\\t对方账号\\n\输出账户和交易的数据清单

for(i=0;i

printf(\ %s\

printf(\ %.2f\ printf(\ printf(\ %s\ printf(\ %s\\n\\n\ }

printf(\ system(\}

void chaxun_cunkuan() /*定义查询存款函数*/ { int i; system(\

printf(\查询存款————CHAXUN CUNKUAN\\n\\n\\t\\t\\t\ printf(\您的账号:%s\ printf(\交易类型\\t交易金额\\t交易余额\\t\\t交易时间\\n\输出账户和交易的数据清单

30

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

for(i=0;i

if( strcmp(jiaoyi[i].zhanghao,zhanghu[dangqianxiabiao].zhanghao)==0&&strcmp(jiaoyi[i].leixing,\存\ {

printf(\ \\t%s\

printf(\ printf(\ printf(\ %s\\n\\n\ } printf(\ system(\}

void chaxun_qukuan() /*定义查询取款函数*/ { int i; system(\

printf(\查询取款————CHAXUN QUKUAN\\n\\n\\t\\t\\t\ printf(\您的账号:%s\ printf(\交易类型\\t交易金额\\t交易余额\\t\\t交易时间\\n\输出账户和交易的数据清单

for(i=0;i

if( strcmp(jiaoyi[i].zhanghao,zhanghu[dangqianxiabiao].zhanghao)==0&&strcmp(jiaoyi[i].leixing,\取\ {

printf(\ \\t%s\

printf(\ printf(\ printf(\ %s\\n\\n\ } printf(\ system(\}

void chaxun_zhuanzhang() /*定义查询转账函数*/ { int i;

31

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

char leixing[5]; system(\

printf(\查询转账————CHAXUN ZHUANZHANG\\n\\n\\t\\t\\t\ printf(\您的账号:%s\ printf(\交易类型 交易金额 交易余额\\t交易时间\\t对方账号\\n\输出账户和交易的数据清单

for(i=0;i

if( strcmp(jiaoyi[i].zhanghao,zhanghu[dangqianxiabiao].zhanghao)==0&&strcmp(leixing,\转\判断为当前用户的转账记录*/ {

printf(\

printf(\ %.2f\ printf(\ %.2f\ printf(\ printf(\ } } printf(\ system(\}

4、程序运行截图

32

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

33

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

34

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

35

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

36

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

四、 总结与体会

思想“备战” 心情忐忑

暑假之前就在想,收假回来就要进行C语言程序设计课程设计,上个学期C语言学得那么……考试还可以,让我去做两周的程序设计还不崩溃。而且听说还要独立完成一个比较大的程序设计,一想到这心里就弄得心慌慌的。于是,考完试后,痛下决心,带C语言的课本回家,整个暑假啃这本书,还拿不下它吗! 整个暑假??

事实是,书本“浏览”一遍后,就被我于心不忍的留在了房间的角落里。返校之前,找到C语言课本,擦掉上面的灰尘,发出感叹:“这书白带回来了,那两周该怎么过啊??”

无奈,回到学校,上课前一晚,简单的回顾了一下课本。第二天,怀着忐忑不安的心情,踏上了通往机房的“崎岖路途”。

课程设计第一天

上课第一天,心情总算舒缓下来。讲解了一个贪吃蛇游戏的程序,体验了20分钟的游戏过程,还好,能听得懂,没想象的那么难。可是,“好戏”总是在后头,暗暗跟自己说“加油吧!时间足够的!”,上课比较认真的听了,课下的安排也挺松的,又随便看了下课本。好吧,青春总是要有挑战的,虽然这算不上什么挑战。一个星期只上三天课,时间足够自己安排。那就发挥“悬梁刺股”的奋斗精神,事实上,虽然还没到达这种地步,这两周过的确实挺辛苦的。早上一起床就打开电脑(当然不是玩电脑,很专注的编程),除了吃饭和上课几乎不离开宿舍。好几次,电脑还没崩溃,我就想崩溃了??

课程设计第一周完——开始有一点点成就感

不得不说,老师们很尽职尽责,讲解的很详细。好几次,找了很多次都不知道错在哪里,一头雾水,经老师这么一点拨,豁然开朗。大一上学期学完C语言还懵懵懂懂的,现在才过了一周,连我都感到很惊讶,自己对C程序的编程思路变得比以前清晰了不少,编程能力也提高了不少。这一改变让我很欣喜,在编程上更有自信了。说实话,经过这一周,课程设计已经把我对C语言编程的胃口完全吊起来了,对编程的“恐惧”和乏味早就丢到 天边的哪一个角落里去啦。

课程设计第二周(上):充满自信的开始——收获

虽然说编程能力确实提高了不少,但也不是编程总是一帆风顺的。在宿舍里调试程序时,有时候总是编译出错,检查后又找不出错误,总是急的心烦意乱。实在编不下去了,走出宿舍,在校园里随便走走。回来后,心平气和,再看程序,多看几遍,就发现了错误。因此,编程的时候,心情愉悦也是很重要的,至少能少犯错,提高编程效率。另外,每当自己编程打结的时候,就和做同一个程序设计的同学互相讨论,总是能发现一些意外之处,能很好的完善程序。互相交流,都能受益。让我认识到,编程真的是需要互相借鉴,互相学习,互相交流的一件事。在编程想法和编程思路上,自己想不到的别人想得到,或者别人想不到的自己有想到了。因此,跟同学多交流,多学习,也是提高自己编程能力的方法之一。

37

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

课程设计第二周(下)——成果

课程设计已经快要接近尾声了,程序功能也在完善中。无数次运行程序,测试ATM模拟系统程序的功能。看着调试后的程序无误的运行结果,心里很高兴。 无数次代码的翻滚让眼睛疲累,无数次的手指在键盘上快速的敲打,无数次的调试,终于能见成效。很感谢老师的帮助,没老师的指导帮助,确实是很困难的。

课程设计——尾声

两周的时间,在专注忙碌的调试程序中就要过去。两周的学习,两周的改变,两周的提高,在这两周所收获的,比一个学期都要多。两周,把C语言课本的十章都融会贯通。一个学期学完还比较迷茫的知识,现在已豁然开朗。当然,没一个学期的系统学习也是不行的,毕竟,两周的提高都是建立在对基础知识的了解和掌握上。奋斗了十多个日日夜夜,今天终于要交出自己的劳动成果了。感慨啊,虽然不希望常常这样辛苦,却不得不说,这十多个日日夜夜,真的很过瘾。

呐喊:青春,让我流汗,让我不要忘记奋斗的乐趣

短短的两周,不仅是编程能力的改变,还有认识上的提高。高考以后,好久没有体会这种在学习中奋斗的感觉了。高考已过,这两周也即将结束,然而对于奋斗的历程确还只是开始,我希望不要让安逸的生活渐渐磨灭我奋斗的斗志,我渴望能在年纪尚未老去前多流汗,我渴望奋斗的乐趣不会随着岁月的流逝而流失,我渴望奋斗到身体衰老以致不能行走,只为一个念想??

在调试程序中收获的编程小心得和小技巧:

(1) 在VC++6.0中编译时,若用到for循环语句,不要在for语句内定义

i,不然肯定会编译出错;

(2) 编完程序,要仔细检查圆括号和大括号有没有配对齐; (3) 一些有用的库函数:system(\每次运行前清屏*/

system(\暂停功能,可以让运行界面暂停,昂任意键在继续

system(\设置运行界面的背景颜色,数字为字体颜色的代号,大写字母为背景颜色的代号*/

另外,在调用system(\类函数时,要写预处理指令#include fflush(stdin);/*放在scanf函数前,消耗输入字符后的回车字符,起保

险作用*/

exit(0);/*直接终止程序*/

38

信息工程与自动化学院 计算机科学与技术专业 C程序设计语言课程设计

五、 参考文献

谭浩强著. C程序设计(第四版). 北京:清华大学出版社,2010

谭浩强著. C程序设计(第四版)学习辅导. 北京:清华大学出版社,2010 谭浩强著. C程序设计教程. 北京:清华大学出版社,2007 谭浩强著. C++程序设计. 北京:清华大学出版社,2011

39

本文来源:https://www.bwwdw.com/article/6vgo.html

Top