期末课程设计--银行储蓄系统

list.h函数:

/*
*版权所有 (C)2017,DuXinye
*
*文件名称:list.h
*文件标识:无
*内容摘要:本文件的作用是定义结构体并声明函数
*其他说明:无
*当前版本:V1.0
*作者:杜昕晔
*完成日期:2017/12/22
*/

#include <cstring>
#include <iostream>
using namespace std;
typedef struct LNode        //定义单链表结点类型
{
    string name;
    double money;
    char mima[20];
    int guashi;
    int shenfen;
    struct LNode *next;     //指向后继结点
} LinkList;
//尾插法建立单链表
void kaihu(LinkList *&L);        //开户
void cunkuan(LinkList *&L);      //存款
void qukuan(LinkList *&L);//取款
void xiaohu(LinkList *&L);//销户
void zhuanzhang(LinkList *L);//转账
void chaxun(LinkList *L);//查询
void ListInsert(LinkList *&L);//插入数据元素
void chaxunsuoyou(LinkList *L);//查询所有
bool ListEmpty(LinkList *L);//判断是否为空表
int LocateElem(LinkList *L,string name);//按元素值查找
void InitList(LinkList *&L);//初始化线性表
view.cpp函数:
/*
*版权所有 (C)2017,DuXinye
*
*文件名称:view.cpp
*文件标识:无
*内容摘要:本文件的作用是实现视图
*其他说明:无
*当前版本:V1.0
*作者:杜昕晔
*完成日期:2017/12/22
*/
 /*
 *功能描述:显示模块
 *输入参数:无
 *输出参数:跳转银行操作页面
 *其他说明:无
 */
 #include <iostream>
 #include <stdio.h>
 using namespace std;
 void jiemian()
 {
        printf("*********银行储蓄平台******************\n");
        printf("**1  开户       2  存款      3  取款*********\n");
		printf("**4  销户       5  转账      6  查询*********\n");
	    printf("**7  查询所有                       *********\n");
 }
list.cpp函数:
/*
*版权所有 (C)2017,DuXinye
*
*文件名称:list.cpp
*文件标识:无
*内容摘要:本文件的作用是实现头文件中声明的自定义函数
*其他说明:无
*当前版本:V1.0
*作者:杜昕晔
*完成日期:2017/12/22
*/
#include <cstring>
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include "list.h"
using namespace std;


bool ListEmpty(LinkList *L) // 判断链表是否为空
{
    return (L->next==NULL);
}


void InitList(LinkList *&L)//初始化链表
{
    L = (LinkList *)malloc(sizeof(LinkList));
    L->next = NULL;
}


int LocateElem(LinkList *L,string name)//按元素位置查找,根据输入的名字判断是链表的第几个
{
    int i = 1;
    LinkList *p = L->next;
    while(p!=NULL && p->name!=name)
    {
        p = p->next;
        i++;
    }
    if(p==NULL)//如果名字不存在,返回0,如果找到,返回他在第几个
        return 0;
    else
        return i;
}
/*
*功能描述:开户
*输入参数:姓名,身份证号,密码,存款金额
*输出参数:用户存入的信息
*其他说明:消息字段之间用分号(;)分隔
*/
void kaihu(LinkList *&L)
{
    LinkList *s,*r;    //s指向第一个用户
    r=L;               //r始终指向终端结点,开始时指向头结点
	while (r->next != NULL)
    {
		r = r->next;
	}
    cout<<"请输入姓名:";
    cin>>s->name;
    cout<<"请输入身份证号:";
    cin>>s->shenfen;
    cout<<"请输入密码:";
    cin>>s->mima;
    cout<<"请输入存款金额:";
    cin>>s->money;
    if(s->money<=0)
    {
          cout<<" 您输入的存款金额为负!请继续输入。"<<endl;
          cin>>s->money;
    }
    r->next = s;     //将新用户插入到链表
    s->next=NULL;    //新用户作为尾结点
cout<<"开户成功"<<endl;
}
/*
*功能描述:存款
*输入参数:姓名,密码,存款金额
*输出参数:存款成功
*返回值:0-账户不存在   其他-存在
*其他说明:消息字段之间用分号(;)分隔
使用查询功能可以确定存款成功
*/
void cunkuan(LinkList *&L)
  {
    LinkList *r;
    string name;
    double money;
    string mima;
    cout<<"请输入姓名:";
    cin>>name;
    cout<<"请输入密码:";
    cin>>mima;
    cout<<"请输入存款金额:";
    cin>>money;
    if(money<=0)
    {
        cout<<" 您输入的存款金额为负!请继续输入。"<<endl;
        cin>>money;
    }
    int locate = LocateElem(L,name);   //调用他返回的位置,查找名字是否存在


    if(locate==0)                      //如果返回的是0
    {
        cout<<"账户不存在!请重新输入。"<<endl;
    }
    else
    {
        r = L;        //r始终指向终端结点,开始时指向头结点
        int i;
        for(i=0;i<locate;i++)    //直到查找到输入的姓名
        {
            r = r->next;
        }
        if(r->mima == mima)
        {
            r->money = r->money + money;
        }
        else
        {
            cout<<"密码不正确"<<endl;
        }
    }
    cout<<"存款成功"<<endl;
  }
