| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:我是照抄书上的程序,但在显示记录那个环节出了问题,为阅读简便我除去了无 ...
只看楼主 加入收藏
中国神猴
Rank: 2
等 级:论坛游民
帖 子:16
专家分:11
注 册:2011-12-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
我是照抄书上的程序,但在显示记录那个环节出了问题,为阅读简便我除去了无关的函数功能
#define M 100
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
struct record
{
    char name[20];
    int age;
    char tele[15];
    char city[20];
    char units[30];
    char note[20];
};
void creat();
void append();
void display();
void locate();
void modify();
void dele();
void disp_arr(struct record *,int);
void disp_row(struct record);
void disp_table();
void modi_seq(struct record [],int);
void disp_str(char,int);
void sort(struct record [],int);
void sort_name(struct record [],int);
void sort_city(struct record [],int);
void dele_name(struct record [],int *);
void dele_sequ(struct record [],int *);
void main()    //主函数,实现菜单控制
{
    char choice;
    while(1)
    {                 //以下代码显示功能菜单
        printf("\n\n");
        disp_str(' ',18);
        printf("通讯录管理程序\n");
        disp_str('*',50);
        putchar('\n');
        disp_str(' ',16);
        printf("1.通讯录信息输入 \n");
        disp_str(' ',16);
        printf("2.显示通讯录信息 \n");
        disp_str(' ',16);
        printf("3.通讯录记录查询 \n");
        disp_str(' ',16);
        printf("4.修改通讯录信息 \n");
        disp_str(' ',16);
        printf("5.通讯录记录删除 \n");
        disp_str(' ',16);
        printf("6.建立通讯录文件 \n");
        disp_str(' ',16);
        printf("7.退出通讯录程序 \n");
        disp_str('*',50);
        putchar('\n');    //以上代码显示功能菜单
        disp_str(' ',14);
        printf("请输入代码选择(1~7)");
        choice=getchar();
        getchar();
        switch(choice)
        {
        case'1':
            append();
            break;
        case'2':
            display();  //调用这个函数用不了,会出现错误
            break;
        case'3':
            printf("locate()");
            break;
        case'4':
            printf("modify()");
            break;
        case'5':
            printf("dele()");
            break;
        case'6':
            creat();
            break;
        case'7':
            return;
        default:
            continue;
        }
    }
}
void disp_str(char ch,int n)//以下代码时输出一串字符串
{
    int i;
    for(i=1;i<=n;i++)
        printf("%c",ch);
    return;
}
void creat()//以下代码是创建文件功能
{
    FILE *fp;
        if((fp=fopen("address","wb"))==NULL)
        {
            printf("can't open file!\n");
            return;
        }
        fclose(fp);
           printf("\n文件成功建立,请使用“通讯录信息输入”功能输入信息!");
    getchar();
    return;
}
void append() //以下代码是输入数据功能
{
    struct record info;
    FILE *fp;
    char ask;
    if((fp=fopen("address","ab"))==NULL)
    {
        printf("can't open file!\n");
        return;
    }
    while(1)
    {
        printf("\n\n");
        fflush(stdin);
           printf("输入通讯录记录\n");
        printf("姓名: ");
          gets(info.name);
        printf("年龄: ");
          scanf("%d",&info.age);
          getchar();
          printf("电话: ");
          gets(info.tele);
          printf("所在城市: ");
          gets(info.city);
          printf("所在单位: ");
          gets(info.units);
          printf("备注: ");
          gets(info.note);
          fwrite(&info,sizeof(struct record),1,fp);
          printf("继续输入记录吗?(Y/N)");
          ask=getchar();
          getchar();
          if(ask!='y'&&ask!='Y')
              break;
          }
    fclose(fp);
    return;
}
void display()  //以下全部代码就是调用case‘2’的代码,我觉得是文件的读入问题,但不懂怎么改,有劳哪位前辈帮解答,不胜感激
{
    struct record info[M];
    FILE *fp;
    char ask;
    int i=0;
    if((fp=fopen("address","rb"))==NULL)
    {
        printf("can't open file!\n");
        return;
    }
    while(!feof(fp))
        fread(&info[i++],sizeof(struct record),1,fp);
    while(1)
    {
        printf("\n\n");
        disp_str(' ',10);
        printf("显示通讯录信息(共有%d条记录)\n",i);
        disp_str('*',50);
        putchar('\n');
        disp_str(' ',17);
        printf("1.按自然顺序显示 \n");
        disp_str(' ',17);
        printf("2.按排序顺序显示 \n");
        disp_str(' ',17);
        printf("3.退出显示程序 \n");
        disp_str('*',50);
        putchar('\n');
        disp_str(' ',16);
        printf("请输入代码选择(1~3)");
        ask=getchar();
        if(ask=='3')
        {
            fclose(fp);
            return;
        }
        else if(ask=='1')
            disp_arr(info,i);
        else if(ask=='2')
            sort(info,i);
    }
}
void disp_arr(struct record info[],int n)
{
    char press;
    int i;
    for(i=0;i<n;i++)
    {
        if(i%20==0)
        {
            printf("\n\n");
            disp_str(' ',25);
            printf("我 的 通 讯 录 \n");
            disp_str('*',78);
            printf("\n");
            printf("序号   ");
            disp_table();
        }
        printf("%3d",i+1);
        disp_row(info[i]);
        if((i+1)%20==0)
        {
            disp_str('*',78);
            printf("\n");
            printf("按回车键继续显示下一屏,按其他键结束显示!\n");
            printf("请按键...");
            press=getchar();
            getchar();
            if(press!='\n')
                break;
        }
    }
    disp_str('*',78);
    printf("\n");
    printf("按任意键继续...");
    getchar();
    return;
}

