C++技术支持项目-综合储物业务平台

这是一个银行储物业务模拟系统,支持开户、销户、存款、取款和查询等功能。系统采用C语言编写,通过简单的界面与用户交互,实现基本的银行账户管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称: 技术支持项目-综合储物业务平台                            
* 作    者: 李洪悬                             
* 完成日期:   2012    年   1   月   4     日
* 版 本 号:          
* 对任务及求解方法的描述部分
* 输入描述:帐户信息
* 问题描述:技术支持项目-综合储物业务平台
* 程序输出:生成帐户* 程序头部的注释结束

项目-综合储物平台头文件
//显示欢迎信息
void welcome();

//系统主菜单
void mainmenu();

//开户
void openAnAccount();

//销户
void closeAnAcount();

//存款
void deposit();

//取款
void withdraw();

//查询
void query();

//查找一个账户在数组中的位置
int findAnAccount(int accNumber);

//显示一个账户的信息
void dispAnAccount(int i);

//生成账号
int createAccNumber();

//检查录入的户名.密码.存入金额格式是否合法。返回值: 0: 合法.1: 非法。
//flag: 0: 户名. 1:密码. 2:存入金额。checkstr: 需要检查的项目。
int checkInput(int flag, char *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];//户名
 
 char accPWD[7];//密码
 
 double balance;//余额
 
 char flag[2];//销户标志
};
//自定义数据类型
typedef struct record RECORD;

//结构体数组
RECORD rs[N_MAXREC_NO];

//最后一个账户在结构体中的位置
int maxAccount = -1;

 

 

项目-综合储物平台源文件

#include <string.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <ctype.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);
  
  fflush(stdin);
  
  printf("\n");
  
  printf("请输入您的密码:");
  
  scanf("%s",userPWD);
  
  fflush(stdin);
  
  if ( (strcmp (userName, "admin") == 0) && (strcmp (userPWD, "admin") == 0) )
  {
   //用户名和密码正确,显示主菜单
   mainmenu();
  }
  else
  {
   if (i < 2)
   {
    //用户名或密码错误,提示用户重新输入
    printf("用户名或密码错误,请重新输入!");
   }
   else
   {
    //连续三次输错用户名或密码,退出系统。
    printf("用户名或密码错误,退出系统!");
   }
  }
 }
 
}


//显示欢迎的函数
void welcome()
{
 printf("+----------------------------+\n");
 
 printf("|                            |\n");
 
 printf("|  欢迎使用储蓄综合业务平台  |\n");
 
 printf("|                            |\n");
 
 printf("+----------------------------+\n");
}


//系统主菜单函数
void mainmenu()
{
 char choice = -1;
 
 do
 {
  printf("\n");
  
  printf("+-------------------------------------+\n");
  
  printf("|     存款请按1       开户请按4     |\n");
  
  printf("|     取款请按2       销户请按5     |\n");
  
  printf("|     查询请按3       退出请按0     |\n");
  
  printf("+-------------------------------------+\n");
  
  printf("请输入您的选择:");
  
  scanf("%c", &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无效选项!");
  }
 }while(choice != 0);
}


//开户函数
void openAnAccount()
{
 int accNumber;//账号
 
 char accName[9];//户名
 
 char accPWD[7];//密码
 
 double cash;//存入金额
 
 //初始化变量
 accNumber = 0;
 
 memset ( accName, 0, sizeof(accName) );
 
 memset ( accPWD, 0, sizeof(accName) );
 
 cash = 0;
 
 //生成账号
 accNumber = createAccNumber();
 
 //获取账户名称
 getaccName(accName);
 
 //获取账户密码
 getaccPWD(accPWD);
 
 //获取存入金额
 cash = getcash(0);
 
 maxAccount++;
 
 rs[maxAccount].accNumber = accNumber;
 
 strcpy(rs[maxAccount].accName,accName);
 
 strcpy(rs[maxAccount].accPWD,accPWD);
 
 rs[maxAccount].balance = cash;
 
 strcpy(rs[maxAccount].flag,"0");
 
 //显示账户信息
 dispAnAccount(maxAccount);
 
 printf("开户成功!按任意键返回主菜单...");
 
 getch();
 
 return;
}


//显示用户信息函数
void dispAnAccount(int i)
{
 printf("+-------------------------------------------------+\n");
 
 printf("| %-5s | %-8s | %-6s | %-12s | %4s |\n","账号","户名","密码","余额","状态");
 
 printf("+-------+----------+--------+--------------+------+\n");
 
 printf("| %-5d | %-8s | %-6s | %-12.2f | %4s |\n",rs[i].accNumber,rs[i].accName,
  rs[i].accPWD,rs[i].balance,atoi(rs[i].flag)?"销户":"正常");
 
 printf("+-------------------------------------------------+\n");
}


//自动生成账号函数
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;
}


//检查账户信息规范函数
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;
}


//存款函数
void deposit()
{
 int accNumber;//账号
 
 int accountPosition;//账户在数组中位置
 
 double cash;//存入金额
   
 //初始化
    accNumber = 0;
 
 accountPosition = -1;//-1,表示未找到
 
    cash = 0;
 
 //获取存款账号
 accNumber = getaccNumber(0);
 
 //查找该账户
 accountPosition = findAnAccount(accNumber);
 
 if (accountPosition == -1)
 {
  printf("查无此账户,按任意键返回...");
  
  getch();
  
  return;
 }
 //显示账户信息
 dispAnAccount(accountPosition);
 
 //已销户账户,不能进行存款操作
 if (strcmp (rs[accountPosition].flag,"0") != 0)
 {
  printf("该账户已经销户,不能存款!按任意键返回...");
  
  getch();
  
  return;
 }
 //得到存款金额
 cash = getcash(0);
 
 rs[accountPosition].balance = rs[accountPosition].balance + cash;
 
 
 dispAnAccount(accountPosition);
 
 printf("存款成功!按任意键返回...");
 
 getch();
}


//取款函数
void withdraw()
{
 int accNumber;//账号
 
 char accPWD[7];//密码
 
 int accountPosition;//账户在数组中位置
 
 double cash;//取出金额
   
 //初始化
    accNumber = 0;
 
 accountPosition = -1;//-1,表示未找到
 
 memset (accPWD, 0, sizeof (accPWD));
 
    cash = 0;
 
 //获取取款账号
 accNumber = getaccNumber(1);
 
 //获取取款密码
 getaccPWD (accPWD);
 
 
 //查找该账户
 accountPosition = findAnAccount(accNumber);
 
 if (accountPosition == -1)
 {
  printf("查无此账户,按任意键返回...");
  
  getch();
  
  return;
 }

 //显示账户信息
 dispAnAccount(accountPosition);
 
 //已销户账户,不能进行取款操作
 if (strcmp (rs[accountPosition].flag,"0") != 0)
 {
  printf("该账户已经销户,不能取款!按任意键返回...");
  
  getch();
  
  return;
 }
 
    //密码不正确
 if(strcmp(rs[accountPosition].accPWD, accPWD) != 0)
 {
  printf("\n密码不正确!按任意键返回...");
  
  getch();
  
  return;
 }
 
 //得到取款金额
 cash = getcash(1);

 //比较金额大小
 if( rs[accountPosition].balance < cash)
 {
  printf ("余额不足,按任意键返回...");
 }
 else
 {
  rs[accountPosition].balance = rs[accountPosition].balance - cash;
  
  dispAnAccount(accountPosition);
  
  printf("取款成功!按任意键返回...");
  
  getch();
 }
}


//获取账号函数
int getaccNumber (int flag)
{
 int iaccNumber;//账号
 
 iaccNumber = 0;
 
 printf("\n");
 
 switch(flag)
 {
 case 0: printf ("请输入要存款的账号"); break;
  
 case 1: printf ("请输入要取款的账号"); break;
  
 case 2: printf ("请输入要销户的账号"); break;
  
 case 3: printf ("请输入要查询的账号"); break;
 }
 scanf( "%d" , &iaccNumber );
 
 fflush(stdin);
 
 return iaccNumber;
}


//查找账户函数
int findAnAccount (int accNumber)
{
 int accountPosition;//账户在数组中位置
 
 
 if (accNumber <=  rs[maxAccount].accNumber)
 {
  accountPosition = accNumber - 10001 ;
  
 }
 
 
 return accountPosition;
}


//查询函数
void query()
{
 int accNumber;//账号
 
 char accPWD[7];//密码
 
 int accountPosition;//账户在数组中的位置
 
 
 //初始位置是-1,表示未找到
 accountPosition = -1;
 
 accNumber = 0;
 
 memset (accPWD, 0, sizeof (accPWD));
 
 
 //获取要查询的账户
 accNumber = getaccNumber(3);
 
 //获取要查询的账户密码
 getaccPWD(accPWD);
 
 //查找此账户
 accountPosition = findAnAccount(accNumber);
 
 if (accountPosition == -1)
 {
  printf ("查无此账户,按任意键返回...");
  
  getch();
  
  return;
 }
 
 //显示账户信息
 dispAnAccount (accountPosition);
 
 //密码不正确
 if (strcmp (rs[accountPosition].accPWD,accPWD) != 0)
 {
  printf ("\n密码不正确!按任意键返回...");
  
  getch();
  
  return;
 }
 //已销户账户
 if (strcmp(rs[accountPosition].flag, "0")  != 0)
 {
  printf ("\n该账户已经销户!按任意键返回...");
  
  getch();
  
  return;
 }
 printf ("\n查询成功!按任意键返回...");
 
 getch();
 
 return;
}


//销户函数
void closeAnAcount()
{
 int accNumber;//账号
 
 char accPWD[7];//密码
 
 char userAnswer;//用户的回答
 
 int accountPosition;//账户在数组中的位置
 
 
 
 //初始化
 accountPosition = -1;//-1,表示未找到
 
 accNumber = 0;
 
 memset ( accPWD, 0, sizeof(accPWD) );
 
    //获取要销户的账号
 accNumber = getaccNumber(2); 
 
    //获取要销户的账户密码
 getaccPWD(accPWD);    
 
    //查找该帐户
 accountPosition = findAnAccount(accNumber);    
 
 if(accountPosition == -1)
 {
  printf("查无此帐户,按任意键返回...");
  
  getch();
  
  return;
 }
 //显示账户信息
 dispAnAccount(accountPosition);
 
    //密码不正确
 if ( strcmp(rs[accountPosition].accPWD , accPWD) != 0 )
 {
  printf("\n密码不正确!按任意键返回...");
  
  getch();
  
  return;
 }
    //账户已销户
 if( strcmp (rs[accountPosition].flag, "0") != 0 )
 {
  //已销户帐户,不能再次销户
  printf("该帐户已经销户,不能再次销户,按任意键返回...");
  
  getch();
  
  return;
 }
 
 printf("确认将帐户 %d 销户吗? [1:销户 | 其他:不销户]",rs[accountPosition].accNumber);
 
 scanf ("%c", &userAnswer);
 
 fflush(stdin);
 
 if(userAnswer == '1')
 {
  strcpy(rs[accountPosition].flag, "1");
  
  rs[accountPosition].balance = 0;
  
  dispAnAccount (accountPosition);
  
  printf("销户成功!按任意键返回...");
  
  getch();
  
  return;
 }
 printf("用户取消销户!按任意键返回...");
 
 getch();
 
 return;
}


//全部查询函数
void  queryall()
{
 int accountPosition;//账户在数组中位置
 
 int i;//循环控制变量
 
 if (maxAccount >= 0)
 {
  for (i = 0; i <= maxAccount; i++)
  {
   accountPosition = i;
   
   dispAnAccount(accountPosition);
  }
 }
 else
 {
  printf ("查无此账户,按任意键返回...");
  
  getch();
  
  return;
  
 }
 if (maxAccount >= 0)
 {
  printf ("\n全部查询成功!按任意键返回...");
  
  getch();
  
  return;
 }
}

 






                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值