2011年下半年项目“银行储蓄综合业务平台”C语言版

项目名称: 银行储蓄综合业务平台

编写语言: 面向对象的C语言

代码:

--先建一个空项目


 

--添加一个头文件名称为“Bank.h”

   头文件代码为:

//显示欢迎信息
void welcome ();

//系统主菜单
void mainmenu ();

//开户
void openAnAccount ();

//销户
void closeAnAccount ();

//存款
void deposit ();

//取款 
void withdraw ();

//查询
void query ();

//查找一个账户在数组中的位置
int findAnAccount (int accNumber);

//显示一个账户的信息
void dispAnAccount (int i);

//生成账号
int createAccNumber ();

//把数据从文件中读到结构体数组中
int readDate ();

//把结构体中的数据写入文件
int writeDate ();


//检查录入的户名、密码、存入金额格式是否合法。返回值:0:合法、1:非法。
//flag: 0:户名、1:密码、2:存入现金。checkstr:需要检查的项目。
int checkInput(int flag,char *str);

//去除右空格
char qeryall ();

//得到键盘录入的户名
void getaccName (char accname[]);

//得到键盘录入的密码
void getaccPWD (char accPWD[]);

//得到键盘上录入的金额
double getcash(int flag);

//得到键盘录入的账号
int getaccNumber (int flag);
#define N_MAXREC_NO 100 //文件最大行数
#define MAXLINE 256 //行最大长度

//数据文件记录结构
struct record
{
	int accNumber;//账号
	char accName[9];//用户名
	char accPWD[7];//用户密码
	double balance;//账户余额
	char flag[2];//销户标志
};

//自定义数组类型

typedef struct record RECORD;

//结构体数组
RECORD rs[N_MAXREC_NO];

//最后一个账户在结构体中的位置
int maxAccount=-1;


 
--再添加一个源文件命名为“Bank.cpp”
   代码为:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "bank.h"
#include <fstream>

int main() 
{
	welcome();

	char userName[9];
	char userPWD[7];
	int i;
		
    for(i = 1;i <= 3;i ++)
	{
		printf("\n");
		printf("\n请输入用户名:");
		scanf("%s",userName);
		fflush(stdin);

		printf("\n请输入用户密码:");
		scanf("%s",userPWD);
		fflush(stdin);

		if ((strcmp(userName,"admin") == 0) && (strcmp(userPWD,"admin") == 0))
		{
			mainmenu ();//用户密码正确显示主菜单
		}
		else
		{
			if (i < 3)
			{
				//用户名或密码错误,提示用户从新输入
				printf("用户名或密码输入错误,请从新输入:");
			}
			else
			{
				//连续三次输入错误用户名或密码,
				printf("用户密码错误三次,退出系统···");
					exit(0);
			}
			}
		}

	return 0;
}

void welcome()
{
	printf("+===============================================+\n");
	printf(" |                                              |\n");
	printf(" |*                                            *|\n");
	printf(" |*      欢迎使用银行储蓄综合应用平台          *|\n");
	printf(" |*                                            *|\n");
	printf(" |                                              |\n");
	printf("+===============================================+\n");
}

void mainmenu()
{                                               //-1代表不存在

	int choice;
	choice = -1;
	do
	{
		printf("***************************************************\n");
		printf(" **                                              **\n");
		printf(" **             请选择业务种类                   **\n");
		printf(" **    1.存款 请按1          2.取款 请按2        **\n");
		printf(" **    3.查询 请按3          4.开户 请按4        **\n");
		printf(" **    5.销户 请按5          6.注销(退出)请按0   **\n");
		printf("***************************************************\n");
	
		printf("请输入你的选择:");
		scanf("%d",&choice);//等于cin >> choice.
		fflush (stdin);

		switch(choice)
		{
		case 0:
			exit (0);
		case 1:
			deposit ();
			break;
		case 2:
			withdraw ();
			break;
		case 3:
			query ();
			break;
		case 4:
		    openAnAccount();
			break;
		case 5:
			  closeAnAccount();
			break;
		default:
			printf ("\n无效选项!\n");
				break;
		}
	}
	while(choice != 0);
}

