c语言银行业务模拟

合集下载

银行业务c语言

银行业务c语言

银行业务c语言银行业务涉及多种操作,如存款、取款、转账、查询余额等。

使用C 语言来模拟银行业务是一个很好的练习,可以帮助你了解基本的数据结构、循环、条件语句以及函数等编程概念。

以下是一个简单的C语言程序,用于模拟基本的银行业务:c复制代码#include <stdio.h>// 定义账户结构体typedef struct {int account_number;float balance;} BankAccount;// 存款函数void deposit(BankAccount *account, float amount) {account->balance += amount;printf("Deposit successful. Your new balance is %.2f\n", account->balance);}// 取款函数void withdraw(BankAccount *account, float amount) {if (account->balance >= amount) {account->balance -= amount;printf("Withdrawal successful. Your new balance is %.2f\n", account->balance);} else {printf("Insufficient balance. Withdrawal failed.\n");}}// 显示账户信息void displayAccountInfo(BankAccount *account) {printf("Account number: %d\n", account->account_number);printf("Balance: %.2f\n", account->balance);}int main() {BankAccount myAccount = {12345, 1000.00}; // 初始化账户// 显示初始账户信息printf("Initial account information:\n");displayAccountInfo(&myAccount);// 存款deposit(&myAccount, 500.00);// 取款withdraw(&myAccount, 200.00);// 再次显示账户信息printf("\nUpdated account information:\n");displayAccountInfo(&myAccount);return 0;}这个程序定义了一个名为BankAccount的结构体,该结构体包含账户号和余额两个字段。

银行业务模拟程序

银行业务模拟程序

银⾏业务模拟程序实验⼆银⾏业务模拟程序⼀、实验⽬的⽤Turbo C 语⾔设计实现⼀个⽤事件驱动的银⾏业务离散模型, 模拟每⼀个客户到达银⾏、排⼊⼈最少的业务窗⼝队列、排⾄窗⼝并处理完业务后离开的整个过程,统计客户在银⾏的平均逗留时间⼆、实验环境1、Windows7操作系统;2、VisualC++.三、实验内容假设某银⾏有4个窗⼝对外接待客户,从早上银⾏开门起不断有客户进⼊银⾏。

由于每个窗⼝在某时刻只能接待⼀个客户,因此在客户⼈数众多的时需在每个窗⼝前顺次排队,对于刚进⼊银⾏的客户,如果某个窗⼝的业务员正空闲,则可上前办理业务;反之,若4个窗⼝均有客户所占,他便会排在⼈数最少的队伍后⾯。

现在需要编制⼀个程序⼀模拟银⾏的这种业务活动并计算⼀天中客户在银⾏的平均逗留时间。

假设每个客户办理业务的时间不超过30分钟;两个相邻到达银⾏的客户的时间间隔不超过5分钟。

模拟程序从第⼀个客户到达时间为“0”开始起运⾏。

四、概要设计1、存储结构的类型定义:此模拟程序需要两种数据类型:有序链表和队列。

它们的数据元素类型定义分别如下:(1)typedef struct{int OccurTime; //事件发⽣时刻int NType; //事件类型,Qu表⽰到达事件,0-Qu-1表⽰Qu个窗⼝的离开事件}Event,ElemType;//事件类型,有序链表LinkList的数据元类型typedef LinkList EventList; // 事件链表类型,定义为有序链表(2)typedef struct{int ArrivalTime;//到达时刻int Duration;//办理业务所需时间}QElemType; //队列的数据元素类型2、单链表⽰意图:如课本P69图所⽰。

3、项⽬组成图:4、exp_yh.cpp的程序⽂件包含的函数原型及功能int cmp(Event a,Event b){ }:依事件a的发⽣时刻<、=或>事件b的发⽣时刻分别返回-1、0或1 ;Status InitList(LinkList &L):构造⼀个空的线性链表;Status InitQueue(LinkQueue &Q):构造⼀个空的队列;Status OrderInsert():已知L为有序线性链表,将元素e按⾮降序插⼊在L中;void OpenForDay():初始化操作;void Random():产⽣两个随机数,分别表⽰客户办理时间和两个相邻达到银⾏的客户的时间间隔;int QueueLength():求队列的长度;int Minimum() :返回最短队列的序号Status EnQueue():插⼊元素e为Q的新的队尾元素;Status DeQueue():若队列不空,删除Q的对头元素,⽤e返回其值,并返回OK,否则返回ERRORV oid CustomerArrived():处理客户到达事件;Status GetHead():若队列不空,⽤e返回Q的对头元素,并返回OK,否则返回ERROR;Position GetHead():返回线性链表L中头结点的位置;Status QueueEmpty():若Q为空队列,则返回TRUE,否则返回FALSE;void CustomerDeparture():处理客户离开事件Status ListEmpty():若线性链表L为空表,则返回TRUE,否则返回FALSE;Status DelFirst():h指向L的⼀个结点,把h当做头结点,删除链表中的第⼀个节点并以q返回,若链表为空,q=NULL,并返回FALSE;ElemType GetCurElem():已知p指向线性链表中的⼀个结点,返回p所指节点中数据元素的值;void Bank_Simulation():打印出窗⼝,平均逗留时间main():主函数5、项⽬的模块结构及函数调⽤关系:本程序包含5个模块:(1)主程序模块:void main(){ 接受命令;处理命令;}(2)事件链表表单元模块——实现链表的抽象数据类型;(3)队列单元模块——实现队列的抽象数据类型;(4)事件结点结构单元模块——定义链表的结点结构;(5)队列结点结构单元模块——定义队列的结点结构;各模块之间的调⽤关系如下:主程序模块—〉链表、队列表单元模块—>队列、链表结点结构单元模块。

c++银行业务模拟系统

c++银行业务模拟系统

#include<iostream>#include<fstream>#include<string>#include <time.h>using namespace std;const int aa=70,bb=150,cc=130,dd=50;//不同业务所需时间struct data//客户资料{int usetime;//客户在银行时间int bianhao;//客户编号int yewutime;//客户所办业务时间string yewu;//业务名int yewunum;//业务标号int chutime[3];//客户到达时间,chutime[0]是秒钟,chutime[1]是分钟,chutime[2]是时钟int motime[3];//客户离开时间int windownum;};class Bank{private:int windowsum[4][5]; //窗口数long sumtime; //所有办理完业务客户总共所用时间int suijitime; //最后两个客户间隔时间int stilltime[4]; //每个窗口还需等待时间int s,f,m; //分别是时、分、秒int wind[5]; //wind[0]是空闲窗口数量,wind[1/2/3/4]存放具体窗口名public:Bank(); //初始化data kehu[900]; //8小时内最多客户人数void timelocal(Bank &); //记录时间int windows(int,int); //为客户排队void calculatechu(int,Bank&);//记录客户到达时间void print(int,int ,Bank); //输出客户数据void averagetime(int,Bank); //计算平均时间void window_dail(); //输出窗口信息int fanhui(Bank &); //求随机时间void custerm_dail(int,int,Bank);//选择客户编号void choose(int,int,Bank); //选择查看内容void todaynum(int,int,Bank);//显示今日客户量void writetotext(int,Bank);//文件函数操作};Bank::Bank()//构造{s=8;//时间f=0;m=0;suijitime=0; //随机间隔时间sumtime=0; //所有客户在银行所用时间之和for(int i=0;i<4;i++){stilltime[i]=0; //每个窗口处理剩下业务还需要的时间for(int j=0;j<5;j++)windowsum[i][j]=0; //每个窗口处理客户数}for(int a=0;a<5;a++)wind[a]=0; //wind[0]是空闲窗口数量,wind[1/2/3/4]存放具体窗口名}int Bank::fanhui(Bank &wait){suijitime=rand()%60; //客人随机到达m=m+suijitime; //m即是当地时间while(m/60>=1) //完成时间格式{m=m-60;f++;}while(f/60>=1){f=f-60;s++;}return s;}void Bank::timelocal(Bank &wait) //记录银行时间{cout<<"您到达的时间是: ";if(s<10)cout<<"0"<<s<<":";//特定格式输出else cout<<s<<":";if(f<10)cout<<"0"<<f<<":";else cout<<f<<":";if(m<10)cout<<"0"<<m<<endl;else cout<<m<<endl;}void Bank::averagetime(int x,Bank wait)//计算所有客户的平均等待时间{long aver=0;//平均时间int fen=0,miao=0;//平均时间以分、秒表示int j;sumtime=0;for(j=0;j<x;j++){sumtime=sumtime+wait.kehu[j].usetime;//总共时间}aver=sumtime/(x);//计算fen=aver/60;miao=aver;cout<<"所有客户平均等待了 "<<fen<<"分"<<miao<<"秒!"<<endl<<endl;}//求空窗口数int Bank::windows(int x,int i)//x是办理业务的客户数,i是最后一位顾客的编号,wait 是主函数里定义的对象{int a,b=1,t=0;for(a=0;a<5;a++)//初始化窗口空闲信息wind[a]=0;for(a=0;a<4;a++){stilltime[a]=stilltime[a]-suijitime;//特定窗口处理还需的时间等于上次处理所需的时间减去随机等待时间if(stilltime[a]<=0) //如果时间为负,重新赋值{stilltime[a]=0;wind[0]++; //空余窗口数wind[b++]=a+1; //指出特定的空闲窗口}}t=wind[0];b=1;while(x<=i && t>0) //窗口不空{stilltime[wind[b]-1]=stilltime[wind[b]-1]+kehu[x].yewutime;//特定窗口处理完业务所需时间等于处理完上次业务所需时间加上此次业务时间kehu[x].motime[0]=m;//客户离开时的秒钟kehu[x].motime[1]=f;//客户离开时的分钟kehu[x].motime[2]=s;//客户离开时的时钟kehu[x].usetime=kehu[x].motime[0]-kehu[x].chutime[0]+(kehu[x].motime[1]-kehu[x]. chutime[1])*60+(kehu[x].motime[2]-kehu[x].chutime[2])*3600+kehu[x].yewutime;//客户在银行等待时间windowsum[wind[b]-1][0]++;//特定窗口处理的客户数windowsum[wind[b]-1][kehu[x].yewunum]++; //特定窗口处理的业务数b++;x++;t--;}return x;}void Bank::calculatechu(int i,Bank &Custerm)//客户的到达时间{int j;for(j=0;j<3;j++)//初始化客户到达时间Custerm.kehu[i].chutime[j]=0;Custerm.kehu[i].chutime[0]=m;//为客户到达时间赋值Custerm.kehu[i].chutime[1]=f;Custerm.kehu[i].chutime[2]=s;}void Bank::print(int x,int i,Bank Custerm)//输出客户信息{int sec,min,hour;sec=Custerm.kehu[x].motime[0]+Custerm.kehu[x].yewutime;min=Custerm.kehu[x].motime[1];hour=Custerm.kehu[x].motime[2];while(sec>=60){sec=sec-60;min++;}while(min>=60){min=min-60;hour++;}cout<<"以下是"<<Custerm.kehu[x].bianhao<<"号客户的详细资料:"<<endl;cout<<"选择的业务:"<<Custerm.kehu[x].yewu<<endl;cout<<"选择的业务所需的时间:"<<Custerm.kehu[x].yewutime<<endl;cout<<"客户到达的时间:";for(int k=2;k>0;k--){if(Custerm.kehu[x].chutime[k]<10)cout<<"0"<<Custerm.kehu[x].chutime[k]<<":"; else cout<<Custerm.kehu[x].chutime[k]<<":";}if(Custerm.kehu[x].chutime[0]<10)cout<<"0"<<Custerm.kehu[x].chutime[0];else cout<<Custerm.kehu[x].chutime[0];cout<<endl;cout<<"客户离开的时间:";if(hour<10)cout<<"0"<<hour<<":";//特定格式输出else cout<<hour<<":";if(min<10)cout<<"0"<<min<<":";else cout<<min<<":";if(sec<10)cout<<"0"<<sec<<endl;else cout<<sec<<endl;cout<<endl;}void Bank::window_dail()//输出窗口办理业务的情况{int i;while(1){cout<<"请选择窗口(1--4),以0结束:"<<endl;cin>>i;if(i==0){system("cls");break;}if(i>=5){system("cls");cout<<"没有这个窗口,请重新选择"<<endl;}else{system("cls");cout<<" "<<i<<"窗口共处理了 "<<windowsum[i-1][0]<<"人"<<endl;cout<<"其中"<<endl;cout<<" 存款业务 "<<windowsum[i-1][1]<<"人"<<endl;cout<<" 取款业务 "<<windowsum[i-1][2]<<"人"<<endl;cout<<" 挂失业务 "<<windowsum[i-1][3]<<"人"<<endl;cout<<" 还贷业务 "<<windowsum[i-1][4]<<"人"<<endl;}}}void Bank::todaynum(int x,int i,Bank Custerm)//输出客户量{cout<<endl<<" 今日共来了"<<i<<"位客户!"<<endl;cout<<" 其中,处理了"<<x<<"位客户,还有"<<i-x<<"位客户未得到处理!"<<endl<<endl;}void Bank::custerm_dail(int i,int x,Bank Custerm)//选择输出的客户编号{int h;while(1){cout<<"请输入您想知道的客户编号(以 0 结束):";cin>>h;if(h==0){cout<<endl;break;}else if(h>i){system("cls");cout<<"没有这个编号,请重新选择!"<<endl<<endl;}else if(h>x&&h<i){system("cls");cout<<"银行停业前未处理该客户!"<<endl<<endl;}else {system("cls");print(h-1,i,Custerm);}}}void Bank::choose(int x,int i,Bank Custerm)//选择输出详细信息{int n;int flag=0;while(1){cout<<" ★★★★★★★★★★★★★★★"<<endl;cout<<endl;cout<<" ◎ 0 退出◎"<<endl<<endl;cout<<" ◎ 1 查看今日银行客户数量◎"<<endl<<endl;cout<<" ◎ 2 第n号窗口的详细信息◎"<<endl<<endl;cout<<" ◎ 3 客户平均等待时间◎"<<endl<<endl;cout<<endl;cout<<" ★★★★★★★★★★★★★★★"<<endl<<endl; cout<<" 请选择: ";cin>>n;switch(n){case 0:{flag=1;break;}case1:system("cls");todaynum(x,i,Custerm);system("pause");system("cls");break;case 2:system("cls");window_dail();break;// case 3:system("cls");custerm_dail(i,x,Custerm) ;break;case3:system("cls");averagetime(x,Custerm);system("pause");system("cls");break; default:system("cls");cout<<"没有这个选项,请重新选择!"<<endl;break;}if(flag==1)break;}}void Bank::writetotext(int x,Bank Custerm)//文件操作{int sec,min,hour;int j=0;char ch;sec=Custerm.kehu[j].motime[0]+Custerm.kehu[j].yewutime;min=Custerm.kehu[j].motime[1];hour=Custerm.kehu[j].motime[2];while(sec>=60){sec=sec-60;min++;}while(min>=60){min=min-60;hour++;}cout<<"是否生成文件?(y/n): ";cin>>ch;if(ch=='y'){if(x==0)cout<<"数据记录为空!"<<endl;else{ofstream outfile("f1.txt",ios::out);if(!outfile){cout<<"打开失败"<<endl;exit(1);}while(j<x){outfile<<" * * * * * * * * * * "<<endl;outfile<<" 客户编号: "<<kehu[j].bianhao<<endl;;outfile<<" 办理业务: "<<kehu[j].yewu<<endl;outfile<<" 业务时间: "<<kehu[j].yewutime<<endl;outfile<<" 到达时间: ";if(kehu[j].chutime[2]<10)outfile<<"0"<<kehu[j].chutime[2]<<":";else outfile<<kehu[j].chutime[2]<<":";if(kehu[j].chutime[1]<10)outfile<<"0"<<kehu[j].chutime[1]<<":";else outfile<<kehu[j].chutime[1]<<":";if(kehu[j].chutime[0]<10)outfile<<"0"<<kehu[j].chutime[0]<<":"<<endl;else outfile<<kehu[j].chutime[0]<<":"<<endl;outfile<<" 离开时间: ";sec=Custerm.kehu[j].motime[0]+Custerm.kehu[j].yewutime;min=Custerm.kehu[j].motime[1];hour=Custerm.kehu[j].motime[2];while(sec>=60){sec=sec-60;min++;}while(min>=60){min=min-60;hour++;}if(hour<10)outfile<<"0"<<hour<<":";else outfile<<hour<<":";if(min<10)outfile<<"0"<<min<<":";else outfile<<min<<":";if(sec<10)outfile<<"0"<<sec<<":"<<endl;else outfile<<sec<<":"<<endl;j++;}outfile.close();cout<<"成功生成文件!"<<endl;}}}int main (){int ff;time_t t = time(0); //时间函数char tmp[64];int x=0,i=0; //i是最后到的客户编号int flag1=1,flag=1,flag2=1; //x排在最前面的客户编号,,flag1是第一次选项的关键标志,flag标志int s=8; //16:00之前营业,s是时钟,m是最后两位客户间隔时间 int ch;Bank Custerm;string a="存款",b="取款",c="挂失",d="还贷";//业务名while(flag1){cout<<endl;cout<<" ★★★★★★★★★★★★★★★"<<endl;cout<<endl;cout<<" …………0:退出……………… "<<endl;cout<<" …………1:随机结果………… "<<endl;cout<<" …………2:输入业务………… "<<endl;cout<<" …………3:从文件读入…………"<<endl;cout<<" ★★★★★★★★★★★★★★★"<<endl;cout<<" 请选择: ";scanf("%d",&ch);switch(ch){case 0:exit(0);case 1:{flag=0;//选择是否使用系统暂停函数flag1=0;//停止本项选择break;}case 2:{flag1=0;break;}/*case 3:{flag1=0;break;}*/default:{cout<<" 没有这个选项,请重新选择!"<<endl;system("pause");break;}}system("cls");}while(s){cout<<endl;cout<<endl;cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄"<<endl;cout<<endl;cout<<" ★★★★★★★★★★★★★★★★★★★★★★★"<<endl;cout<<" ★★★★★★欢迎来到小辉辉银行★★★★★★"<<endl;cout<<" ★★★★★★"<<endl;cout<<" ★★"<<endl;cout<<" ★…………1:存款……………★"<<endl;cout<<" ★…………2:取款……………★"<<endl;cout<<" ★…………3:挂失……………★"<<endl;cout<<" ★…………4:还贷……………★"<<endl;cout<<" ★…………0:退出……………★"<<endl;cout<<endl;cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄"<<endl;if(flag==1){cin>>ff;}else{ff=(rand()%4+1);//随机选择4种业务}switch(ff){case 0:system("cls");break;{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime(tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );//显示当地时间的函数puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;//赋值编号Custerm.kehu[i].yewu=a;//赋值业务名Custerm.kehu[i].yewunum=1;//赋值业务编号Custerm.kehu[i].yewutime=aa;//赋值业务所用时间Custerm.timelocal(Custerm);//16:00之前营业,s是时钟Custerm.calculatechu(i,Custerm);//计算到达时间x=Custerm.windows(x,i);//x是排在前面的顾客编号i++;cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<a<<endl<<endl;cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}case 2:{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime( tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;Custerm.kehu[i].yewu=b;Custerm.kehu[i].yewunum=2;Custerm.kehu[i].yewutime=bb;Custerm.timelocal(Custerm);Custerm.calculatechu(i,Custerm);x=Custerm.windows(x,i);cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<b<<endl<<endl; cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}case 3:{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime( tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;Custerm.kehu[i].yewu=c;Custerm.kehu[i].yewunum=3;Custerm.kehu[i].yewutime=cc;Custerm.timelocal(Custerm);Custerm.calculatechu(i,Custerm);x=Custerm.windows(x,i);i++;cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<c<<endl<<endl; cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}case 4:{cout<<endl;cout<<"* * * * * * * * * * * * * * * "<<endl;strftime( tmp, sizeof(tmp), "%Y/%m/%d %A %z",localtime(&t) );puts(tmp);s=Custerm.fanhui(Custerm);if(s>=16){flag2=0;break;}Custerm.kehu[i].bianhao=i+1;Custerm.kehu[i].yewu=d;Custerm.kehu[i].yewunum=4;Custerm.kehu[i].yewutime=dd;Custerm.timelocal(Custerm);Custerm.calculatechu(i,Custerm);x=Custerm.windows(x,i);i++;cout<<endl<<"您的号码是: "<<i<<" 办理的是: "<<d<<endl<<endl; cout<<"您前面还有"<<i-x<<"位客户"<<endl<<endl;break;}default:cout<<"没有这个选项!"<<endl;break;}if(ff==0){break;}if(flag==1){system("pause");}system("cls");if(flag2==0){break;}}Custerm.choose(x,i,Custerm);Custerm.writetotext(x,Custerm);return 0;}。

银行业务模拟C++

银行业务模拟C++
currentTimeOfDeal+=randomTemp;
++counter;//更新客户总数
totalTime+= ( back(eq)->endTime- temped->beginTime);//更新逗留时间
delete temped; //删除节点
temped = NULL;
}
state = 0;
printf("1.开始模拟0.退出\n");
intn;
scanf("%d",&n);
while(n==1) {
srand(time(NULL)); //初始化随机函数
printf("输入银行的初始存款\n");
scanf("%d",&total);
printf("输入银行的营业时间\n");
scanf("%d",&closeTime);
while( NULL !=fq.head)
{
totalTime+= (closeTime-fq.head->beginTime);//更新结束时第一队列中为处理客户
cout<<fq.head->num <<" "<<endl;
++counter;
pop(fq);
}
cout<<"客户逗留平均时间为" <<totalTime/counter <<endl;
{//在队列中寻找可处理元素
service* sign = q. head; //标记头结点

C语言课程设计_银行存取款业务

C语言课程设计_银行存取款业务

C语言课程设计_银行存取款业务《C语言程序设计》课程设计报告题目:模拟银行存取款业务学生姓名学号专业班级学部计算机科学与电气工程学部目录第1章绪论 (1)1.1设计目的 (1)1.2 内容与要求 (1)第2章系统总体设计 (2)2.1系统设计的组成框图 (2)2.2功能描述 (2)第3章系统详细设计 (3)3.1程序设计流程图 (3)3.2功能模块设计 (4)3.3函数功能描述 (5)3.4数据结构设计 (5)第4章系统使用与测试 (6)4.1使用说明 (6)4.2 系统测试 (6)第5章结论 (11)5.1系统中用到的知识点 (11)5.2系统难点以及解决办法 (11)5.3本系统的主要技术 (11)5.4编程总结 (12)5.5自评成绩 (12)附录 (13)第1章绪论1.1设计目的1)银行存取款系统是针对银行账目的日常管理而设计。

银行账目管理系统不仅要求操作方便而且要求界面简洁,它还需要实现账目管理,用户查询功能。

2)并了解银行存取款业务的流程,使用C语言和数据程序知识模拟银行存取款系统。

