2017上半年课程设计银行储蓄系统
2017-04-15 14:02
369 查看
#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXNUMBER 10000 //银行卡的数据类型 struct Account { long num;//卡号 char name[10];//户主 char mima[7];//密码 double balance;//余额 int zhuangtai;//卡的状态 0:正常 1:冻结 2;销户 3:挂失 }; //银行中所有的卡存放的数组 struct Account a[MAXNUMBER]; //银行中开卡的数量 int size=0; //定义函数 int firstnumber=10001;//第一张卡的卡号 FILE *fp; int loginNumber=0; void weclome();//欢迎界面 void login();//登陆界面 void mainForm();//主界面 void open();//开户功能 long createnum();//卡号 int find(long num);//根据卡号查找下标 void deposit();//存款 void showAccount(int position);//根据卡号展示卡的信息 void cost();//取款 int checkmima(char pass[]);//返回值0:正确1:密码位数不足六位 2:密码不是纯数字 void nothing();//销户 void readData();//取读文件中的数据 int writeData();//写文件 int checkzhuangtai();//检查银行卡状态 void zhuan();//转账 void read();//查询界面 void lost();//挂失界面 void turnmain();//返回主界面 void main() { readData(); weclome(); login(); } //欢迎界面 void weclome() { printf("+-----------------------------+\n"); printf("| |\n"); printf("| 欢迎登陆银行储蓄系统 |\n"); printf("| |\n"); printf("+-----------------------------+\n"); } //登陆界面 void login() { char loginName[10]; char loginPwd[10]; printf("请输入用户名:"); scanf("%s",loginName); printf("请输入密码:"); scanf("%s",loginPwd); // if(strcmp(loginName,"lundongcai")==0 && strcmp(loginPwd,"123")==0) { printf("登陆成功\n"); mainForm(); } else { if(loginNumber==2) { printf("您输入密码三次错误,账户锁定\n"); exit(0); } else { printf("用户名或密码有误\n"); loginNumber++; } } } //主界面 void mainForm() { int order; printf("+----------------------------------+\n"); printf("| 1.开户 5.存款 |\n"); printf("| 2.取款 6.查询 |\n"); printf("| 3.挂失 7.销户 |\n"); printf("| 4.转账 8.退出 |\n"); printf("+----------------------------------+\n"); printf("请输入操作指令\n"); scanf("%d",&order); switch(order) { case 1: open(); //开户 break; case 2: cost(); //取款 break; case 3: lost(); //挂失 break; case 4: zhuan(); //转账 break; case 5: deposit(); //存款 break; case 6: read(); //查询 break; case 7: nothing(); //销户 break; case 8: //退出 exit(0); break; default: printf("操作指令有误,请重新输入\n"); } } //开户界面 void open() { char accName[10]; char accmima[7]; char secmima[7]; double accBalance; char sorder; int state; printf("请输入户主名"); scanf("%s",accName); printf("请输入密码"); scanf("%s",accmima); printf("请再次输入您的密码:"); scanf("%s",secmima); state=checkmima(accmima); if(state==1) { printf("密码不足六位,请重新输入\n"); open(); } else if(state==2) { printf("密码不是纯数字,请重新输入\n"); open(); } printf("请输入存款金额"); scanf("%lf",&accBalance); if(strcmp(accmima,secmima)==0)// { //2次输入的密码一致 //将卡的信息存入数组 a[size].num=createnum(); strcpy(a[size].name,accName); strcpy(a[size].mima,accmima); a[size].balance=accBalance; a[size].zhuangtai=0; size++; writeData(); printf("开户成功\n"); showAccount(size-1); printf("请输入y继续开户,任意键返回主菜单\n"); fflush(stdin);//清空缓冲区 scanf("%c",&sorder); if(sorder=='y') { open(); } else { mainForm(); } } else { printf("输入的密码不一致,请重新操作\n"); open(); } } //卡号 long createnum() { if(size==0) { //第一次生成卡号 return firstnumber; } else { return a[size-1].num+1; } } //根据卡号查找下标 //function:根据卡号查找该卡下标 //return:该卡下标若为-1,则卡号输入有误 int find(long num) { int i,position=-1; for(i=0; i<size; i++) { if(a[i].num==num) { position=i; break; } } return position; } int checkzhuangtai(int position) { int j; if(a[position].zhuangtai==0) { j=0; } else if(a[position].zhuangtai==1) { j=1; } else { j=2; } return j; } //存款界面 void deposit() { long num; double accBalance; int position; char sorder; int j; printf("请输入存款卡号:"); scanf("%ld",&num); printf("请输入存款金额:"); scanf("%lf",&accBalance); position=find(num);// //判断该卡是否存在 if(position==-1) { //该卡不存在 printf("你输入的卡号有误,请重新输入\n"); deposit(); } else if(position!=-1) { j=checkzhuangtai(position); if(j==1) { printf("您的银行卡属于冻结状态,无法存款\n"); deposit(); } else if(j==2) { printf("您的银行卡属于销户状态,无法进行存款\n"); deposit(); } else if(j==3) { printf("您的银行卡已经挂失,无法进行存款\n"); deposit(); } else if(j==0) { //该卡存在 //存款前展示卡的信息 showAccount(position); a[position].balance=a[position].balance+accBalance; //存款后展示卡的信息 showAccount(position); writeData(); printf("请输入y继续存款,按任意键返回主菜单\n"); fflush(stdin);//清空缓冲区 scanf("%c",&sorder); if(sorder=='y') { open(); } else { mainForm(); } } } } //展示用户信息界面 void showAccount(int position) { printf("+--------------------------------------+\n"); printf("|%-6s|%-8s|%-7s|%-9s|%-4s|\n","卡号","户主","密码","金额","状态"); printf("+--------------------------------------+\n"); if(a[position].zhuangtai==0) { printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"正常"); } else if(a[position].zhuangtai==1) { printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"冻结"); } else if(a[position].zhuangtai==2){ printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"销户"); } else if(a[position].zhuangtai==3){ printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4s|\n",a[position].num,a[position].name,a[position].mima,a[position].balance,"挂失"); } printf("+--------------------------------------+\n"); } //取款界面 void cost() { long num; char accmima[7]; int position; double accBalance; char sorder; printf("请输入取款卡号:"); scanf("%ld",&num); printf("请输入你的银行卡密码"); scanf("%s",accmima); printf("请输入取款金额:"); scanf("%lf",&accBalance); position=find(num); //判断该卡是否存在 if(position==-1) { printf("你输入的卡号有误,请重新输入\n"); cost(); } else if(strcmp(a[position].mima,accmima)==0) { if(a[position].balance<accBalance) { printf("你的余额已经不足,请及时存款\n"); } else { //存款前展示卡的信息 showAccount(position); a[position].balance=a[position].balance-accBalance; / 4000 /取款后展示卡的信息 showAccount(position); writeData(); printf("请输入y继续取款,按任意键返回主菜单\n"); fflush(stdin);//清空缓冲区 scanf("%c",&sorder); if(sorder=='y') { cost(); } else { mainForm(); } } } else{ printf("您输入的密码有误,请重新输入\n"); cost(); } } int checkmima(char pass[]) //返回值0:正确1:密码位数不足六位 2:密码不是纯数字 { int state=0,i; if(strlen(pass)==6) { //密码位数是六位数 for(i=0; i<6; i++) { if(pass[i]<'0'||pass[i]>'9') { state=2; break; } } } else { // state=1; } return state; } void nothing() { int position; char mima[7]; long num; char sorder; printf("请输入您要销户的的银行卡号"); scanf("%ld",&num); printf("请输入您的密码"); scanf("%s",mima); position=find(num);//判断该卡是否存在 if(position==-1) { //该卡不存在 printf("你输入的卡号有误,请重新输入\n"); nothing(); } else { //该卡存在 if(strcmp(a[position].mima,mima)!=0) { printf("输入密码错误,请从新输入\n"); nothing(); } else { //存款前展示卡的信息 showAccount(position); a[position].balance=0; a[position].zhuangtai=2; showAccount(position); writeData(); printf("请输入y继续存款,按任意键返回主菜单\n"); fflush(stdin);//清空缓冲区 scanf("%c",&sorder); if(sorder=='y') { open(); } else { mainForm(); } } } } void readData() { int i=0; //1.打开文件 fp=fopen("new.txt","r+"); //判断文件打开是否有问题 if(fp==NULL){ printf("文件打开出现错误"); exit(1); } //2.读取文件 while(!feof(fp))//feof这个函数在读到头时返回真,即非零值 { fscanf(fp,"%ld %s %s %lf %d\n",&a[i].num,a[i].name,a[i].mima,&a[i].balance,&a[i].zhuangtai); //printf("|%-6ld|%-8s|%-7s|%-9.2lf|%-4d|\n",a[i].num,a[i].name,a[i].mima,a[i].balance,a[i].zhuangtai); if(a[i].num!=0){ i++; size=i; } } //3.关闭文件 fclose(fp); } int writeData() { int i; //1.打开文件 fp=fopen("new.txt","w+"); //判断文件打开是否有问题 if(fp==NULL){ printf("文件打开出现错误"); exit(1); } //2.写文件 for(i=0;i<size;i++){ fprintf(fp,"%ld %s %s %lf %d\n",a[i].num,a[i].name,a[i].mima,a[i].balance,a[i].zhuangtai); } //3.关闭文件 fclose(fp); return 0; } //转账 void zhuan() { long firstNumber,secNumber; char pass[7]; double accBalance; char sorder; int fistPosition,secPosition; printf("请输入转出方卡号:\n"); scanf("%ld",&firstNumber); printf("请输入转出方密码:\n"); scanf("%s",pass); printf("请输入转入方卡号:\n"); scanf("%ld",&secNumber); printf("请输入转出金额:\n"); scanf("%lf",&accBalance); //查找转出方卡号的下标 fistPosition=find(firstNumber); secPosition=find(secNumber); if(fistPosition==-1){ //转出方卡号不存在 printf("转出方卡号输入错误,请重新操作\n"); zhuan(); }else if(secPosition==-1){ //转入方卡号不存在 printf("转入方卡号输入错误,请重新操作\n"); zhuan(); }else if(strcmp(a[fistPosition].mima,pass)!=0){ //密码不对的时候 printf("转出方密码输入错误,请重新操作\n"); zhuan(); }else if(a[fistPosition].zhuangtai!=0){ //转出方卡不正常 printf("转出方卡不正常,请重新操作\n"); zhuan(); }else if(a[secPosition].zhuangtai!=0){ //转入方卡不正常 printf("转入方卡不正常,请重新操作\n"); zhuan(); }else if(a[fistPosition].balance<accBalance){ //金额不足的时候 printf("转账金额不足,请重新操作\n"); zhuan(); }else{ printf("转账前卡的信息如下:\n"); showAccount(fistPosition); //输出方金额减少 a[fistPosition].balance-=accBalance; //输入方金额增加 a[secPosition].balance+=accBalance; printf("转账后卡的信息如下:\n"); showAccount(fistPosition); //写 writeData(); printf("输入y继续操作,输入其他字符返回主菜单\n"); //清空缓冲区 fflush(stdin); scanf("%c",&sorder); if(sorder=='y'){ zhuan(); }else{ mainForm(); } } } //查询界面 void read() { int position; char mima[7]; long num; char sorder; printf("请输入您的银行卡卡号:\n"); scanf("%ld",&num); printf("请输入您的银行卡密码:\n"); scanf("%s",mima); position=find(num); if(position==-1) { printf("您输入的卡号有误,请重新输入:\n"); read(); } else if(strcmp(a[position].mima,mima)!=0){ printf("您输入的密码有误,请重新输入\n"); read(); } else { showAccount(position); } printf("输入y继续操作,输入其他字符返回主菜单\n"); //清空缓冲区 fflush(stdin); scanf("%c",&sorder); if(sorder=='y'){ read(); }else{ mainForm(); } } void lost() { int position; char mima[7]; long num; char sorder; printf("请输入您的银行卡卡号:\n"); scanf("%ld",&num); printf("请输入您的银行卡密码:\n"); scanf("%s",mima); position=find(num); if(position==-1) { printf("您输入的卡号有误,请重新输入:\n"); lost(); } else if(strcmp(a[position].mima,mima)!=0){ printf("您输入的密码有误,请重新输入\n"); lost(); } else { a[position].zhuangtai=3; showAccount(position); writeData(); } printf("输入y继续操作,输入其他字符返回主菜单\n"); //清空缓冲区 fflush(stdin); scanf("%c",&sorder); if(sorder=='y'){ lost(); }else{ mainForm(); } }
相关文章推荐
- 课程设计——简单银行储蓄系统(代码)(并不完善版)
- 课程设计 银行储蓄系统
- 课程设计-银行储蓄系统
- 课程设计-银行储蓄系统
- 课程设计——简单银行储蓄系统
- C++课程设计-银行储蓄系统
- 数据结构课程设计【银行储蓄系统】
- 课程设计-银行储蓄系统。
- 课程设计-银行储蓄系统
- 程序设计基础课程实训报告:银行储蓄系统
- 作死向之C++告别演出——课程设计(银行储蓄系统(大BUG+功能不完整版))
- 期末课程设计--银行储蓄系统
- 课程设计--银行储蓄系统
- 课程实训——银行储蓄系统
- 项目实践: 银行储蓄系统的设计和实现
- 银行储蓄系统(C++课程实训博客电子报告)
- c++课程实训 银行储蓄系统
- 数据结构课程设计之银行活期存储系统(设计报告)
- 数据库课程设计银行管理系统(SQL Server)
- 课程实训--银行储蓄系统