C语言问题 文件的 100

假设某个银行有5个客户,客户的基本信息包括账号,姓名,密码和账户余额,这些客户的信息已经存储在数据文件custom1.txt中(custom1.txt中各基本信息之间的分... 假设某个银行有5个客户,客户的基本信息包括账号,姓名,密码和账户余额,这些客户的信息已经存储在数据文件custom1.txt中(custom1.txt中各基本信息之间的分隔符为空格)读出所以数据,实现根据账号查询客户信息,根据账号和输入的钱数(正数为存款,负数为取款)更新客户余额,最后将所有的客户信息写到数据文件custom2.txt中。 展开
 我来答
匿名用户
2015-06-17
展开全部

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUFLEN 120                 
#define LEN 20               
#define N 5                  
struct record                              //结构体
{
    char number[LEN];    //帐号
    char name[LEN];       // 姓名(name)
    int noc;        //余额
    char bri[6];   //密码
}meb[N];
int k=1,n,m,i;    // 定义全局变量
void readfile();   //读入
void seek();      //查找
void modify();     //修改
void display(); //显示
void save();    //保存
void menu();    //菜单
void to_menu();  //回到菜单
main() //主函数
{
 int num;
    menu(); 
 while(1)
 {
  printf("请输入功能号[1-6]:");
     scanf("%d",&num);
        switch(num)
  { 
  case 1:readfile();break;  //主菜单选项
        case 2:seek();break;
        case 3:modify();break;
        case 4:display();break;
        case 5:save();break;
        case 6:k=0;break;
        default:printf("请在1-6之间选择\n");
  }
  if(k==0) break;
  to_menu();
 }
 return(0);
}
void readfile() // 读入信息 (第十章 文件)
{
 char *p="customer.txt"; //打开文件
    FILE *fp;
    int i=0;
    if ((fp=fopen("customer.txt","r"))==NULL)
 {
  printf("打开 %s 失败! 按回车键返回主菜单!",p);
  return;
  to_menu();
 }
while(fscanf(fp,"%s%s%d%s",meb[i].number,meb[i].name,&meb[i].noc, meb[i].bri)==4)
 {
 i++;
     i=i;
 }
 fclose(fp);
 n=i;
 printf("录入完毕! \n");
}
void seek() //查询
{
 int i,item,flag;
    char s1[21];                           //查询菜单选项
    printf("------------------     ╭┴┴-----┴┴╮ \n");
    printf("1按帐号查询            │        │ \n");
    printf("                       │ ●     ● │\n");
    printf("                       │○╰┬┬┬╯ ○│\n");
    printf("2.退出本菜单           │  ╰-╯   /  \n");
    printf("------------------     ╰-┬○----┬○╯ \n");
    while(1)
 {
  printf("请选择子菜单编号:");
  scanf("%d",&item);
  flag=0;
  switch(item) //查询菜单选项
  {
   case 1://按帐号查询
    printf("请输入要查询的工号\n");
    scanf("%s",&s1);
          for(i=0;i<n;i++)
          if(strcmp(meb[i].number,s1)==0)
    {
     flag=1;
              printf("该客户帐号,姓名,余额,密码 分别为:\n");
              printf("    %s   %s  %d  %s \n",meb[i].number,meb[i].name,meb[i].noc, meb[i].bri);
    }
          if(flag==0)
          printf("该帐号不存在!\n"); break;
   case 2:return;
   default:printf("请在1-2之间选择\n");
}
}
}
void modify()    //修改帐号信息
{
 int i,item,num;
 char s1[LEN+1],s2[LEN+1];    //长度根据实际情况定义
 printf("请输入要要修改的帐号:\n");
    scanf("%s",s1);
    for(i=0;i<n;i++)
  if(strcmp(meb[i].number,s1)==0)
   num=i;
  printf("------------------  ╭╮__╭╭╭╭╭__╭╮ \n"); //修改项目
  printf("1.修改姓名         │           │ \n");
  printf("2.修改余额         │           │\n");
  printf("3.修改帐号         │   . ╭---╮ .  │\n");
  printf("4.修改密码         │≡   │● ●│  ≡│\n"); 
  printf("                       ╰ --- ╯      ╯   \n");
  printf("                   ╰--┬○----┬-○------╯  \n");
  printf("5.退出本菜单                      \n");
  printf("------------------                       \n");
  while(1)
  {
   printf("请选择子菜单编号:");
   scanf("%d",&item);
   switch(item)
   {
   case 1:
    printf("请输入新的姓名:\n");
    scanf("%s",s2);
    strcpy(meb[num].name,s2); break;
            case 2:
                printf("请输入余额变更:\n");
    scanf("%d",&k);
    meb[num].noc=k+meb[num].noc;
    break;
   case 3:
    printf("请输入新的帐号:\n");
    scanf("%s",s2);
    strcpy(meb[num].bri,s2); break;    
   case 4:printf("请输入新的密码\n");
    scanf("%s",s2);
    strcpy(meb[num].number,s2);
                        case 5:return;
   default:printf("请在1-5之间选择\n");
   }
  }
}
void display() //显示员工信息
{
 int i;
    printf("所有客户的信息为:\n");
 printf("客户帐号,姓名,余额,密码分别为:\n");
 for(i=0;i<n;i++)
 {
  printf("    %s   %s  %d   %s\n",meb[i].number,meb[i].name,meb[i].noc,meb[i].bri);
 }
}
void save() //保存信息
{
 int i,flag=0;
    FILE *fp;
    fp=fopen("customer2.txt","w"); //文件写入
    for(i=0;i<n;i++)
 {
  fprintf(fp,"%s %s %d %s \n",meb[i].number,meb[i].name,meb[i].noc,meb[i].bri);
 } fclose(fp);
}
void menu()                                       //主界面 
{
    system("cls");//清屏 
 printf("    ╔══════════════════════════════════╗\n");
    printf("    ║         客户信息管理系统                                           ║\n");
 printf("    ║      制作人员:LostBoys Stduio  _/ ̄\                           ║\n");
    printf("    ║      ****系统功能菜单*****      ┬┴┬┴▏   ▔▔▔▔ \         ║\n");
 printf("    ║      ▄︻┻═┳一一            ┴┬┴/\ /      \       ║\n");
    printf("    ║      1.读入工会成员信息         ┬┴∕       /   )     ║\n");
    printf("    ║      2.查询工会成员信息         ┴┬▏        ●  ▏     ║\n");
    printf("    ║      3.按客户帐号修改信息     ┬┴▏           ▔█◤ ║\n");
    printf("    ║                               ┴◢██◣       \__ /   ║\n");
    printf("    ║                                ┬█████◣       /    ║\n");
    printf("    ║      4.显示当前客户信息        ┴█████████████◣     ║\n");
    printf("    ║      5.保存(数据无价,务必保存) ◢██████████████◣   ║\n");
    printf("    ║      6.退出系统                 ◢███████████████◣ ║\n");
 printf("    ║      ▄︻┻═┳一一            ◢████████████████▄║\n");
    printf("    ║                                                                    ║\n");
 printf("    ╚══════════════════════════════════╝\n");

}
void to_menu()//用来返回主菜单函数的函数头
{
    char c1,c2;
    printf("\n\n\n按回车键返回主菜单...");
    scanf("%c%c",&c1,&c2);
    menu();//调用主菜单函数
}

晚安。

一口没水的枯井
2015-06-16 · TA获得超过2988个赞
知道小有建树答主
回答量:473
采纳率:100%
帮助的人:150万
展开全部

代码如下:

#include<stdio.h>
#include<stdlib.h>

struct custom
{
    int id;
    char name[128];
    char pwd[128];
    int balance;
};
int main(){
    char* fnIn = "D:/custom1.txt";
    char* fnOut = "D:/custom2.txt";

    custom customs[5];
    FILE*fp = fopen(fnIn, "r");
    for (int i = 0; i < 5; i++){
        fscanf(fp, "%d ", &(customs[i].id));
        fscanf(fp, "%s ", customs[i].name);
        fscanf(fp, "%s ", customs[i].pwd);
        fscanf(fp, "%d", &(customs[i].balance));
    }
    fclose(fp);

    printf("所有客户信息如下:\n");
    printf("账号\t姓名\t密码\t账户余额\n");
    for (int i = 0; i < 5; i++){
        printf("%d\t%s\t%s\t%d\n", customs[i].id, customs[i].name, customs[i].pwd, customs[i].balance);
    }
    printf("\n");

    char ch;
    do{
        printf("\n选择操作:\n1=>根据账号查询客户信息\n2=>根据账号和输入的浅色更新客户余额\n3=>将所有客户信息写到数据文件custom2.txt中\n4=>退出\n");
        ch = getchar();
        int id, index;
        switch (ch)
        {
        case '1':
            printf("请输入账号:");
            scanf("%d", &id);
            for (int i = 0; i < 5; i++){
                if (customs[i].id == id){
                    index = i;
                    break;
                }
            }
            printf("账号\t姓名\t密码\t账户余额\n");
            printf("%d\t%s\t%s\t%d\n", customs[index].id, customs[index].name, customs[index].pwd, customs[index].balance);
            printf("查询完成!\n\n");
            break;
        case '2':
            int input_money;
            printf("输入账号和金额(以空格符为间隔):");
            scanf("%d %d", &id, &input_money);
            for (int i = 0; i < 5; i++){
                if (customs[i].id == id){
                    index = i;
                    break;
                }
            }
            customs[index].balance += input_money;
            printf("更新完成!\n\n");
            break;
        case '3':
            fp = fopen(fnOut, "w");
            for (int i = 0; i < 5; i++){
                fprintf(fp, "%d %s %s %d\n", customs[i].id, customs[i].name, customs[i].pwd, customs[i].balance);
            }
            fclose(fp);
            printf("写入完成!\n\n");
            break;
        default:
            break;
        }
        getchar();
    } while (ch != '4');

    return 0;
}

运行结果如下:


文件内容如下:

//D:/custom1.txt

1 客户1 123456 999
2 客户2 123456 998
3 客户3 123456 997
4 客户4 123456 996
5 客户5 123456 995


//D:/custom2.txt

1 客户1 123456 999
2 客户2 123456 998
3 客户3 123456 997
4 客户4 123456 895
5 客户5 123456 995

望采纳~

追问

有个错误 怎么回事 改不好

追答

原因是你的编译器较老,不支持省去struct关键字的结构体变量声明

你把 

custom customs[5];

改为

struct custom customs[5];

就可以了

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式