1.2 内容与要求1.题目:模拟银行存取款业务系统2.基本内容:1)设定账户密码,设计一银行存取款管理系统来是提供以下功能:存款、取款、查询功能。

2)存款:存款后查询所存储金额可以写入储蓄金额3)取款:取款前判定所取金额是否超过原有储蓄金额,若不超过可以取款,取款后能够写入文档,利用查询功能可以查询余额。

4)查询:可查询现有储蓄金额。

3要求:1)完成银行存取款业务的模拟系统,并且能够运行。

2)设定账户密码,密码输入三次自动退出系统。

3)功能结束后选择Y或y能够继续选择功能。

4)程序各个模块要添加注释。

5)报告要画出系统框图和详细的流程图。

6)输出的结果要准确、清晰、美观。

第2章系统总体设计2.1系统设计的组成框图2.2功能描述系统实现的主要有储蓄卡的存款功能、取款功能、查询功能。

第3章系统详细设计3.1程序设计流程图3.2功能模块设计1)存款模块:登陆账号后,选择存款功能,并输入存款金额,写入文件,原有金额增加,可使用查询功能进行查询。

银行管理系统c语言程序设计代码

银行管理系统c语言程序设计代码

银行管理系统C语言程序设计代码简介银行管理系统是一个用于模拟银行业务的计算机程序。

