一、实验目的
通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。
二、实验要求
要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。
1.程序具有以下功能:
1)登录系统:
输入卡号(16位)、密码(6位),只有卡号、密码同时正确(信息存放在文件中)才能进入系统;
2)操作功能:
●查询:查询的存款余额。按任意键返回主菜单;
●修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存
放到信息文件中。之后可返回主菜单;
●取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过余额,操作
后余额应相应减少。之后可返回主菜单;
●存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操
作后余额应相应增加。之后可返回主菜单;
●转帐:先输入一个号(已保存在信息文件中),然后显示一部分用户名(如:*山),储户确
认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过余额,操作后余额应相应减少。之后可返回主菜单;
●退出:退出系统。
2.定义如下结构体类型:
●“日期”结构体Date:成员有:year(年)、month(月)、day(日);
●“”结构体Account:成员有:no(号)、name()、balance(余额)
●“存取款记录”结构体Record,:成员有:no(号)、date(日期)、number(数量,可正可
负,正表示存款,负表示取款)
3.信息存放在accounts.txt文件,储户存取款记录保存在records.txt中;
4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。
5.附加功能:
●储户一天输错密码的次数不能超过3次,否则无法进入系统;
●应避免输入存款金额、取款金额为负数等异常情况的出现。
三、程序已经实现的功能点
实验要求均已实现。此外还有:
1.卡号、密码位数输错时,提示并返回重新输入,
2.简化取款时的输入
3.转账时,转账账户为原账户时,提示并返回重新输入
4.在多个模块中添加了退出功能,无需回到主菜单即可退出系统
5.在查询模块中加入了存取记录明细查询
四、程序运行截图及说明
1.登陆模块
1)卡号不为16位时,输出提示并返回重新输入
2)卡号不存在时,输出提示并返回重新输入
3)密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号
4)密码连续输错三次时,锁定卡号,今日无法登录
2.登录后的系统主菜单
1)查询模块主菜单
2)查询明细
1)当余额不足50时,无法进入取款模块
2)取款模块主菜单
3)便捷取款
4)手动输入取款金额
输错时,返回重新输入
5)取款后的菜单
6)取款完成后选择显示余额
5.存款模块
1)解决输入错误问题
2)存款成功
6.密码修改模块
1)原密码输错时,返回重新输入,不提供退出功能
2)密码位数输错、两次输入新密码不一致时,返回重新输入
3)输入无误时
7.转账模块
1)转入卡号位数输错时,提示并返回重新输入
2)未查找到该卡号时,输出提示,提供退出功能,键入除*外任意键重新输入
3)转入卡号与当前卡号相同时,输出提示
4)输出转入卡账户的部分用户名
5)解决转账金额输错的问题
6)转账成功
五、采用的主要技术
1.宏定义:由于本程序的printf语句较多,为了便于编写,故用PR代替
2.链表:账户信息采用链表结构,存动态分配,使用存无限制,可以扩展到所有可以使用的存
3.switch多分支选择结构
4.文本文件的读写
5.利用time.h头文件,简便地获取系统日期
6.system()函数和fflush()函数的简单使用
六、设计心得
1.各函数的功能要相对独立,逐步求精。
2.如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体被意外修改
附:程序代码
/***
* 运行本程序前,请在本程序根目录下建立文件“accounts.txt”,格式如下:
* 卡号1(16位) 1 账户余额1 密码1
* 卡号2(16位) 2 账户余额2 密码2
* ……
****/
#include
#include
#include
#include
#define PR printf
typedef struct
{
short int year;
short int month;
short int day;
}Date;//日期
typedef struct Account
{
char no[17];
char name[20];
double balance;
char password[7];
struct Account* next;
}Account;
typedef struct
{
char no[17];
Date date;
double number;
}Record;//记录
Account *head = NULL;//账户信息链表表头
Account *now_acc = NULL;//当前账户
/************函数申明************/
void InitializeAccount();//导入账户信息
//--------------------------------------
char LockAccountT opic(const char *no);//检测账户是否被锁定
void LockAccount(const char *no);//锁定账户
//--------------------------------------
void Login();//登录
Account* FindbyNo(const char *no);//查找卡号对应账户信息在链表中的地址//--------------------------------------
void Demand();//查询主菜单
void PrintBalance();//输出余额
void Printetail();//输出明细
//--------------------------------------
void Modifiy();//修改密码
//--------------------------------------
void Withdrawal();//取款主界面
void WithdrawalOt(long money);//取款
//--------------------------------------
void Depositing();//存款
//--------------------------------------
void Transfer();//转账
char *CoverUpName(const char *name);//掩盖部分用户名
//--------------------------------------
void Log(double money, const char *no);//将存款记录写入文件中
void Save();//保存账号信息
void FreeData();//释放链表空间
//--------------------------------------
int main()
{
char choose;
InitializeAccount();//导入账户信息
Login();//登录
do
{
system("cls");
PR("\t\t \n");
PR("\t\t 请选择服务\n");
PR("\t\t+-+---------+ +---------+-+\n");
PR("\t\t|5|\33转账| |查询\32|1|\n");
PR("\t\t+-+---------+ +---------+-+\n\n");
PR("\t\t +---------+-+\n");
PR("\t\t |取款\32|2|\n");
PR("\t\t +---------+-+\n\n");
PR("\t\t +---------+-+\n");
PR("\t\t |存款\32|3|\n");
PR("\t\t +---------+-+\n\n");
PR("\t\t+-+---------+ +---------+-+\n");
PR("\t\t|0|\33退出系统| |修改密码\32|4|\n");
PR("\t\t+-+---------+ +---------+-+\n\n");
PR("请选择服务:");
fflush(stdin);
choose = getchar();
switch (choose)
{
case '1': Demand(); break;//查询
case '2': Withdrawal(); break;//取款
case '3': Depositing(); break;//存款
case '4': Modifiy(); break;//修改密码
case '5': Transfer(); break;//转账
case '0': FreeData(); return 0;//退出
default:
printf("输入错误,请重新选择\n"); //解决用户可能的输入错误
system("pause");
}
} while (1);
return 0;
}
/**********导入账户信息**********/
void InitializeAccount()
{
FILE *fp;
Account temp;
PR("系统初始化中,请稍侯...\n");
if (!(fp = fopen("accounts.txt", "r")))
{
PR("\07");//响铃
PR("读取信息失败,请在本程序根目录建立信息文件(accounts.txt)。格式如下:\n");
PR("卡号1(16位) 1 账户余额1 密码1\n");
PR("卡号2(16位) 2 账户余额2 密码2\n");
PR("……\n");
exit(0);
}
while (fscanf(fp, "%s %s %lf %s", temp.no, https://www.sodocs.net/doc/8c9160546.html,, &temp.balance, temp.password) == 4)
{//读入账户信息
Account *t = head;
head = (Account*)malloc(sizeof(Account));
*head = temp;
head->next = t;
}
fclose(fp);
system("cls");//清除“系统初始化中,请稍侯...”提示
}
/**********登录**********/
void Login()
{
do
{
char no[17];
system("cls");
PR("\n\n\n\n\t\t\t请输入16位卡号:");
fflush(stdin);
gets(no);
if (strlen(no) != 16)
{
PR("卡号应为16位\n");
system("pause");
system("cls");
continue;
}
if (LockAccountT opic(no))
{//当该卡号被锁定时
PR("\07");//响铃
PR("\n\n您的登陆密码今日连续输错三次,已被临时锁定,次日将自动解锁,或当日持本人有效证件到柜台办理密码重置。\n\n");
system("pause");
continue;
}
if (!(now_acc = FindbyNo(no)))//将卡号对应信息在链表的地址赋给now_acc
{//当卡号不存在时
PR("\n\n此卡号不存在,请重新输入!\n\n");
system("pause");
continue;
}
char a = '2';//计算剩余可输错密码次数
do
{
char password[7];
system("cls");
PR("\n\n\n\n\t\t\t请输入16位卡号:%s\n", now_acc->no);
PR("\n\n\t\t\t请输入6位密码:");
fflush(stdin);
scanf("%s", password);
if (strlen(password) != 6)
{
PR("密码应为6位\n");
system("pause");
system("cls");
continue;
}
一、课题要求 1、当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录A TM柜员机系统。 2、查询余额:初始余额为10000元。 3、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。 4、ATM存款:不能出现负存款。 5、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确, 新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 二、代码 #include "stdafx.h" #include "stdio.h" #include "windows.h" #include "stdlib.h" #include "conio.h" void gotoxy(int x,int y); //光标位置函数 void enter_ATM(); //账号输入函数 void input_code(); //密码输入函数 void caozuo(); //基本操作界面 void qukuan(); //取款函数 void success(); //操作成功函数 void delay(); //延时函数 void yu_e(); //余额查询函数 void cunkuan(); //存款函数 void panduan(long int z); //判断取款是否合法函数 void exit(); //退出界面函数 void mima(); //密码修改 void zhuangyi(); long int CODE=123456,YU_E=10000; //=========================主函数========================// main() { enter_ATM(); caozuo(); } //======================================================// //==================================柜台机账号输入函数=======================================//
课程设计报告 课程类别:本科 课程名称:程序设计基础(C语言) 课程代号:指导教师: 银行ATM自动取款机系统课程设计 姓名:学号: 姓名:学号: 姓名:学号: 学院: 班级:
目录 1.课程设计内容.................................................. 2.课程设计要求.................................................. 3.可行性研究................................................... 4.需求分析..................................................... 5.概要设计...................................................... 5.1 功能模块图............................................... 5.2 功能模块描述............................................. 5.3数据结构 ................................................. 6.详细设计...................................................... 6.1 功能流程图............................................... 6.2 重点设计................................................. 7.测试与调试.................................................... 8.总结.......................................................... 8.1 心得体会.................................................. 8.2 不足与改进................................................ 9.参考文献......................................................
信息科学与工程学院《数据结构》 课程设计报告 课程设计名称: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)
1需求分析 ATM自助机——便于储户存钱、取钱。 按功能分为两大系统:个人用户系统和银行后台系统; 个人用户系统————登录(输入正确的账号或密码才能进入)、存款、取款、查看流水账(查看用户最近存取款情况)、排序(此为超级用户功能,可以查看所有人的余额)、修改密码(修改个人登录密码); 银行后台系统————atm使用情况(便于银行人员管理atm机)、录入信息(包括录入用户及其银行卡号信息和录入atm 信息)、恢复限额(每天6点恢复所有人的取款上限)。 1.1存款 输入金额,存入ATM,当前AMT以及自己的余额会增加并且自动生成流水账。 1.2取款 输入取款金额,判断它是否小于ATM总金额并且小于当天的限额,当前的ATM金额减少,自己的余额和限额也会减少。 1.3查看流水账 输出自己近段时间内的所有操作,发生额,以及时间。 1.4排序 此为超级用户功能,实现以余额对所有用户排序并且输出一些信息。
#include
for(int j=0;j<10;j++) { if(st[j].zh==zh && strcmp(st[j].mm,mm)==0) { flag=true; printf("找到了"); f=j; break; } } } else if (i==4) { if (flag!=true) { printf("您还没有登录"); } else { printf("输入存款金额"); int je; scanf("%d",&je); st[f].je=st[f].je+je; printf("存款成功"); } } else if (i==3) { if (flag!=true) { printf("您还没有登录"); } else { printf("输入取款金额"); int je; scanf("%d",&je); if (je>st[f].je) { printf("余额不足"); } else { st[f].je=st[f].je-je;
C语言-ATM机模拟操作 程序实现功能点: a.查询:查询帐户的存款余额。按任意键返回主菜单; b.取款:输入100、500、1000、2000、5000、其它金额为取款金额,取 款金额不超过帐户余额,操作后帐户余额应相应减少,之后可返回主菜单; c.存款:输入100、500、1000、2000、5000、其它金额为存款金额,存 款金额不超过20000元,操作后帐户余额应相应增加。之后可返回主菜单; d.转帐:输入一个帐户号,程序判断与文件信息是否相符,储户确认无 误后,再输入100、500、1000、2000、5000、其它金额为转帐金额,转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; e.修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码 取代旧密码,并存放到帐户信息文件中。之后可返回主菜单; f.退出:退出系统; g.帮助:增加趣味性; h.存款时,可正可负,正表示存款,负表示取款; i.帐户信息存放在文件,储户存取款记录保存在中;(在目录下创建这两
个文件) j.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用; k.储户一天内输错密码的次数不能超过3次,否则无法进入系统; l.有效避免输入存款金额、取款金额为负数等异常情况的出现。 较为突出的功能是注册、登录时账号密码的核对验证;存款转出转入金额的核对。是否超过余额,是否不符合格式,是否为冲突操作。 (2)程序运行截图及说明(每图限50到100字); 进入程序,menu1可选择登录、注册功能。 选择登录,输入账号密码,通过输入内容与文件的匹配,判断是否成功登录。若登录失败,则重新选择。
一、实验目的 通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。 二、实验要求 要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。 1.程序具有以下功能: 1)登录系统: 输入卡号(16位)、密码(6位),只有卡号、密码同时正确(帐户信息存放在文件中)才能进入系统; 2)操作功能: ●查询:查询帐户的存款余额。按任意键返回主菜单; ●修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到 帐户信息文件中。之后可返回主菜单; ●取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过帐户余额,操作后 帐户余额应相应减少。之后可返回主菜单; ●存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后 帐户余额应相应增加。之后可返回主菜单; ●转帐:先输入一个帐户号(已保存在帐户信息文件中),然后显示一部分用户名(如:张*山), 储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; ●退出:退出系统。 2.定义如下结构体类型: ●“日期”结构体Date:成员有:year(年)、month(月)、day(日); ●“帐户”结构体Account:成员有:no(帐户号)、name(姓名)、balance(余额) ●“存取款记录”结构体Record,:成员有:no(帐户号)、date(日期)、number(数量,可正可负, 正表示存款,负表示取款)
C语言课程设计A T M机模拟操作附源码 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】
C语言-ATM机模拟操作 程序实现功能点: a.查询:查询帐户的存款余额。按任意键返回主菜单; b.取款:输入100、500、1000、2000、5000、其它金额为取款金额,取 款金额不超过帐户余额,操作后帐户余额应相应减少,之后可返回主菜单; c.存款:输入100、500、1000、2000、5000、其它金额为存款金额,存 款金额不超过20000元,操作后帐户余额应相应增加。之后可返回主菜单; d.转帐:输入一个帐户号,程序判断与文件信息是否相符,储户确认无 误后,再输入100、500、1000、2000、5000、其它金额为转帐金额,转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; e.修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码 取代旧密码,并存放到帐户信息文件中。之后可返回主菜单; f.退出:退出系统; g.帮助:增加趣味性; h.存款时,可正可负,正表示存款,负表示取款; i.帐户信息存放在文件,储户存取款记录保存在中;(在目录下创建这
两个文件) j.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用; k.储户一天内输错密码的次数不能超过3次,否则无法进入系统; l.有效避免输入存款金额、取款金额为负数等异常情况的出现。 较为突出的功能是注册、登录时账号密码的核对验证;存款转出转入金额的核对。是否超过余额,是否不符合格式,是否为冲突操作。 (2)程序运行截图及说明(每图限50到100字); 进入程序,menu1可选择登录、注册功能。 选择登录,输入账号密码,通过输入内容与文件的匹配,判断是否成功登录。若登录失败,则重新选择。
程设计报告课程类别:本科 课程名称:程序设计基础(C语言) 课程代号:指导教师: 银行ATM自动取款机系统课程设计姓名:学号: 姓名:学号: 姓名:学号: 学院: 班级:
目录 1. 课程设计内容....................... 2. 课程设计要求....................... 3.可行性研究........................ 4.需求分析......................... 5. ...................................................................... 概要设计. 5.1 功能模块图 ..................... 5.2 功能模块描述 ..................... 5.3 数据结构 ...................... 6. ...................................................................... 详细设计. 6.1 功能流程图 ..................... 6.2 重点设计 ...................... 7. 测试与调试........................ 8. 总结. ....................................................... 8.1 心得体会 ....................... 8.2 不足与改进 ...................... 9. 参考文献. ................................................. 1. 课程设计内容
仲恺农业工程学院工程实训报告 ATM取款机 课程名称C语言程序设计工程实训 姓名林少烈 院(系)计算机科学与工程学院 专业班级计算机113班 学号201110214317 指导教师王成 仲恺农业工程学院教务处制
目录 1 需求分析 (1) 2 系统总框图和功能模块说明 (1) 2.1 系统总框图 (1) 2.2 功能模块说明 (1) 3 系统设计 (2) 3.1 主要结构体 (2) 3.2主要功能函数 (2) 3.3 关键函数的流程图 (3) 4 系统调试 (12) 5 总结 (25) 6 源程序清单 (28) 6.1头文件 (28) 6.2主程序 (29) 6.3 解除被冻结用户 (64) 6.4 用户注册 (66)
1 需求分析 所设计的ATM取款机应具备以下功能: ●插入银行卡(用账号输入的方式代替); ●密码的输入; ●用户信息查询; ●用户余额查询; ●取款; ●转账; ●修改密码; ●退卡。 2 系统总框图和功能模块说明 2.1 系统总框图 图1 系统总框图 2.2 功能模块说明 ?输入用户账号模块:在运行时,完成用户账号的输入(代替插卡);
?输入账号密码模块:①在输入账号之后,完成用户密码的输入;②在修改密码的过程中,完成用户输入旧密码的功能; ?信息读取功能模块:完成用户信息的读取; ?冻结账号功能模块:当输入密码3次错误时,冻结用户账号: ?查询用户信息模块:完成用户的信息查询(不包括余额查询); ?查询余额功能模块:完成用户余额的查询; ?取款功能模块:完成取款功能模块: ?转账功能模块:完成转职功能; ?修改密码功能模块:完成用户修改密码功能; ?退卡功能模块:完成退卡功能(即:退出程序功能)。 3 系统设计 3.1 主要结构体 用户账号、、密码、余额 struct User //用户数据 { char num[20]; //用户账号 char name[10]; // char password[7]; //密码 float balance; //余额 }; 3.2主要功能函数 void read_info(); //用户信息读取 void input_num(char * num); //输入账号
错误!未找到目录项。 C程序课程设计报告 题目车票管理系统 院别数学与计算机学院班级 姓名学号 指导教师邓永江 二○一五年六月
预习报告 一:设计题目 银行存取款管理设计 二:功能要求 ①能够添加和修改以及删除客户文件。(在客户文件中,每个客户是一条记录,包括编号、客户姓名、支取密码、客户地址、客户电话、账户总金额)。 ②能够输入和查询客户存款取款记录。(在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取数目、经办人。类别分为取款和存款两种)。 ③能够给程序提供运行提示。 三:设计要求 ①、用C 语言实现系统; ②、函数功能要划分好(结构化程序设计); ③、界面友好(良好的人机交互),加必要的注释; ④、要提供程序测试方案,程序一定要经得起测试,宁可功能少一些,也要能 运行起来,不能运行的程序是没有价值的。 四:设计目的 ①、通过这次课程设计,使我们更加深入地理解和掌握C 语言基本概念,切身体会用结构化程序设计的工程思想,感受C 语言的魅力。 ②、通过这次课程设计,培养我们独立思考、勇于探索、积极创新、严谨求实、有过必改的工作态度以及较熟的上级操作能力,同时加强我们团结友爱,协作攻关的团队合作意识。 五:设计框架图
void main():在里面写了“功能选择”的SWITCH函数; void kehu();客户资料添加与操作主菜单;void kehu1(struct cou p[],char *re,long *h); 客户资料查询函数; void kehu2(struct cou *p,char *re,long h);客户资料添加函数; void kehu3(struct cou *p,char *re,long h); 客户资料修改函数; void kehu4(struct cou *p,char *re,long h); 客户资料清楚函数; void kehup(struct cou *p,char *re,long *h); 客户资料打印函数; void cunq1(); 存取款办理选择主菜单; void cunq11(struct cou *p,char *re,long h);客户存款资料的键入; void cunq12(struct cou *p,char *re,long h); 客户取款资料的键入; void cunq2();存取款选择查询主菜单; void cunq211(struct cou p[],char *re,long *h);把顾客存款资料从文件读到缓冲 区; void cunq212(struct cou *p,char *re,long *h);打印存款资料; void cunq221(struct cou p[],char *re,long *h);把顾客取款资料从文件读到缓冲 区; void cunq222(struct cou *p,char *re,long *h);打印取款资料; void help(); 使用说明模块。 ㈡变量 ①全局的结构体型数组w(用来存放200多个结构体变量): extern struct cou { long b; char x[20]; long m;
直接运行没有错误的代码c----- 本银行卡管理系统有五个账号和其对应的密码: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 账号: 1:10001 2:10002 3:10003 4:10004 5:10005 对应账号的密码和其账号相同 代码如下: #include
C语言程序设计报告(模拟ATM 取款机)
仲恺农业工程学院工程实训报告 ATM取款机 课程名称C语言程序设计工程实训 姓名林少烈 院(系)计算机科学与工程学院 专业班级计算机113班 学号201110214317 指导教师王成 仲恺农业工程学院教务处制
目录 1 需求分析 (1) 2 系统总框图和功能模块说明 (1) 2.1 系统总框图 (1) 2.2 功能模块说明 (1) 3 系统设计 (2) 3.1 主要结构体 (2) 3.2主要功能函数 (3) 3.3 关键函数的流程图 (3) 4 系统调试 (11) 5 总结 (21) 6 源程序清单 (23) 6.1头文件 (23) 6.2主程序 (23) 6.3 解除被冻结用户 (40) 6.4 用户注册 (41)
1 需求分析 所设计的ATM取款机应具备以下功能: ●插入银行卡(用账号输入的方式代替); ●密码的输入; ●用户信息查询; ●用户余额查询; ●取款; ●转账; ●修改密码; ●退卡。 2 系统总框图和功能模块说明 2.1 系统总框图 图1 系统总框图 2.2 功能模块说明 输入用户账号模块:在运行时,完成用户账号的
输入(代替插卡); 输入账号密码模块:①在输入账号之后,完成用户密码的输入;②在修改密码的过程中,完成用户输入旧密码的功能; 信息读取功能模块:完成用户信息的读取; 冻结账号功能模块:当输入密码3次错误时,冻结用户账号: 查询用户信息模块:完成用户的信息查询(不包括余额查询); 查询余额功能模块:完成用户余额的查询; 取款功能模块:完成取款功能模块: 转账功能模块:完成转职功能; 修改密码功能模块:完成用户修改密码功能; 退卡功能模块:完成退卡功能(即:退出程序功能)。 3 系统设计 3.1 主要结构体 用户账号、姓名、密码、余额 struct User //用户数据 { char num[20]; //用户账号 char name[10]; //姓名 char password[7]; //密码
C语言模拟A T M机 The latest revision on November 22, 2020
一、实验目的 通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。 二、实验要求 要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。 1.程序具有以下功能: 1)登录系统: 输入卡号(16位)、密码(6位),只有卡号、密码同时正确(帐户信息存放在文件中)才能进入系统; 2)操作功能: 查询:查询帐户的存款余额。按任意键返回主菜单; 修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。之后可返回主菜单; 取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; 存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后帐户余额应相应增加。之后可返回主菜单; 转帐:先输入一个帐户号(已保存在帐户信息文件中),然后显示一部分用户名(如:张*山),储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; 退出:退出系统。 2.定义如下结构体类型: “日期”结构体Date:成员有:year(年)、month(月)、day(日); “帐户”结构体Account:成员有:no(帐户号)、name(姓名)、balance(余额) “存取款记录”结构体Record,:成员有:no(帐户号)、date(日期)、number(数量,可正可负,正表示存款,负表示取款)
#include
C语言?ATM机模拟操作 程序实现功能点: a.査询:查询帐户的存款余额。按任意键返回主菜单; b.取款:输入100> 500、1000、2000、5000、其它金额为取款金额,取款 金额不超过帐户余额,操作后帐户余额应相应减少,之后可返回主菜单; C.存款:输入100、500、1000、2000、5000、其它金额为存款金额,存款 金额不超过20000元,操作后帐户余额应相应增加。之后可返回主菜单; d.转帐:输入一个帐户号,程序判断与文件信息是否相符,储户确认无 误后,再输入100、500、1000、2000、5000、其它金额为转帐金额, 转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; e.修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码 取代旧密码,并存放到帐户信息文件中。之后可返回主菜单; f.退出:退出系统; g.帮助:增加趣味性; h.存款时,可正可负,正表示存款,负表示取款; i.帐户信息存放在文件,储户存取款记录保存在中;(在目录下创建这两
个文件) j.采用模块化程序设计方法来实现,即mainO显示主菜单、调用相关函数实现相应功能,起主控作用; k.储户一天内输错密码的次数不能超过3次,否则无法进入系统; l.有效避免输入存款金额、取款金额为负数等异常情况的出现。 较为突出的功能是注册、登录时账号密码的核对验证;存款转出转入金额的核对。是否超过余额,是否不符合格式,是否为冲突操作。 (2)程序运行截图及说明(每图限50到100字); 进入程序,menul可选择登录、注册功能。 选择登录,输入账号密码,通过输入内容与文件的匹配,判断是否成功登录。若登录失败,则重新选择。
令狐采学创作 C语言程序实践 令狐采学 实验报告 令狐采学创作
一、实验目的 1.函数的调用 2.结构体的使用 3.文件的应用:打开、关闭、输入、输出等 4.宏定义 二、实验内容与实验步骤 实验内容、原理分析 1.给出数据结构或函数定义 结构体: struct clients { longintcard_number,card_password; char name[20]; float money; }yonghu[3]; card_number:银行卡号 card_password:密码 name:用户名 money:卡内金额 自定义函数: voidfuction(float,int); 用于登陆后的操作 2.用流程图表示出来程序设计的思想
#include
int j,number,password,times1=3,times2=3; printf(" 欢迎使用中国建设银行自动取款机!\n"); fp = fopen("clients.txt","a+"); if(getw(fp)==EOF) { printf("用户文件未设置!\n"); for(i=0;i 分析: 1.识别银行卡。 2.输入密码,正确继续,分支为密码不正确,则返回! 3.选择:账户查询、取钱、转账。查询时,需要调用一个子函数,返回一个钱数常量 取钱时,输入金额,金额要大于0,输入以后调用查询子函数,如果输入金额大于查询返回的数,则报错;如果正常,则修改数据库的钱数。 程序: #include printf("1 查询余额\n"); printf("2 存款\n"); printf("3 取款\n"); printf("4 退出\n"); switch(getch()) { case '1':Query(&a);break; case '2':Deposite(&a);break; case '3':WithDraw(&a);break; default: system("cls");return; } } void Query(float *p) { system("cls"); printf("此账户中钱数为:¥%-.2f",*p); printf("请按任意键继续..."); switch(getch()) { case'0':system("cls");break; default:MainMenu();break; } getch(); } void Deposite(float *p) { float mon; printf("请输入您要存入的钱数:¥"); scanf("%f",&mon); *p += mon; printf("存款成功,请按任意键继续..."); switch(getch()) { case'0':system("cls");break; default:MainMenu();break; } } void WithDraw(float *p) { float mon; C语言-ATM机模拟操作 程序实现功能点: a.查询:查询帐户的存款余额。按任意键返回主菜单; b.取款:输入100、500、1000、2000、5000、其它金额为取款金额,取款金额不超过 帐户余额,操作后帐户余额应相应减少,之后可返回主菜单; c.存款:输入100、500、1000、2000、5000、其它金额为存款金额,存款金额不超过 20000元,操作后帐户余额应相应增加。之后可返回主菜单; d.转帐:输入一个帐户号,程序判断与文件信息是否相符,储户确认无误后,再输入10 0、500、1000、2000、5000、其它金额为转帐金额,转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单; e.修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放 到帐户信息文件中。之后可返回主菜单; f.退出:退出系统; g.帮助:增加趣味性; h.存款时,可正可负,正表示存款,负表示取款; i.帐户信息存放在accounts.txt文件,储户存取款记录保存在records.txt中;(在目录下 创建这两个文件) j.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用; k.储户一天内输错密码的次数不能超过3次,否则无法进入系统; l.有效避免输入存款金额、取款金额为负数等异常情况的出现。 较为突出的功能是注册、登录时账号密码的核对验证;存款转出转入金额的核对。是否超过余额,是否不符合格式,是否为冲突操作。 (2)程序运行截图及说明(每图限50到100字); ●进入程序,menu1可选择登录、注册功能。 ●选择登录,输入账号密码,通过输入内容与文件的匹配,判断是否 成功登录。若登录失败,则重新选择。 ●选择注册,输入账号密码,写入文件中。 ●进入menu2,有五大功能选择,输入对应的序列号进入。用C语言模拟ATM取款机
C语言课程设计ATM机模拟操作附源码