//UIMainMenu.h

//****************************************************************************************
//          主-结构体
//****************************************************************************************

//----------------------------------------------------------------------------------------
//数据存储类型
enum { RMB, USD, GBD, HKD, JPY};
//----------------------------------------------------------------------------------------
//货币存储
struct Currency{
 double value;    //金额
 double forex_Rate;   //汇率, RMB  = 1.0   单位:第1元外币兑换人民币的值
 double interest_rate;  //帐号
 int  type;    //币种
};
//----------------------------------------------------------------------------------------
//帐户存储
struct Account{
 char user_id[20];  //帐号
 char password[20];  //用户口令
 struct Currency* sub[5]; //最多存储10种货币
};
//----------------------------------------------------------------------------------------

bool UILogin(struct Account* SetUserInfo,struct Currency* SetSub[]);
bool UIIn(struct Account* SetUserInfo,struct Currency* SetSub[]);
bool UIOut(struct Account* SetUserInfo,struct Currency* SetSub[]);
void UIMainHead(char UserID[]);
bool UISearchOperate(struct Account* SetUserInfo,struct Currency* SetSub[]);
bool UISetInterestRate(struct Account* SetUserInfo,struct Currency* SetSub[]);
bool UISetForexRate(struct Account* SetUserInfo,struct Currency* SetSub[]);
bool UICancelOperate(struct Account* SetUserInfo,struct Currency* SetSub[]);
bool UICreateAccount(struct Account* SetUserInfo,struct Currency* SetSub[]);

//UIMainMenu.cpp

//****************************************************************************************
//         主菜单函数
//函数介绍:
//main:主程序
//ArCharProcess:字符处理,按ESC返回,按Backspace减一个字符
//ArStartProcess:星号处理,按Backspace减一个字符
//ArCharToDouble:字符串转换为双精度
//ArGetCurrentTime:获得当前时间
//ArWait:等待2秒
//ArSaveAccount:存储帐户信息
//UICreateAccount:建立一个新的帐户
//UICancelOperate:取消操作
//UIMainHead:界面头实现
//UILogin:登录界面实现
//UIIn:存款,存指定金额和币种的货币
//UIOut:取指定金额和币种的货币
//UISearchOperate:查询操作
//UISetForexRate:设定汇率
//UISetInterestRate:设定利率
//****************************************************************************************

//----------------------------------------------------------------------------------------
//C文件头

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "direct.h"

//----------------------------------------------------------------------------------------
//自定义文件头

#include "UIMainMenu.h"
#include "Arithmetic.h"

//----------------------------------------------------------------------------------------

void main()
{
 char cInitInfo[21]={"个人理财帐户管理系统"};
 char MenuList[7][20]={"1.  存    款","2.  取    款","3.  查    询",
  "4.  设定利率","5.  设定汇率","6.  取消修改","7.  退    出"};
 
 char cSelect;   //功能号(1-7)字符
 int iNumber;   //功能号(1-7)数字
 char cExternBak[5]={".bak"};//文件扩展名
 char cExternDat[5]={".dat"};//文件扩展名
 bool bQuit=true;  //判断是否是回主界面
 int i=0;
 
 //--------------------------------------------------
 //结构体空间开辟
 Account *SetUserInfo;
 Currency *SetSub[5];
 SetUserInfo=(Account*)malloc(sizeof(Account));
 for(i=0;i<5;i++)
 {
  SetSub[i]=(struct Currency*)malloc(sizeof(struct Currency));
  memset(SetSub[i],0,sizeof(Currency));
 }
 memset(SetUserInfo,0,sizeof(Account));
 //--------------------------------------------------
 do
 {
  
  UILogin(SetUserInfo,SetSub);       //登录
  ArSaveAccount(SetUserInfo,SetSub,cExternBak);   //存储
    
  do
  {  
   
   //声明显示
   system("cls");
   printf("%50s/n/n/n/n",cInitInfo);
   printf("当前日期:");
   ArGetCurrentTime();         //获得当前日期
   printf("/n/n");
   //输入选择菜单
   for(i=0;i<7;i++)
    printf("%42s/n/n",MenuList[i]);
   
   printf("/r请输入功能号(1-7)                                  ");
   printf("/r请输入功能号(1-7):");
   //获得输入字符,为ESC时退出到登录界面
   cSelect=getch();
   iNumber=cSelect-'0';        //功能号(1-7)数字
   
   if(cSelect==27)          //是否为ESC
   {
    iNumber=7;
    bQuit=false;
   }
   if(cSelect>='1' && cSelect<='7')     //范围判定
    putchar(cSelect);
   else
    continue;
   
    
   switch(iNumber)
   {
   case 1:
    printf("/n-------------------------------------------------------------------------------");
    printf("/n信息提示:取款");
    if(UIIn(SetUserInfo,SetSub))     //存指定金额和币种的货币
     bQuit=true;
    break;
   case 2:
    printf("/n-------------------------------------------------------------------------------");
    printf("/n信息提示:存    款");     
    if(UIOut(SetUserInfo,SetSub))     //取指定金额和币种的货币
     bQuit=true;
    break;
   case 3:
    printf("/n-------------------------------------------------------------------------------");
    printf("/n信息提示:查    询");      
    if(UISearchOperate(SetUserInfo,SetSub))   //查    询
     bQuit=true;
    break;
   case 4:
    printf("/n-------------------------------------------------------------------------------");
    printf("/n信息提示:设定利率");      
    if(UISetInterestRate(SetUserInfo,SetSub))  //设定利率
     bQuit=true;
    break;
   case 5:
    printf("/n-------------------------------------------------------------------------------");
    printf("/n信息提示:设定汇率");      
    if(UISetForexRate(SetUserInfo,SetSub))   //设定汇率
     bQuit=true;
    break;
   case 6:
    printf("/n-------------------------------------------------------------------------------");
    printf("/n信息提示:取消操作");     
    if(UICancelOperate(SetUserInfo,SetSub))   //取消操作
     bQuit=true;
    break;
    case 7:
    ArSaveAccount(SetUserInfo,SetSub,cExternDat); //存储
    printf("/n-------------------------------------------------------------------------------");
    printf("/n信息提示:操作成功!  [延时2秒]");
    ArWait();     
    break;
   default:
    break;
   }
  }while(iNumber!=7); //选择7返回登录界面
  
 } while(bQuit);
  for(i=0;i<5;i++)
   free(SetUserInfo->sub[i]);
  free(SetUserInfo);
  SetUserInfo=NULL;
 
 
}

//----------------------------------------------------------------------------------------

bool UILogin(struct Account* SetUserInfo,struct Currency* SetSub[])
{
 //-----------------------------------------------------------
 //定义与声明
 
 FILE* fp;
 
 char cInitInfo[21]={"个人理财帐户管理系统"}; //显示信息
 char cInitUser[10]={"客 户 号:"};    //显示信息 
 char cInitPsw[10]={"客户密码:"};    //显示信息
 
 char cLoginUser[30];    //打开文件时用
 char cUserId[30];     //登录用户名
 char cLoginPsw[20];     //登录用户密码
 
 int i=0;
 
 // int iVari=0;
 // int iVarSear=0;
 //------------------------------------------------------------
 //显示登录信息
 
 while(1)
 {
  
  system("cls"); //清屏
  printf("%50s/n/n/n/n",cInitInfo); //个人理财帐户管理系统
  printf("/r%39s",cInitUser);   //客 户 号:
  
  //用户输入
   if(!ArNameProc(cLoginUser))//用户名处理
   continue;
  
  strcpy(cUserId,cLoginUser); //作为ID备份
  sprintf(cLoginUser,"%s.dat",cLoginUser);
  
   chdir("save"); //进入文件路径
  //打开文件,测试文件名
  fp=fopen(cLoginUser,"rb");
  if(fp==NULL)
  {
   //文件打开失败,建立用户
   strcpy(SetUserInfo->user_id,cUserId); //刚刚输入的用户名,作为帐户名称
   if(UICreateAccount(SetUserInfo,SetSub))
   {
    return 1;
   }
   continue; 
  }
  else
  {
   //文件打开成功,用户存在
   printf("/n/n/n/n%39s",cInitPsw); //客户密码:
   
   //输入密码
   while(1)
   {
     ArStartProcess(cLoginPsw); //获得密码
    
    //获得文件中密码
    fread(SetUserInfo,sizeof(Account),1,fp); //Bug存在处
    if((strcmp(SetUserInfo->password,cLoginPsw)!=0)) 
    { 
     break; //文件打开失败,密码错误
    }
    else
    {
     //     strcpy(cUserId,SetUserInfo->user_id);  //Bug存在处
     for(i=0;i<5;i++)
     {
      fread(SetSub[i],sizeof(Currency),1,fp);
     }
     
     fclose(fp);
     return 1; //操作成功
    }
   }
  }
 }
 fclose(fp);
 return 1;
}

//----------------------------------------------------------------------------------------

bool UIIn(struct Account* SetUserInfo,struct Currency* SetSub[])
{
 //-----------------------------------------------------------
 char cGetValue[20]; //输入的钱存到这里,存款金额
 char cTypeCur;  //币种类型
 char cYN;   //选择Y或N
 char InID[30];
 //-----------------------------------------------------------
 double dGetVal;  //存到结构体中用存款金额,传给结构体用
 int  iCur;   //币种类型,作为结构体下标用
 //-----------------------------------------------------------
 strcpy(InID,SetUserInfo->user_id);
 while(1)
 {
  
  UIMainHead(InID);
  printf("/n/n/n/n请输入存款金额(元):");
  if(!ArCharProcess(cGetValue))//输入金额,字符类型
  {
   return 0; //处理失败,返回
  }
  ArCharToDouble(cGetValue,&dGetVal);//金额转换为double类型
  if(dGetVal<0)
   continue;
  //-----------------------------------------------------------
  printf("/n/n/n/n请输入币种(RMB 0, USD 1, GBD 2, HKD  3, JPY  4):");
  while(1)
  {
   cTypeCur=getch();
   if(cTypeCur==27)
   {
    return 0; //选择ESC,返回主程序
   }
   if(cTypeCur>='0' && cTypeCur<='4')
   {
    putchar(cTypeCur);
    break;
   }
  }
  iCur=cTypeCur-'0'; //传给结构体用
  //-----------------------------------------------------------
  printf("/n/n/n/n是否确认(Y/N)?   [如果选择N,从新输入存款金额]:");
  while(1)
  {
   cYN=getch();
   if(cYN==27)
   {
    return 0; //选择ESC,返回主程序
   }
   else
   {
    if(cYN=='n' || cYN=='N')
    {
     putchar('N');
     break;   //从新初始化
    }
    else if(cYN=='Y' || cYN=='y')
    {
     putchar('Y');
     SetSub[iCur]->value+=dGetVal;
     printf("/n/n/n/n操作成功!  [延时2秒]");
     ArWait();
     return 1;//成功返回
    }
    else
    {
//     printf("/b /b");
     continue;   //从新输入
    }
   }
  }
 }
 return 1; 
}

//----------------------------------------------------------------------------------------

bool UIOut(struct Account* SetUserInfo,struct Currency* SetSub[])
{
 //-----------------------------------------------------------
 char cGetValue[20]; //输入的钱存到这里,存款金额
 char cTypeCur;  //币种类型
 char cYN;   //选择Y或N
 char InID[30];
 //-----------------------------------------------------------
 double dGetVal;  //存到结构体中用存款金额,传给结构体用
 int  iCur;   //币种类型,传给结构体用
 //-----------------------------------------------------------
 strcpy(InID,SetUserInfo->user_id);
 while(1)
 {
  
  UIMainHead(InID);
  printf("/n/n/n/n请输入存款金额(元):");
  if(!ArCharProcess(cGetValue))//输入金额,字符类型
  {
   return 0; //处理失败,返回
  }
  ArCharToDouble(cGetValue,&dGetVal);//金额转换为double类型
  if(dGetVal<0)
   continue;
  //-----------------------------------------------------------
  printf("/n/n/n/n请输入币种(RMB 0, USD 1, GBD 2, HKD  3, JPY  4):");
  while(1)
  {
   cTypeCur=getch();
   if(cTypeCur==27)
   {
    return 0; //选择ESC,返回主程序
   }
   if(cTypeCur>='0' && cTypeCur<='4')
   {
    putchar(cTypeCur);
    break;
   }
  }
  iCur=cTypeCur-'0'; //传给结构体用
  //-----------------------------------------------------------
  printf("/n/n/n/n是否确认(Y/N)?   [如果选择N,从新输入取款金额]:");
  while(1)
  {
   cYN=getch();
   if(cYN==27)
   {
    return 0; //选择ESC,返回主程序
   }
   else
   {
    if(cYN=='n' || cYN=='N')
    {
     putchar('N');
     break;   //从新初始化
    }
    else if(cYN=='Y' || cYN=='y')
    {
     putchar('Y');
     SetSub[iCur]->value-=dGetVal;
     printf("/n/n/n/n操作成功!  [延时2秒]");
     ArWait();
     return 1;//成功返回
    }
    else
    {
//     printf("/b /b");
     continue;   //从新输入
    }
   }
  }
 } 
 return 1;
}

//----------------------------------------------------------------------------------------

void UIMainHead(char UserID[])
{
 char cInitInfo[21]={"个人理财帐户管理系统"};
 char cZhanhao[10]={"帐号:"};
 
 system("cls");
 printf("%50s/n/n/n/n",cInitInfo);
 printf("当前日期:");
 ArGetCurrentTime();
 printf("/t/t/t%s %s",cZhanhao,UserID);
}

//----------------------------------------------------------------------------------------

bool UISearchOperate(struct Account* SetUserInfo,struct Currency* SetSub[])
{
 char UserID[30];
 enum eCoin;
 double ldSum=0;
 
 strcpy(UserID,SetUserInfo->user_id);
 UIMainHead(UserID);
 printf("/n/n/n/n币  种  利  率  汇  率  余  额  价值(RMB)");
 
 for(int i=0;i<5;i++)
 {
  switch(i)
  {
  case RMB:
   printf("/n/n/nRMB");
   break;
  case USD:
   printf("/nUSD");
   break;
  case GBD:
   printf("/nGBD");
   break;
  case HKD:
   printf("/nHKD");
   break;
  case JPY:
   printf("/nJPY");
  default:
   continue;
  }
  printf("/t/t%.4f%%/t/t%.2f/t/t%.2f/t/t%.2f",SetSub[i]->interest_rate,
   SetSub[i]->forex_Rate,SetSub[i]->value,SetSub[i]->forex_Rate*SetSub[i]->value);
  ldSum+=SetSub[i]->forex_Rate*SetSub[i]->value;
 }
 printf("/n/n/n理财帐户总价值(RMB):%.2f",ldSum);
 
 printf("/n/n/n/n请按[回车键]返回上层菜单… …");
 while(getch()!=13);
 return 1;
}

//----------------------------------------------------------------------------------------

bool UISetInterestRate(struct Account* SetUserInfo,struct Currency* SetSub[])
{
 //-----------------------------------------------------------
 char InID[30];
 char cTypeCur;  //币种类型
 char cYN;   //选择Y或N
 //-----------------------------------------------------------
 int  iCur;   //币种类型,作为结构体下标用
 double dRate;  //利率,作为结构传入用
 //-----------------------------------------------------------
 
 strcpy(InID,SetUserInfo->user_id);
 UIMainHead(InID);
 //-----------------------------------------------------------
 printf("/n/n/n/n请输入币种(RMB 0, USD 1, GBD 2, HKD  3, JPY  4):");
 while(1)
 {
  cTypeCur=getch();
  if(cTypeCur==27)
  {
   return 0; //选择ESC,返回主程序
  }
  if(cTypeCur>='0' && cTypeCur<='4')
  {
   putchar(cTypeCur);
   break;
  }
 }
 iCur=cTypeCur-'0'; //作为结构体下标用
 //-----------------------------------------------------------
 printf("/n/n/n/n请输入利率(XX.XXXX%,直接输入百分号前的数字):");
 scanf("%lf",&dRate);
 //-----------------------------------------------------------
 printf("/n/n/n/n是否确认(Y/N)? [如果选择N,从新输入利率] ");
 while(1)
 {
  cYN=getch();
  if(cYN==27)
  {
   return 0; //选择ESC,返回主程序
  }
  else
  {
   if(cYN=='n' || cYN=='N')
   {
    putchar('N');
    break;   //从新初始化
   }
   else if(cYN=='Y' || cYN=='y')
   {
    putchar('Y');
    SetSub[iCur]->interest_rate=dRate;
    printf("/n/n/n/n操作成功!  [延时2秒]");
    ArWait();
    return 1;//成功返回
   }
   else
   {
//    printf("/b /b");
    continue;   //从新输入
   }
  }
 }
 return 1;
}

//----------------------------------------------------------------------------------------

bool UISetForexRate(struct Account* SetUserInfo,struct Currency* SetSub[])
{
 //-----------------------------------------------------------
 char InID[30];
 char cTypeCur;  //币种类型
 char cYN;   //选择Y或N
 //-----------------------------------------------------------
 int  iCur;   //币种类型,作为结构体下标用
 double dRate;  //汇率,作为结构传入用
 //-----------------------------------------------------------
 
 strcpy(InID,SetUserInfo->user_id);
 UIMainHead(InID);
 //-----------------------------------------------------------
 printf("/n/n/n/n请输入币种(RMB 0, USD 1, GBD 2, HKD  3, JPY  4):");
 while(1)
 {
  cTypeCur=getch();
  if(cTypeCur==27)
  {
   return 0; //选择ESC,返回主程序
  }
  if(cTypeCur>='0' && cTypeCur<='4')
  {
   putchar(cTypeCur);
   break;
  }
 }
 iCur=cTypeCur-'0'; //作为结构体下标用
 //-----------------------------------------------------------
 printf("/n/n/n/n请输入汇率:");
 scanf("%lf",&dRate);
 //-----------------------------------------------------------
 printf("/n/n/n/n是否确认(Y/N)? [如果选择N,从新输入汇率] ");
 while(1)
 {
  cYN=getch();
  if(cYN==27)
  {
   return 0; //选择ESC,返回主程序
  }
  else
  {
   if(cYN=='n' || cYN=='N')
   {
    putchar('N');
    break;   //从新初始化
   }
   else if(cYN=='Y' || cYN=='y')
   {
    putchar('Y');
    SetSub[iCur]->forex_Rate=dRate;
    printf("/n/n/n/n操作成功!  [延时2秒]");
    ArWait();
    return 1;//成功返回
   }
   else
   {
//    printf("/b /b");
    continue;   //从新输入
   }
  }
 }
 
 return 1;
}

//----------------------------------------------------------------------------------------

bool UICancelOperate(struct Account* SetUserInfo,struct Currency* SetSub[])
{
 FILE* fp;
 
 char UserID[30];
 
 strcpy(UserID,SetUserInfo->user_id);
 sprintf(UserID,"%s.bak",UserID);
 if(!(fp=fopen(UserID,"rb")))
 {
  printf("/n/n/n/n文件打开失败!");
  ArWait();
  return 0;
 }
 fread(SetUserInfo,sizeof(Account),1,fp);
 for(int i=0;i<5;i++)
 {
  fread(SetSub[i],sizeof(Currency),1,fp);
 }
 printf("/n-------------------------------------------------------------------------------");
 printf("/n信息提示:取消修改成功.");    
 ArWait();
 return 1;
}

//----------------------------------------------------------------------------------------

