⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c语言原码.txt

📁 C语言编写的个人理财系统
💻 TXT
📖 第 1 页 / 共 2 页
字号:
//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();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -