欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

课程设计 【银行系统】

程序员文章站 2022-04-11 12:59:35
...
/*********************************************************** 
*版权所有 (c)2017,lizhaoyang 
*文件名称:main.cpp
*文件标识:无 
*内容:调用fistshow函数
*其他说明: 
*作者:黎兆阳
*完成日期:20171224
*修改记录:无 
**************************************************************/

main.cpp: 

#include "shows.h"
int main()
{
   FirstShow();
    return 0;
}

/*********************************************************** 
*版权所有 (c)2017,lizhaoyang 
*文件名称:shows.cpp
*文件标识:无 
*内容:各种界面函数
*其他说明: 
*作者:黎兆阳
*完成日期:20171224
*修改记录:无 
**************************************************************/

shows.cpp:

#include <iostream>
#include "function.h"
#include "shows.h"
#include "linklist.h"
using namespace std;
//FirstShow
void FirstShow()
{
    	LinkList *L ;
        InitList (L);//初始化线性表
        int i=1;    //定义变量i保证顺序将数据插入链表
        MidShow(L,i); //主页面
}
//主界面
void MidShow(LinkList *L,int i)
{
        cout<<"                     **********************************"<<endl;
        cout<<"                     *                                *"<<endl;
        cout<<"                     *      欢迎进入银行系统主页面    *"<<endl;
        cout<<"                     *                                *"<<endl;
        cout<<"                     **********************************"<<endl<<endl;
        cout<<"                                 1 注册"<<endl;
        cout<<"                                 2 登录"<<endl;
		int cmd;//操作类型之界面选择
		cin>>cmd;
	    switch(cmd)
		{
			case 1:
			 	Sign(L,i); //输入1注册
				break;
			case 2:     //输入2选择界面
			    ChooseShow(L,i);
				break;
			default:
				break;
		}
}
//注册界面
void Sign(LinkList *L,int i)
{

	    cout<<"                     **********************************"<<endl;
        cout<<"                     *                                *"<<endl;
        cout<<"                     *      欢迎进入银行系统注册页面  *"<<endl;
        cout<<"                     *                                *"<<endl;
        cout<<"                     **********************************"<<endl<<endl;
		cout<<"                            注册客户**** 1"<<endl;
		cout<<"                            返回上一页面 0"<<endl;
       	int cmd;	 	//操作类型
		cin>>cmd;
	    switch(cmd)
		{
		    case 1:
		       CreatAccount(L,i);//输入1开户
				break;
			case 0:
			    MidShow(L,i);//输入0返回主界面
				break;
			default:
				break;
		}
}
//选择界面
void ChooseShow(LinkList *L,int i)
{
	    cout<<"                     **********************************"<<endl;
        cout<<"                     *                                *"<<endl;
        cout<<"                     *      欢迎进入银行系统选择页面  *"<<endl;
        cout<<"                     *                                *"<<endl;
        cout<<"                     **********************************"<<endl<<endl;
        cout<<"                              1 客户入口****"<<endl;
        cout<<"                              0 返回上一界面"<<endl;
		int cmd;//操作类型之界面选择
		cin>>cmd;
	    switch(cmd)
		{
			case 1:
				CustomShow(L,i);
				break;
			case 0:
			    MidShow(L,i);
				break;
			default:
				break;
		}
}
//客户界面
void CustomShow(LinkList *L,int i)
{
cout<<"                     ┏━━━━━━━━━━━━━┓\n";
cout<<"                     ┃     欢迎您使用本系统     ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃1. 存钱                   ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃2. 取钱                   ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃3. 转账                   ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃4. 修改密码               ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃5. 查询账户余额           ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃6. 查询所有账户信息       ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃7. 返回主界面             ┃\n";
cout<<"                     ┃━━━━━━━━━━━━━┃\n";
cout<<"                     ┃0. 返回上一界面           ┃\n";
cout<<"                     ┗━━━━━━━━━━━━━┛\n";
cout<<"                                                   \n";
cout<<"                       输入其他任意数字退出本系统  \n";
                              int cmd;  //操作类型
	                          cin>>cmd;
		                      switch(cmd)
							  {
			    case 1:
				     SaveMoney(L,i); //存钱
				       break;
			    case 2:
			         GetMoney(L,i);   //取钱
				       break;
			    case 3:
			         MoveMoney(L,i); //转账
				       break;
			    case 4:
			         ModifyPassword(L,i);//密码修改
				       break;
		    	case 5:
			         AccountMoney(L,i);//账户余额
				       break;
		    	case 6:
                     cout<<"    id   passwd  money "<<endl;
			         DispList(L);   //输出线性表L所有信息
			         CustomShow(L,i); //返回客户选择界面
			          break;
			    case 7:
			          MidShow(L,i);
			           break;
			    case 0:
			        ChooseShow(L,i); //返回选择界面
				        break;
			    default:
				        break;
							  }
}
/*********************************************************** 
*版权所有 (c)2017,lizhaoyang 
*文件名称:shows.h
*文件标识:无 
*内容:各种界面函数的声明
*其他说明: 
*作者:黎兆阳
*完成日期:20171224
*修改记录:无 
**************************************************************/

shows.h:

#ifndef SHOWS_H_INCLUDED
#define SHOWS_H_INCLUDED
#include "linklist.h"
void MidShow(LinkList *L,int i);     //主界面
void Sign(LinkList *L,int i);        //注册界面
void ChooseShow(LinkList *L,int i);  //选择界面
void CustomShow(LinkList *L,int i);  //客户界面
void FirstShow(); //第一个界面
#endif // SHOWS_H_INCLUDED
/*********************************************************** 
*版权所有 (c)2017,lizhaoyang 
*文件名称:function.cpp
*文件标识:无 
*内容:各种功能函数
*其他说明: 
*作者:黎兆阳
*完成日期:20171224
*修改记录:无 
**************************************************************/

function.cpp:

#include "linklist.h"
#include "shows.h"
#include <iostream>
using namespace std;
//开户函数  函数接口 (头指针L,索引变量i)
void CreatAccount(LinkList *L,int i)
{
    cout<<"***欢迎使用开户功能!***"<<endl;
    cout<<"请输入您的id!"<<endl;
    int id;
    cin>>id;
    ListInsert(L,i,id);      i++;
    cout<<"  请输入您的密码!                    "<<endl;
    int passwd;
    cin>>passwd;
    ListInsert(L,i,passwd);  i++;
    cout<<"    请输入您的账户初始金额!            "<<endl;
    int money;
    cin>>money;
     ListInsert(L,i,money);   i++;
    cout<<"返回主页面"<<endl;
       MidShow(L,i);
}
//存钱功能 case 1     函数接口 (头指针L,索引变量i)***********************************************************************
void SaveMoney(LinkList *L,int i)
{
     int j=0;       //存放姓名的元素位置,id在链表中的位置.
     int k;       //三次输入密码判断
     int passwds;
     int moneys;
     int &m=passwds;       //m是passwd的引用
     int &n=moneys;  //n是moneys的引用

    cout<<"***欢迎使用存款功能!***"<<endl;
    cout<<"      请输入您的id!                 "<<endl;
    int id;
    cin>>id;
    j=LocateElem(L,id);//按元素查找 (LinkList *L,ElemType e)返回元素位置
    GetElem(L,j+1,m);  //求线性表某个数据元素值,返回的m是真实的密码
    GetElem(L,j+2,n);  //求线性表某个数据元素值,返回的n是真实的钱数//j+2代表金额在链表中的位置
    for(k=0;k<3;k++)   //输入密码次数小于等于3
    {
         cout<<"请输入您的密码!!"<<endl;
         int passwd;
         cin>>passwd;
        if(m==passwd)   //密码输入正确
       {
         cout<<"你的密码输入正确          "<<endl;
         cout<<"      请输入您的存款金额!!!                 "<<endl;
         int money;
            for (;;)   //判断金额是否合法
         {
              cin>>money;
         if (money<=0)
         {
             cout<<"取款金额不正确,请重新输入"<<endl;
         }
          else
             {
              break;
              }
        }
         ListInsert (L,j+2,money+n);
         cout<<"您的账户本来余额为"<<n<<endl;
         cout<<"您本次存入金额为"<<money<<endl;
         cout<<"存款成功***显示总金额后***返回客户选择页面"<<endl;
         cout<<"总金额="<<money+n<<endl;
         int a=n;  //n是账户原本金额
         int &b=a;
         ListDelete (L,j+3,b);//在链表中删除原始金额
           CustomShow(L,i);
           break;
       }
       else  // 密码输入错误
        {
            if(2-k>0)   //重复输入密码次数
            {
                 cout<<"您的密码输入错误,您还有"<<2-k<<"次机会重新输入"<<endl;
            }
            else     //无输入密码机会
             {
                cout<<"您用尽了机会,即将返回选择页面"<<endl;
                ChooseShow(L,i);
             }
        }
    }
}
//取钱函数 case 2*   函数接口 (头指针L,索引变量i)**********************************************************************
void GetMoney(LinkList *L,int i)
{
     int j=0;       //存放姓名的元素位置,id在链表中的位置.
     int k;       //三次输入密码判断
     int passwds;
     int moneys;
     int &m=passwds;       //m是passwd的引用
     int &n=moneys;  //n是moneys的引用
    cout<<"***欢迎使用取款功能!***"<<endl;
    cout<<"      请输入您的id!                 "<<endl;
    int id;
    cin>>id;
    j=LocateElem(L,id);//按元素查找 (LinkList *L,ElemType e)返回元素位置
    GetElem(L,j+1,m);  //求线性表某个数据元素值,返回的m是真实的密码
    GetElem(L,j+2,n);  //求线性表某个数据元素值,返回的n是真实的钱数 ,j+2代表金额在链表中的位置
    for(k=0;k<3;k++)   //输入密码次数小于等于3
    {
         cout<<"请输入您的密码!!"<<endl;
         int passwd;
         cin>>passwd;
        if(m==passwd)   //密码输入正确
       {
         cout<<"你的密码输入正确          "<<endl;
         cout<<"      请输入您的取款金额!!!                 "<<endl;
         int money;
         for (;;)   //判断金额是否合法
         {
              cin>>money;
         if (money<=0)
         {
             cout<<"取款金额不能为负数和0,请重新输入"<<endl;
         }
         if (money>n)
         {
             cout<<"您的账户余额不足,请重新输入"<<endl;
         }
          else
             {
              break;
              }
         }
         ListInsert (L,j+2,n-money);
         cout<<"您的账户本来余额为"<<n<<endl;
         cout<<"您本次取出金额为"<<money<<endl;
         cout<<"取款成功***显示总金额后***返回客户选择页面"<<endl;
         cout<<"总金额="<<n-money<<endl;
         int a=n;  //n是账户原本金额
         int &b=a;
         ListDelete (L,j+3,b);//在链表中删除原始金额
           CustomShow(L,i);
           break;
       }
       else  // 密码输入错误
        {
            if(2-k>0)   //重复输入密码次数
            {
                 cout<<"您的密码输入错误,您还有"<<2-k<<"次机会重新输入"<<endl;
            }
            else     //无输入密码机会
             {
                cout<<"您用尽了机会,即将返回选择页面"<<endl;
                ChooseShow(L,i);
             }
        }
    }
}
//转账 case 3******************************************************************************
void  MoveMoney(LinkList *L,int i)
{
     int j=0;       //存放姓名的元素位置,id在链表中的位置.
     int k;       //三次输入密码判断
     int passwds;
     int moneys;
     int &m=passwds;       //m是passwd的引用
     int &n=moneys;  //n是moneys的引用
    cout<<"***欢迎使用转账功能!***"<<endl;
    cout<<"      请输入您的id!                 "<<endl;
    int id;
    cin>>id;
    j=LocateElem(L,id);//按元素查找 (LinkList *L,ElemType e)返回元素位置
    GetElem(L,j+1,m);  //求线性表某个数据元素值,返回的m是真实的密码
    GetElem(L,j+2,n);  //求线性表某个数据元素值,返回的n是真实的钱数 ,j+2代表金额在链表中的位置
    for(k=0;k<3;k++)   //输入密码次数小于等于3
    {
         cout<<"请输入您的密码!!"<<endl;
         int passwd;
         cin>>passwd;
        if(m==passwd)   //密码输入正确
       {
         cout<<"你的密码输入正确          "<<endl;
         cout<<"      请输入您的转账金额!!!                 "<<endl;
         int money;
      for (;;)   //判断金额是否合法
         {
              cin>>money;
         if (money<=0)
         {
             cout<<"转账金额不能为负数和0,请重新输入"<<endl;
         }
         if (money>n)
         {
             cout<<"您的账户余额不足,请重新输入"<<endl;
         }
          else
             {
               break;
              }
         }
         ListInsert (L,j+2,n-money);
         cout<<"您的账户本来余额为"<<n<<endl;
         cout<<"您本次转账金额为"<<money<<endl;
         cout<<"转账成功***显示转账后金额***显示对方账户金额********返回客户选择页面"<<endl;
         cout<<"总金额="<<n-money<<endl;
         int a=n;  //n是账户原本金额
         int &b=a;
         ListDelete (L,j+3,b);//在链表中删除原始金额
         cout<<"      请输入您的转账账户的id!                 "<<endl;  //***********************************
         int Id;
         cin>>Id;
         j=LocateElem(L,Id);//按元素查找 (LinkList *L,ElemType e)返回元素位置
         GetElem(L,j+2,n);  //求线性表某个数据元素值,返回的n是真实的钱数 ,j+2代表金额在链表中的位置
         ListInsert (L,j+2,n+money);
         cout<<"对方账户金额为"<<money+n<<"   转账成功!!!"<<endl;
         ListDelete (L,j+3,b);//在链表中删除原始金额
         CustomShow(L,i);
           break;
       }
       else  // 密码输入错误
        {
            if(2-k>0)   //重复输入密码次数
            {
                 cout<<"您的密码输入错误,您还有"<<2-k<<"次机会重新输入"<<endl;
            }
            else     //无输入密码机会
             {
                cout<<"您用尽了机会,即将返回选择页面"<<endl;
                ChooseShow(L,i);
             }
        }
    }

}
//密码修改  case 4
void ModifyPassword(LinkList *L,int i)
{
     int j=0;       //存放姓名的元素位置,id在链表中的位置.
     int k;         //三次输入密码判断
     int passwds;
     int &m=passwds;       //m是passwd的引用
    cout<<"***欢迎使用密码修改功能!***"<<endl;
    cout<<"      请输入您的id!                 "<<endl;
    int id;
    cin>>id;
    j=LocateElem(L,id);//按元素查找 (LinkList *L,ElemType e)返回元素位置
    GetElem(L,j+1,m);  //求线性表某个数据元素值,返回的m是真实的密码
    for(k=0;k<3;k++)   //输入密码次数小于等于3
    {
         cout<<"请输入您的密码!!"<<endl;
         int passwd;
         cin>>passwd;
         if(m==passwd)   //密码输入正确
       {
         cout<<"你的密码输入正确          "<<endl;
         cout<<"请输入您的新密码"<<endl;
         int newpasswd;
         cin>>newpasswd;
         ListInsert (L,j+1,newpasswd);
         cout<<"您的账户本来的密码是:"<<m<<endl;
         cout<<"密码修改成功***显示修改后密码***返回客户选择页面"<<endl;
         cout<<"新密码是:"<<newpasswd<<endl;
         int a=m;  //n是账户原本金额
         int &b=a;
         ListDelete (L,j+2,b);//在链表中删除原始金额
           CustomShow(L,i);
           break;
       }
       else  // 密码输入错误
        {
            if(2-k>0)   //重复输入密码次数
            {
                 cout<<"您的密码输入错误,您还有"<<2-k<<"次机会重新输入"<<endl;
            }
            else     //无输入密码机会
             {
                cout<<"您用尽了机会,即将返回选择页面"<<endl;
                ChooseShow(L,i);
             }
        }
    }
}
//账户余额 case 5         ******************************************************************************
void AccountMoney(LinkList *L,int i)
{
    int j=0;       //存放姓名的元素位置,id在链表中的位置.
    int moneys;
    int &n=moneys;  //n是moneys的引用
    cout<<"***欢迎使用账户余额功能!***"<<endl;
    cout<<"      请输入您的id!                 "<<endl;
    int id;
    cin>>id;
    j=LocateElem(L,id);//按元素查找 (LinkList *L,ElemType e)返回元素位置
    GetElem(L,j+2,n);  //求线性表某个数据元素值,返回的n是真实的钱数 ,j+2代表金额在链表中的位置
    cout<<"您的账户余额为"<<n<<endl;
    cout<<"查看余额成功***显示余额***返回客户选择页面"<<endl;
    CustomShow(L,i);
}


