c语言Atm的简单实现Word版
C语言 ATM 程序设计
C语言 ATM 程序设计概述:本文将详细介绍如何使用C语言设计一个简单的ATM(自动取款机)程序。
ATM程序的主要功能包括用户登录、查询余额、取款、存款和退出等。
1. 用户登录:用户需要输入正确的账户号码和密码才干成功登录。
账户号码和密码可以存储在一个预定义的用户数据库中。
用户输入账户号码和密码后,程序将验证其有效性并赋予相应的登录状态。
2. 查询余额:用户成功登录后,可以选择查询余额。
程序将从用户数据库中获取用户的余额信息并显示在屏幕上。
3. 取款:用户成功登录后,可以选择取款。
用户需要输入取款金额,程序将验证用户账户余额是否足够。
如果余额足够,则扣除相应金额并更新用户数据库中的余额信息;如果余额不足,则提示用户余额不足。
4. 存款:用户成功登录后,可以选择存款。
用户需要输入存款金额,程序将将其加到用户账户的余额中,并更新用户数据库中的余额信息。
5. 退出:用户可以选择退出程序。
退出前,程序将提示用户是否确认退出,并根据用户的选择执行相应的操作。
6. 错误处理:程序需要对用户的输入进行错误处理。
例如,当用户输入错误的账户号码或者密码时,程序应该赋予相应的错误提示;当用户输入非法金额时,程序应该赋予相应的错误提示。
7. 数据存储:程序需要使用文件或者数据库来存储用户的账户信息和余额信息。
可以使用文本文件、二进制文件或者关系型数据库等。
8. 用户界面:程序需要提供一个友好的用户界面,以便用户能够轻松地进行操作。
可以使用控制台界面或者图形界面,根据需要选择合适的界面设计。
9. 安全性:程序需要确保用户的账户信息和余额信息的安全性。
可以使用加密算法来加密用户的密码,在存储和传输过程中保护用户的隐私。
10. 测试和调试:在完成程序的编写后,需要进行充分的测试和调试,以确保程序的稳定性和正确性。
可以编写测试用例,并对程序进行单元测试和集成测试。
总结:本文详细介绍了使用C语言设计一个简单的ATM程序的要求和功能。
c语言Atm的简单实现
信息科学与工程学院《数据结构》课程设计报告课程设计名称: ATM得设计与实现专业班级:学生姓名:学号: 2指导教师:课程设计时间: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开发工具与编程语言 (6)5详细设计 (6)5、1主函数 (7)5、2 录入函数 (8)5、3加载与存储函数 (8)5、4 输出流水账函数 (9)5、5 查瞧ATM使用情况函数 (9)6程序编码 (10)7运行结果 (12)8心得体会 (14)9参考文献 (14)1需求分析ATM自助机——便于储户存钱、取钱。
按功能分为两大系统:个人用户系统与银行后台系统;个人用户系统————登录(输入正确得账号或密码才能进入)、存款、取款、查瞧流水账(查瞧用户最近存取款情况)、排序(此为超级用户功能,可以查瞧所有人得余额)、修改密码(修改个人登录密码);银行后台系统————atm使用情况(便于银行人员管理atm机)、录入信息(包括录入用户及其银行卡号信息与录入atm 信息)、恢复限额(每天6点恢复所有人得取款上限)。
1、1存款输入金额,存入ATM,当前AMT以及自己得余额会增加并且自动生成流水账。
1、2取款输入取款金额,判断它就是否小于ATM总金额并且小于当天得限额,当前得ATM金额减少,自己得余额与限额也会减少。
1、3查瞧流水账输出自己近段时间内得所有操作,发生额,以及时间。
1、4排序此为超级用户功能,实现以余额对所有用户排序并且输出一些信息。
1、5修改密码修改用户登录密码。
1、6查瞧ATM使用情况查瞧每一台ATM得使用情况,输出存取款发生额及其次数。
(经典版)C语言版ATM银行取款机系统完整源代码程序设计基础实训II文档.doc
2012年6月项目实训任务书课程名称:程序设计基础实训II课程编码:JX课程类别:专业基础必修课学分数:2学时数:32开课学期:2实训题目:ATM存取款系统的改进与完善一、已知技术参数和设计要求:银行ATM存取款系统业务描述如下:银行ATM存取款系统能为用户提供存款、取款、查询、转账和修改密码的功能。
为了模拟真实的ATM业务环境,本系统必须实现存款、取款、查询、转账、修改密码以及开户的功能。
用户通过开户业务在本系统开立银行账户,之后可以通过该银行账户登陆ATM系统,在系统中实现存款、取款、查询账户信息、修改密码的操作。
本系统各个业务有如下注意点:(1)登陆系统用户登陆之前,必须在登陆界面输入其银行账户,通过其正确输入的银行账户登陆系统。
(2)开户业务要使用本系统必须首先执行开户业务开立新的银行账户,并且将此新开的银行存储于文件当中。
同时,系统以身份证号码作为开户的充分条件,即一个身份证号码只能开立一次银行账户。
(3)存款业务客户登陆系统后,选择存款业务,即可以将输入的存款金额存入相应的账户。
(4)取款业务客户登陆系统后,选择取款业务,即可以将输入的取款金额从相应的银行账户取出,但是取款金额必须大于目前的账户余额。
(5)查询业务客户登陆系统后,可以选择查询业务,查询账户余额。
(6)转账业务客户登陆系统后,可以选择转账业务,进行转账。
注意的是转账的目的账户必须是本系统已经存在的银行账户。
(7)修改密码客户登陆系统后,可以选择修改密码业务,进行密码修改。
二、各阶段具体要求:1、系统总体设计阶段(1)根据需求分析划分功能模块(2)分析并设计各个功能模块之间的关系(3)对于各个功能模块,设计相应的数据结构(必须使用链表完成全部功能)(4)设计相应的算法(必须包括排序和检索功能,且基于链表进行排序和检索)2、详细设计阶段(1)对于每个功能模块,应划分成操作层和数据层(2)对于每个操作层,应尽量考虑用户操作的简单,便捷(3)对于每个数据层,必须使用链表进行管理(4)在用链表进行管理时,必须用到链表检索和排序(5)对于数据层的操作完的数据必须保存到文件中(包括文件读、写操作)3、编码实现阶段(1)完成代码编写(2)要求代码编写规范(不得使用全局变量、所有功能模块必须使用函数封装主函数main()的行数不得超过代码总长度的25%)(3)代码必须有相应的注释(注释行数不得少于代码的10%,函数功能、变量名、算法、重要的循环、分支都必须用注释说明)4、系统测试阶段(1)完成功能调试(2)要求完成必要的测试工作5、交付实施阶段(1)提交可正常执行的系统,程序代码(2)撰写项目实训报告书(3)要求按照文档书写规范,严格地书写文档(4)注意:不允许使用代码、图片和表格填充报告空间。
用c语言编写的一个ATM取款机程序
⽤c语⾔编写的⼀个ATM取款机程序学了⼀个多星期的c语⾔了,⽼师布置来了作业,⽤C编写个ATM机的模拟程序,客户界⾯有,取款,2存款,3转账,4退出。
并且要求输⼊错误后,有三次机会重输,定义输⼊密码hellowold,⽤switch分⽀。
#include<stdio.h>#include<string.h>#define key "hellowold"//定义密码#define zhanghu "123456789"#define line "==================\n"int num;//选择类型char arr[20];//定义数组char password[20];//定义数组int money;//取款⾦额int i=0;int main(){printf(line);printf("\t1取款\n");printf("\t2存款\n");printf("\t3转账\n");printf("\t4退出\n");printf(line);printf("请选择操作类型: \n");scanf("%d",&num);switch(num){case1:{ do{printf("请输⼊密码:\n");scanf("%s",&password);if(strcmp(key,password)==0){printf("请输⼊取款⾦额:\n");scanf("%d",&money);printf("请取⾛你的%d⽑爷爷",money);break;}else{printf("密码输⼊错误");}i++;}while((strcmp(key,password)!=0)&&i<=2);}}第⼆步存款,定义账号#include<stdio.h>#include<string.h>#define key "hellowold"//定义密码#define zhanghu "#define other "ni de mao ye ye"#define line "==================\n"int num;//选择类型char arr[20];//定义数组char password[20];//定义数组char others[20];int money;//取款⾦额int num2;//存款⾦额int i=0;int main(){printf(line);printf("\t1取款\n");printf("\t2存款\n");printf("\t3转账\n");printf("\t4退出\n");printf(line);printf("请选择操作类型: \n");scanf("%d",&num);switch(num){case1:{ do{printf("请输⼊密码:\n");scanf("%s",&password);if(strcmp(key,password)==0){printf("请输⼊取款⾦额:\n");scanf("%d",&money);printf("请取⾛你的%d⽑爷爷",money);break;}else{printf("密码输⼊错误");}i++;}while((strcmp(key,password)!=0)&&i<=2);break;}今天先变到这⾥吧,作业还多着了,排版不是很好看,就将就这看吧。
C语言模拟ATM机的编写程序
C语言模拟ATM机的编写程序#include <stdio.h>void main(){long int a,b,c,d,e,f,g,k,l,m,n,o,p,h;n=0;h=10000;k=123456;loop0: printf("\t\t\t欢迎使用中国邮政ATM取款机!\n\n");printf("请插入你的银行卡,并输入你的密码,三次密码输入错误,将终止程序:\n");scanf("%ld",&l);if(k==l){loop1: printf("请输入你选择的操作类型:\n");printf("请输入0-4进行选择:\n");printf("1:<转账>\t2:<查询>\t3:<取款>\t4:<修改密码>\t0:<取卡>\n");scanf("%ld",&a);switch(a){case 1: printf("请输入转账账号:\n");scanf("%d",&o);printf("请输入你需要转账的金额:\n");scanf("%d",&p);printf("请输入你选择的操作类型:\n");printf("请输入0或1进行选择:\n");printf("1:<确认>\t0:<返回>\n");h=10000-p;scanf("%ld",&b);switch(b){case 1:printf("\n转账%d元人民币成功!\n\n",p);goto loop1;break;case 0:goto loop1;break;default :printf("\n无此操作项!\n\n");goto loop1;}break;loop4:case 2:printf("请输入你选择的操作类型:\n");printf("请输入0-2进行选择:\n");printf("1:<查询余额>\t2:<查询明细>\t0:<返回>\n");scanf("%ld",&c);switch(c){case 1:printf("\n你的余额为:%5d\n\n",h);goto loop1;break;case 2:printf("\n你的账单为:******。
c语言atm机编程代码
c语言atm机编程代码下面是一个简单的C语言ATM机编程代码示例:#include <stdio.h>// ATM机账户结构体typedef struct {int account_number;float balance;} Account;// 初始化账户信息void init_account(Account *account, int acc_no, float bal) { account->account_number = acc_no;account->balance = bal;}// 存款void deposit(Account *account, float amount) {account->balance += amount;}// 取款void withdraw(Account *account, float amount) {if (account->balance >= amount) {account->balance -= amount;} else {printf("余额不足!\n");}}// 查询余额void check_balance(Account *account) {printf("当前余额:%.2f\n", account->balance); }// 主函数int main() {Account my_account;int choice;float amount;// 初始化账户信息init_account(&my_account, 123456789, 5000.0);// ATM机操作菜单printf("欢迎使用ATM机!\n");printf("请选择操作:\n");printf("1. 存款\n");printf("2. 取款\n");printf("3. 查询余额\n");printf("0. 退出\n");do {printf("请输入操作代码:");scanf("%d", &choice);switch (choice) {case 1:printf("请输入存款金额:");scanf("%f", &amount);deposit(&my_account, amount); break;case 2:printf("请输入取款金额:");scanf("%f", &amount);withdraw(&my_account, amount); break;case 3:check_balance(&my_account);break;case 0:printf("退出程序!\n");break;default:printf("无效的操作!\n");}} while (choice != 0);return 0;}。
C语言ATM机代码,简单版。
C语⾔ATM机代码,简单版。
#include <stdio.h>void main(){int i,j;int code=0,flag=0;int choice1=0,choice2=0,choice3=0;int RMB=100000,WB=100000;int cash1=0,cash2=0;char instruct='n';printf("************************************************************\n");printf("* *\n");printf("* *\n");printf("* 欢迎使⽤怪精 ATM取款机 *\n");printf("* *\n");printf("* 监制: rain version number:1.0.1 *\n");printf("* *\n"); printf("* *\n"); printf("************************************************************\n");printf("请键⼊您的密码:\n"); /*密码为9527*/for(i=0;i<3;i++){scanf("%d",&code);system("cls");if(code==9527){break;}if(code!=9527){printf("密码有误!请重新输⼊:\n");flag+=1;}}if(flag==3){printf("密码错误超限,请回去⾯壁思过,再见!");return;}while(instruct=='N'|| instruct=='n' ){if(code==9527){printf("请选择您所需服务!\n");printf("1.查询余额 2.取款 3.退出");scanf("%d",&choice1);system("cls");switch(choice1){case 1:printf("1.⼈民币 2.外汇");scanf("%d",&choice2);system("cls");switch(choice2){case 1:printf("您的⼈民币账户余额:¥%d\n",RMB);break;case 2:printf("您的外币账户余额:$%d\n",WB);break;}break;case 2:printf("1.⼈民币 2.外币");scanf("%d",&choice3);system("cls");switch(choice3){case 1:printf("请输⼊取款⾦额:\n");scanf("%d",&cash1);RMB=RMB-cash1;printf("您的账户余额为:¥%d\n",RMB); break;case 2:printf("请输⼊取款⾦额:\n");scanf("%d",&cash2);WB=WB-cash2;printf("您的账户余额为:$%d\n",WB); break;}break;case 3:break;}printf("是否退出程序<y表⽰是,n表⽰否>:"); scanf("%s",&instruct);}}}。
c语言银行自动存取款机模拟
C语言银行自动存取款机模拟介绍本文档将介绍如何使用C语言编写一个简单的银行自动存取款机模拟程序。
该程序可以模拟银行客户进行存款和取款操作,并实时更新账户余额。
功能此银行自动存取款机模拟程序具有以下功能:•登录功能:用户可以输入账号和密码进行登录。
•存款功能:用户可以输入存款金额进行存款,存款成功后会更新账户余额。
•取款功能:用户可以输入取款金额进行取款,取款成功后会更新账户余额。
•查询余额功能:用户可以查看账户余额。
•退出功能:用户可以选择退出程序。
程序设计数据结构在程序中,需要定义一个结构体来表示银行客户的账户信息。
每个账户包含账号、密码和余额:struct Account {int accountNumber;char password[20];double balance;};登录功能首先,用户需要输入账号和密码进行登录。
可以定义一个函数来实现登录功能:int login(struct Account *accounts, int numAccounts, int accountNumber, char *password) {for (int i = 0; i < numAccounts; i++) {if (accounts[i].accountNumber == accountNumber && strcmp(accounts[i].password, password) == 0) {return i; // 返回账号在数组中的索引}}return -1; // 登录失败,返回-1}存款和取款功能存款和取款功能可以分别定义两个函数来实现。
存款函数会增加账户余额,取款函数会减少账户余额。
```c void deposit(struct Account *account, double amount) { account->balance += amount; }void withdraw(struct Account *account, double amount) { if (account->balance >= amount) { account->balance -= amount; printf(。
c语言atm机的编程
C语言ATM机的编程1. 简介ATM(Automated Teller Machine)机是一种自动提款机,它能够为用户提供多种服务,如取款、存款、查询余额、转账等。
本文将介绍如何使用C语言编写一个简单的ATM机程序。
2. 功能需求我们的ATM机程序需要实现以下功能: 1. 用户登录:用户可以输入正确的账号和密码进行登录。
2. 查询余额:用户登录成功后可以查询账户余额。
3. 存款:用户登录成功后可以存入指定金额到账户中。
4. 取款:用户登录成功后可以从账户中取出指定金额。
5. 转账:用户登录成功后可以将指定金额转入其他账户。
3. 程序设计我们将使用结构体来表示用户信息及其相关操作。
首先定义一个结构体User,其中包含用户名、密码和余额三个字段:typedef struct {char username[20];char password[20];double balance;} User;接下来,我们需要实现几个函数来完成不同的操作。
首先是登录函数login():int login(User* users, int numUsers) {char username[20];char password[20];printf("请输入用户名: ");scanf("%s", username);printf("请输入密码: ");scanf("%s", password);for (int i = 0; i < numUsers; i++) {if (strcmp(username, users[i].username) == 0 && strcmp(password, users[i].password) == 0) {printf("登录成功!\n");return i; // 返回用户索引}}printf("用户名或密码错误!\n");return -1; // 登录失败}登录函数会提示用户输入用户名和密码,并与已有的用户信息进行匹配。
C语言实现ATM系统程序的完整代码
C语⾔实现ATM系统程序的完整代码实现效果如图:代码如下:#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>//开户信息typedef struct _Person{char name[20];char account[20];char password[7];float money;}Person;//结点typedef struct _Node{Person P; //客户struct _Node* next;}Node;Node* HeadNode = NULL;//链表头/*----------------函数--------------------*/void Login();void Menu();void Register();void LoginMenu(Node* pNode);void FindAccount(Node* pNode);void DrawMoney(Node* pNode);void Deposit(Node* pNode);void Transfer(Node* pNode);void LoginMenu(Node* pNode);//主菜单void Menu(){printf("\n\t\t\t欢迎进⼊ATM银⾏管理系统\n");printf("\t\t 1. 注册\n");printf("\t\t 2. 登录\n");printf("\t\t 3. 系统帮助\n");printf("\t\t 4. 查询账号\n");printf("\t\t 5. 退出\n");}//注册void Register(){Node* NewNode = (Node*)malloc(sizeof(Node));NewNode->next = NULL;NewNode->P.money = 0;printf("请输⼊您的名字:");scanf("%s", NewNode->);printf("请输⼊您的密码:");scanf("%s", NewNode->P.password);char Password[7];printf("请再次输⼊您的密码:");scanf("%s", Password);for (int i = 1; i < 4; i++){if (strcmp(NewNode->P.password, Password) != 0){printf("您输⼊的密码有误,还有%d次机会.\n", 3 - i);printf("请再次输⼊您的密码:");scanf("%s", Password);}else{srand((unsigned int)time(NULL));sprintf(NewNode->P.account, "%d%d%d%d%d", rand() % 9000 + 1000, rand() % 9000 + 1000, rand() % 9000 + 1000, rand() % 9000 + 1000, rand() % 900 + 100);//头插法if (HeadNode == NULL){HeadNode = NewNode;}else{NewNode->next = HeadNode;HeadNode = NewNode;}printf("\n\n\n\n\t\t\t\t恭喜你已经成功注册账户,以下是您的账户信息.\n");printf("\t\t\t\t姓名:%s\n", NewNode->);printf("\t\t\t\t账户:%s\n", NewNode->P.account);printf("\t\t\t\t余额:%.2f\n", NewNode->P.money);getch();return 1;}}printf("您的账号已被锁定,请稍后再试.");return 1;}//取款void DrawMoney(Node* pNode){Node* mNode = pNode;float Money = 0;printf("欢迎进⼊ATM银⾏管理系统\n");printf("请选择你取款⾦额\n");printf("100\t\t2000\n");printf("500\t\t5000\n");printf("10000\t\t其他⾦额\n");scanf("%f", &Money);mNode->P.money = mNode->P.money - Money;return mNode;}//存款void Deposit(Node* pNode){Node* mNode = pNode;float Money = 0;printf("请存取您的⾦额:");scanf("%f", &Money);mNode->P.money = mNode->P.money + Money;return mNode;}//转账void Transfer(Node* pNode){Node* TNode = HeadNode;char Account[20];printf("请输⼊转账的号码:");scanf("%s", Account);while (TNode != NULL){if (strcmp(TNode->P.account, Account) != 0){TNode = TNode->next;continue;}else{float Money = 0;printf("请输⼊您要转账的⾦额:");printf("100\t\t2000\n");printf("500\t\t5000\n");printf("10000\t\t其他⾦额\n");scanf("%f", &Money);TNode->P.money = TNode->P.money + Money;pNode->P.money = pNode->P.money - Money;return 1;}}return 1;}//登录菜单void LoginMenu(Node * pNode){while (1){printf("欢迎进⼊ATM银⾏管理系统\n");printf("请选择以下服务:\n");printf("1.取款\t\t2.查询\n");printf("3.存款\t\t4.转账\n");printf("5.修改密码\t6.退出\n");char ch = getch();switch (ch){case '1':DrawMoney(pNode);break;case '2':printf("您的账户余额为:%.2f", pNode->P.money);getch();break;case '3':Deposit(pNode);break;case '4':Transfer(pNode);break;case '5':break;case '6':return 0;break;default:break;}system("cls");}}//登录void Login(){system("cls");Node* pNode = HeadNode;char P_account[20];char P_password[7];printf("请输⼊您的卡号:");scanf("%s", P_account);while (pNode != NULL){if (strcmp(P_account,pNode->P.account) != 0){pNode = pNode->next;continue;}else{for (int i = 1; i < 4; i++){printf("请输⼊您的密码:");scanf("%s", P_password);if (strcmp(P_password, pNode->P.password) != 0){printf("您输⼊的密码有误,还有%d次机会.\n", 3 - i);}else{system("cls");LoginMenu(pNode);return 1;}}printf("\n对不起,您输⼊的密码有误,请重新登录.\n");system("pause");return 1;}}return 1;}//系统帮助信息void Help(){system("cls");printf( "\n\n\n\n\t——————————-----—---——ATM系统帮助----------------------------------------\n""\t1、初始界⾯:客户插卡前或者退卡后ATM显⽰的界⾯,提⽰客户插卡操作及银⾏⼴告.\n""\t2、⾝份认证:需要客户插⼊银⾏卡后输⼊密码来验证所有权.\n""\t3、吞卡:客服若连续输⼊密码3次错误后,则将卡吞⼊ATM内.\n""\t4、账户:账户由银⾏卡的卡号、密码、银⾏系统⽤户信息组成.\n""\t5、业务操作:由查询余额、取款、存款、转账、取卡等事项组成.\n""\t6、查询余额:显⽰该账户中剩余⾦额.\n""\t7、取款:根据客户输⼊的⾦额从账户中扣除相应的⾦额,客户可以提取相应数额的现⾦.\n""\t8、存款:客户存⼊现⾦,账户根据现⾦数额增加剩余⾦额.\n""\t9、转账:客户输⼊另外⼀个账户号码和⾦额,从本账户的余额中减去该⾦额,增加到那个账号中.\n" "\t10、打印凭条:凭条由⽇期,银⾏卡的卡号,交易流⽔号组成.\n""\t11、取卡:客户取回银⾏卡.\n""\t————————————————-------------------------------------------------------\n");getch();return 1;}//查询账号void FindAccount(Node* pNode){Node* FNode = pNode;char AccountName[7];printf("请输⼊账号姓名:");scanf("%s", AccountName);while (FNode != NULL){if (strcmp(AccountName, FNode->) != 0){FNode = FNode->next;continue;}else{printf("该姓名的账户为:%s", FNode->P.account);return 1;}}printf("抱歉!该姓名未注册账号.");return 1;}int main(){system("color b0");while (1){system("cls");Menu();char ch = _getch();switch (ch){case '1':Register();break;case '2':Login();break;case '3':Help();break;case '4':FindAccount(HeadNode);getch();break;case '5':exit(0);default:break;}}return 0;}到此这篇关于C语⾔实现ATM系统程序的完整代码的⽂章就介绍到这了,更多相关c语⾔ATM系统程序内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
C语言实现ATM机存取款系统
C语⾔实现ATM机存取款系统本⽂实例为⼤家分享了C语⾔实现ATM机存取款系统的具体代码,供⼤家参考,具体内容如下利⽤结构体和构造函数并且采⽤输⼊输出⽂件实现ATM机系统。
主要功能有:利⽤三种⽅法查询、开户、登陆、菜单、取款、修改密码、存款、转账、创建个⼈信息、输出、删除、增加、退出。
是⼀个功能齐全,完备的ATM机系统。
#include<stdio.h>#include<string.h>#include<stdlib.h>struct per //定义结构体{char name[20];char ID[20];int money;char mima[6];struct per * next;};typedef struct person //定义另⼀结构体{struct per kehu;struct person *next;}L;void chaxun(struct per *head); //各个函数的声明void kaihu(struct per *head);void denglu(struct per *head);void caidan(struct per *head);void qukuan(struct per *head);void xgmm(struct per *head);void cunkuan(struct per *head);void zhuanzhang(struct per *head);void chuangjian(struct person **Phead);void shuchu(struct person *Phead);void shanchu(struct person **Phead);void zengjia(struct person **Phead);void chaxun1(struct person *Phead);void chaxun2(struct person *Phead);void chaxun3(struct person *Phead);void tuichu();void menu();/*主函数*///void main(){char x;char choose; //choose为定义输⼊选择的变量int flag=1;struct person *Phead=NULL; //Phead为定义⼆层头指针struct per *head=NULL; //head为定义⼀层头指针printf("*****************************\n");printf("**欢迎使⽤ATM⾃动取款机系统**\n");printf("*****************************\n");printf("——————————————\n");printf("| 1 开户 |\n");printf("——————————————\n");printf("| 2 登陆 |\n");printf("——————————————\n");system("cls");switch(x){case '1':system("cls");kaihu(head); //调⽤开户函数break;case '2':system("cls");denglu(head); //调⽤登陆函数break;case '3':system("cls");menu(); //调⽤后台菜单函数break;}while(flag){system("cls");menu(); //调⽤后台菜单函数choose=getchar();switch(choose){case '1':chuangjian(&Phead);shuchu(Phead); //调⽤后台输出函数system("pause");system("cls");break;case '2':chaxun1(Phead); //调⽤后台卡号查询函数system("pause");system("cls");break;case '3':chaxun2(Phead); //调⽤后台姓名查询函数system("pause");system("cls");break;case '4':chaxun3(Phead); //调⽤后台余额查询函数system("pause");system("cls");break;case '5':shanchu(&Phead); //调⽤后台删除⽤户函数system("pause");system("cls");break;case '6':zengjia(&Phead); //调⽤后台增加⽤户函数system("pause");system("cls");break;case '7':shuchu(Phead); //调⽤后台输出函数函数system("pause");system("cls");break;case '8':shuchu(Phead);system("pause");system("cls");break;case '0':flag=0;printf("The end.\n");break;}}}/*开户函数*/void kaihu(struct per *head){head=NULL;FILE *fp; //定义⽂件指针struct per *p1=NULL,*p2=NULL; //p1,p2为定义链表指针 p1=(struct per*)malloc(sizeof(struct per)); //开辟内存单元scanf("%s",p1->mima);p1->money=0;p1->next=NULL;printf("您的个⼈信息为");printf("姓名:%s \n卡号:%s \n余额:%4d\n",p1->name,p1->ID,p1->money); if(NULL==head) //为新⽤户开辟内存单元{head=(struct per *)malloc(sizeof(struct per));head->next=p1; //进⾏头插法,将其作为第⼀个节点}else //为新增客户开辟内存单元{for(p2=head;p2->next!=NULL;p2=p2->next); //进⾏尾插p2->next=p1;}if((fp=fopen("save.txt","ab+"))==NULL) //打开⽂件{printf("cannot poen file\n");return;}if(fwrite(p1,sizeof(struct per),1,fp)!=1) //将链表信息写⼊⽂件中printf("file write error\n");fclose(fp);printf("\n");printf("恭喜您开户成功,请登录\n");system("pause");system("cls");denglu(head);}//登陆函数/void denglu(struct per *head){char d[20];char mima[20];int i,j;FILE *fp; //定义⽂件指针struct per *p,*q=NULL;if((fp=fopen("save.txt","rb+"))==NULL) //打开⼀个⼆进制⽂件,为读⽅式{printf("不能打开⽂件\n"); //如不能打开,则结束程序}p=(struct per*)malloc(sizeof(struct per)); //申请空间head=p;while(!feof(fp)) //循环读数据直到⽂件尾结束{if(1!=fread(p,sizeof(struct per),1,fp))break; //如果没读到数据,跳出循环p->next=(struct per *)malloc(sizeof(struct per)); //为下⼀个结点申请空间q=p; //保存当前节点的指针,作为下⼀结点的前驱p=p->next; //指针后移,新读⼊数据链到当前表尾}q->next=NULL; //最后⼀个结点的后继指针为空fclose(fp);printf(" **********************\n");printf(" ***欢迎来都建设银⾏***\n");printf(" **********************\n");for(j=1;j<4;j++) //限制卡号输⼊的次数的循环{printf("请输⼊您的卡号\n");scanf("%s",d);for(q=head;q!=NULL;q=q->next) //遍历链表{if(strcmp(q->ID,d)!=0) //核对账号{continue; //跳出循环}scanf("%s",mima);if(strcmp(q->mima,mima)!=0) //核对密码{printf("密码不正确。
C语言程序设计任务驱动式教程美化详细版项目实训——ATM功能实现
安全性
可靠性
高效性
ATM系统涉及到用户的金融信息和个人信息,因此需要保证系统的安全性,防范各种安全威胁。
ATM系统需要具备高可靠性和稳定性,确保系统的正常运行和使用。
ATM系统需要快速、准确地完成用户请求,提高系统的效率。
系统性能指标
ATM系统对用户请求的响应时间应该尽可能短,以提供更好的用户体验。
详细描述
03
atm系统的数据流程和处理
03
更新账户余额等信息并输出相应提示。
数据流程设计
01
用户输入取款或存款的金额、账号等信息。
02
系统根据输入信息进行相应处理:验证用户输入的账号和密码是否正确,检查账户余额,处理交易等。
定义结构体类型包括:用户信息、账户信息、密码等。
初始化用户信息和账户信息,将密码保存在加密文件中。
记录每次测试的结果,包括测试用例执行的通过率、错误率和异常情况等。
测试结果
根据测试结果进行分析,找出不足之处,提出改进措施和建议,为后续开发提供参考。
结果分析
通过性能测试,检测系统的响应时间、吞吐量等指标是否满足要求。
性能测试
检测系统的安全性是否可靠,是否存在漏洞和安全隐患,需要进行安全性测试。
安全性测试
总结词
取款功能是atm系统中关键的功能之一,需要考虑取款金额、账户余额以及取款操作的安全性等问题。
详细描述
设计一个取款函数,参数为取款金额和用户账号,函数内部首先读取数据库或内存中存储的用户信息,验证账户余额是否足够支付所要求取的金额,如果余额不足则无法取款。如果余额足够,则扣除相应金额并将取款记录写入日志中,同时还需要进行必要的异常处理。
06
atm系统的总结与展望
ATMC语言编程源代码.doc
#include<stdio.h>/*引用库函数*/#include<stdlib.h>#include<string.h>#include<conio.h>#include<time.h>#define ZHANGHUSHU 10#define JIAOYISHU 20int caidan();/*登录注册菜单*/void zhuce();void denglu();void baocunshuju();int menu();/*主菜单*/void cunkuan();void qukuan();void zhuanzhang();void chaxun();void xiugaimima();struct JiaoYi /*定义交易结构体*/{char shijian[50];/*时间*/char leixing[3];/*类型*/float jine; /*金额*/float yue;/*余额*/};struct ZhangHu /*定义账户结构体*/{char xingming[17];/*姓名*/char zhanghao[12];/*账号*/char shenfenzheng[19]; /*身份证*/char mima[7]; /*密码*/float yue; /*余额*/struct JiaoYi jiaoyi[JIAOYISHU]; /*在账户的结构体中在定义交易的结构体*/int jiaoyishu;};struct ZhangHu zhanghu[ZHANGHUSHU]; /*定义账户数来确定账户这一结构体中有多少个体*/int j; /*当前账户*/int zhanghushu;int k;/*交易帐号*/int jiaoyishu;void xianshizhanghu();int caidan()/*菜单函数*/{char c;do{system("cls"); /*每次选择运行前清屏*/printf("\t\t =================欢迎使用ATM系统===============\n\n"); /*菜单选择*/printf("\t\t * 1. 注册* *\n");printf("\t\t * 2. 登录*\n");printf("\t\t * 3. 保存数据*\n");printf("\t\t * 0. 退出*\n");printf("\t\t===============================================\n");printf("\t\t\t请作出选择(0-3):");c=getchar(); /*读入选择*/}while(c<'0'||c>'3');return(c-'0'); /*c变为空后返回重新选择*/}/*根据主菜单的返回值来确定主函数的值*/void zhuce(){printf("\n\t\t请输入姓名:");scanf("%s",zhanghu[zhanghushu].xingming);printf("\n\t\t请输入帐号:");scanf("%s",zhanghu[zhanghushu].zhanghao);do{printf("\n\t\t请输入身份证:");scanf("%s",zhanghu[zhanghushu].shenfenzheng);if(strlen(zhanghu[zhanghushu].shenfenzheng)==18)break;elseprintf("\n\t\t身份证必须是18,请重新输入!");}while(1);do{ printf("\n\t\t请输入密码:");scanf("%s",zhanghu[zhanghushu].mima);if(strlen(zhanghu[zhanghushu].mima)==6)break;elseprintf("\n\t\t密码必须是6位,请重新输入!");}while(1);zhanghu[zhanghushu].yue=0;zhanghu[zhanghushu].jiaoyishu=0;zhanghushu++;xianshizhanghu();}void xianshizhanghu() /*显示账户函数来显示所输入的账户*/{int i;for(i=0;i<zhanghushu;i++){printf("\n\n\t帐号\t姓名\t身份证\t\t密码\t余额\n");printf("\t%s\t%s\t%s\t%s\t%.2f\n",zhanghu[i].zhanghao,zhanghu[i].xing ming,zhanghu[i].shenfenzheng,zhanghu[i].mima,zhanghu[i].yue);system("pause");}}void denglu() /*登录函数*/{char zhanghao[12],mima[7];int i=0;int mimacishu=1;printf("\n\t\t请输入帐号:");scanf("%s",zhanghao);while(strcmp(zhanghao,zhanghu[i].zhanghao)!=0&&i<zhanghushu)i++; /**/if(i==zhanghushu)return;do{printf("\n\t\t请输入密码:");scanf("%s",mima);if(strcmp(mima,zhanghu[i].mima)!=0){if(mimacishu==3){printf("你已输入错误三次,你不能在输."); system("pause");return;}else{printf("密码错误请重新输入:");mimacishu++;}}elsebreak;}while(1);for(;;){switch(menu()) /*选择判断*/{case 1:cunkuan();break;case 2:qukuan();break;case 3:zhuanzhang();break;case 4:chaxun();break;case 5:xiugaimima();break;case 0:return;}}}void baocunshuju()/*保存数据*/{int i,j;FILE *fp;char filename[20];printf("\t\t\t将数据保存到一个文本文件中\n");/*输入文件名*/printf("\t\t\t请输入文件名");fflush(stdin);scanf("%s",filename);if((fp=fopen(filename,"w"))==NULL)/*打开文件*/{printf("无法创建此文件\n");system("pause");return;}fprintf(fp,"%d\n",zhanghushu);/*循环写入数据*/printf("\t帐号\t\t姓名\t\t身份证\t\t密码\t余额\t交易数");for(i=0;i<zhanghushu;i++){fprintf(fp,"\t%15s%10s%20s%10s\t%10.2f\t%5d\n",zhanghu[i].zhanghao,zh anghu[i].xingming,zhanghu[i].shenfenzheng,zhanghu[i].mima,zhanghu[i]. yue,zhanghu[i].jiaoyishu);for(j=0;j<zhanghu[i].jiaoyishu;j++)fprintf(fp,"%30s%10s%10.2f%10.2f\n",zhanghu[i].jiaoyi[j].shijian,zhan ghu[i].jiaoyi[j].leixing,zhanghu[i].jiaoyi[j].jine,zhanghu[i].jiaoyi[ j].yue);}fclose(fp);}void duqushuju(){int i,j;FILE *fp;char filename[20];printf("\n\n\n\t请输入欲读入数据的文件名:\n");fflush(stdin);gets(filename);if(strlen(filename)==0)return;elseif((fp=fopen(filename,"r"))==NULL)/*打开文件*/{printf("无法打开此文件\n");system("pause");return;}else{printf("\t\t成功打开文件.\n");getch();}fscanf(fp,"%d\n",zhanghushu);for(i=0;i<zhanghushu;i++){fscanf(fp,"%15s%10s%20s%10f\t%10f%5d\n",zhanghu[i].zhanghao,zhanghu[i].xingming,zhanghu[i].shenfenzheng,zhanghu[i].mima,&zhanghu[i].yue,&zhanghu[i].jiaoyishu);for(j=0;j<zhanghu[i].jiaoyishu;j++){fgets(zhanghu[i].jiaoyi[j].shijian,30,fp);fscanf(fp,"%5s%10f\t%10f\n",zhanghu[i].jiaoyi[j].leixing, &(zhanghu[i].jiaoyi[j].jine),&(zhanghu[i].jiaoyi[j].yue));}}fclose(fp);}int menu(){char c;。
ATM 机 C语言
//[Y2-GS1221E23-卞治华]ATM取款机#include <stdio.h>#include <stdlib.h>#include <time.h>#include <string.h>#include <conio.h>#include <ctype.h>#define CURU 72#define CURD 80#define CURL 75#define CURR 77#define ESC 27#define N 7void zhuCe();//注册函数void dengLu();//登陆函数void save();//保存信息void choice();//选择操作void service();//服务选择void exit();//退出系统void yangZhen();//验证函数void userInterface();//用户选择界面void choiceInterface();//选择界面void serviceChoice();//服务菜单void init();//系统初始化,将用户信息写入custom.txt的文件int login(int a,char b[]);//登录密码验证int accountJudge(int a);//用户账号验证void depositAccount();//存款界面void withdrawals();//取款界面void inquireAccount();//查询界面void transfer();//转账界面void playingGame();//猜拳游戏void wanNianLi();//万年历int isLeapYear(int m);//闰年、平年判定int days(int y,int m);//天数判定int week(int y,int m,int d);//星期判定void print(int y,int m); //自定义函数, 打印万年历int getAccount();//从系统中自动获取帐号int cash;//保存存取款金额static int t;//保存登录后用户帐号的下标,方便进行存取转操作static int s;//保存成功登录后,所要转向的用户账号的下标,方便进行转账操作struct user{int account;//用户账号char name[20];//用户姓名char passwd[7];//用户密码float creid;//用户帐户金额}custom[N]={{1000,"admin","000001",500},{1001,"bianzhihua","111111",6000},{1002,"zhangtao ","222222",3566},{1003,"jiyuan","333333",24455},{1004,"wangrui","777777",12345},{1005,"liuc ong","000000",34343}};typedef struct user USER;void main()//登录函数和验证函数我将其都放在choice()中作为界面中的一个选项{userInterface();//用户选择界面choice();//选择操作}void init()//系统初始化,将用户信息写入custom.txt的文件{FILE *fp;int i;fp = fopen("e:\\custom.txt","rw");printf("系统已启动,数据入库中……\n");for( i=0; i<N; i++ ){fwrite(&custom[i],sizeof(USER),1,fp);}save();fclose(fp);}void dengLu()//登录函数{int i=0;int result;int tempaccount;//存放用户登录卡号char temppasswd[7];//存放用户登录密码system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 用户登录账号验证*\n");;printf("* *\n");printf("**********************************************************\n");do{printf("请输入您的银行卡号:");scanf("%d",&tempaccount);printf("请输入您的银行密码:");scanf("%s",temppasswd);result = login(tempaccount,temppasswd);if( result==1 ){service();break;}else{printf("第%d次登录失败!\n",i+1);}i++;}while( i<3 );if( i==3 ){system("cls");printf("********************************************************************* ****\n");printf("-->三次密码错误,卡已被吞<--\n");printf("-->请带上个人身份证件到附近最近的工商银行取卡! <--\n");printf("-->如给你造成任何不便,敬请原谅<--\n");printf("********************************************************************* ****\n");system("pause");exit(0);}}void yangZhen()//验证函数{FILE *fp;int i;fp = fopen("e:\\custom.txt","r");char tempname[20];char temppasswd[7];system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 用户账号验证*\n");;printf("* *\n");printf("**********************************************************\n");printf("请输入您的用户姓名:");scanf("%s",tempname);printf("请输入您的银行密码:");scanf("%s",temppasswd);for ( i=0; i<N; i++ ){fread( &custom[i],sizeof(USER),1,fp );if( strcmp(tempname,custom[i].name)==0 && strcmp(temppasswd,custom[i].passwd)==0 ){printf("*** 系统中存在该用户! ***\n");choice();break;}}if( i==N )printf("*** 系统中没有该用户! ***\n");choice();}int login( int a,char b[] )//登录密码验证{FILE *fp;int i;fp = fopen("e:\\custom.txt","rw");for ( i=0; i<N; i++ ){fread(&custom[i],sizeof(USER),1,fp);if( (a==custom[i].account) && strcmp(b,custom[i].passwd)==0 ){t = i;//保存用户帐号的下标,方便进行存取转操作break;}}if( i== N)return 0;elsereturn 1;}void service()//服务选择{int i;system("pause");system("cls");printf(" -->恭喜您已成功登录中国工商银行自动取款机系统!<-- \n");serviceChoice();printf("\t请输入操作类型:");scanf("%d",&i);switch(i){case 1: depositAccount(); break;//存款界面case 2: withdrawals(); break;//取款界面case 3: inquireAccount(); break;//查询界面case 4: transfer(); break;//转账界面case 5: playingGame(); break;//猜拳游戏case 6: wanNianLi(); break;//万年历case 7: choice(); break;//返回default:printf("\t你所输入的选择不存在,请重新输入!\n");service();}}void save()//文件打开与否判断{FILE *fp;int i;if( (fp=fopen("e:\\custom.txt","wb")) == NULL ){printf("cannot open file\n");return;}for(i=0;i<N;i++)/*二进制写*/if( fwrite(&custom[i],sizeof(USER),1,fp) != 1 )printf("file write error\n");/*出错处理*/fclose(fp); /*关闭文件*/}void userInterface()//用户界面(ATM的开始界面){printf("**********************************************************\n");printf("** **\n");printf("* 欢迎使用中国工商银行自动取款机*\n");printf("** **\n");printf("**********************************************************\n\n"); }void choiceInterface()//界面选择{printf("***********欢迎使用中国工商银行自动取款系统***************\n"); printf("* *\n"); printf("* 1.注册*\n");printf("* 2.登录*\n");printf("* 3.验证*\n");printf("* 4.取卡*\n");printf("* *\n"); printf("**********************************************************\n");}void serviceChoice()//服务菜单{printf("**********************************************************\n");printf("* 欢迎使用中国工商银行自动取款机*\n");printf("* *\n");printf("* 1:存款*\n");printf("* 2:取款*\n");printf("* 3:查询*\n");printf("* 4:转账*\n");printf("* 5:游戏*\n");printf("* 6:万年历*\n");printf("* 7:返回*\n");printf("* *\n");printf("**********************************************************\n\n"); }void choice()//选择{system("pause");system("cls");choiceInterface();int chose;printf("请选择您所要服务的类型:");scanf("%d",&chose);printf("\n");switch(chose){case 1:zhuCe();break;//注册case 2:dengLu();break;//登录case 3:yangZhen();//验证case 4:exit();//退出default:printf("\t您所输入的数据非法,请重新选择!\n");choice();}}void exit()//退出{system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 用户退出*\n");;printf("* *\n");printf("**********************************************************\n");printf("--》欢迎您下次再次使用本自动取款机《--\n");exit(0);}int getAccount()//从系统中自动获取帐号{static int account = 1005;account++;return account;}void zhuCe()//注册函数{FILE *fp;int count = 0;//记录用户密码错误次数char temppasswd2[7];fp = fopen( "e:\\custominformation.txt","a" );//向文件尾追加用户数据system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 欢迎新用户注册*\n");;printf("* *\n");printf("**********************************************************\n");custom[6].account=getAccount();printf("系统自动分配给你的用户帐号为:%d\n",custom[6].account);printf("请输入你要注册帐号的用户姓名:");scanf("%s",custom[6].name);do{if( count>=1){printf("--注册账号前后密码不一致,请重新输入--\n");}printf("请输入您要注册账号的用户密码:");scanf("%s",custom[6].passwd);printf("请再次输入您要注册账号的用户密码:");scanf("%s",temppasswd2);count++;}while( strcmp(custom[6].passwd,temppasswd2)!=0 );custom[6].creid = 0;//初始帐户存款金额为0元init();choice();}void depositAccount()//存款界面{FILE *fp;int cash;fp = fopen( "e:\\custominformation.txt","rw" );system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 欢迎用户存款*\n");;printf("* *\n");printf("**********************************************************\n");printf("\t请输入你所要存款的金额(元):");scanf("%d",&cash);custom[t].creid += cash;if( cash%50==0 ){printf("->存款成功:尊敬的用户%s,您账户现有余额:%.2f元<-\n",custom[t].name ,custom[t].creid);}else{system("cls");printf("*******************存款提示界面***********************\n");printf("* *\n");printf("-->本取款机只能识别并接收100元面额的人民币! <--\n");printf("* *\n");printf("******************************************************\n");system("pause");system("cls");depositAccount();}service();}void withdrawals()//取款界面{FILE *fp;fp = fopen( "e:\\custominformation.txt","w" );system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 欢迎用户取款*\n");;printf("* *\n");printf("**********************************************************\n");printf("\t请输入你所要取款的金额(元):");scanf("%d",&cash);custom[t].creid -= cash;if( cash%100==0 && custom[t].creid > 0 )printf("->取款成功:尊敬的用户%s,您账户现有余额:%.2f元<-\n",custom[t].name,custom[t].creid);else if( custom[t].creid<=0 ){printf("-->您的账户余额不足,取款失败,请见谅!<--\n");custom[t].creid += cash;}else{system("cls");printf("********************取款提示界面**********************\n");printf("* *\n");printf("-->本取款机仅能取出若干100元面额的人民币<--\n");printf("* *\n");printf("******************************************************\n");system("pause");system("ClS");serviceChoice();withdrawals();}service();}void inquireAccount()//查询界面{system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 账户金额查询*\n");;printf("* *\n");printf("**********************************************************\n");printf("\t尊敬的用户,你的卡上剩余金额为:%.2f元\n",custom[t].creid );service();}void transfer()//转账界面{int i = 0;int result = 0;system("cls");printf("**********************************************************\n");printf("* *\n");printf("* 转帐*\n");;printf("* *\n");printf("**********************************************************\n");do{int tempaccount1;int tempaccount2;printf("\t请输入你所要转向的账户用户编号:");scanf("%d",&tempaccount1);printf("\t请再次输入你所要转向的账户用户编号:");scanf("%d",&tempaccount2);if( tempaccount1 != tempaccount2 ){printf("\t两次输入的用户帐户不一样,请重新输入!\n");}else{result = accountJudge( tempaccount1 );//用户账号验证if( result == 1 ){while(1){printf("\t请输入您所要转帐金额:");scanf("%d",&cash);custom[t].creid -= cash;if( custom[t].creid>0 ){FILE *fp;fp = fopen( "e:\\custominformation.txt","w" );custom[s].creid += cash;printf("转账成功,你已成功向%s用户转入%d元,你账户现有余额为:%.2f元\n",custom[s].name,cash,custom[t].creid);service();}else{printf("\t您的账户余额不足,转账失败,请见谅!\n");custom[t].creid += cash;}}}else{printf("-->对不起,您所输入的用户帐号不存在!<--\n");}}i++;}while( i < 3 );if( i==3 ){printf("-->三次转账用户帐号错误,请仔细核对用户帐号后,再重新选择操作!<--\n");system("pause");}service();}int accountJudge( int a )//用户账号验证{FILE *fp;int i;fp = fopen("e:\\custom.txt","rw");for ( i=0; i<N; i++ ){fread(&custom[i],sizeof(USER),1,fp);if( a == custom[i].account ){s = i;//保存所要转向的用户账号的下标,方便进行转账操作break;}}if( i== N)//判断用户账户在不在:1-存在0-不存在return 0;elsereturn 1;}void playingGame()//猜拳游戏{system("PAUSE");//暂停system("CLS");//清屏int user;//用户出拳int machine;//机器出拳int count;//统计比赛场数int uWin; //用户出拳胜int mWin; //机器出拳胜int tie;//平局int n;//比赛场数int m;//几局胜int score[2]={0,0};//积分统计count = 0;srand( (unsigned)time( NULL ) );machine = rand()%3;printf(" *******************************\n");printf(" * 猜拳游戏*\n");printf(" * 0:剪刀1:石头2:布*\n");printf(" * 胜者:3分失败:0分平局:1分*\n");printf(" ********************************\n");printf("\n\n\t用户自定义比赛体制:\n");printf("\t比赛场数:");scanf("%d",&n);while( !(n>0) ){printf("/*所输数据非法,请重新输入比赛场数*/\n\t比赛场数:");scanf("%d",&n);}m = n/2+1;printf("\t您选择实行%d局%d胜制:\n",n,m);while( count<n ){printf("\t学生出拳:");scanf("%d",&user);while( !(user>=0 && user<=2) ){printf("/*所输数据非法,请学生重新出拳*/\n\t学生出拳:");scanf("%d",&user);}printf("\t机器出拳:%d\n",machine);if( user == machine ){printf("\t第%d局为平局!\n",count+1);score[0]++;score[1]++;}else if( user == 0 && machine == 2 || user == 1 && machine == 0 || user == 2 && machine == 1 ){printf("\t第%d局为用户赢!\n",count+1);score[0] += 3;uWin ++;}else{printf("\t第%d局为机器赢!\n",count+1);score[1] += 3;mWin ++;}count++;}if( uWin<mWin )printf("赛制(%d局%d胜制):最后胜利者是-->机器\n",n,m);else if ( uWin > mWin )printf("赛制(%d局%d胜制):最后胜利者是-->用户\n",n,m);elseprintf("赛制(%d局%d胜制):双方都是胜利者-->平局\n",n,m);printf("最后积分结果--用户:%d分,机器:%d分\n",score[0],score[1]);service();}void wanNianLi()//万年历{int month;//月份int year;//年char ch;int m[12]={0};printf("请输入所要查询的年份:");scanf("%d",&year);printf("请输入所要查询的月份:");scanf("%d",&month);do{system("cls"); //调用DOS清屏命令print(year,month); //自定义函数, 打印万年历ch = getch(); //获得无回显控制台输入字符if(ch == ESC) //ESC键,退出循环,结束程序break;else if(ch == 0) //若值为零,则用户敲了功能键,继续获取后续代码。
C语言模拟ATM提款机
C语言模拟ATM提款机1.运用结构体2.运用文件调用源代码:#include "stdio.h"#include "stdlib.h"#include "conio.h"#define N 200void zhanghao(); //账号void xuanzhe(); //选择函数void enter_ATM(); //账号输入函数void input_code(); //密码输入函数void caozuo(); //基本操作界面void qukuan(); //取款函数void success(); //操作成功函数void delay(); //延时函数void YU_E(); //余额查询函数void cunkuan(); //存款函数void panduan(double z); //判断取款是否合法函数void exit(); //退出界面函数void mima(); //密码修改void zhuanzhang(); //转账函数void read(); //文件写入函数void write(); //文件读取函数void guanli(); //管理员函数void tequancode(); //管理员密码void hu(); //户void xinxi(); //信息void gmima(); //管理员改密void CAOZUO(); //管理员操作函数void yinghang(); //银行账户查询函数void jia(); //账户添加函数void shanchu(); //账户删除函数typedef struct{long int zhanghao;int mima;double yu_e;}atm;atm guan[N];int k;////////////////////////////////////////////////////////////主函数void main(){xuanzhe();}////////////////////////////////////////////////////////////功能选择函数void xuanzhe(){system("cls");printf("* 请选择功能*\n");printf("* 1.管理员 2.用户*\n");switch(getch()){case '1':tequancode();break;case '2':enter_ATM();break;default:{printf("\a非法输入");delay();system("cls");xuanzhe();};break;}}///////////////////////////////////////////////////////////柜台机账号输入函数void enter_ATM(){delay();system("cls");read();printf("* 欢迎使用ATM 柜台机*\n");printf("* 请输入卡号*\n");long int user;scanf("%d",&user);if(user==0){printf("* 账号错误*\n");enter_ATM();}else if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao))input_code( );}system("cls");printf("* 账户不存在,请从新输入*\n");enter_ATM();}elseinput_code( );}////////////////////////////////////////////////////////////////密码输入函数void input_code( ){long int code;int temp=3;read();system("cls");printf("* 请输入密码*\n");scanf("%d",&code);while(code!=guan[k].mima){temp--;system("cls");printf("* 密码错误,请重新输入*\n");printf("* 您还有");printf("%d",temp);printf(" 次机会*\n");scanf("%d",&code);if(temp==1){system("cls");printf("* 您已经3 次输入密码*\n");printf("* 系统将退出操作*\n");delay();enter_ATM();}}caozuo();}//////////////////////////////////////////////////////////////////主操作界面函数void caozuo( ){system("cls");printf("********************************\n");printf("* 1.修改密码*\n");printf("* 2.查询余额*\n");printf("* 3.取款*\n");printf("* 4.存款*\n");printf("* 5.转账*\n");printf("* 6.退出*\n");printf("********************************\n");switch(getch( )){case '1': mima(); break;case '2': YU_E(); break;case '3': qukuan(); break;case '4': cunkuan(); break;case '5': zhuanzhang();break;case '6': exit(); break;default:{printf("\a非法操作\n");caozuo();};}}//////////////////////////////////////////////////////////////////////密码修改函数void mima(){long int mm1,mm2,mm3;int temp;system("cls");printf("旧密码:");scanf("%d",&mm1);printf("\n");if(mm1!=guan[k].mima){system("cls");printf("旧密码错误,请重新输入\n");delay();mima();}printf("新密码:");scanf("%d",&mm2);if(mm2<100000||mm2>999999){system("cls");printf(" 密码必须等于6位数\n");delay();mima();}temp=mm2%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入!\n");delay( );mima( );}printf("\n");printf("确认新密码:");scanf("%d",&mm3);if(mm2!=mm3){system("cls");printf("确认密码不一致,请重新输入\n");delay( );mima();}if(mm3=mm2){guan[k].mima=mm3;write();success();}}////////////////////////////////////////////////////////////////////余额查询函数void YU_E(){read();system("cls");printf("你的余额为:%lf\n",(guan[k].yu_e));printf("1.返回 2.退出\n");switch(getch()){case '1': caozuo(); break;case '2': exit(); break;}}/////////////////////////////////////////////////////////////////////////取款函数void qukuan(){double temp;system("cls");printf(" 请选择您要取款的金额\n");printf(" 1.100 2.200 \n");printf(" 3.500 4.800 \n");printf(" 5.1000 6.其它\n");printf(" \n");printf(" 7.返回8.退出\n");switch(getch()){case '1': panduan(100); break;case '2': panduan(200); break;case '3': panduan(500); break;case '4': panduan(800); break;case '5': panduan(1000); break;case '6':system("cls");printf("请输入您要取款的金额:");scanf("%lf",&temp);panduan(temp); break;case '7':caozuo(); break;case '8':exit(); break;}}///////////////////////////////////////////////////////////////////判断取款是否合法函数void panduan(double z){int beishu;if(z>(guan[k].yu_e)){system("cls");printf(" 余额不足!\n");printf(" 请重新操作\n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}beishu=(int)z%100;if(beishu!=0){system("cls");delay( );printf(" 本ATM机只支持100 的人民币\n");printf(" 请重新操作\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}if(z==5000.00||z>5000.00){system("cls");printf(" 每次取款不能超过5000 元\n");printf(" 请重新操作\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1': qukuan();case '2': exit();}}(guan[k].yu_e)-=z;write();success();}/////////////////////////////////////////////////////////////////存款函数void cunkuan( ){double cun;system("cls");printf(" 请放入人民币:");scanf("%lf",&cun);while(cun<0){system("cls");printf(" 非法存款\n");printf(" 请重新放入人民币\n");scanf("%lf",&cun);}(guan[k].yu_e)+=cun;write();success();}/////////////////////////////////////////////////////////////////转账号函数void zhuanzhang(){int i,hao;double money;long int a=2109999999;system("cls");delay();read();printf("* 请输入账号*\n");scanf("%d",&hao);printf("* 请输入金额*\n");scanf("%lf",&money);if(hao<1000000000||hao>a){printf("* 账号错误,操作取消*\n");delay();delay();caozuo();}else if(money>guan[k].yu_e||money<0){printf("* 金额错误,操作取消*\n");delay();delay();caozuo();}else{read();for(i=1;i<N;i++){if(guan[i].zhanghao==hao)break;}guan[k].yu_e-=money;guan[i].yu_e+=money;write();success();}}///////////////////////////////////////////////////////延时函数void delay( ){long int bl1;int bl2;for(bl1=600000;bl1>0;bl1--){for(bl2=300;bl2>0;bl2--);}}/////////////////////////////////////////////////操作成功函数void success( ){system("cls");printf(" 操作已成功\n");printf(" \n");printf(" 1.返回 2.退出\n");switch(getch()){case '1':caozuo(); break;case '2':exit(); break;}}//////////////////////////////////////////////系统退出函数void exit(){system("cls");printf("* 欢迎您的再次使用*\n");printf("* 系统正在退出... *\n");delay();xuanzhe();}////////////////////////////////////////////////////文件读取函数void read(){int i;FILE *fp;fp=fopen("xinxi.txt","r");if(fp==NULL){printf("打开文件失败\n");return;}for(i=0;i<N;i++){fscanf(fp,"%d ",&(guan[i].zhanghao));fscanf(fp,"%d ",&(guan[i].mima));fscanf(fp,"%lf\n",&(guan[i].yu_e));}fclose(fp);}/////////////////////////////////////////////////////////////文件写入函数void write(){int i;FILE *fp;fp=fopen("xinxi.txt","w");if(fp==NULL){printf("打开文件失败\n");return;}for(i=0;i<N;i++){fprintf(fp,"%d ",guan[i].zhanghao);fprintf(fp,"%d ",guan[i].mima);fprintf(fp,"%lf\n",guan[i].yu_e);}fclose(fp);}void tequancode( ){long int code;int temp=2;read();system("cls");printf("* 请输入管理员密码*\n");scanf("%d",&code);while(code!=guan[0].mima){system("cls");printf("* 密码错误,请重新输入*\n");printf("* 您还有");printf("%d",temp);printf(" 次机会*\n");scanf("%d",&code);temp--;if(temp==0){system("cls");printf("*\a 您已经3 次输入密码*\n");printf("* 系统将退出操作*\n");delay();xuanzhe();}}guanli();}////////////////////////////////////////////////////////////////管理员函数void guanli(){system("cls");delay();printf("* 1.信息查询*\n");printf("* 2.操作*\n");printf("* 3.退出*\n");switch(getch()){case '1':zhanghao();break;case '2':CAOZUO();break;case '3':exit();break;default:{printf("\a非法操作");guanli();};}}/////////////////////////////////////账号void zhanghao(){system("cls");read();printf(" 请输入账号\n");long int user;scanf("%d",&user);if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao))hu();}system("cls");printf("* 账户不存在,请从新输入*\n");delay();guanli();}else{delay();hu( );}}////////////////////////////////////////////////账户void hu(){system("cls");printf("* 1.信息 2.改密码*\n");printf("* 3.返回 4.退出*\n");switch(getch()){case '1':xinxi();break;case '2':gmima();break;case '3':zhanghao();break;case '4':guanli();break;default:{printf("\a非法操作\n");hu();};}}///////////////////////////////////////////////信息void xinxi(){system("cls");read();printf("*账号密码余额*\n");printf("%d ",guan[k].zhanghao);printf("%d ",guan[k].mima);printf("%lf \n",guan[k].yu_e);printf("* 1.返回 2.退出*\n");switch(getch()){case '1':hu();break;case '2':guanli();break;}}///////////////////////////////////////////管理员改密void gmima(){long int mm1,mm2,mm3;char temp;system("cls");printf("旧密码:");scanf("%d",&mm1);printf("\n");if(mm1!=guan[k].mima){system("cls");printf("旧密码错误,请重新输入\n");delay();gmima();}printf("新密码:");scanf("%d",&mm2);if(mm2<100000||mm2>999999){system("cls");printf(" 密码必须等于6位数\n");printf(" 请重新输入!\n");delay();gmima();}temp=mm2%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入!\n");delay( );gmima( );}printf("\n");printf("确认新密码:");scanf("%d",&mm3);if(mm2!=mm3){system("cls");printf("确认密码不一致,请重新输入\n");delay( );gmima();}if(mm3=mm2){guan[k].mima=mm3;write();hu();}}///////////////////////////////////////////管理员操作函数void CAOZUO(){system("cls");delay();printf("* 1.查询所有账户*\n");printf("* 2.添加账户*\n");printf("* 3.删除账户*\n");printf("* 4.返回 5.退出*\n");switch(getch()){case '1':yinghang();break;case '2':jia();break;case '3':shanchu();break;case '4':guanli();break;case '5':xuanzhe();break;default:{printf("\a非法操作\n");CAOZUO();};}}//////////////////////////////////////////银行账户查询函数void yinghang(){system("cls");delay();read();printf("*账号密码余额*\n");for(;k<N;k++){if(guan[k].zhanghao!=0&&guan[k].zhanghao>0){printf("%d ",guan[k].zhanghao);printf("%d ",guan[k].mima);printf("%lf\n",guan[k].yu_e);}}printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}//////////////////////////////////////////账户添加函数void jia(){int mm1,mm2;int temp;system("cls");delay();read();printf("* 请输入密码*\n");scanf("%d",&mm1);if(mm1<100000||mm1>999999){system("cls");printf(" 密码必须等于6位数\n");printf(" 请重新输入: \n");delay();scanf("%d",&mm1);}temp=mm1%111111;if(temp==0){system("cls");printf(" 密码过于简单\n");printf(" 请重新输入: \n");delay( );scanf("%d",&mm1);}printf("\n");printf("确认密码:\n");scanf("%d",&mm2);if(mm1!=mm2){system("cls");printf("确认密码不一致,操作取消\n");delay( );CAOZUO();}if(mm1=mm2){for(;k<N;k++){if(guan[k].zhanghao==0){guan[k].zhanghao=guan[k-1].zhanghao+1;guan[k].mima=mm2;write();break;}}printf("账号创建成功!\n");printf("您的账号是%d,请妥善保管!\n",guan[k].zhanghao);printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}/////////////////////////////////////////账户删除函数void shanchu(){system("cls");delay();read();printf("* 请输入账号*\n");long int user;scanf("%d",&user);if(user==0){printf("* 账号错误,操作取消*\n");CAOZUO();}else if(user!=(guan[k].zhanghao)){for(k=1;k<N;k++){if(user==(guan[k].zhanghao)){for(;k<N;k++){guan[k].zhanghao=guan[k+1].zhanghao;guan[k].mima=guan[k+1].mima;guan[k].yu_e=guan[k+1].yu_e;write();}printf("账号删除成功!\n");printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}system("cls");printf("* 账户不存在*\n");delay();CAOZUO();}else{for(;k<N;k++){guan[k].zhanghao=guan[k+1].zhanghao;guan[k].mima=guan[k+1].mima;guan[k].yu_e=guan[k+1].yu_e;write();}printf("账号删除成功!\n");printf("* 1.返回 2.退出*\n");switch(getch()){case '1':CAOZUO();break;case '2':guanli();break;}}}。
c语言模拟ATM机程序
case 4: Xiugai(&a[6]);break;
case 5: Cunkuan(&Y);break;
case 6: exit(0);break;
default:printf("输入错误,请重新输入\n");
}
lp2:printf("继续操作请按1,退卡请按2\n");
else
{printf("非法操作,强制退出\n");
}
}
void Qukuan()
{
int i,j;
printf("1、100\t2、200\t3、500\t4、800\t5、请输入金额\n");
scanf("%d",&i);
switch(i)
{
case 1: panduan(100);break;
printf请选择服务项目n1取款t2查询服务t3转账服务t4修改密码t5存款t6退卡n
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
long int Y=100000;int c=0;char a[6]={'1','2','3','4','5','6'};
else
lp4:{
printf("请输入新密码:\n");
k=getch();
while(k!='\r'&&l<6)
C语言ATM程序模拟
C语言A T M程序模拟As a person, we must have independent thoughts and personality.一、课题要求1、当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统。
2、查询余额:初始余额为10000元。
3、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
4、ATM存款:不能出现负存款。
5、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
二、代码#include ""#include ""#include ""#include ""#include ""void gotoxy(int x,int y); 改密码 *\n");printf("* 2.查询余额 *\n");printf("* 3.取款 *\n");printf("* 4.实时存款 *\n");printf("* 5.退出 *\n");printf("********************************\n");switch(getch()){case '1': mima(); break;case '2': yu_e(); break;case '3': qukuan(); break;case '4': cunkuan(); break;case '5': exit(); break;default:printf("error\n");}}回 2.退出 *\n");printf("* *\n"); printf("* *\n"); printf("********************************\n"); switch(getch()){case '1': caozuo(); break;case '2': exit(); break;}}. *\n");printf("* *\n"); printf("* *\n");printf("********************************\n"); delay();delay();system("cls");printf("********************************\n"); printf("* *\n"); printf("* 您的余额为 *\n"); printf("* *\n"); printf(" ");printf("%d",YU_E);printf("\n* *\n"); printf("* 1.返回 2.退出 *\n"); printf("********************************\n"); switch(getch()){case '1': caozuo(); break;case '2': exit(); break;}}它 *\n");printf("* *\n"); printf("* 7.返回 8.退出 *\n"); printf("********************************\n");switch(getch()){case '1': panduan(100); break;case '2': panduan(200); break;case '3': panduan(500); break;case '4': panduan(800); break;case '5': panduan(1000); break;case '6':system("cls");printf("********************************\n");printf("* *\n");printf("* 请输入您要取款的金额 *\n");printf("* *\n");printf("* *\n");printf("* *\n");printf("* *\n");printf("********************************\n");gotoxy(14,4);scanf("%d",&temp);panduan(temp); break;case '7':caozuo(); break;case '8':exit(); break;}}回 2.退出 *\n");printf("* *\n");printf("********************************\n");switch(getch()){case '1': qukuan();case '2': exit();}}beishu=z%100;if(beishu!=0){system("cls");delay();printf("********************************\n");printf("* *\n");printf("* 本ATM机只支持 100 的人民币 *\n");printf("* 请重新操作 *\n");printf("* *\n");printf("* 1.返回 2.退出 *\n");printf("* *\n");printf("********************************\n");switch(getch()){case '1': qukuan();case '2': exit();}}if(z==5000||z>5000){system("cls");printf("********************************\n");printf("* *\n");printf("* 每次取款不能超过 5000 元 *\n");printf("* 请重新操作 *\n");printf("* *\n");printf("* 1.返回 2.退出 *\n");printf("* *\n");printf("********************************\n");switch(getch()){case '1': qukuan();case '2': exit();}}YU_E=YU_E-z;success();}. *\n");printf("* *\n"); printf("* *\n"); printf("********************************\n"); delay();delay();system("cls");printf("********************************\n"); printf("* *\n"); printf("* 操作已成功 *\n"); printf("* *\n"); printf("* 1.返回 2.退出 *\n"); printf("* *\n"); printf("* *\n"); printf("********************************\n"); switch(getch()){case '1':caozuo(); break;case '2':exit(); break;}}. *\n");printf("* *\n");printf("* *\n");printf("********************************\n");delay();delay();enter_ATM();}//================================================================/ ///============== 简单转移函数=============//void zhuangyi(){mima();}//========================================//三、部分效果截图。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息科学与工程学院《数据结构》课程设计报告课程设计名称: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排序此为超级用户功能,实现以余额对所有用户排序并且输出一些信息。
1.5修改密码修改用户登录密码。
1.6查看ATM使用情况查看每一台A TM的使用情况,输出存取款发生额及其次数。
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 查找ATMgenerateBook.hchange_password.h 修改密码recovery_quota.h 恢复限额seebook.h 查看现在seeAtm.h。
查看ATM使用情况2运行环境1.硬件环境:PC机内存 8G;硬盘1000G2.软件环境:操作系统:windows73开发工具和编程语言开发环境:Visual C++编程语言:C语言4详细设计在概要设计的基础上,对每个模块进行内部逻辑处理部分详细设计。
下面分别列出各个模块具体实现流程图:5.3加载和存储函数5.4 输出流水账函数5.5 查看ATM使用情况函数5程序编码根据详细设计的流程图转化为如下代码,下面列出主函数代码:#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){case1: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);elseprintf("权限不足,请重新选择\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;}}}6运行结果以下为排序和查询流水账结果测试:心得体会本学期,当数据结构大作业刚布置下来的时候感觉很难,因为感觉实现的功能比较多并且时间又短,根本完不成这个任务,在写大作业的过程中也并不是那么顺利,存在着太多的bug,然后就一步步调试,找出错误。