沈 阳 航 空 航 天 大 学
课程
学 号 2010040701021
班 级 0 4 0 7 0 1 0 1
姓 名 王 翰 章
指导教师 杨 煦
2011年 9 月 28日
沈阳航空航天大学
课程设计任务书
学院:自动化学院 专业:测控技术与仪器 班级:04070101
学号:2010040701021 题目:自动存取款机模拟
一、课程设计时间
2011~12第1学期第4周,共计1周,20学时。
二、课程设计
请你模仿自动存取款机系统,用C语言编写软件完成以下任务:
1.登陆功能:某个用户输入账户名和密码,可以登陆ATM。注意:应有多个用户,并把信息保存在文件中。
2.查询功能:登陆后,可以查询存款余额。
3.存款功能:登陆后,可以向账户中存款。
4.取款功能:登陆后,可以取款。注意:取款金额不能超过存款金额。
提示:用户(账号、密码、存款余额、利率、开户银行)
三、课程设计要求
1.程序质量:
✧ 贯彻结构化的程序设计思想。
✧ 用户界面友好,功能明确,操作方便。
✧ 用户界面中的菜单至少应包括、“数据输入”、“数据保存”、“信息查询”、“数据修改”、“退出”5项。
✧ 代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师: 学生签名:
五、成绩
六、教师评语
目录
一、需求
1
二、设计分析 2
三、主要界面截图 4
四、技术要点 5
五、个人总结 8
六、参考文献 8
七、源程序 8
一、需求分析
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
该系统是一个较典型的银行存取款模拟系统,其使用者被假定为银行信用卡用户,系统应该具有安全、稳定、功能齐全的特点。
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、程序总体结构图
图1
2、主要功能模块框图
图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,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}};
所定义的结构体主要用于定义数组。
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程序设计.北京:清华大学出版社,2005
2 詹红霞,visual c++6.0 程序设计,西安:西安电子科技大学出版社,2009
七、源程序
#include
#include
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(); //回初始界面,供其他用户使用
}