atm取款机实训文档.docx
- 文档编号:25903669
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:37
- 大小:332.89KB
atm取款机实训文档.docx
《atm取款机实训文档.docx》由会员分享,可在线阅读,更多相关《atm取款机实训文档.docx(37页珍藏版)》请在冰豆网上搜索。
atm取款机实训文档
长沙学院
课程设计说明书
题目
程序设计基础课程设计
系(部)
计算机科学与技术系
专业(班级)
2012级计科1班
姓名
刘江惠
学号
2012021102
指导教师
黄娟
起止日期
2013.9.2-2013.9.6
课程设计任务书
课程名称:
程序设计基础课程设计
课程编码:
JX020139
课程类别:
集中性实践教学环节
学分数:
1
学时数:
1周
开课学期:
3
设计题目:
银行ATM存取款系统、个人通信录系统(任选一题)
已知技术参数和设计要求:
需求说明及要求
题目一:
银行ATM存取款系统
银行ATM存取款系统业务描述如下:
银行ATM存取款系统能为用户提供存款、取款、查询、转账和修改密码的功能。
为了模拟真实的ATM业务环境,本系统必须实现存款、取款、查询、转账、修改密码以及开户的功能。
用户通过开户业务在本系统开立银行账户,之后可以通过该银行账户登陆ATM系统,在系统中实现存款、取款、查询账户信息、修改密码的操作。
本系统各个业务有如下注意点:
(1)登陆系统
用户登陆之前,必须在登陆界面输入其银行账户,通过其正确输入的银行账户登陆系统。
(2)开户业务
要使用本系统必须首先执行开户业务开立新的银行账户,并且将此新开的银行存储于文件当中。
同时,系统以身份证号码作为开户的充分条件,即一个身份证号码只能开立一次银行账户。
(3)存款业务
客户登陆系统后,选择存款业务,即可以将输入的存款金额存入相应的账户。
(4)取款业务
客户登陆系统后,选择取款业务,即可以将输入的取款金额从相应的银行账户取出,但是取款金额必须大于目前的账户余额。
(5)查询业务
客户登陆系统后,可以选择查询业务,查询账户余额。
(6)转账业务
客户登陆系统后,可以选择转账业务,进行转账。
注意的是转账的目的账户必须是本系统已经存在的银行账户。
(7)修改密码
客户登陆系统后,可以选择修改密码业务,进行密码修改。
各阶段具体要求:
1、需求分析阶段
熟悉系统业务,从业务中抽取出系统的需求,形成完善的需求说明书。
2、系统设计阶段
根据需求,进行程序设计,包括定义系统的界面、定义系统数据的存储方式等,形成完善的设计说明书。
3、编码实现阶段
(1)完成代码编写
(2)要求代码编写规范
4、系统测试阶段
(1)完成功能调试
(2)要求完成必要的测试工作
5、交付实施阶段
(1)提交可正常执行的系统
(2)提交系统需求说明书、设计说明书、程序代码
(3)撰写课程设计报告书
(4)要求规范地书写文档
设计工作量:
(1)软件设计:
完成问题陈述中所提到的所有需求功能。
(2)论文:
要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。
工作计划:
软件开发进度如下,论文同步进行;
1.选定题目(2课时)
2.需求分析(2课时)
3.概要设计(2课时)
4.详细设计(2课时)
5.编码实现(8课时)
6.系统测试(1课时)
7.模拟实施(1课时)
8.答辩(2课时)
班级
周次
节次
教室
内容
指导教师
12计科1班
1周周一
3-4
致远楼1403
布置任务
黄娟
1周周一
5-8
致远楼1403
上机调试
1周周二
3-4
致远楼1403
上机调试
1周周三
5-8
致远楼1403
答疑
1周周四
5-8
致远楼1403
上机调试
1周周五
5-8
致远楼1408
答辩
注意事项
⏹提交文档
Ø长沙学院课程设计任务书(每学生1份)
Ø长沙学院课程设计论文(每学生1份)
Ø长沙学院课程设计鉴定表(每学生1份)
指导教师签名:
日期:
教研室主任签名:
日期:
系主任签名:
日期:
长沙学院课程设计鉴定表
姓名
刘江惠
学号
2012021102
专业
计算机科学与技术
班级
12计科1
设计题目
银行ATM存取款系统
指导教师
黄娟
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
评定等级:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
日期:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
第一章问题描述
1.1设计内容
本次实训设计了一个银行ATM存取款模拟管理系统,具有注册、登陆功能。
用户登陆该系统后能为用户提供存款、取款、查询、转账和修改密码的功能。
在这个过程中,利用到了文件等技术。
1.1.1设计要求
1.菜单设计:
要有两个菜单,登陆之前有一个登陆和注册菜单,然后登陆进去后要有一个可以进入各个功能的菜单。
2.注册设计:
要求输入用户的一些个人信息。
能够自己设置密码。
并且给予客户账号。
3.登陆设计:
要求要验证用户的账号和密码。
4.存款设计:
要能输入金额并且能够与余额累加。
5.取款设计:
要能验证余额并且能够与余额相减。
6转账设计:
要能验证转入账号并且能够验证转出金额不大于余额。
7账户查询设计:
要能打印出账户的余额。
1.2.1功能要求
Ø开户功能
客户需要提供姓名、身份证号等信息,经过系统处理后,将产生的用户账号及客户信息写入账户文件中。
2.登录功能
用户登陆时,必须在登陆界面输入其银行账户和密码,通过其正确输入的银行账户登陆系统,进入登陆界面后即可进行以下操作:
(8)取款
要求客户输入取款金额,经过系统处理后,更新该账户所对应的账户余额。
(9)存款
要求客户输入存款金额,经过系统处理后,更新该账户所对应的账户余额。
(10)转账
要求客户输入目标账号,再经过确认其账号输入是否有误来判断转账是否继续,在余额充足的条件下进行转账程序,否则提示余额不足。
(11)查询
系统根据该客户的账户信息查询其信息文件,将查询结果显示出来。
(12)修改密码
客户登陆系统后,可以选择密码修改业务,进行修改。
1.2.2界面要求
1 界面设计要清晰合理;
2 排版要整洁易于看懂;
3 给出相关的注释。
1.2.3技术要求
1 函数的定义和调用;
2 循环语句的应用
3 Switch语句的多分支选择;
4 If条件语句使用:
包括if语句类型的选择,及嵌套使用;
5 熟悉结构体的应用及如何定义;
6 函数跳转需求的实现;
7 熟悉对文件的使用;
第2章系统设计与实现
2.1系统总体设计
2.1.1数据结构设计
在整个程序中,有结构体类型的数据构成了一个链表,这里所用到的数据,有账户、姓名、密码、账户余额。
具体类型定义如表2.1所示。
表2.1数据类型定义
数据
定义类型
长度
姓名
char
20
账户号码
char
8
密码
char
10
账户余额
double
-
注:
1)账户号码、客户名称、客户密码通常是一行字符串,所以将其设计成字符数组,再规定其字符串的长度。
2)账户余额通常是带小数的,在C语言中可以用float、double等数据类型定义。
在这里将账户余额定义为double类型的变量。
2.1.2各功能模块间的关系
该ATM银行管理系统的主界面由七个主要功能构成,在登陆界面中又由五个功能构成,其大致结构图如图所示。
2.2系统详细设计与实现
2.2.1主函数
在打开的主界面中,通过switch语句来选择各项操作,在进入各函数的算法过程。
其流程图如2.1所示。
是
否
图2.1主函数流程图
主要代码:
intmain()//1主函数
{
intflog=0;
chara[4];//登录的初始页面
printf("==============欢迎使用ATM系统================\n");
printf("||★1开户\n");
printf("||★2登陆\n");
printf("=============================================\n");
while(flog==0)
{
printf("请输入您的选项:
");
scanf("%s",a);//或者用gets(a);也可以
switch(a[0])
{
case'1':
kh();flog=1;break;//跳转致开户函数
case'2':
dl(),flog=1;break;//跳转致登陆函数
default:
printf("输入错误,请从新输入!
\n");flog=0;break;
}
}
system("pause");
return0;
}
2.2.2功能模块:
注册
对应函数:
zc()
输入:
姓名,账号,密码,存款金额
函数跳转:
跳转到main;
实现功能:
为客户注册开户
流程图:
图2.2注册函数流程图
主要代码:
voidkh()//2新用户注册
{
FILE*fp;
inti,s,flog=1;
doublemoney;
charname[20],password[7],count[20];
printf("请输入你的姓名,账号,密码及存款数目\n");//新用户信息输入
scanf("%s%s%s%lf",name,count,password,&money);
i=strlen(password);//计算字符串数组长度函数
if(i>6)
{
printf("密码应小于六位!
请重新输入!
\n");
kh();//跳转致开户函数界面
}
fp=fopen("text.txt","r");//打开一个文本文件text(只读)
for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].password,user[i].password,&user[i].money);//磁盘文件输入函数 if(strcmp(count,user[i].count)==0)flog=0;//标记为已经注册用户 } fclose(fp); if(flog! =0) { fp=fopen("text.txt","a+");//打开一个文件文本text(读写) fprintf(fp,"%s%s%s%.2lf\n",name,count,password,money);//新用户信息收集 fclose(fp); number+=1;//标记已经注册的用户数量 printf("恭喜您注册成功\n"); printf("返回按1\n"); scanf("%d",&s); if(s==1) { system("cls"); main();//清屏并且跳转致主函数界面 } } else {printf("该用户已存在,您不能使用! \n"); kh(); } } 2.2.3功能模块: 登录 对应函数: dl() 输入: 账号,密码 函数跳转: 跳转到存款、取款、转账、查询修改密码相应功能项的函数; 实现功能: 登录进入功能选项; 流程图: 图2.3登陆函数流程图 主要代码: voiddl()//已注册用户 { FILE*fp; printf("请输入您的账号及密码! \n"); intflog=0,i,a=100; chartemp_name[20],temp_password[7],temp_count[20],k[2];//用户登录 while(flog==0) { scanf("%s%s",temp_count,temp_password);//调试时空格分别输入 fp=fopen("text.txt","r");//打开一个文本文件text(只读) for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].count,user[i].password,&user[i].money); if(strcmp(temp_password,user[i].password)==0&&strcmp(temp_count,user[i].count)==0) a=i; } fclose(fp); if(a { system("cls"); menu(user[a].count);//跳转至选择函数界面 flog=1;//标记为已经登陆用户 } else printf("输入错误,请重新输入! \n"); dl();break;//跳转至登陆函数界面,结束循环 break; } system("pause"); } 2.2.4功能模块: 存款 对应函数: ck() 输入: 金额; 函数跳转: 存款后返回到登录函数; 实现功能: 向账户存入一定金额; 流程图: 图2.4存款函数流程图 主要代码: voidck(charx[20])//1存款功能 {FILE*fp; inti,a=0; doublet; printf("请输入存储金额: \n"); scanf("%lf",&t);//记录存款金额 fp=fopen("text.txt","r"); for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].count,user[i].password,&user[i].money); if(strcmp(x,user[i].count)==0)a=i;//找到存款者 } fclose(fp); user[a].money+=t;//资金累加 fp=fopen("text.txt","w");//打开一个文本文件(只写) for(i=0;i { fprintf(fp,"%s%s%s%lf\n",user[i].name,user[i].count,user[i].password,user[i].money); } fclose(fp); printf("存储成功! \n"); printf("返回请按1\n");//返回主函数 scanf("%d",&i); if(i==1) { system("cls"); menu(user[a].count);//清屏并且跳转至选择函数界面 } 2.2.5功能模块: 取款 对应函数: qc() 输入: 账户,密码; 函数跳转: 取款成功后返回登陆函数,不成功则返回主函数; 实现功能: 从账户中取出一定金额,并保存剩余金额数; 流程图: 图2.5取款函数流程图 主要代码: voidqk(charx[20])//2取款功能 { FILE*fp; inti,a=0; doublet;//定义一个提取资金变量 printf("请输入提取金额: \n"); scanf("%lf",&t); fp=fopen("text.txt","r");//打开一个文件文本text(只读) for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].count,user[i].password,&user[i].money); if(strcmp(x,user[i].count)==0)a=i;//找到取款者 } fclose(fp); if(user[a].money>=t)//判断提取资金是否超出用户资金 { user[a].money-=t; fp=fopen("text.txt","w");//打开一个文件文本text(只写) for(i=0;i { fprintf(fp,"%s%s%s%lf\n",user[i].name,user[i].count,user[i].password,user[i].money); }//储存用户账户金额 fclose(fp); printf("取款成功! \n");//返回主函数 } elseprintf("取款失败! \n"); printf("返回请按1\n"); scanf("%d",&i); if(i==1) { system("cls"); menu(user[a].count); }//清屏并且跳转至选择函数界面 } 2.2.6功能模块: 转账 对应函数: zhuanz() 输入: 账户,密码; 函数跳转: 转账成功跳转到登录函数,否则回到主函数main; 实现功能: 实现用户间的转账; 流程图: 图2.6转账函数流程图 主要代码: voidzhuanz(charx[20])//3转账功能 { FILE*fp; doublet; inta=100,i,b=100; charz[20];//定义一个被转账用户名字符数组 printf("请输入对方账号! \n"); scanf("%s",z);//或者用gets(z);也可 printf("请输入转账金额\n"); scanf("%lf",&t); fp=fopen("text.txt","r");//打开一个文件文本text(只读) for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].count,user[i].password,&user[i].money);//查询转账者 if(strcmp(z,user[i].count)==0)b=i; } fclose(fp); fp=fopen("text.txt","r"); for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].count,user[i].password,&user[i].money);//查询转账者 if(strcmp(x,user[i].count)==0)a=i; } if(b { fclose(fp); user[a].money-=t; user[b].money+=t; fp=fopen("text.txt","w"); for(i=0;i { fprintf(fp,"%s%s%s%lf\n",user[i].name,user[i].count,user[i].password,user[i].money);//记录转账后的信息 } fclose(fp); printf("转账成功! \n"); } elseprintf("账号或金额错误,转账失败\n"); printf("返回请按1\n");//返回主函数 scanf("%d",&i); if(i==1) { system("cls"); menu(user[a].count); } } 2.2.7功能模块: 查询 对应函数: cx() 输入: 账户,密码; 输出: 账户余额; 函数跳转;查询完毕后返回登录函数; 实现功能: 输出账户余额; 流程图: 图2.7查询函数流程图 主要代码: voidcx(charx[20])//4查询功能 {FILE*fp; printf("您的信息如下: \n"); inti,a=0; fp=fopen("text.txt","r"); for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].count,user[i].password,&user[i].money); if(strcmp(x,user[i].count)==0)a=i;//记录要查询的人 } printf("姓名: %s账号: %s密码: %s余额%.2lf\n",user[a].name,user[a].count,user[a].password,user[a].money); fclose(fp); printf("返回请按1\n"); scanf("%d",&i); if(i==1) { system("cls"); menu(user[a].count); } } 2.2.8功能模块: 修改密码 对应函数: xg() 输入: 账户,密码; 函数跳转: 改密成功后返回到登录函数; 实现功能: 输出账户余额; 流程图: 否 图2.8修改密码函数流程图 主要代码: voidxg(charx[20])//5修改密码 {FILE*fp; inti,a; charpassword_1[7],password_2[7]; printf("请输入密码\n"); fp=fopen("text.txt","r"); for(i=0;i { fscanf(fp,"%s%s%s%lf",user[i].name,user[i].count,user[i].password,&user[i].money);//记录下要修改密码的人 if(strcmp(x,user[i].password)==0)a=i; } fclose(fp); scanf("%s",password_1); printf("请再输入密码\n");//两次输入密码 scanf("%s",p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- atm 取款 机实训 文档