信息科学与工程学院
《数据结构》
课 程 设 计 报 告
课程设计名称: 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点恢复所有人的取款上限)。
输入金额,存入ATM,当前AMT以及自己的余额会增加并且自动生成流水账。
输入取款金额,判断它是否小于ATM总金额并且小于当天的限额,当前的ATM金额减少,自己的余额和限额也会减少。
输出自己近段时间内的所有操作,发生额,以及时间。
此为超级用户功能,实现以余额对所有用户排序并且输出一些信息。
修改用户登录密码。
查看每一台ATM的使用情况,输出存取款发生额及其次数。
能录入用户、银行卡以及ATM的信息。
根据提示一步步输入数据,存入数组中,最后存入文件。
恢复用户一天的限额。
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;
根据需求分析,为了满足用户的功能需求,按照软件开发方法学中的模块划分原则,我将本系统主要划分为两个子系统:个人用户系统和银行后台系统。个人用户系统有如下功能:存款,取款,排序,流水账,密码;银行后台系统有如下功能: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语言
在概要设计的基础上,对每个模块进行内部逻辑处理部分详细设计。下面分别列出各个模块具体实现流程图:
根据详细设计的流程图转化为如下代码,下面列出主函数代码:
#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
文档为doc格式