兰花草999 2021-07-08 17:09 采纳率: 0%
浏览 29

代码报错,部分代码无思路

img

img

img

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define upNum 50
struct record
{
int account; //账号
int password; //密码
double balance; //账户余额
char name[10]; //姓名
};

struct record users[upNum]; //银行所有用户

int N; //实际的用户数目

void openAccount(); //开户

void pass(); //用户登录

void readData(); //开始前从文件中读数据,存在数组中

void writeData(); //程序结束前,将数组中的数据写入到文件中

void save(); //存款

void Menu(); //用户菜单

void withdraw(); //取款

void transferAccount(); //转账

void showAccount(); //查询用户信息

void showBalance(); //查询余额

int inputPassword(); //返回键盘输入的密码

int search(int); //根据账号找到用户数据对应的下标

int welcomeMenu();//登录界面

int ichooseInMenu();//用户菜单

void welcome();//欢迎界面功能

/主函数/
int main()
{
system("title 银行管理系统");
readData();
welcome();
writeData();
return 0;
}

/欢迎界面/
void welcome()
{
int Choice;/用户选择功能/
do
{
Choice = welcomeMenu();
switch (Choice)
{
case 1:openAccount;/开户/

    case 2:
        pass();/*用户登录*/
    case 3:

        break;
    case 0:
        printf("欢迎您再来. \n");
    }
} while (Choice);

}
/开户/
void openAccount()
{
int i;
if (i == upNum)
printf("开户账户已达上限");

}

/登录界面/
int welcomeMenu()
{
int i;
while (1)
{
printf("+------------------------------+\n");
printf("+ +\n");
printf("+ 欢迎使用银行管理系统 +\n");
printf("+ +\n");
printf("+ 1 开户 2 登录 +\n");
printf("+ 3 退出系统 +\n");
printf("+ +\n");
printf("+------------------------------+\n");
printf("请选择: ");
fflush(stdin); //清空输入缓冲区
scanf("%d", &i);
if (i >= 0 && i <= 3)
break;
else
printf("输入有误,请重新选择\n\n");
}
return i;

/*用户界面菜单*/
/*用户菜单*/
int ichooseInMenu();
{
    int i;
    while (1)
    {
        printf("\n");
        printf("+--------------+\n");
        printf("|  1 查询余额  |\n");
        printf("|  2 记录查询  |\n");
        printf("|  3 存钱      |\n");
        printf("|  4 取钱      |\n");
        printf("|  5 转账      |\n");
        printf("|  0 退出      |\n");
        printf("+--------------+\n");
        printf("请输入您的选择: ");
        scanf("%d", &i);
        if (i >= 0 && i <= 5)
            break;
        else
            printf("输入有误,请重新选择\n\n");
    }
    return i;
}

}/读取文件数据/
void readData()
{
FILE* fp; //用于文件操作
int i = 0;
//从文件中取出余额
if ((fp = fopen("C:\Users\86152\Desktop\银行账户数据.txt", "a+")) == NULL)
{
printf("data file cannot open!");
exit(0);
}
while (fscanf(fp, "%d %s %d %lf %d", &users[i].account, users[i].name, &users[i].password, &users[i].balance) != EOF)
{
i++;
}
N = i; //用全局变量存储用户的总人数
fclose(fp);
return;
}
/用户登录/
void pass()
{
int id; //用于输入的账号
int who; //查找到该账号在数组中对应的下标
int sPass; //业务员登录时输入的密码
int right = 0; //要返回的结果:0-不正确 1-正确

printf("请输入账号:");
scanf("%d", &id);
who = search(id);  //根据账号查询用户,返回用户的下标
if (who < 0)   //说明id账户不存在
{
    printf("该用户不存在,登录失败!\n");
}
else
{
    printf("请输入密码:");
    sPass = inputPassword();
    if (sPass == users[who].password)
    {
        right = 1;
    }
    else
    {
        printf("对不起,密码错误\n");
    }
    if (right == 1)
        Menu();
    else
        return;
}

}
/查询用户/
int search(int id)
{
int index = -1;
int low = 0, high = N - 1, mid;
while (low <= high)
{
mid = (low + high) / 2;
if (users[mid].account == id)
{
index = mid;
break; //找到该用户,立即退出循环
}
else if (users[mid].account > id)
high = mid - 1;
else
low = mid + 1;
}
return index; //若找到,其值在0~N-1间,否则,保持-1
}
/存款/
void save()
{
int id, who;
double money;
printf("输入要存款的账号:");
scanf("%d", &id);
who = search(id); //根据账号查询用户,返回用户的下标
if (who < 0) //说明id账户不存在
{
printf("该用户不存在,存款失败!\n");
}
else
{
printf("用户姓名:%s\n", users[who].name);
printf("输入存款额:");
scanf("%lf", &money);
users[who].balance += money;
printf("存款后,您有%.2f元. \n", users[who].balance);
}
return;
}