它可以实现用户账户的创建、存取款、转账等功能,同时还可以进行利息计算、账单管理等操作。

本文将详细介绍银行管理系统的设计和实现,包括系统的功能模块、数据结构和算法等内容。

功能模块银行管理系统主要包括以下功能模块:1.用户管理:包括用户账户的创建、修改、删除等操作。

2.账户管理:包括存款、取款、查询余额、转账等操作。

3.利息计算:根据存款金额和存款期限计算利息。

4.账单管理:记录用户的交易明细和账户余额变动。

数据结构银行管理系统使用了以下数据结构:1.用户账户结构体:包括账户ID、账户名称、账户类型等信息。

2.用户交易结构体:包括交易类型、交易金额、交易时间等信息。

3.用户账户链表:用于保存所有用户账户的信息。

4.用户交易链表:用于保存用户的交易明细。

算法设计银行管理系统使用了以下算法:1.用户账户创建算法:通过用户输入的信息创建新的账户,并将其添加到账户链表中。

2.存款算法:根据用户输入的存款金额,将其添加到账户余额中。

3.取款算法:根据用户输入的取款金额,从账户余额中扣除相应金额。

4.转账算法:根据用户输入的转账金额和目标账户ID,将相应金额从当前账户中转到目标账户中。

5.利息计算算法:根据存款金额和存款期限,计算相应的利息。

6.账单记录算法:将用户的交易明细和账户余额变动记录到交易链表中。

代码实现以下是银行管理系统的C语言代码示例:#include <stdio.h>// 用户账户结构体typedef struct {int accountId;char accountName[100];char accountType[100];float balance;} Account;// 用户交易结构体typedef struct {int accountId;char transactionType[100];float amount;char transactionTime[100];} Transaction;// 用户账户链表typedef struct {Account account;struct AccountNode* next;} AccountNode;// 用户交易链表typedef struct {Transaction transaction;struct TransactionNode* next;} TransactionNode;// 创建用户账户void createAccount(AccountNode** head, Account account) { // 创建新的账户节点AccountNode* newNode = (AccountNode*)malloc(sizeof(AccountNode)); newNode->account = account;newNode->next = NULL;// 将新的账户节点添加到链表中if (*head == NULL) {*head = newNode;} else {AccountNode* current = *head;while (current->next != NULL) {current = current->next;current->next = newNode;}}// 存款void deposit(AccountNode* head, int accountId, float amount) {AccountNode* current = head;while (current != NULL) {if (current->account.accountId == accountId) {current->account.balance += amount;break;}current = current->next;}}// 取款void withdraw(AccountNode* head, int accountId, float amount) {AccountNode* current = head;while (current != NULL) {if (current->account.accountId == accountId) {if (current->account.balance >= amount) {current->account.balance -= amount;} else {printf("Insufficient balance.\n");}break;}current = current->next;}}// 转账void transfer(AccountNode* head, int sourceAccountId, int targetAccountId, flo at amount) {AccountNode* current = head;while (current != NULL) {if (current->account.accountId == sourceAccountId) {if (current->account.balance >= amount) {current->account.balance -= amount;break;} else {printf("Insufficient balance.\n");}current = current->next;}current = head;while (current != NULL) {if (current->account.accountId == targetAccountId) {current->account.balance += amount;break;}current = current->next;}}// 利息计算float calculateInterest(float principal, int years) {float rate = 0.05; // 假设利率为5%return principal * rate * years;}// 账单记录void recordTransaction(TransactionNode** head, Transaction transaction) { // 创建新的交易节点TransactionNode* newNode = (TransactionNode*)malloc(sizeof(TransactionNod e));newNode->transaction = transaction;newNode->next = NULL;// 将新的交易节点添加到链表中if (*head == NULL) {*head = newNode;} else {TransactionNode* current = *head;while (current->next != NULL) {current = current->next;}current->next = newNode;}}int main() {AccountNode* accountList = NULL;TransactionNode* transactionList = NULL;// 创建账户Account account1 = {1, "John Doe", "Savings", 1000.0};createAccount(&accountList, account1);Account account2 = {2, "Jane Smith", "Checking", 2000.0};createAccount(&accountList, account2);// 存款deposit(accountList, 1, 500.0);// 取款withdraw(accountList, 1, 200.0);// 转账transfer(accountList, 1, 2, 300.0);// 利息计算float interest = calculateInterest(1000.0, 1);printf("Interest: %.2f\n", interest);// 账单记录Transaction transaction1 = {1, "Deposit", 500.0, "2022-01-01 10:00:00"};recordTransaction(&transactionList, transaction1);Transaction transaction2 = {1, "Withdraw", 200.0, "2022-01-02 11:00:00"};recordTransaction(&transactionList, transaction2);return 0;}总结银行管理系统是一个功能丰富的计算机程序,通过使用C语言进行设计和实现,可以实现用户账户的创建、存取款、转账等功能,同时还可以进行利息计算、账单管理等操作。

c语言课程设计银行模拟系统

c语言课程设计银行模拟系统

c语言课程设计银行模拟系统一、教学目标本课程的教学目标是使学生掌握C语言的基本语法和编程技巧,能够运用C语言设计简单的银行模拟系统。

具体目标如下:1.知识目标:(1)理解C语言的基本数据类型、运算符、表达式和语句。

(2)掌握函数的定义、声明和调用。

