技术支持课--项目实训--储蓄综合业务平台(第一期)--开户功能实现--c语言编写

来源:互联网 发布:剑灵秦义绝捏脸数据 编辑:程序博客网 时间:2024/04/29 09:23

实验目的:制作储蓄综合业务平台

实验内容:实现储蓄的开户功能

* 程序头部注释开始

* 程序的版权和版本声明部分

* 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 dispAnAccount(int i);

//生成账号
int createAccNumber();

//把数据从文件中读到结构体数组中
int readDate();

//把结构体数组中的数据写入文件
int writeDate();


//检查录入的户名.密码.存入金额格式是否合法。返回值: 0: 合法.1: 非法。
//flag: 0: 户名. 1:密码. 2:存入金额。checkstr: 需要检查的项目。
int checkInput(int flag, char *checkStr);

//去除右空格
char *rightTrim(char *str);

//显示所有账户
void queryall();

//得到键盘录入的户名
void getaccName(char accName[]);

//得到键盘录入的密码
void getaccPWD(char accPWD[]);

//得到键盘录入的金额
double getcash();

//得到键盘录入的账号
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;

------------------------------------------------------------------------------

---------------------------------------------------------------------------------

bank.c

-----------------------------------

#include <stdlib.h>
#include <string.h>
#include <conio.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 请输入您的密码:");
  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()
{
 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);
}
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("%1f",&dcash);
  fflush(stdin);
  sprintf(ccash,"%12.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;
}

 ========================================================================

运行结果:

经验积累:

 1.我学会了这些字符%-5s | %-8s | %-6s | %-12s | %4s代表的意思。

2.c语言和C++语言差别不大。

 

 

原创粉丝点击