/取款/
void withdraw()
{
int id, who;
int iPass;
double money;
printf("输入要取款的账号:");
scanf("%d", &id);
who = search(id); //根据账号查询用户,返回用户的下标
if (who < 0) //说明id账户不存在
{
printf("该用户不存在,取款失败!\n");
}
else
{
printf("用户姓名:%s\n", users[who].name);
printf("密码:");
iPass = inputPassword();
{
printf("输入取款额:");
scanf("%lf", &money);
if (money > users[who].balance) //余额透支
{
printf("余额不足,取款失败!\n");
}
else
{
users[who].balance -= money;
printf("取款后,还有%.2f元. \n", users[who].balance);
}
}
}
return;
}

void showBalance()
{
int id, who;
printf("账号:");
scanf("%d", &id);
who = search(id); //根据账号查询用户,返回用户的下标
if (who < 0) //说明id账户不存在
{
printf("该用户不存在!\n");
}
else
{
printf("用户姓名:%s\n", users[who].name);
{
printf("余额:%.2f元. \n", users[who].balance);
}
}
return;
}

/查询账户/
void showAccount()
{
int id, who;
printf("账号:");
scanf("%d", &id);
who = search(id); //根据账号查询用户,返回用户的下标
if (who < 0) //说明id账户不存在
{
printf("该用户不存在!\n");
}
else
{
printf("户主姓名:%s\n", users[who].name);
{
printf("余额:%.2f元. \n", users[who].balance);
printf("状态:");
}
}
return;
}
/转账/
void transferAccount()
{
int id;
printf("请输入要被转账的id:");
scanf("%d", &id);

}
/显示所有账户/
void showAll()
{
int i;
printf("账号 用户名 密码\n");
for (i = 0; i <= N; i++)
{
printf("%d %s %d", users[i].account, users[i].name, users[i].password);
}
}

/规范密码并将输入密码变成星号/
int inputPassword()
{
char ch; //接收字符形式密码
int iPass = 0; //要转换为数字
int i;

while (1)
{
    for (i = 0; i < 6; i++)
    {
        ch = getch();  //输入但不显示
        putchar('*');   //输出*
        if (ch)
            iPass = iPass * 10 + (ch - '0');
        else
        {
            iPass = 0;
            break;  //退出for循环后,再次接受
        }
    }
    fflush(stdin); //清除键盘缓存区中已经有的输入
    printf("\n");
    if (iPass == 0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
    {
        printf("密码要求全为数字,且不全为0!\n");
        printf("请重新输入密码: ");
    }
    else
        break;
}
return iPass;

}
void writeData()
{
FILE* fp; //用于文件操作
int i = 0;
//保存余额
if ((fp = fopen("C:\Users\86152\Desktop\银行账户数据.txt", "w")) == NULL)
{
printf("data file cannot open!");
exit(0);
}
for (i = 0; i < N; i++)
fprintf(fp, "%d %s %d %f %d\n", users[i].account, users[i].name, users[i].password, users[i].balance);
fclose(fp);
}

还有就是怎么使用快排实现对金额字段排序、展示排序结果、
怎么实现为其他用户转账业务

  • 写回答

2条回答 默认 最新

  • CSDN专家-Time 2021-07-08 17:23
    关注

    将更多的编译器报错信息贴出来。

    评论

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)