您的位置:首页 > 理论基础 > 数据结构算法

数据结构之程序设计

2015-01-11 19:20 411 查看
 专    业:物联网工程1132班

l学    号:201311672206

 姓   名:黄安杰

 指导老师:易学明

 时    间: 2015.1.11

 

一、实验题目:

小明是一个计算机专业top student,祝贺他毕业了。并准备到银行参加工作。上班第一天,经理叫他编制一个实现一个活期储蓄处理程序,算作考查。上班第一天, 一定要给领导一个好印象,小明二话没说,就答应了。现要你是小明了,请完成如下题目功能。储户开户、销户、存入、支出活动频繁,系统设计要求:

(1)能比较迅速地找到储户的帐户,以实现存款、取款记账;

(2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。

二、实验目的:

通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,选择使用具体语言进行实现。掌握C++较复杂程序的组织和设计过程,调试技巧。学习解决实际问题的能力。

三、实验内容:

储户开户、销户、存入、支出活动频繁,系统设计要求:

(1)能比较迅速地找到储户的帐户,以实现存款、取款记账;

(2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。

四、代码。 

#include<iostream.h>

#include<iomanip.h>

#include <string>

using namespace std;

long num[100],time[100];

float money[100];

char*namek[100];

char*idk[100];

char*telk[100];

char*wplacek[100],*homek[100];

float interest=0;

char yes;

char name[100];

    int get_num( long *num  )   //获取账号

{

for(int j=1;j<=100;j++)

if(num[j]<=0)return j;

cout<<"   账户已满"<<endl;

return 0;

}

                                //填写资料

 void get_inform(  int n,long* num,char**idk,

 char **namek,char**wplacek,char**telk,char**homek)

{

    cout<<"请输入  姓    名:";

cin>>*(namek+n);

cout<<"请输入  电话号码:";

cin>>*(telk+n);

cout<<"请输入  单位名称:";

    cin>>*(wplacek+n);

cout<<"请输入  地    址:";

cin>>*(homek+n);

    cout<<"请输入  密    码:";

cin>>*(num+n);

cout<<"请输入身份证号码:";

cin>>*(idk+n); 

return;

}

                            //个人界面

  void personal(int n,long* time,float *money,long *num,float interest)

 { long t;

  int mtemp,ntemp,loop=0;

  char temp;//loop=0必须放在这里面,否则只能打开一次子菜单

  while(loop==0)              //loop=0不能放到personal外!

  {cout<<"++++++++++++++++++++++++++++++++"<<endl;

  cout<<"    1-存    款"<<endl;

  cout<<"    2-取    款"<<endl;

  cout<<"    3-转    账"<<endl;

      cout<<"    4-销    户"<<endl;

  cout<<"    5-返回主菜单"<<endl;

  cout<<"当前的利率为:"<<ROI<<endl;

      scanf("%c",&temp);

      fflush(stdin);

  if(temp!='1'&&temp!='2'&&temp!='3'&&temp!='4'&&temp!='5')

 cout<<"输入错误,请重新输入\n"<<endl;

  switch(temp)

{

  case '
4000
1':

  cout<<"请输入存款金额:";

  cin>>mtemp;

  *(money+n)+=mtemp;

  cout<<"   交易成功!"<<endl; 

  cout<<"   当前的余额为:"<<*(money+n)<<endl;

  break;

  case '2':

  cout<<"请输入存款时长:";

  cin>>t;

  *(time+n)=t;

  interest+=(0.02*t*(*(money+n)));

  cout<<"   获得利息为:"<<interest<<endl;

          *(money+n)+=interest;

  cout<<"请输入取款金额(<="<<*(money+n)<<"):";

  cin>>mtemp;

  if(mtemp>*(money+n))

  {

  cout<<"   余额不足,交易失败!";

  break;

  }

  *(money+n)-=mtemp;

  cout<<"   交易成功!"<<endl;

  cout<<"   当前的余额为:"<<*(money+n)<<endl; 

  break;

  case '3':

  cout<<"请输入转入账号:";

  cin>>ntemp;

  if(ntemp<1||ntemp>99)

  {

  cout<<"   该账号不存在!"<<endl;

  break;

  }

          if(*(num+ntemp)==0)

  {

  cout<<"   该账号未注册!"<<endl;

  break;

  }

      if(*(num+ntemp)==-1)

  {

  cout<<"   该账户已注销!"<<endl;

  break;

  }

  cout<<"请输入转出金额(<="<<*(money+n)<<"):";

  cin>>mtemp;

  if(mtemp>*(money+n))

  {

  cout<<"   余额不足,交易失败!";

  break;

  }

          cout<<"   确认转账?[Y/N]:";

      cin>>yes;

  if(yes=='Y')

  { 

  *(money+n)-=mtemp;

  *(money+ntemp)+=mtemp;

  cout<<"   交易成功!"<<endl;

  }

  cout<<"   当前的余额为:"<<*(money+n)<<endl;

  break;

  case '4':

  cout<<"   确认注销?[Y/N]:";

  cin>>yes;

  if(yes=='Y')

  {

  cout<<"   已注销!"<<endl;

  *(num+n)=-1;

  }

  loop=1;

  break ;

  case '5':

  loop=1;

  break;

  }

}

}

                                    //打印用户信息

  void print(int n,char**namek,char**wplacek,char**telk,

  char**homek,char**idk,float *money,long*time,float interest) 

                      //不能是char*namek,char*wplacek(二级指针)

  { cout<<"=================================="<<endl;

        cout<<"账      号:"<<setw(6)<<setfill('0')<<n<<endl;

cout<<"姓      名:"<<*(namek+n)<<endl;

      cout<<"单      位:"<<*(wplacek+n)<<endl;

    cout<<"电      话:"<<*(telk+n)<<endl;

      cout<<"地      址:"<<*(homek+n)<<endl;

cout<<"余      额:"<<*(money+n)<<endl;

        cout<<"时      长:"<<*(time+n)<<endl;

        cout<<"利      息:"<<interest<<endl;

cout<<"身份证号码:"<<*(idk+n)<<endl;

      cout<<"=================================="<<endl;

  }

                              //查询

void check(int n,char**namek,char**wplacek,char**telk,

  char**homek,char**idk,float *money,long*time,float interest)
   

  {

  int i=0,k=0;

char j;  //k=0必须放在这里,否则只能打开一次子菜单

 while(k==0) 

 {cout<<"++++++++++++++++++++++++++++++++"<<endl;

 cout<<"       1-按账号查询"<<endl;

 cout<<"       2-按姓名查询"<<endl;

 cout<<"       3-返回上一层"<<endl;

 scanf("%c",&j);

     fflush(stdin);

 if(j!='1'&&j!='2'&&j!='3')

 cout<<"输入错误,请重新输入\n"<<endl;

 switch(j)

 {

 case '1':

 cout<<"请输入账号:";

 cin>>n;

         if(n<1||n>99)

 {

 cout<<"   该账号不存在!"<<endl;

 break;

 }

 if(*(num+n)==0)

 {

 cout<<"   该账号未注册!"<<endl;

 break;

 }

 if(*(num+n)==-1)

 {

 cout<<"   该账户已注销!"<<endl;

 break;

 }

     print( n,namek,wplacek,telk,

  homek,idk,money,time,interest);

break;

 case '2':          

 cout<<"请输入姓名:";

 cin>>name;

 for(j=1;j<=99;j++)

 {

 if(string(*(namek+j))==string(name))

 {

 if(*(num+j)!=-1)

 {

 print( j,namek,wplacek,telk,

           homek,idk,money,time,interest);

 i++;

 }   

 }

 }

 if(i==0)

 cout<<"   该户主不存在!"<<endl;

 break;

 case '3':

 k=1;

 break;

 }

 }

  }

 void main()

{

cout<<"  欢迎进入活期储蓄账目管理 "<<endl;

int r=0,i,m,n;

char temp;

for(i=1;i<=100;i++)

{

num[i]=0;money[i]=0;time[i]=0;

*(namek+i)=new char[100];    //必须先给指针数组分配内存,才可以出入值

*(wplacek+i)=new char[100];  //*号不能省略

*(homek+i)=new char[100];

*(idk+i)=new char[100];

*(telk+i)=new char[100];

}

while(r==0)

{

cout<<"********************************"<<endl;

cout<<"   1-进入帐户"<<endl;

cout<<"   2-开    户"<<endl;

cout<<"   3-查    询"<<endl;

cout<<"   4-退    出"<<endl;

cout<<"********************************\n请选择:"<<endl;

scanf("%c",&temp);

fflush(stdin);

 if(temp!='1'&&temp!='2'&&temp!='3'&&temp!='4')

 cout<<"输入错误,请重新输入\n"<<endl;

 switch(temp)

 {

 case '1':

   cout<<"请输入账号:";

   cin>>n;

   if(n<1||n>99)

   {

   cout<<"   该账号不存在!"<<endl;

   break;

   }

   if(*(num+n)==0)

   {

   cout<<"   该账号未注册!"<<endl;

   break;

   }

   if(*(num+n)==-1)

   {

   cout<<"   该账户已注销!"<<endl;

   break;

   }

   cout<<"请输入密码:";

   cin>>m;

   if(*(num+n)!=m)

   {

   cout<<"   密码错误!";

   break;

   }

   else 

   personal(n,time,money,num,interest);

   break;

 case '2':

 n=get_num(  num  );

 if(n==0)

 break;

 get_inform(n,num, idk,namek,wplacek,telk,homek);

 cout<<"   确认开户?[Y/N]:";

 cin>>yes;

 if(yes=='Y')

 cout<<"   开户成功!\n"<<"   您的账号为:"

 <<setw(6)<<setfill('0')<<n<<endl;

    else *(num+n)=-1;

break;

 case '3':

 check( n,namek,wplacek,telk,homek,idk,money,time,interest);
  

 break;

 case '4':

 r=1;

 cout<<"   再见!"<<endl;

 break;

     

 }  

}

for(i=1;i<100;i++)

{     delete []*(namek+i);   //写成(name)\(name+i)都是不对的!!

      delete []*(wplacek+i);

      delete []*(homek+i);

   delete []*(idk+i);

   delete []*(telk+i);}

}

五、总结。

感觉这学期的数据结构比c++容易懂好多,老师也教得比较好还有很细致,讲课的时候运用一些图像来配合教学让我可以更加形象的理解,以后会更加努力。这个课程设计一开始想用二叉树的节点结构来做得,弄了几天都弄不出来,只得借鉴其他同学的方法来做,太弱了,只有多多努力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 物联网