标题:求大神给我解释一下下面的程序,好多地方看不懂
只看楼主
a1017075043
Rank: 2
来 自:广州
等 级:论坛游民
威 望:1
帖 子:50
专家分:63
注 册:2015-6-29
结帖率:50%
已结贴  问题点数:20 回复次数:14 
求大神给我解释一下下面的程序,好多地方看不懂
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <ctype.h>

#include "bank.h"

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()
{
    char choice;      /*我把int型改成了char型*/
    choice = -1;
    do
    {
        printf("\n");
        printf("+-------------------------------+\n");
        printf("|  存款 请按1       开户 请按4  |\n");
        printf("|  取款 请按2       销户 请按5  |\n");
        printf("|  查询 请按3       退出 请按0  |\n");
        printf("+-------------------------------+\n");
        
        printf("请输入您的选择:");
        scanf("%s", &choice);       /*我把%d改成了%s*/
        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;
   
    //判断是否已经超过最大用户数
    if (maxAccount<=(N_MAXREC_NO-2) )
    {
        //生成账号
        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;
    }
    else
    {
        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);     //不是1f而是lf;
        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;
}
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);
   
    //存款金额不能为0或负数
    if (cash<=0)
    {
        printf("存款金额不能为负数!按任意键返回...");
        getch();
        return;
    }
   
    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;//帐户在数组中的位置
    int i;//循环控制变量
   
    //初始位置是-1,表示未找到
    accountPosition = -1;
   
    //查找帐户的位置
    if (accNumber<=rs[maxAccount].accNumber && accNumber>=10001)/*老师加分*/
    {
        for (i=0;i<=maxAccount;i++)
        {
            if(rs[i].accNumber == accNumber)
            {
                accountPosition = i;
                break;
            }
        }
    }
   
    return accountPosition;
}

void withdraw()
{
    char accPWD[7];//密码
    int accNumber;//帐号
    int accountPosition;//账户在数组中的位置(下标)
    double cash;//取款金额
   
    //初始化
    accNumber = 0;
    accountPosition = -1;//-1,表示未找到
    cash = 0;
   
    //获取取款帐号
    accNumber = getaccNumber(1);
   
    //查找该账户
    accountPosition = findAnAccount(accNumber);
   
    if (accountPosition== -1)
    {
        printf("查无此帐户,按任意键返回...");
        getch();
        return;
    }
    //显示帐户信息
    dispAnAccount(accountPosition);
   
    //以销户帐户,不能进行取款操作
    if (strcmp(rs[accountPosition].flag,"0") !=0)
    {
        printf("该帐户已经销户,不能取款!,按任意键返回...");
        getch();
        return;
    }
   
    //获取要查询的帐户密码
    getaccPWD(accPWD);
   
    //密码不正确
    if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
    {
        printf("\n密码不正确,按任意键返回...");
        getch();
        return;
    }
   
   
    //获取取款金额
    cash = getcash(1);
   
    //取款金额不能为0或负数
    if (cash<=0)
    {
        printf("存款金额不能为负数!按任意键返回...");
        getch();
        return;
    }
   
   
    //取款是否超出存款金额
    if ((rs[accountPosition].balance - cash)<0)
    {
        printf("您的取款金额已超过存款金额,不能取款!,按任意键返回...");
        getch();
        return;
    }
   
   
    rs[accountPosition].balance = rs[accountPosition].balance - cash;
   
    //显示帐户信息
    dispAnAccount(accountPosition);
    printf("取款成功!按任意键返回...");
    getch();
}

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("\n该账户已经销户,不能再次销户,按任意键返回...");
        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;
}
下面的是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 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;/*课本上没有*/
搜索更多相关主题的帖子: welcome include 用户名 admin 
2015-06-29 16:52
a1017075043
Rank: 2
来 自:广州
等 级:论坛游民
威 望:1
帖 子:50
专家分:63
注 册:2015-6-29
得分:0 
int createAccNumber()
 {
     if(maxAccount == -1)
     {
         //账号从开始
         return 10001;
     }
     else
     {
         //顺序产生账号
         return rs[maxAccount].accNumber + 1;
     }
 }这个开户账号谁可以解释一下

我是小白。。。。
2015-06-29 17:12
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
得分:0 
这么长的代码能不能选择代码格式贴出来,贴得好看一点

程序代码:
//bank.h
.
.
.



程序代码:
//bank.c
.
.
.
.

人有多懒,编程就有多难。
2015-06-29 17:48
a1017075043
Rank: 2
来 自:广州
等 级:论坛游民
威 望:1
帖 子:50
专家分:63
注 册:2015-6-29
得分:0 
可以

我是小白。。。。
2015-06-29 17:56
a1017075043
Rank: 2
来 自:广州
等 级:论坛游民
威 望:1
帖 子:50
专家分:63
注 册:2015-6-29
得分:0 
程序代码:
#include <stdlib.h>

 #include <string.h>

 #include <conio.h>

 #include <stdio.h>

 #include <ctype.h>

