| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 344 人关注过本帖
标题:没有耐心勿进-->功能函数读写出现问题
取消只看楼主 加入收藏
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
没有耐心勿进-->功能函数读写出现问题
程序代码:
/*
订餐信息处理:
主要模块:插入、修改、查询、删除、显示、文件读取、文件写入

数据结构:
链表(带头结点)

注意:程序初次运行时,不执行Fread_File(head)函数进行文件读取,待第一次写入数据后再向程序加入Fread_File(head)函数。
以实现每次程序运行时都能读取之前存储在文件中的数据。
*/
/*********问题*********/
/*文件读取后最后一个元素不能显示,是乱码。其它功能函数都没有问题,就是读取、写入函数出现了问题,恳请大家帮忙找错*/

/**经测试:文件读取的元素要比写入的元素多一个。问题出在文件读取函数上,大家帮我看看这个文件读取函数有什么问题。**/

#include"stdio.h"
#include"stdlib.h"
#define SIZE sizeof(Guest_List)
typedef struct guest_info
{
    int num;           //编号
    int sum;           //用餐人数
    char name[20];     //姓名
    char time[20];     //用餐时间
    char phone[20];    //电话
    struct guest_info *next;
}Guest_List; 

int count=0;//全局变量,统计客人人数;
int main()
{
    void Insert(Guest_List *head);
    void Search(Guest_List *head);
    void Update(Guest_List *head);
    void Delete(Guest_List *head);
    void Show(Guest_List *head);
    void Fread_File(Guest_List *head);
    void Fwrite_File(Guest_List *head);
    int n;
    Guest_List *head;
    head=(Guest_List *)malloc(SIZE);         
    head->next=NULL;
    Fread_File(head);           //程序运行时从文件读取信息
    do
    {
        printf("\n");
        printf("1-----插入(Insert)\n");
        printf("2-----查询(Search)\n");
        printf("3-----修改(Update)\n");
        printf("4-----删除(Delete)\n");
        printf("5-----显示(Show)\n");
        printf("6-----退出(Exit)\n");
        printf("请选择菜单:");
        scanf("%d",&n);
        printf("\n");
        switch(n)
        {
        case 1:Insert(head);break;
        case 2:Search(head);break;
        case 3:Update(head);break;
        case 4:Delete(head);break;
        case 5:Show(head);break;
        case 6:break;
        default:printf("输入错误,请重新选择!\n");
        }
    }while(n!=6);
    Fwrite_File(head);            //程序结束前将信息写入文件
    return 0;
}
//插入信息
void Insert(Guest_List *head)
{
    Guest_List *cur,*pre,*New_code;
    int number;
    pre=cur=head->next;
    printf("请输入编号:");
    scanf("%d",&number);
    while(cur!=NULL&&cur->num!=number)
    {
        pre=cur;
        cur=cur->next;
    }
    if(cur!=NULL)
    {
        printf("已有相同的编号!\n");
        return;
    }
    New_code=(Guest_List *)malloc(SIZE);
    New_code->next=NULL;
    if(New_code==NULL)
    {
        printf("分配空间失败!\n");
        return ;
    }
    if(pre==NULL)
        head->next=New_code;
    else
        pre->next=New_code;
    New_code->num=number;
    printf("请输入姓名:");
    scanf("%s",New_code->name);
    printf("请输入用餐人数:");
    scanf("%d",&New_code->sum);
    printf("请输入用餐时间:");
    scanf("%s",New_code->time);
    printf("请输入联系号码:");
    scanf("%s",New_code->phone);
    count++;
}

//查询信息<按编号查询>
void Search(Guest_List *head)
{
    Guest_List *cur;
    int number;
    cur=head->next;
    printf("请输入您要查询的编号:");
    scanf("%d",&number);
    while(cur->num!=number&&cur->next!=NULL)
        cur=cur->next;
    if(cur->num==number)
    {
        printf("姓名:%s\n",cur->name);
        printf("用餐人数:%d\n",cur->sum);
        printf("用餐时间:%s\n",cur->time);
        printf("联系人号码:%s\n",cur->phone);
    }
    else
        printf("您要查询的编号不存在!\n");
}

//修改信息
void Update(Guest_List *head)
{
    Guest_List *cur;
    int number;
    cur=head->next;
    printf("请输入您要修改的编号:");
    scanf("%d",&number);
    while(cur->num!=number&&cur->next!=NULL)
        cur=cur->next;
    if(cur->num==number)
    {
        printf("请输入用餐人数:");
        scanf("%d",&cur->sum);
        printf("请输入用餐时间:");
        scanf("%s",cur->time);
    }
    else
        printf("您要修改的编号不存在!\n");
}
//删除信息
void Delete(Guest_List *head)
{
    Guest_List *cur,*pre;
    int number;
    pre=head;
    cur=head->next;
    printf("请输入您删除的编号:");
    scanf("%d",&number);
    while(cur!=NULL&&cur->num!=number)
    {
        pre=cur;
        cur=cur->next;
    }
    if(cur!=NULL)
    {
        pre->next=cur->next;
        free(cur);
        count--;
    }
    else
        printf("您要删除的编号不存在!\n");
}
//显示信息
void Show(Guest_List *head)
{
    Guest_List *cur;
    cur=head->next;
    if(cur==NULL)
    {
        printf("现在暂无订单!\n");
        return;
    }
    while(cur!=NULL)
    {
        printf("编号:%d  姓名:%s  用餐人数:%d  用餐时间:%s  联系人号码:%s\n",
        cur->num,cur->name,cur->sum,cur->time,cur->phone);
        cur=cur->next;
    }
    printf("当前订单:%d\n",count);
}
//读取文件
void Fread_File(Guest_List *head)
{
    //int n=0;(此部分注释为测试用)
    FILE *fp;
    Guest_List *cur,*pre;
    pre=cur=(Guest_List *)malloc(SIZE);
    head->next=cur;
    pre->next=NULL;
    if((fp=fopen("Guest.dat","rb"))==NULL)
    {
        printf("加载失败,文件不存在!\n");
        getchar();
        exit(0);
    }
    while(!feof(fp))
    {    //n++;
        fread(cur,SIZE,1,fp);
        pre->next=cur;
        pre=cur;
        cur=(Guest_List *)malloc(SIZE);
    }
    //printf("%d\n",n);
    pre->next=NULL;
    fclose(fp);
}
//写入文件
void Fwrite_File(Guest_List *head)
{
    FILE *fp;
    if((fp=fopen("Guest.dat","wb"))==NULL)
    {
        printf("加载失败,文件不存在!");
        getchar();
        exit(0);
    }
    for(head=head->next;head!=NULL;head=head->next)
        fwrite(head,SIZE,1,fp);
    fclose(fp);
}


[ 本帖最后由 a4811 于 2013-1-12 23:00 编辑 ]
搜索更多相关主题的帖子: 查询 
2013-01-12 22:17
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 3楼 azzbcc
嗯。还是猪哥牛逼。
怎么感觉论坛这两天好卡啊。
2013-01-13 13:52
快速回复:没有耐心勿进-->功能函数读写出现问题
数据加载中...
 
   



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

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