📄 银行账户管理系统.cpp
字号:
/**头文件**/
#include<stdio.h >
#include<string.h>
#include<stdlib.h>
#define N 1000000
/*******************************账户数据结构******************************/
struct user{
char name[10];
char num[20];
char pass[7];
char znum[20];
struct{
short year;
short month;
short day;
}date;
long money;
char mod[10];
}m[N];
FILE *fp;
int count=0;
/***********************************打开文件******************************/
int open(char *p)
{
if(fp!=NULL)fclose(fp);
if((fp=fopen("e:\\user.dat",p))==NULL)return -1;
return 1;
}
/*************************************返回函数****************************/
void back(){
printf("\n\t\t\t按回车键返回");
getchar();
getchar();
}
void yemei(){
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
printf("\t ☆☆☆ 文件管理系统 ☆☆☆ \n\n");
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
printf("\t\t\t1→新开户\n");
printf("\t\t\t2→修改密码\n");
printf("\t\t\t3→删除账户纪录\n");
printf("\t\t\t4→查找账户\n");
printf("\t\t\t5→统计\n");
printf("\t\t\t6→排序(钱数)\n");
printf("\t\t\t7→显示所有账户信息\n");
printf("\t\t\t8→数据备份\n");
printf("\t\t\t9→退出\n");
}
/*******************************新开户***********************************/
void nems()
{
struct user k;
system("cls");
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
printf("\t ☆☆☆ 新开账户 ☆☆☆ \n\n");
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
printf("\t\t请输入新用户的信息:\n");
printf("\t\t\t户名:");scanf("%s",k.name);
printf("\t\t\t账号:");scanf("%s",k.num);
printf("\t\t\t密码:");scanf("%s",k.pass);
printf("\t\t\t证件号码:");scanf("%s",k.znum);
printf("\t\t\t开户日期:");scanf("%hd.%hd.%hd",&k.date.year,&k.date.month,&k.date.day);
printf("\t\t\t存款:");scanf("%ld",&k.money);
printf("\t\t\t存款类型:");scanf("%s",k.mod);
if(open("ab+")==-1)
{
printf("\t\t\t打开主件出错!\n");
return ;
}
fwrite(&k,sizeof(struct user),1,fp);
printf("\n\t\t账户建立成功\n");
back();
fclose(fp);
}
/***********************************修改密码****************************************/
void xugai()
{
int i=0,j=0,count;
char old[20],newPass[7];
system("cls");
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
printf("\t ☆☆☆ 修改密码 ☆☆☆ \n\n");
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
if(open("rb")==-1)
{
printf("\t\t\t打开主件出错!\n");
return ;
}
do{
fread(&m[i],sizeof(struct user),1,fp);
i++;
}while(!feof(fp));
count=i-1;
printf("\t\t请输入账号:");
getchar();
scanf("%s",old);
for(i=0;i<count;i++)if(strcmp(old,m[i].num)==0)break;
if(i==count){
printf("\t\t没有找到该账户信息!\n");
return;
}
while(j<2)
{
j++;
printf("\t\t请输入原密码:");
getchar();
scanf("%s",old);
if(strcmp(old,m[i].pass)==0)break;
else printf("\t\t密码错误!\n");
if(j==2)return ;
}
do{
printf("\t\t请输入新密码:");
getchar();
scanf("%s",old);
printf("\t\t请再次输入新密码:");
getchar();
scanf("%s",newPass);
if(strcmp(old,newPass)!=0)printf("\t\t您两次输入的密码不一样!\n");
}while(strcmp(old,newPass)!=0);
for(j=0;j<6;j++)*(m[i].pass+j)=newPass[i];
if(open("wb")==-1)
{
printf("\t\t由于特殊原因,本次修改失败!\n");
return;
}
strcpy(m[i].pass,newPass);
for(i=0;i<count;i++)fwrite(&m[i],sizeof(struct user),1,fp);
printf("\t\t修改成功!\n");
back();
fclose(fp);
}
/****************************************删除*********************************************/
void shanChu()
{
int i=0;
char password[7],wo[20];
system("cls");
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
printf("\t ☆☆☆ 删除账户 ☆☆☆ \n\n");
printf("\t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆ \n\n");
if((fp=fopen("e:\\user.dat","rb"))==NULL){
printf("\t\t\t打开主件出错!\n");
return;
}
while(!feof(fp)){
fread(&m[i],sizeof(struct user),1,fp);
i++;
};
count=i-1;
printf("\t\t请输入账号:");
scanf("%s",wo);
printf("\t\t请输入密码:");
scanf("%s",password);
for(i=0;i<count;i++)if((strcmp(m[i].num,wo)==0&&strcmp(m[i].pass,password)==0))break;
if(i==count){
printf("\t\t密码错误!");
return;
}
for(i=i+1;i<count;i++)m[i-1]=m[i];
count--;
if((fp=fopen("e:\\user.dat","wb+"))==NULL){
printf("保存文件出错!");
return;
}
for(i=0;i<count;i++)fwrite(&m[i],sizeof(struct user),1,fp);
printf("你账号已删除:");
fclose(fp);
back();
}
/****************************************查找*******************************************/
void chaZhao()
{
char old[10];
int i=0,count;
if ((open("rb"))==-1)
{
printf("\t\t\t打开主件出错!\n");
return;
}
for(count=0;!feof(fp);count++)
fread(&m[count],sizeof(struct user),1,fp);
printf("请输入账号:");
scanf("%s",old);
while(i<count)
{
if(strcmp(m[i].num,old)==0)break;
i++;
}
if(i==count)
{
printf("此账号不存在!");
printf("请返回上一项!\n");
return;
}
printf("您的账号已经找到!\n");
printf("---------------------------------------------------------------------------\n");
printf(" 用户名 账号 开户时间 所存钱数 存储类型\n");
printf("---------------------------------------------------------------------------\n");
printf ("%8s %10s %d.%d.%d\t%d\t%s\n",m[i].name,m[i].num,m[i].date.year,m[i].date.month,m[i].date.day,m[i].money,m[i].mod);
back();
}
/*****************************************按条件统计********************************/
void tongJi()
{
int count,i;
struct user s;
if((open ("rb")==-1))
{
printf("\t\t\t打开主件出错!\n");
return;
}
for(count=0;!feof(fp);count++)
fread(&m[count],sizeof(struct user),1,fp);
s.money=0;
for(i=0;i<count;i++)
s.money+=m[i].money;
printf("当前所有存款人数:");
printf("%d",count-1);
printf("\n");
printf("当前存款的总前数");
printf("%d",s.money);
getchar();
getchar();
fclose(fp);
}
/******************************************排序****************************************/
void paiXu()
{
system("cls");
int j,i=0;
struct user us;
count=0;
if((fp=fopen("e:\\user.dat","rb+"))==NULL)
{
printf("\t\t\t打开主件出错!\n");
return;
}
do{
fread(&m[count],sizeof(struct user),1,fp);
count++;
}while(!feof(fp));
printf("\x20\x20户名\x20\x20\x20账号\t证件号码\t开户日期\t存款\t类别\n");
count--;
for(i=0;i<count-1;i++){
for(j=count-1;j>i;j--){
if(m[j].money<m[j-1].money){
us=m[j];
m[j]=m[j-1];
m[j-1]=us;
}
}
}
printf("%d",count);
for(i=0;i<count;i++){
printf("%s\x20\x20%s\t%s\t%hd.%hd.%hd\x20%ld\x20\x20\x20%s\n",
m[i].name,m[i].num,m[i].znum,m[i].date.year,m[i].date.month,m[i].date.day,m[i].money,m[i].mod);
}
fclose(fp);
back();
}
/****************************************显示所有账户信息*****************************/
void allnum()
{
struct user k;
system("cls");
if(open("rb")==-1){
printf("\t\t\t打开主件出错!\n");
return;
}
printf("---------------------------------------------------------------------------\n");
printf("\x20\x20户名\x20\x20\x20账号\t证件号码\t开户日期\t存款\t类别\n");
printf("---------------------------------------------------------------------------\n");
do{
fread(&k,sizeof(struct user),1,fp);
if(!feof(fp))printf("%s\x20\x20%s\t%s\t%s\t%hd.%hd.%hd\x20%ld\x20\x20\x20%s\n",k.name,k.num,k.pass,k.znum,k.date.year,k.date.month,k.date.day,k.money,k.mod);
}while(!feof(fp));
back();
fclose(fp);
}
/**************************************数据备份****************************************/
void dataCopy(){
system("cls");
int i=0;
FILE *q;
if((fp=fopen("e:\\user.dat","rb"))==NULL){
printf("\t\t\t打开主件出错!\n");
back();
return;
}
if((q=fopen("e:copy.dat","wb"))==NULL){
printf("不能打开文件.\n");
back();
return;
}
while(!feof(fp)){
fread(&m[i],sizeof(struct user),1,fp);
fwrite(&m[i],sizeof(struct user),1,q);
i++;
}
fclose(fp);
fclose(q);
printf("\n\t\t\t!备份成功!\n");
back();
return;
}
/****************************************退出系统******************************/
void ex()
{
char c;
printf("\n\t\t您确定(Y/N)?");
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')exit(0);
}
/***************************************主函数部分*****************************/
void main(){
int a;
while(1){
system("cls");
yemei();
printf("\t\t请选择:");
scanf("%d",&a);
switch(a){
case 1: nems();
break;
case 2: xugai();
break;
case 3: shanChu();
break;
case 4: chaZhao();
break;
case 5: tongJi();
break;
case 6: paiXu();
break;
case 7: allnum();
break;
case 8: dataCopy();
break;
case 9: ex();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -