模拟银行排队取号系统_命令行版_代码
自动取款机源代码(C and C )
自动取款机源代码(C and C++).txt如果你看到面前的阴影,别怕,那是因为你的背后有阳光!我允许你走进我的世界,但绝不允许你在我的世界里走来走去。
#include <iostream.h>#include <fstream.h>#include <stdio.h>#include <time.h>#include <string.h>#include <windows.h>struct Acount{char name[20];int cardnu;int code;double Ban;char time[26];};struct Acount user;int i;void Welcome(){cout<<"* *"<<endl;cout<<"* 欢迎使用新利银行ATM机*"<<endl;cout<<"*****************************************\n"<<endl;cout<<"Please select your native lanuage <请选择用户语言>\n"<<endl;cout<<" 1. English\n 2. 中文\n 3. Exit <退出系统>\n"<<endl;cout<<"Enter you choice <between 1to 3>:";}char *_time (){time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );return asctime (timeinfo);}int find(int card){ i=-1;ifstream in("acount.dat",ios::binary|ios::nocreate);if(!in)return 0;while(!in.eof()){ i++;in.read((char * )&user,sizeof(user));if(user.cardnu==card){in.close();return 1;}}in.close();return 0;}int cardnumber2(){int n;fstream file("账号.dat",ios::binary|ios::nocreate|ios::in|ios::out); if(!file){cout<<"不能打开此文件"<<endl;return 0;}n=0;while(!n){file.read((char*)&n,sizeof(int));}int m=0;file.seekp(-4,ios::cur);file.write((char*)&m,sizeof(int));file.close();return n;}void print2(){system("cls");char time[25];strcpy(time,_time());time[24]=' ';cout<<" AUTOMATIC TELLER MACHINE - HENER BANKING SYSTEM"<<endl;cout<<" CARDHOLDER BILL COPY 持卡人存根"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<"| 终端机号 | 10203 |"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<"| 卡别 | 信用卡 |"<<endl;cout<<"| 卡号 | "<<user.cardnu<<" |"<<endl; cout<<"| | |"<<endl;cout<<"| 交易类型 | 银行卡开户 |"<<endl;cout<<"| 交易批号 | 198447 |"<<endl;cout<<"| 时间/日期 | "<<time<<" |"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<"| CAEDHOLEDER SINATURE | |"<<endl;cout<<"| 持卡人签名 | |"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<" I ACKNOWLEDGE SATISFACTORY RECEIPT OF RELATIVE SERVICES"<<endl;cout<<" 我同意以上条款"<<endl;}void print2(int x){system("cls");char time[25];strcpy(time,_time());time[24]=' ';cout<<" AUTOMATIC TELLER MACHINE - HENER BANKING SYSTEM"<<endl;cout<<" CARDHOLDER BILL COPY 持卡人存根"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<"| 终端机号 | 10203 |"<<endl;cout<<"+-----------------------------------------------------------------+"<<endcout<<"| 卡别 | 信用卡 |"<<endl;cout<<"| 卡号 | "<<user.cardnu<<" |"<<endl; cout<<"| | |"<<endl;if(x>0)cout<<"| 交易类型 | 现金存款 |"<<endl;else{ x=-x;cout<<"| 交易类型 | 现金取款|"<<endl;}cout<<"| 交易批号 | 198447 |"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<"| 时间/日期 | "<<time<<" |"<<endl;cout<<"| 交易金额 | "<<x<<" |"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<"| CAEDHOLEDER SINATURE | |"<<endl;cout<<"| 持卡人签名 | |"<<endl;cout<<"+-----------------------------------------------------------------+"<<end l;cout<<" I ACKNOWLEDGE SATISFACTORY RECEIPT OF RELATIVE SERVICES"<<endl;cout<<" 我同意以上条款"<<endl;cout<<"按任意键返回";cin.get();cin.get();}void Saving2(){char ch;int Tem;cout<<"请将现金送到指定入口 :";cin>>Tem;user.Ban+=Tem;fstream out("acount.dat",ios::in|ios::out|ios::binary);out.seekp(i*sizeof(user),ios::beg);out.write((char*)&user,sizeof(user));out.close();cout<<"\t\t\t你已存入"<<Tem<<endl;Sleep(3000);cout<<"需要打印凭条吗?(Y = 是. N = 否):"<<endl;cin>>ch;if(ch=='y'||ch=='Y')print2(Tem);}void Drawmoney2(){char ch;int Tem;cout<<"请输入所取金额(必须是100的整数倍) :";cin>>Tem;while(Tem%100){cout<<"Sorry,请重新输入";cin>>Tem;}user.Ban-=Tem;fstream out("acount.dat",ios::in|ios::out|ios::binary);out.seekp(i*sizeof(user),ios::beg);out.write((char*)&user,sizeof(user));out.close();cout<<"请在30秒内取走现金;"<<Tem<<endl;Sleep(3000);cout<<"需要打印凭条吗 ? (y = 是,n = 否):";cin>>ch;if(ch=='y'||ch=='Y')print2(-Tem);}void Change2(){int tem,j=3;cout<<"请输入你的原密码";do{cin>>tem;j--;if(tem==user.code){cout<<"请输入你的新密码:";cin>>tem;user.code=tem;fstream out("acount.dat",ios::binary|ios::in|ios::out);out.seekp(i*sizeof(user),ios::beg);out.write((char*)&user,sizeof(user));out.close();cout<<"密码修改成功,请记下此密码 "<<tem<<endl;Sleep(2000);j=0;cout<<"按任意键返回";cin.get();cin.get();}elsecout<<"密码错误请重新输入 (你还有"<<j<<"次输入机会)";}while(j);}void Select2(){int choice,code;cout<<"请输入你的密码 ";do{cin>>code;if(user.code==code)break;elsecout<<"密码错误,请重新输入 ";}while(2);do{cout<<"请选择业务功能"<<endl;cout<<" 1. 人民币存款业务\n 2. 人民币取款业务\n 3. 余额查询\n 4. 修改密码\n 5. 返回\n"<<endl;cout<<"请选择<1 到 5 > :";do{cin>>choice;switch(choice){case 1: Saving2(); break;case 2: Drawmoney2(); break;case 3: { cout<<"你卡上的余额为 :"<<user.Ban<<endl ; cout<<"按任意键返回"<<endl;getchar();break;}case 4: Change2(); break;case 5:return ;break;default:cout<<"输入不合法,请重新输入:";}}while(choice>5||choice<1);}while( choice!=5);}void TellerMach2(){int tem;char ch;do{cout<<"请插入银行卡(0 = 取消):";cin>>tem;if(tem==0)break;else{if(find(tem)==0){cout<<"对不起,本ATM机不接受你的银行卡!(按F键继续,按任意键返回上一层)"<<endl;cin>>ch;if(ch!='F'||ch=='f')break;}else Select2();}}while(1);}void Management2(){int choice;cout<<"请选择你的业务功能\n\n 1. 银行卡开户业务\n 2. 返回\n"<<endl;cout<<"请选择<1 到 2>:";do{cin>>choice;if(choice==2)return ;else if(choice==1){ofstream out("acount.dat",ios::binary|ios::app);cout<<"请输入你的姓名:";cin>>;user.cardnu=cardnumber2();cout<<"你的账号是"<<user.cardnu<<endl;int n;cout<<"\n请输入你的密码 (必须是6位):";do{cin>>n;if(n<100000)cout<<"密码位数不够,请重新输入:";if(n>999999)cout<<"密码过长,请重新输入:";}while(n<100000||n>999999);user.code=n;user.Ban=10.0;strcpy(user.time,_time());out.write((char *)& user,sizeof(user));out.close();cout<<"是否打印凭条吗?(y = 是,n = 否 ):";char ch;cin>>ch;if(ch=='y'||ch=='Y')print2();cout<<"按任意键返回上一层"<<endl;getchar();break;}elsecout<<"输入错误!请重新输入:";} while(1) ;}int cardnumber1(){int n;fstream file("账号.dat",ios::binary|ios::nocreate|ios::in|ios::out);if(!file){cout<<"Can't open the file"<<endl;return 0;}n=0;while(!n){file.read((char*)&n,sizeof(int));}int m=0;file.seekp(-4,ios::cur);file.write((char*)&m,sizeof(int));file.close();return n;}void print1(){system("cls");char time[25];strcpy(time,_time());time[24]=' ';cout<<" AUTOMATIC TELLER MACHINE - HENER BANKING SYSTEM"<<endl;cout<<" CARDHOLDER BILL COPY 持卡人存根"<<endl;cout<<"+-----------------------------------------------------------------+"<<endcout<<"| TERMINAL ID | 10203 |"<<endl;cout<<"+-----------------------------------------------------------------+"<<endl;cout<<"| CARD TYPE | CREDIT CARD OF HENRY BANK |"<<endl;cout<<"| CARD NUMBER | "<<user.cardnu<<"|"<<endl;cout<<"| | |"<<endl;cout<<"| TRENS TYPE | OPEN ACOUNT |"<<endl;cout<<"| BATCH NO. | 198447 |"<<endl;cout<<"| | |"<<endl;cout<<"| DATA/TIME | "<<time<<" |"<<endl;cout<<"+-----------------------------------------------------------------+"<<endl;cout<<"| CAEDHOLEDER SINATURE | |"<<endl;cout<<"| 持卡人签名 | |"<<endl;cout<<"+-----------------------------------------------------------------+"<<endl;cout<<" I ACKNOWLEDGE SATISFACTORY RECEIPT OF RELATIVE SERVICES"<<endl;cout<<" 我同意以上条款"<<endl;cout<<"Press any ken to exit";cin.get();cin.get();}void print1(int x){system("cls");char time[25];strcpy(time,_time());time[24]=' ';cout<<" AUTOMATIC TELLER MACHINE - HENER BANKING SYSTEM"<<endl;cout<<" CARDHOLDER BILL COPY 持卡人存根"<<endl;cout<<"+-----------------------------------------------------------------+"<<endl;cout<<"| TERMINAL ID | 10203 |"<<endl;cout<<"+-----------------------------------------------------------------+"<<endl;cout<<"| CARD TYPE | CREDIT CARD OF HENRY BANK |"<<endl;cout<<"| CARD NUMBER | "<<user.cardnu<<"|"<<endl;cout<<"| | |"<<endl;if(x>0)cout<<"| TRANS TYPE | DEPOSIT CASH |"<<endl;else{ x=-x;cout<<"| TRANS TYPE | TAKING CASH |"<<endl;}cout<<"| BATCH NO. | 198447 |"<<endl;cout<<"| | |"<<endl;cout<<"| TOTAL AMOUNT | "<<x<<" |"<<endl;cout<<"| DATA/TIME | "<<time<<" |"<<endl;cout<<"+-----------------------------------------------------------------+"<<endl;cout<<"| CAEDHOLEDER SINATURE | |"<<endl;cout<<"| 持卡人签名 | |"<<endl;cout<<"+-----------------------------------------------------------------+"<<endl;cout<<" I ACKNOWLEDGE SATISFACTORY RECEIPT OF RELATIVE SERVICES"<<endl;cout<<" 我同意以上条款"<<endl;cout<<"Press any ken to exit";cin.get();cin.get();}void Saving1(){char ch;int Tem;cout<<" Please deliver cash to appointment entrance :";cin>>Tem;user.Ban+=Tem;fstream out("acount.dat",ios::in|ios::out|ios::binary);out.seekp(i*sizeof(user),ios::beg);out.write((char*)&user,sizeof(user));out.close();cout<<"\t\t\tYou have deposit "<<Tem<<endl;Sleep(3000);cout<<"Do you want to print?(Y/N):"<<endl;cin>>ch;if(ch=='y'||ch=='Y')print1(Tem);}void Drawmoney1(){char ch;int Tem;cout<<" Please input the amount of moneey you want (it must be is the mutipleof 100) :";cin>>Tem;while(Tem%100){cout<<"Sorry,Please input again";cin>>Tem;}user.Ban-=Tem;fstream out("acount.dat",ios::in|ios::out|ios::binary);out.seekp(i*sizeof(user),ios::beg);out.write((char*)&user,sizeof(user));out.close();cout<<"Please take the cash in 30 seconds;"<<Tem<<endl;Sleep(3000);cout<<"Do you want a print ? (y\n):";cin>>ch;if(ch=='y'||ch=='Y')print1(-Tem);}void Change1(){int tem,j=3;cout<<"Please injout you original password";do{cin>>tem;j--;if(tem==user.code){cout<<"Please input you new password:";cin>>tem;user.code=tem;fstream out("acount.dat",ios::in|ios::out|ios::binary);out.seekp(i*sizeof(user),ios::beg);out.write((char*)&user,sizeof(user));out.close();cout<<"Revise the password successfully, make note of this password please "<<tem<<endl;Sleep(2000);j=0;cout<<"press any key to exit";cin.get();cin.get();}elsecout<<"password error ,input again (You still have "<<j<<" chances)";}while(j);}void Select1(){int choice,code;cout<<"Please input your password ";do{cin>>code;if(user.code==code)break;elsecout<<"Password error ,input again ";}while(2);do{cout<<"Choose the business function please"<<endl;cout<<" 1. Bank deposit of RMB\n 2. Taking RMB \n 3. inquire balance\n 4. Revise the password\n 5. exit\n"<<endl;cout<<"Please choose bettween <1 to 5 > :";do{cin>>choice;switch(choice){case 1: Saving1(); break;case 2: Drawmoney1(); break;case 3: { cout<<"Your balance of acount is :"<<user.Ban<<endl ; cout<<"press any key to exit"<<endl;getchar();break;}case 4: Change1(); break;case 5:return ;break;default:cout<<"input error ,Please input again:";}}while(choice>5||choice<1);}while( choice!=5);}void TellerMach1(){char ch;do{cout<<"Please insert the bank card(0 = cancel):";cin>>user.cardnu;if(user.cardnu==0)break;else{if(find(user.cardnu)==0){cout<<"Sorry ,your card is accepted !(Press F to continue,Press enter to exit)"<<endl;cin>>ch;if(ch!='F'||ch=='f')break;}else Select1();}}while(1);}void Management1(){int choice;cout<<"Please choose your business functions\n\n 1.Bank Card Account Business\n 2. Exit\n"<<endl;cout<<"Please choose between <1 to 2>:";do{cin>>choice;if(choice==2)return ;else if(choice==1){ofstream out("acount.dat",ios::binary|ios::app);cout<<"Please input your name:";cin>>;user.cardnu=cardnumber1();cout<<"Your acount is"<<user.cardnu<<endl;int n;cout<<"\nPlease input your password (the length must be 6):";do{cin>>n;if(n<100000)cout<<"The length of password is too short,please change again:";if(n>999999)cout<<"The length of password is too large,please change again:";}while(n<100000||n>999999);user.code=n;user.Ban=10.0;strcpy(user.time,_time());out.write((char *)& user,sizeof(user));out.close();cout<<"Do you want to print?(y/n ):";char ch;cin>>ch;if(ch=='y'||ch=='Y')print1();cout<<"Press any key to exit "<<endl;getchar();break;}elsecout<<"input error , please input again:";} while(1) ;}void Chinese(){int choice;do{cout<<"\n\n 请选择你的模式 \n"<<endl;cout<<" 1. ATM柜员机\n 2.银行业务管理\n 3. 帮助\n 4. 返回\n"<<endl;cout<<"请选择 <1 到 4>:";do{cin>>choice;switch(choice){case 1 : TellerMach2(); break;case 2 : Management2(); break;case 3 : { cout<<" 你必须先在“银行业务管理”里开户才能使用本取款机,按任意键返回";cin.get();cin.get();break;}case 4 : { return ; break;}default : cout<<"输入不合法,请重新输入 :";}if(choice==3)cout<<"\n输入你的选择:";}while(choice!=1&&choice!=2);}while(1);}void English(){int choice;do{cout<<"\n\nPlease input patten\n"<<endl;cout<<" 1. ATM\n 2.Banking Management\n 3.Help\n 4. Exit\n"<<endl;cout<<"Please choose between <1 to 4>:";do{cin>>choice;switch(choice){case 1 : TellerMach1(); break;case 2 : Management1(); break;case 3 : { cout<<" You must open a acount in 《Banking Management》before you use the ATM,Press any key to continue";cin.get();cin.get();break;}case 4 : { return ; break;}default : cout<<"input error,Please inout again";}if(choice==3)cout<<"\n Please your choice :";}while(choice!=1&&choice!=2);}while(1);}int main(){Welcome();int choice;do{cin>>choice;if(choice==3)break;else if(choice==1)English();else if(choice==2)Chinese();else cout<<"输入错误,请重新输入:";}while(choice!=1&&choice!=2);system("cls");cout<<"\n\n\n\n\t\t\t非常感谢你的使用!!\n"<<endl; cout<<"按任意键结束";cin.get();cin.get();return 0;}。
模拟ATM程序代码
if(p)
{
while(t<3)
{
i=0;
printf("\n\t密码: ");
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
if(strcmp(p->password,pass)==0)
p=head;
system("cls");
if(p)
{
printf("\n");
printf("\n\t账号: ");
scanf("%s",acc);
while(p)
{
if(strcmp(p->account,acc)==0)
break;
else p=p->next;
}
while(t<3)
{
i=0;
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
printf("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n");
{
system("cls");
printf("\n\t杰西银行ATM自动存取款机用户登录成功\n");
实验2单服务台单队列排队系统仿真
实验2排队系统仿真一、学习目的1.了解仿真的特点2.学习如何建构模型3.熟悉eM-Plant基本的对象和操作4.掌握排队系统的特点与仿真的实现方法二、问题描述该银行服务窗口为每个到达的顾客服务的时间是随机的,表2.4是顾客服务时间纪录的统计结果表2.4 每个顾客服务时间的概率分布对于上述这样一个单服务待排队系统,仿真分析30天,分析该系统中顾客的到达、等待和被服务情况,以及银行工作人员的服务和空闲情况。
三、系统建模3.1 仿真目标通过对银行排队系统的仿真,研究银行系统的服务水平和改善银行服务水平的方法,为银行提高顾客满意度,优化顾客服务流程服务。
3.2.系统建模3.2.1 系统调研1. 系统结构: 银行服务大厅的布局, 涉及的服务设备2. 系统的工艺参数: 到达-取号-等待-服务-离开3. 系统的动态参数: 顾客的到达时间间隔, 工作人员的服务时间4. 逻辑参数: 排队规则, 先到先服务5. 系统的状态参数: 排队队列是否为空, 如果不为空队长是多少, 服务台是否为空6. 系统的输入输出变量:输入变量确定其分布和特征值,顾客的到达时间间隔的概率分布表和每个顾客被服务时间的概率分布. 输出变量根据仿真目标设定. 包括队列的平均队长、最大队长、仿真结束时队长、总服务人员、每个顾客的平均服务时间、顾客平均排队等待服务时间、业务员利用率等。
3.2.2系统假设1.取号机前无排队,取号时间为02.顾客排队符合先进先出的排队规则3.一个服务台一次只能对一个顾客服务4.所有顾客只有一种单一服务5.仿真时间为1个工作日(8小时)6.等候区的长度为无限长3.2.3系统建模系统模型:3.2.4 仿真模型1.实体:银行系统中的实体是人(主动体)2.属性:到达时间间隔、接受服务的时间、接受服务类型3.事件:顾客到达、开始取号、取号结束、进入队列、出队列、接受服务、服务完成、离开银行。
4.活动:到达、取号、排队、服务、离开5.资源:取号机、排队的座椅、服务柜台4 系统仿真4.1 eM-plant 界面与主要控件介绍1. 实体:eM-Plant 中包括3类实体:entity ,container ,transporter 。
银行管理系统c语言程序设计代码
银行管理系统c语言程序设计代码以下是一个简单的银行管理系统的C语言程序设计代码示例:```c#include <stdio.h>#include <stdlib.h>struct BankAccount {int accountNumber;char accountHolder[50];float balance;};void createAccount(struct BankAccount *account) {printf("请输入账户号码: ");scanf("%d", &(account->accountNumber));printf("请输入账户持有人姓名: ");scanf("%s", account->accountHolder);printf("请输入账户余额: ");scanf("%f", &(account->balance));printf("账户创建成功!\n");}void deposit(struct BankAccount *account) {float amount;printf("请输入存款金额: ");scanf("%f", &amount);account->balance += amount;printf("存款成功!\n");}void withdraw(struct BankAccount *account) {float amount;printf("请输入取款金额: ");scanf("%f", &amount);if (amount > account->balance) {printf("余额不足,取款失败!\n");} else {account->balance -= amount;printf("取款成功!\n");}}void displayAccount(struct BankAccount *account) {printf("账户号码: %d\n", account->accountNumber);printf("账户持有人姓名: %s\n", account->accountHolder); printf("账户余额: %.2f\n", account->balance);}int main() {struct BankAccount account;int choice;while (1) {printf("\n银行管理系统\n");printf("1. 创建账户\n");printf("2. 存款\n");printf("3. 取款\n");printf("4. 显示账户信息\n");printf("5. 退出\n");printf("请选择操作: ");scanf("%d", &choice);switch (choice) {case 1:createAccount(&account); break;case 2:deposit(&account);break;case 3:withdraw(&account);break;case 4:displayAccount(&account);break;case 5:printf("感谢使用银行管理系统,再见!\n");exit(0);default:printf("无效的选择,请重新输入。
银行排队系统实验报告
一、实验目的1. 熟悉银行排队系统的基本原理和设计方法;2. 掌握使用C语言实现银行排队系统的基本操作;3. 培养团队合作精神和实践能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 开发工具:Visual Studio三、实验内容1. 银行排队系统简介银行排队系统是一种模拟真实银行排队场景的程序,主要功能包括:客户到达、排队、服务、离开等。
通过模拟银行排队过程,我们可以了解银行排队系统的基本原理,并为实际应用提供参考。
2. 系统设计(1)数据结构本系统采用队列数据结构来存储排队客户。
队列是一种先进先出(FIFO)的数据结构,适用于模拟银行排队场景。
(2)功能模块本系统主要包括以下功能模块:1)客户到达模块:模拟客户到达银行,并随机生成客户信息,如客户ID、到达时间、服务时间等;2)排队模块:根据客户到达顺序,将客户信息依次加入队列;3)服务模块:按照客户排队顺序,为每位客户提供服务,并更新客户状态;4)离开模块:客户服务完成后,从队列中移除该客户信息;5)统计模块:记录客户服务次数、平均等待时间、最长等待时间等数据。
(3)实现方法1)客户到达模块:使用随机数生成器生成客户信息,并将客户信息存入队列;2)排队模块:当客户到达时,将客户信息加入队列尾部;3)服务模块:从队列头部取出客户信息,为该客户提供服务,并更新客户状态;4)离开模块:当客户服务完成后,从队列中移除该客户信息;5)统计模块:记录客户服务次数、平均等待时间、最长等待时间等数据。
3. 实验步骤(1)初始化系统,设置窗口数量和客户到达时间间隔;(2)模拟客户到达,生成客户信息并加入队列;(3)按照客户到达顺序,为每位客户提供服务;(4)记录客户服务次数、平均等待时间、最长等待时间等数据;(5)统计实验结果,分析银行排队系统性能。
四、实验结果与分析1. 实验结果通过实验,我们得到了以下数据:(1)客户服务次数:100次;(2)平均等待时间:5分钟;(3)最长等待时间:15分钟。
ATM自助取款机系统java代码(大全)
ATM自助取款机系统java代码(大全)第一篇:ATM自助取款机系统java代码(大全)public void actionPerformed(ActionEvent e)//界面显示控制 {String IC_Number=“";String password=”“;String IC_No=”“;z30.setVisible(false);floatleftmoney=0;floatmoneys=0;float mon=0;float money1=0;float money2=0;if(true){int No_50=0,No_100=0;String strin=”select NO_50,NO_100 from ATM ATM_ID='123456789'“;ResultSetrsSQLSelect=executeQuery(stri n);try{ if(rsSQLSelect.next()){No_50=Integer.parseInt(rsSQLSelect.getString(”NO_50“));No_100=Integer.parseInt(rsSQLSelect.getString(”NO_100“));where}}catch(Exception er){System.out.println(”查询ATM机信息出错!“);}if(No_50==0&&No_100==0){z1.setVisible(false);t1.setText(”对不起,本ATM自动取款机暂停服务!“);cl.show(c,”1“);}}cl.show(c,”1“);if(e.getSource()==z1){t3.setText(”“);text1.setText(”“);cl.show(c,”2“);}if(e.getSource()==z4||e.getSource()==z6||e.getSource()==z1 1||e.getSource()==z16||e.getSource()==z18||e.getSource()==z22) { closeDBConnectio n();cl.show(c,”1“);}if(e.getSource()==z2){ closeDBConnection();System.exit(0);}if(e.getSource()==z3){ IC_Number=text1.getText().trim();if(getname(IC_Number)){z5.setVisible(true);pw1.setVisible(true);t4.setVisible(true);pw1.setText(”“);t5.setText(”“);cl.show(c,”3“);}else{t3.setText(”您输入的卡号不存在,请重新输入!“);cl.show(c,”2“);}}if(e.getSource()==z5){password=pw1.getText().trim();IC_Number=text1.getText().tr im();if(!login(IC_Number,password)){t5.setText(”您输入的密码错误,请重新输入!“);pw1.setText(”“);n--;cl.show(c,”3“);}else{t5.setText(”“);cl.show(c,”4“);}if(n<0){n=2;t5.setText(”您已经三次输入错误密码,谢谢您的使用,欢迎下次光临!“);z5.setVisible(false);pw1.setVisible(false);t4.setVisible(false);cl.show(c,”3“);}}if(e.getSource()==z7){t33.setText(”“);cl.show(c,”5“);}if(e.getSource()==z8)//余额查询 { DBAccess d=new DBAccess();String str3=”“;String stri=”“;IC_Number=text1.getText().trim();t29.setText(IC_Number);leftmoney=getmoney(IC_Number);t30.setText(Float.toString(leftmoney));stri=”selectbank_name from IC,bank where IC.bank_NO=bank.bank_NO and IC_ID='“+IC_Number+”'“;ResultSetrsSQLSelect=d.executeQu ery(stri);try{if(rsSQLSelect.next()){str3=rsSQLSelect.getString(”bank_name“);//mit();}} catch(Exception er){}t32.setText(str3);cl.show(c,”10“);}if(e.getSource()==z9){t23.setText(”“);cl.show(c,”9“);}if(e.getSource()==z10){t28.setText(”“);cl.show(c,”11“);}if(e.getSource()==z12){ DBAccess d=new DBAccess();IC_Number=text1.getText().trim();fetchmoney=Integ er.parseInt(text2.getText());if(fetchmoney<=0){t9.setText(”取款金额非法!请重新输入!“);text2.setText(”“);cl.show(c,”6“);return;}if(fetchmoney>1000){t9.setText(”每次交易金额最大为1000元!“);text2.setText(”“);cl.show(c,”6“);return;}if(fetchmoney%50!=0){t9.setText(”取款金额只能为50的倍数!“);text2.setText(”“);cl.show(c,”6“);return;} leftmoney=getmoney(IC_Number);if(fetchmoney>leftmoney){t9.setText(”您的余额不足,请重新输入取款金额!“);text2.setText(”“);cl.show(c,”6“);return;}int No_50=0,No_100=0,x_50=0,x_100=0,mo=0;String str1=”select NO_50,NO_100 from ATM where ATM_ID='123456789'“;ResultSetrsSQLSelect=d.executeQuery(s tr1);try{ if(rsSQLSelect.next()){No_50=Integer.parseInt(rsSQLSelect.getString(”NO_50“));No_100=Integer.parseIn t(rsSQLSelect.getString(”NO_100“));}}catch(Exception er){System.out.println(”查询ATM机信息出错!“);}x_100=fetchmoney/100;if(No_100{ mo=fetchmoney-No_100*100;x_50=mo/50;if(x_50>No_50){t9.setText(”取款机现钞不足!“);text2.setText(”“);cl.show(c,”6“);return;}else{No_50=No_50-x_50;No_100=0;}}else{No_100=No_100-x_100;x_50=(fetchmoney-x_100*100)/50;if(x_50>No_50){t9.setText(”取款机50面值现钞不足!“);text2.setText(”“);cl.show(c,”6“);return;}else{No_50=No_50-x_50;}}String str2=”update ATM set NO_50=“+No_50+” where ATM_ID='“+ATM_id+”'“;String str3=”update ATM set NO_100=“+No_100+” whereATM_ID='“+ATM_id+”'“;d.executeUpdate(str2);d.executeUpd ate(str3);setmoney(fetchmoney,IC_Number);t12.setText(Float.toString(fetchmoney));cl.show(c,”7“);text2.setText(”");第二篇:ATM取款机java课程设计黄淮学院JAVA 课程设计报告题目:《ATM柜员机》课程设计学院:信息工程学院专业:计算机科学与技术指导老师:二0一三年六月目录课程设计过程概述.......................................................................................3 2 课程设计题目描述和基本设计要求...........................................................3 3 系统需求分析...............................................................................................3 3.1 功能需求分析···················································································· 3 3.2 其他需求分析.................................................................................... 4 4 系统设计........................................................................................................4 4.1 总体设计........................................................................................... 4 4.2 ATM柜员机界面设计......................................................................... 5 4.3 各功能模块设计.. (7)4.3.1 登陆页面模块设计............................................................. 7 4.3.2 选择服务模块设计............................................................. 8 4.3.3 取款模块设计..................................................................... 9 4.3.4 修改密码模块设计............................................................. 9 4.3.5 退卡模块设计. (10)4.4 异常处理情况说明.......................................................................... 10 5 系统实现与测试.........................................................................................11 6 课程设计总结.............................................................................................13 6.1 遇到的问题及解决办法.................................................................. 13 6.2 心得体会......................................................................................... 14 参考文献..........................................................................................................15 附录 (15)ATM初始账号:000000初始密码:123456ATM柜员机课程设计过程概述2013年6月,JAVA课程设计在1#楼六楼机房进行,持续时间为两周。
基于单片机的银行排队呼叫系统
基于单片机的银行排队呼叫系统作者:胡浩来源:《东方教育》2018年第14期摘要:中国当今社会,经济发展达到了较高的程度,银行作为经济流通枢纽,工作流程必须顺应时代不断进行改进。
本系统是基于51单片机的原理,以51单片机为主控单元,再结合按键、液晶显示、语音播报等模块来模拟银行排队呼叫系统,通过按键模拟一行窗口的呼叫,按下其中的一个按键,显示器就将显示对应的排队号和窗口号,并同时发出语音提示。
显示器不仅能显示窗口号,还可以显示当前等待的人数,以及当时的排队号。
银行排队呼叫系统是针对银行大厅工作流程而设计,是利用计算机的智能计算来管理用户排队的系统,能很好的解决用户在银行柜台排队办理业务时所遇到的拥挤、混乱等现象,能有效的提高用户的体验舒适度。
关键词:语音播报;液晶显示;排队系统;单片机最小系统一、课题研究背景及意义中国当今社会,经济发展达到了较高的程度,人民的物质生活质量也在逐步提高,资金的存取、流动与购买各种金融理财项目已经是人们日常生活中的普遍经济行为,而银行作为社会资金的流通枢纽,在社会各个层次的企业、单位、个人的经济行为中占据了非常重要的地位。
而在银行面对用户的工作过程中,除了极少部分的VIP用户可以通过专属VIP通道快速办理业务外,大部分用户都只能通过排队到柜台窗口办理业务,而银行面向人群极其庞大,导致排队的过程漫长而难熬。
因此,传统的窗口排队服务显然无法给用户带来舒适便捷的服务,而智能排队呼叫系统的开发可以充分的解决这一矛盾,在使银行工作更加效率的同时,也能有效解决顾客站立等待、服务混乱、人员冲突等问题,还能节省顾客的等待时间,提高社会效率。
二、系统实况方框图在该系统(银行排队呼叫系统)设计的准备阶段,通过分析行业现状和需要实现的功能,再通过网络和图书等途径对国內外的各种相关设计方案进行了观察比较,对该系统硬件和相关软件的设计做了较为详细的研究和分析,确立了数个方案,结合实际情况和自身能力选取了其中最合适的一个方案,在后文中将对该设计方案的全部内容进行介绍并分析这个方案的优势及劣势。
银行系统代码
//if ((cashier_vacant[count]>t)){
if(Wnd[count].get_cashier_vacant()>t){
cout<<"第"<<count+1<<"号窗口正在为第"<< Wnd[count].get_cashier_ticket()+1<<"号顾客服务…"<<endl;
#include <iostream>
#include<vector>
#include <queue>
#include <time.h>
#include<iomanip>
#include "customer.h"
using namespace std;
const int CASHIERS = 5; //设置5个窗口
// 每名顾客接受服务所需的时间
int service_time;
// 程序模拟持续的总时间
int last_time;
cout << "***********************模拟银行排队系统***********************\n" << endl;
// 随机数种子
srand(time(NULL));
// 随机数
double rand_num;
int count;
计算机仿真大赛作品—银行排队系统
建立模型
算法设计
编程
输出界面
顾客进来
分配顾客办理业务随机 时间t 分配下一顾客达到间隔 随机时间t0
•随机时间t1[0] •随机时间t1[1] •随机时间t1[2] 。 。 。 。
•随机时间t2[0] •随机时间t2[1] 。 。
•随机时间t3[0] 。 。
•随机时间t4[0] •随机时间t4[1] 。 。 。
(一)选择主题 假设某银行有4个对外业务办理窗口,从早 晨银行开门起不断有客户进入银行,由于每 个窗口某个时刻只能接待一个客户,因此在 客户人数众多时需要在每个窗口进行排队, 对于刚进入银行的客户,如果某个窗口空闲 ,则可立即上前办理业务;否则,就排在人 数最少的队伍后面。请模拟银行一天的业务 情况并统计客户在银行的平均停留时间。
部分 代码
document.getElementById("td00").innerHTML="";
document.getElementById("td01").innerHTML=""; if(currenttime==(t0-t)*3600) end();
}
建立模型
算法设计
编程
输出界面
部分 代码
输出界面
部分 代码
body{ padding-left:0; padding-top:0; padding-bottom:0; paddingright:0; background-image:url(bj.gif); background-repeat:repeat; } #table{ padding-top:0px; padding-left:0; padding-right:0; padding-bottom:0; } #table1{ width:810px;height:800px; border:#FFF solid 4px; }
银行排队系统c课程设计
银行排队系统c课程设计一、课程目标知识目标:1. 学生能理解银行排队系统的基本概念,掌握其工作原理和关键功能。
2. 学生能运用C语言实现银行排队系统的基本功能,包括顾客入队、出队、查询排队人数等。
3. 学生了解并掌握结构体、链表等C语言知识点在银行排队系统中的应用。
技能目标:1. 学生能够运用所学知识,独立设计并编写银行排队系统的C语言程序。
2. 学生通过课程学习,提高编程能力,培养解决问题的策略和技巧。
3. 学生能够运用调试工具,对银行排队系统程序进行调试和优化。
情感态度价值观目标:1. 学生在课程学习过程中,培养对编程的兴趣和热情,形成积极的学习态度。
2. 学生通过小组合作完成课程设计,增强团队协作意识和沟通能力。
3. 学生通过解决实际问题,体验编程带来的成就感,培养自信心和创新能力。
课程性质:本课程设计为实践性课程,强调理论联系实际,培养学生动手能力和编程思维。
学生特点:学生已具备C语言基础知识,具有一定的编程能力,但对复杂问题的解决策略尚需引导。
教学要求:教师需引导学生运用所学知识解决实际问题,关注学生在课程学习中的个体差异,提高学生的编程能力和综合素质。
在教学过程中,将课程目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. 理论知识:- 银行排队系统基本原理及流程- C语言结构体和链表相关知识- 函数调用、指针运用及模块化编程2. 实践操作:- 编写顾客入队、出队等基本功能模块- 设计链表数据结构,实现排队系统的数据存储和操作- 编程实现银行排队系统主程序,整合各功能模块3. 教学大纲:- 第一周:银行排队系统基本原理学习,回顾C语言结构体和链表知识- 第二周:编写顾客入队、出队等基本功能模块,学习模块化编程方法- 第三周:设计链表数据结构,实现数据存储和操作,编写系统主程序- 第四周:调试、优化银行排队系统程序,进行课程总结和评价4. 教材章节:- 《C语言程序设计》第十章:结构体与共用体- 《C语言程序设计》第十二章:链表- 《C语言程序设计》第八章:函数与模块化编程教学内容确保与课程目标紧密结合,注重理论与实践相结合,培养学生的动手能力和编程思维。
Python实现的银行系统模拟程序完整案例
Python实现的银⾏系统模拟程序完整案例本⽂实例讲述了Python实现的银⾏系统模拟程序。
分享给⼤家供⼤家参考,具体如下:银⾏系统模拟程序1、概述使⽤⾯向对象思想模拟⼀个简单的银⾏系统,具备的功能:管理员登录/注销、⽤户开户、登录、找回密码、挂失、改密、查询、存取款、转账等功能。
编程语⾔:python。
2、⽬的通过这个编程练习,可以熟悉运⽤⾯向对象的思想来解决实际问题,其中⽤到的知识点有类的封装、正则表达式、模块等。
3、体会在编写这个程序时,实际上的业务逻辑还是要考虑的,⽐如修改密码时需要输⼊⼿机号、⾝份证号等。
在进⾏类的封装时,实际上还是⽤⾯向过程的思想把⼀些基本的业务逻辑编写成函数,对⼀些重复使⽤的代码也可以封装成函数(就是⾃⼰造适合这个业务的轮⼦,实际开发中很多底层的函数是不⽤⾃⼰再次去实现的,可以直接调⽤),这些都是⼀些底层的封装,然后在实现主要业务时上就可以调⽤类中的⽅法实现,这时只需关注业务逻辑就好了。
使⽤⾯向对象的思想进⾏编程,考虑的点是:实现⼀个功能,有哪些⽅法可以让我进⾏调⽤(指挥者)。
使⽤⾯向过程的思想进⾏编程,考虑的点是:实现⼀个功能,我需要实现哪些⽅法(执⾏者)。
编写这个程序还⽤到⼀个很重要的概念,就是对程序进⾏模块化。
模块化的好处是可以更好的对程序进⾏维护,条理也更清晰。
4、代码1、bankSystem.py⽂件from view import Viewfrom atm import ATMfrom person import Persondef func(view,atm,per):view.funcInterface()choice = input("请选择您要办理的业务:")if choice == '1':return per.checkMoney(atm)elif choice == '2':return per.saveMoney(atm)elif choice == '3':return per.getMoney(atm)elif choice == '4':return per.transferMoney(atm)elif choice == '5':return per.changePassword(atm)elif choice == '6':return per.unlockAccount(atm)elif choice == '7':return per.closeAccount(atm)elif choice == 'T':if per.exit(atm):return Trueelse:print("输⼊有误!")def main():# 管理员登录名为'admin',密码为'123'view = View("admin",'123')view.initface()atm = ATM()view.login()per = Person()while True:view.funcInit()choice = input("请选择您要办理的业务:")if choice == '1':per.newAccount(atm)elif choice == '2':if per.login(atm):while True:if func(view,atm,per) == None:continueelse:breakelif choice == '3':per.findBackPassword(atm)elif choice == '4':per.lockAccount(atm)elif choice == 'T':if per.exit(atm):# 管理员注销系统if view.logout():return Trueelse:print("输⼊有误!")if __name__ == '__main__':main()2、card.py⽂件:'''卡:类名:Card属性:卡号【6位随机】密码余额绑定的⾝份证号⼿机号'''class Card(object):def __init__(self, cardId, password, money,identityId,phoneNum,cardLock='False'):self.cardId = cardIdself.password = passwordself.money = moneyself.identityId = identityIdself.phoneNum = phoneNumself.cardLock = cardLock3、readAppendCard.py⽂件:'''功能:读取⽂件cardInfo.txt的信息⽅法:读、写、删'''from card import Cardimport json# 读class ReadCard(Card):def __init__(self, cardId='', password='', money=0, identityId='', phoneNum='', cardLock=''):Card.__init__(self, cardId, password, money, identityId, phoneNum, cardLock)def dict2Card(self, d):return self.__class__(d["cardId"], d["password"], d["money"],d["identityId"],d["phoneNum"], d["cardLock"]) def read(self):# card对象转为字典with open("cardinfo.txt","r",encoding="utf-8") as fr:cards = []for re in fr.readlines():cards.append(self.dict2Card(eval(re)))return cards# 写class AppendCard(Card):def __init__(self):Card.__init__(self, cardId = '', password = '', money = 0, identityId = '', phoneNum = '', cardLock='')def card2Dict(self,card):return {"cardId": card.cardId, "password": card.password,"money": card.money, "identityId": card.identityId,"phoneNum": card.phoneNum, "cardLock": card.cardLock}def append(self,card,w= 'a'):# 默认是追加,如果w='w'就清空⽂件if w == 'w':with open("cardinfo.txt", "w", encoding="utf-8") as fa:fa.write('')else:with open("cardinfo.txt", "a", encoding="utf-8") as fa:json.dump(card, fa, default=self.card2Dict)fa.write('\n')# 删class Del(object):def del_(self,cardId):readcard = ReadCard()cards = readcard.read()for card in cards:# 删除输⼊的卡号if cardId == card.cardId:cards.remove(card)breakelse:print("卡号不存在!")return False# 重新写⼊⽂件appendcard = AppendCard()appendcard.append('',w='w')for card in cards:appendcard.append(card)return True4、person.py'''⼈类名:Person⾏为:开户、查询、取款、存储、转账、改密、销户、退出'''class Person(object):def __init__(self,name='',identity='',phoneNum='',card=None): = nameself.identity = identityself.phoneNum = phoneNumself.card = card# 登录def login(self,atm):card = atm.login()if card:self.card = cardreturn Trueelse:return False# 开户def newAccount(self,atm):return atm.newAccount()#找回密码def findBackPassword(self,atm):return atm.findBackPassword()# 查询余额def checkMoney(self, atm):return atm.checkMoney(self.card)# 存钱def saveMoney(self, atm):return atm.saveMoney(self.card)# 取钱def getMoney(self, atm):return atm.getMoney(self.card)# 转账def transferMoney(self, atm):return atm.transferMoney(self.card)# 销户def closeAccount(self, atm):return atm.closeAccount(self.card)# 挂失def lockAccount(self, atm):return atm.lockAccount()# 解锁def unlockAccount(self, atm):return atm.unlockAccount(self.card)# 改密def changePassword(self, atm):return atm.changePassword(self.card)# 退出系统def exit(self, atm):return atm.exit()5、view.py'''管理员界⾯类名:View属性:账号,密码⾏为:管理员初始化界⾯管理员登陆系统功能界⾯管理员注销系统功能:开户查询取款存储转账改密销户退出'''from check import Checkimport timeclass View(object):def __init__(self,admin,password):self.admin = adminself.password = password# 管理员初始化界⾯def initface(self):print("*------------------------------------*")print("| |")print("| 管理员界⾯正在启动,请稍候... |")print("| |")print("*------------------------------------*")time.sleep(1)return#管理员登录界⾯def login(self):print("*------------------------------------*")print("| |")print("| 管理员登陆界⾯ |")print("| |")print("*------------------------------------*")check = Check()erName(self.admin,self.password)print("*-------------登陆成功---------------*")print(" 正在跳转到系统功能界⾯,请稍候... ")del checktime.sleep(1)return# 管理员注销界⾯def logout(self):print("*------------------------------------*")print("| |")print("| 管理员注销界⾯ |")print("| |")print("*------------------------------------*")#确认是否注销check = Check()if not check.isSure('注销'):return FalseerName(self.admin,self.password)print("*-------------注销成功---------------*")print(" 正在关闭系统,请稍候... ")del checktime.sleep(1)return True#系统功能界⾯'''系统功能:开户,查询,取款,存储,转账,销户,挂失,解锁,改密,退出 '''def funcInit(self):print("*-------Welcome To Future Bank---------*")print("| |")print("| (1)开户 (2)登录 |")print("| (3)找回密码 (4)挂失 |")print("| (T)退出 |")print("| |")print("*--------------------------------------*")def funcInterface(self):print("*-------Welcome To Future Bank---------*")print("| |")print("| (1)查询 (5)改密 |")print("| (2)存款 (6)解锁 |")print("| (3)取款 (7)销户 |")print("| (4)转账 (T)退出 |")print("| |")print("*--------------------------------------*")6、atm.py'''提款机:类名:ATM属性:⾏为(被动执⾏操作):开户,查询,取款,存储,转账,销户,挂失,解锁,改密,退出'''from check import Checkfrom card import Cardfrom readAppendCard import ReadCard,AppendCardimport randomimport timeclass ATM(object):def __init__(self):# 实例化相关的类self.check = Check()self.readCard = ReadCard()self.appendCard = AppendCard()self.cards = self.readCard.read()# 显⽰功能界⾯def funcShow(self,ope):if ope != "找回密码":print("*-------Welcome To Future Bank-------*")print("| %s功能界⾯ |"%ope)print("*------------------------------------*")else:# 显⽰找回密码界⾯print("*-------Welcome To Future Bank-------*")print("| 找回密码功能界⾯ |")print("*------------------------------------*")# 卡号输⼊def cardInput(self,ope=''):while True:cardId = input("请输⼊卡号:")password = input("请输⼊密码:")card = self.check.isCardAndPasswordSure(self.cards, cardId,password) if not card:print("卡号或密码输⼊有误")if ope == 'login' or ope == 'lock':return Falseelse:continueelse:return card# 登录def login(self):self.funcShow("登录")return self.cardInput('login')#找回密码def findBackPassword(self):self.funcShow("找回密码")cardId = input("请输⼊卡号:")card = self.check.isCardIdExist(self.cards,cardId)if card:if not self.check.isCardInfoSure(card,"找回密码"):returnnewpassword = self.check.newPasswordInput()index = self.cards.index(card)self.cards[index].password = newpasswordself.writeCard()print("找回密码成功!请重新登录")time.sleep(1)return Trueelse:print("卡号不存在")return True# 开户def newAccount(self):self.funcShow("开户")# 输⼊⾝份证号和⼿机号pnum = self.check.phoneInput()iden = self.check.identifyInput()print("正在执⾏开户程序,请稍候...")while True:# 随机⽣成6位卡号cardId = str(random.randrange(100000, 1000000))# 随机⽣成的卡号存在就继续if self.check.isCardIdExist(self.cards,cardId):continueelse:break# 初始化卡号密码,卡⾥的钱,卡的锁定状态card = Card(cardId, '888888', 0, iden, pnum , 'False')self.appendCard.append(card)print("开户成功,您的卡号为%s,密码为%s,卡余额为%d元!"%(cardId,'888888',0)) print("为了账户安全,请及时修改密码")# 更新卡号列表self.cards = self.readCard.read()return True# 查询def checkMoney(self,card):self.funcShow("查询")if self.check.isCardLock(card):print("查询失败!")else:print("卡上余额为%d元!" %card.money)time.sleep(1)# 存款def saveMoney(self,card):self.funcShow("存款")if self.check.isCardLock(card):print("存钱失败!")else:mon = self.check.moneyInput("存款")# 找到所有卡中对应的卡号,然后对此卡进⾏存款操作index = self.cards.index(card)self.cards[index].money += monprint("正在执⾏存款程序,请稍候...")time.sleep(1)self.writeCard()print("存款成功!卡上余额为%d元!"%self.cards[index].money)time.sleep(1)# 取款def getMoney(self,card):self.funcShow("取款")if self.check.isCardLock(card):print("取钱失败!")else:print("卡上余额为%d元!" %card.money)mon = self.check.moneyInput("取款")if mon:if mon > card.money:print("余额不⾜,您当前余额为%d元!"%card.money)time.sleep(1)else:print("正在执⾏取款程序,请稍候...")time.sleep(1)# 找到所有卡中对应的卡号,然后对此卡进⾏存款操作index = self.cards.index(card)self.cards[index].money -= monself.writeCard()print("取款成功!卡上的余额为%d元!"%self.cards[index].money)time.sleep(1)# 转账def transferMoney(self,card):self.funcShow("转账")if self.check.isCardLock(card): #如果卡已锁定就不能进⾏转账操作print("转账失败!")returnwhile True:cardId = input("请输⼊对⽅的账号:")if cardId == card.cardId:print("不能给⾃⼰转账")returncardOther = self.check.isCardIdExist(self.cards,cardId) #判断对⽅卡号是否存在if cardOther == False:print("对⽅账号不存在")returnelse:breakwhile True:print("卡上余额为%d元"%card.money)mon = self.check.moneyInput("转账")if not mon: #输⼊的⾦额不对就返回returnif mon > card.money: #输⼊的⾦额⼤于卡上余额就返回print("余额不⾜,卡上余额为%d元!" % card.money)returnelse:breakprint("正在执⾏转账程序,请稍候...")time.sleep(1)index = self.cards.index(card) # 找到所有卡中对应的卡号,然后对此卡进⾏转账操作 self.cards[index].money -= monindexOther = self.cards.index(cardOther) #找到对卡卡号所处位置self.cards[indexOther].money += monself.writeCard()print("转账成功!卡上余额为%d元!" % self.cards[index].money)time.sleep(1)# 销户def closeAccount(self,card):self.funcShow("销户")if not self.check.isCardInfoSure(card,"销户"):returnif card.money >0:print("卡上还有余额,不能进⾏销户")returnif self.check.isSure("销户"):self.cards.remove(card) #移除当前卡号self.writeCard()print("销户成功!")time.sleep(1)return True# 挂失def lockAccount(self):self.funcShow("挂失")card = self.cardInput('lock')if not card:returnif card.cardLock == "True":print("卡已处于锁定状态")returnif not self.check.isCardInfoSure(card,"挂失"):returnif self.check.isSure("挂失"):index = self.cards.index(card) #找到所有卡中对应的卡号,然后对此卡进⾏挂失操作 self.cards[index].cardLock = "True"self.writeCard()print("挂失成功!")time.sleep(1)return True# 解锁def unlockAccount(self,card):self.funcShow("解锁")if card.cardLock == 'False':print("⽆需解锁,卡处于正常状态")returnif not self.check.isCardInfoSure(card,"解锁"):returnindex = self.cards.index(card)self.cards[index].cardLock = "False"self.writeCard()print("解锁成功!")time.sleep(1)return True# 改密def changePassword(self,card):self.funcShow("改密")if self.check.isCardLock(card):print("卡处于锁定状态,不能进⾏改密")returnif not self.check.isCardInfoSure(card,"改密"):return# 输⼊旧密码while True:password = input("请输⼊旧密码:")if self.check.isPasswordSure(password,card.password):breakelse:print("卡号原密码输⼊错误!")returnnewpassword = self.check.newPasswordInput()index = self.cards.index(card) #找到所有卡中对应的卡号,然后对此卡进⾏改密操作 self.cards[index].password = newpasswordself.writeCard()print("改密成功!请重新登录")time.sleep(1)return True# 写⼊⽂件def writeCard(self):self.appendCard.append('', w='w') #先清除原⽂件再重新写⼊for card in self.cards:self.appendCard.append(card)# 退出def exit(self):if self.check.isSure("退出"):return Trueelse:return False7、check.py'''验证类:⽤户名、密码、卡号、⾝份证、⼿机号验证使⽤正则表达式进⾏⽂本搜索'''import reclass Check(object):def __init__(self):pass#⽤户验证def userName(self,admin,password):self.admin = adminself.password = passwordwhile True:admin = input("请输⼊⽤户名:")password = input("请输⼊密码:")if admin != self.admin or password != self.password:print("⽤户名或密码输⼊有误,请重新输⼊")continueelse:return#是否确认某操作def isSure(self,operate):while True:res = input("是否确认%s?【yes/no】"%operate)if res not in ['yes','no']:print("输⼊有误,请重新输⼊")continueelif res == 'yes':return Trueelse:return False# ⼿机号验证def phoneInput(self):# 简单的⼿机号验证:开头为1且全部为数字,长度为11位while True:pnum = input("请输⼊您的⼿机号:")res = re.match(r"^1\d{10}$",pnum)if not res:print("⼿机号输⼊有误,请重新输⼊")continuereturn pnum# ⾝份证号验证def identifyInput(self):# 简单的⾝份证号验证:6位,只有最后⼀可以为x,其余必须为数字while True:iden = input("请输⼊您的⾝份证号(6位数字):")res = re.match(r"\d{5}\d|x$",iden)if not res:print("⾝份证号输⼊有误,请重新输⼊")continuereturn iden# 卡号是否存在def isCardIdExist(self,cards,cardId):for card in cards:if cardId == card.cardId:return cardelse:return False# 卡号和密码是否⼀致def isCardAndPasswordSure(self,cards,cardId,password):card = self.isCardIdExist(cards,cardId)if card:if card.password == password:return cardreturn False# 密码⼆次确认是否正确def isPasswordSure(self, newassword,oldpassword):if newassword == oldpassword:return Trueelse:return False# 卡号完整信息验证def isCardInfoSure(self,card,ope):phoneNum = input("请输⼊⼿机号:")iden = input("请输⼊⾝份证号:")if card.phoneNum == phoneNum and card.identityId == iden:return Trueprint("%s失败\n密码、⼿机号或⾝份证号与卡中绑定的信息不⼀致"%ope)return False# 卡号是否锁定def isCardLock(self,card):if card.cardLock == "True":print("此卡已挂失!")return Truereturn False# 输⼊⾦额验证def moneyInput(self,ope):mon = input("输⼊%s⾦额(100的倍数):"%ope)# 输⼊的钱必须是100的倍数if re.match(r"[123456789]\d*[0]{2}$", mon):return int(mon)print("输⼊有误,%s⾦额必须是100的倍数!请重新输⼊"%ope)return Falsedef newPasswordInput(self):while True:newpassword = input("请输⼊新密码:")if not re.match(r"\d{6}$",newpassword):print("密码必须是6位的纯数字")continuenewpasswordAgain = input("请重复输⼊新密码:")if self.isPasswordSure(newpassword, newpasswordAgain):breakelse:print("两次输⼊不⼀致!")continuereturn newpassword更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。
c++版模拟银行窗口排队叫号系统
c++版模拟银行窗口排队叫号系统c++版模拟银行窗口排队叫号系统看了两位LZ的银行排队系统blog,感觉不错,就也产生了用C++写个排号系统,原因有二,1、对Java不太熟悉,没有看太懂。
2、练练手。
3、提高一下C++的人气。
进入主题:对于这一块的业务系统需求没有做过多的分析,只在两位LZ的基础做了小小的改动,然后用C++实现。
题目:模拟实现银行业务调度系统逻辑,具体需求如下:银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP 窗口。
有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。
异步随机生成各种类型的客户,生成各类型用户的概率比例为:VIP客户:普通客户:快速客户= 1 :6 :3。
客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。
各类型客户在其对应窗口按顺序依次办理业务。
当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。
随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
修改:1、在这里为了简化程序的设计(只省了只行代码),FAST和VIP窗口只办理对应的客户,不办普通客户的业务。
2、由于对于客户的到来,也采用1S来一个的做法,但因为在console程序对于时间不太好控制,在这里只是设定了客户数,即每个1秒来一个客户,根据来的客户数控制时间。
开发环境:Linux代码:文件constances.h该文件中定义了一些常量,其中MAX_WAITING_CLIENT_NUM指的是,最多正在等待的客户数,如果客户数到达最大,后来的客户将会离开。
java 银行排队叫号写法
import java.util.LinkedList;
import java.util.Queue;
public class BankQueueSystem {
private Queue<String> queue;
private int currentNumber;
public BankQueueSystem() {
queue = new LinkedList<>();
currentNபைடு நூலகம்mber = 1;
}
public void addCustomer(String customerName) {
queue.add(customerName);
}
public String getNextCustomer() {
if (queue.isEmpty()) {
return null;
}
String customerName = queue.poll();
System.out.println("叫号:" + currentNumber + ",顾客:" + customerName + ",请到柜台办理业务。");
currentNumber++;
return customerName;
}
}
在这个示例代码中,我们使用队列存储等待办理业务的顾客信息,使用一个变量currentNumber表示当前叫号数。当有新的顾客到来时,将其加入队列中。当需要叫下一个顾客时,从队列中取出第一个顾客,并输出当前叫号数和顾客姓名。同时,将当前叫号数加一。如果队列为空,则返回null。
银行排队系统
银行排队系统1、编程实现一个“银行排队模拟系统” 思想:程序等待标准输入,若检测到有标准输入,则创建对应的进程。
如果目前等待态的进程个数等于座位数,在门外等待(即放入消息队列等待创建);若目前阻塞的进程个数小于座位数则进程阻塞。
与此同时,检测等待态的进程个数小于座位数,消息队列中存在消息,则从消息队列中取出一条消息,同时创建一个新进程。
本程序使用信号量进行进程间通信,使用消息队列存储从stdin输入的消息。
设置一信号量,标示大厅中座位。
设置一消息队列,标示在门外等待。
本程序,没有实现,老师所说的,“窗口进程”。
只是在主控进程中,对S3,S4进行了操作来实现与子进程的通信。
相当于,主控进程作为一个窗口进程,来处理各个客户进程。
由于,想要做到,在同一时间,主控进程最多只有两个子进程(客户进程)在执行,其他的都在阻塞状态,因此,本程序,将S3的初始值设置为21) 该程序模拟客户到银行取号-排队-被叫号-被服务的过程; 2) 程序执行流程如下:Step1: 客户到达银行,并从取号机取号;Step2: 如果大厅中有空闲座位,则座下等待,否则,在大厅外等待;Step3: 银行职员如果发现有客户等待,则依次叫号服务,否则休息;Step4: step1-step4重复执行 3) 大厅中座椅数量为20个; 4) 服务窗口为2个;5) “客户到来”通过命令行输入客户名字模拟;6) 为了模拟实际情况,每个客户服务时间不小于20秒,可随机确定;7) 程序顺序列出不同窗口服务客户的:名称,窗口号,服务时间 2、提示1) 需一个主控进程,随时监控客户到来,并为之创建进程; 2) 取号机应视为互斥型临界资源 3) 座椅应视为临界资源4) 客户等待及被叫号应视为进程间同步过程主控进程(serve.c)执行流程图:客户端进程(client.c)执行流程图:需求分析:本系统,没有实现,窗口进程,最初目的在于,保证在同一时间,父进程即主控进程最多具有2个子进程在执行。
银行排队叫号系统的设计-20210612163731
《银行排队叫号系统的设计》一、系统背景随着金融业务的不断发展,银行网点客流量日益增大,客户在银行办理业务时排队等待的问题日益突出。
为提高银行服务效率,优化客户体验,设计一套高效、便捷的银行排队叫号系统显得尤为重要。
二、系统目标1. 减少客户排队等待时间,提高业务办理效率。
2. 实现客户分流,缓解网点拥堵现象。
3. 提升银行服务质量,增强客户满意度。
4. 降低银行工作人员的工作强度,提高工作效率。
三、系统功能模块1. 客户取号模块客户到达银行网点后,通过自助取号机选择所需办理的业务类型,系统自动分配一个唯一的排队号码,并打印出排队小票。
2. 叫号显示模块系统根据客户取号顺序,自动显示当前办理业务的客户号码,并通过语音播报提醒客户前往指定窗口。
3. 窗口业务办理模块银行工作人员在办理业务时,通过呼叫器告知系统当前窗口状态,系统根据窗口状态自动调整叫号顺序。
4. 数据统计与分析模块系统实时统计各业务窗口的办理情况,报表,为银行管理层提供决策依据。
5. 客户满意度调查模块系统在客户办理业务结束后,邀请客户进行满意度评价,收集客户反馈,以便持续优化服务。
四、系统设计要点1. 易用性:系统界面简洁明了,操作简便,便于客户快速上手。
2. 稳定性:系统运行稳定,确保24小时不间断服务。
4. 安全性:系统采用加密技术,确保客户信息安全。
五、系统技术选型与架构1. 技术选型前端:HTML5、CSS3、JavaScript,采用Vue.js框架进行页面开发。
后端:采用Java语言,结合Spring Boot框架进行业务逻辑处理。
数据库:MySQL,用于存储客户信息、业务数据等。
语音播报:采用TTS(文本转语音)技术实现语音叫号功能。
2. 系统架构银行排队叫号系统采用B/S(Browser/Server)架构,分为客户端和服务端两部分。
客户端负责与用户交互,服务端负责处理业务逻辑和数据存储。
六、系统详细设计与实现1. 客户取号模块取号机界面设计:采用触摸屏设计,界面包含业务类型选择、取号按钮等元素,方便客户操作。
排队叫号系统源程序
DeskDriver[i].enable=1; //开启允许无线发送DeskDriver[i].sendCount=0 /初始值 0 表示发送次数为 0,发送一次加 1 DeskDriver[i].sendOK=0; //初始值 0 表示没发送成功}}}#endifif(RCVCOMP_ID==1)//task1接收完成,发送数据{IO1CLR=IO1CLR|LED1;DelayNS(20);IO1SET=IO1SET|LED1;DelayNS(20);IO1CLR=IO1CLR|LED1;DelayNS(20);IO1SET=IO1SET|LED1;RCVCOMP_ID=0;UART0_SendBuf();UART0_SendBufEx(RcvBuf,RCV_LEN1+2); RcvBuf[0]=0x05;RFSendPacket((char*)RcvBuf,17);}if(SCAN_ID==1){SCAN_ID=0;KeyScan();}//task3发送柜台号if(SendDesk_ID==1){SendDesk_Pro();SendDesk_ID=0;}#ifdef WATCHDOGIRQDisable();WDFEED = 0xAA;WDFEED = 0x55;IRQEnable();#endif}return 0;}void DelayNS (uint32 dly)//从机地址//task2按键扫描//看门狗喂狗//关中断//第一次喂狗启动 WDT//喂狗序列//开中断{uint32 i;for ( ; dly>0; dly--)for (i=0; i<50000; i++);}//短延时子程序void delay(uint8 t){ uint8 i,j;for(i=0;i<t;i++)for(j=0;j<10;j++);}void VAR_Init(void){uint8 i;set.datab= 8; //串口数据位set.stopb= 1; //串口住手位set.parity = rcv_new = 0; RSMCHR=0; RSMCHR=0; RSSMS_ID=0; ;/串口校验位//串口接收完数据标志//接收数据暂存变量//判断接收数据用标志//直接接收数据标志RCVCOMP_ID=0; SCAN_ID=1; INPUT1=0; INPUT1_ID=1; Desk_NUM=0x5 0;SendDesk_ID=0; timerCount=0;//接收完成标志//按键扫描定时标志//按键扫描去颤动计数//按键按下放开标志//柜台号,初始值为无效柜台号//发送柜台号标志//定时器计数变量for(i=0;i<MaxDeskNum;i++){DeskDriver[i].allow10s=1; //初始值 1 为 10 秒已经过去,可以接受按键柜台号DeskDriver[i].keyScaned=0;//初始值 0 表示还没有按键柜台号被接受DeskDriver[i].sendCount=0;//初始值 0 表示发送次数为 0,发送一次加 1DeskDriver[i].sendOK=0; //初始值 0 表示没发送成功DeskDriver[i].timeCnt=0; //初始值 0,定时计数为 0,每秒加 1DeskDriver[i].enable=1; //初始值 1 表示允许发送}}void IO_Init(void){PINSEL0 = 0x00000005; //设置 I/O连接到 UART0PINSEL0 =PINSEL0 |0x00050000 ; //配置 UART1 引脚功能PINSEL0 =PINSEL0 |0x00005500 ; /置 SPI 总线引脚 0.4sck 0.5miso 0.6mosi0.7SSELPINSEL1 = 0x00000001; //配置 p0.16 TI_CC_GDO0_PIN 为外部中断引脚IO0DIR = 0x00000000;IO1DIR = 0x00000000;IO1DIR = IO1DIR|IO1DIR|LED1|LED2|LED3|LED4; //连 LED 的引脚配置为输出引脚IO0DIR=IO0DIR|KEY_R1 | KEY_R2| KEY_R3| KEY_R4; //行线引脚配置为出输出引脚IO0DIR=IO0DIR|MOSI0|SCLK0|TI_CC_CSn_PIN; //配置 SPI 的 cs 片选为输出MOSI0|SCLK0|EXTMODE=0x01; EXTPOLAR=0x00; }void TC0_Init(void) //EINT0使用边沿激活//下降沿或者低电平有效{T0TC T0PR T0M CRT0MR0T0TCR = 0;= 0;= 0x03; =Fpclk / 50; =0x01;//定时器设置为 0//时钟不分频//设置 T0MR0 匹配后复位 T0TC ,并产生中断标志//20毫秒 100 则 10ms 定时,修改定时间隔只需修改除数//启动定时器}void __irq IRQ_Timer0 (void){timerCount++;if(timerCount>20) //0.4秒计数{timerCount=0;#ifdef WIRLTESTTimerSend_ID=1;#endifif(IO1PIN&LED2) IO1CLR=IO1CLR|LED2;else IO1SET=IO1SET|LED2;time1sCount++;if(time1sCount>=3){time1sCount=0;UpdataDesk();} sendDeskNum();}SCAN_ID=1;T0IR = 0x01; VICVectAddr = 0x00; }//1.6秒执行一次//更新柜台号结构体的信息//发送柜台号给 pc 端//开启按键扫描//清除中断标志,并复位中断//通知 VIC 中断处理结束void UpdataDesk(void) {uint8 i;for(i=0;i<MaxDeskNum;i++){if(DeskDriver[i].allow10s==0) //按键按下还没有过 10s 限定时间{DeskDriver[i].timeCnt++;if((DeskDriver[i].timeCnt==2) | (DeskDriver[i].timeCnt==4) | (DeskDriver[i].timeCnt==5)) { DeskDriver[i].enable=1; //每隔 3 秒允许发送}if(DeskDriver[i].timeCnt>=7/超过限定时间,开启允许接收按键,并更新整个结构体{DeskDriver[i].allow10s=1;DeskDriver[i].keyScaned=0;//初始值 0 表示还没有按键柜台号被接受DeskDriver[i].sendCount=0;//初始值 0 表示发送次数为 0,发送一次加 1DeskDriver[i].sendOK=0;DeskDriver[i].timeCnt=0;DeskDriver[i].enable=1;}}}}//初始值 0 表示没发送成功//初始值 0,定时计数为 0,每秒加 1 //初始值 1 表示允许发送//end forvoid sendDeskNum(void){uint8 i;for(i=0;i<MaxDeskNum;i++) //论询所有柜台结构,看是否有满足发送条件的{if((DeskDriver[i].keyScaned==1)&(DeskDriver[i].sendOK==0)&(DeskDriver[i].enable==1)) { DeskLoadBuf(i); //将柜台号转载到发送缓冲区RFSendPacket(SendBuf, PAKT_LEN+1); //无线发射DeskDriver[i].sendCount++;DeskDriver[i].enable=0;return;}}}void DeskLoadBuf(uint8 deskNum) //发送次数加 1 //关闭允许发送{SendBuf[0]=OPPO_ADDR; //对方无线地址SendBuf[1]='a'; //打头关键字SendBuf[2]='b';SendBuf[3]=(char)deskNum; //柜台号码SendBuf[4]=0x0d;SendBuf[5]=0x0a;}//结尾关键字#ifdef WATCHDOGvoid WATCHDOG_Init(void){while(( WDMOD & 0x04 ) == 0x04) {WDMOD = 0x00;} //判断看门狗超时标志/ 软件清零看门狗超时标志位WDTC = 0x5f0000;WDMOD = 0x03;IRQDisable();WDFEED = 0xAA;WDFEED = 0x55;IRQEnable();}//设置看门狗定时器参数//设置看门狗模式:中断且复位//关中断//第一次喂狗启动 WDT//喂狗序列//开中断#endifint8 UART0_Init (uint32 baud, UARTMODE set) {uint32 bak;/* 参数过滤 */if ((baud ==0 ) || (baud > 115200)) return (0);if ((set.datab <5) || (set.datab > 8)) return (0);if ((set.stopb == 0) || (set.sto t r ))(0);if (set.parity >r urn (0);/* 设置串口波特率 */U0LCR = 0x80;bak = (Fpclk >> 4) / baud; (Fpclk/16)/16U0DLM = bak >> 8;bak/256 // DLAB = 1 使能除数所存访问//外设时钟左移四位相当于除以 16 相当于//除数高位取 16 位分频值的高 8 位相当于U0DLL = bak & 0xFF; //除数低位取 16 位分频值的低 8 位相当于bak%256/* 设置串口模式 */bak = set.datab - 5; //设置字长if (set.stopb ==b |= 0x04;//判断是否为 2 位住手位if (set.parity != 0){set.parity = set.parity - 1;bak |= 0x08;}bak |= set.parity << 4; U0LCR =(bak&0x7F); //设置奇偶校验//DLAB 除数访问位置 0 ,用于访问接收发送寄存器U0FCR = 0x01;U0IER = 0x01;return (1);}void __irq IRQ_UART0 (void){if ((U0IIR & 0x0F) == 0x04) {RSMCHR = U0RBR;if(RSSMS_ID==0) judge_RCV();else direct_RCV();}VICVectAddr = 0x00;}void judge_RCV(void){if (HDM1_ID==0) //使能FIFO ,并设置触发点为 8 字节//允许 RBR 中断,即接收中断//通过读取 U0IIR 来清除中断//读取接收的数据//直接保存到接收数组//中断处理结束//第一次判断{if(RSMCHR==cnPUREDA TCHR1){HDM1_ID=1;RcvBuf[0]=RSMCHR;}}else{if(RSMCHR==cnPUREDATCHR2){RcvBuf[1]=RSMCHR;RSSMS_ID=1;RSMLEN=RCV_LEN1;RcvPointer=2;HDM1_ID=0;}else{HDM1_ID=0;}}}void direct_RCV(void){RcvBuf[RcvPointer]=RSMCHR;//判断为点阵数据关键字 1 0xaa //保存关键字 1//第二次判断//判断为点阵数据关键字 2 0x55//保存关键字 1//置直接保存数据标志//置接收数据长度//置接收数据指针为 2//向接收数据缓冲区保存数据RcvPointer++;RSMLEN--;if (RSMLEN==0){RCVCOMP_ID=1;RSSMS_ID=0;RcvPointer=2;}} //接收缓冲区地址加 1//接收长度减 1//当接收长度变为 0 时,置相应标志//置接收完成标志//清除直接接收数据标志//接收数据缓冲区地址归位void {} void {} void {UART0_SendBuf (void)uint8 i;for (i=0; i<(RCV_LEN1+2); i++)U0THR =RcvBuf[i];while ((U0LSR & 0x20) == 0);//等待数据发送完毕UART0_SendBufEx (char * buffer ,uint8 len)uint8 i;for (i=0; i<(len); i++)U0THR =buffer[i];while ((U0LSR & 0x20) == 0);//等待数据发送完毕VIC_Init(void)IRQEnable();VICIntSelect = 0x00000000; VICVectCntl0 = 0x20 | 14; //使能 IRQ 中断//设置所有的通道为 IRQ 中断//分配 EINT0 中断到向量中断 1VICVectAddr0 = (uint32)IRQ_Eint0;//设置中断服务程序地址VICVectCntl2 = 0x20 | 0x06; // UART0 分配到 IRQ slot,0 即最高优先级VICVectAddr2 = (uint32)IRQ_UART0; //设置 UART0 向量地址VICVectCntl1 = 0x20 | 0x04; //设置定时器 0 中断通道分配向量中断 1VICVectAddr1 = (uint32)IRQ_Timer0; /置中断服务程序地址VICIntEnable =(1<<14) | (1 << 0x06) | (1<<0x0使4);能//SPI 中断&UART0 中断和定时器 0 中断}uint8 KeyScan(void){uint8 nRes = 0;IO0CLR = IO0CLR|KEY_R1|KEY_R2|KEY_R3|KEY_R4; //行线输出全部输出高电平delay(5); //读取各个管脚的状态,判断是列线引脚是否有低电平浮现if(((IO0PIN&KEY_C1)==0) | | ((IO0PIN&KEY_C2)==0) | | ((IO0PIN&KEY_C3)==0) | | ((IO0PIN&K EY_C4)==0)){INPUT1++; //每 20ms 扫描一次,浮现低电平的次数计数if (INPUT1>=8) //超过一定次数,说明按键按下已经稳定,读取按键{if (INPUT1_ID==1) //为 0,表示按键按下未放开,当按键向来按下时,只进行一次处理{INPUT1_ID=0;nRes =KeyProcess();return nRes;}}}else{INPUT1=0;INPUT1_ID=1;}return 0;}uint8 KeyProcess(void)//列线无低电平浮现,计数清零//没有输入,为干扰*/{uint8 nResult = 0;//第一行输出低电平IO0CLR = IO0CLR|KEY_R1;IO0SET = IO0SET|KEY_R2|KEY_R3|KEY_R4;delay(2);if((IO0PIN&KEY_C1)==0) nResult = 4;if((IO0PIN&KEY_C2)==0) nResult = 3;if((IO0PIN&KEY_C3)==0) nResult = 2;if((IO0PIN&KEY_C4)==0) nResult = 1;if(nResult !=0 )goto result;//第三行输出低电平IO0CLR = IO0CLR|KEY_R3;IO0SET = IO0SET|KEY_R1|KEY_R2|KEY_R4;delay(2);if((IO0PIN&KEY_C1)==0) nResult = 12;if((IO0PIN&KEY_C2)==0) nResult = 11;if((IO0PIN&KEY_C3)==0) nResult = 10;if((IO0PIN&KEY_C4)==0) nResult = 9;if(nResult !=0 )goto result;//第二行输出低电平IO0CLR = IO0CLR|KEY_R2;IO0SET = IO0SET|KEY_R1|KEY_R3|KEY_R4; delay(2);if((IO0PIN&KEY_C1)==0) nResult = 8;if((IO0PIN&KEY_C2)==0) nResult = 7;if((IO0PIN&KEY_C3)==0) nResult = 6;if((IO0PIN&KEY_C4)==0) nResult = 5;if(nResult !=0 )goto result;//第二行输出低电平IO0CLR = IO0CLR|KEY_R4;IO0SET = IO0SET|KEY_R1|KEY_R2|KEY_R3; delay(2);if((IO0PIN&KEY_C1)==0) nResult = 16;if((IO0PIN&KEY_C2)==0) nResult = 15;if((IO0PIN&KEY_C3)==0) nResult = 14;if((IO0PIN&KEY_C4)==0) nResult = 13;/ 取各个管脚的状态result:Desk_NUM=nResult; SendDesk_ID=1;//保存柜台号//置发送柜台号标志if(DeskDriver[Desk_NUM].allow10s==1) {DeskDriver[Desk_NUM].allow10s=0;DeskDriver[Desk_NUM].keyScaned=1;DeskDriver[Desk_NUM].timeCnt=0;DeskDriver[Desk_NUM].enable=1;DeskDriver[Desk_NUM].sendCount=0; 1DeskDriver[Desk_NUM].sendOK=0;}return nResult;} //开始限定时间,在限定时间内不接受按键//接受按键,并置按下标志//计数归零//开启允许无线发送//初始值 0 表示发送次数为 0,发送一次加//初始值 0 表示没发送成功void SendDesk_Pro(void) {if (Desk_NUM==0x55) return;DeskBuf[0]='a';DeskBuf[1]='b';DeskBuf[2]=Desk_NUM;DeskBuf[3]=0x0d;DeskBuf[4]=0x0a;UART0_SendBufEx(DeskBuf,5);Desk_NUM=0x55;} //无效柜台号,返回//发送完毕,将柜台号置为无效柜台号void TI_CC_SPISetup(void){IO0SET=IO0SET|TI_CC_CSn_PIN ; //设置片选信号无效片选低电平有效PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x55 << 8) ; //设置管脚状态SPCCR = 0x52;SPCR = (0 << 3) |(1 << 4) |(1 << 5) |(0 << 6) |(0 << 7); }//设置 SPI 时钟分频 // CPHA = 0,数据在 SCK 的第一个时钟沿采样// CPOL = 1, SCK为低有效// MSTR = 1, SPI处于主模式 // LSBF = 0, SP数I据传输 MSB ( 位 7)在先// SPIE = 0, S I断被禁止Delay , ((cycles-15) % 6) + 15void TI_CC_Wait(unsigned int cycles0) {uint16 cycles=cycles0*56;while(cycles>15)cycles = cycles - 6;}void TI_CC_PowerupResetCCxxxx(void) {IO0SET=IO0SET|TI_CC_CSn_PIN; TI_CC_Wait(30);IO0CLR=IO0CLR|TI_CC_CSn_PIN; TI_CC_Wait(30);IO0SET=IO0SET|TI_CC_CSn_PIN; TI_CC_Wait(45);IO0CLR=IO0CLR|TI_CC_CSn_PIN; while (IO0PIN&SOMI0);SPDR = TI_CCxxx0_SRES; while( 0 == (SPSR & 0x80)); while (IO0PIN&SOMI0);IO0SET=IO0SET|TI_CC_CSn_PIN; }void writeRFSettings(void)//设置片选信号无效//设置片选信号有效//设置片选信号无效//至少 40us//设置片选信号有效//等待 CCxxxx 准备好//发送命令复位//等待 SPIF 置位,即等待数据发送完毕//等待 CCxxxx 准备好//设置片选信号无效{Write register settingsTI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2, 0x0B); // GDO2输出脚配置(连续时钟) .TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0, 0x06);//GDO0 输出脚配置(当同步词汇发送/收到时声明,在数据端末尾时反声明) .TI_CC_SPIWriteReg(TI_CCxxx0_SYNC1, 0xD3); //同步词汇高字节.TI_CC_SPIWriteReg(TI_CCxxx0_SYNC0, 0x91); / 步词汇低字节.TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN, 0x11); /数/据包长度 (17).TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x05); //数据包自动控制(开启附加字节;地址检查,无广播) .TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x04);//数据包自动控制 (开启 CRC ; 固定长度数据包) .TI_CC_SPIWriteReg(TI_CCxxx0_ADDR,HOME_ADDR); // 设备地址. TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR, 0x10); /信/道数 (16).TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1, 0x06); /频/率合成器控制(软件给出) . TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0, 0x00); /频/率合成器控制(软件给出) . TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2, 0x10);//频率控制词汇, 高字节(软件给 .TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1, 0xA7); //频率控制词汇, 中字节(软件给 .TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0, 0x62);//频率控制词汇, 低字节(软件给 .TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4, 0x2a);//调制器配置(信道滤波带宽: 101.56K) .TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3, 0x83); /调/制器配置(数据率 38.4k) .TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2, 0x11); /调/制器配置( GFSK 格式; 15/16 同步词汇侦测) .TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1, 0x22); /调/制器配置( FEC ,前导数目) . TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0, 0xF8); // 调 制 器 配 置 ( 信 道 空 间 199.951172 .TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN, 0x34); /调/制器背离配置(软件给出 19k) TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 , 0x3F); / 通信控制状态机配置(完成后 保持在 RX ) .TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 , 0x18); /主/通信控制状态机配置(软件给 出) (下同) .TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG, 0x16); /频/率便宜补偿配置. TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG, 0x6C); //位同步配置. TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0x43); // AGC 控制. TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x40); // AGC 控制. TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0x91); // AGC 控制. TI_CC_SPIWriteReg(TI_CCxxx0_FREND1, 0x56); /前/末端 RX 配置. TI_CC_SPIWriteReg(TI_CCxxx0_FREND0, 0x10); /前/末端 TX 配置. TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3, 0xA9); //频率合成器校准. TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2, 0x2A); //频率合成器校准. TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1, 0x00); /频/率合成器校准. TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0, 0x11); /频/率合成器校准. TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST, 0x59); /产/品测试.TI_CC_SPIWriteReg(TI_CCxxx0_TEST2, 0x81); /不/同的测试设置.TI_CC_SPIWriteReg(TI_CCxxx0_TEST1,TI_CC_SPIWriteReg(TI_CCxxx0_TEST0, } void TI_CC_SPIWriteReg(char addr, char{ IO0CLR=IO0CLR|TI_CC_CSn_PIN;0x35); /不/同的测试设置. 0x0B); //不同的测试设置.value)//设置 片选信号有效出) 出) 出)while (IO0PIN&SOMI0);SPDR = addr;while( 0 == (SPSR & 0x80));SPDR = value;while( 0 == (SPSR & 0x80));IO0SET=IO0SET|TI_CC_CSn_PIN; }//等待 CCxxxx 准备好//等待 SPIF 置位,即等待数据发送完毕//等待 SPIF 置位,即等待数据发送完毕//设置片选信号无效void TI_CC_SPIWriteBurstReg(char addr, char *buffer, char count) {char i;#ifdef WIRLUART#endifIO0CLR=IO0CLR|TI_CC_CSn_PIN;while (IO0PIN&SOMI0);SPDR = addr | TI_CCxxx0_WRITE_BURST; while( 0 == (SPSR & 0x80));for (i = 0; i < count; i++){SPDR = buffer[i];while( 0 == (SPSR & 0x80)); } IO0SET=IO0SET|TI_CC_CSn_PIN;#ifdef WIRLUART//设置片选信号有效//等待 CCxxxx 准备好//发送首地址//等待 SPIF 置位,即等待数据发送完毕//挨次发送数据//等待 SPIF 置位,即等待数据发送完毕//设置片选信号无效#endif}void __irq IRQ_Eint0(void){if(RFReceStadPacket(rcv_buf,PAKT_LEN+1,AddState)/)/接收数据包和附加字节( RSSI,CRC,LQI ){LoadRcvBuf();SendDate(rcv_buf,AddState);if(IO1PIN&LED2)IO1CLR=IO1CLR|LED1;elseIO1SET=IO1SET|LED1;#ifdef WIRLUARTrcv_buf[3]=rcv_buf[3]+0x30;UART0_SendBufEx((char*)(&(rcv_buf[3])),1);#endifTI_CC_SPIStrobe(TI_CCxxx0_SFRX); //冲洗 RX BUFFER}else{TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); //置空暇模式TI_CC_SPIStrobe(TI_CCxxx0_SCAL); //手动校正频率合成器TI_CC_SPIStrobe(TI_CCxxx0_SFRX); //冲洗 RX BUFFERTI_CC_SPIStrobe(TI_CCxxx0_SFTX); //冲洗 RX BUFFERTI_CC_SPIStrobe(TI_CCxxx0_SRX);#ifdef WIRLUART//转为接收模式#endif}#ifdef WIRLUART#endifEXTINT = 0x01;VICVectAddr = 0x00;}//清除 EINT0 中断标志char RFReceStadPacket(char *rxBuffer,char length,char *status){if ((TI_CC_SPIReadStatus(TI_CCxxx0_RXBYTES) & TI_CCxxx0_NUM_RXBYTES)) { #ifdef WIRLUART#endifTI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, rxBuffer, length)弹; /数据TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, status, 2);/ 附加字节暂未使用return (char)(status[TI_CCxxx0_LQI_RX]&TI_CCxxx0_CRC_OK);}else{return 0; //报错}}char TI_CC_SPIReadStatus(char addr){char x;uint32 i;i=0;IO0CLR=IO0CLR|TI_CC_CSn_PIN; while (IO0PIN&SOMI0){if(i>5000){//设置片选信号有效//等待 CCxxxx 准备好#ifdef WIRLUART#endifreturn 0;}//超时返回i++; }SPDR =(addr | TI_CCxxx0_READ_BURST);// 发送读取数据的地址while( 0 == (SPSR & 0x80)); SPDR = 0;while( 0 == (SPSR & 0x80)); x = SPDR;IO0SET=IO0SET|TI_CC_CSn_PIN; #ifdef WIRLUARTch[0]=x;UART0_SendBufEx(ch,1);#endifreturn x;//等待 SPIF 置位,即等待数据发送完毕//写入哑函数以读取数据//等待 SPIF 置位,即等待数据发送完毕//读出数据//设置片选信号无效//此处不能有串口发送函数,时间会影响//TI_CC_SPIReadBurstReg//返回寄存器的值}void TI_CC_SPIReadBurstReg(char addr, char *buffer, char count) {unsigned int i;IO0CLR=IO0CLR|TI_CC_CSn_PIN;while (IO0PIN&SOMI0);SPDR = (addr | TI_CCxxx0_READ_BURST);//设置片选信号有效//等待 CCxxxx 准备好//发送首地址while( 0 == (SPSR & 0x80));for (i = 0; i < count; i++){//等待 SPIF 置位,即等待数据发送完毕SPDR = 0 ;while (0 ==(SPSR & 0x80));buffer[i] = SPDR;}IO0SET=IO0SET|TI_CC_CSn_PIN; }void TI_CC_SPIStrobe(char strobe) //读出数据//设置片选信号无效{uint32 i;#ifdef WIRLUART #endifIO0CLR=IO0CLR|TI_CC_CSn_PIN; while (IO0PIN&SOMI0){ //设置片选信号有效//等待 CCxxxx 准备好if(i>5000){#ifdef WIRLUART#endifreturn ; //超时返回}i++;}SPDR = strobe;while( 0 == (SPSR & 0x80));IO0SET=IO0SET|TI_CC_CSn_PIN; #ifdef WIRLUART//发送命令滤波//等待 SPIF 置位,即等待数据发送完毕//设置片选信号无效#endif}void RFSendPacket(char *txBuffer, char size){#ifdef WIRLUART#endifTI_CC_SPIWriteBurstReg(TI_CCxxx0_TXFIFO, txBuffer, size)写;入//发送数据TI_CC_SPIStrobe(TI_CCxxx0_STX); //进入发送模式发送数据while ((IO0PIN&TI_CC_GDO0_PIN)==0); //等待 GDO0 变高#ifdef WIRLUART#endifwhile (IO0PIN&TI_CC_GDO0_PIN);#ifdef WIRLUART//等待 GDO0 变低,结束发送#endif}。
银行账户管理系统C语言源代码[新版].doc
FILE* file;
file = fopen(cFile, "a");
if (!file) return 0;
fprintf(file, "%s %s %.2lf\n", user, pwd, coin_n);
fclose(file);
return 0;
}
int wenjian(char* user, char* pwd,double coin)
char sh[18];
int n;
p=(struct bank*)malloc(sizeof(struct bank));/*给p分配内存*/
welcome2();
printf("请输入您的名字(纯英文):");
gets(name);
printf("请输入您的性别(男:1女2):");
fflush(stdin);
}
else/*如有相同帐号,注册失败*/
{
system("cls");
printf("您输入的帐号已经存在!注册失败!\n");
printf("请选择:按1返回主页面.按任意键退出:");
scanf("%c",&ch);
if(ch=='1'){system("cls");main();}
else exit(0);
fflush(stdin);
scanf("%c",&ch);
fflush(stdin);
if(ch=='1'){system("cls");main();}
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Win[3].IsVIP = 0;
Win[3].WindowState = WaitWin;
Win[4].IsVIP = 0;
Win[4].WindowState = WaitWin;
Win[5].IsVIP = 0;
Win[5].WindowState = Unopen;
struct VIPInformation VIPInfo; //VIP客户资料
struct WINDOWS Win[8]; //8个窗口编号0-7
int MaxSeqLen;//单队列最大允许等待长度
int MinSec;//单业务办理最短时长
int MaxSec;//单业务办理最长时长
int MinRestSec;//窗口休息最短时长
Win[i].sum = 0;
Win[i].timeSum = 0;
Win[i].appraise = 0;
Win[i].restLater = 0;
}
WinCount=3;
VIPWinCount=1;
//读取常量
fscanf(file, "%d", &MaxSeqLen);
fscanf(file, "%d", &MinSec);
printf("VIP number:%d\n",VIPInfo.num);
printf("VIP account:%d\n",VIPInfo.account);
break;
}
}
turn=turn+1;
fclose(fVIP);
}
}
if(state==WaitForVIPNum&&turn==4)
{
char SERVE[3] = {0};//最大客户服务号码
HANDLE hScreenMutex;//保存互斥对象的句柄
Main.c
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <windows.h>
#include <winbase.h>
}
while(state==WaitForVIPNum&&turn<4) //核对VIP身份
{
printf("请输入您的VIP身份证号\n");
fflush(stdin);
order[0]=getchar();
order[1]=getchar();
if(order[0]=='I'&&order[1]=='D')
state = DistributeForOrdinary;
}
if(state==DistributeForOrdinary)
{
maxNUM = maxNUM+1;
SERVE[2] = 48 + maxNUM%10;
SERVE[1] = 48 + (maxNUM%100)/10;
SERVE[0] = 48 + maxNUM/100;
#define WaitWin 11//窗口等待状态
#define Serve 12//窗口服务状态
#define Call 13//窗口叫号状态
#define Rest 14//窗口休息状态
#define Closed 15//窗口下班状态
variable.h
FILE *fptr1;//读取信息的文件
int MaxRestSec;//窗口休息最长时长
int VIPSERVLen;//VIP窗口设置时长
int maxNUM=0;//最大普通服务号码
int minNUM=0;//最小普通服务号码
int VIPmaxNUM=0;//最大VIP服务号码
int VIPminNUM=0;//最小VIP服务号码
#define WaitForVIPNum 2//等待VIP身份号状态
#define CheckVIP 3//核对VIP身份号状态
#define DistributeForVIP 4//分配VIP客户状态
#define Quit 5//下班指令发出,锁定取号机状态
#define Unopen 10//窗口关闭状态
fread(&VIPInfo.account, sizeof(int), 1, fVIP);
if(VIPInfo.num==IDnum)
{
state=DistributeForVIP;
printf("\n\nVIP客户资料:\n");
printf("VIP name:%s\n",);
void print_message(void);//输出函数
void print_file(void);//输出到运行情况的记录(结果)文件
void print_statisticsFile(void);//输出到运行情况的记录(结果)文件
void bankError(void);//特殊情况
void rest(int n); //处理窗口休息请求
int account;
};
struct WINDOWS //存储窗口信息
{
int IsVIP;
int WindowState;
int serveNum;
int start;//记录事件发生时间
int timeInterval;//时间间隔
int closeLater;//服务完毕后是否关闭
int appraise;//客户满意度评价
int sum;//总共受理客户数
clock_t timeSum;//总业务办理时长
int restLater;//服务完毕后是否休息
};
main()
{
clock_t start, finish;
//初始化
initialize();
//创建线程
DWORD ThreatID = 1;
hScreenMutex = CreateMutex(NULL, FALSE, "screen");//创建互斥对象
void InputVIPInformation(void);//VIP客户资料维护
void queue(void);//为普通客户排队
void queueVIP(void);//为VIP排队
void windowWork(void);//各窗口控制
void windowControl(void);//增减窗口控制
fscanf(file, "%d", &MaxSec);
fscanf(file, "%d", &MinRestSec);
fscanf(file, "%d", &MaxRestSec);
fscanf(file, "%d", &VIPSERVLen);
fclose(file);
}
void get_input(void)
change = 1;
printf("\n普通客户到达号码为%d\n\n", maxNUM);
}
if(state==DistributeForVIP)
{
VIPmaxNUM = VIPmaxNUM+1;
FILE *fptr2;//输出文件
FILE *fptr3;//输出统计数据文件
FILE *fVIP;//VIP文件打开指针
int state = 0;//取号机状态值
int closeOrder = 0;//下班指令是否发出
int WinCount, VIPWinCount;//营业窗口数
int change = 0;//是否有事件发生
print_file();
ReleaseMutex(hScreenMutex);//释放互斥对象所有权
}
fclose(fptr2);
print_statisticsFile();//输出统计结果文件
printf("服务结束,是否退出程序\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\a");
//运行
while((VIPWinCount!=0||WinCount!=0)||state!=Quit)
{
WaitForSingleObject(hScreenMutex, INFINITE);//申请互斥对象所有权
control(); //模拟系统运行函数
print_message(); //信息输出函数
system("pause");
return 0;
}
void initialize(void)
{
FILE *file;
int i;
//打开文件
fptr2=fopen("out.txt","w");
file=fopen("parameter.dat","rb");
if(fptr2==NULL||file==NULL){
case 'V': state=WaitForVIPNum; break;
case 'R': scanf("%d", &n);
rest(n);
break;
case 'X': VIPInformationupdate();break;