C语言模拟ATM机
C语言课程设计:银行排队系统

#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <conio.h>#include <time.h>#define n 3int vip1=0;int y,z;float sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;float i1=0,i2=0,i3=0,i4=0,i5=0;float ave1=0,ave2=0,ave3=0,ave4=0,ave5=0;struct List{int A[n+1]; //顾客用来办理业务的N个窗口int len; //表示数组中的元素个数}L;struct Lnode{ //链表结点类型int data;Lnode *next;};struct Linkqueue{ //链式存储的等候队列的类型定义Lnode *front;Lnode *rear;}Q;void Initshuzu() //初始化线性的算法{for(int i=1;i<=n;i++)L.A[i]=0; //元素值为0,表示编号为I的窗口当前状态为空L.len=0;}void Initqueue() //初始化队列的算法{Q.front=Q.rear=(Lnode *)malloc(sizeof(Lnode));Q.front->next=NULL; //k1}void Enqueue(Linkqueue *Q,int elem) //进队算法{Lnode *s;s=(Lnode *)malloc(sizeof(Lnode));s->data=elem; //k2s->next=NULL; //k3Q->rear->next=s; //k4Q->rear=s; //k5}int Dlqueue(Linkqueue *Q) //出队算法{Lnode *t;int x;if(Q->front==Q->rear){printf("队列为空!\n");exit(1);}else{t=Q->front->next;Q->front->next=t->next; //k6x=1; //k7free(t); //k8return x;}}void printl() //输出数组算法{int i;printf("正在办理业务的顾客编号为:一号柜台二号柜台三号柜台\n");printf(" ");for( i=1;i<=L.len;i++){printf("%d号客户",L.A[i]);}printf("\n");}void print2() //输出队列算法{ int i=0;printf("正在等候办理业务的顾客编号为:");Lnode *s=Q.front->next;while(s!=NULL){printf("%d ",s->data);s=s->next; //k9i++;}printf("\n您的前面一共有%d人在排队,请您稍候!",i);printf("\n");void daoda(int x) //解决顾客到达事件算法{int i=L.len+1;if (L.len<n) //{ L.A[i]=x;i++;L.len++;}elseEnqueue(&Q,x);}void likai(int x) //解决顾客离开事件算法{int i=0;do{if(x>L.len){printf("输入有误!\n请重新输入:");scanf("%d",&x);}elsefor(i=0;i<=L.len;i++){if(i==x){printf("尊敬的%d号顾客您好!\n",x);L.A[i]=0;L.len--;if(Q.front!=Q.rear){int y=Dlqueue(&Q);L.A[i]=y;L.len++;}}}}while(i==0);}int guitai( ) //判断输入的柜台号是否正确int y=0;printf("请输入你所办理业务的柜台号(1-3):\n");scanf("%d",&y);if(y<1||y>5){printf("你输入的柜台号有误,请重新输入!\n");printf("请输入你所办理业务的柜台号(1-3):\n");scanf("%d",&y);}elseprintf(" 你所办理业务的柜台为%d.\n",y);return y;}int pingfeng( ) //判断输入的分数是否正确{int y=0;printf("请输入你评分(1-5):\n 1分…………非常不满意;\n 2分…………比较不满意;\n 3分…………一般满意;\n 4分…………比较满意;\n 5分…………非常满意。
at指令收发c语言示例

