c语言Atm的简单实现

发布时间:2017-12-03 21:12:52   来源:文档文库   
字号:

信息科学与工程学院

《数据结构》

课程设计名称: ATM的设计与实现

201616010107

课程设计时间:2016-2017学年第二学期

计算机科学与技术 专业课程设计任务书

说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页

目录

1 需求分析 1

1.1存款 1

1.2取款 1

1.3查看流水账 1

1.4排序 1

1.5修改密码 2

1.6查看ATM使用情况 2

1.7录入信息 2

1.8恢复限额 2

2 概要设计 3

2.1数据类型的定义 3

2.2功能模块结构图 4

3 运行环境 6

4 开发工具和编程语言 7

5 详细设计 8

5.1 主函数 8

5.2 录入函数 9

5.3加载和存储函数 9

5.4 输出流水账函数 10

5.5 查看ATM使用情况函数 10

6 程序编码 11

7 运行结果 14

8 心得体会 15

9 参考文献 16


需求分析

ATM自助机——便于储户存钱、取钱。

按功能分为两大系统:个人用户系统和银行后台系统;

个人用户系统————登录(输入正确的账号或密码才能进入)、存款、取款、查看流水账(查看用户最近存取款情况)、排序(此为超级用户功能,可以查看所有人的余额)、修改密码(修改个人登录密码);

银行后台系统————atm使用情况(便于银行人员管理atm)、录入信息(包括录入用户及其银行卡号信息和录入atm 信息)、恢复限额(每天6点恢复所有人的取款上限)

1.1存款

输入金额,存入ATM,当前AMT以及自己的余额会增加并且自动生成流水账。

1.2取款

输入取款金额,判断它是否小于ATM总金额并且小于当天的限额,当前的ATM金额减少,自己的余额和限额也会减少。

1.3查看流水账

输出自己近段时间内的所有操作,发生额,以及时间。

1.4排序

此为超级用户功能,实现以余额对所有用户排序并且输出一些信息。

1.5修改密码

修改用户登录密码。

1.6查看ATM使用情况

查看每一台ATM的使用情况,输出存取款发生额及其次数。

1.7录入信息

能录入用户、银行卡以及ATM的信息。

根据提示一步步输入数据,存入数组中,最后存入文件。

1.8恢复限额

恢复用户一天的限额。


概要设计

2.1数据类型的定义

1. 定义用户类型

typedef struct node typedef struct

{

char number[5];//用户编号

char User_name[11];//用户名

char password[7];//密码

int kind;//用户类型

}User;

2. 定义时间类型

typedef struct

{

int year;

int month;

int day;

}Data;

3. 定义银行卡类型

typedef struct

{

char cardnumber[20];//银行卡号

char Idcard[19];//身份证号

int balance;//余额

Data open;//开户时间

int quota;//限额

}Bankcard;

4. 定义ATM类型

typedef struct

{

char code[5];//机器代码

char address[30];//地址

int Total_money;//取款机总金额

}ATM;

5.定义流水账类型

typedef struct node

{

char code[5];//机器代码

char cardnumber[20];//银行卡号

int access;//存取,0存款,1取款

Data occurrence;//发生日期

int money;//发生额

struct node *next;

}Book,*Link;

2.2功能模块结构图

根据需求分析,为了满足用户的功能需求,按照软件开发方法学中的模块划分原则,我将本系统主要划分为两个子系统:个人用户系统和银行后台系统。个人用户系统有如下功能:存款,取款,排序,流水账,密码;银行后台系统有如下功能:ATM使用情况,录入信息,恢复限额。各模块之间的关系如图1所示。

1模块结构图

为了实现上述功能模块,因此定义多个函数以及包含多个头文件便于实现,本系统定义的函数和功能如下:

1.函数

void load1(User us[],int *n);加载用户信息

void load2(Bankcard ba[]);加载银行卡信息

void load3(ATM at[]);加载Atm信息

void load4(Link head);加载流水账

void display();主界面

void display1();个人用户界面

void display2();用户后台界面

int Login(User us[],int n);用户登录界面

int Login2();银行后台登录界面

void save1(User us[],int n);存储用户信息

void save2(Bankcard ba[],int n);存储银行卡信息

void save3(ATM at[],int m);存储Atm信息

void save4(Link head);存储流水账信息

void add(User us[],Bankcard ba[],ATM at[],int *n,int *m);录入用户和银行卡信息

void inputRecord(User us[],Bankcard ba[],int i);录入一个信息

void inputATM(ATM at[],int i);录入一个Atm信息

void output(User us[],Bankcard ba[],int n);输出排序后的用户信息

void PrintRecord(User *u,Bankcard *b);输出一个信息

void sort(User us[],Bankcard ba[],int n);用户排序

int deposit(int *p,int *a);存款

int withdraw(Bankcard *p,ATM *a);取款

int findAtm(ATM at[],int m);查找atm是否存在

void generate1(Link head,char code[],char cardnumber[],int money);生成流水账void generate2(Link head,char code[],char cardnumber[],int money);生成流水账

