C语言模拟ATM机

上传人:博****1 文档编号:495093001 上传时间:2023-02-20 格式:DOC 页数:21 大小:91.50KB
返回 下载 相关 举报
C语言模拟ATM机_第1页
第1页 / 共21页
C语言模拟ATM机_第2页
第2页 / 共21页
C语言模拟ATM机_第3页
第3页 / 共21页
C语言模拟ATM机_第4页
第4页 / 共21页
C语言模拟ATM机_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《C语言模拟ATM机》由会员分享,可在线阅读,更多相关《C语言模拟ATM机(21页珍藏版)》请在金锄头文库上搜索。

1、-一、 实验目的通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,稳固对模块化程序设计、文件操作的理解,提高软件编程能力。二、 实验要求要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。1. 程序具有以下功能:1) 登录系统:输入卡号(16位)、密码(6位),只有卡号、密码同时正确(信息存放在文件中)才能进入系统;2) 操作功能:l 查询:查询的存款余额。按任意键返回主菜单;l 修改密码:连续输入两次新密码(两次输入结果完全一样)后,新密码取代旧密码,并存放到信息文件中。之后可返回主菜单;l 取款:输入50或100的倍数模拟为取款金额,请注意:

2、取款金额不得超过余额,操作后余额应相应减少。之后可返回主菜单;l 存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后余额应相应增加。之后可返回主菜单;l 转帐:先输入一个号(已保存在信息文件中),然后显示一局部用户名(如:*山),储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过余额,操作后余额应相应减少。之后可返回主菜单;l 退出:退出系统。2. 定义如下构造体类型:l 日期构造体Date:成员有:year(年)、month(月)、day(日);l 构造体Account:成员有:no(号)、name()、balance(余额)

3、l 存取款记录构造体Record,:成员有:no(号)、date(日期)、number(数量,可正可负,正表示存款,负表示取款)3. 信息存放在accounts.t*t文件,储户存取款记录保存在records.t*t中;4. 采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。5. 附加功能:l 储户一天输错密码的次数不能超过3次,否则无法进入系统;l 应防止输入存款金额、取款金额为负数等异常情况的出现。三、 程序已经实现的功能点实验要求均已实现。此外还有:1. 卡号、密码位数输错时,提示并返回重新输入,2. 简化取款时的输入3. 转账时,转账账户为原

4、账户时,提示并返回重新输入4. 在多个模块中添加了退出功能,无需回到主菜单即可退出系统5. 在查询模块中参加了存取记录明细查询四、 程序运行截图及说明1. 登陆模块1) 卡号不为16位时,输出提示并返回重新输入2) 卡号不存在时,输出提示并返回重新输入3) 密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号4) 密码连续输错三次时,锁定卡号,今日无法登录2. 登录后的系统主菜单3. 查询模块1) 查询模块主菜单2) 查询明细4. 取款模块1) 当余额缺乏50时,无法进入取款模块2) 取款模块主菜单3) 便捷取款4) 手动输入取款金额输错时,返回重新输入5) 取款

5、后的菜单6) 取款完成后选择显示余额5. 存款模块1) 解决输入错误问题2) 存款成功6. 密码修改模块1) 原密码输错时,返回重新输入,不提供退出功能2) 密码位数输错、两次输入新密码不一致时,返回重新输入3) 输入无误时7. 转账模块1) 转入卡号位数输错时,提示并返回重新输入2) 未查找到该卡号时,输出提示,提供退出功能,键入除*外任意键重新输入3) 转入卡号与当前卡号一样时,输出提示4) 输出转入卡账户的局部用户名5) 解决转账金额输错的问题6) 转账成功五、 采用的主要技术1. 宏定义:由于本程序的printf语句较多,为了便于编写,故用PR代替2. 链表:账户信息采用链表构造,存动

6、态分配,使用存无限制,可以扩展到所有可以使用的存3. switch多分支选择构造4. 文本文件的读写5. 利用time.h头文件,简便地获取系统日期6. system()函数和fflush()函数的简单使用六、 设计心得1. 各函数的功能要相对独立,逐步求精。2. 如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体被意外修改附:程序代码/*运行本程序前,请在本程序根目录下建立文件accounts.t*t,格式如下:*卡号116位1账户余额1密码1*卡号216位2账户余额2密码2*/#include #include #include #include #de

7、fine PR printftypedef structshort int year;short int month;short int day;Date;/日期typedef struct Accountchar no17;char name20;double balance;char password7;struct Account* ne*t;Account;typedef structchar no17;Date date;double number;Record;/记录Account *head = NULL;/账户信息链表表头Account *now_acc = NULL;/当前账

8、户/*函数申明*/void InitializeAccount();/导入账户信息/-char LockAccountTopic(const char *no);/检测账户是否被锁定void LockAccount(const char *no);/锁定账户/-void Login();/登录Account* FindbyNo(const char *no);/查找卡号对应账户信息在链表中的地址/-void Demand();/查询主菜单void PrintBalance();/输出余额void Printetail();/输出明细/-void Modifiy();/修改密码/-void Wi

9、thdrawal();/取款主界面void WithdrawalOt(long money);/取款/-void Depositing();/存款/-void Transfer();/转账char *CoverUpName(const char *name);/掩盖局部用户名/-void Log(double money, const char *no);/将存款记录写入文件中void Save();/保存账号信息void FreeData();/释放链表空间/-int main()char choose;InitializeAccount();/导入账户信息Login();/登录dosyst

10、em(cls);PR(tt n);PR(tt 请选择效劳 n);PR(tt+-+-+ +-+-+n);PR(tt|5|33转账| |查询32|1|n);PR(tt+-+-+ +-+-+nn);PR(tt +-+-+n);PR(tt |取款32|2|n);PR(tt +-+-+nn);PR(tt +-+-+n);PR(tt |存款32|3|n);PR(tt +-+-+nn);PR(tt+-+-+ +-+-+n);PR(tt|0|33退出系统| |修改密码32|4|n);PR(tt+-+-+ +-+-+nn);PR(请选择效劳:);fflush(stdin);choose = getchar();

11、switch (choose)case 1: Demand(); break;/查询case 2: Withdrawal(); break;/取款case 3: Depositing(); break;/存款case 4: Modifiy(); break;/修改密码case 5: Transfer(); break;/转账case 0: FreeData(); return 0;/退出default:printf(输入错误,请重新选择n); /解决用户可能的输入错误system(pause); while (1);return 0;/*导入账户信息*/void InitializeAccount()FILE *fp;Account temp;PR(系统初始化中,请稍侯.n);if (!(fp = fopen(accounts.t*t, r)PR(07);/响铃PR(读取信息失败,请在本程序根目录建立信息文件(accounts.t*t)。格式如下:n);PR(卡号116位1账户余额1密码1n);PR(卡号216位2账户余额2密码2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号