at指令收发c语言示例AT指令是一种调制解调器命令语言,用于控制调制解调器(Modem)的操作。
以下是一个使用C语言通过串口发送AT指令的示例:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <termios.h>#include <fcntl.h>// 打开串口设备int serialOpen(const char *device) {int fd = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK);if (fd == -1) {perror("Failed to open serial device");exit(EXIT_FAILURE);}struct termios options;tcgetattr(fd, &options);// 设置波特率cfsetispeed(&options, B115200);// 设置数据位数options.c_cflag &= ~CSIZE;options.c_cflag |= CS8;// 设置奇偶校验位options.c_cflag &= ~PARENB;// 设置停止位options.c_cflag &= ~CSTOPB;// 设置流量控制options.c_cflag |= CLOCAL | CREAD;tcsetattr(fd, TCSANOW, &options);return fd;}// 关闭串口设备void serialClose(int fd) {if (fd != -1) {close(fd);}}// 发送AT指令void sendAtCommand(int fd, const char *command) {write(fd, command, strlen(command));printf("Command Sent: %s\n", command);}// 接收响应void receiveResponse(int fd, char *response, size_t size) { size_t count = read(fd, response, size - 1);response[count] = '\0';printf("Response Received: %s\n", response);}int main() {const char *device = "/dev/ttyUSB0";// 打开串口设备int fd = serialOpen(device);if (fd == -1) {exit(EXIT_FAILURE);}// 发送AT指令sendAtCommand(fd, "AT");// 接收响应char response[1024];receiveResponse(fd, response, sizeof(response));printf("Response: %s\n", response);// 发送ATE0指令sendAtCommand(fd, "ATE0");// 接收响应receiveResponse(fd, response, sizeof(response));printf("Response: %s\n", response);// 发送AT+HCMGR=1指令sendAtCommand(fd, "AT+HCMGR=1");// 接收响应receiveResponse(fd, response, sizeof(response));printf("Response: %s\n", response);// 发送AT+HCMGS="1234567890"指令sendAtCommand(fd, "AT+HCMGS=\"1234567890\"");// 接收响应receiveResponse(fd, response, sizeof(response));printf("Response: %s\n", response);// 发送Ctrl+Z指令sendAtCommand(fd, "\r\n");// 接收响应receiveResponse(fd, response, sizeof(response));printf("Response: %s\n", response);serialClose(fd);return 0;}```在上述代码中,使用了`serialOpen()`函数打开串口设备,然后使用`sendAtCommand()`函数发送AT指令,并使用`receiveResponse()`函数接收响应。
c语言第03章

活期存款一年后本息和为: p1=p0(1+r1) 一年期定期存款,一年后本息和为: p2=p0(1+r2) 两次半年定期存款,一年后本息和为:
r3 r3 p3 = p0(1 + )(1 + ) 2 2
6
3.1顺序程序设计举例
算法:
输入p0,r1,r2,r3的值 计算p1=p0(1+r1) 计算p2=p43; r 3 )
2 2
输出p1,p2,p3
7
3.1 顺序程序设计举例
#include <stdio.h> 定义变量同时赋予初值 int main ( ) {float p0=1000, r1=0.0036,r2=0.0225, r3=0.0198, p1, p2, p3; p1 = p0 * (1 + r1); p2 = p0 * (1 + r2); p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(”%f\n%f\n%f\n”,p1, p2, p3); return 0; }
\„ \ddd \“ 单引号 例 void main() { printf(“Y\b=\n”);\xhh 3位8进制数代表的字符 aaa }
转义字符:反斜线后面跟一个字符或一个代码值表示
<
双引号 运行结果: 2位16进制数代表的字符 屏幕显示:= 15 打印机输出:¥
C语言程序设计
第3章 最简单的C程序设计
19
C语言程序设计
第3章 最简单的C程序设计
3.2.3不同类型数据间的转换
1.隐式转换
什么情况下发生
运算转换------不同类型数据混合运算时 赋值转换------把一个值赋给与其类型不同的变量时 输出转换------输出时转换成指定的输出格式
at框架 c 语言

at框架 c 语言at框架是一种用于嵌入式系统的C语言框架,它提供了一种方便的方式来创建和管理任务。
在嵌入式系统中,任务是并行执行的基本单位,at框架通过任务调度器来协调各个任务的执行顺序,从而实现多任务并发执行。
at框架有助于简化嵌入式系统的开发过程。
它提供了一套API,使得任务的创建、调度和销毁变得简单易用。
开发人员只需要关注任务的逻辑实现,而不需要过多考虑任务之间的调度和管理细节。
这样可以提高开发效率,降低开发成本。
在at框架中,每个任务都有一个优先级,优先级高的任务会优先执行。
任务可以通过at_task_create函数来创建,并指定其优先级和入口函数。
入口函数是任务的实际执行逻辑,当任务被调度器选中时,它会被执行。
任务可以通过at_task_suspend和at_task_resume函数来暂停和恢复执行,通过at_task_delete函数来销毁。
除了任务调度器,at框架还提供了一些其他的功能。
例如,它提供了互斥锁和信号量等同步机制,以确保多个任务之间的数据访问安全。
它还提供了定时器功能,可以在指定的时间间隔内执行某个任务。
这些功能都可以帮助开发人员更好地实现系统的需求。
at框架的核心是任务调度器。
任务调度器负责管理所有的任务,并根据它们的优先级来确定执行顺序。
它使用一种优先级算法来选择下一个要执行的任务。
当一个任务被选中执行时,任务调度器会保存当前任务的上下文,并切换到下一个任务的上下文。
这样可以实现任务之间的无缝切换,使得多任务能够并发执行。
在使用at框架开发嵌入式系统时,需要注意一些问题。
首先,任务的优先级应该合理设置,以确保系统的实时性和响应性。
其次,任务的逻辑应该简洁明了,避免复杂的嵌套和依赖关系。
另外,任务之间的通信和同步需要谨慎处理,以避免出现死锁和竞态条件等问题。
at框架是一种用于嵌入式系统的C语言框架,它提供了一种简单方便的方式来创建和管理任务。
通过任务调度器和其他功能,它可以帮助开发人员更好地实现系统的需求,并提高开发效率。
c语言at指令

c语言at指令C语言AT指令AT指令是指模拟调制解调器用户与AT指令模块之间的通信控制指令,应用于GSM系统中。
C语言是一种非常流行的编程语言,具有很强的编程能力和灵活性。
在GSM系统中,使用C语言编写AT指令程序作为移动设备与网络之间的基本通信方式已经成为一种标准。
在C语言中,AT指令程序通常使用串口通信技术实现。
在编写程序时,必须先打开串口(打开时包括设置参数,如波特率,数据位和校验等),然后通过串口发送AT指令,并等待从串口接收到的数据。
在AT指令中常常使用到的命令有AT、AT+CGMI、AT+CGMM、AT+CGSN等等。
其中AT命令用来检测是否存在AT指令设备,AT+CGMI用来查询指令设备的制造商信息,AT+CGMM用来查询设备型号,AT+CGSN用来查询设备串号等等。
同时也可以用这些命令实现GSM通信的相关设置,如设置网络参数、短信收发设置等等。
AT指令一般可以分为基本指令和扩展指令两类。
基本指令是指所有AT指令设备都必须支持的指令,如AT命令,而扩展指令则是由实际设备厂商根据自己的产品功能需要设计的一种定制化指令,如AT+CGMI和AT+CGMM命令。
总结来说,C语言AT指令程序是GSM通信中必不可少的一种编程方式,它兼具了C语言的编程能力和AT指令的通信灵活性。
在实际应用中,可以结合其他编程技术(如多线程编程)等来实现更加强大的功能。
同时,也值得注意的是,在使用AT指令程序的过程中,程序员也必须非常注意一些细节问题,如字符编码方式、数据传输方式等等,使得程序能够更加稳定和快速地工作。
最后,需要提醒的是,在开发AT指令程序时一定要遵守相关的标准和规定,以保证程序的良好运行和安全性。
at24c128程序范例