(3)了解数组、字符串、指针的概念和应用。

(4)熟悉常用的库函数和编程规范。

2.技能目标:(1)能够使用C语言编写简单的程序,解决实际问题。

(2)能够运用C语言进行模块化编程,提高代码的可读性和可维护性。

(3)能够运用C语言设计银行模拟系统的核心功能模块,如账户管理、存款、取款、查询等。

3.情感态度价值观目标:(1)培养学生的编程兴趣,增强自信心。

(2)培养学生团队合作、自主学习的精神。

(3)使学生认识到C语言在实际应用中的重要性,激发学生的学习热情。

二、教学内容根据课程目标,教学内容主要包括以下几个部分:1.C语言基础知识:数据类型、运算符、表达式、语句等。

2.函数:函数的定义、声明和调用,函数的参数传递和返回值。

3.面向过程编程:数组、字符串、指针的概念和应用。

4.常用库函数和编程规范:标准输入输出、数学函数、字符处理等。

5.银行模拟系统设计:账户管理、存款、取款、查询等功能模块的实现。

三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解C语言的基本概念和语法,为学生提供清晰的知识结构。

2.案例分析法:分析实际案例,使学生更好地理解C语言的应用。

3.实验法:引导学生动手实践,培养学生的编程能力和解决问题的能力。

4.讨论法:学生进行小组讨论,促进学生之间的交流与合作。

四、教学资源为实现课程目标,我们将使用以下教学资源:1.教材:《C语言程序设计》等相关教材,为学生提供系统的学习资料。

2.参考书:提供一些经典的C语言编程书籍,供学生拓展阅读。

3.多媒体资料:制作精美的PPT,辅助讲解和展示实例。

4.实验设备:为学生提供计算机实验室,进行编程实践和实验。

c语言银行自动存取款机模拟

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语言)

数据结构——银行排队系统模拟(C语言)

数据结构——银⾏排队系统模拟(C语⾔)程序最终⽬的:获得所有客户在银⾏营业期间停留的平均时间程序初始值:默认第⼀个⽤户到达的时间为(0,0)#include <stdio.h>#include <stdlib.h>#include <time.h>/**使⽤队列模拟银⾏排队系统,并计算客户在银⾏停留的平均时间*问题1:银⾏已到达关闭时间,但是还有客户正在窗⼝处理问题(涉及到客户离开事件)*问题2:功能还未完全测试。

*问题3:代码未优化*version1:随机数版本(使⽤随机数产⽣客户数据)*待完成版本:数组版本(version);⽂件版本(version)*/#define USE_TIME 30 //客户在银⾏停留的最⼤时间#define NEXT_TIme 5 //下⼀个客户到达的最⼤间隔时间typedef struct E_list //有序表结点{int cur_time; /*记录当前时间*/int E_type; /*记录事件类型*/struct E_list* next; /*指针域*/} E_List,*EvenList;typedef struct Q_node //队列结点{int arrive_time; /*记录客户达到时间*/int dur_time; /*记录客户在银⾏停留时间*/struct Q_node* next; /*指针域*/} Q_Node,*QueueNode;typedef struct E_queue //队列操作结构{QueueNode front; /*指向队⾸元素*/QueueNode rear; /*指向队尾元素*/int length; /*记录队列长度*/} E_queue,*Win_Queue;int totalTime; /*记录总时间*/int allcustomer; /*记录客户数量*/int closetime; /*设置关闭时间*/E_List ev; //有序表头节点E_queue e_q[4]; //窗⼝队列操作结构void enter_List(EvenList new_E) //进⼊有序表{EvenList agent = ev.next; //代理指针指向第⼀个元素EvenList pre_E =&ev; //代理指针指向头结点while(agent!=NULL && (new_E->cur_time > agent->cur_time)) //找到元素的插⼊位置{pre_E = agent;agent = agent->next;}if(agent == NULL) /*插⼊到表尾*/{pre_E->next = new_E;}else /*插⼊到⾮表尾位置*/{new_E->next = agent;pre_E->next = new_E;}agent = ev.next;while(agent!=NULL) /*进⾏表的遍历*/{printf("(%d,%d)\n",agent->cur_time,agent->E_type);agent = agent->next;}printf("\n\n");}void out_List(EvenList Event) //出有序表{/*记录待删除结点的数据后,释放该结点*/EvenList temp = ev.next;Event->cur_time = temp->cur_time;Event->E_type = temp->E_type;Event->next = NULL;ev.next = temp->next; //出有序表节点printf("%p\n",temp->next); //测试语句printf("待处理客户:(%d , %d)\n",temp->cur_time,temp->E_type); /*测试语句*/free(temp); /*释放待删除结点*/}void en_Queue(Win_Queue q, QueueNode new_node) //进⼊指定队列{/*将元素加⼊到队列末尾,并增加队列长度*/q->rear->next = new_node;q->rear = new_node;q->length++;}void DeQueue(Win_Queue q,QueueNode node) //出队列{/*记录待出队列结点的数据,释放该结点后,队列长度减⼀*/QueueNode temp = q->front->next;q->front->next = temp->next;q->length--; /*队列长度减⼀*//*存储待删除结点的数据*/node->arrive_time = temp->arrive_time;node->dur_time = temp->dur_time;node->next = NULL;}void openforday() //初始化数据{int i;EvenList temp;QueueNode temp_q;totalTime = 0; /*初始化时间记录器*/allcustomer = 0; /*初始化顾客记录器*/closetime = 5; /*初始化银⾏关闭时间*/temp = (EvenList)malloc(sizeof(E_List));if(temp == NULL){printf("memory is failure!\n");exit(1);}temp->cur_time = 0;temp->E_type = 0;temp->next = NULL;ev.next = temp; /*将第⼀个客户数据(0,0,)加⼊到事件表*/for(i=0; i<4; i++) //为每⼀个窗⼝队列设置头节点{temp_q = (QueueNode)malloc(sizeof(Q_Node));if(temp_q == NULL){printf("memory allocate is failure!\n");exit(1);}temp_q->next = NULL;e_q[i].front = temp_q;e_q[i].rear = temp_q;e_q[i].length = 0; /*初始化队列长度*/}}void Even_head(EvenList E) //得到有序表的第⼀个客户{/*获得事件表第⼀个元素的副本*/E->cur_time = ev.next->cur_time;E->E_type = ev.next->E_type;E->next = NULL;}void arrive_Event() //处理客户到达事件{/***系统产⽣两个随机数(x,y),x表⽰当前窗⼝type = 0的⽤户在银⾏的停留时间*y表⽰下⼀个客户与上⼀个客户的间隔时间。

c语言银行业务模拟

c语言银行业务模拟

银行业务模拟(2)银行业务模拟(难度系数4)[问题描述]客户业务分为两种。

第一种是申请从银行得到一笔资金,即取款或借款。

第二种是向银行投入一笔资金,即存款或换款。

银行有两个服务窗口,相应地有两个队列。

客户到达银行后先派第一个队列。

处理每一个客户业务时,如属于第一种,且申请超出银行现存资金总额而得不到满足的,则立即排入第二个队列等候,直到满足时才离开银行;否则业务处理完后立即离开银行。

每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的末尾。

注意:在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有满足者)转而继续接待第一个队列的客户。

任何时刻都只开一个窗口。

假设检查不需要时间。

营业时间结束时所有客户立即离开银行。

写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。

[基本要求]利用动态存储结构实现模拟。

[测试数据]一天营业开始银行拥有的款项10000(元),营业时间为600分钟。

