期末课程设计--银行储蓄系统
程序员文章站
2024-03-22 19:55:58
...
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;
}
}
}
多文件组织,保存在四个文件里:
运行结果:
开户:
存款:
取款:
销户:
转账:
查询:
查询所有: