| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 740 人关注过本帖
标题:文件的读取,出现烫烫烫。而且 total vip is 人数也不对。求大神指点。。。 ...
只看楼主 加入收藏
北北ztz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-6-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
文件的读取,出现烫烫烫。而且 total vip is 人数也不对。求大神指点。。。(ps.没学过文件)程序还没有完全做完。
程序代码:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct vip
{
    long ID;    /*会员编号*/
    char name[10];          /*会员姓名*/
    long int phone;     /*会员电话号码*/
    int credits;    /*会员积分*/
}VIP;
int menu();/*欢迎界面函数*/
void input();/*会员信息输入函数*/
void Writetofile(VIP vip[],int n);/*往文件中保持数据*/
int inputn(VIP vip[]);/*返回值函数*/
int Readfromfile(VIP vip[]);/*从文件里读取数据*/
void Printvip(VIP vip[],int n);/*输出函数*/
int smallmenu();/*查询会员界面*/
void quit(); /*退出的函数说明*/
int vipIDsearch(VIP vip[],long j);/*按会员编号查找函数*/
int main()
{
    VIP vip[1000];
    int n,choice,smallchoice,pos;
    long j;
    choice=menu();
    while(1)
        {
            switch (choice)
            {
               case 1:/*会员信息输入*/
                    input(vip);
                    n=inputn(vip);
                    Writetofile(vip,n);
                    break;
               case 2:
                    Readfromfile(vip);
                    printf("===================================================\n");
                       printf("编号\t姓名\t电话号码\t积分\n");
                      Printvip(vip,n);
                    printf("\n=================================================\n");
                    break;
                  
              case 3:
                  smallchoice = smallmenu();
                      while(1)
                        {
                            switch (smallchoice)
                            {
                               case 1:/*按会员编号查询会员*/
               
                                    break;
                               case 2:
                                  
                                   break;
                              case 3:
                                  break;
                              case 0:
                                  printf("正在退出查询系统....\n正在进入首页界面.....\n\n\n");
                                  choice=menu();
                                  break;
                           
                            }
                           smallchoice = smallmenu();
                      }
                  break;
              case 4:
                   break;
              case 5:
              case 0:
                    quit();
                    break;
            }
           choice=menu();
        }
}
int menu()/*欢迎界面函数*/
{
    int choice;
    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("\t请选择菜单号(0---5):"); 
    while( (!(scanf("%d",&choice)))|| (choice<0)||(choice>5))
    {
       
        printf("\n\t\t\a\a选择错误!!!!!!!!!!!请重新选择:"); 
       
        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("\t请选择菜单号(0---5):");
       
    }
   
    return choice;  /*返回值为choice*/
}
void input(VIP vip[])/*会员信息输入函数*/
{
    int i;
    i=0;
    while(vip[i].ID >=0)
    {
        i++;
        printf("请输入会员编号(输入0结束录入):");
        scanf("%ld",&vip[i].ID);
        printf("请输入会员姓名:");
        scanf("%s",&vip[i].name);
        printf("请输入会员电话号码:");
        scanf("%ld",&vip[i].phone);
        printf("请输入会员积分(新会员为0):");
        scanf("%d",&vip[i].credits);
    }

}
int inputn(VIP vip[])/*返回值函数*/
{
    int i,k;
    i=0;
    do{
        i++;
        printf("请输入会员编号(输入0结束录入):");
        scanf("%ld",&vip[i].ID);
        if(vip[i].ID==0)
            break;
        printf("请输入会员姓名:");
        scanf("%s",&vip[i].name);
        printf("请输入会员电话号码:");
        scanf("%ld",&vip[i].phone);
        printf("请输入会员积分(新会员为0):");
        scanf("%d",&vip[i].credits);
       
    }while(1);
    k=i;
    return k;
}

void Writetofile(VIP vip[],int n)/*往文件中保持数据*/
{
    FILE *fp;
    if((fp=fopen("vip.txt","w"))==NULL)
    {
        printf("Failure to open vip.txt!\n");
        exit(0);
    }
    fwrite(vip,sizeof(VIP),n,fp);
    fclose(fp);
}
int Readfromfile(VIP vip[])/*从文件里读取数据*/
{
    FILE*fp;
    int i;
    if((fp=fopen("vip.txt","r"))==NULL)/*以读方式打开文本文件*/
    {
        printf("打开文件失败!!");
        exit(0);
    }
    for(i=0;!feof(fp);i++)
    {
        fread(&vip[i],sizeof(VIP),1,fp);/*按数据块读文件*/
    }
    fclose(fp);
    printf("Total vip is %d.\n",i-1);
    return i-1;
   
}
void Printvip(VIP vip[],int n)/*输出函数*/
{  
    int i;
    for(i=0;i<n;i++)
    {
    printf("\t%ld\t%s\t%ld\t%d",vip[i].ID,vip[i].name,vip[i].phone,vip[i].credits);
    }
}
int smallmenu()/*查询会员界面*/
{
        int choice;
    printf("*****************************************************************\n");
    printf("                    请选择条件区域\n");
    printf("1.会员编号\n");
    printf("2.会员姓名\n");
    printf("3.电话号码\n");
    printf("0.退出查询系统\n");
    printf("****************************************************************\n");
    printf("\t请选择菜单号(0---3):"); 
    while( (!(scanf("%d",&choice)))|| (choice<0)||(choice>3))
    {
       
        printf("\n\t\t\a\a选择错误!!!!!!!!!!!请重新选择:"); 
       
        printf("*****************************************************************\n");
        printf("                    请选择条件区域\n");
        printf("1.会员编号\n");
        printf("2.会员姓名\n");
        printf("3.电话号码\n");
        printf("0.退出查询系统\n");
        printf("****************************************************************\n");
        printf("\t请选择菜单号(0---3):"); 
       
    }
   
    return choice;  /*返回值为choice*/
}
void quit() /*退出的函数说明*/

