大佬教程收集整理的这篇文章主要介绍了C语言银行系统课程设计,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
本文为大家分享了C语言银行系统课程设计,供大家参考,具体内容如下
@H_312_0@main.c#include <stdio.h> #include <stdlib.h> #include <String.h> #include <conio.h> #include <windows.h> #define Maxnum 200 #define N_P 6 typedef struct { int accountnumber[3]; char name[20]; char password[N_P+1]; unsigned long amount; int state; } Account; voID Load(file *,Account *); voID ShowMenu(int ); int MakeChoice(int ); voID Enterpassword(char *); voID CreatAccount(unsigned char *,Account *,int); //第一个参数为加密关键字,第二个参数为账户序号 int Judgepassword(char *,char *); int decrypt(int *,unsigned char *); voID LogIn(unsigned char *,int); //第二个参数为当前账户数目,登陆成功返回1,失败返回0 int Enteraccountnumber(unsigned char *,int ); voID EnterNum(char *,int ); voID Operate(unsigned char *,int,int ); voID ShowSubMenu(char *); voID administratorMode(unsigned char *,unsigned char *,char *,int); voID ShowadministratorMenu(); voID Writetofile(file *,Account*,int); int main() { file *fp; int i,@R_140_10586@l; unsigned char keY[4],key_en[4]; char administrator_password[10]; Account *user; user=(Account *)malloc(sizeof(Account)*Maxnum); fp=fopen("bank.txt","r+"); if(fp==NulL) { printf("银行数据库无法打开,按任意键结束程序!\n"); getch(); exit(1); } fscanf(fp,"%d\n%s\n%s",&@R_140_10586@l,administrator_password,key); for(i=0;i<3;++i)//用key_en保存key的值 key_en[i]=keY[i]; key_en[0]=(key_en[0]<<3)|(key_en[0]>>(sizeof(key_en[0])*8-3)); key_en[2]=(key_en[2]>>3)|(key_en[2]<<(sizeof(key_en[2])*8-3)); Load(fp,user);//将数据存入数组user中 while(1) { system("cls"); ShowMenu(@R_140_10586@l); switch(MakeChoice(4)) { case 1: system("cls"); LogIn(key_en,user,@R_140_10586@l); break; case 2: system("cls"); CreatAccount(key_en,@R_140_10586@L++); break; case 3: system("cls"); administratorMode(key,key_en,@R_140_10586@l); break; default: system("cls"); Writetofile(fp,key,@R_140_10586@l); return 0; } } return 0; }
function.c
#include <stdio.h> #include <stdlib.h> #include <String.h> #include <conio.h> #include <windows.h> #define Maxnum 200 #define N_P 6 //账户状态 0为正常 1为挂失 2为冻结 3为销户 typedef struct { int accountnumber[3]; char name[20]; char password[N_P]; unsigned long amount; int state; } Account; voID Load(file *,int); voID Load(file *fp,Account *user) { int count=0; //将文件中的用户信息存到数组中 while(fscanf(fp,"\n%d%d%d %s %s %lu %d\n",&user[count].Accountnumber[0],&user[count].Accountnumber[1],\ &user[count].Accountnumber[2],user[count].name,\ user[count].password,&user[count].amount,&user[count].statE)!=EOF) ++count; } voID ShowMenu(int @R_140_10586@l) { printf("****中国银行烟大计163-1分行****\n"); printf("目前共有%d名注册用户*****\n",@R_140_10586@l); printf("1.登陆*************************\n"); printf("2.开户*************************\n"); printf("3.进入管理员模式***************\n"); printf("4.退出*************************\n"); } int MakeChoice(int n) { int judge; printf("请输入1~%d\n",n); scanf("%d",&judgE); while(judge<1||judge>n)//确保输入的是1~n { printf("输入不合法,请输入1~%d\n",n); fflush(stdin);//如果不加这句,输入一些字母会导致函数无限循环 scanf("%d",&judgE); } return judge; } voID Enterpassword(char *password) { int i; char t; for(i=0; i<N_P; ++i) { t=getch(); if(t=='\b')//执行退格删除操作 { printf("\b \b"); i-=2; conTinue; } while(t<'0'||t>'9') t=getch(); password[i]=t; putchar('*'); } } voID EnterNum(char *s,int n) { int i=0; char t; while(i<n) { t=getch(); if(t=='\b') { printf("\b \b"); --i; conTinue; } else if(t=='\r'||t=='\n') break; while(t<'0'||t>'9') t=getch(); s[i]=t; putchar(t); ++i; } } int Judgepassword(char *temp_password,char *password) { int i; for(i=0; i<N_P; ++i) { if(temp_password[i]!=password[i]) break; } if(i==N_p) return 0; else return 1; } voID CreatAccount(unsigned char *key,Account *user,int num) { if(num>=Maxnum) { printf("银行用户数量已达到上限!\n按任意键返回主界面"); getch(); return; } int i,flag,num_de[3]; int num_en[3]; char temp_password[N_P],password[N_P]; //将num的个位十位和百位分解,num_de[2]存个位,以此类推 for(i=0; i<3; ++i) num_de[i]=0; for(i=0; i<3; ++i) num_en[i]=0; if(num<10) num_de[2]=num; else if(num<100) { num_de[2]=num%10; num_de[1]=num/10; } else { for(i=0; i<3; ++i) { num_de[i]=num%10; num/=10; } } //分解完成 while(1) { flag=0; printf("请输入用户姓名:"); fflush(stdin); scanf("%19[^\n]",user[num].Name); for(i=0; i<strlen(user[num].Name); ++i) { if(user[num].name[i]==' ') { printf("用户名中不能包含空格!\n"); flag=1; break; } } if(flag==0) break; } for(i=0; i<3; ++i) num_en[i]=num_de[i]^keY[i]; for(i=0; i<3; ++i) user[num].Accountnumber[i]=num_en[i]; printf("您的账号是:"); for(i=0; i<3; ++i) printf("%03d ",num_en[i]); while(1) { printf("\n请设置密码:"); Enterpassword(password); printf("\n请再次确认密码:"); Enterpassword(temp_password); if(Judgepassword(temp_password,password)) printf("\n两次输入不相等,密码设置失败!"); else { strcpy(user[num].password,password); user[num].password[N_P]='\0'; break; } } user[num].amount=0; user[num].state=0; printf("\n账户创建成功!\n按任意键返回主菜单"); getch(); } int decrypt(int *num_en,unsigned char *key) { int i,num,num_de[3]; for(i=0; i<3; ++i) num_de[i]=num_en[i]^keY[i]; num=num_de[0]*100+num_de[1]*10+num_de[2]; return num; } int Enteraccountnumber(unsigned char *key,int @R_140_10586@l) { int i,num; int num_en[3]; char num_en_char[3]; while(1)//输入账号 { printf("请输入账号:"); for(i=0;i<3;++i) { EnterNum(num_en_char,3); num_en[i]=atoi(num_en_char); } num=decrypt(num_en,key); if(num>@R_140_10586@l)//若num大于@R_140_10586@l则账号输入错误 printf("\n账号输入错误!\n"); else break; } return num; } voID LogIn(unsigned char *key,int @R_140_10586@l) { int num,i; char password[N_P]; num=Enteraccountnumber(key,@R_140_10586@l); //判断账户状态 if(user[num].state==3) { printf("该账户已销户,无法使用!\n"); printf("按任意键返回操作界面"); getch(); return; } else if(user[num].state==2) { printf("该账户因输入密码错误次数达三次,已冻结!\n请进入管理员模式解除异常状态!\n"); printf("按任意键返回操作界面"); getch(); return; } //判断结束 i=0; while(1)//输入密码 { printf("\n请输入密码:"); Enterpassword(password); if(Judgepassword(password,user[num].password)&&(++i<3)) printf("\n密码输入错误,您还有%d次机会\n",3-i); else if(i>=3) { user[num].state=2; printf("\n密码错误次数过多,账户已冻结!\n"); printf("即将返回主界面 "); for(i=0; i<3; ++i) { printf("%d",i); Sleep(1000); printf("\b"); } return ; } else { printf("登陆成功!\n"); break; } } Operate(key,@R_140_10586@l); } voID ShowSubMenu(char *Name) { printf("****欢迎%s登陆本行********\n",Name); printf("1.存款*************************\n"); printf("2.取款*************************\n"); printf("3.查询*************************\n"); printf("4.转账*************************\n"); printf("5.挂失*************************\n"); printf("6.销户*************************\n"); printf("7.改密*************************\n"); printf("8.返回主菜单*******************\n"); } voID Operate(unsigned char *key,int num,num_t; unsigned long amount_t,max=1; char password[N_P],temp_password[N_P],amount_judge[6]; for(i=0; i<(sizeof(unsigned long)*8-1); ++i) //计算最大存款额max max*=2; while(1) { system("cls"); ShowSubMenu(user[num].Name); switch(MakeChoice(8)) { case 1: system("cls"); while(1) { printf("请输入存款金额:"); for(i=0;i<6;++i) amount_judge[i]='\0'; EnterNum(amount_judge,5); amount_t=atol(amount_judgE); if(amount_t>99999) printf("\n单次存款金额为0~99999元,存款失败!\n"); else if(amount_t>=max-user[num].amount) printf("总金额超出上限,存款失败!\n"); else { user[num].amount+=amount_t; printf("\n存款成功!按任意键返回操作界面"); getch(); system("cls"); break; } } break; case 2: system("cls"); if(user[num].state==1) { printf("该账户已挂失,无法执行取款操作!\n"); printf("按任意键返回操作界面"); getch(); break; } while(1) { printf("请输入取款金额:"); for(i=0;i<6;++i) amount_judge[i]='\0'; EnterNum(amount_judge,5); amount_t=atol(amount_judgE); if(amount_t>99999) printf("\n单次存款金额为0~99999元,存款失败!\n"); else if(amount_t>user[num].amount) printf("\n账户余额不足,取款失败!\n"); else { user[num].amount-=amount_t; printf("\n取款成功!按任意键返回操作界面"); getch(); system("cls"); break; } } break; case 3: system("cls"); printf("用户姓名:%s",user[num].Name); printf("账户余额:%lu\n",user[num].amount); printf("账户状态:"); if(user[num].state==1) printf("已挂失\n"); else printf("正常\n"); printf("按任意键返回操作界面"); getch(); system("cls"); break; case 4: system("cls"); if(user[num].state==1) { printf("该账户已挂失,无法执行转账操作!\n"); printf("按任意键返回操作界面"); getch(); break; } num_t=Enteraccountnumber(key,@R_140_10586@l); while(1) { printf("请输入转账金额:"); for(i=0;i<6;++i) amount_judge[i]='\0'; EnterNum(amount_judge,5); amount_t=atol(amount_judgE); if(amount_t>99999) printf("\n单次存款金额为0~99999元,存款失败!\n"); else if(amount_t>user[num].amount) printf("账户金额不足,转账失败!\n"); else if(amount_t>=max-user[num_t].amount) printf("\n对方总金额超出上限,转账失败!\n"); else { user[num].amount-=amount_t; user[num_t].amount+=amount_t; printf("\n转账成功!按任意键返回操作界面"); getch(); system("cls"); break; } } break; case 5: system("cls"); printf("您确定要挂失吗?\n"); printf("1.确定 2.取消\n"); if(MakeChoice(2)==1) { user[num].state=1; printf("挂失成功!\n按任意键返回主界面"); getch(); } system("cls"); break; case 6: system("cls"); printf("您确定要销户吗?销户后所有功能都将无法实现,账户内的存款将冻结!\n"); printf("1.确定 2.取消\n"); if(MakeChoice(2)==1) { user[num].state=3; printf("销户成功!\n按任意键返回主界面"); getch(); system("cls"); return; } else break; case 7: system("cls"); while(1) { printf("\n请输入原密码:"); Enterpassword(password); if(Judgepassword(password,user[num].password)) printf("\n原密码输入错误!\n"); else break; } while(1) { printf("\n请输入新密码:"); Enterpassword(password); printf("\n请再次确认密码:"); Enterpassword(temp_password); if(Judgepassword(temp_password,password)) printf("\n两次输入不相等,密码设置失败!"); else { strcpy(user[num].password,password); break; } } printf("\n密码修改成功!\n按任意键返回操作界面"); getch(); system("cls"); break; default: return; } } } voID administratorMode(unsigned char *key_orig,unsigned char *key,char *administrator_password,int @R_140_10586@l) { int num; char password[N_P],temp_password[N_P]; while(1)//输入密码 { printf("请输入管理员密码密码:"); Enterpassword(password); if(Judgepassword(password,administrator_password)) printf("密码输入错误!\n"); else break; } printf("\n登陆成功!按任意键继续"); getch(); while(1) { system("cls"); ShowadministratorMenu(); switch(MakeChoice(6)) { case 1: system("cls"); num=Enteraccountnumber(key,@R_140_10586@l); printf("请设置密码:"); Enterpassword(password); printf("您设置的密码是:"); puts(user[num].password); printf("\n按任意键返回操作界面"); getch(); break; case 2: system("cls"); num=Enteraccountnumber(key,@R_140_10586@l); printf("您确定要解除此用户的挂失状态吗?\n"); printf("1.确定 2.取消\n"); if(MakeChoice(2)==1) { user[num].state=0; printf("解除挂失成功!\n按任意键返回主界面"); getch(); } break; case 3: system("cls"); num=Enteraccountnumber(key,@R_140_10586@l); printf("\n您确定要解除此用户的冻结状态吗?\n"); printf("1.确定 2.取消\n"); if(MakeChoice(2)==1) { user[num].state=0; printf("解除冻结成功!\n按任意键返回主界面"); getch(); } break; case 4: system("cls"); while(1) { printf("请输入新密码:"); Enterpassword(password); printf("\n请再次确认密码:"); Enterpassword(temp_password); if(Judgepassword(temp_password,password)) printf("\n两次输入不相等,密码设置失败!\n"); else { strcpy(administrator_password,password); break; } } printf("\n管理员密码修改成功!\n按任意键返回操作界面"); getch(); break; case 5: system("cls"); printf("当前的账号生成关键字为“%s”,更改之后所有之前创建的账户将无法打开!\n",key_orig); printf("您确定要更改账号生成关键字吗?\n"); printf("1.确定 2.取消\n"); if(MakeChoice(2)==1) { printf("请输入新的关键字:"); scanf("%3s",key_orig); printf("当前的关键字已更改为“%s”\n按任意键返回操作界面",key_orig); getch(); } break; default: return; } } } voID ShowadministratorMenu() { printf("****中国银行烟大计163-1分行****\n"); printf("**********管理员模式***********\n"); printf("1.修改用户密码*****************\n"); printf("2.解除挂失*********************\n"); printf("3.解除冻结*********************\n"); printf("4.修改管理员密码***************\n"); printf("5.修改账号生成关键字***********\n"); printf("6.返回主界面*******************\n"); } voID Writetofile(file *fp,j; rewind(fp); fprintf(fp,"%d\n%6s\n%3s\n",@R_140_10586@l,key); for(i=0; i<@R_140_10586@l; ++i) { for(j=0; j<3; ++j) fprintf(fp,"%03d ",user[i].Accountnumber[j]); fprintf(fp,"%s %6s %lu %d\n",user[i].name,user[i].password,\ user[i].amount,user[i].statE); } fclose(fp); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
以上是大佬教程为你收集整理的C语言银行系统课程设计全部内容,希望文章能够帮你解决C语言银行系统课程设计所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。