当前位置:文档之家› c语言银行自动存取款机模拟

c语言银行自动存取款机模拟

沈阳航空航天大学课程设计任务书学院:自动化学院专业:测控技术与仪器班级:04070101 学号:2010040701021 题目:自动存取款机模拟一、课程设计时间2011~12第1学期第4周,共计1周,20学时。

二、课程设计内容请你模仿自动存取款机系统,用C语言编写软件完成以下任务:1.登陆功能:某个用户输入账户名和密码,可以登陆ATM。

注意:应有多个用户,并把信息保存在文件中。

2.查询功能:登陆后,可以查询存款余额。

3.存款功能:登陆后,可以向账户中存款。

4.取款功能:登陆后,可以取款。

注意:取款金额不能超过存款金额。

提示:用户(账号、密码、存款余额、利率、开户银行)三、课程设计要求1.程序质量:✧贯彻结构化的程序设计思想。

✧用户界面友好,功能明确,操作方便。

✧用户界面中的菜单至少应包括、“数据输入”、“数据保存”、“信息查询”、“数据修改”、“退出”5项。

✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。

2.课程设计说明书:课程结束后,上交课程设计说明书和源程序。

课程设计说明书的内容参见提供的模板。

四、指导教师和学生签字指导教师:学生签名:五、成绩六、教师评语目录一、需求分析 (1)二、设计分析 (2)三、主要界面截图 (5)四、技术要点 (5)五、个人总结 (8)六、参考文献 (8)七、源程序 (9)一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。

该系统是一个较典型的银行存取款模拟系统,其使用者被假定为银行信用卡用户,系统应该具有安全、稳定、功能齐全的特点。

1. 安全性分析银行存取款机的数据涉及到取款机内储存的所有用户,数据量较大且对保密性的需求很高,所以要通过设置密码等手段确保数据不能被随意的删减和修改。

2. 稳定性分析指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。

3. 主要功能分析(1)账号及密码输入:允许用户输入账号、密码,对用户由于疏忽录入的非法数据,能够及时提示并更正。

(2)登陆成功界面:共有三个选项,查询余额、取款、退出分别对应1、2、3选项,若序号输入不正确会予以提示。

(3)余额查询:选定1后,进入查询界面,用户输入查询条件,系统规则地在界面显示查询结果,且显示的数据尽量全面。

当输入卡号时,系统需要输入对应的密码(若密码错误则会有相应提示)密码与卡号相对应可查询到该用户的姓名、余额。

(3)取款:选定2后,进入取款界面,用户输入取款金额,若取款金额大于存款金额则会提示“余额不足”,若小于则会在原余额上扣除取款金额。

(4)退出:选定3后,进入退出界面,系统会延迟3-4秒重新跳回登陆界面,供其他用户使用。

二、设计分析主要有5个功能模块,每个模块对应一个C语言子函数。

这些函数原型及其功能简述如下:void dljm();------登陆成功后出现的界面void dl();------登陆void cx();------查询void qk();------取款void tk();------退卡1、程序总体结构图图12、主要功能模块框图图2三、主要界面截图图1登陆成功后的操作图2查询及取款四、技术要点1、结构体的应用定义了结构体用来描述用户的姓名、卡号、密码以及金额。

具体的定义如下:struct atm //ATM自助银行{char name[10];int account; //卡号short password; //密码float money; //金额}at[10]={{"ZhaoLin",1,1,4000},{"MaFang",2,2,7 000},{"WangMing",3,3,5888},{"MaJiu",4,4,7543},{"HangHan",5,5,10000},{"ZhangHu",6,6,4087},{"MaFang",7,7,2765},{"ZhouLi",8,8,4530},{"HongShan",9,9,5693},{"YuLi",10,10,7543}};所定义的结构体主要用于定义数组。

2、循环语句与选择性分支语句的嵌套while (z!=-1){printf("\n\n请输入操作序号:");scanf("%d",&z);switch(z){case 1:cx();break; //查询余额case 2:qk();break; //取款case 3:tk();break; //退卡default:printf("操作序号不合法!"); return;}}3、关于延迟清屏时间for(i=0;i<1000000000;i++); //延缓显示时间system("cls"); //清屏main(); //回初始界面,供其他用户使用此for循环语句可以使清屏函数延缓3-4秒执行,后调用main函数,完成整个操作过程后重新供其他用户登陆。

五、个人总结在此次课设过程中,我遇到了许多困难,例如如何在没有用户注册的程序中直接能完成登陆,只需建立一个结构体数组,还有如何能做到像ATM机那样一个用户用完之后还能供其他用户使用,这些都是经过查找书籍和上网查找相关资料才得以解决。

所以这次课设对我的帮助很大。

六、参考文献1 谭浩强.C程序设计.北京:清华大学出版社,20052 詹红霞,visual c++6.0 程序设计,西安:西安电子科技大学出版社,2009七、源程序#include<stdio.h>#include<stdlib.h>int x; //记录下标void dljm(); //登录成功后出现的界面void dl(); //登录void cx(); //查询void qk(); //取款void tk(); //退卡struct atm //ATM自助银行{char name[10];int account; //卡号short password; //密码float money; //金额}at[10]={{"ZhaoLin",1,1,4000},{"MaFang",2,2,7000}, {"WangMing",3,3,5888},{"MaJiu",4,4,7543},{"HangHan",5,5,10000},{"ZhangHu",6,6,4087},{"MaFang",7,7,2765},{"ZhouLi",8,8,4530},{"HongShan",9,9,5693},{"YuLi",10,10,7543}};//主函数void main(){printf("******************欢迎使用自动取款机**************\n");printf("**************************************************\n ");dl();}//登录函数void dl(){int a; //临时记录下标int account; //卡号short password; //密码printf("请输入卡号:");scanf("%d",&account);for(a=0;a<=9;a++){if(account==at[a].account){x=a; //将临时变量下标值存储到全局下标变量中printf("请输入密码:");scanf("%d",&password);if(password==at[a].password){printf("****************丫丫银行欢迎您的登录**************\n");printf("**************************************************\n ");printf("登录成功,请选择操作\n");dljm(); //登录成功界面break;}else{printf("密码输入错误\n");dl(); //递归(调用自己,再来一次)}}}}//登录界面void dljm(){int z;printf("查询余额---------1\n");printf("取款---------2\n");printf("退卡---------3\n");while (1){printf("\n\n请输入操作序号:");scanf("%d",&z);switch(z){case 1:cx();break; //查询余额case 2:qk();break; //取款case 3:tk();break; //退卡default:printf("操作序号不合法!");return;}}}//查询余额void cx(){printf("%s您卡上余额为%7.2f元",at[x].name,at[x].money); }//取款void qk(){float a;printf("请输入取款金额:");scanf("%f",&a);if(a>at[x].money)printf("你的余额不足");else{printf("您已取款%7.2f元",a);at[x].money=at[x].money-a;}}//退卡void tk(){int i;printf("请取回您的卡\n");for(i=0;i<1000000000;i++); //延缓显示时间system("cls"); //清屏main(); //回初始界面,供其他用户使用}。

相关主题