大一下课程设计————银行活期储蓄系统

这次敲大作业感受良多,尽管是一个相对简单地题目(也许是我写的功能太少了...)
其中出现了很多很多的bug让我一度崩溃,各种逻辑错误层出不穷,通过反复请教度娘解决了产生bug的人后终于完成了。。

这次的C++代码使用单链表来存储,通过设置密码来限制访问。用结构体作为链表的结点,没有使用类的多态性主要是觉得没有必要。。。下面附上代码吧,把bug解决了之后还是很自豪的,希望毕业了能做个程序猿,工作个三五年之后回头看现在这个代码能好好地批评一顿现在的我,这么垃圾的代码写出来还自豪什么o(▼皿▼メ;)o

#include<iostream>
#include<string>
using namespace std;
struct account
{
 int count;        //编号
 double data;       //余额
 account *next;
 char name[20];       //帐号人姓名
 char password[20];      //密码
};
class ConsumerList
{
public:
 ConsumerList();
 ~ConsumerList();
 int Locate();       //按编号查找
 char Get();        //按名字查找
 void Add();        //入户
 void Delete();
 int PrintList();      //遍历所有人的信息
 void Print(account *p);
 int Deposit(account *p);    //存款
 int Withdrawal(account *p);    //取款
private:
 account *first;
 int count;
};
ConsumerList::ConsumerList()
{
 first=new account;
 first->next=NULL;
 first->count=0;
 first->data=0;
 strcpy(first->name,"NULL");
 strcpy(first->password,"0");
}
ConsumerList::~ConsumerList()
{
 account *q=NULL;
 while(first!=NULL)
 {
  q=first;
  first=first->next;
  delete q;
 }
}
void ConsumerList::Add()
{
 double data;
 char *p=new char[20];
 char *c=new char[20];
 cout<<"  开户人姓名: ";
 cin>>p;
 cout<<endl<<"  存款数额: ";
 cin>>data;
 cout<<endl<<"  请设置密码: ";
 cin>>c;
 account *node=new account;
 node->count=0;
 node->data=data;
 strcpy(node->name,p);
 strcpy(node->password,c);
 account *a=new account;
 account *b=new account;
 a=first;
 b=first;
 int count=0;
 while(a!=NULL)
 {
  b=a;
  a=a->next;
  node->count=++count;
 }
 node->next=b->next;
 b->next=node;
 cout<<"  您账户的编号是: "<<node->count<<endl;
}
int  ConsumerList::Locate()
{
 int x,i;
 char *a=new char [20];
 cout<<"  输入你要查找的用户的编号:";
 cin>>x;
 account *p=first;
 while(p!=NULL)
 {
  if(p->count==x)
  {
   cout<<"  请输入密码: ";
   cin>>a;
   if(strcmp(p->password,a)==0)
   {
    Print(p);
    break;
   }
   else
   {
    cout<<"  密码错误";
    return 0;
   }
  }
  else p=p->next;
 }
 if(p==NULL)
 {
 cout<<"  查找不到,请重试:";
 return 0;
 }
 else do
 {
  cout<<"  1---存款"<<endl;
  cout<<"  2---取款"<<endl;
  cout<<"  3---取消"<<endl;
  cout<<"  ";
  cin>>i;
  switch(i)
  {
  case 1:Deposit(p);break;
  case 2:Withdrawal(p);break;
  case 3:break;
  default:cout<<"  错误选择!请重选"<<endl;break;
  }
  }
  while(i!=3);
  return 0;
 
}
char ConsumerList::Get()
{
 int i;
 char *d=new char[20];
 char *e=new char[20];
 cout<<"  输入你要查找的用户的名字:";
 cin>>d;
 account *p=first;
 while(p!=NULL)
 {
  if(strcmp(p->name,d)==0)
  {
   cout<<"  请输入账户密码: ";
   cin>>e;
   if(strcmp(p->password,e)==0)
   {
    Print(p);
    break;
   }
   else
   {
    cout<<"  密码错误";
    return 0;
   }
  }
 else p=p->next;
 }
 if(p==NULL)
 {
  cout<<"  查找不到,请重试:"<<endl;;
  return 0;
 }
 else do
 {
  cout<<"  1---存款"<<endl;
  cout<<"  2---取款"<<endl;
  cout<<"  3---取消"<<endl;
  cout<<"  ";
  cin>>i;
  switch(i)
  {
  case 1:Deposit(p);break;
  case 2:Withdrawal(p);break;
  case 3:break;
  default:cout<<"  错误选择!请重选"<<endl;break;
  }
  }
  while(i!=3);
 return 0;
}
void ConsumerList::Delete()
{
 cout<<"  输入你要销户的账户编号: ";
 int x;
 char *a=new char [20];
 cin>>x;
 account *p,*q;
 q=new account;
 p=first;
 while(p->count!=x&&p!=NULL)
 {
  q=p;
  p=p->next;
 }
 cout<<"  请输入账户密码: ";
 cin>>a;
 if(strcmp(p->password,a)==0)
  if(p->next==NULL)
  {
   q->next=NULL;
   delete p;
  }
  else
  {
  q=p->next;
  cout<<"  您所删除的账户信息为:";
  Print(p);
  p->data=q->data;
  p->count=q->count;
  strcpy(p->name,q->name);
  p->next=q->next;
  delete q;
  }
 else
 {
  cout<<"  密码错误,取消销户操作";
 }
}
void ConsumerList::Print(account *p)
{
 cout<<"  编号:"<<p->count<<"   余额:"<<p->data<<"   姓名:"<<p->name<<endl;
}
int ConsumerList::PrintList()
{
 char *p=new char[20];
 cout<<"  请输入密码:";
 cin>>p;
 cout<<endl;
 if(strcmp(p,"123456789")==0);
 else
 {
  cout<<"  密码错误"<<endl;
  return 0;
 }
 account *q=new account;
 q=first;
 while(q!=NULL)
 {
  q=q->next;
  if(q==NULL)
  {
   cout<<"  本系统先阶段暂无客户开户信息,请等有客户开户后再使用本功能";
   return 0;
  }
  else
   Print(q);
 }
 return 0;
}
int ConsumerList::Deposit(account *p)
{
 int x;
 cout<<"  存入金额整数:";
 cin>>x;
 if(x<0)
 {
  cout<<"  输入错误,请存入大于0的金额数"<<endl;
  return 0;
 }
 else
 {
 p->data=p->data+x;
 return 0;
 }
}
int ConsumerList::Withdrawal(account *p)
{
 int x;
 cout<<"  取出金额整数:";
 cin>>x;
 if(x>p->data)
 {
  cout<<"  输入错误,请取出金额数目少于或等于您账户现存余额"<<endl;
   return 0;
 }
 else
 {
 p->data=p->data-x;
 return 0;
 }
}
int main()
{
 ConsumerList a;
 int i;
 cout<<"   欢迎使用自助银行"<<endl<<endl;
 cout<<"  本系统直接连接中国建设银行,拥有开户、销户、查询账户信息、存款、取款功能"<<endl<<endl;
 do
 {cout<<endl;
 cout<<"  1---入户"<<endl;
 cout<<"  2---查询名字"<<endl;
 cout<<"  3---查询编号"<<endl;
 cout<<"  4---销户"<<endl;
 cout<<"  5---显示所有人信息(内部人员使用)"<<endl;
 cout<<"  6---退出"<<endl;
 cout<<"  ";
 cin>>i;
 switch(i)
 {
 case 1:a.Add();
        break;
 case 2:a.Get();
  break;
 case 3:a.Locate();
  break;
 case 4:a.Delete();
  break;
 case 5:a.PrintList();
  break;
 case 6: break;
 default:cout<<"  错误选择!请重选";
  break;
 }
 }while(i!=6);
 cout<<"谢谢使用自助银行系统,祝您一路顺风";
 return 0;
}

猜你喜欢

转载自blog.csdn.net/Joan_of_arc_Alter/article/details/80723971
今日推荐