void disp_row(struct record row)
{
    printf("%-12s%-12s%-15s%-15s%-16s%-4d%-s\n",row.name,row.tele,row.city,row.units,row.age,row.note);
    return;
}
void sort(struct record info[],int n)
{
    char ask;
    while(1)
    {
        printf("\n\n");
        disp_str(' ',16);
        printf("通 讯 录 排 序\n");
        disp_str('*',50);
        putchar('\n');
        disp_str(' ',17);
        printf("1.按姓名排序 \n");
        disp_str(' ',17);
        printf("2.按城市排序 \n");
        disp_str(' ',17);
        printf("3.返回上一层 \n");
        disp_str('*',50);
        putchar('\n');
        disp_str(' ',16);
        printf(" 请输入号码选择(1~3)");
        ask=getchar();
        getchar();
        if(ask=='3')
            break;
        else if(ask=='1')
            sort_name(info,n);
        else if(ask=='2')
            sort_city(info,n);
    }
    return;
}

void sort_name(struct record info[],int n)
{
    int i,j;
    struct record info_t[M],temp;
    for(i=0;i<n;i++)
        info_t[i]=info[i];
    for(i=1;i<n;i++)
        for(j=0;j<n-i;j++)
        {
            if(strcmp(info_t[j].name,info_t[j+1].name)>0)
            {
                temp=info_t[j];
                info_t[j]=info_t[j+1];
                info_t[j+1]=temp;
            }
        }
        disp_arr(info_t,n);
        return;
}

void sort_city(struct record info[],int n)
{
    int i,j;
    struct record info_t[M],temp;
    for(i=0;i<n;i++)
        info_t[i]=info[i];
    for(i=1;i<n;i++)
        for(j=0;j<n-i;j++)
        {
            if(strcmp(info_t[j].city,info_t[j+1].city)>0)
            {
                temp=info_t[j];
                info_t[j]=info_t[j+1];
                info_t[j+1]=temp;
            }
        }
        disp_arr(info_t,n);
        return;
}
void disp_table()
{
    printf("姓 名");
    disp_str(' ',6);
    printf("电 话");
    disp_str(' ',6);
    printf("城 市");
    disp_str(' ',9);
    printf("单 位");
    disp_str(' ',8);
    printf("年 龄");
    disp_str(' ',2);
    printf("备 注\n");
    return;
}
搜索更多相关主题的帖子: 记录 阅读 display include modify 
2011-12-22 11:29
路与梦
Rank: 2
等 级:论坛游民
帖 子:1
专家分:14
注 册:2011-12-22
收藏
得分:14 
新手路过…太长了…
晚上还要考c语言!!先逃了…
2011-12-22 11:33
快速回复:我是照抄书上的程序,但在显示记录那个环节出了问题,为阅读简便我除去 ...
数据加载中...
 
   



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

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