精华内容
下载资源
问答
  • 55C 语言 银行存取款管理系统得分:信电工程学院《高级语言程序设计课程设计》报告题目 : 银行存取款管理系统班级: 10 电信(1) 班学号: 20100504143 姓名: 夏宏杰指导教师 : 黄为勇2013年 1 月 15 日高级语言程序设计...

    5

    5

    C 语言 银行存取款管理系统

    得分:

    信电工程学院

    《高级语言程序设计课程设计》报告

    题目 : 银行存取款管理系统

    班级: 10 电信(1) 班

    学号: 20100504143 姓名: 夏宏杰

    指导教师 : 黄为勇

    2013年 1 月 15 日

    高级语言程序设计 课程设计报告

    目录

    程序目标及功能

    3 1.1 课题背景 3 1.2系统功能

    3 1.3设计要求

    3 1.3

    设计要求

    程序功能模块组成及流程图

    4 2.1

    系统功能模块

    4 2.2

    各模块流程图

    程序主要数据结构及函数列表

    程序中使用的数据结构

    --5 3.2 函数列表

    5 4 程序代码及运行结果

    6 5总结与体会

    6 5总结与体会

    12

    高级语言程序设计 课程设计报告

    程序目标及功能 : 银行存取款管理系统

    银行存取款管理系统简介

    银行存取款管理系统用于模拟银行里的客户信息管理和存取款信息管理。该系

    统能够输入客户信息,模拟存款与取款,按客户编号查询客户存款取款记录。

    系统结构及模块要求 1.2

    客户节点数至少 10 个。

    程序主界面包括程序名称及编程者学号、姓名、班级 ; 同时要求输入功能号

    码,选择进入功能模块程序。

    各模块功能 :

    创建客户信息表。动态创建客户信息表,同时输入客户信息。客户信息表

    用链表实现。链表节点个数不少于 10 个。

    追加客户。在客户信息表中新增一个节点,从键盘输入客户信息。

    存款。输入客户编号和存款金额,改变客户信息表中的余额信息,并将存

    款记录写入存取款文件。

    取款。输入客户编号和取款金额,改变客户信息表中的余额信息,并将存

    款记录写入存取款文件。

    输入客户编号,查询存取款信息。

    保存客户信息到磁盘文件。建立一个磁盘文件,把所建立的客户表信息写

    入文件。

    F. 从磁盘文件中读出客户信息。

    1.3 基本要求

    在客户文件中,每个客户是一条记录,包括客户编号、客户姓名、支取密 码、客户地址、客户电话、账户总金额 ;

    每个客户对应一个存取款文件。

    在存取款文件中,每次存取款是一条记录,包括编号、日期、类别、存取 数目、经办人。类别分为取款和存款两种。

    用函数分别实现动态链表的建立、动态链表输出等功能。

    界面友好,对程序加必要的注释 ;

    函数功能要划分好 ( 结构化程序设计 ); 函数要求使用指针作形参。

    要特别注意模拟存取款时,客户信息表和存取款文件中的信息要同时更 新。

    高级语言程序设计 课程设计报告

    程序功能模块组成及流程图 2.1 系统功能模块

    1. 创建客户信息表。

    追加客户。

    存款。

    取款。

    输入客户编号,查询存取款信息。 6. 保存客户信息到磁盘文件。 7. 从 磁盘文件中读出客户信息。 8. 退出系统。

    各模块流程图

    创建客户信息 表

    取款 存款 追加客户

    保存客户信

    息磁盘文件

    输入客户编从磁盘文件中

    号,查询存取读出客户信息

    款信息

    退出

    高级语言程序设计 课程设计报告

    程序主要数据结构及函数列表 3.1 用户信息数据结构

    typedef struct{

    num[10]; char

    char name[10];

    char secret[10];

    char address[10];

    char tele[10];

    int money;

    struct xhj_ *next;}xhj_,*xhj;用户记录数据结构 :

    typedef struct{

    char num[10];

    char day[10];

    char type[10];

    int s;

    char man[10];

    }jie;

    函数列表

    追加客户存款。1.creat(xhj B);//创建客户信息表。

    追加客户

    存款。

    3.print(xhj B);//打印客户信息表。 4.income(xhj B);//

    5.outcome(xhj B);// 取款。

    putout();// 输入客户编号,查询存取款信息。

    uersprotect(xhj B);// 保存客户信息到磁盘文件

    uersputout();// 从磁盘文件中读出客户信息。 高级语言程序设计 课程设计报告 4程序代码及运行结果

    /* Note:Your choice is C IDE */

    #include "stdio.h"

    "string.h" #include

    typedef struct{

    char num[10];

    char name[10];

    char secret[10];

    char address[10];

    char tele[10];

    int money;

    struct xhj *next;

    }xhj,*xia;

    typedef struct{

    char num[10];

    char day[10];

    char type[10];

    char Y[10];

    展开全文
  • 5 5 C 语言 银行存取款管理系统 得分: 信电工程学院 高级语言程序设计课程设计报告 题目 : 银行存取款管理系统 班级: 10 电信(1) 班 学号: 20100504143 姓名: 夏宏杰 指导教师 : 黄为勇 2013年 1 月 15 日 高级语言...
  • 1.前言 记录一下课程设计遇到的问题和解决办法,分享...​ 课程设计做一套仿银行的ATM的交易系统。没有图形界面,在Linux命令窗口进行交互操作。 2.环境配置 2.1运行环境 ​ 开发工具:Sublime ​ 虚拟机:VMware® Wo

    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.部分截图

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 编程思路:1 欢迎界面2 接收用户选择,并做相应处理3 管理员界面3.1 接收选择并做相应处理3.2 查看用户信息,修改用户信息,删除用户4 用户界面4.1 注册注册成功或者重新注册5.2 登陆5.2.1 5.2.2 取5.2.3 查看余额...

    编程思路:

    1 欢迎界面

    2 接收用户选择,并做相应处理

    3 管理员界面

    3.1 接收选择并做相应处理

    3.2 查看用户信息,修改用户信息,删除用户

    4 用户界面

    4.1 注册

    注册成功或者重新注册

    5.2 登陆

    5.2.1 存

    5.2.2 取

    5.2.3 查看余额

    5.2.4 转帐

    5 用户登陆:需要输入用户名,密码

    先用用户名和所有的已有用户匹配,如果匹配成功,就再检查密码。

    欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包

    代码

    // bank.cpp : 定义控制台应用程序的入口点。

    //

    #include "stdafx.h"

    #include

    struct User{

    int id;

    char username[20];

    char password[20];

    int money;

    };

    //用户信息数据库

    User users[20] = { 0 };

    //总用户个数

    int num = 0;

    void 显示所有用户信息(){

    printf("id\t用户名\t密码\t余额\n");

    for (int i = 0; i < num;i++)

    printf("%d\t%s\t%s\t%d\n",

    users[i].id, users[i].username, users[i].password, users[i].money);

    }

    //打印欢迎界面

    void 欢迎界面();

    //接收欢迎界面的用户选择,并做相应处理

    void 处理欢迎界面(int n);

    //管理员欢迎界面

    void 管理员欢迎界面();

    //用户欢迎界面

    void 用户欢迎界面();

    //处理管理员欢迎界面

    void 处理管理员欢迎界面(int n);

    bool 用户名存在(char* name){

    for (int i = 0; i < num; i++){

    if (strcmp(name, users[i].username) == 0)

    return true;

    }

    return false;

    }

    int _tmain(int argc, _TCHAR* argv[])

    {

    //1 欢迎界面

    欢迎界面();

    //2 接收用户选择,并做相应处理

    //3 管理员界面

    //3.1 接收选择并做相应处理

    //3.2 查看用户信息,修改用户信息,删除用户

    //4 用户界面

    //4.1 注册

    //注册成功或者重新注册

    //5.2 登陆

    //5.2.1 存

    //5.2.2 取

    //5.2.3 查看余额

    //5.2.4 转帐

    while (1);

    return 0;

    }

    //接收欢迎界面的用户选择,并做相应处理

    void 处理欢迎界面(int n){

    char name[20] = { 0 };

    char pass[20] = { 0 };

    printf("账户名:");

    scanf("%s", name);

    printf("密码:");

    scanf("%s", pass);

    if (n == 1){

    if (strcmp(name, "root" ) == 0 &&

    strcmp(pass, "123456") == 0 )

    管理员欢迎界面();

    else{

    printf("账号或密码错误,请重新输入!\n");

    处理欢迎界面(1);

    }

    }

    else if (n == 2){

    if (用户名存在(name)){

    }

    else{

    printf("用户名不存在!\n");

    处理欢迎界面(2);

    }

    }

    else

    欢迎界面();

    }

    //处理管理员欢迎界面

    void 处理管理员欢迎界面(int n){

    switch (n){

    case 1: 显示所有用户信息();break;

    case 2:break;

    case 3:break;

    case 4:break;

    }

    }

    //打印欢迎界面

    void 欢迎界面(){

    system("cls");

    printf("============BANK=============\n");

    printf("1 - 管理员\n");

    printf("2 - 用户\n");

    int n;//接收用户选择

    printf("请选择:");

    scanf("%d", &n);

    处理欢迎界面(n);

    }

    //管理员欢迎界面

    void 管理员欢迎界面(){

    system("cls");

    printf("$$$$$$$$$管理员$$$$$$$$\n");

    printf("1 - 查看用户\n");

    printf("2 - 修改用户\n");

    printf("3 - 删除用户\n");

    printf("4 - 退出\n");

    int n;//接收用户选择

    printf("请选择:");

    scanf("%d", &n);

    处理管理员欢迎界面(n);

    }

    //用户欢迎界面

    void 用户欢迎界面(){

    system("cls");

    printf("¥¥¥¥¥¥尊敬的%s欢迎您¥¥¥¥¥\n");

    }

    欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包

    展开全文
  • C语言程序设计课 程 设 计 报 告 题目模拟银行存取款业务 学生姓名 学 号 时 间 录 第1 章 绪论 1 1.1 设计目的 1 1.2 背景 1 1.3 开发环境 1 1.4 运行环境 1 第2 章 系统总体设计 2 2.1 系统设计的组成框图 2 2.2 ...
  • 1 C程序课程设计报告 题目 车票管理系统 院别 数学与计算机学院 班级 姓名 学号 指导教师 年 月 2 预习报告 一设计题目 银行存取款管理设计 二功能要求 能够添加和修改以及删除客户文件在客户文件中每个客 户是一条...
  • C语言数据结构,模拟实现ATM存取款系统 本项目使用模块化编程、使用数据结构:线性表,模拟实现ATM存取款系统银行ATM存取款系统 银行ATM存取款系统业务描述如下: 银行ATM存取款系统能为用户提供存款、取款、...

    C语言模块化编程、数据结构,模拟实现ATM存取款系统

    本项目使用模块化编程、使用数据结构:线性表,模拟实现ATM存取款系统。

    银行ATM存取款系统:

    银行ATM存取款系统能为用户提供存款、取款、查询、转账和修改密码的功能。为了模拟真实的ATM业务环境,本系统必须实现存款、取款、查询、转账、修改密码以及开户的功能。用户通过开户业务在本系统开立银行账户,之后可以通过该银行账户登陆ATM系统,在系统中实现存款、取款、查询账户信息、修改密码的操作。本系统各个业务有如下注意点:

    (1) 登陆系统
    用户登陆之前,必须在登陆界面输入其银行账户,通过其正确输入的银行账户登陆系统。

    (2) 开户业务
    要使用本系统必须首先执行开户业务开立新的银行账户,并且将此新开的银行存储于文件当中。同时,系统以身份证号码作为开户的充分条件,即一个身份证号码只能开立一次银行账户。

    (3) 存款业务
    客户登陆系统后,选择存款业务,即可以将输入的存款金额存入相应的账户。

    (4) 取款业务
    客户登陆系统后,选择取款业务,即可以将输入的取款金额从相应的银行账户取出,但是取款金额必须大于目前的账户余额。

    (5) 查询业务
    客户登陆系统后,可以选择查询业务,查询账户余额。

    (6) 转账业务
    客户登陆系统后,可以选择转账业务,进行转账。注意的是转账的目的账户必须是本系统已经存在的银行账户。

    (7) 修改密码
    客户登陆系统后,可以选择修改密码业务,进行密码修改。

    源代码:

    /*
     * user.h
     * 详情:用户模块头文件
     */
    #ifndef __USER_H__
    #define __USER_H__
    
    struct user;
    
    /*
     * 功能:	创建指向所有用户的指针,并将文件中的所有用户读出到指针所指向的堆内存中 
     * 
     * 参数:	无 
     * 
     * 返回值: 指向所有用户的指针
     */ 
    struct user *user_init();
    
    /*
     * 功能:	检查用户账号是否存在 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card[18]:要检查的用户账号 
     * 
     * 返回值: 0:该账号不存在
     *			1:该账号存在 
     */ 
    int user_check_id(struct user *user, char *id_card); 
    
    /*
     * 功能:	检查用户账号和密码是否存在(登录用) 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card[18]:要检查的用户账号 
     *			password:要检查的账户密码 
     * 
     * 返回值: 0:该账号和密码不存在
     *			1:该账号和密码存在 
     */ 
    int user_check_user(struct user *user, char *id_card, int password); 
    
    /*
     * 功能:	向用户存储结构中添加一个用户(注册用),同时文件保存 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card[18]:要添加的用户账号 
     *			password:要添加的账户密码 
     * 
     * 返回值: 无
     */ 
    void user_put(struct user *user, char *id_card, int password);
    
    /*
     * 功能:	修改指定账户的密码,同时文件保存 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要修改的用户账号 
     *			password:要修改的账户的密码 
     *			new_password:修改后的密码 
     * 
     * 返回值: 0:该账号和密码不存在,修改密码失败 
     *			1:该账号和密码存在,修改密码成功 
     */ 
    int change_password(struct user *user, char *id_card, int password, int new_password);
    
    /*
     * 功能:	向指定用户转账,同时文件保存  
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要转入的用户账号 
     *			money:要转入的金额 
     * 
     * 返回值: 0:该账号不存在,转账失败 
     *			1:该账号存在,转账成功 
     */ 
    int transfer_get_money(struct user *user, char *id_card, int money);
    
    /*
     * 功能:	从指定账户中取出金额,同时文件保存  
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要取钱的用户账号 
     *			password:要取钱的账户的密码 
     *			money:要取出的金额 
     * 
     * 返回值: 0:该账号不存在,取出失败 
     *			1:该账号存在,取出成功 
     */ 
    int out_money(struct user *user, char *id_card, int password, int money);
    
    /*
     * 功能:	查询指定账户的余额 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要查余的用户账号 
     *			password:要查余的账户的密码 
     * 
     * 返回值: != -1:该账户的余额 
     * 			-1:该账号不存在,查询失败 
     */ 
    int get_money(struct user *user, char *id_card, int password);
    
    /*
     * 功能:	向指定账户中存入金额,同时文件保存  
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要存钱的用户账号 
     *			password:要存钱的账户的密码 
     *			money:要存入的金额 
     * 
     * 返回值: 0:该账号不存在,存入失败 
     *			1:该账号存在,存入成功 
     */ 
    int put_money(struct user *user, char *id_card, int password, int money);
    
    /*
     * 功能:释放堆内存中的所有用户,并释放指针 
     * 
     * 参数:user:指向所有用户的指针
     * 
     * 返回值: 无 
     */ 
    void user_free(struct user *user);
    
    #endif  /*__USER_H__*/
    
    
    /*
     * user.c
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include "user.h"
    
    #define USER_INIT_SIZE 1 	/*存储结构初始值*/
    #define USER_INCR_SIZE 1	/*存储结构每次扩充值*/
    
    /*用户信息*/ 
    struct element {
    	char id_card[18];
    	int password;
    	int money;
    };
    
    /*结构头部*/ 
    struct user {
    	struct element *element;
    	int count;
    	int size;
    };
    
    /*
     * 功能:   将所有用户信息存入文件中(内部函数) 
     * 
     * 参数:   user:指向所有用户的指针 
     * 
     * 返回值: 无 
     */ 
    static void save_user(struct user *user) 
    {
    	FILE * fp;
    	struct element e;
    	
    	fp=fopen("myfile.dat","w");
    	fclose(fp);
    	
        if((fp=fopen("myfile.dat","ab+"))==NULL) return;
        int i;
        for(i=0; i<user->count; i++) {
        	e = user->element[i];
    		fwrite(&e,sizeof(struct element),1,fp);
    	}
        	
        fclose(fp);
        return;
    }
    
    /*
     * 功能:	向用户存储结构中添加一个用户(内部函数) 
     * 
     * 参数:	user:指向所有用户的指针 
     *			e:用户信息结构体 
     * 
     * 返回值: 无 
     */ 
    static void user_add(struct user *user, struct element e)
    {
    	if (user->count == user->size) {
            user->element = (struct element *)realloc(user->element, (user->size + USER_INCR_SIZE) * sizeof(struct element));
             
            if (user->element == NULL) {
                perror("user_add_element realloc error!");
                exit(1);
            }
             
            user->size += USER_INCR_SIZE;
        }
         
        user->element[user->count] = e;
        user->count++;
         
    	return;
    }
    
    /*
     * 功能:	创建指向所有用户的指针,并将文件中的所有用户读出到指针所指向的堆内存中 
     * 
     * 参数:	无 
     * 
     * 返回值: 指向所有用户的指针
     */ 
    struct user *user_init()
    {
    	FILE *fp;
    	struct element e;
    	struct user *user = NULL;
    
    	user = (struct user *)malloc(sizeof(struct user));
    	if (user == NULL) return NULL;
    	
    	user->element = NULL;
    	user->count = 0;
    	user->size = 0;
    	
    	user->element = (struct element *)malloc(sizeof(struct element) * USER_INIT_SIZE);
       	if (user->element == NULL) {
           	free(user);
           	return NULL;
       	}
       	user->size = USER_INIT_SIZE;
       	memset(user->element, 0, sizeof(struct element) * USER_INIT_SIZE);
       	
    	
    	
    	if((fp=(fopen("myfile.dat","ab+")))==NULL) return;
    	if(fgetc(fp) == EOF) {
    		fclose(fp);
    		return user;
    	}
    	rewind(fp);
    	while (1) {
    		fread(&e,sizeof(struct element),1,fp);
    		if(feof(fp)) break;
    		user_add(user, e);
    	}
    	fclose(fp);
       	return user;
    }
    
    
    /*
     * 功能:	检查用户账号是否存在 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card[18]:要检查的用户账号 
     * 
     * 返回值: 0:该账号不存在
     *			1:该账号存在 
     */ 
    int user_check_id(struct user *user, char id_card[18])
    {
    	int i;
    	struct element e;
    	for(i=0; i<user->count; i++) {
    		e = user->element[i];
    		if(strcmp(e.id_card, id_card) == 0) {
    			return 1;
    		}
    	}
    	
    	return 0;
    }
    
    /*
     * 功能:	检查用户账号和密码是否存在(登录用) 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card[18]:要检查的用户账号 
     *			password:要检查的账户密码 
     * 
     * 返回值: 0:该账号和密码不存在
     *			1:该账号和密码存在 
     */ 
    int user_check_user(struct user *user, char *id_card, int password)
    {
    	int i;
    	struct element e;
    	for(i=0; i<user->count; i++) {
    		e = user->element[i];
    		if(strcmp(e.id_card, id_card) == 0) {
    			if(e.password == password)
    				return 1;
    		}
    	}
    	
    	return 0;
    }
    
    /*
     * 功能:	向用户存储结构中添加一个用户(注册用),同时文件保存 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card[18]:要添加的用户账号 
     *			password:要添加的账户密码 
     * 
     * 返回值: 无
     */ 
    void user_put(struct user *user, char id_card[18], int password)
    {
    	struct element e;
    	strcpy(e.id_card, id_card);
    	e.password = password;
    	e.money = 0;
    	
    	user_add(user, e);
    	save_user(user);
    	return;
    }
    
    /*
     * 功能:	修改指定账户的密码,同时文件保存 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要修改的用户账号 
     *			password:要修改的账户的密码 
     *			new_password:修改后的密码 
     * 
     * 返回值: 0:该账号和密码不存在,修改密码失败 
     *			1:该账号和密码存在,修改密码成功 
     */ 
    int change_password(struct user *user, char *id_card, int password, int new_password)
    {
    	int i;
    	struct element e;
    	
    	for(i=0; i<user->count; i++) {
    		e = user->element[i];
    		if(strcmp(e.id_card, id_card) == 0 && e.password == password) {
    			user->element[i].password = new_password;
    			save_user(user);
    			return 1;
    		}
    	}
    	return 0;
    }
    
    /*
     * 功能:	向指定用户转账,同时文件保存  
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要转入的用户账号 
     *			money:要转入的金额 
     * 
     * 返回值: 0:该账号不存在,转账失败 
     *			1:该账号存在,转账成功 
     */ 
    int transfer_get_money(struct user *user, char *id_card, int money)
    {
    	int i;
    	struct element e;
    	
    	for(i=0; i<user->count; i++) {
    		e = user->element[i];
    		if(strcmp(e.id_card, id_card) == 0) {
    			user->element[i].money += money;
    			save_user(user);
    			return 1;
    		}
    	}
    	return 0;
    }
    
    /*
     * 功能:	从指定账户中取出金额,同时文件保存  
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要取钱的用户账号 
     *			password:要取钱的账户的密码 
     *			money:要取出的金额 
     * 
     * 返回值: 0:该账号不存在,取出失败 
     *			1:该账号存在,取出成功 
     */ 
    int out_money(struct user *user, char *id_card, int password, int money)
    {
    	int i;
    	struct element e;
    	
    	for(i=0; i<user->count; i++) {
    		e = user->element[i];
    		if(strcmp(e.id_card, id_card) == 0) {
    			if (e.password == password)
    				if(e.money >= money) {
    					user->element[i].money -= money;
    					save_user(user);
    					return 1;
    				}
    				
    		}
    	}
    	return 0;
    }
    
    /*
     * 功能:	查询指定账户的余额 
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要查余的用户账号 
     *			password:要查余的账户的密码 
     * 
     * 返回值: != -1:该账户的余额 
     * 			-1:该账号不存在,查询失败 
     */ 
    int get_money(struct user *user, char *id_card, int password)
    {
    	int i;
    	struct element e;
    	
    	for(i=0; i<user->count; i++) {
    		e = user->element[i];
    		if(strcmp(e.id_card, id_card) == 0) {
    			if(e.password == password)
    				return e.money;
    			else
    				return -1;
    		}
    	}
    }
    
    /*
     * 功能:	向指定账户中存入金额,同时文件保存  
     * 
     * 参数:	user:指向所有用户的指针
     *			id_card:要存钱的用户账号 
     *			password:要存钱的账户的密码 
     *			money:要存入的金额 
     * 
     * 返回值: 0:该账号不存在,存入失败 
     *			1:该账号存在,存入成功 
     */ 
    int put_money(struct user *user, char *id_card, int password, int money)
    {
    	int i;
    	struct element e;
    	
    	for(i=0; i<user->count; i++) {
    		e = user->element[i];
    		if(strcmp(e.id_card, id_card) == 0) {
    			if(e.password == password) {
    				user->element[i].money += money;
    				save_user(user);
    				return 1;
    			}
    		}
    	}
    	return 0;
    }
    
    /*
     * 功能:释放堆内存中的所有用户,并释放指针 
     * 
     * 参数:user:指向所有用户的指针
     * 
     * 返回值: 无 
     */ 
    void user_free(struct user *user)
    {
    	free(user->element);
    	free(user);
    	
    	return;
    }
    
    
    /*
     * main.c
     */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include "user.h" 
    
    struct user *user = NULL;     /*所有用户*/ 
    char load_id_card[18];        /*当前登录的账户*/
    int load_password;            /*当前登录账户的密码*/
    
    /*身份证号输入检查功能函数*/
    void input_id_card(char *idCard)
    {
    	while (1) {
    		printf("请输入您的身份证号码:");
    		scanf("%s",idCard);
    		
    		int i = 0;
    		while(idCard[i++]!='\0'); 
    		
    		if(i == 19) {
    			printf("%s\n", idCard);
    			break;
    		}
    		else {
    			printf("您输入的身份证号码有误,请您重新输入!\n");
    		}
    	}
    	return;
    }
    
    /*主界面*/ 
    int main_ui()
    {
    	int in;
    	
    	while(1) {
    		system("cls");
    		printf("----------------------------\n");
    		printf("  1.登录   2.注册   3.退出  \n");
    		printf("----------------------------\n");
    		printf("请输入对应操作前的数字:");
    		
    		scanf("%d",&in);
    	
    		if(in!=1 && in!=2 && in!=3) {
    			printf("您的操作有误,请重新输入!\n");
    			system("PAUSE");
    		}
    		else {
    			return in;
    		}
    	}
    }
    
    /*登录成功后显示界面*/
    int sign_in_ui() {
    	int in;
    	while(1) {
    		system("cls");
    		printf("---------------------------------------------\n");
    		printf("  1.查询 2.存款 3.取款 4.转帐 5.改密 6.退出  \n");
    		printf("---------------------------------------------\n");
    		printf("请输入对应操作前的数字:");
    		
    		scanf("%d", &in); 
    		if(in!=1 && in!=2 && in!=3 && in!=4 && in!=5 && in!=6) {
    			printf("您的操作有误,请重新输入!\n");
    			system("PAUSE");
    		}
    		else
    			return in;
    	} 
    }
    
    /*查余*/
    void inquire()
    {
    	printf("您的余额为:%d\n", get_money(user, load_id_card, load_password));
    	system("PAUSE"); 
    }
    
    /*存款*/ 
    void deposit()
    {
    	int money;
    	printf("请输入存入金额:");
    	scanf("%d", &money);
    	if(put_money(user, load_id_card, load_password, money)) 
    		printf("存入成功!\n");
    	else
    		printf("存入失败!\n");
    	
    	system("PAUSE");
    	return; 
    }
    
    /*取款 */
    void withdrawal()
    {
    	int money;
    	printf("请输入取出金额:");
    	scanf("%d", &money);
    	if(out_money(user, load_id_card, load_password, money))
    		printf("取出成功!\n");
    	else
    		printf("余额不足!\n");
    		
    	system("PAUSE");
    	return; 
    } 
    
    /*转账*/
    void transfer_accounts()
    {
    	int money;
    	char id[18];
    	printf("请输入转入账户的身份证:");
    	scanf("%s", id);
    	
    	int i = 0;
    	while(id[i]!='\0') {
    		i++;
    	}
    	if(i == 18) {
    		if(user_check_id(user,id)) {
    			printf("请输入转账金额:");
    			scanf("%d",&money);
    			if(out_money(user, load_id_card, load_password, money)) {
    				if (transfer_get_money(user, id, money))
    					printf("转入成功!\n");
    				else
    					printf("转入失败!\n");
    			}
    			else
    				printf("余额不足!\n");
    		}
    		else
    			printf("您输入的转账账户不存在!\n");
    	}
    	else 
    		printf("您输入的转账账户位数有误!\n");
    	
    	system("PAUSE");
    	return;
    }
    
    /*改密*/ 
    void ch_password()
    {
    	int password;
    	printf("请输入新密码:");
    	scanf("%d",&password);
    	if(change_password(user, load_id_card, load_password, password)) {
    		printf("修改成功!\n");
    		load_password = password;
    	}
    	else 
    		printf("修改失败!\n");
    		
    	system("PAUSE");
    	return; 
    }
    
    /*登录成功后的操作*/ 
    void sign_successful()
    {
    	while(1) {
    		switch(sign_in_ui()) {
    			case 1:	inquire(); break;
    			case 2:	deposit(); break;
    			case 3:	withdrawal(); break; 
    			case 4:	transfer_accounts(); break;
    			case 5:	ch_password(); break;
    			case 6:	return;
    			default : break;		
    		}
    	}
    	
    }
    
    /*退出*/
    void my_exit()
    {
    	exit(0);
    	return;
    } 
    
    /*登录*/
    void sign_in()
    {
    	char id[18];
    	int password; 
    
    	input_id_card(id);
    	if(user_check_id(user,id)) {
    		printf("请输入密码:");
    		scanf("%d",&password);
    		if(user_check_user(user, id, password)) {
    			printf("登录成功\n");
    			system("PAUSE");
    			strcpy(load_id_card,id);
    			load_password = password;
    			sign_successful();
    		}else {
    			printf("密码错误!\n");
    			system("PAUSE");
    		}
    	}
    	else {
    		printf("您输入的账户不存在!\n");
    		system("PAUSE");
    	} 
    		
    	return;
    }
    
    /*注册*/ 
    void sign_up()
    {   
    	char id[18];
    	int password;
    	
    	input_id_card(id);
    	
    	if(user_check_id(user,id))
    		printf("您输入的账户已存在!\n");
    	else {
    		printf("请输入密码:");
    		scanf("%d",&password);
    		user_put(user, id, password);
    		printf("注册成功!\n");
    	} 
    	
    	system("PAUSE");
    	return; 
    }
    
    /*主函数*/
    int main(int argc, char *argv[]) {
    	while(1) {
    		user = user_init();
    		int state = main_ui();
    		switch(state) {
    			case 1: sign_in();break;
    			case 2: sign_up();break;
    			case 3: my_exit();break;
    			default:break;
    		}
    		user_free(user);
    	}
    	
    	system("PAUSE");
    	return 0;
    }
    
    
    展开全文
  • C语言 银行存储系统

    2012-12-09 09:55:31
    C语言编写的银行系统,能实现正常的注册新用户、登录、存取款、转账、查询、退出等功能
  • 程序设计基础 (C语言 ) 课程设计说明书 20 20 学年第 _1_学期 题目名称银行存取款管理系统 姓名 学号 专业 班级 指导教师 提交日期 湖南应用技术学院课程设计任务书 课程名称 程序设计 C 语言课程设计 课程代码 设计...
  • 长 沙 学 院 程序设计基础实训 II 实训报告 实 训 题 目 ATM 存取款系统的改进与完善 系 部 计算机科学与技术系 专 业/年级 软件工程专业 2011 级 学 生姓名 李安平 班 级 1 班 学号 22 指导教师姓名 职称 最终评定...
  • 程序设计基础 (C语言 ) 课程设计说明书 20 20 学年第 _1_学期 题目名称银行存取款管理系统 姓名 学号 专业 班级 指导教师 提交日期 湖南应用技术学院课程设计任务书 课程名称 程序设计 C 语言课程设计 课程代码 设计...
  • 2. 菜单:含有(1)查询余额、(2)取款、(3)存款、(4)改密、(5)退卡基关于要使用的文件如何布局: 1.每条独立的信息单独一行 2.在密码、金额一行,右边需要许多空格(因为用的是“r+”打开模式,用空格可以...
  • 求如何用c语言做一个银行账户信息管理系统 要求 具有查询账户余额的功能 具有简单的存取款功能 能够实现账户的插入,删除,和修改 具有账户信息的保存功能
  • 1.问题描述 用c语言编写一个简化的银行自动存款...一个为DrawMoney.txt文档文件存放银行存有的金额,一个为PassWord.txt用来保存密码,放在c代码保存文件名下面,如图: DrawMoney.txt文件里面设定任意大小的整数...
  • C语言模拟的银行ATM机系统!利用文件存储!每个用户都会被到user.txt文本中,另外系统生成4个文件(存款记录、取款记录、转账记录、余额)!实现、取、转、查功能!对密码输入次数进行了限制,错误三次就退出程序...
  • C语言模拟银行ATM自动取款机全过程的源代码,利用TXT存储用户信息,每个用户都会被到user.txt文本中,另外系统生成4个文件(存款记录、取款记录、转账记录、余额)!实现、娶转、查功能!对密码输入次数进行了...
  • 1.问题描述 用c语言编写一个简化的银行自动存款系统;...一个为DrawMoney.txt文档文件存放银行存有的金额,一个为PassWord.txt用来保存密码,放在c代码保存文件名下面,如图: 2.程序代码 #include &l...
  • C语言银行业务

    2018-07-03 21:35:53
    b)工作流程:银行工作人员输入账号后,系统根据用户信息自动输出姓名、身份证、银行工作人员输入发生额(正数代表,负数代表取,取钱时应检查用户是否透支,如透支给于提示。)存取标记根据发生额自动生成(1表示...
  • 任务:模拟银行ATM机,要求界面友好 首先我们对这个问题进行分析: 模拟ATM机,实现以下功能:1.查询余额 2.存款 3.取款 0.退出(要求整整取) 要求界面友好。 系统设计: 模块分化,确定各模块的功能及...
  • 银行账户信息管理系统 功能要求: <p>1、具有查询帐户余额的功能 <p>2、具有简单的存取款功能 <p>3、能够实现帐户的插入、删除和修改 <p>4、具有帐户信息的保存功能</p>
  • C语言模拟的银行ATM机系统!利用文件存储!每个用户都会被到user.txt文本中,另外系统生成4个文件(存款记录、取款记录、转账记录、余额)!实现、取、转、查功能!对密码输入次数进行了限制,错误三次就退出程序...
  • 银行管理系统主要有五个模块组成: 查询账户信息 存钱 取款 转账 退出系统 测试文件:(首先在cpp文件所在目录下添加这个文件,运行程序会自动添加文件,但是需要输入这些数据) 代码: #include<stdio.h> ...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #define MAX_MONEY 10000//一次性最大存储金额#define COUNT 3//输入密码次数上限#define PASSWORD 123//... // 表示存取款金额int pwd; // 表示输入的密码in...
  • 银行账户管理系统

    2015-05-11 09:19:20
    银行账户管理系统,实现基本的银行账户的存取款操作。基于C语言程序基础上操作,三级界面,可以直接运行。

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

c语言银行存取款系统

c语言 订阅