课程设计 【银行系统】
程序员文章站
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
项目截图:
运行截图:
上一篇: C语言-学生成绩管理系统
下一篇: 奇偶校验-基于C++的简易计算奇偶校验位