main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#define MaxNum 200
#define N_P 6
typedef struct
{
int AccountNumber[3];
char name[20];
char password[N_P+1];
unsigned long amount;
int state;
} Account;
void Load(FILE *,Account *);
void ShowMenu(int );
int MakeChoice(int );
void EnterPassword(char *);
void CreatAccount(unsigned char *,Account *,int); //第一个参数为加密关键字,第二个参数为账户序号
int JudgePassword(char *,char *);
int decrypt(int *,unsigned char *);
void LogIn(unsigned char *,Account *,int); //第二个参数为当前账户数目,登陆成功返回1,失败返回0
int EnterAccountNumber(unsigned char *,int );
void EnterNum(char *,int );
void Operate(unsigned char *,Account *,int ,int );
void ShowSubMenu(char *);
void AdministratorMode(unsigned char *,unsigned char *,Account *,char *,int);
void ShowAdministratorMenu();
void WriteToFile(FILE *,unsigned char *,Account*,char *,int);
int main()
{
FILE *fp;
int i,total;
unsigned char key[4],key_en[4];
char administrator_password[10];
Account *user;
user=(Account *)malloc(sizeof(Account)*MaxNum);
fp=fopen("bank.txt","r+");
if(fp==NULL)
{
printf("银行数据库无法打开,按任意键结束程序!\n");
getch();
exit(1);
}
fscanf(fp,"%d\n%s\n%s",&total,administrator_password,key);
for(i=0;i<3;++i)//用key_en保存key的值
key_en[i]=key[i];
key_en[0]=(key_en[0]<<3)|(key_en[0]>>(sizeof(key_en[0])*8-3));
key_en[2]=(key_en[2]>>3)|(key_en[2]<<(sizeof(key_en[2])*8-3));
Load(fp,user);//将数据存入数组user中
while(1)
{
system("cls");
ShowMenu(total);
switch(MakeChoice(4))
{
case 1:
system("cls");
LogIn(key_en,user,total);
break;
case 2:
system("cls");
CreatAccount(key_en,user,total++);
break;
case 3:
system("cls");
AdministratorMode(key,key_en,user,administrator_password,total);
break;
default:
system("cls");
WriteToFile(fp,key,user,administrator_password,total);
return 0;
}
}
return 0;
}
function.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#define MaxNum 200
#define N_P 6
//账户状态 0为正常 1为挂失 2为冻结 3为销户
typedef struct
{
int AccountNumber[3];
char name[20];
char password[N_P];
unsigned long amount;
int state;
} Account;
void Load(FILE *,Account *);
void ShowMenu(int );
int MakeChoice(int );
void EnterPassword(char *);
void CreatAccount(unsigned char *,Account *,int); //第一个参数为加密关键字,第二个参数为账户序号
int JudgePassword(char *,char *);
int decrypt(int *,unsigned char *);
void LogIn(unsigned char *,Account *,int); //第二个参数为当前账户数目,登陆成功返回1,失败返回0
int EnterAccountNumber(unsigned char *,int );
void EnterNum(char *,int );
void Operate(unsigned char *,Account *,int,int );
void ShowSubMenu(char *);
void AdministratorMode(unsigned char *,unsigned char *,Account *,char *,int);
void ShowAdministratorMenu();
void WriteToFile(FILE *,unsigned char *,Account*,char *,int);
void Load(FILE *fp,Account *user)
{
int count=0;
//将文件中的用户信息存到数组中
while(fscanf(fp,"\n%d%d%d %s %s %lu %d\n",&user[count].AccountNumber[0],&user[count].AccountNumber[1],\
&user[count].AccountNumber[2],user[count].name,\
user[count].password,&user[count].amount,&user[count].state)!=EOF)
++count;
}
void ShowMenu(int total)
{
printf("****中国银行烟大计163-1分行****\n");
printf("目前共有%d名注册用户*****\n",total);
printf("1.登陆*************************\n");
printf("2.开户*************************\n");
pri