实验目的:银行开户系统

来源:互联网 发布:avmoo最新域名地址 编辑:程序博客网 时间:2024/04/30 01:38


* 程序头部注释开始

* 程序的版权和版本声明部分:翻版必究!

* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:    银行开户系统                      
* 作    者:     白传雷                        
* 完成日期:  2011  年   12  月   23   日
* 版 本号:  V1.0      

* 对任务及求解方法的描述部分
* 输入描述:要排序的数据在程序中初始化
* 问题描述:实现开户功能
* 程序输出:开户窗口
* 程序头部的注释结束(此处也删除了斜杠)

 

bank.h函数声明
void welcome();//显示欢迎信息
void mainmenu();//系统主菜单
void openAnAccount();//开户
void closeAnAcount();//销户
void deposit();//存款
void withdraw();//取款
void query();//查询
int findAnAccount(int accNumber);//查找一个帐户在数组中的位置
void dispAnAccout(int i);//显示一个帐户信息
int createAccNumber();//生成帐号
int checkInput(int flag, char *checkStd);//检查录入的户名、密码、存入金额格式是否合法。返回值:0:合法、1:非法。
//flag:0:户名、1:密码、2:存入金额。checkStr:需要检查的项目。
void queryall();//显示所有帐户
void getaccName(char accName[]);//得到键盘录入的户名
void getaccPWD(char accPWD[]);//得到键盘录入的密码
double getcash(int flag);//得到键盘录入的金额
int getaccNumber(int flag);//得到键盘录入的帐号
#define N_MAXREC_NO 100//文件最大行数
#define MAXLINE 256//行最大长度
//数据文件记录结构
struct record
{
int accNumber;//帐号
char accName[9];//户名
int accPWD;//密码
double balance;//余额
char flag[2];//销户标志
};
typedef struct record RECORD;//自定义数据类型
RECORD rs[N_MAXREC_NO];//结构体数组
int maxAccount = 0;//最后一个帐户在结构体中的位置

*********************************************************

*********************************************************

主文件

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<conio.h>
#include"bank.h"
//主函数
void main()
{
 char userName[9];
 char userPWD[7];
 int i;
 welcome();
 for(i = 0; i < 3; i++)
 {
  printf("\n");
  printf("请输入您的用户名:");
  scanf("%s", userName);
  printf("\n");
  printf("请输入您的密码:");
  scanf("%s", userPWD);
  fflush(stdin);
  if((strcmp(userName,"baichuanlei")==0) &&(strcmp(userPWD,"8782745")==0))
  {
   mainmenu();//用户名和密码正确,显示主菜单
  }
  else
  {
   if(i < 2)
   {
    printf("用户名或密码错误,请重新输入!");//用户名或密码错误,提示用户重新输入
   }
   else
   {
    printf("用户名或密码错误,退出系统!");//连续次输错用户名或密码,退出系统。
   }
  }
 }
}
//欢迎函数
void welcome()
{
 printf("+-----------------------------+\n");
 printf("|                             |\n");
 printf("|   欢迎使用储蓄综合业务平台  |\n");
 printf("|                             |\n");
 printf("+-----------------------------+\n");
}

//系统功能菜单函数
void mainmenu()
{
 maxAccount = 0;
 int choice;
 choice = -1;
 do
 {
  printf("\n");
  printf("+-------------------------------------+\n");
  printf("|       存款 请按1   开户请按4       |\n");
  printf("|       取款 请按2   销户请按5       |\n");
  printf("|       查询 请按3   退出请按0       |\n");
  printf("+-------------------------------------+\n");
  printf("请输入您的选择:");
  scanf("%d", &choice);
  fflush(stdin);
  switch(choice)
  {
  case 0:
   exit(0);
  case 1:
   //deposit();
   break;
  case 2:
   //withdraw();
   break;
  case 3:
   //query();
   break;
  case 4:
   openAnAccount();
   break;
  case 5:
   //closeAnAcount();
   break;
  case 6:
   //queryall();
   break;
  default:
   printf("\n 无效选项!");
   break;
  }
 }while(choice !=0);
 return;
}

//获取账户信息函数
void openAnAccount()
{
 int accNumber;//帐号
 char accName[9];//户名
 char accPWD[7];//密码
 double cash;//存入金额
 //初始化变量
 accNumber = 0;
 memset(accName, 0, sizeof(accName));
 memset(accPWD, 0, sizeof(accPWD));
 cash = 0;
 
 accNumber = createAccNumber();//生成帐号
 
 getaccName(accName);//获取账户名称
 
 getaccPWD(accPWD);//获取账户密码
 
 cash = getcash ( 0 );//获取存入金额
 maxAccount++;
 
 rs[maxAccount].accNumber = accNumber;
 strcpy(rs[maxAccount].accName,accName);
 rs[maxAccount].accPWD=int(accPWD);
 rs[maxAccount].balance = cash;
 strcpy(rs[maxAccount].flag,"0"); 
 
 dispAnAccout(maxAccount);
 printf("开户成功!按任意键返回主菜单...");
 getch();
 
 
 return;
}
int createAccNumber()
{
 if(maxAccount == 1)
 {
  //帐号从开始
  return 10001;
 }
 else
 {
  //顺序产生帐号
  return rs[maxAccount].accNumber + 1;
 }
}
//获取帐户名称函数
void getaccName(char accName[])
{
 char caccName[100];
 int i = 1;
 while(i)
 {
  memset(caccName, 0, sizeof(caccName));
  printf("\n");
  printf("请输入储户户名:");
  scanf("%s",caccName);
  fflush(stdin);
  if(checkInput(0, caccName))
  {
   printf("超过位的最大户名长度!\n");
   continue;
  }
  i = 0;
 }
 memcpy(accName, caccName, 9);
}
//获取帐户密码函数
void getaccPWD(char accPWD[])
{
 char caccPWD[100];
 int i=1;
 while(i)
 {
  memset(caccPWD, 0, sizeof(caccPWD));
  printf("\n");
  printf("请输入储户密码:");
  scanf("%s",caccPWD);
  fflush(stdin);
  if(checkInput(1, caccPWD))
  {
   printf("超过位的最大密码长度!\n");
   continue;
  }
  i = 0;
 }
 memcpy(accPWD, caccPWD, 7);
}
//得到键盘录入的金额函数
double getcash(int flag)
{
 char ccash[100];
 double dcash;
 int i = 1;
 while(i)
 {
  memset(ccash, 0, sizeof(ccash));
  dcash = 0;
  printf("\n");
  switch(flag)
  {
  case 0: printf("请输入存入金额:"); break;
  case 1: printf("请输入取款金额:"); break;
  }
  scanf("%lf",&dcash);
  fflush(stdin);
  sprintf(ccash,".2f",dcash);
  if(checkInput(2, ccash))
  {
   printf("录入的金额超过位的最大存入(取出)金额长度!\n");
   continue;
  }
  i = 0;
 }
 return dcash;
}
//显示用户信息函数
void dispAnAccout(int i)
{
 printf("+--------------------------------------------------+\n");
 printf("| %-5s | %-8s | %-6s | %-12s| %4s |\n","帐号","户名","密码","余额","状态");
 printf("+--------------------------------------------------+\n");
 printf("| ] | %-8s | %-6s | .2f| %4s|\n",rs[i].accNumber,rs[i].accName,rs[i].accPWD,rs[i].balance,
  atoi(rs[i].flag)?"销户":"正常");
 printf("+--------------------------------------------------+\n");
}
//检测用户输入信息是否规范
int checkInput(int flag, char *checkStr)
{
 switch(flag)
 {
  //检查户名是否超过最大长度
 case 0:
  {
   if(strlen(checkStr) > 8)
   {
    return 1;
   }
   break;
  }
  //检查密码是否超过最大长度
 case 1:
  {
   if(strlen(checkStr) > 6)
   {
    return 1;
   }
   break;
  }
  //检查存入金额是否超过最大长度
 case 2:
  {
   if(strlen(checkStr) > 12)
   {
    return 1;
   }
   break;
  }
 default:
  return 0;
 }
 return 0;
}

原创粉丝点击