公文素材库 首页

银行ATM机工作流程模拟编程(链表)

时间:2019-05-29 03:34:21 网站:公文素材库

银行ATM机工作流程模拟编程(链表)

程序设计基础(一)综合作业银行ATM机工作流程模拟编程

班级学号姓名

[综合作业目的]

1、通过编程及上机调试,掌握函数、文件、结构及链表的综合应用;2、掌握查找、排序等基本算法;3、掌握模块化程序设计的方法。

[综合作业内容]

编程,模拟一个ATM(AutomaticTellerMachine,自动取款机)的工作流程。依据帐户信息:姓名、帐号、密码、余额,完成ATM机功能:登录、显示余额、取款、修改密码。

具体要求:

1、合理规划数据结构,以保存储户信息;

2、使用链表结构记录有关数据,使用链表完成相关操作;

3、使用文件记载储户信息,程序启动时加载储户信息,程序退出时保存储户信息;4、程序工作流程:

显示登录界面:帐号:

密码:接受用户输入。

若为非法用户,提示出错,并重新登录,3次出错后退出;若为合法用户,则显示操作菜单,提供下述服务:

①显示基本信息②修改密码③查询余额④存款

⑤取款(每次取款额度为¥5000元)⑥退出

5、*用户一次登录后的取款总数超过¥50000者,则程序自动产生一个明细记录,记载该

用户的登录时间、地点(登录时间、地点假设已知,并用字符串表示)。考虑此种情况较少出现,为节省存储空间,不宜在描述储户信息的数据结构中直接分配字符数组(建议在其数据结构中添加一个指向字符串数组的指针,…);6、提交设计文档及源代码清单。

[综合作业要求]

1、独立、按时完成综合作业;

2、进行需求分析,完成相关数据结构的规划与设计;3、实现菜单所列功能。具体要求:

每个功能为一个独立的函数;所有的输入之前都要有提示。

4、在程序的调试中,应用所学的计算机知识,完成大批数据的输入。并列出完整、严格的

测试结果(包括输入和输出);

5、提交完整的C代码及设计文档(包括设计方案、具体功能及实现、特点小结等)。

扩展阅读:程序设计基础(一)综合作业报告

程序设计基础(一)综合作业报告银行ATM机工作流程模拟编程

班级:XXXXXX班

学号:0000000000姓名:AAA

一、题目要求

编程,模拟一个ATM(AutomaticTellerMachine,自动取款机)的工作流程。依据帐户信息:姓名、帐号、密码、余额,完成ATM机功能:登录、显示余额、取款、修改密码。

具体要求:

1合理规划数据结构,以保存储户信息;

2使用链表结构记录有关数据,使用链表完成相关操作;

3使用文件记载储户信息,程序启动时加载储户信息,程序退出时保存储户信息;4程序工作流程:

1)显示登录界面:帐号:

密码:

接受用户输入。

2)若为非法用户,提示出错,并重新登录,3次出错后退出;3)若为合法用户,则显示操作菜单,提供下述服务:

显示基本信息修改密码查询余额存款

取款(每次取款额度为¥5000元)退出

5用户一次登录后的取款总数超过¥50000者,则程序自动产生一个明细记录,记载该

用户的登录时间、地点(登录时间、地点假设已知,并用字符串表示)。考虑此种情况较少出现,为节省存储空间,不宜在描述储户信息的数据结构中直接分配字符数组(建议在其数据结构中添加一个指向字符串数组的指针,…);6提交设计文档及源代码清单。

二、设计方案

基本思路:用户的原始数据被保存在一个account文本文件中,程序启动时,建立链

表,加载用户数据。提示用户登录,检查用户信息正确后,允许进行下一步操作;对于用户不正确的操作,均进行提示或警告,让其重新操作;程序结束,选择0安全退出并储存用户数据。

框架结构:logon_system()模拟登录界面,用户登录后,在menu中进行主菜单的处理,

用户根据需要选择进行下一步操作,将其他功能的具体实现分别放到子函数或者子菜单中进行,实现分支选择操作。

三、具体功能及实现基本功能:

(1)从文件中读入数据初始化

建立链表,从account文本文件中加载用户数据。

(2)显示登录界面,并有提示

这一功能在logon_system()函数中实现,显示登录界面,提示用户进行登录操作,并有相关温馨提示。

(3)检查登录信息是否正确

这一功能在access()中实现,如果用户输入信息不正确,提示用户重新操作。具体包括:输入的账号在account文件中不存在,即没有这个储蓄账户;输入的密码错误,提示用户重新输入,若三次输入不成功,程序自动退出,每次错误输入后,提示用户剩余输入次数;密码不足六位,提示用户重新输入,这种错误不减少用户的输入次数。

(4)显示主菜单,用户选择后,进入子菜单

显示主菜单功能在menu()中实现,包括

取款:选择后进入取款界面(draw_money()函数实现),提供50、100、

200、500、800、1000、201*及自由输入金额(extra()实现)的取款。其中输入金额不是整50或100的进行提示,取款金额超过当前能够取出的最大整金额进行提示(isoverdraw()实现),并显示当前最多能取款的整数金额。取款超过5000的进行记录并对用户说明(extra()实现)。

存款:提示用户输入存款金额,其中输入金额不是整50或100的进行提示

(deposit()实现)。

查询:显示当前余额(query()实现)。

改密:提示用户输入旧密码,两次输入新密码来达到确认效果,每次输入密

码,对于密码不足六位、原密码输入错误、两次输入新密码不一致,均有提示,并让用户重新操作(revise()实现)。退出:用户结束操作,退出程序。

四、特点小结

由函数实现每个功能,思路清晰,结构明了;分枝型操作,便于用户进行;注重细节的程序设计思路,几乎对每一步操作都进行了判错以及提示处理,保证了

程序能正常地运行;

详尽的提示信息,友好的界面设计,提高了程序的实用性和观赏性;

五、程序代码

#include#include#includetypedefstructme{

inthour,minute,second;charaddress[100];floatmm;}memo;

typedefstructacc{

longnumber;charname[9];charpass[7];floatm;

structacc*next;structme*mnext;

}ac;

ac*create_list();ac*access(ac*head);voidsave(ac*head);voidmenu();

floatisoverdraw(float,int);voiddraw_money(ac*);voiddeposit(ac*);voidquery(ac*);voidrevise(ac*);voidlogon_system();floatextra(ac*);intmain(){

intflag,select;ac*t,*head;

head=create_list();logon_system();t=access(head);if(t==NULL){

printf("三次输入错误,系统将自动退出!\\n");return0;}

flag=1;while(flag){

printf("户主:%s帐号:%Ld\\n\\n\\n",t->name,t->number);menu();

scanf("%d",&select);

while(select5){

printf("输入有误,请重新选择:\\n");scanf("%d",&select);}

system("CLS");switch(select){

case1:draw_money(t);break;case2:deposit(t);break;case3:query(t);break;case4:revise(t);break;

case0:save(head);return1;}}

return1;}

/*程序开始时,建链表,加载用户信息*/ac*create_list(){

ac*p,*head=NULL;FILE*fp;

fp=fopen("E:\\\\account.txt","r");if(fp==NULL){

printf("filenotexits\\n");exit(0);}

while(!feof(fp)){

p=(ac*)malloc(sizeof(ac));fscanf(fp,"%d",&(p->number));fscanf(fp,"%s",p->name);fscanf(fp,"%s",p->pass);

fscanf(fp,"%f\\n",&(p->m));//在account文本文件中,每个人的信息间有换行符,故"%f\\n"p->mnext=NULL;p->next=head;head=p;}

fclose(fp);returnhead;}

/*检查用户登录信息,对密码错误、密码位数不足、账户不存在等情况进行提示,只有密码错误t++,否则t不变*/ac*access(ac*head){

ac*p;intt=0;

intn,flag=0;charpp[100];while(tnumber==n&&strcmp(p->pass,pp)==0&&strlen(pp)==6){

flag=1;break;}

elseif(p->number==n&&strcmp(p->pass,pp)!=0&&strlen(pp)==6){

printf("密码错误,请重新输入!剩余输入次数%d\\n",2-t);p=head;break;}

elseif(p->number==n&&strlen(pp)!=6){

printf("温馨提示:密码是六位数字或字母,请重新输入!\\n");t--;//这种情况t不变,故先减一,抵消后面t++的作用p=head;break;}else

p=p->next;}

if(flag==1)break;elseif(p==NULL)

printf("您输入的账户不存在,请重新输入:\\n");elset++;}

if(t>=3)

returnNULL;else

returnp;}

/*显示菜单*/voidmenu(){

printf("\\t1取款\\n");printf("\\t2存款\\n");printf("\\t3查询\\n");printf("\\t4改密\\n");printf("\\t0退出\\n");

printf("请选择您要的服务:\\n");}

/*取钱:如果用户输入非整50或100、超支现象,提示重新进行操作*/voiddraw_money(ac*t){

intx;

printf("\\t1.505.800\\n\\n");printf("\\t2.1006.1000\\n\\n");printf("\\t3.201*.201*\\n\\n");printf("\\t4.5008.输入金额\\n\\n");printf("请选择:\\n");scanf("%d",&x);while(x=9){

printf("输入有误,请重新选择:\\n");scanf("%d",&x);}

switch(x){

case1:t->m=isoverdraw(t->m,50);break;//判断是否超支case2:t->m=isoverdraw(t->m,100);break;case3:t->m=isoverdraw(t->m,200);break;case4:t->m=isoverdraw(t->m,500);break;case5:t->m=isoverdraw(t->m,800);break;case6:t->m=isoverdraw(t->m,1000);break;

case7:t->m=isoverdraw(t->m,201*);break;case8:t->m=extra(t);break;}

}

/*存款:只能整存*/voiddeposit(ac*t){

floatm;

printf("请输入您要存入的金额:\\n");scanf("%f",&m);while((int)m%50!=0){

printf("我们只能提供面值为50或100的服务,请重新输入您要存入的金额:\\n");

scanf("%f",&m);}

if((int)m%50==0){

t->m=t->m+m;

printf("存款成功!\\n");}}

/*显示余额*/

voidquery(ac*t){

printf("你当期的余额为:%.2f元\\n\\n\\n",t->m);}

voidlogon_system(){

printf("\\n\\n");

printf("\\t欢迎使用中国MM银行自动服务系统,我们将竭诚为您服务!");printf("\\n\\n\\n");printf("\\t帐号:\\n");printf("\\n");

printf("\\t密码:\\n\\n\\n\\n\\n");

printf("\\t温馨提示:1.请保护好您的密码,谨防泄漏;\\n\\t\\t2.若出现吞卡或不出钞现象,\\

请及时与工作人员联系,\\n\\t\\t不要相信其它任何提示信息,以防上当受骗。");

printf("\\n\\n\\n");

printf("请输入您的帐号及密码:\\n");}

/*给用户提供自由输入取款金额的功能*/floatextra(ac*t){

floatm,x,k;

printf("请输入取款金额:\\n");scanf("%f",&m);

while((int)m%50!=0){

printf("您的输入有误,我们只能提供面值金额为50或100的服务,请重新输入取款金额:\\n");scanf("%f",&m);}

if(mm,m);returnx;}

else//取款超过5000则被记录{

k=t->m-m;

x=isoverdraw(t->m,m);//是否超支if(k>0){

t->mnext=(memo*)malloc(sizeof(memo));t->mnext->hour=12;t->mnext->minute=12;t->mnext->second=12;

strcpy(t->mnext->address,"武汉科技大学");printf("温馨提示:为了保护您的财产安全,您本次操作将系统自动被记录!\\n");}

returnx;}}

/*修改密码:对输入不足六位、输入错误密码、两次输入新密码前后不一致等情况,提示用户重新输入*/voidrevise(ac*t){

inti;

charpass_a[3][7];

printf("请输入当前密码:\\n");scanf("%s",pass_a[0]);

while(strcmp(pass_a[0],t->pass)!=0){

if(strlen(pass_a[0])==6)

printf("您输入的密码有误,请重新输入:\\n");else{

printf("您输入的密码有误,请重新输入:\\n");

printf("温馨提示:密码是六位数字或字母,请重新输入!\\n");}

scanf("%s",pass_a[0]);}

printf("请输入新密码:\\n");//输入新密码时也可能出现密码不足六位的情况

scanf("%s",pass_a[1]);

while(strlen(pass_a[1])!=6){

printf("您输入的密码有误,请重新输入:\\n");

printf("温馨提示:密码是六位数字或字母,请重新输入!\\n");scanf("%s",pass_a[1]);}

printf("请再次输入新密码:\\n");scanf("%s",pass_a[2]);

while(strlen(pass_a[2])!=6){

printf("您输入的密码有误,请重新输入:\\n");

printf("温馨提示:密码是六位数字或字母,请重新输入!\\n");scanf("%s",pass_a[2]);}

while(strcmp(pass_a[1],pass_a[2])!=0){

printf("两次新密码输入不一致,请重新输入新密码:\\n");scanf("%s",pass_a[1]);while(strlen(pass_a[1])!=6){printf("您输入的密码有误,请重新输入:\\n");

printf("温馨提示:密码是六位数字或字母,请重新输入!\\n");scanf("%s",pass_a[1]);}

printf("请再次输入新密码:\\n");scanf("%s",pass_a[2]);

while(strlen(pass_a[2])!=6){

printf("您输入的密码有误,请重新输入:\\n");

printf("温馨提示:密码是六位数字或字母,请重新输入!\\n");scanf("%s",pass_a[2]);}}

for(i=0;ipass[i]=pass_a[1][i];printf("密码修改成功!\\n");}

/*检查用户取款是否超支*/

floatisoverdraw(floatm,intn){

intk;m=m-n;if(m}

FILE*fp;

fp=fopen("E:\\\\account.txt","w");if(fp==NULL){

printf("Can"topenfile\\n");return;}

p=head;

while(p!=NULL){

fprintf(fp,"%d%s%s%f\\n",p->number,p->name,p->pass,p->m);p=p->next;}

fclose(fp);

六、过程展示

显示登录系统

用户登录,出现错误,进行提示

取款界面,引导用户正确操作

取款超过5000,被记录

存款界面

查询余额

修改密码

附:account文件

友情提示:本文中关于《银行ATM机工作流程模拟编程(链表)》给出的范例仅供您参考拓展思维使用,银行ATM机工作流程模拟编程(链表):该篇文章建议您自主创作。

  来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。


银行ATM机工作流程模拟编程(链表)
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/654287.html
相关阅读
最近更新
推荐专题