bool UICreateAccount(Account* SetUserInfo,struct Currency* SetSub[])
{
 //--------------------------------------------------------------
 //
 FILE* fp;
 int i;
 //--------------------------------------------------------------
 //存到结构体中用到的变量定义
 
 char CreateUserID[30];   //建立帐户的名称
 char CreateUserPassword[20]; //建立帐户的密码 
 
 //--------------------------------------------------------------
 //程序中用到,不传到结构体中
 
 char ConfirmPassword[20];  //确认密码正确
 char cYN;      //确定是否为建立帐户
 
 //--------------------------------------------------------------
 strcpy(CreateUserID,SetUserInfo->user_id);
  
  UIMainHead(CreateUserID);
  printf("/n/n/n/n帐户不存,是否建立帐户(Y/N)? ");
  
  cYN=getch();
  
  if(cYN==27) 
   return 0; //为ESC键,返回登录界面
  if(cYN=='Y' || cYN=='y')
  {
   //建立帐户
   putchar('Y');
   printf("                                        ");
   printf("/n/n建立帐户:");
   
   //----------------------------------------------------------
   //密码输入
   while(1)
   {
    printf("/n/n/n请输入密码(小于6位):");
    if(!ArStartProcess(CreateUserPassword))
     continue;// 0;   //按ESC了,返回登录界面
    printf("/n/n/n确认密码:");
    if(!ArStartProcess(ConfirmPassword))
     continue;   //按ESC了,返回登录界面
    if(!strcmp(CreateUserPassword,ConfirmPassword))
    {
     strcpy(SetUserInfo->password,CreateUserPassword);//密码写入结构体中
     sprintf(CreateUserID,"%s.dat",CreateUserID);
     if(!(fp=fopen(CreateUserID,"wb")))
     {
      printf("/n/n文件建立失败! [延时2秒]");
      ArWait();
      return 0;
     }
     for(i=0;i<5;i++)
     {
      SetSub[i]->type=i; //下标作为结构体的分类
     }
     fwrite(SetUserInfo,sizeof(Account),1,fp);
     for(i=0;i<5;i++)
     {
      fwrite(SetSub[i],sizeof(Currency),1,fp);
     }
     fclose(fp);
     printf("/n/n文件建立成功! [延时2秒]");
     ArWait();
     return 1;
    }
    else
    {
     printf("/n/n两次输入的密码不一致,请从新输入!");
     continue;
    }
   }
  }
  else if(cYN=='N' || cYN=='n')
  {
   //不建立帐户
   putchar('N');
   return 0;
  }
  else
  {
   printf("/n/n/n选择错误! [延时2秒]");
   ArWait();
   return 0;
  }
 
 
 return 0;
}

//----------------------------------------------------------------------------------------

//Arithmetic.h

bool ArNameProc(char cGetValue[]);
bool ArSaveAccount(struct Account* SetUserInfo,struct Currency* SetSub[],char* cExtern);
void ArWait();
void ArGetCurrentTime();
bool ArCharProcess(char cGetValue[]);
void ArCharToDouble(char* cCashChar,double* dCtoD);
bool ArStartProcess(char cGetValue[]);

//Arithmetic.cpp

//****************************************************************************************
//         算法及实现
//****************************************************************************************

#include "conio.h"
#include "stdio.h"
#include "string.h"
#include "time.h"

#include "Arithmetic.h"
#include "UIMainMenu.h"

//----------------------------------------------------------------------------------------

bool ArNameProc(char cGetValue[])
{
 char GetChr='/0'; //获得一个字符,作为中间变量
 int i=0;
 bool bFT=false;
 
 do
 {
  i=0;
  while(i!=19/*GetChr!='/r'*/)  //判断是否是回车符
  {
   GetChr=getch();
   
   //   if(GetChr<'0' || GetChr>'9')
   //    continue;
   
   if(i==18/*GetChr=='/r'*/) //判断是否是回车符
   {
    cGetValue[i]='/0';
    return 1;  //字符串处理成功
   }
   if(GetChr==27)  //判断是否是ESC键
    return 0;  //处理失败返加
   if(GetChr==8)  //判断是否是BackSpace键
   {
    if(i>0)
    {
     --i;
     printf("/b /b"); //算法,减一个字符
    }
    else
    {
     break;
    }
   }
   else
   {
    if(GetChr>='0' && GetChr<='9')
    {
     putchar(GetChr);
     cGetValue[i++]=GetChr;
    }
   }
   
  }
  cGetValue[i]='/0';  //作为结束标记
 }while(1);
 return 1;     //字符串处理成功
}