{
    printf("\n\t感谢使用商城会员管理系统,正在退出....\n");
    exit(0); 
} 
搜索更多相关主题的帖子: 而且 
2014-06-02 14:07
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
分模块自己调试

DO IT YOURSELF !
2014-06-02 15:20
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:10 
input(vip);
n=inputn(vip);
Writetofile(vip,n);

1.  input 和 inputn  功能差不多,两个函数只要一个就可以了
2.  input中i++的位置需要调整  因为按你的逻辑vip[0]是不会有信息被录入进去的


3.  writetofile  函数  请在写文件的时候设定下 写入文件的 位置   按照你的程序应该是在文件尾巴上增加数据 请用 fseek 设置写入位置
                 读文件和写文件 都会影响到文件当前读写位置的,请在读和写之前 用fseek 设置文件读写位置
                 不然的话   你明白会发生什么的 乱码就是这个原因

4。统计信息个数 请以写入文件的信息数为准  而不是缓冲区vip[]内的个数为准  因为每次录入数据的时候都是 从vip[0]开始录入的
                统计文件信息的个数公式   文件大小 除以  1条信息的字节数   就是你录入的数据个数  获取文件大小 请查看 fstat  函数

[ 本帖最后由 zhu224039 于 2014-6-2 16:36 编辑 ]

我要成为嘿嘿的黑客,替天行道
2014-06-02 16:19
北北ztz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-6-2
收藏
得分:0 
回复 3 楼 zhu224039
统计信息个数 怎么样才能以写入文件的信息数为准呢?
2014-06-02 19:29
北北ztz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-6-2
收藏
得分:0 
回复 2 楼 wp231957
不会调试。求教
2014-06-02 19:33
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
查C库函数fstat  谢谢

我要成为嘿嘿的黑客,替天行道
2014-06-02 19:39
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
文件大小 除以  1条信息的字节数   等于你记录下的数据数

我要成为嘿嘿的黑客,替天行道
2014-06-02 19:40
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:10 
为了调试方便,加一个临时数据数组。调试好了,再去掉临时数组,改为键盘输入。你试试下面的程序,
程序代码:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct vip
{
    long ID;    /*会员编号*/
    char name[10];          /*会员姓名*/
    long int phone;     /*会员电话号码*/
    int credits;    /*会员积分*/
}VIP;
//----------------为调试方便,加的一个原始数据数组
VIP vipInfo[20]={{1,"aa",123,0},{2,"qq",234,0},{3,"ss",345,0},{4,"dd",456,0},{5,"ff",567,0},{6,"gg",789,0},{0}};
//-----------------------
int menu();/*欢迎界面函数*/
void input(VIP vip[]);/*会员信息输入函数*/
void Writetofile(VIP vip[],int n);/*往文件中保持数据*/
int inputn(VIP vip[]);/*返回值函数*/
int Readfromfile(VIP vip[]);/*从文件里读取数据*/
void Printvip(VIP vip[],int n);/*输出函数*/
int smallmenu();/*查询会员界面*/
void quit(); /*退出的函数说明*/
int vipIDsearch(VIP vip[],long j);/*按会员编号查找函数*/
int main()
{
    VIP vip[1000];
    int n,choice,smallchoice,pos;
    long j;
    choice=menu();
    while(1)
        {
            switch (choice)
            {
               case 1:/*会员信息输入*/
                    //input(vip);
                    n=inputn(vip);
                    Writetofile(vip,n);
                    break;
               case 2:
                    Readfromfile(vip);
                    printf("===================================================\n");
                       printf("\t编号\t姓名\t电话号码\t积分\n");
                      Printvip(vip,n);
                    printf("\n=================================================\n");
                    break;
                 
              case 3:
                  smallchoice = smallmenu();
                      while(1)
                        {
                            switch (smallchoice)
                            {
                               case 1:/*按会员编号查询会员*/
              
                                    break;
                               case 2:
                                 
                                   break;
                              case 3:
                                  break;
                              case 0:
                                  printf("正在退出查询系统....\n正在进入首页界面.....\n\n\n");
                                  choice=menu();
                                  break;
                          
                            }
                           smallchoice = smallmenu();
                      }
                  break;
              case 4:
                   break;
              case 5:
              case 0:
                    quit();
                    break;
            }
           choice=menu();
        }
    return 0;
}
int menu()/*欢迎界面函数*/
{
    int choice;
    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("\t请选择菜单号(0---5):");
    while( (!(scanf("%d",&choice)))|| (choice<0)||(choice>5))
    {
      
        printf("\n\t\t\a\a选择错误!!!!!!!!!!!请重新选择:");
      
        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("\t请选择菜单号(0---5):");
      
    }
  
    return choice;  /*返回值为choice*/
}
void input(VIP vip[])/*会员信息输入函数*/
{
    int i;
    i=0;
    while(vip[i].ID >=0)
    {

        printf("请输入会员编号(输入0结束录入):");
        scanf("%ld",&vip[i].ID);
        printf("请输入会员姓名:");
        scanf("%s",&vip[i].name);
        printf("请输入会员电话号码:");
        scanf("%ld",&vip[i].phone);
        printf("请输入会员积分(新会员为0):");
        scanf("%d",&vip[i].credits);
        i++;
    }

}
int inputn(VIP vip[])/*返回值函数*/
{
    int i;
    i=0;
    do{
        /*
        printf("请输入会员编号(输入0结束录入):");
        scanf("%ld",&vip[i].ID);
        printf("请输入会员姓名:");
        scanf("%s",&vip[i].name);     //------------键盘输入时。如果前面有回车这里容易出错,需多关注
        printf("请输入会员电话号码:");
        scanf("%ld",&vip[i].phone);
        printf("请输入会员积分(新会员为0):");
        scanf("%d",&vip[i].credits);
        */
//----------------为调试方便,暂时从一个原始数据数组读取数据
        vip[i].ID=vipInfo[i].ID;
        if(vip[i].ID==0)
            break;
        strcpy(vip[i].name,vipInfo[i].name);
        vip[i].phone=vipInfo[i].phone;
        vip[i].credits=vipInfo[i].credits;
        i++;   
    }while(1);
    return i;
}

