您的位置:首页 > 编程语言 > C语言/C++

用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;
}


运行截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: