用C语言写的一个小的银行管理程序
2016-03-27 15:02
639 查看
C语言实现银行管理小程序
功能:
1:管理员模式银行添加,删除,修改,查看,查找,用户查看,查找,修改。
2:用户模式
资金存入,取出,修改信息,
数据结构:
源代码:
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<math.h> #include<string.h> typedef struct user{ char name[16]; int age; double money; char id[10]; char bankName[20]; char password[10]; user* next; }user; typedef struct bank{ char name[16]; double rate; user* head; bank* next; }bank; bank* addBank(bank* head,bank* newBank);//添加bank bank* FRbank();//文件中读取bank void FWbank(bank* bankHead);//银行链表写入本地 bank* creatBank();//创建bank bank* addBank(bank* head,bank* newBank);//添加bank bank* XGbank(bank* head,char name[]);//修改bank bank* delBank(bank* head,char name[]);//删除bank void printfBank(bank* head);//打印bank void suUser(bank* bankHead);//管理员菜单 int sulogIn();//管理员登录 int find(bank* head,char[]);//查找bank user* findUser(bank*head,char key[]);//查找user void printfUser(bank* head);//打印user user* creatUser(bank*head);//创建user void FWuser(bank*head);//写入本地user bank* FRuser(bank* head);//文件读取user void User(bank* head,char key[]);//修改user user* findUser(bank*head,char key[]);//查找user int login(bank* head);//user登录 //文件中读取bank bank* FRbank(){ bank* bankHead=NULL; FILE* fp=fopen("bank.txt","rb"); while(!feof(fp)){ bank* newBank=(bank*)malloc(sizeof(bank)); if(fread(newBank,sizeof(bank),1,fp)==1){ newBank->next=NULL; newBank->head=NULL; bankHead=addBank(bankHead,newBank); } } fclose(fp); return bankHead; } //银行链表写入本地 void FWbank(bank* bankHead){ bank*bankPoint=bankHead; FILE* fp=fopen("bank.txt","wb"); while(bankPoint){ fwrite(bankPoint,sizeof(bank),1,fp); bankPoint=bankPoint->next; } fclose(fp); } //创建bank bank* creatBank(bank*head){ bank* newBank=(bank*)malloc(sizeof(bank)); newBank->next=NULL; newBank->head=NULL; printf("请依次输入银行名字,年利率:\n"); scanf("%s %lf",newBank->name,&(newBank->rate)); if(find(head,newBank->name)){ printf("该银行已存在\n"); return NULL; }else{ return newBank; } } //添加bank bank* addBank(bank* head,bank* newBank){ bank* last=head; if(last==NULL){ head=newBank; } else{ while(last->next){ last=last->next; } last->next=newBank; } return head; } //修改bank bank* XGbank(bank* head,char name[]){ bank* point=head; while(point){ if(strcmp(point->name,name)==0){ printf("即将修改bank是\n\n%10s\t%lf\n\n",point->name,point->rate); printf("请输入要修改成什么:(格式:name rate)\n"); scanf("%s %lf",point->name,&(point->rate)); } point=point->next; } return head; } //删除bank bank* delBank(bank* head,char name[]){ bank* point=head; bank* last=NULL; if(strcmp(point->name,name)==0){ head=point->next; user* userPoint=point->head; while(userPoint){ user* next=userPoint; userPoint=userPoint->next; free(next); next=NULL; } free(point); point=NULL; } else{ last=point; point=point->next; while(point){ if(strcmp(point->name,name)==0){ last->next=point->next; free(point); point=NULL; }else{ last=point; point=point->next; } } } return head; } //打印bank void printfBank(bank* head){ bank* point=head; printf("银行名字:\t年利率:\n\n"); while(point){ printf("%-10s\t%5.3lf\n",point->name,point->rate); printf("------------------------\n"); point=point->next; } } //管理员菜单 void suUser(bank* bankHead){ char num; while(1){ system("cls"); printf("\t\t---------------------------------------\n"); printf("\t\t--------------管理员模式---------------\n"); printf("\t\t---------------------------------------\n"); printf("\t\t----1,银行详情 -----------------\n"); printf("\t\t----2,增加银行 -----------------\n"); printf("\t\t----3,删除银行 -----------------\n"); printf("\t\t----4,修改银行 -----------------\n"); printf("\t\t----5,查找银行 -----------------\n"); printf("\t\t----6,查看银行 -----------------\n"); printf("\t\t----7,修改用户 -----------------\n"); printf("\t\t----0,返回主页 -----------------\n"); printf("请输入序号:\n"); num=getch(); switch(num){ case '1': printfUser(bankHead); // FWbank(bankHead); break; case '2': system("cls"); printf("输入要添加银行的个数\n"); int num; scanf("%d",&num); while(num){ bankHead=addBank(bankHead,creatBank(bankHead)); num--; } printfBank(bankHead); FWbank(bankHead); break; case '3': system("cls"); char key1[20]; printfBank(bankHead); printf("请输入要删除的银行名字\n"); scanf("%s",&key1); bankHead=delBank(bankHead,key1); printfBank(bankHead); FWbank(bankHead); FWuser(bankHead); break; case '4': system("cls"); char key2[20]; printfBank(bankHead); printf("请输入要修改的银行名字\n"); scanf("%s",&key2); system("cls"); bankHead=XGbank(bankHead,key2); printfBank(bankHead); FWbank(bankHead); break; case '5': char key[20]; printf("请输入要查找的关键字:\n"); scanf("%s",key); find(bankHead,key); FWbank(bankHead); break; case '6': system("cls"); printfBank(bankHead); FWbank(bankHead); break; case '7': printf("这是管理员的高权限操作,请慎重!\n"); system("pause"); char key3[20]; printf("请输入要操作的id:\n"); scanf("%s",key3); User(bankHead,key3); break; case '0': return; default: printf("莫要乱输哈!\n"); // system("pause"); break; } system("pause"); } } //管理员登录 int sulogIn(){ char suUserName[10]; char suUserPasw[10]; printf("请输入管理员用户名:\n"); scanf("%s",suUserName); printf("请输入管理员密码 :\n"); scanf("%s",suUserPasw); if(strcmp(suUserName,"admin")==0&&strcmp(suUserPasw,"admin")==0){ return 1; }else{ return 0; } } //查找银行 int find(bank* head,char key[]){ bank* point=head; while(point){ if(strcmp(point->name,key)==0){ printf("\n%-10s\t%lf\n",point->name,point->rate); user* userPoint=point->head; printf("\t用户名:\t存入年份:\t本金:\t\tid:\t存入银行:\t密码:\t本利和\n"); while(userPoint){ printf("\t%-8s\t%-d\t%-10.2lf\t%-s\t%-s\t%s\t%lf\n",userPoint->name,userPoint->age,userPoint->money,userPoint->id,userPoint->bankName,userPoint->password,userPoint->money*pow(1+point->rate,userPoint->age)); userPoint=userPoint->next; } return 1; } point=point->next; } return 0; } //创建user user* creatUser(bank*head){ user* newUser=(user*)malloc(sizeof(user)); user* userPoint=NULL; newUser->next=NULL; printf("请依次输入\n用户名字,存入年份,本金,ID,存入的银行,密码:\n"); scanf("%s %d %lf %s %s %s",newUser->name,&(newUser->age),&(newUser->money),newUser->id,newUser->bankName,newUser->password); userPoint=findUser(head,newUser->id); if(userPoint){ printf("输入的id已存在\n"); printf("\t%s\t%-d\t\t%-10.2lf\t\t%-s\t%-s\n",userPoint->name,userPoint->age,userPoint->money,userPoint->id,userPoint->bankName); return NULL; }else{ return newUser; } } //添加user bank* addUser(bank* head,user*newUser){ if(newUser==NULL){ return head; } bank* bankPoint=head; user* userPoint=NULL; int num=1; while(bankPoint){ if(strcmp(bankPoint->name,newUser->bankName)==0){ userPoint=bankPoint->head; if(userPoint==NULL){ bankPoint->head=newUser; return head; }else{ while(userPoint->next){ userPoint=userPoint->next; } userPoint->next=newUser; return head; } } bankPoint=bankPoint->next; } if(num){ printf("没有这个银行,请手动创建\n"); head=addBank(head,creatBank(head)); } return head; } //打印user void printfUser(bank* head){ bank* point=head; user* Upoint=NULL; int num=1; printf("银行名字:\t年利率:\n\n"); while(point!=NULL){ printf("%-10s\t%5.3lf\n",point->name,point->rate); printf("------------------------\n"); Upoint=point->head; while(Upoint){ if(num){ printf("\t用户名:\t存入年份:\t本金:\t\tid:\t存入银行:\t密码:\t本利和\n"); printf("\t------------------------------------------------------------------------------------\n"); } num=0; printf("\t%-8s\t%-d\t%-10.2lf\t%-s\t%-s\t%s\t%lf\n",Upoint->name,Upoint->age,Upoint->money,Upoint->id,Upoint->bankName,Upoint->password,Upoint->money*pow(1+point->rate,Upoint->age)); printf("\t------------------------------------------------------------------------------------\n"); Upoint=Upoint->next; } point=point->next; num=1; } } //user写入本地 void FWuser(bank*head){ FILE* fp=fopen("user.txt","wb"); bank* bankPoint=head; user* userPoint; while(bankPoint){ userPoint=bankPoint->head; while(userPoint){ fwrite(userPoint,sizeof(user),1,fp); userPoint=userPoint->next; } bankPoint=bankPoint->next; } fclose(fp); } //user文件读取 bank* FRuser(bank* head) { bank* bankHead=head; FILE* fp=fopen("user.txt","rb"); while(!feof(fp)){ user* newUser=(user*)malloc(sizeof(user)); if(fread(newUser,sizeof(user),1,fp)==1){ newUser->next=NULL; bankHead=addUser(head,newUser); } } fclose(fp); return bankHead; } //修改user void User(bank* head,char key[]){ user* userPoint=findUser(head,key); bank* bankPoint=head; char ch; if(userPoint!=NULL){ while(strcmp(bankPoint->name,userPoint->bankName)!=0){ bankPoint=bankPoint->next; } while(1){ system("cls"); printf("\t\t-------------------------------------------------------------------------------------\n"); printf("\t\t %s您好 \n",userPoint->name); printf("\t\t-------------------------------------------------------------------------------------\n"); printf("\t\t-------------------------------------------------------------------------------------\n"); printf("\t\t以下是你的信息:\n"); printf("\t\t-------------------------------------------------------------------------------------\n"); printf("\t\t用户名:\t存入年份:\t本金:\t\tid:\t存入银行:\t密码:\t本利和\n"); printf("\t\t-------------------------------------------------------------------------------------\n"); printf("\t\t%-8s\t%-d\t%-10.2lf\t%-s\t%-s\t%s\t%lf\n\n",userPoint->name,userPoint->age,userPoint->money,userPoint->id,userPoint->bankName,userPoint->password,userPoint->money*pow(1+bankPoint->rate,userPoint->age)); printf("------------------------------------------------------------------------------------------------------\n"); printf("----1,修改姓名 ----\n"); printf("----2,修改存入年份----\n"); printf("----3,存入资金 ----\n"); printf("----4,取出资金 ----\n"); printf("----5,修改密码 ----\n"); printf("----0,回到主页 ----\n"); printf("请输入选项:\n"); ch=getch(); switch(ch){ case '1': printf("输入要修改成什么名字:\n"); scanf("%s",userPoint->name); break; case '2': printf("输入要修改成几年:\n"); scanf("%d",&(userPoint->age)); break; case '3': printf("存入多少资金:\n"); int add; scanf("%d",&add); userPoint->money=userPoint->money+add; break; case '4': printf("取出多少资金:\n"); int quchu; scanf("%d",&quchu); userPoint->money=userPoint->money-quchu; break; case '5': printf("输入新密码:\n"); scanf("%s",userPoint->password); break; case '0': return; default: printf("莫要乱输哈!\n"); system("pause"); break; } FWuser(head); } }else{ printf("输入的id找不到啊。。。\n"); } } //查找user user* findUser(bank*head,char key[]){ bank* bankPoint=head; while(bankPoint){ user* userPoint=bankPoint->head; while(userPoint){ if(strcmp(userPoint->id,key)==0){ return userPoint; } userPoint=userPoint->next; } bankPoint=bankPoint->next; } return NULL; } //user登录 int login(bank* head){ char id[10]; char paw[10]; user*userPoint; int i=0; do{ if(i>3){ printf("请想好id和密码再来\n"); system("pause"); return 0; } printf("请输入登录id:\n"); scanf("%s",id); userPoint=findUser(head,id); i++; }while(userPoint==NULL); printf("请输入密码:\n"); scanf("%s",paw); if(strcmp(paw,userPoint->password)==0){ system("cls"); User(head,id); } else{ return 0; } } int main(){ char num; bank* bankHead=NULL; if(!fopen("bank.txt","rb")){ FILE* newf=fopen("bank.txt","wb"); fclose(newf); } if(!fopen("user.txt","rb")){ FILE* newf=fopen("user.txt","wb"); fclose(newf); } printf("请把窗口最大化\n若已经最大化,按任意键继续..."); getch(); while(1){ bankHead=FRbank(); bankHead=FRuser(bankHead); // printfUser(bankHead); system("cls"); printf("\t\t---------------------------------------\n"); printf("\t\t---------------------------------------\n"); printf("\t\t---------------------------------------\n"); printf("\t\t----1,管理员登录 -----------------\n"); printf("\t\t----2,用户 登录 -----------------\n"); printf("\t\t----3,新开 用户 -----------------\n"); printf("\t\t---------------------------------------\n"); printf("\t\t---------------------------------------\n"); printf("\t\t---------------------------------------\n"); printf("\t\t-----------------------By--QL -------\n"); printf("\t\t-----------------------2016.3.23-------\n"); printf("\t\t---------------------------------------\n"); printf("\t\t---默认管理员帐号密码是admin,admin----\n"); printf("请输入序号:\n"); num=getch(); switch(num){ case '1': system("cls"); if(sulogIn()){ suUser(bankHead); }else{ printf("用户名或密码错误\n"); system("pause"); } break; case '2': login(bankHead); break; case '3': printf("输入要添加用户的个数\n"); int num; scanf("%d",&num); while(num){ bankHead=addUser(bankHead,creatUser(bankHead)); num--; } FWbank(bankHead); FWuser(bankHead); printf("录入成功\n"); system("pause"); break; default: printf("莫要乱输哈!\n"); system("pause"); break; } } return 0; }
运行截图:
相关文章推荐
- C++中“头文件”的定义和使用
- VC++6.0 unexpected end of file while looking for precompiled header directive
- c++11 :unique_ptr
- C++sort函数的用法
- c++ extern及其对struct的使用
- 字符型指针变量与字符数组的区别
- 比较C++中的4种类型转换方式
- C++学习笔记——第11章 运算符法重载
- C语言学习笔记之数据类型
- C++用指针处理数组元素
- C++中引用详解
- va_list
- c++实验2-标准体重
- C++11智能指针之使用shared_ptr实现多态
- C语言完成2048,辣鸡代码(#滑稽#)
- C++中vector的用法
- 孙敬哲的c++上机实验2-2
- c语言实验
- C语言中从标准输入读取几行输入,并打印到标准输出上两种方法
- 孙敬哲的c++上机实验2-1