/*
*功能描述:取款
*输入参数:姓名,密码,取款金额
*输出参数:取款成功
*返回值:0-账户不存在   其他-存在
*其他说明:消息字段之间用分号(;)分隔
使用查询功能可以确定取款成功
*/
  void qukuan(LinkList *&L)
  {
    LinkList *r;
    int i;
    string name;
    double money;
    string mima;
    int shenfen;
    cout<<"请输入姓名:";
    cin>>name;
    cout<<"请输入密码:";
    cin>>mima;
    cout<<"请输入取款金额:";
    cin>>money;
    if(money<=0)
    {
        cout<<" 您输入的存款金额为负!请继续输入。"<<endl;
        cin>>money;
    }
    int locate = LocateElem(L,name);    //调用他返回的位置,查找名字是否存在
    if(locate==0)                    //若返回值为0,则用户不存在
    {
        cout<<"账户不存在!请重新输入。"<<endl;
    }
    else
    {
        r = L;//r始终指向终端结点,开始时指向头结点
        int i;
        for(i=0;i<locate;i++)
        {
            r = r->next;
        }
        if(r->mima == mima)
        {
            while(r->money - money < 0)
            {
                cout<<"余额不足,重新输入:";
                cin>>money;
            }
            r->money = r->money - money;
        }
        else
        {
            cout<<"密码不正确"<<endl;
        }
    }
cout<<"取款成功"<<endl;
  }
/*
*功能描述:销户
*输入参数:姓名,密码
*输出参数:销户成功
*返回值:0-账户不存在   其他-存在
*其他说明:消息字段之间用分号(;)分隔
*/
  void xiaohu(LinkList *&L)//销毁单链表
  {
        LinkList *last , *r;     
        string name;
        string mima;
        int locate;
        cout<<"请输入姓名:";
        cin>>name;
        cout<<"请输入密码:";
        cin>>mima;
        locate = LocateElem(L,name);
        if(locate == 0)
        {
            cout<<"该用户不存在"<<endl;
        }
        else
        {
            r = L;
            int i;
            for(i=0;i<locate-1;i++)//找上一个结点
            {
               r = r->next;
            }
            last = r->next;  //要删除的
            if(last->mima == mima)
            {
                r->next = r->next->next;
                cout<<"销户成功"<<endl;
            }else
            {
                cout<<"密码不正确"<<endl;
            }


        }
  }