void change(User *u);更改密码

void recovery(Bankcard ba[],User us[],int n);恢复限额

void seebook(Link head,char cardnumber[]);查看流水账

int Printbook(Link p);输出一个流水账

void seeAtm(Link head,ATM at[],int m);查看Atm使用情况

PrintAtm(ATM at,int number1,int number2,int money1,int money2);输出所有Atm使用情况。

2.头文件

define.h 定义结构体类型、包含系统头文件、以及函数声明

save.h 存储数据到文件

display.h 显示界面

load.h 加载文件到数组或链表

add.h 录入信息

output.h 输出排序后的信息

sort.h 排序(按余额)

deposit.h 存款

withdraw.h 取款

findAtm.h 查找ATM

generateBook.h

change_password.h 修改密码

recovery_quota.h 恢复限额

seebook.h 查看现在

seeAtm.h 查看ATM使用情况

运行环境

1. 硬件环境:PC机内存 8G;硬盘1000G

2. 软件环境:操作系统:windows7

开发工具和编程语言

开发环境:Visual C++

编程语言:C语言

详细设计

在概要设计的基础上,对每个模块进行内部逻辑处理部分详细设计。下面分别列出各个模块具体实现流程图:

主函数

5.2 录入函数

5.3加载和存储函数

5.4 输出流水账函数

5.5 查看ATM使用情况函数

程序编码

根据详细设计的流程图转化为如下代码,下面列出主函数代码:

#include"define.h"

#include"save.h"

#include"display.h"

#include"load.h"

#include"add.h"

#include"output.h"

#include"sort.h"

#include"deposit.h"

#include"withdraw.h"

#include"findAtm.h"

#include"generateBook.h"

#include"change_password.h"

#include"recovery_quota.h"

#include"seebook.h"

#include"seeAtm.h"

int main()

{

int n,select,k,g,choice,m,t,money;

User us[N];

Bankcard ba[N];

ATM at[M];

Link bk;

bk=(Link)malloc(sizeof(Book));bk->next=NULL;

load1(us,&n);

load2(ba);

load3(at,&m);

load4(bk);

while(1)

{

system("cls");

display();

scanf("%d",&select);

if(select==1)

{

g=findAtm(at,m);

if(g!=-1)

{

k=Login(us,n);

if(k!=-1)

{

while(1)

{

system("cls");

display1();

t=0;

scanf("%d",&choice);

switch(choice)

{

case 1:money=deposit(&ba[k].balance,&at[g].Total_money);generate1(bk,at[g].code,ba[k].cardnumber,money);save2(ba,n);save3(at,m);save4(bk);break;//存款

case 2:money=withdraw(&ba[k],&at[g]);//取款

if(money!=-1)

{generate2(bk,at[g].code,ba[k].cardnumber,money);save2(ba,n);save3(at,m);save4(bk);}break;

case 3:seebook(bk,ba[k].cardnumber);break;//查看流水账

case 4:if(us[k].kind==0)

sort(us,ba,n);

else

printf("权限不足,请重新选择\n");system("pause");t=0;break;//排序

case 5:change(us[k].password);save1(us,n);break;//修改密码

case 6:t=1;break;

}

if(t==1)

break;

}

}

}

}

else if(select==9)

{

if(Login2()==1)

{

while(1)

{

system("cls");

display2();

scanf("%d",&choice);

switch(choice)

{

case 1:seeAtm(bk,at,m);break;//atm使用情况

case 2:add(us,ba,at,&n,&m);break;//录入信息

case 3:recovery(ba,us,n);break;//恢复限额

case 4:

return 0;//退出

}

}

}

}

else

{

printf("由于您的恶意输入,您的银行卡已被没收,请前往银行找回!\n");

system("pause");

return 0;

}

}

}

运行结果

以下为排序和查询流水账结果测试:


心得体会

本学期,当数据结构大作业刚布置下来的时候感觉很难,因为感觉实现的功能比较多并且时间又短,根本完不成这个任务,在写大作业的过程中也并不是那么顺利,存在着太多的bug,然后就一步步调试,找出错误。写完大作业时,感觉对指针有了更深的理解。在整个过程中对我提升最大的就是指针的使用和调试了。其实学数据结构,想要掌握它的精髓,就必须自己亲自去实现某一个功能,然后逐步调试,明白它的思想,就能很快地掌握它(实践是检验真理的唯一标准)。

源代码

参考文献

[1] 严蔚敏.《数据结构(C语言版)》.北京:清华大学出版社

[2] 谭浩强.C语言程序设计》.(第三版)北京:清华大学出版社

信息科学与工程 学院课程设计成绩评价表

课程名称:数据结构课程设计

设计题目:ATM的设计与实现

专业:计算机科学与技术 班级:1601 姓名:罗淇 学号:201616010107

本文来源:https://www.2haoxitong.net/k/doc/f2b67e7515791711cc7931b765ce050877327559.html

《c语言Atm的简单实现.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式