C语言实训总结2

聊城大学

《C语言实训》

题目    ATM银行管理模拟系统                        

指导教师:         王春哲                

姓名:                               

学号:                                   

班级:                                      

        专业:        电子信息科学与技术              

地点:                                    

        时间:   20##-7-9         20##-7-19       


一、项目名称
   基于控制台的银行存储系统模拟项目

二、功能要求
   模拟ATM银行存储系统,设立管理端和客户端。

     在管理端中,实现开户、查询帐户、修改密码、设置利率、结息和销户的操作。

     在客户端中。实现存款、取款、查询账户、转帐和修改密码的操作。

三、需求分析

   在模拟ATM银行存储系统中,要实现多个账户要运用结构体,更加方便的操作各个用户,使整个程序更加快捷。

要进行各个操作时,运用函数操作方便,整个程序更加合理化。

在客户和管理员查询时,运用指针操作,方便查询。

在整个程序中要对客户和管理员的操作进行保留,所以要进行文件的读写操作,这样文件才能保存      

四、设计思想

模          块          划         分

                          图1

            

                               图二

                           图三

五、具体实现

主函数  

int main()

{

  char choice;  //用于选择

  printf("\t\t欢迎进入ATM机银行仿真模拟系统\n");

  while(1)

  {

  printf("\t\t\t请输入要进入的角色 \n");

  printf("\t\t******************* \n");

  printf("\t\t\t1.客户端\n");

  printf("\t\t\t2.管理端\n");

  printf("\t\t\t3.退出程序\n");

  printf("\t\t******************* \n");

  printf("\n");

  printf("\t请选择:");

  choice=getch();

  switch(choice)

         {

               case '1': user(); 

                            break;

                        case '2': admin();

                            break;

                        case '3': 

                               return 0;

                            break;

                        default:

                                   printf("非法选择,请重新选择\n");

         }

  }

}

结构体

typedef struct

{

     char name[40];       //用户名

        char mima[20];        //用户密码

        char haoma[40];    //  用户号码

        char tel[40];    //   账户电话

        double money;    //存入金额

}Atmuser;

typedef struct

{

     char name1[40];       //用户名

        char mima1[3];        //用户密码

}Atmadmin;

客户端

int kaihumima()

{

       char mima[20];

    if(strcmp(atm1[current].mima,mima)!=0)

                       {

                        printf("两次输入密码不相同,请重新输入\n"); 

                        return 0;

                 }   

}

int load1()

{

  FILE *fs1;

  int count;

  int succ;

  fs1=fopen("AtmuserData.dat","rb");

  if(fs1==NULL)

  {

    printf("不能打开文件\n");

       return 1;

  }

  //判断文件是否有数据

  succ=fseek(fs1,0,SEEK_END);

  if(succ!=0)

  {

      printf("文件操作失败\n");

         fclose(fs1);

         return 1;

  }

 //文件数据大小

  count=ftell(fs1);

  fseek(fs1,0,SEEK_SET);

  total=current=count/sizeof(Atmuser);

  if(atm1==NULL)

  {

     atm1=(Atmuser*)malloc(total*sizeof(Atmuser));

  }

  if(atm1==NULL)

         return 1;

  // count 成功读取几个学生

  count=fread(atm1,sizeof(Atmuser),current,fs1);

  fclose(fs1);

  if(count!=current)

  {

      printf("读取文件失败\n");

         return 1;

  }

     printf("读取文件成功\n");

         return 0;

 

}

int save1()      

{

   int count;

   FILE *fs1;

   fs1=fopen("AtmuserData.dat","wb");

   if(fs1==NULL)

    return 1;

   count=fwrite(atm1,sizeof(Atmuser),current,fs1);

   fclose(fs1);

   if(count!=current)

   {

     printf("保存失败\n");

        return 1;

   }

   //printf("保存文件成功\n");

   return 0;

}

int qukuan()

