期末实训作业C语言实现银行管理系统
2020-01-31 19:50
1241 查看
C语言实现银行管理系统
期末实训作业C语言实现银行管理系统
要求实现的系统能进行以下操作:
- 开户
- 销户
- 查询
- 存款
- 取款
- 挂失
- 解除挂失
- 更改密码
- 退出系统
话不多说,上代码。并不完全是我自己构思自己编写的,是我在社区上看了一些前辈的,然后自己在慢慢改,修改密码的版块换了好几种方法,最后还是决定用这种。觉得还是很垃圾,改密版块还有一个strcmp的使用方法的警告没有办法解决,但是能勉强运行吧。
/* *作 者:蓝浩 *root密码:0101 *完成时间:2019年6月27日 *版 本:v3.0 *文 件 名:银行管理系统 *文件描述: 银行管理项目:主要功能是模拟银行的存取款业务,软件功能囊括了银行从用户开户到最终销户等业务的全过程。 一、账户操作:开户、销户、修改密码、判断用户名密码登录, 二、账户金额操作:登录成功后,下一步选择操作类型。操作类型包括八种:存款、取款、挂失、解挂、开户、销户、查询账户余额、退出, 要求写出需求分析,设计报告,完成银行管理系统设计开发,制作功能说明的PPT。 */ #include <stdlib.h> #include<stdio.h> #include<string.h> #include <windows.h> int mingyan(); //用户名验证 int guayan(int); //挂失验证 int miyan(int); //密码函数 void qukuan(); //取款函数 void cunkuan(); //存款函数 void chaxun(); //查询函数 void xiaohu(); //销户函数 void kaihu(); //开户函数 void guashi(); //挂失函数 void jiegua(); //解挂函数 void tuichu(); //退出函数 void denglu(); //管理员登录函数 void xiugaimima(); //更改密码函数 void zhucaidan(); //主菜单函数 //全局变量 char gUser[100][32]; //用户名 char gMima[100][32]; //密码 char Ggua[100][32]; //挂失用户名 char mima_temp[20]; char new_mima[20]; char new_mima1[20]; float YuE[100]; //存款余额 int UserShu=0; //用户数 int guashu=0; //挂失用户数 void main() { system("color f1"); //定义字体颜色 7为背景颜色(白色)1为字体颜色(蓝色) denglu(); //首界面调用登录函数板块。 int zhiling; while(zhiling) { printf("\n\n\n\n"); printf("\t\t\t<_____________________移动银行管理系统______________________>\n"); printf("\t\t\t|| (1)取 款 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (2)存 款 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (3)查 询 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (4)开 户 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (5)销 户 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (6)挂 失 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (7)解 挂 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (8)退 出 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (9)更改密码 ||\n"); printf("\t\t\t<___________________________________________________________>\n"); printf("\n\n\t\t\t请选择操作(1--9):< >\b\b"); printf("请输入您的指令: "); scanf("%d",&zhiling); printf("\n"); switch(zhiling) { case 1: //跳到取款板块 qukuan(); break; case 2: //跳到存款板块 cunkuan(); break; case 3: //跳到查询板块 chaxun(); break; case 4: //跳到开户板块 kaihu(); break; case 5: //跳到销户板块 xiaohu(); break; case 6: //跳到挂失板块 guashi(); break; case 7: //跳到解挂板块 jiegua(); break; case 8: tuichu(); //跳到退出板块 break; case 9: xiugaimima(); //修改密码 break; } } } void zhucaidan() { int zhiling; while(zhiling) { printf("\n\n\n\n"); printf("\t\t\t<_____________________移动银行管理系统______________________>\n"); printf("\t\t\t|| (1)取 款 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (2)存 款 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (3)查 询 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (4)开 户 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (5)销 户 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (6)挂 失 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (7)解 挂 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (8)退 出 ||\n"); printf("\t\t\t||---------------------------------||\n"); printf("\t\t\t|| (9)更改密码 ||\n"); printf("\t\t\t<___________________________________________________________>\n"); printf("\n\n\t\t\t请选择操作(1--9):< >\b\b"); printf("请输入您的指令: "); scanf("%d",&zhiling); printf("\n"); switch(zhiling) { case 1: //跳到取款板块 qukuan(); break; case 2: //跳到存款板块 cunkuan(); break; case 3: //跳到查询板块 chaxun(); break; case 4: //跳到开户板块 kaihu(); break; case 5: //跳到销户板块 xiaohu(); break; case 6: //跳到挂失板块 guashi(); break; case 7: //跳到解挂板块 jiegua(); break; case 8: tuichu(); //跳到退出板块 break; case 9: xiugaimima(); break; } } } void denglu() //登录板块 { char zhanghu[32]="0101",mima[32]; //定义两个本版块变量,用于储存输入的管理员账号和密码。 int m=1; //m=1 即为用户名与密码不一致(提示密码错误),会重新弹出以下的界面。 while(m==1) { printf("\t\t ┌================================================================┐\n"); printf("\t\t │ │\n"); printf("\t\t ├————————————欢迎进入银行管理系统——————————┤\n"); printf("\t\t │ │\n"); printf("\t\t ├================================================================┤\n"); printf("\t\t │ 请以管理员的身份登陆管理系统! │\n"); printf("\t\t ├────────────────────────────────┤\n"); printf("\t\t │ 声明:本银行想存多少久存多少但是无法取款! │\n"); printf("\t\t ├────────────────────────────────┤\n"); printf("\t\t │ 管理员帐号:admin 密码为:admin │\n"); printf("\t\t └================================================================┘\n"); printf("\t\t \n"); printf("\t\t\t请输入root用户密码: "); scanf("%s",&mima); printf("\n"); if(!strcmp(zhanghu,mima)) //当输入的用户名与密码一致时,视为密码正确。否则视为密码错误。 { printf("\t\t\t▁▁▁▂▂▂▃▃▃▄▄正在登陆,请稍后......▄▅▅▅▆▆▆▇▇▇████\n\n "); //密码正确是执行的步骤。 m=0; //m=0 即为密码正确,不再弹出上面的界面。 } else{ printf("\n\n\t\t\t\t┌───────——─────────────────┐\n"); printf("\t\t\t\t **********用户名或密码错误,请重新输入!**********\n"); printf("\t\t\t\t└───────────——─────────────┘\n\n\n"); //密码错误时执行的步骤。 } } } void qukuan() //取款板块 { int i,m; float n; i=mingyan(); //进行调用用户名验证的操作。 m=guayan(i); //进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。 if(m==1){ m=miyan(i); //调用密码验证函数对密码进行检测。 } else{ qukuan(); //如果输入的用户名不对则会要求重新输入,输入的密码不对也会要求重新输入。 } while(m==1) //进入取款程序 { printf("\t\t\t请输入您的取款金额: "); scanf("%f",&n); if(n<=YuE[i]) //检测账户余额是否满足输入的取款金额。 { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t **********交易成功,请取走您的钞票**********\n"); printf("t\t\t\t\t└────────────────────────┘\n"); YuE[i]=YuE[i]-n; //对取款后的账户余额进行校准。 break; } else{ //账户余额不满足输入的取款金额时执行这个语句。 printf("\n\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t**********对不起,您的余额不足**********\n"); printf("t\t\t\t\t└────────────────────────┘\n"); break; } } } void cunkuan() //存款板块 { int i,m; float n; i=mingyan(); // 进行调用用户名验证的操作。 m=guayan(i); //进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。 if(m==1){ m=miyan(i); //调用密码验证函数对密码进行检测。 } while(m==1) { printf("\t\t\t请输入您的存款金额: "); scanf("%f",&n); YuE[i]=YuE[i]+n; //对存款后的账户余额进行校准。 printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t**********交易成功!**********\n"); printf("t\t\t\t\t└────────────────────────┘\n"); printf("\t\t\t您的当前余额为: %.2f\n",YuE[i]); //显示本次存款操作后的账户余额。 break; } } void chaxun() //查询板块 { int i,m; i=mingyan(); // 进行调用用户名验证的操作。 m=guayan(i); //进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。 if(m==1){ m=miyan(i); } while(m==1) { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t 您的当前余额为: %.2f\n",YuE[i]); printf("\t\t\t\t└────────────────────────┘\n"); break; } } void kaihu() //开户板块 { int i,n=UserShu,j=0; int t=0; float m; int jinjidianhua[20]; int dianhua[20]; int len; int len1; int len2; char *dh; char *jinjidh; char *sfz; char name[20]; char tongxindizhi[32]; char jinjixingming[32]; char jjtelephone[32]; char telephone[32]; char shenfenzheng[32]; char User[32]; char mima1[32]; char mima2[32]; //定义三个变量用于储存输入的用户名、密码和二次确认密码。 printf("\t\t\t请输入您的十位用户名: "); scanf("%s",User); for(i=0;i<n+1;i++) { if(strcmp(User,gUser[i])==0) //对用户名进行查重,如果重复则需重新输入。 { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********该用户名已存在**********\n"); printf("\t\t\t\t└────────────────────────┘\n"); break; } else //如果通过用户名查重,则进行此操作。 { strcpy(gUser[UserShu],User); while(j!=1) { printf("\n\t\t\t请输入您的姓名:"); scanf("%s",&name); printf("\n\t\t\t请输入您的十八位身份证号:"); scanf("%s",&shenfenzheng); char *sfz=shenfenzheng; int len = strlen(sfz); if(len !=18) { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********输入有误!**********\n"); printf("\t\t\t\t└────────────────────────┘\n"); zhucaidan(); } printf("\n\t\t\t请输入您的十一位手机号:"); scanf("%s",&telephone); char *dh=telephone; int len1 = strlen(dh); if(len1 !=11) { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********输入有误!**********\n"); printf("\t\t\t\t└────────────────────────┘\n"); zhucaidan(); } /* while( *sfz != '\n' ) //求字符串的长度 { len1++; sfz++; } if(len1!=18) { printf("\n\t\t\t**********输入有误!**********"); zhucaidan(); }*/ printf("\n\t\t\t请输入您的通信地址:"); scanf("%s",&tongxindizhi); printf("\n\t\t\t请输入您的紧急联系人姓名:"); scanf("%s",&jinjixingming); printf("\n\t\t\t请输入您的紧急联系人电话:"); scanf("%s",&jjtelephone); char *jinjidh=jjtelephone; int len2 = strlen(jinjidh); if(len2 !=11) { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********输入有误!**********\n"); printf("\t\t\t\t└────────────────────────┘\n"); zhucaidan(); } printf("\t\t\t请输入您的密码: "); scanf("%s",mima1); printf("\t\t\t请再次输入您的密码: "); scanf("%s",mima2); if(strcmp(mima1,mima2)==0) //如果两次输入的密码一致,则设置成功,自动进入存款操作界面。 { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********密码设置成功**********\n"); printf("\t\t\t\t└────────────────────────┘\n\n\n"); printf("\t\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf("\t\t\t$$$$$ $$$$$\n"); printf("\t\t\t$$$$$********************请为新开账户首次存款!********************$$$$$\n"); printf("\t\t\t$$$$$ $$$$$\n"); printf("\t\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"); printf("\n\t\t\t\t请输入您的首次存款金额: "); scanf("%f",&m); strcpy(gMima[UserShu],mima1); //再次对密码进行校验。 YuE[UserShu]=m; //讲输入的存款金额打入账户余额。 j=1; printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********交易成功!**********\n"); printf("\t\t\t\t└────────────────────────┘\n"); } else{ printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t **********两次输入不一致,请重新输入**********\n "); //当输开户时输入的两次密码不一致时执行此操作。 返回到输入第一次密码的步骤,重新输入两次一致的密码。 printf("\t\t\t\t└────────────────────────┘\n"); } } UserShu++; //在数据库中增加一个用户数量。 break; } } } void xiaohu() //销户板块 { int i,n,m; i=mingyan(); // 进行调用用户名验证的操作。 m=guayan(i); //进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。 if(m==1){ m=miyan(i); //调用密码验证函数对密码进行检测。 } while(m==1) { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t\t您确定要注销您的账户?\n \t\t\t\t\t\t<1>确认 <2>取消 \n"); printf("\t\t\t\t└────────────────────────┘\n"); printf("\t\t\t请输入您的指令:"); scanf("%d",&n); if(n==1) //输入1时执行本语句里的操作。 { for(i=0;i<UserShu;i++) //对要销户的账户进行账号密码的一个确认 { strcpy(gUser[i],gUser[i+1]); //调出用户名进行确认 。 strcpy(gMima[i],gMima[i+1]); //调出用户名对应的密码进行确认。 YuE[i]=YuE[i+1]; //对销户的余额进行清除 。 UserShu--; //在数据库中减少一个用户数量。 printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("t\t\t\t\t\t**********注销账户成功!!**********\n"); printf("t\t\t\t\t└────────────────────────┘\n"); } } m=0; } } void guashi() //挂失板块 { int n,i,m; i=mingyan(); // 进行调用用户名验证的操作。 m=guayan(i); //进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。 if(m==1){ m=miyan(i); //调用密码验证函数对密码进行检测。 } if(m==1) { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t\t您确定要挂失您的账户?\n \t\t\t\t\t\t<1>确认 <2>取消 \n"); printf("\t\t\t\t└────────────────────────┘\n"); printf("\t\t\t请输入您的指令:"); scanf("%d",&n); if(n==1) { strcpy(Ggua[guashu],gUser[i]); //讲确定挂失的用户名称扔进数据库。 guashu++; //增加一个挂失用户数据。 printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t**********账户挂失成功!**********\n",gUser[i]); printf("\t\t\t\t└────────────────────────┘\n"); } if(n==2) { printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t ******************取消成功!******************\n"); printf("\t\t\t\t└────────────────────────┘\n"); zhucaidan(); } } } void jiegua() //解挂板块 { int i,m,j; i=mingyan(); // 进行调用用户名验证的操作。 m=guayan(i); //进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。 if(m==0) m=miyan(i)+1; //调用密码验证函数对密码进行检测。 if(m==2) { for(j=0;j<guashu;j++) { if(strcmp(gUser[i],Ggua[j])==0) //如果数据库中没有输入的用户数据,则视为该用户未挂失,直接跳出这次循环。 break; } for(;j<guashu;j++) { strcpy(Ggua[j],Ggua[j+1]); //如果数据中能找到输入的用户名,则讲此次输入的用户名拉出记录挂失的数据库,即解挂。 printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********账户解挂成功!**********\n",gUser[i]); printf("\t\t\t\t└────────────────────────┘\n"); guashu--; } //解挂成功后在挂失记录的数据库中减掉一个对应的用户数据。 } else{ printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t **********该用户未挂失!**********\n",gUser[i]); printf("\t\t\t\t└────────────────────────┘\n"); zhucaidan(); } } int mingyan() //用户名验证 { int m=1,i; char yonghuming[32]; while(m==1) { printf("\t\t\t请输入您的用户名: "); scanf("%s",yonghuming); for(i=0;i<UserShu;i++) if(strcmp(gUser[i],yonghuming)==0) //如果输入的用户名与已储存的用户名一致,则视为验证通过。 { m=0; break; } if(i==UserShu) { //如果在已经储存的用户名中未找到输入的用户名,则视为验证未通过。 printf("\n\n\t\t\t\t┌──────────────────────────┐\n"); printf("\t\t\t\t **********该用户不存在,请确认后重新输入**********\n"); printf("\t\t\t\t└──────────────────────────┘\n"); zhucaidan(); } return i; } } int guayan(int i) //挂失验证 { int j,n; for(j=0;j<guashu;j++) { if(strcmp(gUser[i],Ggua[j])==0) //如果已经储存的挂失用户名与输入的用户名 一致,即为该用户已经挂失,无法重复挂失。 { printf("\n\n\t\t\t\t┌─────────────————─────────────┐\n"); printf("\t\t\t\t **********此用户已经挂失,请解挂后再进行操作!**********\n"); printf("\t\t\t\t└─────────────——──——───────────┘\n"); n=0; break; zhucaidan(); } } if(j==guashu) n=1; return n; } int miyan(int i) //密码验证,为提高安全性,在每一个操作都会调用到本板块。 { char mima[32]; // 定义一个储存输入的密码的变量 while(1) { printf("\t\t\t请输入您的密码: "); scanf("%s",mima); if(strcmp(gMima[i],mima)==0) //如果输入的密码与数据库中的密码完全一致,即可视为密码正确。执行if中的语句。 { printf("\n\t\t\t\t\t**********登陆成功!**********\n\n"); printf("\n\n\t\t\t\t┌────────────────────────┐\n"); printf("\t\t\t\t\t\t当前用户:%s \n",gUser[i]); //显示用户名以及余额。 printf("\t\t\t\t└────────────────────────┘\n"); break; } else{ //如果输入的密码与数据库中的不一致即可视为密码错误,执行else中的语句。 printf("\n\n\t\t\t┌───────────────——───────────┐\n"); printf("\t\t\t **********您输入的密码不正确,请确认后重新输入**********\n"); printf("\t\t\t└───────────────────——───────┘\n"); zhucaidan(); } } return 1; } void tuichu() //退出板块,因为没有使用txt文件进行永久性的储存,所以这个版块没有进行深入编写,直接退出! { denglu(); } /* void xiugaimima() //修改密码 { char mima_temp[20]; //用来存放用户输入的密码 char new_mima[20]; //存放第一次新密码 char new_mima1[20]; char name[32]; int i,m,j; i=mingyan(); // 进行调用用户名验证的操作。 printf("\t\t\t\t\t请输入原始密码:"); scanf("%s",&mima_temp); if(!strcmp(mima_temp,gMima)) //比较原始密码 与 用户输入的密码 { printf("\t\t\t\t\t请输入新密码:"); scanf("%s",&new_mima); printf("\t\t\t\t\t请再输一次:"); scanf("%s",&new_mima1); if(strcmp(new_mima1,new_mima)==0) //比较 两次修改后输入的密码 { strcpy(gMima,new_mima); //将 新密码 拷贝给 原始密码,因为知道strcpy函数有这个覆盖的功能,所以先将就着用。 printf("\n\t\t\t\t******密码修改成功!请牢记!******\n"); zhucaidan(); } else { printf("\n\t\t\t\t******两次输入的密码不一致!******\n"); zhucaidan(); } } else { printf("\n\t\t\t\t\t******原始密码错误!******\n"); zhucaidan(); } }*/ void xiugaimima() //修改密码 { char name[32]; char xmm1[10]= {0}; char xmm2[10]= {0}; char ch; //存放第二次新密码 int i,m; int t=0,j=0,r; i=mingyan(); // 进行调用用户名验证的操作。 m=guayan(i); //进行调用挂失验证的操作。如果已经挂失则无法进行本次取款操作。 if(m==1){ m=miyan(i); printf("\t\t\t\t\t请输入新密码:"); //调用密码验证函数对密码进行检测。 scanf("%s",xmm1); } /* while((ch=getch()!='\r')) { xmm1[i++]=ch; putchar('*'); }*/ printf("\t\t\t\t\t请再输一次:"); scanf("%s",xmm2); /* while((ch=getch()!='\r')) { xmm2[j++]=ch; putchar('*'); }*/ if(r=strcmp(xmm1,xmm2)!=0) //比较 两次修改后输入的密码 { printf("\n\t\t\t\t******两次输入的密码不一致!******\n"); zhucaidan(); } else { strcpy(gMima,xmm2); //将 新密码 拷贝给 原始密码,因为知道strcpy函数有这个覆盖的功能,所以先将就着用。 printf("\n\t\t\t\t******密码修改成功!请牢记!******\n"); zhucaidan(); } }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- 简单的银行系统C语言可实现--谈不上完全原创,也是作业的一部分
- C语言实现银行管理系统
- 大一上C语言期末大作业-成绩管理系统
- 关于虚函数的作业中对学校信息管理系统的实现要求和编程要点
- c语言实现的学生信息管理系统
- C语言实现---学生成绩管理系统
- 一周实训,银行管理系统即将告终
- 银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能
- JSP+Servlet培训班作业管理系统[11] -通用CRUD后端的实现(以人员管理为例)
- C语言实现学生成绩管理系统
- 实验室设备管理系统(C语言实现)
- C语言实现学生成绩管理系统
- linux终端版学生信息管理系统【C语言实现】
- 链表实现学生管理系统(作业)
- C语言实现一个Window控制台带彩色,且可以用方向键选择并确认的菜单式列表(二) ---学生信息管理系统
- 用C语言实现的学生管理系统
- 图书管理系统c语言 结构体数组实现
- C语言实现的工资管理系统
- 小型图书馆管理系统(C语言实现)
- 学生信息管理系统(c语言实训)