/*
*功能描述:转账
*输入参数:姓名,密码,转账姓名,转账金额
*输出参数:转账成功
*其他说明:消息字段之间用分号(;)分隔
*/
void zhuanzhang(LinkList *L)
{
    LinkList *r,*s;
    int send,to;
    string sendname;
    string mima;
    string toname;
    double money;
    cout<<"请输入姓名:";
    cin>>sendname;
    cout<<"请输入密码:";
    cin>>mima;
    cout<<"请输入您要转账的姓名:";
    cin>>toname;
    cout<<"转账金额:";
    cin>>money;
    send = LocateElem(L,sendname);
    to = LocateElem(L,toname);
    if(send == 0)
    {
            cout<<"您输入的转款或收款人有误"<<endl;
    }
    else if(to == 0)
    {
            cout<<"您输入的转款或收款人有误"<<endl;
    }
    else
    {
            r = L;
            s = L;
            int i;
            for(i=0;i<send;i++)
            {
                r = r->next;
            }
            for(i=0;i<to;i++)
            {
                s = s->next;
            }
            if(r->mima == mima)
            {
                while(r->money - money < 0)
                {
                cout<<"余额不足,重新输入:";
                cin>>money;
                }
                r->money = r->money - money;
                s->money = s->money + money;
                cout<<"转账成功"<<endl;
            }
            else
            {
            cout<<"密码不正确"<<endl;
            }
        }
    }
/*
*功能描述:查询
*输入参数:姓名,密码
*输出参数:用户银行卡中的信息
*其他说明:消息字段之间用分号(;)分隔
*/
  void chaxun(LinkList *L)  //输出单链表
{
    cout<<"您的用户名:"<<endl;
    string name;
    cin>>name;
    cout<<"您的密码:"<<endl;
    string mima;
    cin>>mima;
    LinkList *r ;
    int locate = LocateElem(L,name);
    if(locate==0){
        cout<<"账户不存在!请重新输入。"<<endl;
    }
    else{
        r = L;
        int i;
        for(i=0;i<locate;i++){
            r = r->next;
        }
        if(r->mima == mima){
            cout<<"您的姓名: "<<r->name<<" 您的金额为:"<<r->money<<endl;
        }else{
            cout<<"密码不正确"<<endl;
        }
    }


}
/*
*功能描述:查询所有
*输入参数:无
*输出参数:银行的所有用户信息
*其他说明:消息字段之间用分号(;)分隔
该功能只有银行管理员才可以运行
*/
void chaxunsuoyou(LinkList *L)
{
    LinkList *p=L->next;
    int i = 0;
    while (p!=NULL)
    {
        cout<<"第"<<i+1<<"位用户:";
        cout<<"姓名"<<p->name<<" "<<"账户余额"<<p->money<<endl;
        p=p->next;
        i++;
    }
    printf("\n");
}
main.cpp函数:
/*
*版权所有 (C)2017,DuXinye
*
*文件名称:main.cpp
*文件标识:无
*内容摘要:本文件的作用是定义main函数以及调用相关函数
*其他说明:无
*当前版本:V1.0
*作者:杜昕晔
*完成日期:2017/12/22
*/
#include <stdio.h>
#include <malloc.h>
#include <string>
#include <iostream>
#include "list.h"
using namespace std;
typedef int ElemType;

void kaihu(LinkList *&L);
void ListInsert(LinkList *&L);
void jiemian();
void cunkuan(LinkList *&L);
void qukuan(LinkList *&L);
void xiaohu(LinkList *&L);
void chaxun(LinkList *L);
void chaxunsuoyou(LinkList *L);
void zhuanzhang(LinkList *L);
bool ListEmpty(LinkList *L);
void InitList(LinkList *&L);

int main()
{

   	int cmd;
    LinkList  *L2;
	L2 = new LinkList;
	L2 = NULL;
    int index=0;
    InitList(L2);//初始化
    while(1)
	{
        jiemian();
		cout<<endl;
        cout<<"请输入您要进行的业务号:";
        cin>>cmd;
		switch(cmd)
		{
		    jiemian();
			case 1:
                kaihu(L2);
				break;
			case 2:
                cunkuan(L2);
				break;
            case 3:
				qukuan(L2);
				break;
            case 4:
				xiaohu(L2);
				break;
            case 5:
                zhuanzhang(L2);
                break;
			case 6:
				chaxun(L2);
				break;
			case 7:
				chaxunsuoyou(L2);
				break;
            default:
				break;
		}
	}
}
多文件组织,保存在四个文件里:


运行结果:

开户:

存款:

取款:


销户:


转账:


查询:


查询所有:


  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值