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

基于C语言的金融信息系统(银行客户存取款系统)

2020-06-01 04:56 330 查看

1.前言

记录一下课程设计遇到的问题和解决办法,分享一下。由于做这个课程设计中,事情很多,还存在很多bug没来得及改,只测试了成功的情况,部分失败的情况也测试过,交互时输入错误信息有很多bug还没有改,因为很久没有用过C语言,用起来很生疏,并且代码格式不太规范,有很多重叠函数,没有优化代码。毕竟也是一次经验,留作保存一下。

​ 课程设计做一套仿银行的ATM的交易系统。没有图形界面,在Linux命令窗口进行交互操作。
源代码已经上传,点击此处即可到达。

2.环境配置

2.1运行环境

​ 开发工具:Sublime

​ 虚拟机:VMware® Workstation 15 Pro

​ Ubuntu:18.04

2.2虚拟机上网

2.3共享文件夹设置

​ 之前的课程设计是用的11版本的Ubuntu,轻巧,不会导致电脑运行内存爆满,但设置共享文件夹有点麻烦,需要用到网络共享,具体方法忘记如何操作了。Ubuntu18版本可以直接通过虚拟机设置共享文件夹,很方便,在Windows下写程序,保存到共享目录,Linux运行此文件即可。

具体操作步骤:打开虚拟机菜单->管理->虚拟机设置,弹出界面后选择选项界面—>点击共享文件夹,右上角中的文件夹共享选择总是启用—>点击添加,选择Windows下面的文件夹为共享文件夹即可。

​ 共享文件夹会自动保存在Ubuntu项目的/mnt/hgfs/目录下面,我设置的共享文件名为share,所以保存的文件都在/mnt/hgfs/share/下面。

2.4数据库配置

用到的数据库是sqlite3

2.4.1安装数据库

sudo apt install sqlite3
sudo apt install libsqlite3-dev

当然这种安装方法需要虚拟机可以联网,如果虚拟机不能使用网络,可以去sqlite官网下载安装包,直接安装即可。

2.4.2测试是否安装成功

sqlite3 -version

输出版本信息则为安装成功

2.4.3创建数据库

​ 当相应路径下面运行如下语句:

sqlite3 数据库名  // 创建数据库
例:
sqlite3 ./test.db

// 创建关系表,所有的SQL语句必须以分号结尾
CREATE TABLE 表名(列名 数据类型 约束条件, ...);
例:
create table t_test(id integer primary key, name text);

.table 查看数据库中的所有表名
.schema 查看表的创建语句(查看表的结构)
.quit 	退出sqlite3的命令模式

其他的命令和MySQL语句一样

3. C语言访问sqlite3数据库

3.1. 用到的接口

sqlite3_open()//创建连接对象,打开一个新的或者已经存在的数据库连接,如果数据库存在,直接打开;如果不存在,则先创建在打开。
sqlite3_close()//销毁连接对象,断开连接
sqlite3_exec()//这是一个包装函数,用于执行字符串形式的SQL语句
sqlite3_exec函数说明:
sqlite3_exec(sqlite3*,const char *sql,int,
int(*callback)(void*,int,char**,char**),
void *,
char **errmsg
);
函数说明(数据库连接对象,表示要操作的数据库;
需要执行的SQL语句;
回调函数,即一个函数指针,必须是查询语句并且查到至少一条记录才会运行;
回调函数的第一个参数;
错误信息写在这里)

注:callback只有查询语句才需要,其它的SQL语句不需要此参数,写NULL即可
回调函数用来画select语句查询到的结果集,这个结果集可以理解为一个只读的关系表,由行和列组成。在程序中我们预测获取其中一行数据(获一条记录)。
获取到的一条记录包括他的表头与数据,所以回调函数的格式如下:
int callback(void *arg, int size, char **header);
参数说明:
(1).arg有外部传递就来的,即exec函数的第四个参数,通过不需要,可以不传递参数,
(2).size 表示一条记录有几个字段,从0开始计算
(3).values 字符串数组,表示这一行的值
(4).header 字符串数组,表示结果的表头
返回:
返回0表示正常,则继续局哦亲下一条记录
如果非0,则直接结束。

当不需要回调函数时,当然也不需要给这个回调函数提供参数了,所以exec函数的第四个参数也写NULL即可

3.2. 连接数据库

// 连接数据库
#include <stdio.h>
#include <sqlite3.h>

int main()
{
//创建一个连接对象
sqlite3 *db;

// 打卡数据库连接
int result = sqlite3_open("./info.db",&db);
// 如果打开失败
if (result != SQLITE_OK)
{
// 通过sqlite3_errmsg函数获取错误信息,并打印到标准错误
fprintf(stderr, "open database error%s\n", sqlite3_errmsg(db));
// 失败关闭连接
sqlite3_close(db);
// 从main函数返回,表示程序结束
return 1;
}
printf("open database success\n");

return 0;
}

3.3. Ubuntu终端命令

3.3.1 单个文件编译执行

虚拟机进入到共享文件下的C文件所在目录,然后运行

gcc c文件.c -o 输出文件名 -lsqlite3
./输出文件名
因为要操作数据库,使用在编译的时候需要在最后加上-lsqlite3
3.3.2 工程文件编译执行
|--工程管理用make命令:
|--make是一个项目管理工具,它能帮助我们自动检查文件的更新情况、自动进行编译。
​	|--make工具需要一个专内的配置文件,make 工作的时自动读取该配置文件中的信息,这个配置文件称为Makefile。
​	|--makefile可以很复杂,也可以很简单, 但核心规则是一样的 :
​		|--需要生成的目标文件
​		|--生成目标所需要的依赖文件
​		|--生成目标文件的编译规则

|--这三个核心内容的组织形式如下:
目标文件名:依赖文件列表
<Tab>编译指令

|--说明:
makefile中的目标一般可以分为两种:
真正的目标:指需要生成一个文件的这种目标,如可执行文件
make工具自动执行第一个真正的目标
伪目标:指不需要生成具体的文件,只是执行某种操作
伪目标需要在make时指定

例如:我们可以在工程的目录下新建一个makefile文件,内容为

bank: 0510_BankProject.c CustomerManagement.c TradeManagement.c
# 	$^代表上面所有的c文件,$@代表要生成的编译文件,也就是上面一行的bank
gcc $^ -o $@ -lsqlite3

clean:
rm -rf bank
#通过make文件就可以让Linux帮我们编译多个文件,省的我们在调试的时候需要多次编译或者很长的命令
#在当前工程目录下执行make目录就是生产输出文件,直接输出文件就可以运行

4. 系统顶层设计

以下是本套项目实现的功能点,基本上实现了,一些还没有完善,存在bug。

|--银行客户存取款系统概要说明
|--1.客户信息管理
|--开户
|--输入: 姓名、身份证、电话...
|--输出: 卡号、密码、开户日期、开户银行、余额...
|--销户
|--输入: 卡号、密码
|--输出: 姓名、余额...
|--查询用户信息
|--输入: 卡号、密码
|--输出: 用户信息...

|--2.交易信息管理
|--存款
|--输入:卡号、密码、金额
|--输出:提示
|--取款
|--转账
|--查询余额
|--查询交易记录
...

|--3.退出

5.系统实现

5.1数据库创建

在代码中会自动创建,所以不需要我们单独操作,以下是创建两张表,分别为用户信息表和银行卡信息表。

create table if not exists user(id varchar(18) primary key,name text not null,tel text not null, addr text);

// 创建外键时先在数据库中运行pragma foreign_keys=on;

CREATE TABLE if not exists bankcard(id integer primary key,cardpass integer not null,opendate date text default (date('now')),bankname text,balance real default 0, uid varchar(18) not null,foreign key(uid) references user(id));

|--客户信息表:身份证号码(PK) 姓名 电话 地址...
|--银行卡信息表: 卡号(PK) 密码 开户日期 开户行 余额 身份证号码(FK)...

6.工程目录详解

|--ATM
|--SQlFiles 			数据库bank.db所在文件夹
|--CustomerControl.c  用户信息模块
|--CustomerControl.h	用户信息头文件
|--TradeControl.c		交易信息模块
|--TradeControl.h		交易信息头文件
|--data_process.c		数据库操作模块
|--data_process.h		数据库操作头文件
|--ui.c				界面模块
|--ui.h				界面头文件
|--main.c				主界面,主入口
|--Makefile.makefile	编译上面所有.c文件
|--bank_sys			编译后的二进制文件,用于运行系统

7.部分截图






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