void openAnAccount()                                                                          //开户
{
	//定义参数
    int accNumber;//账号
	char accName[9];//户名
	char accPWD[7];//密码
	double cash;//存入金额

	//初始化变量
	accNumber = 0;
	memset(accName,0,sizeof(accName));
	memset(accPWD,0,sizeof(accPWD));
	cash = 0;

	//生成账号
	accNumber = createAccNumber();

	//获取账户名
	getaccName(accName);

	//获取账户密码
	getaccPWD(accPWD);

	//获取存入金额
	cash = getcash(0);
	maxAccount ++;       //获取一个新的账户位置
	rs[maxAccount].accNumber = accNumber;//新位置储存生成账号
	strcpy(rs[maxAccount].accName,accName);//新位置储存用户名
	strcpy(rs[maxAccount].accPWD,accPWD);//新位置储存用户密码
	rs[maxAccount].balance = cash;//新位置储存余额
	strcpy(rs[maxAccount].flag,"0");//记录账号状态

//生成账号
/*if (writeData())                            
{
	printf("写文件出错!");
	return;
}*/

                                                                                             //显示账户信息
dispAnAccount(maxAccount);

printf("开户成功按任意键返回···\n");
getch();//缓冲
return;
}
void dispAnAccount(int i)
//显示用户信息函数
{
	printf("+------------------------------------------------+\n");
	printf("|%-5s  |%-8s  |%-6s  |%-12s |%4s  |\n","账号","户名","密码","余额","状态");
	printf("+-------+----------+--------+-------------+------+\n");
	printf("|%5d  |%-8s  |%-6s  |%-12.2f |%4s  |\n",rs[i].accNumber,rs[i].accName,rs[i].accPWD,rs[i].balance,atoi(rs[i].flag)?"销户":"正常");
	printf("+------------------------------------------------+\n");
}

                                                                                               //生成账号信息
int createAccNumber()
{
	if(maxAccount == -1)
	{
		//账号从开始
		return 10001;
	}
	else
	{
		//顺序生成账号
		return rs[maxAccount].accNumber + 1;
	}
}
                                                                                                //获取账户名函数
void getaccName(char accName[])
{
	char caccName[100];//户名
	int i = 1;

	while(i)
	{
		memset(caccName,0,sizeof(caccName));
		printf("\n");
		printf("请输入储户户名:");
		scanf("%s",caccName);
		fflush(stdin);
		if (checkInput(0,caccName))
		{
			printf("超过位的最大户名长度!");
			continue;
		}
		i = 0;
	}
	memcpy(accName,caccName,9);
}

                                                                                                  //获取账户密码函数
void getaccPWD(char accPWD[])
{
	char caccPWD[100];//密码
		int i = 1;

		while(i)
		{
			memset(caccPWD,0,sizeof(caccPWD));
			printf("\n");
			printf("请输入用户密码:");
			scanf("%s",caccPWD);
			fflush(stdin);
			if(checkInput(1,caccPWD))
			{
				printf("超过位的最大密码长度!");
					continue;
			}
			i = 0;
		}
	memcpy(accPWD,caccPWD,7);
}

                                                                                             //得到键盘输入的金额
double getcash(int flag)
{
	char ccash[100];//把输入的金额,保存在数组中
	double dcash;//输入的金额
	int i = 1;

	while (i)
	{
		memset(ccash,0,sizeof(ccash));
		dcash = 0;
		printf("\n");
		switch(flag)
		{
		case 0:printf("请输入存入金额:");break;
		case 1:printf("请输入取款金额:");break;
		}
		scanf("%lf",&dcash);
		fflush(stdin);
		sprintf(ccash,"%12.2f",dcash);
		if (checkInput(2,ccash))
		{
			printf("录入金额超出位的最大存入(取出)金额长度!");
			continue;
		}
		i = 0;
	}
	return dcash;
}
                                                                                    //检查操作员输入的是否规范
int checkInput(int flag,char *checkStr)
{
	switch(flag)
	{
		//检查用户名是否超出最大长度
	    case 0:
		{
			if(strlen(checkStr) > 8)
			{
				return 1;
			}
			break;
		}
	    case 1:
		{
			if (strlen(checkStr) > 6)
			{
				return 1;
			}
			break;
		}
		//检查存入金额是否超过最大长度
	    case 2:
		{
			if(strlen(checkStr) > 12)
			{
				return 1;
			}
			break;
		}
	    default:
			return 0;
	}
	return 0;
}
                                                                                                //存款
void deposit()
{
	int accNumber;//账号
	int accountPosition;//账号在数组中的位置、
	double cash;//存入金额
	//初始化
	accNumber = 0;
	accountPosition = -1;//-1表示未找到
	cash = 0; 
	
	//获取存款账号
	accNumber = getaccNumber(0);
	
	//查找该账号
	accountPosition = findAnAccount(accNumber);
	
	if (accountPosition == -1)
	{
		printf("查无此账户,请按任意键返回···\n");
		getch();
		return;
	}
	
	//显示账户信息
	dispAnAccount(accountPosition);
	
	//已销户账户,不能进行存款操作
	if (strcmp(rs[accountPosition].flag,"0") != 0)
	{
		printf("该账户已销户,不能进行存款!请按任意键返回···\n");
		getch();
		return;
	}
	
	//得到存入金额
	cash = getcash (0);
	rs[accountPosition].balance = rs[accountPosition].balance + cash;
	
	//保存数据
	/*	if (writeData())                          
	{
	printf ("写文件出错!");
	return;
}*/
	dispAnAccount(accountPosition);
	printf("存款成功,请按任意键返回···\n");
	getch();
}

                                                                                    //获取用户账号函数的实现
