| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 628 人关注过本帖
标题:排序操作问题
只看楼主 加入收藏
tangshunyi33
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-7-3
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
排序操作问题
#include<stdio.h>
#include<string.h>
#define N 1000
static int i=0;

struct record{    //声明一个结构体,记录数据
    char name[20];
    char email[30];   
    char homeaddr[60];
    char telephone[13];
}records[N];

//读文件
void Data_Up(struct record records[])           
{
      FILE *fp;
   if((fp=fopen("record.txt","a+"))==NULL)  //判断文件是否打开
   {
       printf("打开失败!\n");
       return;
   }
   else
        
        for(i=0;!feof(fp);i++)
        {
      fscanf(fp,"%s\t",&records[i].name);
      fscanf(fp,"%s\t",&records[i].email);
      fscanf(fp,"%s\t",&records[i].homeaddr);
      fscanf(fp,"%s\t",&records[i].telephone);   //读取文件中的内容

} fclose(fp);
}

//输出联系人         
void Data_Show(int n){
      printf("联系人姓名:%s",records[n].name);   
    printf("电话:%s",records[n].telephone);               //输出联系人信息
    printf("邮箱:%s",records[n].email);
    printf("家庭住址:%s",records[n].homeaddr);
    printf("\n");
}

//添加联系人
void Add_People(char name[20])
{  static int j=0;
   
        i++,j++;
        strcpy(records[j].name,name);
        printf("\n请输入联系人的电子邮件:");   //添加新的联系人,电话,地址等
        scanf("%s",records[j].email);
        printf("\n请输入联系人的家庭地址:");
        scanf("%s",records[j].homeaddr);
        printf("\n请输入联系人的电话:");
        scanf("%s",records[j].telephone);
        printf("添加成功!\n");
    }



//查询操作
int Search_Name(char namestr[20])
{
    int j;             /*不考虑同名的人*/
    for(j=0;j<=i;j++)
    {if(strcmp(namestr,records[j].name)==0)
       break;
    }
    return j;          /*返回联系人在数组中的下标*/
}