//----------------------------------------------------------------------------------------

bool ArSaveAccount(struct Account* SetUserInfo,struct Currency* SetSub[],char* cExtern)
{
 FILE* fp;
 
 char SaveUserID[30];
 
 int i;
 
 strcpy(SaveUserID,SetUserInfo->user_id);
 sprintf(SaveUserID,"%s%s",SaveUserID,cExtern);
 if(!(fp=fopen(SaveUserID,"wb")))
 {
  printf("/n/n文件存储失败!");
  ArWait();
  fclose(fp);
  return 0; //失败返回
 }
 fwrite(SetUserInfo,sizeof(Account),1,fp);
 for(i=0;i<5;i++)
 {
  fwrite(SetSub[i],sizeof(Currency),1,fp);
 }
 fclose(fp);
 return 1;
}

//----------------------------------------------------------------------------------------

void ArWait()
{
 clock_t start;  //等待2秒开始
 clock_t end;  //等待2秒结束
 
 start=clock();
 while(1)
 {
  end=clock();
  if((end-start)/1000>1)
   break;
 }
}

//----------------------------------------------------------------------------------------

void ArGetCurrentTime()
{
 char dbuffer [9];
 _strdate( dbuffer );
 printf( "%s", dbuffer );
   
}

//----------------------------------------------------------------------------------------

bool ArCharProcess(char cGetValue[])
{
 char GetChr='/0'; //获得一个字符,作为中间变量
 int i=0;
 bool bFT=false;
 
 do
 {
  i=0;
  while(GetChr!='/r')  //判断是否是回车符
  {
   GetChr=getch();
   
   //   if(GetChr<'0' || GetChr>'9')
   //    continue;
   
   if(GetChr=='/r') //判断是否是回车符
   {
    cGetValue[i]='/0';
    return 1;  //字符串处理成功
   }
   if(GetChr==27)  //判断是否是ESC键
    return 0;  //处理失败返加
   if(GetChr==8)  //判断是否是BackSpace键
   {
    if(i>0)
    {
     --i;
     printf("/b /b"); //算法,减一个字符
    }
    else
    {
     break;
    }
   }
   else
   {
    if(GetChr>='0' && GetChr<='9')
    {
     putchar(GetChr);
     cGetValue[i++]=GetChr;
    }
   }
   
  }
  cGetValue[i]='/0';  //作为结束标记
 }while(1);
 return 1;     //字符串处理成功
}

//----------------------------------------------------------------------------------------

void ArCharToDouble(char* cCashChar,double* dCtoD)
{
 int i=0,j=1;
 double bak=0.0;
 double dVar=0.0;
 
 bool bTF=false;
 
 while(cCashChar[i]!='/0' && cCashChar[i]!='/r')
 {
  if(bTF)
  {
   bak=(cCashChar[i]-'0');   
   dVar=dVar+bak/(j*10);
   j=j*10;
   i++;
   continue;
  }
  
  if(cCashChar[i]!='.')
  {
   dVar=dVar*10;   
   bak=cCashChar[i]-'0';
   dVar=dVar+bak;
  }
  else
  {
   bTF=true;
   i++;
   continue;
  }
  i++;
 }
 *dCtoD=dVar;
}

//----------------------------------------------------------------------------------------

bool ArStartProcess(char cGetValue[])
{
 char GetChr='/0'; //获得一个字符,作为中间变量
 int i=0; 
 
 while(1)
 {
  i=0;
  while(GetChr!='/r' && i<=6)  //判断是否是回车符
  {
   GetChr=getch();
   if(GetChr=='/r' && i<=6) //判断是否是回车符
   {
    if(i==6)
    {
     cGetValue[i]='/0';
     return 1;  //字符串处理成功
    }
    else
     return 0;
   }
   if(GetChr==27)  //判断是否是ESC键
    return 0;  //处理失败返加
   if(GetChr==8)  //判断是否是BackSpace键
   {
    if(i>0)
    {
     --i;
     printf("/b /b"); //算法,减一个字符
    }
    else
    {
     break;
    }
   }
   else
   {
    putchar('*');
    cGetValue[i++]=GetChr;
   }
   
  }
  cGetValue[i]='/0';  //作为结束标记
  return 1;    //成功返回
 }
 return 1;     //成功返回
}

//----------------------------------------------------------------------------------------
//有什么改进的地方请大家联系我

//lixinghuasea@163.com

个人理财帐户管理系统C语言源码相关推荐

  1. m3u8云切片程序PHP视频切片转码系统易语言源码(支持添加视频水印)

    文章目录 前言 一.m3u8云切片程序PHP视频切片转码系统易语言源码(支持添加视频水印) 二.程序演示与下载 1.程序演示 2.程序下载 前言 这里就不过多赘述了,上篇文章对m3u8也做过介绍了,这 ...

  2. m3u8切片程序PHP视频切片软件转码系统易语言源码 云转码工具源码

    前端为易语言源码(含模块),后端为php源码[代码全开源 无加密]方便各种二开! 1.切片自动上传至你的服务器(m3u8链接) 2.切片完成后提示音 3.切片完成后(在软件上会自动显示地址) 4.批量 ...

  3. 基于JAVA框架的电脑测评系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA框架的电脑测评系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA框架的电脑测评系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: 项目 ...

  4. 基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA江西婺源旅游文化推广系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B ...

  5. 基于Java毕业设计校园外卖系统Web端源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计校园外卖系统Web端源码+系统+mysql+lw文档+部署软件 基于Java毕业设计校园外卖系统Web端源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S ...

  6. 基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部 ...

  7. 基于JAVA医院医护人员排班系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA医院医护人员排班系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA医院医护人员排班系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: ...

  8. 基于JAVA酒店订房系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA酒店订房系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA酒店订房系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技术栈: 项目架构:B/S ...

  9. 基于JAVA便行顺风车出行系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA便行顺风车出行系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA便行顺风车出行系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

最新文章

  1. H5 App开发工具 WeX5
  2. spring boot配置logback日志
  3. android gridview行分割线,Android使用GridView实现表格分割线效果
  4. 打开mysql的远程连接_开启mysql的远程访问权限
  5. Jmeter之CSS选择器/JQuery选择器关联
  6. 大兴新年大集 推10条文化旅游线
  7. mysql拆分盘数据库_数据库拆分
  8. 计算机应用基础doc,计算机应用基础.doc
  9. 【飞行器】基于matlab GUI四旋翼飞行器PID控制仿真【含Matlab源码 1279期】
  10. tomcat与java的版本_Tomcat JVM版本与JAVA_HOME不同
  11. web通用组件+Axure原型+Axure元件库+Axure后台管理系统框架模板+大屏数据可视化元件库+智慧社区管理系统大屏+图表组件+表单组合+智慧数据看板+通用大屏图表原件库+电脑端常用组件
  12. php毕业综合实践报告范文,php毕业实习报告
  13. Android小程序-简易计算器的实现
  14. java哥验证德巴赫猜想,C语言验证哥德巴赫猜想
  15. JOHNSON TROTTER 的全排列算法
  16. river歌曲表达的意思_lost rivers是什么意思什么梗 歌曲含义与背后故事揭秘
  17. [时间序列分析][4]--AR模型,MA模型,ARMA模型介绍
  18. 防Google图书部分代码
  19. matlab矩阵太大内存,Matlab下大矩阵运算
  20. TWAIN开发实战:10分钟内实现web应用中的扫描仪调用!

热门文章

  1. GPS卫星定位测量基础-卫星多普勒定位技术
  2. 5.基于深度学习的轴承故障诊断--连续小波变换cwt
  3. 怎样做一个优秀的(懒惰的)系统管理员
  4. Oracle 11G OCP 1Z0-053 475
  5. 计算机动画制作初步视频,计算机动画制作初步
  6. es6模板字符串中标签模板作为参数时产生空元素的问题
  7. python字典添加元素_Python之字典添加元素的几种方法
  8. 实战|仿应用宝下载并安装App(附源码)
  9. CBP认证是什么?区块链专业人员认证含金量大吗?
  10. SVS打造智能指挥中心成功案例