int getaccNumber(int flag)
{
	int iaccNumber;//账号
	
	iaccNumber = 0;
	
	printf("\n");
	switch(flag)
	{
	case 0:printf("请输入要存款的账号:");break;
	case 1:printf("请输入要取款的账户:");break;
	case 2:printf("请输入要销户的账户:");break;
	case 3:printf("请输入要查询的账户:");break;
	}
	scanf("%d",&iaccNumber);
	fflush(stdin);
	
	return iaccNumber;
}

                                                                                        //实现查找账户函数
int findAnAccount(int accNumber)
{
	int accountPosition;//帐户在数组中的位置
	int i;//循环控制变量
	
	//初始位置是 -1,表示未找到
	//查找账户的位置
	accountPosition = -1;
	if(accNumber<=10000)
	{
		printf("输入错误按任意键返回:\n"); //修改
		getch();
		mainmenu();
	}
  
	i = accNumber-10001;                         //修改后的
	accountPosition = i;                         
	return accountPosition;
}                

//查找账户的位置
/*for(i = 0;i <= maxAccount;i ++)
{
if(rs[i].accNumber == accNumber)
{
accountPosition = i;
break;
}
}
return accountPosition;
} */



                                                                                              //取款
void withdraw()
{
	int accNumber;//账号
	char accPWD[7];//账户密码
	int accountPosition;//账号在数组中的位置
	double cash;//取出金额
	
	//初始化
	accNumber = 0;
	accountPosition = -1;//-1表示未找到
	cash = 0; 
	
	//获取取款账号
	accNumber = getaccNumber(1);
	
	//获得要查询的账户密码
	getaccPWD(accPWD);
	
	//查找该账号
	accountPosition = findAnAccount(accNumber);
	
	if (accountPosition == -1)
	{
		printf("查无此账户,请按任意键返回···\n");
		getch();
		return;
	}
	
	//密码不正确
	if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
	{
		printf("\n密码不正确!请按任意键返回···\n");
		getch();
		return;
	}
	
	
	
	//显示账户信息
	dispAnAccount(accountPosition);
	
	//已销户账户,不能进行取款操作
	if (strcmp(rs[accountPosition].flag,"0") != 0)
	{
		printf("该账户已销户,不能进行取款!请按任意键返回···\n");
		getch();
		return;
	}
	
	//得到取出金额
	cash = getcash (1);
	if (cash > rs[accountPosition].balance)
	{
		printf("\n取款金额大于账户余额,取款失败!请按任意键返回···\n");
		getch();
	}
	else
	{
		rs[accountPosition].balance = rs[accountPosition].balance - cash;
	}
	
	//保存数据
	/*	if (writeData())                  
	{
	printf ("写文件出错!");
	return;
}*/
	dispAnAccount(accountPosition);
	printf("取款成功,请按任意键返回···\n");
	getch();
}
                                                                                                //查询
void query()
{
	int accNumber;//账号
	char accPWD[100];//密码
	int accountPosition;//账户在数组中的位置
	
	//初始位置是-1,表示未找到
	accountPosition = -1;
	accNumber = 0;
	memset(accPWD,0,sizeof(accPWD));
	
	//获得要查询账号
	accNumber = getaccNumber(3);
	
	//获得要查询的账户密码
	getaccPWD(accPWD);
	
	//查找该账户
	accountPosition = findAnAccount(accNumber);
	
	if (accountPosition == -1)
	{
		printf("查无此账户,请按任意键返回···\n");
		getch();
	}
	//显示账户信息
	dispAnAccount(accountPosition);
	
	//密码不正确
	if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
	{
		printf("\n密码不正确!请按任意键返回···\n");
		getch();
		return;
	}
	//已销户账户
	if (strcmp(rs[accountPosition].flag,"0") != 0)
	{
		printf("\n账号已销户!请按任意键返回···\n");
		getch();
		return;
	}
	
	printf("查询成功,请按任意键返回···\n");
	getch();
	return ;
}

                                                                                                       //销户
void closeAnAccount()
{
	int accNumber;//用户账号
	char accPWD[7];//用户密码
	char userAnswer;//用户的回答
	int accountPosition;//账号在数组中的位置
	
	//初始化
	accountPosition = -1;//-1表示未找到
	accNumber = 0;
	memset(accPWD,0,sizeof(accPWD));
	
	//获取要销户账号
	accNumber = getaccNumber(2);
	
	//获取要销户密码
	getaccPWD(accPWD);
	
	//查找该账户
	accountPosition = findAnAccount(accNumber);
	
	if (accountPosition == -1)
	{
		printf("\n查无此账户!请按任意键返回···\n");
		getch();
		return;
	}
	
	//显示账户信息
	dispAnAccount(accountPosition);
	
	//密码不正确
	if (strcmp(rs[accountPosition].flag,"0") != 0)
	{
		printf("\n密码输入错误,请按任意键返回···\n");
		getch();
		return;
	}
	
	//账户已销户
	if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
	{
		//已销户账户,不能再次销户
		printf("该账户已经销户,不能再次销户,请按任意键返回···\n");
		getch();
		return;
	}
	
	//确认销户
	printf("确认账户%d销户吗?[1:销户|其他:不销户]",rs[accountPosition].accNumber);
	printf("请输入你的选择:");
	scanf("%c",&userAnswer);
	fflush(stdin);
	
	if(userAnswer == '1')
	{
		strcpy(rs[accountPosition].flag,"1");//‘1’为状态
		rs[accountPosition].balance = 0;
		
		//保存数据
		/*if(writeData())
		{
		printf("写文件出错!");
		return;
	}*/
		dispAnAccount(accountPosition);
		printf("销户成功!按任意键返回···\n");
		getch();
		return;
	}
	else
	{
		printf("用户取消销户,按任意键返回···\n");
		getch();
		return;
	}
}

运行结果为:
 
+===============================================+
 |                                              |
 |*                                            *|
 |*      欢迎使用银行储蓄综合应用平台          *|
 |*                                            *|
 |                                              |
+===============================================+


请输入用户名:admin

请输入用户密码:admin
***************************************************
 **                                              **
 **             请选择业务种类                   **
 **    1.存款 请按1          2.取款 请按2        **
 **    3.查询 请按3          4.开户 请按4        **
 **    5.销户 请按5          6.注销(退出)请按0   **
***************************************************
请输入你的选择:4

请输入储户户名:li

请输入用户密码:123

请输入存入金额:12000
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10001  |li        |123     |12000.00     |正常  |
+------------------------------------------------+
开户成功按任意键返回···
***************************************************
 **                                              **
 **             请选择业务种类                   **
 **    1.存款 请按1          2.取款 请按2        **
 **    3.查询 请按3          4.开户 请按4        **
 **    5.销户 请按5          6.注销(退出)请按0   **
***************************************************
请输入你的选择:4

请输入储户户名:taiping

请输入用户密码:456

请输入存入金额:10000
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10002  |taiping   |456     |10000.00     |正常  |
+------------------------------------------------+
开户成功按任意键返回···
***************************************************
 **                                              **
 **             请选择业务种类                   **
 **    1.存款 请按1          2.取款 请按2        **
 **    3.查询 请按3          4.开户 请按4        **
 **    5.销户 请按5          6.注销(退出)请按0   **
***************************************************
请输入你的选择:1

请输入要存款的账号:10001
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10001  |li        |123     |12000.00     |正常  |
+------------------------------------------------+

请输入存入金额:200
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10001  |li        |123     |12200.00     |正常  |
+------------------------------------------------+
存款成功,请按任意键返回···
***************************************************
 **                                              **
 **             请选择业务种类                   **
 **    1.存款 请按1          2.取款 请按2        **
 **    3.查询 请按3          4.开户 请按4        **
 **    5.销户 请按5          6.注销(退出)请按0   **
***************************************************
请输入你的选择:2

请输入要取款的账户:10002

请输入用户密码:456
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10002  |taiping   |456     |10000.00     |正常  |
+------------------------------------------------+

请输入取款金额:1000
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10002  |taiping   |456     |9000.00      |正常  |
+------------------------------------------------+
取款成功,请按任意键返回···
***************************************************
 **                                              **
 **             请选择业务种类                   **
 **    1.存款 请按1          2.取款 请按2        **
 **    3.查询 请按3          4.开户 请按4        **
 **    5.销户 请按5          6.注销(退出)请按0   **
***************************************************
请输入你的选择:5

请输入要销户的账户:10001

请输入用户密码:123
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10001  |li        |123     |12200.00     |正常  |
+------------------------------------------------+
确认账户10001销户吗?[1:销户|其他:不销户]请输入你的选择:1
+------------------------------------------------+
|账号   |户名      |密码    |余额         |状态  |
+-------+----------+--------+-------------+------+
|10001  |li        |123     |0.00         |销户  |
+------------------------------------------------+
销户成功!按任意键返回···




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值