//修改操作
void change (char name [20])
{
    int n,m;
    char string [60];
    n=Search_Name(name);
    if (n>i){printf("您查找的联系人不存在!\n");return;}
    Data_Show(n);
    printf("请选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
    scanf("%d",&m);
    while(m!=5)
    {
    switch(m)
    {
    case 1:printf ("请输入新的姓名:");scanf("%s",string);      //修改联系人姓名,电话等
        strcpy(records[n].name,string);break;
    case 2:printf ("请输入新的电子邮件:");scanf("%s",string);
        strcpy(records[n].email,string);break;
    case 3:printf ("请输入新的地址:");scanf("%s",string);
        strcpy(records[n].homeaddr,string);break;
    case 4:printf ("请输入新的电话:");scanf("%s",string);
        strcpy(records[n].telephone,string);break;
    case 5:return;
    }
    printf("请继续选择你要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!\n\n");
    scanf("%d",&m);
    }
}



//删除操作
void DeletePeo()
{
    char nametemp[20];
    int tp,n;
    if(i<1)
    {printf("\n没有删除的记录\n");return;}
    printf("请输入您要查找的联系人的姓名:");
    scanf("%s",nametemp);
    n=Search_Name(nametemp); //找出联系人在数组中存放的下标
    if(n==-1)
    {printf("查找失败!\n");return;}
    printf("确认要删除吗?确认按1,否则按任意键返回上一级菜单!\n");
    scanf("%d",&tp);
    if(tp==1)
    {
        int j;
        for(j=n+1;j<=i;j++)
        {
            strcpy(records[j-1].name,records[j].name);
            strcpy(records[j-1].email,records[j].email);           //运用字符串复制删掉要删除的联系人
            strcpy(records[j-1].homeaddr,records[j].homeaddr);
            strcpy(records[j-1].telephone,records[j].telephone);}
        i--;/*联系人总数减1*/
    }
    else return;}
//保存数据
void Data_Save(struct record records[])  
{  
    FILE *fp;
    int j;
   if((fp=fopen("record.txt","w"))==NULL)  //判断文件是否打开
   {
       printf("保存失败!\n");
       return;
   }
  
    for(j=0;j<100;j++)   
    {  
        fprintf(fp,"%s\t%s\t%s\t%s\t",records[j].name,records[j].telephone,records[j].homeaddr,records[j].email);  //将联系人的信息保存到文本文件中
    }   
    fclose(fp);  
    printf("保存完毕!\n");
}



//排序操作
void SortString(){
    int j,n;
     int m;
   char  shi[N];
   for(m=0;m<i;m++){
       shi[m]=m;
   }


       for(j=0;j<i-1;j++){
          for(m=j+1;m<i;m++)
            {
        if(strcmp(records[j].name,records[m].name)<0)
        {
           shi[m]=j;
           shi[j]=m;
        }   
        
    }   
    }
    for(m=0;m<=i;m++){
        printf("%d\n",shi[m]);
        Data_Show(shi[m]);
}

}


 void main(){
    int ch,m,n,ret;
    char tp,nametemp[20];
    Data_Up(records);/*把文件数据导入内存*/
    i--;
    printf("电子通讯录:\n");
    printf("请选择您需要的操作:\n");
    printf("1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->排序输出;\n8->退出\n\n");
    do{
        ret=scanf("%d",&ch);
        if(ch<1 || ch>8)
        {
            printf("输入有误!请重新输入:\n");
            getchar();}
            
        }while(ret!=1);

    while(ch!=8){
        switch(ch){
        case 1:printf("请输入要修改的联系人姓名:");
            scanf("%s",nametemp);
            change(nametemp);break;
        case 2:for(m=0;m<=i;m++)Data_Show(m);break;
        case 3:DeletePeo();break;
        case 4:printf("请输入你要查询的人的姓名:");
        scanf("%s",nametemp);
         n=Search_Name(nametemp);
        if(n>i)printf("没有你要查找的联系人!\n");
          else
            Data_Show(n);break;
        case 5:printf("请输入待添加的联系人的姓名:");
            scanf("%s",nametemp);Add_People(nametemp);break;
        case 6:printf("要保存数据吗?确定按8建,否则按任意键选择其他操作!\n");
            scanf("%d",&tp);if(tp==8)
                Data_Save(records);break;
        case 7:SortString();break;
        case 8:return;}
        printf("1->修改;\n2->查看所有联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->排序输出;\n8->退出\n\n");
           scanf("%d",&ch);
        
    }
}                           求大神帮忙解决,排序操作为什么有问题??
搜索更多相关主题的帖子: telephone include records return 结构体 
2014-07-03 12:39
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:4 
你想怎么培训,冒泡排序会用不

我不是砖家,要努力成为砖家。
2014-07-03 13:35
tangshunyi33
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-7-3
收藏
得分:0 
回复 2 楼 砖家的谎言
我们没有学过冒泡排序啊。。。
2014-07-03 13:57
a1092909114
Rank: 2
等 级:论坛游民
帖 子:27
专家分:39
注 册:2014-4-18
收藏
得分:4 
写了 挺长
2014-07-03 16:04
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:4 
觉得哪里有问题,就编一小段代码测试一下,简单问题简单处理嘛,总不至于一个排序错误就把所有的代码都发出来吧,估计论坛上很少有人愿意看那么长那么长代码的……

梦想拥有一台龙芯3A-4000
2014-07-03 16:56
周满悦
Rank: 3Rank: 3
来 自:江苏
等 级:论坛游侠
威 望:2
帖 子:42
专家分:131
注 册:2014-6-21
收藏
得分:4 
你的编程很不规范,三个字“太挤了”;

我只是一个自学的。
2014-07-05 07:18
孤独一生
Rank: 2
来 自:四川达县
等 级:论坛游民
帖 子:45
专家分:55
注 册:2013-4-1
收藏
得分:4 
朋友程序问题不要发全部代码 只把问题发过来 怎么长的代码我相信没有多少人有时间帮你查看 翻译器错误提示发过来
2014-07-05 07:53
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:4 
刚看了第一个函数就不对。就不继续往下看了。

读文件不应该用“a+"。a是追加的意思(append),打开后文件指针指向文件末尾。虽然你加了“+”允许读文件,但这时又能读到什么?就用“r”就好了,不要加加号。

重剑无锋,大巧不工
2014-07-05 23:22
快速回复:排序操作问题
数据加载中...
 
   



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

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