基于C语言的金融信息系统(银行客户存取款系统)
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.部分截图
- 2.为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。 请写出问题定义并分析此系统的可行性。
- 基于LINUX的C语言实现学生信息管理系统项目
- c语言学生信息管理系统(基于文件、链表)
- c语言基于链表的学生信息管理系统(源代码)
- 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。 写出问题定义并分析系统的可行性。
- [源码和文档分享]基于C语言的歌曲信息管理系统设计与实现
- Linux环境下C语言实现简单的基于文件的学生信息管理系统
- c语言项目实践---设计简单银行登录、存取款、改密系统
- 2-2 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。请写出问题定义并分析此系统的可行性。
- 基于javaweb的客户信息管理系统搭建
- 2.为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员输入系统,如果是存款,系统纪录存款人姓名、住址、存款类型、存款日期、利率等信息,并打印出存款单给储户;如果是取款,系统计算利息并打印利息清单给储户。
- 银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能
- 基于链表的学生信息管理系统和基于MySQL的学生信息管理系统 -C语言
- 基于C语言的学生信息管理系统
- 基于C语言的学生信息管理系统
- linux下收集系统全面信息(基于sosreport以及supportconfig)
- 基于Struts和hibernate框架的学生信息管理系统
- 银行核心业务系统开发项目管理之道-金融项目我们应该关注那些东西
- C语言学生信息管理系统(结构体数组,文件)
- C语言实现一个学生信息管理系统