void Writetofile(VIP vip[],int n)/*往文件中保持数据*/
{
    FILE *fp;
    if((fp=fopen("vip.txt","w"))==NULL)
    {
        printf("Failure to open vip.txt!\n");
        exit(0);
    }
    fwrite(vip,sizeof(VIP),n,fp);
    fclose(fp);
}
int Readfromfile(VIP vip[])/*从文件里读取数据*/
{
    FILE*fp;
    int i;
    if((fp=fopen("vip.txt","r"))==NULL)        /*以读方式打开文本文件*/
    {
        printf("打开文件失败!!");
        exit(0);
    }
    for(i=0;!feof(fp);i++)
    {
        fread(&vip[i],sizeof(VIP),1,fp);/*按数据块读文件*/
    }
    fclose(fp);
    printf("Total vip is %d.\n",i-1);
    return i-1;
  
}
void Printvip(VIP vip[],int n)/*输出函数*/
{ 
    int i;
    for(i=0;i<n;i++)
    {
    printf("\t%ld\t%s\t%ld\t\t%d\n",vip[i].ID,vip[i].name,vip[i].phone,vip[i].credits);
    }
}
int smallmenu()/*查询会员界面*/
{
        int choice;
    printf("*****************************************************************\n");
    printf("                    请选择条件区域\n");
    printf("1.会员编号\n");
    printf("2.会员姓名\n");
    printf("3.电话号码\n");
    printf("0.退出查询系统\n");
    printf("****************************************************************\n");
    printf("\t请选择菜单号(0---3):");
    while( (!(scanf("%d",&choice)))|| (choice<0)||(choice>3))
    {
      
        printf("\n\t\t\a\a选择错误!!!!!!!!!!!请重新选择:");
      
        printf("*****************************************************************\n");
        printf("                    请选择条件区域\n");
        printf("1.会员编号\n");
        printf("2.会员姓名\n");
        printf("3.电话号码\n");
        printf("0.退出查询系统\n");
        printf("****************************************************************\n");
        printf("\t请选择菜单号(0---3):");
      
    }
  
    return choice;  /*返回值为choice*/
}
void quit() /*退出的函数说明*/

{
    printf("\n\t感谢使用商城会员管理系统,正在退出....\n");
    exit(0);
}
实际你已经编好的几个模块没有太大的问题。
2014-06-02 20:59
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
实际你已经编好的几个模块没有太大的问题。
另外,由于你用 fread 和 fwrite 从文本文件中读写数据,所以虽然显示器显示没有问题,但是用文本编辑器直接打开vip.txt时,是不能看到正常的信息显示的。如果想文本编辑器直接打开vip.txt时也可以正常显示信息,需要用fprintf 和 fscanf .
2014-06-02 21:09
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
调试到网上找找步骤,学会自己用debug调试

我不是砖家,要努力成为砖家。
2014-06-02 22:21
快速回复:文件的读取,出现烫烫烫。而且 total vip is 人数也不对。求大神指点 ...
数据加载中...
 
   



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

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