{

          double moneyqu;    

    printf("当前金额:%lf \n",atm1[q].money);

       printf("温馨提示,您输入的金额必须是100的倍数,切一次不能输入大于两千元 \n");

       printf("请输入 :");

         scanf("%lf",&moneyqu);

   printf("正在处理 请稍后......");

   printf("剩余金额数 :%lf",atm1[q].money-moneyqu);

   atm1[q].money=atm1[q].money-moneyqu;     //取款减少金额

   save1();

   return 0;

}

int cunkuan()

{

       char qq,aa;

          double moneycun;

    printf("当前金额:%lf \n",atm1[q].money);

       qq=atm1[q].money;

       printf("温馨提示,您输入的金额必须是100的倍数,切一次不能输入大于两千元 \n");

       printf("请输入 :");

         scanf("%lf",&moneycun);

   printf("正在处理 请稍后......");

   printf("剩余金额数 :%lf",atm1[q].money+moneycun);

   atm1[q].money=atm1[q].money+moneycun;    //存款增加金额

   printf("%lf",atm1[q].money);

    save1();

   return 0;

}

int chaxunzhanghu1()

{

          printf("账户号码:%s\n",atm1[q].name);

   printf("密码:%s\n",atm1[q].mima);

   printf("姓名:%s\n",atm1[q].haoma);

   printf("电话号码:%s\n",atm1[q].tel);

   printf("金额:%lf \n",atm1[q].money);

  return 0;

}

int zhuanzhang()

{

       char haoma[40];

       double moneyqu;

       int i;

         printf("剩余金额数 :%lf",atm1[q].money);

         printf("请输入要转入的账号");

         scanf("%s",haoma);

   for(i=0;i<current;i++)

   {

       if(strcmp(atm1[i].name,haoma)==0)

          {

                zhuanhao=i;

             printf("请输入要转入的金额");

                  scanf("%lf",&moneyqu);

          printf("剩余金额数 :%lf",atm1[q].money+moneyqu);

          atm1[zhuanhao].money=(atm1[zhuanhao].money+moneyqu); // 转入账户增加金额

                atm1[q].money=atm1[q].money+moneyqu;                // 转账用户减少金额

                printf("转账成功,请注意查收");

                 save1();

                return 0;

          }

   }

   printf("用户不存在 请重新输入");

}

int xiugai()

{

   char mima[20];

       char mima2[20];

   printf("请输入密码 ");

     scanf("%s",mima);

   while(1)

         {        

                  if(strcmp(atm1[q].mima,mima)!=0)

                      {

                         printf("密码不正确,请重新输入");

                         return 0;

                      }

                     if(strcmp(atm1[q].mima,mima)==0)

                            break;

         }

    while(1)

   {

          printf("输入新密码:");

                      scanf("%s",atm1[q].mima);

          printf("请重新输入密码:");

                      scanf("%s",mima);        

          if(strcmp(atm1[q].mima,mima)==0)     

                  save1();

                      break;

       kaihumima();     

   }

       printf("修改成功");

     return 0;

}

int user()

{

  char name[40];

  char mima[20];

  char choice2;

  int i;

  char r=1;

  while(r)

         {            

                      printf("请输入用户名:");

                        scanf("%s",name);

                      printf("请输入密码:");

                        scanf("%s",mima);

                      for(i=0;i<current;i++)

                        {

                               if(strcmp(atm1[i].name,name)==0)        //验证是否存在用户

                               {

                                     if(strcmp(atm1[i].mima,mima)!=0)     //验证该用户的密码

                                          {

                                           printf("密码不正确,请重新输入");

                                           }

                                          if(strcmp(atm1[i].mima,mima)==0)

                                          {

                                                 q=i;

                                                 r=0;

                                              break;

                                          }

                               }

                        }

                      if(strcmp(atm1[i].name,name)!=0)

                   printf("该用户不存在");

         }

  while(1)

  {

             printf("\t\t\t用户端功能主菜单 \n");

          printf("\t\t******************* \n");

                printf("\t\t\t1.取款\n");

                printf("\t\t\t2.存款\n");

                printf("\t\t\t3.查询账户\n");

                printf("\t\t\t4.转账\n");

                printf("\t\t\t5.修改密码\n");

                printf("\t\t\t0.返回上一级\n");

                printf("\t\t******************* \n"); 

          printf("\t请选择:");

                choice2=getch();

                printf("\n\n");

                switch(choice2)

                {

                    case '1':  qukuan(); //取款

                         break;

                       case '2': cunkuan();//存款

                         break;

                       case '3':chaxunzhanghu1();//查询账户

                         break;

                       case '4': zhuanzhang();//转账

                          break;

                       case '5': xiugai();//修改密码

                          break;

                       case '0':

                              return 0;

                          break;

                       default:

                                   printf("非法选择,请重新选择\n");

                }

  }

  return 0;

}

