标题:求高手帮忙,我这个程序怎么就错了呢?
取消只看楼主
Berrysun
Rank: 1
来 自:浙江中医药大学
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-17
结帖率:66.67%
已结贴  问题点数:10 回复次数:4 
求高手帮忙,我这个程序怎么就错了呢?
程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct record{
    char name[20];
    char street[20];
    char city[20];
    char eip[20];
    char state[20];
}person[500];
struct slnode{
    record date;
    struct slnode *next;
    struct slnode *prior;
};
typedef slonde *linklist;
linklist l;
int num=0;
FILE *fp;
void mainmenu();
void searchmenu();
void enter();
void search();
void display();
void load();
void save();
void delet();
void listinsert();
void initlist();
void main()
{
    initlist();
    load();
    listnsert();
    while (l)
        mainmenu();
}
void load()
{
    if ((fp=fopen("person.bin","rb"))==NULL)
    {
        printf("\n\t\t通讯录文件不存在");
            if ((fp=fopen("person","wb"))==NULL)
            {
                printf("\n\t\t建立失败");
                    exit(0);
            }
            else
            {
                printf("\n\t\t通讯录文件已建立");
                printf("\n\t\t按任意键进入主菜单");
                getch();
                return;
            }
            exit(0);
    }
    fseek (fp,0,2);
    if(ftell(fp)>0)
    {
        rewind(fp);
        for(num=0;!feof(fp)&&fread(&person[num],sizeof(struct record),l,fp);num++);
        printf("\n\t\t文件导入成功");
        printf("\n\t\t按任意键返回主菜单");
        getch();
        return;
    }
    printf("\n\t\文件导入成功");
    printf("\n\t\通讯录文件中无任何记录");
    printf("\n\t\按任意键返回主菜单");
    getch();
    return;
}
void mainmenu()//主菜单
{
    char choic;
    system("cls");
    printf("******************欢迎进入通讯录系统******************");
    printf("*********welcome to the address book system***********");
    printf("****************** 1—新添记录 ***********************");
    printf("****************** 2—查找联系人 *********************");
    printf("****************** 3—删除联系人 *********************");
    printf("****************** 4—保存退出 ***********************");
    printf("****************** 5—不保存退出 *********************");
    printf("******************************************************");
    printf("\n\t\请选择:");
        choic=getch();
    switch (choic)
    {
    case'1':enter();break;
    case'2':serchmenu();break;
    case'3':delet();break;
    case'4':save();break;
    case'5':exit();break;
    default:mainmenu();
    }
}
void searchmenu()//查询菜单
{
    char choic;
    system("cls");
    printf("**********************查询菜单************************");
    printf("****************** 1—显示所有 ***********************");
    printf("****************** 2—按姓名查询 *********************");;
    printf("****************** 3—返回主菜单 *********************");
    printf("******************************************************");
        printf("\n\t\请选择:");;
        choic=getch();
    switch (choic)
    {
    case'1':displayr();break;
    case'2':serch();break;
    case'3':mainmenu();break;
   
    }
}
void enter()//添加记录
{
    printf("***************** 请输入人员信息 *********************");
    printf("\n\t\t姓名:")
    scanf("%s",&person[num].name);
    printf("\n\t\t街道:")
    scanf("%s",&person[num].street);
    printf("\n\t\t城市:")
    scanf("%s",&person[num].city);
    printf("\n\t\t输入邮编:")
    scanf("%s",&person[num].eip);
    printf("\n\t\t国家:")
    scanf("%s",&person[num].state);
    num++;
    printf(\n\t\t是否继续添加?(Y/N):");
        if(getch()=='y')
            enter();
        return;
}
void display()//显示所有
{
int i ;
system("cls");
if(num!=0)
{
      printf("************** 以下为通讯录所有信息 *******************");
        for(i=0;i<num;i++)
        {
           printf("\n\t\t姓名: %s",person[i].name);
           printf("\n\t\t街道: %s",person[i].street);
           printf("\n\t\t城市: %s",person[i].city);
           printf("\n\t\t邮编: %s",person[i].eip);
           printf("\n\t\t国家: %s",person[i].state);
           printf("\t\t);
               if(i+1<num)
               {
                 printf("\n\t\t_____________________");
                 system("pause");
               }

        }
        printf("\n\t\t**********************************************);
}

   
else
printf("\n\t\t通讯录中无任何记录");
printf("\n\t\t按任意键返回主菜单:");
getch()
    return;
}
void save()//写入文件
{
    int i;
    if((fp=fopen("person","wb"))==NULL)
    {
        printf("\n\t\t文件打开失败");
    }
    for (i=0;i<num;i++)
    {
        if(fwrite(&person[i],sizeof(struct record),l,fp)!=l)
        {
            printf("\n\t\t文件打开失败");
        }
        for(i=0;i<num;i++)
        {
            if(fwrite(&person[i],sizof(struct recoad),l,fp)!=l)
            {
             printf("\n\t\t写入文件错误!\n");
        }
        }
        fclose(fp);
        printf("\n\t\t通讯录文件已保存");
        printf("\n\t\t按任意键退出程序\n\t\t");
        exit(0);

    }
    void listinsert()//增加一个结点
    {
        linklist s,p=l;
        for(int i=0;i<num;i++)
        {
            s=new slnode;
            strcpy(s->date.name,person[i].name);
            strcpy(s->date.city,person[i].city);
            strcpy(s->date.street,person[i].street);
            strcpy(s->date.eip,person[i].eip);
            strcpy(s->date.state,person[i].state);
            s->prior=p->prior;
            s->next=p;
            p->prior->next=s;
            p->prior=s;
            p=p->next;
        }
    }
    void initlist()
    {
        l=new slnode;
        l->next=l;
        l->prior=l;
    }
    void search()
    {
        int j=0,a=0;
        linklist p=l;
        printf("\n\t\t***************** 按姓名查找 *******************");
            char name[20];
        printf("\n\t\t请输入姓名:");
        scanf("%",name);
        for(int i=a;i<num;i++;p=p->next)
        {
            if(strcmp(name,p->next->date.name)==0)
            {
                if(strcmp(name,p->next->date.name)==0)
                {
                    printf("查询到的信息:");
                    printf("\n");
                    printf("姓名:");
                    printf("%s",p->next->date.name);
                    printf("\n");
                    printf("城市:");
                    printf("%s",p->next->date.city);
                    printf("\n");
                    printf("国家:");
                    printf("%s",p->next->date.state);
                    printf("\n");
                    printf("街道:");
                    printf("%s",p->next->date.street);
                    printf("\n");
                    printf("邮政编码:");
                    printf("%s",p->next->date.eip);
                    j++;
                }
                if(j==0)
                    printf("\t\t 该通讯录没有该人!");
                if((i+1)<num)
                {
                    printf("\n\t\t 是否继续查找相同名字的人员信息:(y/n)");
                    if(get()=='y')
                    {
                        a=i;
                        continue;

                    }
                    else
                        return;
                }
                else
                {
                    printf("\n\t\t按任意键返回主菜单");
                    getch();
                    return;
                }
            }
        }
        void delet()
        {
            int a=0;
            int findmark=0;
            int j;
            int deletmark=0;
            int i;
            char name[20];
            printf("\n\t\t请输入要删除人员姓名:");
            scanf("%s",name);
            for (i=a;i<num;i++)
            {
                if(strcmp(person[i].name.name)==NULL)
                {
                    printf("\n\t\t以下是您要删除的人员记录:");
                    findmark++;
printf("\n\t\t_______________________________");
printf("\n\t\t姓名:%s",person[i].name);
printf("\n\t\t街道:%s",person[i].street);
printf("\n\t\t城市:%s",person[i].city);
printf("\n\t\t邮编:%s",person[i].eip);
printf("\n\t\t国家:%s",person[i].state);
printf("\n\t\t_______________________________");
printf("\n\t\t是否删除?(y/n)");
if(getch()=='y'){
    for(j=i;j<num-1;j++)
        person[j]=person[j+1];
    num--;
    deletemark++;
    printf("\n\t\t删除成功");
    if((i+1)<num){
        printf("\n\t\t是否继续删除相同姓名的人员信息?(y/n)");
        if(getch()=='y'){
            a=i;continue;
        }
    }
    printf("\n\t\t是否继续删除?(y/n)");
    if(getch()=='y')
        delet();
    return;
}
if((i+1)<num){
    printf("\n\t\t是否继续删除相同姓名的人员信息?(y/n)");
    if(getch()=='y'){
        a=i;continue;
    }
}
}
else
continue;
}
if((deletemark==0)&&(findmark==0)){
    printf();
    return;
}
else if(findmark!=0){
    printf("\n\t\t没有重名信息");
    printf("\n\t\t没有该人员的记录");
    return;
}
}
搜索更多相关主题的帖子: record 
2012-12-21 00:09
Berrysun
Rank: 1
来 自:浙江中医药大学
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-17
得分:0 
回复 7楼 peach5460
是抄的,不过有一句不会改
typedef slonde *linklist;
linklist l;
这里定义链表怎么不能定义成全局的呢???

没有伞的孩子,只能努力奔跑。
2012-12-22 20:49
Berrysun
Rank: 1
来 自:浙江中医药大学
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-17
得分:0 
回复 2楼 yuccn
我也知道一大堆错误。。。。只是第一个错误不会改。。。。
typedef slonde *linklist;
linklist l;

没有伞的孩子,只能努力奔跑。
2012-12-22 20:50
Berrysun
Rank: 1
来 自:浙江中医药大学
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-17
得分:0 
回复 3楼 zhaoya881010
不要都这么说我啊。。。菜鸟很受打击啊。。。

没有伞的孩子,只能努力奔跑。
2012-12-22 20:51
Berrysun
Rank: 1
来 自:浙江中医药大学
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-17
得分:0 
回复 11楼 yaobao
亲,不行耶。。。。
这里目的是想建立一个双链表linklist指针l
我改成下面代码:
struct slnode{
    record date;
    struct slnode *next;
    struct slnode *prior;
}slnode,*linklist;
linklist l;
然后也是错的,为什么呢?

没有伞的孩子,只能努力奔跑。
2012-12-23 14:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-392506-1-1.html




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

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