描述:模拟银行活期储蓄的流程,要求实现储户开户、销户、存入、支出等活动。主要要求是快速地找到储户的账户,实现存款、取款,还要能比较简单、迅速地实现插入和删除,以实现开户和销户的需要

主要功能: (1) 实现储户开户。开户需要填写登记卡,记录相关信息,设置开户余额0。 实现储户销户。 向某帐户存款。 从某帐户取款。 排序显示所有账户信息,根据帐号进行排序。 查询某帐户余额。 查询某帐户交易记录。 所有账户及其信息存储至文件,程序运行时从从文件中读入

#include <iostream>
#include <fstream>
#include <string.h>
#include <time.h>
#include <cstring>
#include <stdlib.h>

using namespace std;

typedef struct node_log
{
string DataTime;              //交易时间
char W_D;                     //用于标记交易类型  W为存,D为取 
float balance;                //余额 
struct node_log *next;
} node_log,*p_mode_log;

typedef struct node_account
{
string ID;                                        //用户卡号 
                                 
string Name;                                  //用户姓名
float balance; 
string mima;                              //账户余额
struct node_log *first_node_log;               //第一个操作的节点 
struct node_account *next;
int num;
} node_account,*p_node_account;

p_node_account L;

string get_time()                     //得到操作时间提供给查询记录使用 
{
    time_t t = time(0);
    char tmp[64];
    strftime(tmp,sizeof(tmp),"%Y/%m/%d/%X",localtime(&t));
    return tmp;
}

void AddUser()                  //添加用户 
{
//    int ID.length;
    string ID; 
    string mima;
    if(L==NULL)                  //判断L是否为空,为空则添加新用户数据 
    {
        L=new node_account;
        L->next=NULL;             
    }
    p_node_account Lp = new node_account; 
    cout<<"请输入卡号(需为小于等于长度为16的一串数字):"<<endl; 
    cin>>Lp->ID;
    cout<<"请输入卡号(需为小于等于长度为16的一串数字):"<<endl;
    char s[20];
    cin>>s; 
    int len;
    len = strlen(s);
    if(len <= 16)
    {
        cout<<"卡号格式正确"<<endl;
    }
    else 
    {
        cout<<"卡号格式错误,请重新输入卡号"<<endl;    
    }
        cout<<"请输入密码(需为长度为6的一串数字):"<<endl;
        cin>>Lp->mima;
        cout<<"请输入密码(需为长度为6的一串数字):"<<endl;
        int len1; 
        char a[20];
        cin>>a; 
        len1 = strlen(a);
        if( len1 == 6)
        {
            cout<<"密码格式正确"<<endl; 
        }
        else 
        {
            cout<<"密码格式错误,请重新输入密码"<<endl;
        }
        cout<<"请输入姓名:"<<endl; 
        cin>>Lp->Name;
        Lp->balance=0;        //设置开户金额为0 
        Lp->num=0;
        Lp->first_node_log=new node_log;
        Lp->next=L->next;
        L->next = Lp;
        cout.setf(ios::left); 
        cout<<"添加成功"<<endl; 
        cout.width(32);
        cout<<"卡号 " <<s<<' '<<endl;
        cout.width(32);       
        cout<<"姓名 " <<Lp->Name<<' '<<endl;
        cout.width(32);
        cout<<"余额 " <<Lp->balance<<' '<<endl; 
    } 
void DeleteUser()            /* 删除用户信息,先从用户输入的得到卡号,判断存储的用户信息中是否有该条信息,
                             然后进行判断是否有余额,没有就可以进行注销,有则无法注销 */
{
    string ID; 
    char s[20];
    string mima;               
    if(L==NULL)
    {
        L=new node_account;
        L->next=NULL;
    }
    p_node_account Lp=L;
    cout << "要注销的卡号:";

cin >> ID;
    cout << "要注销的卡的密码:";
    cin >> mima;

while(Lp)
    {
        if (Lp->next->ID == ID)
        {     if(Lp->next->mima == mima)
            {
                 if(Lp->balance==0)
                {
                    Lp->next = Lp->next->next;
                    cout << "注销成功!";
                }
                else
                {
                    cout<<"余额不为零"<<endl;
                }
                return;
            }
            else
            {
                cout<<"密码错误,请重新输入"<<endl;
            }
           return; 
        }
        else {
            cout<<"账号错误,请重新输入"<<endl;
            return; 
        }
        Lp=Lp->next;
    }

}
void Get_money()         //取钱操作 
{
    string ID; 
    string mima;           
    if(L==NULL)
    {
        L=new node_account;
        L->next=NULL;
    }
    p_node_account Lp=L->next;
    cout << "卡号:";

cin >> ID;
//    int i = strlen(ID);
    cout << "密码:";
    cin >> mima;

while(Lp)
    {

if (Lp->ID == ID)       //判断是否有匹配的ID 
        {
            if(Lp->mima == mima)
                {    
                    float money;
                    cout << "取款金额:";
                    cin>>money;

if(Lp->balance>=money)      //判断是否余额是否足够支撑取钱 
                {
                    Lp->balance-=money;
                    Lp->num+=1;
                    p_mode_log p=new node_log;
                    p->W_D='D';
                    p->DataTime=get_time();
                    p->balance=money;
                    p->next=Lp->first_node_log->next;
                    Lp->first_node_log->next=p;
                    cout<<"已成功取款"<<endl; 
                }
                else
                   {
                        cout<<"余额不足"<<endl;
                }

return;
                }
                else
                {
                    cout<<"密码错误,请重新输入"<<endl;
                    return; 
                    
                }
         
        }
        else {
            cout<<"账号错误,请重新输入"<<endl;
            return; 
        }
        Lp=Lp->next;
    }
}

void Store_money()              //存钱操作 
{
      string ID; 
    string mima;
    if(L==NULL)
    {
        L=new node_account;
        L->next=NULL;
    }
    p_node_account Lp=L->next;
    cout << "卡号:";
    cin >> ID;
    cout << "密码:";
    cin >> mima;

while(Lp)                    //不为空 
    {

if (Lp->ID == ID)
        {
            if(Lp->mima == mima)
                {
                    float money;
                    cout << "存款金额:";
                    cin>>money;
                    Lp->balance+=money;
                    Lp->num+=1;
                    p_mode_log p=new node_log;
                    p->W_D='W';
                    p->DataTime=get_time();
                    p->balance=money;
                    p->next=Lp->first_node_log->next;
                    Lp->first_node_log->next=p;
                    cout<<"已成功存款"<<endl; 
                    return;    
                }
                else
                {
                    cout<<"密码错误,请重新输入"<<endl;
                    return; 
                    
                }
        }
        else {
            cout<<"账号错误,请重新输入"<<endl;
            return; 
        }
        Lp=Lp->next;
    }
}
void Traderecord()
{
    string ID; 
    string mima;
    if(L==NULL)
    {
        L=new node_account;
        L->next=NULL;
    }
    p_node_account Lp=L->next;
    cout << "卡号:";

cin >> ID;
    cout << "密码:";
    
    cin >> mima;
    while(Lp)
    {
        if (Lp->ID == ID)
        {    if(Lp->mima == mima)
                {
                        cout<<"卡号      " <<Lp->ID<<' '<<endl;       
                        cout<<"姓名      " <<Lp->Name<<' '<<endl;
                        cout<<"余额      " <<Lp->balance<<' '<<endl;
    
                        p_mode_log p=Lp->first_node_log->next;
    
                        cout.setf(ios::left);  //限制输出为左对齐 
                        cout.width(128);//限制字符长度 最长为128位 
                        cout<<"交易时间"<<endl;
                        cout.width(128);
                        cout<<"交易类型"<<endl;
                        cout.width(128);
                        cout<<"交易金额"<<endl;
                        for(int i=0; i<Lp->num; i++)
                    {
                        cout.width(128);
                           cout<<p->DataTime;
                        if(p->W_D=='d'||p->W_D=='D')//判断操作类型 
                        {
                            cout.width(128);
                            cout<<"取款";
                        }
                        else
                        {
                            cout.width(128);
                            cout<<"存款";
                        }
                        cout.width(128);
                           cout<<p->balance<<endl;
                        p=p->next;
                    }
                        break;
                }
                else
                {
                    cout<<"密码错误,请重新输入"<<endl;
                    return;         
                }     
        } 
        else {
            cout<<"账号错误,请重新输入"<<endl;
            return; 
        }
        Lp =Lp->next;
    }
}

void ShowAllUser()
{
    p_node_account Lp = L->next;
    int i ,count = 0, num;//count记录链表结点的个数,num进行内层循环,
    node_account *p, *q, *tail;//创建三个指针,进行冒泡排序
    p = L;
    while(p->next != NULL)//计算出结点的个数
    {
        count++;
        p = p->next;
    }
    for(i = 0; i < count; i++)            //外层循环,跟数组冒泡排序一样
    {
        num = count - i - 1;              //记录内层循环需要的次数,跟数组冒泡排序一样,
        q = L->next;                     //令q指向第一个结点
        p = q->next;  //令p指向后一个结点
        tail = L;                          //让tail始终指向q前一个结点,方便交换,也方便与进行下一步操作
        while(num--)//内层循环 次数跟数组冒泡排序一样
        {
            if(q->ID > p->ID)//如果该结点的值大于后一个结点,则交换
            {
                q->next = p->next;
                p->next = q;
                tail->next = p;
            }
            tail = tail->next;
            q = tail->next;
            p = q->next;
         } 
    }
    while(Lp)
    {   
        
            cout<<"卡号      " <<Lp->ID<<' '<<endl;       
            cout<<"姓名      " <<Lp->Name<<' '<<endl;
            cout<<"余额      " <<Lp->balance<<' '<<endl;
            cout<<"交易时间"    <<endl;
            cout<<"交易类型"    <<endl;
            cout<<"交易金额"    <<endl;
        p_mode_log p=Lp->first_node_log->next;

for(int i=0; i<Lp->num; i++)
        {
            cout.width(128);
            cout<<p->DataTime;
            if(p->W_D=='w'||p->W_D=='W')
            {
                cout.width(32);
                cout<<"取款";
            }
            else
            {
                cout.width(128);
                cout<<"存款";
            }
            cout.width(128);
            cout<<p->balance<<endl;
            p=p->next;
        }

Lp =Lp->next;
    }

}
void Showbalance() // 展示余额 
{
    string ID; 
    string mima;
    if(L==NULL)  
    {
        L=new node_account;
        L->next=NULL;
    }
    p_node_account Lp=L->next;
    cout << "卡号:    ";

cin >> ID;
    cout << "密码:    ";
    
    cin >> mima;
    while(Lp)
    {
        if (Lp->ID == ID)
        {    
            if(Lp->mima == mima)
                {
                    cout<<"卡号      " <<Lp->ID<<' '<<endl;       
                    cout<<"姓名      " <<Lp->Name<<' '<<endl;
                    cout<<"余额      " <<Lp->balance<<' '<<endl; 
                    break;
                }
                else
                {
                    cout<<"密码错误,请重新输入"<<endl;
                    return;         
                } 
            
        }
        Lp =Lp->next;
    }
}
int main()
{   int select;
    L = new node_account;
    L->first_node_log=NULL;
    L->next=NULL;
    
    
    while (select=1) 
    {        
        system("cls");
        cout<<"***********************************"<<endl;
        cout<<"活期储蓄账目管理系统 "<<endl;        
          cout<<"1——储户开户"<<endl;
          cout<<"2——储户销户"<<endl;
          cout<<"3——存款"<<endl;
          cout<<"4——取款"<<endl;
          cout<<"5——显示所有账户信息"<<endl;
          cout<<"6——查询余额"<<endl;
          cout<<"7——查询交易记录"<<endl;
          cout<<"0——退出"<<endl;
          cout<<"***********************************"<<endl;
          cout<<"请输入您的选择:";
          int select;
          
          cin>>select;
    
        switch(select)
    {
        case 1:
            system("cls");
            AddUser();
            system("pause");
            break;
        case 2 :
            system("cls");
            DeleteUser();
             system("pause");
            break;
        case 3:
            system("cls");
            Store_money();
            system("pause");
            break;
        case 4:
            system("cls");
            Get_money();
             system("pause");
            break;
        case 5:
            system("cls");
            ShowAllUser();
             system("pause");
            break;
        case 6:
            system("cls");
            Showbalance();
             system("pause");
            break;
            
        case 7:
            system("cls");
            Traderecord();
             system("pause");
            break;
        case 0:
            system("cls");
            exit(0); 
             system("pause");
            break;
            return 0;
        default:
            system("cls");
            cout<<"输入错误,请重新输入"<<endl; 
            system("pause");
            break;

}
        
    }while(select!=0) 
    return 0;
}

【无标题】活期储蓄帐目管理系统问题相关推荐

  1. java编写活期储蓄帐目管理_数据结构课程设计--活期储蓄帐目管理系统

    活期储蓄帐目管理系统 [问题描述] 编写一个活期储蓄帐目管理系统,实现储户开户.销户.存入.支出等活动.其主要要求是能比较迅速地找到储户的帐户,实现存款.取款,还要能比较简单.迅速地实现插入和删除,以 ...

  2. java编写活期储蓄帐目管理_活期储蓄账目管理系统

    #include #include #include #include #define file "temp.txt" struct user { int id; char nam ...

  3. 活期储蓄帐目管理 课程设计 c语言,活期储蓄帐目管理.docx

    洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 设计题目 数据结构课程设计 活期储蓄帐目管理 课 程 设 计 任 务 书 设计题目:活期储蓄帐目管理 ____________________ ...

  4. C语言小试牛刀(一):活期储蓄帐目管理

    活期储蓄帐目管理 活期储蓄帐目管理 活期储蓄处理中,储户开户.销户.存入.支出活动频繁,系统设计要求: 1)能比较迅速地找到储户的帐户,以实现存款.取款记账: 2)能比较简单,迅速地实现插入和删除,以 ...

  5. java毕业设计——基于java+eclipse+sqlserver的银行帐目管理系统设计与实现(毕业论文+程序源码)——银行帐目管理系统

    基于java+eclipse+sqlserver的银行帐目管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+eclipse+sqlserver的银行帐目管理系统设计与实现, ...

  6. 【毕业设计】基于JAVA银行帐目管理系统(源代码+论文)

    这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的理念缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的各类系统很难达到老师的要求. 为了大家能够顺利并以最少的精力通 ...

  7. 【毕业设计】java银行帐目管理系统(源代码+论文)

    文章目录 目录 一.系统设计 二.系统实现 源文件 目录 一.系统设计 随着我国信息产业发展迅速以及中国加入世界贸易组织,国内银行之间以及与外国银行之间的竞争也越来越激烈,怎样发展业务以吸引更多顾客是 ...

  8. 个人帐目管理系统java_月光软件站 - 编程文档 - Java - 实战EdaEagle——个人帐目管理系统(一)...

    实战EdaEagle--个人帐目管理系统(一) 作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 点击此出下载EdaEagle 点击此处下载个人帐目管理源码 EdaEagle,既 ...

  9. 个人帐目管理系统java_Java 项目 个人帐目管理系统

    目录 第一部分项目描述 3 1.1项目目的 3 第二部分需求和开发环境 3 2.1使用技术和开发环境 3 2.2项目需求 3 2.3详细功能 3 2.4 E-R图 3 2.5数据库的设计 3 2.5. ...

最新文章

  1. undefined control sequence_GeForce NOW在KDDI的帮助下提供服务:《Control》加入游戏库
  2. 计算机指令流水线时间计算,计算机指令-流水线和吞吐率
  3. STM32——DMA
  4. 对话框下的菜单使用setCheck
  5. windows10资讯和兴趣怎么关闭?
  6. 神经网络在关系抽取中的应用
  7. archlinux mysql_在Arch Linux中安装MySQL
  8. opencv实际案例(一)银行卡号的识别
  9. SEO工具:免费快速排名软件大全!
  10. 基于8086的16位键盘操作系统仿真设计-基于8086LCD1602显示仿真设计-基于8086的LED中文显示屏显示设计-基于8086方波锯齿波三角波发生器-基于8086的LED点阵汉字流水显示设计
  11. 三大面试技巧,平常就能练起来!
  12. python 进阶案例_Python 进阶内容整理
  13. 草料生成app自动下载的二维码
  14. Python学习DAY5|数据分析简介与实战
  15. window10下WSL使用Ubuntu报错: System has not been booted with systemd as init system (PID 1). Can‘t operat
  16. 【图像增强】基于gabor滤波器实现指纹增强含Matlab源码
  17. 哪里才能下载到好用的CAD建筑练习图纸?
  18. Holoview--Introduction
  19. 洛谷 AT2442 フェーン現象 (Foehn Phenomena)
  20. IPv6解决方案ND防攻击技术白皮书

热门文章

  1. 羽*毛*球 陪伴的日子
  2. 多线程 threadlocal 获取经办人信息
  3. 基于c++的模拟爱奇艺web视频上传
  4. ps2018下载安装ico格式插件
  5. 关闭 nvidia 自动更新
  6. ubuntu16.04安装NVIDIA显卡驱动和C++开发环境配置方法
  7. 「JOISC 2014 Day1」巴士走读
  8. 苹果手机定位在哪里设置?定位如何打开?
  9. springcloud讲解
  10. 蓝桥杯-灵能传输-python