管理端

int save()

{

   int count;

   FILE *fs;

   fs=fopen("AtmadminData.dat","wb");          // 打开文件

   if(fs==NULL)

    return 1;

   count=fwrite(atm,sizeof(Atmadmin),current,fs);    //读取文件数据

   fclose(fs);

   if(count!=current)

   {

     printf("保存失败\n");

        return 1;

   }

   return 0;

}

int load()

{

  FILE *fs;

  int count;

  int succ;

  fs=fopen("AtmadminData.dat","rb");

  if(fs==NULL)

  {

    printf("不能打开文件\n");

       return 1;

  }

  succ=fseek(fs,0,SEEK_END);       //判断文件是否有数据

  if(succ!=0)

  {

      printf("文件操作失败\n");

         fclose(fs);

         return 1;

  }

  count=ftell(fs);    //文件数据大小

  fseek(fs,0,SEEK_SET);

  total=current=count/sizeof(Atmadmin);

  if(atm==NULL)

  {

     atm=(Atmadmin*)malloc(total*sizeof(Atmadmin));

  }

  if(atm==NULL)

         return 1;

  // count 成功读取几个学生

  count=fread(atm,sizeof(Atmadmin),current,fs);

  fclose(fs);

  if(count!=current)

  {

      printf("读取文件失败\n");

         return 1;

  }

     printf("读取文件成功\n");

         return 0;

}

int kaihu()

{

       char mima[20];

       if(atm1==NULL)

       {

         atm1=(Atmuser*)malloc(total*sizeof(Atmuser));

       }

       if(atm1==NULL)

              return 1;

   printf("输入账户号码:");

     scanf("%s",atm1[current].name);

  while(1)                 //设置密码

   {

          printf("输入密码:");

                      scanf("%s",atm1[current].mima);

          printf("请重新输入密码:");

                      scanf("%s",mima);        

          if(strcmp(atm1[current].mima,mima)==0)    

                      break;

       kaihumima();     

   }

    printf("输入账户姓名:");

     scanf("%s",atm1[current].haoma);

   printf("输入电话号码:");

     scanf("%s",atm1[current].tel);

   printf("请输入要存入的金额:");

     scanf("%lf",&atm1[current].money);

   printf("\n账户建立成功 账户信息:");

   printf("账户号码:%s\n",atm1[current].name);

   printf("密码:%s\n",atm1[current].mima);

   printf("姓名:%s\n",atm1[current].haoma);

   printf("电话号码:%s\n",atm1[current].tel);

   printf("存入的金额:%lf \n",atm1[current].money);

   save();     

      current++;

   return 0;

}

int chaxunzhanghu()

{

         char name1[40];

         int i;

   

   printf("请输入要查询的账户号码 :");

    scanf("%s",name1);

       printf("正在处理中,请稍后.......\n");

   for(i=0;i<current;i++)

   {

       if(strcmp(atm1[i].name,name1)==0)                 //查找账户

          {

                  printf("账户号码:%s\n",atm1[i].name);

                        printf("密码:%s\n",atm1[i].mima);

                        printf("姓名:%s\n",atm1[i].haoma);

                        printf("电话号码:%s\n",atm1[i].tel);

                        printf("存入的金额:%lf\n",atm1[i].money);

                        printf("存入信息成功\n 请选择其它操作\n");

                        save();     

                        return 0;

          }

   }

   printf("用户不存在 请重新输入");

}

