资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
一、 实验目的通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。二、 实验要求要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。1. 程序具有以下功能:1) 登录系统:输入卡号(16位)、密码(6位),只有卡号、密码同时正确(帐户信息存放在文件中)才能进入系统;2) 操作功能:l 查询:查询帐户的存款余额。按任意键返回主菜单;l 修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。之后可返回主菜单;l 取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单;l 存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后帐户余额应相应增加。之后可返回主菜单;l 转帐:先输入一个帐户号(已保存在帐户信息文件中),然后显示一部分用户名(如:张*山),储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单;l 退出:退出系统。2. 定义如下结构体类型:l “日期”结构体Date:成员有:year(年)、month(月)、day(日);l “帐户”结构体Account:成员有:no(帐户号)、name(姓名)、balance(余额)l “存取款记录”结构体Record,:成员有:no(帐户号)、date(日期)、number(数量,可正可负,正表示存款,负表示取款)3. 帐户信息存放在accounts.txt文件,储户存取款记录保存在records.txt中;4. 采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。5. 附加功能:l 储户一天内输错密码的次数不能超过3次,否则无法进入系统;l 应避免输入存款金额、取款金额为负数等异常情况的出现。三、 程序已经实现的功能点实验要求均已实现。此外还有:1. 卡号、密码位数输错时,提示并返回重新输入,2. 简化取款时的输入3. 转账时,转账账户为原账户时,提示并返回重新输入4. 在多个模块中添加了退出功能,无需回到主菜单即可退出系统5. 在查询模块中加入了存取记录明细查询四、 程序运行截图及说明1. 登陆模块1) 卡号不为16位时,输出提示并返回重新输入2) 卡号不存在时,输出提示并返回重新输入3) 密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号4) 密码连续输错三次时,锁定卡号,今日无法登录2. 登录后的系统主菜单3. 查询模块1) 查询模块主菜单2) 查询明细4. 取款模块1) 当余额不足50时,无法进入取款模块2) 取款模块主菜单3) 便捷取款4) 手动输入取款金额输错时,返回重新输入5) 取款后的菜单6) 取款完成后选择显示余额5. 存款模块1) 解决输入错误问题2) 存款成功6. 密码修改模块1) 原密码输错时,返回重新输入,不提供退出功能2) 密码位数输错、两次输入新密码不一致时,返回重新输入3) 输入无误时7. 转账模块1) 转入卡号位数输错时,提示并返回重新输入2) 未查找到该卡号时,输出提示,提供退出功能,键入除*外任意键重新输入3) 转入卡号与当前卡号相同时,输出提示4) 输出转入卡账户的部分用户名5) 解决转账金额输错的问题6) 转账成功五、 采用的主要技术1. 宏定义:由于本程序的printf语句较多,为了便于编写,故用PR代替2. 链表:账户信息采用链表结构,内存动态分配,使用内存无限制,可以扩展到所有可以使用的内存3. switch多分支选择结构4. 文本文件的读写5. 利用time.h头文件,简便地获取系统日期6. system()函数和fflush()函数的简单使用六、 设计心得1. 各函数的功能要相对独立,逐步求精。2. 如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体内被意外修改附:程序代码/*运行本程序前,请在本程序根目录下建立文件“accounts.txt”,格式如下:*卡号1(16位)姓名1账户余额1密码1*卡号2(16位)姓名2账户余额2密码2*/#include #include #include #include #define PR printftypedef structshort int year;short int month;short int day;Date;/日期typedef struct Accountchar no17;char name20;double balance;char password7;struct Account* next;Account;typedef structchar no17;Date date;double number;Record;/记录Account *head = NULL;/账户信息链表表头Account *now_acc = NULL;/当前账户 /*函数申明*/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 Withdrawal();/取款主界面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();/登录dosystem(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();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(
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号