/*********************************************************** 
*版权所有 (c)2017,lizhaoyang 
*文件名称:function.h
*文件标识:无 
*内容:各种功能函数
*其他说明: 
*作者:黎兆阳
*完成日期:20171224
*修改记录:无 
**************************************************************/

function.h:
#ifndef FUNCTION_H_INCLUDED
#define FUNCTION_H_INCLUDED
#include "linklist.h"void CreatAccount(LinkList *L,int i); //开户函数void SaveMoney(LinkList *L,int i); //存钱函数void GetMoney(LinkList *L,int i); //取钱函数void ModifyPassword(LinkList *L,int i); //密码修改void AccountMoney(LinkList *L,int i); //账户余额void MoveMoney(LinkList *L,int i); //转账#endif // FUNCTION_H_INCLUDED

linklist.cpp:
#include <stdio.h>
#include <malloc.h>
#include "linklist.h"
//头插法建立单链表******************************************************************
void CreateListF(LinkList *&L,ElemType a[],int n)
{
    LinkList *s;
    int i;
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点
    L->next=NULL;
    for (i=0; i<n; i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点
        s->data=a[i];
        s->next=L->next;            //将*s插在原开始结点之前,头结点之后
        L->next=s;
    }
}
//尾插法建立单链表******************************************************************
void CreateListR(LinkList *&L,ElemType a[],int n)
{
    LinkList *s,*r;
    int i;
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点
    L->next=NULL;
    r=L;                    //r始终指向终端结点,开始时指向头结点
    for (i=0; i<n; i++)
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点
        s->data=a[i];
        r->next=s;          //将*s插入*r之后
        r=s;
    }
    r->next=NULL;           //终端结点next域置为NULL
}
//初始化线性表******************************************************************
void InitList(LinkList *&L)
{
    L=(LinkList *)malloc(sizeof(LinkList));     //创建头结点
    L->next=NULL;
}
//销毁线性表******************************************************************
void DestroyList(LinkList *&L)
{
    LinkList *p=L,*q=p->next;
    while (q!=NULL)
    {
        free(p);
        p=q;
        q=p->next;
    }
    free(p);    //此时q为NULL,p指向尾结点,释放它
}
//判断线性表是否为空******************************************************************
bool ListEmpty(LinkList *L)
{
    return(L->next==NULL);
}

int ListLength(LinkList *L)
{
    LinkList *p=L;
    int i=0;
    while (p->next!=NULL)
    {
        i++;
        p=p->next;
    }
    return(i);
}
//输出线性表******************************************************************
void DispList(LinkList *L)
{
    int n=0;
    LinkList *p=L->next;
    while (p!=NULL)
    {   if(n%3==0&&n!=0)
       {
        printf("\n");
       }
        printf("%6ld ",p->data);
        n++;
        p=p->next;
    }
    printf("\n");
}
//求线性表某个数据元素值********************************************************
bool GetElem(LinkList *L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L;
    while (j<i && p!=NULL)
    {
        j++;
        p=p->next;
    }
    if (p==NULL)            //不存在第i个数据结点
        return false;
    else                    //存在第i个数据结点
    {
        e=p->data;
        return true;
    }
}
//按元素值查找******************************************************************
int LocateElem(LinkList *L,ElemType e)
{
    LinkList *p=L->next;
    int n=1;
    while (p!=NULL&&p->data!=e)
    {
        p=p->next;
        n++;
    }
    if (p==NULL)
        return(0);  //没有找到返回NULL;
    else
        return(n);  //调用函数返回元素位置
}
//插入数据元素********************************************************************
bool ListInsert(LinkList *&L,int i,ElemType e)
{
    int j=0;
    LinkList *p=L,*s;
    while (j<i-1 && p!=NULL) //查找第i-1个结点
    {
        j++;
        p=p->next;
    }
    if (p==NULL)    //未找到位序为i-1的结点
        return false;
    else            //找到位序为i-1的结点*p
    {
        s=(LinkList *)malloc(sizeof(LinkList));//创建新结点*s
        s->data=e;
        s->next=p->next;                        //将*s插入到*p之后
        p->next=s;
        return true;
    }
}
 //删除数据元素*******************************************************************
bool ListDelete(LinkList *&L,int i,ElemType &e)
{
    int j=0;
    LinkList *p=L,*q;
    while (j<i-1 && p!=NULL)    //查找第i-1个结点
    {
        j++;
        p=p->next;
    }
    if (p==NULL)                //未找到位序为i-1的结点
        return false;
    else                        //找到位序为i-1的结点*p
    {
        q=p->next;              //q指向要删除的结点
        if (q==NULL)
        return false;           //若不存在第i个结点,返回false
        e=q->data;
        p->next=q->next;        //从单链表中删除*q结点
        free(q);                //释放*q结点
        return true;
    }
}


linklist.h:

#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

typedef int ElemType;
typedef struct LNode        //定义单链表结点类型
{
    ElemType data;
    struct LNode *next;     //指向后继结点
}LinkList;
void CreateListF(LinkList *&L,ElemType a[],int n); //头插法建立单链表
void CreateListR(LinkList *&L,ElemType a[],int n); //尾插法建立单链表
void InitList   (LinkList *&L);                    //初始化线性表
void DestroyList(LinkList *&L);                    //销毁线性表
void DispList   (LinkList *L);                     //输出线性表
int ListLength  (LinkList *L);                     //求线性表长度
int LocateElem  (LinkList *L,ElemType e);          //按元素值查找
bool ListEmpty  (LinkList *L);                     //判断线性表是否为空
bool GetElem    (LinkList *L ,int i,ElemType &e);  //求线性表某个数据元素值
bool ListInsert (LinkList *&L,int i,ElemType e);   //插入数据元素
bool ListDelete (LinkList *&L,int i,ElemType &e);  //删除数据元素

#endif // LINKLIST_H_INCLUDED


项目截图:课程设计 【银行系统】

运行截图:

课程设计 【银行系统】课程设计 【银行系统】课程设计 【银行系统】课程设计 【银行系统】






相关标签: 课程设计