#include "bank.h"

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()

 {
     char choice;      /*我把int型改成了char型*/
     choice = -1;
     do
     {
         printf("\n");
         printf("+-------------------------------+\n");
         printf("|  存款 请按1       开户 请按4  |\n");
         printf("|  取款 请按2       销户 请按5  |\n");
         printf("|  查询 请按3       退出 请按0  |\n");
         printf("+-------------------------------+\n");
       
         printf("请输入您的选择:");
         scanf("%s", &choice);       /*我把%d改成了%s*/
         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;
   
    //判断是否已经超过最大用户数
     if (maxAccount<=(N_MAXREC_NO-2) )
     {
         //生成账号
         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;
     }
     else
     {
         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);     //不是1f而是lf;
         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;

 }

 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);
   
    //存款金额不能为0或负数
     if (cash<=0)
     {
         printf("存款金额不能为负数!按任意键返回...");
         getch();
         return;
     }
   
    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;//帐户在数组中的位置
     int i;//循环控制变量
   
    //初始位置是-1,表示未找到
     accountPosition = -1;
   
    //查找帐户的位置
     if (accNumber<=rs[maxAccount].accNumber && accNumber>=10001)/*老师加分*/
     {
         for (i=0;i<=maxAccount;i++)
         {
             if(rs[i].accNumber == accNumber)
             {
                 accountPosition = i;
                 break;
             }
         }
     }
   
    return accountPosition;

 }

void withdraw()

 {
     char accPWD[7];//密码
     int accNumber;//帐号
     int accountPosition;//账户在数组中的位置(下标)
     double cash;//取款金额
   
    //初始化
     accNumber = 0;
     accountPosition = -1;//-1,表示未找到
     cash = 0;
   
    //获取取款帐号
     accNumber = getaccNumber(1);
   
    //查找该账户
     accountPosition = findAnAccount(accNumber);
   
    if (accountPosition== -1)
     {
         printf("查无此帐户,按任意键返回...");
         getch();
         return;
     }
     //显示帐户信息
     dispAnAccount(accountPosition);
   
    //以销户帐户,不能进行取款操作
     if (strcmp(rs[accountPosition].flag,"0") !=0)
     {
         printf("该帐户已经销户,不能取款!,按任意键返回...");
         getch();
         return;
     }
   
    //获取要查询的帐户密码
     getaccPWD(accPWD);
   
    //密码不正确
     if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
     {
         printf("\n密码不正确,按任意键返回...");
         getch();
         return;
     }
   
  
    //获取取款金额
     cash = getcash(1);
   
    //取款金额不能为0或负数
     if (cash<=0)
     {
         printf("存款金额不能为负数!按任意键返回...");
         getch();
         return;
     }
   
  
    //取款是否超出存款金额
     if ((rs[accountPosition].balance - cash)<0)
     {
         printf("您的取款金额已超过存款金额,不能取款!,按任意键返回...");
         getch();
         return;
     }
   
  
    rs[accountPosition].balance = rs[accountPosition].balance - cash;
   
    //显示帐户信息
     dispAnAccount(accountPosition);
     printf("取款成功!按任意键返回...");
     getch();

 }

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("\n该账户已经销户,不能再次销户,按任意键返回...");
         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;

 }

我是小白。。。。
2015-06-29 17:57
a1017075043
Rank: 2
来 自:广州
等 级:论坛游民
威 望:1
帖 子:50
专家分:63
注 册:2015-6-29
得分:0 
程序代码:
int createAccNumber()

 {
      if(maxAccount == -1)
      {
          //账号从开始
          return 10001;
      }
      else
      {
          //顺序产生账号
          return rs[maxAccount].accNumber + 1;
      }

 }

我看不懂这个子函数中的if语句,可以解释一下吗?

我是小白。。。。
2015-06-29 17:59
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:20 
程序代码:
int createAccNumber()
{
      if(maxAccount == -1)  //maxAccount为用户人数-1,未作为形参应该是全局变量
      {
          //账号从开始    //用户-1为-1则无用户,新建账号,这个if语句只在无用户情况执行
          return 10001;
      }
      else
      {
          //顺序产生账号
          return rs[maxAccount].accNumber + 1;
      }
}

剑栈风樯各苦辛,别时冰雪到时春
2015-06-29 18:29
a1017075043
Rank: 2
来 自:广州
等 级:论坛游民
威 望:1
帖 子:50
专家分:63
注 册:2015-6-29
得分:0 
版主就是给力,我还想问一下rs[maxAccount].accNumber 是什么意思?

我是小白。。。。
2015-06-29 19:35
a1017075043
Rank: 2
来 自:广州
等 级:论坛游民
威 望:1
帖 子:50
专家分:63
注 册:2015-6-29
得分:0 
可是maxAccount前面都没有赋值,怎么会等于-1呢?那前面的if不是一定不成立的吗?

我是小白。。。。
2015-06-29 19:41
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
rs[maxAccount].accNumber
看样子是结构定义的形式
rs为结构体数组
结构部分应该在文件"bank.h"里面
可是maxAccount前面都没有赋值,怎么会等于-1呢?那前面的if不是一定不成立的吗?
这个问题对照程序分析吧,不过逻辑就是这样,初始情况账户个数为0但数组下标是从0开始
所以写0就表示有一个账户,因而写-1

剑栈风樯各苦辛,别时冰雪到时春
2015-06-29 20:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-454835-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101251 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved