银行管理系统

Linux系统项目之银行管理系统

系统简介

在之前写的博客里面提到了上一个项目简易聊天室的问题,在这个银行管理系统上面得到了解决,通过服务器的链表将用户输入的账号密码储存起来,然后在服务器不退出的情况下,实现用户的查询、存钱、取钱、转账、改密码、销户等功能,并将其交易记录写入了Mysql的数据库中。服务器即使退出,丢失账号密码但是交易记录还在。其实账号密码也是应当存储在数据库中,这样账户密码也不会丢失,但是为了练习链表将其写在了链表中。
下面写的是安装MySQL的数据库的命令。

apt-get install mysql-server //需要自己指定密码
apt-get install mysql-client
apt-get install libmysqlclient-dev//支持C语言API

客户端

客户端我通过设置termios结构体中的c_lflag设置来关闭回显,保证密码安全,通过查找资料封装了一个函数来管理是否回显。

/*************************************************************************
  > 文件路径: client.c
  > 作者: Moliam
  > 邮箱: 2515826079@qq.com 
  > 文件创建时间: 2019年03月20日 星期三 14时47分52秒
 ************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#include <termios.h>
#include <errno.h>//由于我修改了vim的配置,所以会出现没有必要的头文件

#define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)//回显相关宏定义
#define PORT 9709

int sockfd;
int text_fd;
//char *IP = "192.168.1.190";
char *IP = "192.168.15.2";//服务器IP地址

typedef struct sockaddr AD;
char acc[30]={0};//存放账户
char cmd_buf[30]={0};//存放命令
char dat_buf[100]={0};//存放数据

int set_disp_mode(int fd,int option);//是否回显函数
int getpasswd(char* passwd, int size);//获取终端输入函数
void err(const char *buf,int line);//出错函数
void Init(void);//初始化客户端
void Service(void);//匹配帐号密码
void menu(void);//菜单
void enquiry(void);//查询余额
void save(void);//存钱
void withdraw(void);//取钱
void modpw(void);//改密
void trans(void);//转账
void logout(void);//注销
void __exit(void);

int main(void)
{
	Init();
	Service();
	menu();//
	return 0;
}
void menu(void)
{
	//0查询 1存款 2取款 3转账 4改密 5销户 6退出
	int opt=0;
	while(1)
	{
		printf("*********************************\n");
		printf("              按0查询            \n");
		printf("              按1存款            \n");
		printf("              按2取款            \n");
		printf("              按3转账            \n");
		printf("              按4改密            \n");
		printf("              按5销户            \n");
		printf("              按6退出            \n");
		printf("*********************************\n");
repeat:		printf("请输入你需要进行的操作:\n");
		scanf("%d",&opt);
		if (opt > 6 && opt < 0)
		{
			printf("输入错误,请重新输入!\n");
			goto repeat;
		}
		switch(opt)
		{
			case 0:enquiry();break;
			case 1:save();break;
			case 2:withdraw();break;
			case 3:trans();break;
			case 4:modpw();break;
			case 5:logout();break;
			case 6:__exit();return ;
		}
	}
}
void enquiry(void)
{
	sprintf(cmd_buf,"0");
	text_fd = send(sockfd,cmd_buf,strlen(cmd_buf),0);//发送命令
	if(text_fd == -1)
		err("send",__LINE__);
	text_fd = recv(sockfd,dat_buf,sizeof(dat_buf),0);//接受余额
	if(text_fd == -1)
		err("recv",__LINE__);
	printf("当前余额为%s\n",dat_buf);
	memset(dat_buf,0,sizeof(dat_buf));
}
void save(void)
{
	double money = 0;
	sprintf(cmd_buf,"1");
	text_fd = send(sockfd,cmd_buf,strlen(cmd_buf),0);//发送命令
	if(text_fd == -1)
		err("send",__LINE__);
	printf("请输入你要存的数目:\n");
	scanf("%lf",&money);
	sprintf(dat_buf,"%.2f",money);
	text_fd = send(sockfd,dat_buf,strlen(dat_buf),0);//发送数目
	if(text_fd == -1)
		err("send",__LINE__);
	memset(dat_buf,0,sizeof(dat_buf));
	text_fd = recv(sockfd,dat_buf,sizeof(dat_buf),0);//接收是否成功
	if(text_fd == -1)
		err("recv",__LINE__);
	if(strcmp(dat_buf,"correct") != 0)
	{
		printf("aha,failure!\n");
	}
	memset(dat_buf,0,sizeof(dat_buf));
	enquiry();
}
void withdraw(void)
{
	float money = 0;
	sprintf(cmd_buf,"2");
	text_fd = send(sockfd,cmd_buf,strlen(cmd_buf),0);//发送命令
	if(text_fd == -1)
		err("send",__LINE__);
	printf("请输入你要提现的数目:\n");
	scanf("%f",&money);
	sprintf(dat_buf,"%.2f",mon
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值