其他模拟的参量自定。

注意测定两种极端情况:一是两个到达事件之间的间隔很短,而客户的交易时间很长;另一个正好相反,设置两个到达事件的间隔时间很长,而客户之间交易的时间很短。

[实现提示]事件有两类:到达银行和离开银行。

初始时银行现存资金总额为Total。

开始营业后的第一个事件是客户到达,营业时间从0到Closetime。

到达事件发生时随机地设置各客户的交易时间和距下一次到达时间之间的时间间隔。

每个客户要办理的款项也是随机确定的,用负值和正值分别表示第一类和第二类业务。

变量To tal、CloseTime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。

两个队列和一个事件表均要用动态的存储结构实现。

C语言课程设计-模拟银行系统

C语言课程设计-模拟银行系统

C语言课程设计-模拟银行系统一、教学目标本课程旨在通过学习C语言,使学生能够理解并运用面向过程的编程思想,掌握C语言的基本语法和操作,能够独立完成简单的应用程序开发。

在模拟银行系统的项目中,学生将学习如何设计程序结构,实现数据的管理和操作,以及如何进行输入输出等操作。

1.理解C语言的基本语法和数据类型。

2.掌握函数的定义和调用。

3.学习面向过程的编程思想。

4.了解银行系统的业务流程。

5.能够使用C语言编写简单的程序。

6.能够运用面向过程的编程思想进行程序设计。

7.能够独立完成模拟银行系统的项目。

情感态度价值观目标:1.培养学生的编程兴趣,提高学生学习的积极性。

2.培养学生的团队协作能力,提高学生的沟通表达能力。

3.使学生认识到C语言在实际应用中的重要性,提高学生的学习自信心。

二、教学内容本课程的教学内容以C语言的基本语法和操作为基础,通过模拟银行系统的项目,使学生能够理解和运用面向过程的编程思想。

1.C语言的基本语法和数据类型。

2.函数的定义和调用。

3.面向过程的编程思想。

4.模拟银行系统的业务流程。

5.项目的实施和调试。

6.C语言程序设计。

7.面向过程的编程思想。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法,以提高学生的学习兴趣和主动性。

1.讲授法:通过讲解C语言的基本语法和操作,使学生掌握C语言的基础知识。

2.案例分析法:通过分析模拟银行系统的业务流程,使学生理解面向过程的编程思想。

3.实验法:通过实际操作,使学生掌握C语言的编程技巧,提高学生的实际编程能力。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。

1.教材:C语言程序设计、面向过程的编程思想。

2.参考书:C语言编程实例、C语言编程技巧。

3.多媒体资料:C语言教学视频、模拟银行系统的案例分析。

4.实验设备:计算机、编程环境。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面、客观、公正地评价学生的学习成果。

C语言ATM程序模拟

C语言ATM程序模拟

一、课题要求1、当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录A TM柜员机系统。

2、查询余额:初始余额为10000元。

3、ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。

4、ATM存款:不能出现负存款。

5、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。

二、代码#include "stdafx.h"#include "stdio.h"#include "windows.h"#include "stdlib.h"#include "conio.h"void gotoxy(int x,int y); //光标位置函数void enter_ATM(); //账号输入函数void input_code(); //密码输入函数void caozuo(); //基本操作界面void qukuan(); //取款函数void success(); //操作成功函数void delay(); //延时函数void yu_e(); //余额查询函数void cunkuan(); //存款函数void panduan(long int z); //判断取款是否合法函数void exit(); //退出界面函数void mima(); //密码修改void zhuangyi();long int CODE=123456,YU_E=10000;//=========================主函数========================//main(){enter_ATM();caozuo();}//======================================================////==================================柜台机账号输入函数=======================================//void enter_ATM(){system("cls");printf("********************************\n");printf("* *\n");printf("* 欢迎使用A TM 柜台机*\n");printf("* 请输入卡号*\n");printf("* *\n");printf("* 取消确定*\n");printf("* *\n");printf("********************************\n");long int user;gotoxy(14,4);scanf("%d",&user);while(user!=123456){system("cls");printf("********************************\n");printf("* *\n");printf("* 账户不存在,请从新输入*\n");printf("* *\n");printf("* *\n");printf("* 取消确定*\n");printf("* *\n");printf("********************************\n");gotoxy(13,3);scanf("%d",&user);}input_code();}//========================================================================= =================////=======================================密码输入函数========================================//void input_code(){long int code;int temp=3,time;system("cls");printf("********************************\n");printf("* *\n");printf("* 请输入密码*\n");printf("* *\n");printf("* *\n");printf("* 取消确定*\n");printf("* *\n");printf("********************************\n");gotoxy(14,3);scanf("%d",&code);while(code!=CODE){temp--;if(temp==0){for(time=5;time>0;time--){system("cls");printf("********************************\n");printf("* *\n");printf("* 您已经3 次输入密码*\n");printf("* 系统将退出操作*\n");printf("* *\n");printf("* ");printf("%d",time);printf(" *\n");printf("* *\n");printf("********************************\n");delay();}enter_ATM();}system("cls");printf("********************************\n");printf("* *\n");printf("* 密码错误,请重新输入*\n");printf("* 您还有");printf("%d",temp);printf(" 次机会*\n");printf("* *\n");printf("* 取消确定*\n");printf("* *\n");printf("********************************\n");gotoxy(14,4);scanf("%d",&code);}caozuo();}//========================================================================= ============////============================================主操作界面函数========================================//void caozuo(){system("cls");printf("********************************\n");printf("* 请选择一下业务*\n");printf("* 1.修改密码*\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");}}//========================================================================= =========================////==============================密码修改函数==============================// void mima(){long int mm1,mm2,mm3;char temp;system("cls");printf("********************************\n");printf("* *\n");printf("* 旧密码: *\n");printf("* *\n");printf("* 新密码: *\n");printf("* 确认新密码: *\n");printf("* *\n"); printf("********************************\n"); gotoxy(15,2);scanf("%d",&mm1);gotoxy(15,4);scanf("%d",&mm2);gotoxy(15,5);scanf("%d",&mm3);if(mm1!=CODE){system("cls");printf("********************************\n"); printf("* *\n"); printf("* 旧密码错误*\n"); printf("* *\n"); printf("* 请重新输入!*\n"); printf("* *\n"); printf("* *\n"); printf("********************************\n"); delay();delay();zhuangyi();}if(mm2!=mm3){system("cls");printf("********************************\n"); printf("* *\n"); printf("* 确认密码不一致*\n"); printf("* *\n"); printf("* 请重新输入!*\n"); printf("* *\n"); printf("* *\n"); printf("********************************\n"); delay();delay();zhuangyi();}if(mm2<100000){system("cls");printf("********************************\n"); printf("* *\n"); printf("* 密码必须大于或等于6位数*\n");printf("* *\n");printf("* 请重新输入!*\n");printf("* *\n");printf("* *\n");printf("********************************\n");delay();delay();zhuangyi();}temp=mm2%111111;if(temp==0){system("cls");printf("********************************\n");printf("* *\n");printf("* 密码过于简单*\n");printf("* *\n");printf("* 请重新输入!*\n");printf("* *\n");printf("* *\n");printf("********************************\n");delay();delay();zhuangyi();}CODE=mm2;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;}}//======================================================================////==========================余额查询函数============================//void yu_e(){system("cls");printf("********************************\n");printf("* *\n");printf("* *\n");printf("* 系统正在查询*\n");printf("* 请稍候... *\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;}}//==================================================================////===================================取款函数====================================//void qukuan(){long int temp;system("cls");printf("********************************\n");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");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;}}//========================================================================= =======////======================================判断取款是否合法函数==================================//void panduan(long int z){int beishu;if(z>YU_E){system("cls");printf("********************************\n");printf("* *\n");printf("* 余额不足!*\n");printf("* 请重新操作*\n");printf("* *\n"); printf("* 1.返回 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();}//========================================================================= =================////==============================================存款函数=============================================//void cunkuan(){long int temp;system("cls");printf("********************************\n");printf("* *\n");printf("* 请放入人民币*\n");printf("* *\n");printf("* 取消确定*\n");printf("* *\n");printf("* *\n");printf("********************************\n");gotoxy(14,3);scanf("%d",&temp);while(temp<0){system("cls");printf("********************************\n");printf("* *\n");printf("* 非法存款*\n");printf("* 请重新放入人民币*\n");printf("* *\n");printf("* 取消确定*\n");printf("* *\n");printf("********************************\n");gotoxy(14,4);scanf("%d",&temp);}YU_E=YU_E+temp;success();}//========================================================================= ========================////===================================光标位置函数=========================================//void gotoxy(int x,int y){COORD coord;coord.X=x;coord.Y=y;SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );}//========================================================================= ==============////===========================================简答延时函数===========================================//void delay(){long int bl1;int bl2;for(bl1=655356;bl1>0;bl1--){for(bl2=410;bl2>0;bl2--);}}//========================================================================= ==========================////=======================操作成功函数===========================//void success(){system("cls");printf("********************************\n");printf("* *\n");printf("* *\n");printf("* 系统正在处理*\n");printf("* 请稍候... *\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;}}//==============================================================////==========================系统退出函数===========================// void exit(){system("cls");printf("********************************\n");printf("* *\n");printf("* *\n");printf("* 欢迎您的再次使用*\n");printf("* 系统正在退出... *\n");printf("* *\n");printf("* *\n");printf("********************************\n");delay();delay();enter_ATM();}//================================================================////============== 简单转移函数=============//void zhuangyi(){mima();}//========================================//三、部分效果截图。

