#include #include #include void xiugai() { int i,num; //i是循环变量,num是switch选择结构中的判断条件 char c[10]; //用来存放输入数据(密码)的字符数组 struct zhanghu //一个名叫zhanghu的结构体 { char name[10]; //存放姓名 char mima[10]; //存放密码 char dizhi[10]; //存放地址 char shouji[20]; //存放手机号 long int money; //存放账户余额 }; struct zhanghu m[20],caozuo; // 定义一个名叫m的结构体数组,定义一个名叫caozuo的结构体 FILE *fp; if((fp=fopen("数据库.txt","r"))==NULL) //打开文件 { printf("File open error!\n"); exit(0); } printf("请输入要修改信息的账户名字:"); scanf("%s",&(caozuo.name)); printf("请输入账户密码(6位数字):"); scanf("%s",&(caozuo.mima)); printf("请再次确认密码:"); scanf("%s",&c); for(i=0;i<20;i++) { // 做个循环,把文件中的数据依次存放到结构体数组m中 fscanf(fp,"%s %s %s %s %ld",&(m[i].name),&(m[i].mima),&(m[i].dizhi),&(m[i].shouji),&(m[i].money)); if(strcmp(m[i].name,caozuo.name)==0)// 判断此次从文件输入的姓名数据是否符合要修改的数据姓名 { while((strcmp(c,caozuo.mima)!=0)||(strcmp(c,m[i].mima)!=0))//做循环,直到保证输入的密码和文件中储存的密码一致才结束循环 { printf("密码有误,请重新输入密码:\n"); printf("请输入密码(6位数字):"); scanf("%s",&(caozuo.mima)); printf("请再次确认密码:"); // 输入两次密码,以保证输入信息准确 scanf("%s",&c); } printf("请按照以下提示更改信息:\n"); printf("姓名请按'1'、密码请按'2';\n"); //提示性语句 printf("地址请按'3'、联系方式请按'4';\n"); printf("请输入数字:"); do // 做循环,目的是根据具体输入的数字(输入到变量num中)执行其所控制的更改信息的命令 { scanf("%d",&num); // 输入数字(选择执行哪一种更改信息的命令) switch(num) // 做循环 { case 1: // 如果输入数字为1,则更改姓名 { printf("请输入替换姓名:"); scanf("%s",&(caozuo.name)); strcpy(m[i].name,caozuo.name); break; } case 2: { printf("请输入替换密码(6位数字):"); //输入为2,则更改密码 scanf("%s",&(caozuo.mima)); printf("请再次确认密码:"); scanf("%s",&c); while(strcmp(c,caozuo.mima)!=0) // 做循环,保证输入密码准确 { printf("两次密码不一致,请重新输入密码。\n"); printf("请设置密码(6位数字):"); scanf("%s",&(caozuo.mima)); printf("请再次确认密码:"); scanf("%s",&c); } strcpy(m[i].mima,caozuo.mima); //替换旧密码 break; } case 3: { printf("请输入替换地址:"); scanf("%s",&(caozuo.dizhi)); //输入为3,更改地址 strcpy(m[i].dizhi,caozuo.dizhi); break; } case 4: { printf("请输入替换的联系方式:"); scanf("%s",&(caozuo.dizhi)); //输入为4,更改联系方式 strcpy(m[i].dizhi,caozuo.dizhi); break; } } printf("请问是否继续修改信息\n"); printf("如需继续请输入相关数字,否则请输入其余任意数字退出。\n");//提示性语句 scanf("%d",&num); }while(num>=1&&num<5); // 如果输入数字在1到4之间,则继续执行以上循环(即更改信息),否则循环终止 } } if(fclose(fp)) { // 关闭文件 printf(" File close error! \n"); exit(0); } if((fp=fopen("数据库.txt","w"))==NULL) { // 再次打开文件 printf("File open error!\n"); exit(0); } for(i=0;i<16;i++) fprintf(fp,"%s %s %s %s %ld\n",(m[i].name),(m[i].mima),(m[i].dizhi),(m[i].shouji),(m[i].money)); if(fclose(fp)) // 把更改后的数据写入文件中 { printf(" File close error! \n"); exit(0); } printf("信息已更改。\n"); //提示性语句 } void shanchu() { int i,a,l=0,f; // 定义几个整型变量:i是循环变量、 char c[10]; struct zhanghu { char name[10]; char mima[10]; char dizhi[10]; char shouji[20]; long int money; }; struct zhanghu m[20],shuru; // 定义一个结构体数组m、定义一个名叫shuru的结构体变量来存放输入数据 FILE *fp; if((fp=fopen("数据库.txt","r"))==NULL) { printf("File open error!\n"); exit(0); } while((a=fgetc(fp))!=EOF) // 做循环,目的是把文件行数存到变量l中 if(a=='\n') l++; if(fclose(fp)) { printf(" File close error! \n"); exit(0); } if((fp=fopen("数据库.txt","r"))==NULL) { printf("File open error!\n"); exit(0); } if((fp=fopen("数据库.txt","r"))==NULL) { printf("File open error!\n"); exit(0); } printf("请输入要删除的账户名字:"); scanf("%s",&(shuru.name)); printf("请输入账户密码(6位数字):"); scanf("%s",&(shuru.mima)); printf("请再次确认密码:"); // 提示性语句 scanf("%s",&c); for(i=0;im[i].money) //判断取款金额是否超出账户余额 { printf("余额不足!请支取余额范围内的金额。\n"); m[i].money=m[i].money-a; // 用存款后的账户金额替代原有金额 printf("操作成功!当前账户余额为%ld元。\n",m[i].money); } else { m[i].money=m[i].money-a; printf("操作成功!当前账户余额为%ld元。\n",m[i].money); } } } if(fclose(fp)) { printf(" File close error! \n"); exit(0); } if((fp=fopen("数据库.txt","w"))==NULL) { printf("File open error!\n"); exit(0); } for(i=0;i<16;i++)// 把m中数据写入文件中 fprintf(fp,"%s %s %s %s %ld\n",(m[i].name),(m[i].mima),(m[i].dizhi),(m[i].shouji),(m[i].money)); if(fclose(fp)) { printf(" File close error! \n"); exit(0); } } void charu() { int i; // i是循环变量 char c[10]; //c存储输入的密码 struct zhanghu { char name[10]; char mima[10]; char dizhi[10]; char shouji[20]; long int money; }; struct zhanghu m[20];// 定义结构体数组m FILE *fp; if((fp=fopen("数据库.txt","r"))==NULL) { printf("File open error!\n"); exit(0); } for(i=0;i<16;i++) // 作循环,把文件数据读入m中 fscanf(fp,"%s %s %s %s %ld",&(m[i].name),&(m[i].mima),&(m[i].dizhi),&(m[i].shouji),&(m[i].money)); printf("请输入要插入的账户名字:"); scanf("%s",&(m[16].name)); printf("请输入现居地址:"); // 提示性语句 scanf("%s",&(m[16].dizhi)); printf("请输入联系方式(手机号):"); scanf("%s",&(m[16].shouji)); printf("请设置密码(6位数字):"); scanf("%s",&(m[16].mima)); printf("请再次确认密码:"); scanf("%s",&c); while(strcmp(c,m[16].mima)!=0) // 作循环,保证输入密码的准确性 { printf("两次密码不一致,请重新设置密码。\n"); printf("请设置密码(6位数字):"); scanf("%s",&(m[16].mima)); printf("请再次确认密码:"); scanf("%s",&c); } printf("请输入首存金额:\n"); scanf("%ld",&(m[16].money)); if(fclose(fp)) { printf(" File close error! \n"); exit(0); } if((fp=fopen("数据库.txt","w"))==NULL) { printf("File open error!\n"); exit(0); } for(i=0;i<17;i++) // 把m中数据写入文件中 fprintf(fp,"%s %s %s %s %ld\n",(m[i].name),(m[i].mima),(m[i].dizhi),(m[i].shouji),(m[i].money)); if(fclose(fp)) { printf(" File close error! \n"); exit(0); } printf("账户已建立。\n"); } void chaxun() { struct zhanghu { char name[10]; char mima[10]; char dizhi[10]; char shouji[20]; char money[20]; }; struct zhanghu m,shuru; // 定义两个结构体变量,m存文件中的数据,shuru存输入数据 FILE *fp; if((fp=fopen("数据库.txt","r+"))==NULL) { printf("File open error!\n"); exit(0); } printf("请输入要查询的账户名字:"); scanf("%s",&(shuru.name)); while(!feof(fp)) // 当文件未读到结尾时 { fscanf(fp,"%s %s %s %s %s",&(m.name),&(m.mima),&(m.dizhi),&(m.shouji),&(m.money)); //存取文件数据 if(strcmp(shuru.name,m.name)==0)//判断输入姓名是否与m中的姓名一致 { printf("请输入查询密码(6位数字):"); scanf("%s",&(shuru.mima)); while(strcmp(m.mima,shuru.mima)!=0) // 作循环,保证输入密码的准确性 { printf("密码有误,请重新输入密码(6位数字):\n"); scanf("%s",&(shuru.mima)); } printf("当前账户余额为:%s元。\n",(m.money)); break; } } if(fclose(fp)) { printf(" File close error! \n"); exit(0); } } int jianyan(int x) { int n; n=x; // 定义变量n来接受传入x中的数据 if(n>=1&&n<=6) // 判断:如果传入数据在0~6之间,则返回当前n的值 return n; else // 否则,则要求重新输入n,再返回n得志 { printf("输入数字不在操作范围内,请检查后重新输入\n"); printf("请重新输入数字:\n"); n=0; scanf("%d",&n); jianyan(n); } } void caidan(int x) { char c; printf("请确认是否执行'%d'的操作\n",x); // 提示性语句 printf("确认执行请输入'Y',取消执行请输入'N'\n"); scanf("%c",&c); printf("请输入字母:"); scanf("%c",&c); if(c=='Y') // 如果输入为'Y',则执行下面的switch的循环 { switch(x) // 判断x的值,根据x的值执行不同的case语句 { case 1: { chaxun(); printf("请问是否进行其他操作\n"); break; // 执行完当前的case语句就直接跳出switch循环 } case 2: { cunkuan(); printf("请问是否进行其他操作\n"); break; } case 3: { qukuan(); printf("请问是否进行其他操作\n"); break; } case 4: { charu(); printf("请问是否进行其他操作\n"); break; } case 5: { shanchu(); printf("请问是否进行其他操作\n"); break; } case 6: { xiugai(); printf("请问是否进行其他操作\n"); break; } } } if(c=='N') // 如果输入为'N',则取消当前操作 printf("'%d'操作已取消执行,是否进行其他操作\n",x); printf("继续操作请输入相关数字,否则请输入其他任意数字退出操作\n"); //提示性语句 x=0; printf("请输入数字:"); scanf("%d",&x); if(x==9) exit(0); if(x>=1&&x<=6) //如果输入数字在1~6之间,执行caidan函数中的内容 caidan(x); } int main(void) { int n,k; printf("以下是本系统的基础功能:\n"); //输出提示性语句 printf("1.查询账户余额\n"); printf("2.存款\n"); printf("3.取款\n"); printf("4.插入账户\n"); printf("5.删除账户\n"); printf("6.修改账户\n"); printf("请根据具体需要输入数字进行相关操作\n"); printf("请输入数字:"); scanf("%d",&n); k=jianyan(n); //先调用jianyan函数检验输入数字n是否在可操作的范围内 caidan(k); // 再调用caidan函数 return 0; }