AT24C128是一种串行EEPROM(电可擦可编程只读存储器)芯片,通常用于存储小量的数据,比如配置参数或设备状态。
它可以通过I2C总线与微控制器进行通信。
以下是一个简单的示例程序,展示了如何使用AT24C128 EEPROM芯片。
这个例子使用的是C语言,适用于常见的微控制器,如基于AVR或PIC的微控制器。
请注意,你需要根据你的具体硬件和开发环境来调整代码。
```c#include <i2c.h> // 包含I2C库函数// 定义AT24C128的I2C地址#define EEPROM_SLAVE_ADDRESS 0x50// 定义要写入的数据uint8_t data_to_write[2] = {0x01, 0x02};// 定义EEPROM的页大小#define EEPROM_PAGE_SIZE 32// 定义EEPROM的页地址uint8_t page_address = 0;// 函数声明void write_byte(uint8_t address, uint8_t value);void write_data(uint8_t page, uint8_t *data, uint8_t length);int main() {// 初始化I2C总线i2c_init();// 写入数据到EEPROMwrite_data(page_address, data_to_write, sizeof(data_to_write));// 其他代码...// 主循环while(1) {// 读取EEPROM中的数据// 其他代码...}}// 函数定义void write_byte(uint8_t address, uint8_t value) {// 写入一个字节到EEPROM的指定地址// 实现细节取决于你的硬件和I2C库}void write_data(uint8_t page, uint8_t *data, uint8_t length) {// 将数据写入EEPROM的指定页面// 实现细节取决于你的硬件和I2C库// 确保写入的数据不超过EEPROM页的大小if (length > EEPROM_PAGE_SIZE) {length = EEPROM_PAGE_SIZE;}// 写入数据// 实现细节取决于你的硬件和I2C库}```请注意,这个示例程序是非常基础的,它没有包含错误检查和处理,也没有实现具体的I2C 通信细节。
ATM机的简单操作系统
先大概了解下ATM机的一般运行过程:
第一眼用户界面
欢迎使用 银行
请输入
卡号:
密码:
日期时间
之后用系统验证卡号是否存在,以及密码和卡号是否匹配。如果卡号和密码不符的话,则
欢迎使用 银行
请重新输入
卡号:
密码:
你还有3次机会(再错就递减一次)
如果正确的话,则
欢迎使用 银行
1ቤተ መጻሕፍቲ ባይዱ查询余款
2、取款
3、存款
4、转账
5、查看个人信息
6、退出
请输入你想要的功能序号:
然后没完成一个功能需求都会在跳回上一个界面,同时如果用户超过15秒没有操作会提醒用户“如果您没有其他需求,请退出。”如果用户30秒没有操作会自动退出。
细节和难点:
1、建立所有用户的信息管理系统
c语言上机实验题及参考答案
5、两个乒乓球队进行比赛,各出3人,甲队为A,B,C 3人,乙队为X,Y,Z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单。A说他不和X比,C说他不和X、Z比。请编程序找出3队赛手的名单。(C语言源程序文件名为45.c,本程序运行结果:A--Z B--X C--Y)
2 14 14
5 10 15
8 6 16
11 2 17)
2、编写程序:输入两个正整数,求其最大公约数和最小公倍数。(如输入12和8,则最大公约数为4,最小公倍数为24)(C语言源程序文件名为42.c。要求求最大公约数用欧几里得的辗转相除法实现)。
3、编写程序实现以下功能:输入一个正整数,打印出它是否素数。(C语言源程序文件名为43.c)
例如:有定义int a=3;执行输出语句:printf(“a=%3d”,a);则输出结果显示为:a= 3(3左边有两个空格)
n(代表一个正整数)
对实数,表示输出n位小数。
例如:有定义float x=1.2;执行输出语句:printf(“x=%6.2f”,x);则输出结果显示为:x= 1.20(数字左边有两个空格)。
三、附加题:
9、编程实现:从键盘上输入一个三位正整数m,输出将m的个位,十位,百位反序而成的三位数(例如:输入m的值123,则输出m的值为321)(要求:文件名为15.c,提示:可用算术运算符“/”和“%”先分离出m的各个位数,再重新组合成新的数,例如用表达式“123%10”就能求出123的个位数3)。
三、实验题目:
if语句基本形式:if(条件){语句一;}
JS练习-简易ATM机案例
JS练习-简易ATM机案例我的代码的思路是第⼀步输⼊⽤户名和密码进⼊ATM机操作系统代码如下:var UserName ='',PassWord = '';var UserName = prompt('请输⼊⽤户名');var PassWord = prompt('请输⼊密码');while (UserName !== 'admin' || PassWord !== 'admin'){UserName = prompt('请输⼊⽤户名');PassWord = prompt('请输⼊密码');}alert('登陆成功,欢迎您进⼊ATM机系统!');第⼆步请选择业务 1 存款-2 取款-3 查询余额-4 退出系统定义变量现有余额变量为money 存取钱变量为balance 选择序号变量为num 代码如下: var money = 100; // money为现有余额var balance = 0; // balance为存取钱的变量var num = prompt('选择您的业务: \n 1. 存款 \n 2. 取款 \n 3. 余额查询 \n 4. 退出系统');第三步进⼊步骤我这⾥⽤的是swich case 匹配对应的序号选择代码如下:要注意的是prompt取过来的值是字符串类型的所以需要转换⼀下转成数值型变量 parseInt每⼀个case后⾯需要重复加这句代码这样才会连贯整个程序不然会有bug 当然你们可以考虑⽤循环来做这个num = prompt('选择您的业务: \n 1. 存款 \n 2. 取款 \n 3. 余额查询 \n 4. 退出系统');switch (Number(num)){case 1:var balance = prompt('请输⼊存款⾦额:');money = parseInt(balance) + parseInt(money);console.log(money);alert('存款成功,您⽬前的余额为'+ money +'元');num = prompt('选择您的业务: \n 1. 存款 \n 2. 取款 \n 3. 余额查询 \n 4. 退出系统');case 2:balance = prompt('请输⼊取款⾦额:');if (parseInt(balance) > money){alert('您的余额不⾜,请重新输⼊');}else {money = parseInt(money) - parseInt(balance);}alert('取款成功,您⽬前的余额为'+ money +'元');num = prompt('选择您的业务: \n 1. 存款 \n 2. 取款 \n 3. 余额查询 \n 4. 退出系统');case 3:alert('您的余额为'+ money +'元');num = prompt('选择您的业务: \n 1. 存款 \n 2. 取款 \n 3. 余额查询 \n 4. 退出系统');case 4:alert('即将退出系统,请取回您的银⾏卡!');break;default:alert('您输⼊的序号有误,请重新输⼊');num = prompt('选择您的业务: \n 1. 存款 \n 2. 取款 \n 3. 余额查询 \n 4. 退出系统');}。
(1小时学会C语言51单片机)C语言入门教程1
我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。
一般只须连接晶体、VCC、GND、RST即可,一般情况下,A T89C51的31脚须接高电平。
#include<reg51.h> //头文件定义。
或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。
//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。
因为我们把LED的正通过电阻接至VCC。
P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。
那么这样就能达到了我们预先的要求了。
while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。
如果我们要试着点亮其他的LED,也类似上述语句。
这里就不再讲了。
点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。
我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。
假设我们有8个LED分别接在P1口的8个引脚上。
硬件连接,在P1_1--P1_7上再接7个LED即可。
例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1)查询模块主菜单
2)查询明细
4.取款模块
1)当余额不足50时,无法进入取款模块
2)取款模块主菜单
3)便捷取款
4)手动输入取款金额
输错时,返回重新输入
5)取款后的菜单
6)取款完成后选择显示余额
5.存款模块
1)解决输入错误问题
2)存款成功
6.密码修改模块
1)原密码输错时,返回重新输入,不提供退出功能
{
PR("卡号应为16位\n");
system("pause");
system("}
if (LockAccountTopic(no))
{.\n");
now_acc->balance -= money;
Save();
Log(-money, now_acc->no);
PR("取款成功\n\n");
转帐:先输入一个帐户号(已保存在帐户信息文件中),然后显示一部分用户名(如:张*山),储户确认无误后,再输入50或100的倍数模拟为转帐金额,请注意:转帐金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单;
退出:退出系统。
2.定义如下结构体类型:
“日期”结构体Date:成员有:year(年)、month(月)、day(日);
system("pause");
}
/**********存款**********/
void Depositing()
{
long money;
do
{
PR("请输入存款金额(50的倍数),单次存款金额不得超过20000元:");
fflush(stdin);
scanf("%ld", &money);
if (money < 0 || money > 20000 || money % 50)
六、设计心得
1.各函数的功能要相对独立,逐步求精。
2.如果函数的参数为指针,且仅作为输入参数,则应在类型前加const,以防止该指针在函数体内被意外修改
附:程序代码
/***
*运行本程序前,请在本程序根目录下建立文件“”,格式如下:
*卡号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;.\n");
if (!(fp = fopen("", "r")))
5.在查询模块中加入了存取记录明细查询
四、程序运行截图及说明
1.登陆模块
1)卡号不为16位时,输出提示并返回重新输入
2)卡号不存在时,输出提示并返回重新输入
3)密码位数输错时,输出提示并返回重新输入密码,不作为密码错误处理,也无需重新输入卡号
4)密码连续输错三次时,锁定卡号,今日无法登录
2.登录后的系统主菜单
{.\n");
now_acc->balance += money;
Save();.\n");
now_acc->balance -= money;
aimsite->balance += money;
Save();//保存账户数据
Log(-money, now_acc->no);//当前账户存取记录
“帐户”结构体Account:成员有:no(帐户号)、name(姓名)、balance(余额)
“存取款记录”结构体Record,:成员有:no(帐户号)、date(日期)、number(数量,可正可负,正表示存款,负表示取款)
3.帐户信息存放在文件,储户存取款记录保存在中;
4.采用模块化程序设计方法来实现,即main()显示主菜单、调用相关函数实现相应功能,起主控作用。
五、采用的主要技术
1.宏定义:由于本程序的printf语句较多,为了便于编写,故用PR代替
2.链表:账户信息采用链表结构,内存动态分配,使用内存无限制,可以扩展到所有可以使用的内存
3.switch多分支选择结构
4.文本文件的读写
5.利用头文件,简便地获取系统日期
6.system()函数和fflush()函数的简单使用
{
PR("\07");.”提示
}
/**********登录**********/
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)
C语言模拟ATM机
一、实验目的
通过设计一个ATM机模拟操作的程序,全面运用课程的主要知识点,巩固对模块化程序设计、文件操作的理解,提高软件编程能力。
二、实验要求
要求每人独立完成设计,编写一个ATM机模拟操作程序。提交实验报告、源程序、程序运行截图。
1.程序具有以下功能:
1)登录系统:
输入卡号(16位)、密码(6位),只有卡号、密码同时正确(帐户信息存放在文件中)才能进入系统;
2)操作功能:
查询:查询帐户的存款余额。按任意键返回主菜单;
修改密码:连续输入两次新密码(两次输入结果完全相同)后,新密码取代旧密码,并存放到帐户信息文件中。之后可返回主菜单;
取款:输入50或100的倍数模拟为取款金额,请注意:取款金额不得超过帐户余额,操作后帐户余额应相应减少。之后可返回主菜单;
存款:输入50或100的倍数模拟为存款金额,现假设存款金额不得超过20000元,操作后帐户余额应相应增加。之后可返回主菜单;
2) 密码位数输错、两次输入新密码不一致时,返回重新输入
3)输入无误时
7.转账模块
1)转入卡号位数输错时,提示并返回重新输入
2)未查找到该卡号时,输出提示,提供退出功能,键入除*外任意键重新输入
3)转入卡号与当前卡号相同时,输出提示
4)输出转入卡账户的部分用户名
5)解决转账金额输错的问题
6)转账成功
5.附加功能:
储户一天内输错密码的次数不能超过3次,否则无法进入系统;
应避免输入存款金额、取款金额为负数等异常情况的出现。
三、程序已经实现的功能点
实验要求均已实现。此外还有:
1.卡号、密码位数输错时,提示并返回重新输入,
2.简化取款时的输入
3.转账时,转账账户为原账户时,提示并返回重新输入
4.在多个模块中添加了退出功能,无需回到主菜单即可退出系统