数据结构C语言实现之银行业务模拟

数据结构C语言实现之银行业务模拟
if (QueueLength(q[j]) < minlen) { minlen = QueueLength(q[j]); i = j;
} return i;
}
void OpenForDay()
{
// 初始化操作
TotalTime = 0; CustomerNum = 0; // 初始化累计时间和客户数
}
数据结构 C 语言实现之银行业务模拟
一、问题描述:
假设某银行有 4 个窗口对外接待客户,从早晨银行开门起不断有客户进入 银行。由于每个窗口在某个时刻只能接待一个客户,因此在客户人数众多时需 要 在每个窗口前顺次排队。对于刚进和银行的客户,如果某个窗口的业务员正 空闲,则可上前输业务;反之,若个窗口均有客户所占,他便会排在为数最少 的队伍后 面。编制一个程序模拟银行的这种业务活动并计算一天中客户在银行 的平均逗留时间。
} // OpenForDay
void CustomerArrived()
{
// 处理客户到达事件,en.NType=0
int durtime, intertime, i, t;
++CustomerNum;
printf("Customer %d arrived at %d and ", CustomerNum,
typedef struct
{ int OccurTime; int NType;
0 表示到达,1~4 表示 4 个窗口的离开 }Event,ElemType; 序表 LinkList 的数据元素类型
//事件发生时刻 //事件发生类型, //事件类型,为有
typedef LinkList EventList;

C语言实现模拟银行系统

C语言实现模拟银行系统

C语言实现模拟银行系统1. 引言在现代社会中,银行系统被广泛应用于各类金融交易活动。

通过使用计算机程序模拟银行系统,我们可以更好地理解和掌握相关的技术和概念。

本文将介绍如何使用C语言实现一个简单的模拟银行系统,以帮助读者深入了解银行业务的基本原理和技术实现。

2. 需求分析在开始编写代码之前,我们首先需要明确银行系统的基本功能需求:- 用户注册和登录:用户可以通过注册一个账户,并使用该账户登录系统。

- 账户管理:用户可以查看账户信息、查询余额、存款、取款等。

- 转账功能:用户可以将资金从一个账户转移到另一个账户。

- 贷款管理:用户可以申请贷款,并按照约定的利率和期限还款。

- 日志记录:系统应该能够记录用户的操作日志,以便后续审计和查证。

3. 系统设计基于上述需求分析,我们可以设计一个简单的银行系统模型。

该模型包括以下几个主要的数据结构:- Account(账户):包括账户ID、用户名、密码、账户余额等信息。

- Transaction(交易):包括交易ID、交易类型、交易金额、交易时间等信息。

除此之外,我们还需要定义一些功能函数,如账户管理、转账、贷款管理等。

这些功能函数将与主程序相互调用,实现整个模拟银行系统。

4. 系统实现在C语言中,我们可以使用结构体来定义账户和交易的数据结构,并使用数组来存储多个账户和交易记录。

以下为一个简单的示例:```c#include <stdio.h>#include <stdlib.h>#include <string.h>// 定义账户结构体struct Account {int accountId;char username[50];char password[50];float balance;};// 定义交易结构体struct Transaction {int transactionId;int accountId;char transactionType[50];float transactionAmount;char transactionTime[50];};// 声明全局变量和相关函数struct Account accountList[100]; // 最多100个账户struct Transaction transactionList[1000]; // 最多1000条交易记录int accountCount = 0; // 初始账户数量为0int transactionCount = 0; // 初始交易数量为0// 用户注册函数void userRegistration() {// TODO: 实现用户注册逻辑}// 用户登录函数void userLogin() {// TODO: 实现用户登录逻辑}// 账户管理函数void accountManagement() {// TODO: 实现账户管理逻辑}// 转账函数void transferMoney() {// TODO: 实现转账逻辑}// 贷款管理函数void loanManagement() {// TODO: 实现贷款管理逻辑}// 主函数int main() {int option;while (1) {// 打印菜单选项printf("\n==============================\n"); printf("欢迎使用模拟银行系统\n");printf("请选择以下操作:\n");printf("1. 用户注册\n");printf("2. 用户登录\n");printf("3. 账户管理\n");printf("4. 转账\n");printf("5. 贷款管理\n");printf("0. 退出系统\n");printf("==============================\n"); printf("请输入操作选项:");scanf("%d", &option);switch (option) {case 1:userRegistration();break;case 2:userLogin();break;case 3:accountManagement();break;case 4:transferMoney();break;case 5:loanManagement();break;case 0:exit(0);default:printf("无效的选项,请重新选择。

数据结构C语言版_银行业务模拟

数据结构C语言版_银行业务模拟
Event en; // 事件
Event et; // 临时变量
LinkQueue q[Qu]; // Qu个客户队列
QElemType customer; // 客户记录
int CloseTime; // 银行营业时间(单位是分)
int TotalTime = 0; // 累计客户逗留时间初始为0
{
QueuePtr p;
p = Q.front->next;
while( p )
{
vi(p->data);
p = p->next;
}
printf("\n");
return 1;
}
// 依事件a的发生时刻<、=或>事件b的发生时刻分别返回-1、0或1。
int DestroyQueue(LinkQueue *Q)
{
while((*Q).front)
{
(*Q).rear = (*Q).front->next;
free((*Q).front);
(*Q).front = (*Q).rear;
}
return 1;
}
int CustomerNum = 0; // 客户数(初值为0)
// 释放p所指结点
void FreeNode(Link *p)
{
free(*p);
*p = NULL;
}
// 构造一个空的线性链表。
int InitList(LinkList *L)
{
Link p;
int i = 0;
QueuePtr p;

模拟银行c语言课程设计

模拟银行c语言课程设计

模拟银行c语言课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:通过本课程的学习,学生需要掌握银行模拟系统中常用的C语言编程语法、数据结构和算法,理解银行业务的基本流程和操作。

2.技能目标:学生需要能够运用C语言编写简单的银行模拟程序,具备基本的程序调试和优化能力,提高解决实际问题的能力。

3.情感态度价值观目标:通过参与模拟银行项目的开发,培养学生团队合作、创新思维、责任感和对编程语言的兴趣。

二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言基础知识:C语言的数据类型、运算符、控制结构、函数等基本语法。

2.数据结构与算法:常用的数据结构如数组、链表、栈和队列,以及基本的排序和查找算法。

3.银行业务模拟:根据银行业务的需求,设计并实现模拟银行系统的主要功能模块,如账户管理、存款、取款、转账等。

4.程序调试与优化:学习使用调试工具,分析程序运行过程中的错误,优化代码性能,提高程序的可读性和可维护性。

三、教学方法为了提高学生的学习兴趣和主动性,将采用以下教学方法:1.讲授法:讲解C语言的基本语法和概念,引导学生理解并掌握相关知识。

2.案例分析法:通过分析实际案例,让学生了解并学习银行业务模拟的具体实现方法。

3.实验法:安排课内外实验,让学生动手编写代码,培养实际编程能力和团队协作精神。

4.讨论法:学生进行小组讨论,分享学习心得和经验,互相学习和进步。

四、教学资源为了支持教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C程序设计语言》或《C Primer Plus》等经典教材,为学生提供系统的C语言知识学习。

2.参考书:推荐《数据结构与算法分析》、《深入理解计算机系统》等参考书,拓展学生的知识面。

3.多媒体资料:提供在线编程教程、视频讲座等资源,方便学生随时查阅和学习。

4.实验设备:提供计算机实验室,让学生进行课内外实验,提高实际操作能力。

五、教学评估为了全面、客观地评估学生的学习成果,将采用以下评估方式:1.平时表现:关注学生在课堂上的参与程度、提问回答、团队合作等情况,给予及时的反馈和鼓励。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
q. rear->next = q. head;
q. rear = q. rear->next;
q. head =q. head->next;
q. rear->next = NULL;
}//else
}//else
if(q. head == sign)//队列循环一周时停止
return NULL;
}
return NULL;
++counter; //更新客户总数
totalTime += ( back(eq)->endTime - back(fq)->beginTime ); //更新逗留时间
pop(fq); //删除第一队列第一个业务
state =0;
}//else
}
service* temped ;
int randomTemp;
}
bool state =1; //用于判断是否有窗口在处理
int currentTimeOfDeal = 0;
int theArriveTime = 0;
queue eq; //事件队列
queue fq; //队列一
queue sq; //对列二
//初始化三个队列
void arrive()
{/*"到达"函数随机产生顾客,进入队列一
写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。
[基本要求]
利用动态存储结构实现模拟。
[测试数据]
一天营业开始银行拥有的款项10000(元),营业时间为600分钟。其他模拟的参量自定。注意测定两种极端情况:一是两个到达事件之间的间隔很短,而客户的交易时间很长;另一个正好相反,设置两个到达事件的间隔时间很长,而客户之间交易的时间很短。
temp->money = d;
temp->next = NULL;
if(NULL == q.head)
{//队列为空,初始化
q. head = temp;
q. rear = temp;
}//if
else
{//队列不为空,插入元素d
q. rear->next = temp;
q. rear = q.rear->next;
产生到达事件进入事件队列*/
push(fq,(rand()% (2*dealMoney) -dealMoney)); //随机产生顾客加入第一队列
back(fq)->beginTime = currentTime;
back(fq)->num = number;
push(eq,(back(fq)->money)); //将产生事件加入事件队列
printf("欢迎进入银行模拟系统\n");
printf(" ********************************************\n");
printf("1.开始模拟0.退出\n");
int n;
scanf("%d",&n);
while(n==1)
{
srand(time(NULL)); //初始化随机函数
银行业务模拟
(2)银行业务模拟(难度系数4)
[问题描述]
客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或换款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先派第一个队列。处理每一个客户业务时,如属于第一种,且申请超出银行现存资金总额而得不到满足的,则立即排入第二个队列等候,直到满足时才离开银行;否则业务处理完后立即离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的末尾。注意:在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。
back(sq)->beginTime = front(fq)->beginTime;
back(sq)->num = front(fq)->num;
pop(fq);
}//if
else
{
total += back(fq)->money;
push(eq,front(fq)->money); //加入事件队列离开
service* temp;
while(NULL != q. head)
{
if((-(q. head->money)) <m)
{//队首元素可以处理
if(q. head==q.rear)
{
temp = q. head;
q. head = q. rear = NULL;
return temp;
}//if
back(eq)->type = "离开";
back(eq)->num = front(fq)->num;
back(eq)->endTime = (front(fq)->beginTime + rand()%dealTime +1);
back(eq)->beginTime = 0;
currentTimeOfDeal = back(eq)->endTime;
printf("输入银行的初始存款:\n");
scanf("%d",&total);
printf("输入银行的营业时间:\n");
scanf("%d",&closeTime);
printf("输入最大到达时间间隔:\n");
scanf("%d",&arriveTime);
printf("输入最大的处理时间:\n");
int totalTime = 0; //客户逗留总时间
int counter = 0; //客户总数
int number = 1; //初始客户序列号+
struct service
{
int num; //客户号
string type; //到达或离开
int beginTime;
int endTime;
scanf("%d",&dealTime);
theArriveTime +=rand()%arriveTime + 1; //首次到达时间
while(currentTime < closeTime)
{
++currentTime;
if( currentTimeOfDeal < currentTime ) currentTimeOfDeal = currentTime ;
int total; //初始时银行现存资金总额
int closeTime; //营业结束时间
int arriveTime; //两个到达事件之间的间隔上限
int dealTime; //客户之间交易的时间上限
int dealMoney = 5000; //交易额上限
int currentTime = 0; //当前时间
void findAndDeal()
{//在对列中寻找可处理元素,对其进行处理
while( (temped= searchAndDel(sq,total))&&NULL != temped )
{//查找可处理取款
total += temped->money; //更新资金总额
push(eq,temped->money); //加入事件队列训离开
[实现提示]
事件有两类:到达银行和离开银行。初始时银行现存资金总额为Total。开始营业后的第一个事件是客户到达,营业时间从0到Closetime。到达事件发生时随机地设置各客户的交易时间和距下一次到达时间之间的时间间隔。每个客户要办理的款项也是随机确定的,用负值和正值分别表示第一类和第二类业务。变量Total、CloseTime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。
back(eq)->type = "离开";
back(eq)->num = front(fq)->num;
back(eq)->endTime = (front(fq)->beginTime + rand()%dealTime +1);
++counter; //更新客户总数
totalTime += (back(eq)->endTime - front(fq)->beginTime); //更新逗留时间
back(eq)->beginTime = currentTime;
back(eq)->type = "到达";
back(eq)->num = number;
++number;
}
void putMoney()
{ //存款函数
total += front(fq)->money; //更新资金总额
push(eq,front(fq)->money); //加入事件队列离开
相关文档
最新文档