数据结构课程设计银行储蓄系统
- /**
- *版权所有(C)2017,panyanan
- *
- *文件名称:main.cpp
- *文件标识:无
- *内容摘要:本文件的作用是调用算法库里面的函数,完成题目要求。
- *其它说明:无
- *当前版本: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 CreateListF(LinkList *&L,ElemType a[],int n);//头插法建立单链表 //void DestroyList(LinkList *&L); //销毁单链表 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); //index++; 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; } } }
- /**
- *版权所有(C)2017,panyanan
- *
- *文件名称: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 = new LinkList; r = new LinkList; 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; } if (r == NULL) { } r->next = s; s->next=NULL; cout<<"开户成功!啦啦啦~"<<endl; } void cunkuan(LinkList *&L) { LinkList *s,*r; 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; int i; for(i=0;i<locate;i++){ r = r->next; } if(r->mima == mima){ r->money = r->money + money; }else{ cout<<"密码不正确"<<endl; } } //int j=0; /* while(r->mima!=mima){ cout<<"密码不正确,请重新输入"<<endl; cin>>mima; } r->money=money+r->money; cout<<"存款成功!哈哈哈~"; */ } //3取款 void qukuan(LinkList *&L) { LinkList *s,*r; //s=L; int i; string name; double money; string mima; int shenfen; cout<<"请输入姓名:"; cin>>name; cout<<"请输入密码:"; cin>>mima; cout<<"请输入取款金额:"; cin>>money; //r始终指向终端结点,开始时指向头结点 if(money<=0) { cout<<" 您输入的存款金额为负!请继续输入。"<<endl; cin>>money; } 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){ while(r->money - money < 0){ cout<<"余额不足,重新输入:"; cin>>money; } r->money = r->money - money; }else{ cout<<"密码不正确"<<endl; } } } //4销户 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; //next要删除的 if(last->mima == mima){ r->next = r->next->next; cout<<"销户成功"<<endl; }else{ cout<<"密码不正确"<<endl; } } } //5转账 void zhuanzhang(LinkList *L) { //LinkList *send,*to,*sendlist,*tolist; LinkList *r,*s; //sendlist = L; //tolist = L; int send,to; string sendname; string mima; string toname; //int wrong=0; 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; } } } //sendlist->money = sendlist->money - money; //tolist->money = tolist->money+money; //6查询 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; } } } //7查询所有 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"); } //k开户二 /* void ListInsert(LinkList *&L) { LinkList *p = L,*s; while(p->next!=NULL) { p=p->next; } string name; double money; string mima; int shenfen; s=(LinkList *)malloc(sizeof(LinkList)); cout<<"请输入姓名:"; cin>>s->name; cout<<"请输入身份证号:"; cin>>s->shenfen; cout<<"请输入密码:"; cin>>s->mima; cout<<"请输入存款金额:"; cin>>s->money; p->next = s; s->next=NULL; } */
- /**
- *版权所有(C)2017,panyanan
- *
- *文件名称:list.h
- *文件标识:无
- *内容摘要:本文件的作用是对结构体的声明
- *其它说明:无
- *当前版本:V1.0
- *作者:潘亚楠
- *完成日期:2017,12,22
- **/
#include <cstring> #include <iostream> using namespace std; typedef struct LNode //定义单链表结点类型 { string name; double money; char mima[20]; //string mima2; int guashi; int shenfen; struct LNode *next; //指向后继结点 } LinkList; void kaihu(LinkList *&L);//尾插法建立单链表 void ListInsert(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);
- /**
- *版权所有(C)2017,panyanan
- *
- *文件名称: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"); }
运行结果: -
(1) 开户:利用尾插法建立新用户,输入用户名、身份证号、密码、存款金额,显示开户成功。
(2) 存款:所有用户信息储存在单链表中,输入用户名、密码、存款金额,存款成功,显示余额。
(3) 取款:所有用户信息存储在单链表中,输入用户名、密码、取款金额,取款成功,显示余额。
(4) 转账:定义转出账号和转入账号,输入转出金额、转入账号,转入账号的金额不能超过该账号的余额,转出减少的金额,与转入账号增加的金额相同。
(5) 销户:输入要销去账户的姓名、密码,采用销毁单链表的方法,销毁该账户。
(6) 查询:输入用户名、密码,,并显示余额。
(7) 查询所有:输入用户名、密码,输出当前账户是第几个用户,并显余额。
-
-
-
-
心得体会:
本次课程设计基于上学期C++课程实训,把存储结构改成链表。我们对于页面的设计并不要求非常漂亮。因为我们主要是为了完成系统的功能。对于一个银行系统,最基本的功能的就是要有存取款功能,在此基础上还要查询功能、转账功能,功能越多系统就越强健。
在整个过程中,我们遇到了很多问题。整个过程中我们组相互帮助,在尽量少的时间内完成整个系统的开发。虽然系统在规定时间内完成,但是所设计的系统并不完善。有些功能没有实现。例如:我本身还想在系统中对用户的账户增加挂失和解挂的功能。该功能应该是在用户遇到异常情况是对自己账户进行挂失操作,当异常情况解除时可以解挂。由于时间问题,这些问题只是做了相应的分析却来不及完善。这些仍然存在的缺陷我们将来在课余时间会尽量完善。
这次课程设计中,我们求助了老师和同学,有很多解决不了的问题都是通过同学和老师的帮助完成的。我们周围有一些精通代码的同学,在他们指导下我才完成所设计的系统。在设计过程中我从这些同学的身上学到了很多知识,很多是以前没有听过的东西。
这次课程设计我们运用的大多是老师在课堂上带我们做的一些代码。也接触到了以前没有接触到的东西。整个过程我们受益良多,无论我们付出了多少劳动都值得。这次课程设计也为我们将来的毕业设计打下了基础,为我们的人生道路添砖加瓦。