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

来源:互联网 发布:如何找出excel重复数据 编辑:程序博客网 时间:2024/04/30 20:53
/* (程序头部注释开始)* 程序的版权和版本声明部分* 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; }}

 


	
				
		
原创粉丝点击