[编程内容]
编程,模拟一个ATM(Automatic Teller Machine,自动取款机)的工作流程。依据帐户信息:姓名、帐号、密码、余额,完成ATM机功能:登录、显示余额、取款、修改密码。
程序工作流程:
- 显示登录界面: 帐号:
密码:
接受用户输入。
- 若为非法用户,提示出错,并重新登录,3次出错后退出;
- 若为合法用户,则显示操作菜单,提供下述服务:
① 显示基本信息
② 修改密码
③ 查询余额
④ 存款
⑤ 取款
⑥ 退出
[编程分析]
① 利用数组作为存储单位,保存储户信息;
② 使用文件记载储户信息,程序启动时加载储户信息进入,程序退出时将链表中的储户信息写入文件;
③ 使用链表结构记录有关数据,使用链表完成相关操作;
[步骤]
一、用一个数组表示一个储户
struct people
{
char name[10];
char account[20];
char password[10];
float money;
struct people*next;
};
二、建立main函数
void main()
{
int i,z,a,t=0;
char account[20],password[10],ch;
struct people *head,*p; /*1*/
FILE *fp=fopen("1.txt","r"); /*2*/
head=NULL; /*3*/
if(fp==NULL){printf("系统出错");return 1;} /*4*/
for(i=0;i<5;i++) /*5*/
{
p=(struct people*)malloc(sizeof(struct people)); /*6*/
fscanf(fp,"%s%s%s%f",p->name,p->account,p->password,&(p->money)); /*7*/
p->next=head; /*8*/
head=p; /*9*/
}
fclose(fp); /*10*/
printf("***********欢迎使用ATM自动取款机***********\n");
printf("*******************************************\n");
denglu(head,p);
}
- 分析
——fopen函数原型 FILE * fopen(const char * path,const char * mode);参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态(1.txt的内容见附件;mode流形态链接
http://www.cnblogs.com/devil-91/archive/2012/05/29/2523572.html
3——fopen函数若打开文件不成功,返回NULL;
4——fscanf函数
int fscanf(FILE*stream,constchar*format,[argument...]);FILE *stream:文件指针;char *format:格式字符串;[argument...]:输入列表。
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束;
10——fclose函数关闭文件。
链表:1——定义头指针head和遍历指针p;
6——malloc函数为结点分配空间(malloc函数链接
http://blog.csdn.net/xw13106209/article/details/4962479)
8——结点的next指针指向上一个结点;
9——设置当前结点为头结点。
不能放在2后面,2表示FILE*指针fp的初始化,C中要求把变量的声明放在最前面。
三、建立功能函数
void denglu(struct people *head,struct people *p);
void jiemian(struct people *head,struct people *p);
void chaxun(struct people *head,struct people *p);
void qukuan(struct people *head,struct people *p);
void cunkuan(struct people *head,struct people *p);
void xiugai(struct people *head,struct people *p);
void tuika(struct people *head,struct people *p);
void xinxi(struct people *head,struct people *p);
[程序错误和缺陷]
错误:登录界面上第一次输入账号错误,有时会自动退出程序,不进入循环;
缺陷:
- 登录界面不能实现: 帐号:
密码:
风格,而只能在把账号输入后显示“密码”;
- 建立管理员界面,实现储户的增加、减少和储户信息的更改,要求用到链表结点的增加、删除、查找;
- 在从文件中读取储户数据时设置新的变量控制储户个数的输入输出,而不是利用固定个数读取(如本例的5个储户信息);
- 想一想如果此程序每次运行都需要将文件中的储户信息读入程序链表中,那当文件中的储户量达到一个很大的数字时,每次程序往链表中读入或写入数据时不但要消耗大量的时间,还需要计算机有足够的空间,程序效率太差。
[程序代码]
链接:http://www.cnblogs.com/mzct123/p/4822895.html
[附件]
1.txt内容:
zhangsan 2015001 123456 10000.000000
lisi 2015002 123456 6000.000000
wangwu 2015003 123456 4000.000000
cj 2015004 123456 100000.000000
jiaojiao 2015005 123456 100000.000000
银行ATM机工作流程模拟编程的更多相关文章
-
银行ATM机工作流程模拟编程(代码)
#include<stdio.h>#include<stdlib.h>#include <conio.h>#include <string.h> voi ...
-
实验01——java模拟银行ATM系统
用java写的一个模拟银行系统,比较初级. ATM.java package cn.tedu.yinhang; import java.util.Scanner; /** * @author 赵瑞鑫 ...
-
MySQL银行ATM存取款机系统(需求分析)
银行ATM需求文档 一.E-R图形文 二.开发步骤 1.明确需求--数据库设计--编码实现功能--测试 2.绘制e-r图--绘制数据库模型图--使用三大方式规范数据库结构 三.开发思路 1. 模型图综 ...
-
模拟银行ATM系统(基础版)
Account类 package ATM; public class Account {//定义Account类 private String accountID;//用于存储学生的用户账号(由八位数 ...
-
ATM取款机的数据库模拟开发和实战总结
一.ATM实战开发的简介. 学习了几天的Oracle,开始着手用数据库PL/SQL语言做一个简单的ATM取款机业务,主要是为了巩固数据库的知识,并非真正的去实现高端的业务.有兴趣的可以看看,希望对同胞 ...
-
工作流程,编程,调试,性能:Unity游戏开发者应该学习的20个改进技巧
Unity 是一个备受欢迎的游戏开发平台.它的功能令人印象深刻,同时也迎合了不同的游戏开发需求.游戏开发者可以使用 Unity 创建任何类型的游戏,从世界级的 RPG 游戏到最流行的增强现实游戏 Po ...
-
WinIo驱动级键盘模拟编程
转自:http://blog.sina.com.cn/s/blog_455d7a320100vr37.html 前天无聊,翻翻自己的兴趣项目文件夹,发现了这个放下很久的项目!那是大三时候的事了.当时是 ...
-
数据库期末作业之银行ATM存取款机系统
--一.建库.建表.建约束 --1.使用SQL创建表 --客户信息表userinfo --字段名称 说明 备注 --customerID 顾客编号 自动编号(标识列),从1开始,主键 --用序列seq ...
-
Postman-----构建工作流程(用于某个请求完成后从指定的请求开始继续运行)
使用场景: 当您开始运行某个集合时,所有的请求按照您在主程序中看到的顺序运行,但是在某些情况下,往往我们希望按顺序列出的请求A.B.C.D.E.F请求,在执行时不执行B.C请求,希望A请求完成后直接执 ...
随机推荐
-
ADO.Net读取器获取数据库数据
string str = Configuration.ConfigurationManager.AppSettings[str].ToString(); string sql = "sele ...
-
使用VideoToolbox硬编码H.264<;转>;
文/落影loyinglin(简书作者)原文链接:http://www.jianshu.com/p/37784e363b8a著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. ======= ...
-
VS调试Ajax
VS调试Ajax: 1.ashx在后台处理程序中设定断点 2.触发AJAX 3.F12打开浏览器调试,搜索找到ajax调用的JS,设置断点,在浏览器中单步调试,会自动进入后台处理程序,然后就可以调试后 ...
-
JSP的编译指令
JSP有3个编译指令,是通知JSP引擎的消息,它不直接生成输出.编译指令都有默认值,无须为每个指令设置值. 常见的编译指令有如下三个: page:针对当前页面的指令. include:指定包含另一个页 ...
-
SQL拼接备份数据库
在SQLserver使用脚本备份数据库的时候需要注意的问题是: 1.指向的文件名必须是有读写权限. 2.在使用批量数据库备份时候需要根据自己需求选择性备份. -- ================== ...
-
【转】Nginx系列(四)--工作原理
原博文出于: http://blog.csdn.net/liutengteng130/article/details/46724081 感谢! 上篇文章介绍了Nginx框架的设计之管理进程以及 ...
-
MyEclipse10破解后将工程导成war包时报错
MyEclipse10.7 破解后将工程导成war包时报错 : SECURITY ALERT:INTEGRITY CHECK ERROR This product did not pass t ...
-
Go学习笔记02-源码
第二部分 源码 基于 Go 1.4,相关文件位于 src/runtime 目录.文章忽略了 32bit 代码,有兴趣的可自行查看源码文件.为便于阅读,示例代码做过裁剪. 1. Memory Alloc ...
-
测试与发布(Beta版本)
评分基准: 按时交 - 有分(测试报告-10分,发布说明-10分,展示博客-10分),检查的项目包括后文的两个方面 测试报告(基本完成5分,根据完成质量加分,原则上不超过满分10分) 发布说明(基本完 ...
-
PlugNT CMS v4.6.3 最新功能
PlugNT CMS v4.6.3 最新功能: 弃用标签 selected="commend,stick" 改为andwhere="commend=1 and stick ...