int xiugaimima()

{

   char mima[20];

   char mima2[20];

   printf("请输入密码 ");

     scanf("%s",mima);

   while(1)

         {

                    

                  if(strcmp("00",mima)!=0)     //验证原密码

                      {

                         printf("密码不正确,请重新输入");

                         return 0;

                      }

                     if(strcmp("00",mima)==0)

                            break;

         }

    while(1)

   {

          printf("输入新密码:");

                      scanf("%s",mima2);

          printf("请重新输入密码:");

                      scanf("%s",mima);        

          if(strcmp(mima2,mima)==0)  

                      break;

       kaihumima();     

   }

     return 0;

}

int shezhililv()

{

   char lilv[40];

   printf("当前的利率为  0.025");

   printf("请输入新利率为 ");

       scanf("%s",lilv);

 

   printf("正在处理中,请稍后.......\n");

       save();        

   printf("利率修改成功 请执行其他操作\n");

   return 0;

}                                               

int xiaohu()

{

   char haoma[40];

   int i;

     printf("请输入要注销的卡号");

   scanf("%s",haoma);

   for(i=0;i<current;i++)

   {

      if(strcmp(atm1[i].name,haoma)==0)               //寻找输入的账户

         {

            if(i<(current-1))

                   memmove(&atm1[i],&atm1[i+1],(current-1-i)*sizeof(Atmuser));   

                      current--;     

                      printf("正在处理中,请稍后.......\n");

                      printf("操作成功!");

                      save();  

                      return 0;

         }

   }

   printf("正在处理中,请稍后.......\n");

   printf("该账户不存在!");

               return 1;

}

int admin()

{

        char choice3;

        char mima1[20];

        if(atm==NULL)                //初始时设置密码

        {

                 atm=(Atmadmin*)malloc(total*sizeof(Atmadmin));

              printf("请设置");

                 scanf("%s",atm[3].mima1);

              save();        

        }

       while(1)                     //验证密码  

       {               

                      printf("请输入密码:");

                        scanf("%s",mima1);

                    

                  if(strcmp("0",mima1)!=0)

                        {

                         printf("密码不正确,请重新输入");

                        }

                     if(strcmp("0",mima1)==0)

                            break;

       }

    while(1)

    {

             printf("\t\t\t管理端功能主菜单 \n");

          printf("\t\t******************* \n");

                printf("\t\t\t1.开户\n");

                printf("\t\t\t2.查询账户\n");

                printf("\t\t\t3.修改密码\n");

                printf("\t\t\t4.设置利率\n");

                printf("\t\t\t5.结息\n");

                printf("\t\t\t6.销户\n");

                printf("\t\t\t0.返回上一级\n");

                printf("\t\t******************* \n"); 

          printf("\t请选择:");

                choice3=getch();

                printf("\n\n");

                switch(choice3)

                {

                    case '1':  kaihu();          //开户

                         break;

                       case '2': chaxunzhanghu();   //查询账户

                         break;

                       case '3': xiugaimima();      //修改密码

                         break;

                       case '4': shezhililv();      //设置利率

                          break;

                       case '5': //jiexi();         //结息

                          break;

                      case '6': xiaohu ();          //销户

                             break;

                       case '0':

                              return 0;

                          break;

                       default:

                                   printf("非法选择,请重新选择\n");

                }

  }

  return 0;

}

六、附录
  

函数功能

int user();             //  用户端

int admin();           //  管理端

int qukuan();          //取款

int cunkuan();         //存款

int chaxunzhanghu();   //查询账户

int zhuanzhang();      //转账

int xiugai();          //修改密码

int kaihu();          //开户

int kaihumima();

int chaxunzhanghu();  //查询账户

int xiugaimima();     //修改密码

int shezhililv();       //设置利率

int jiexi();           // 结息

int xiaohu ();        //销户

相关推荐