| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1200 人关注过本帖
标题:通讯录的信息存储和读取问题
只看楼主 加入收藏
hzhgagaga
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-12-28
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
通讯录的信息存储和读取问题
#include<stdio.h>
#include<string.h>
#include<stdio.h>
#include<windows.h>
int N;
int M=0,H=0;
void menu();
void add();
void alter();
void search();
void paix();
void liulan();
void help();
void exit();
void findname();
void findnum();
void findphonenum();
void findemail();
void wenjian();
void adddd();
void bdddd();   
void cdddd();
void dddd();
void edddd();
void fdddd();
void xuehao();
void xingmin();
void deletebyphonenum();
void deletebymark();
void deletebystu();
void readfile();

struct student
{
    int num;
    char name[20];
    char sex[5];
    char workplace[20];
    int phonenum;
    char email[20];
    char deletebyphonenum;


}stu[1000],temp;





void main()
{
    menu();
}

void menu()
{   
    system("cls");
    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
    printf("================================================================================");
    printf("\n\t  ***☆→菜单←☆***\n");
    printf("\n#1※添加学生信息\t#2※修改学生信息\n");
    printf("\n#3※删除学生信息\t#4※查询学生信息\n");
    printf("\n#5※学生信息排序\t#6※浏览学生信息 \n");
    printf("\n#7※存入文件    \t#8※从文件中读取\n");
    printf("\n#9※帮助菜单\t\t#10※退出系统\n");
    printf("\n================================================================================");
    printf("\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
    printf("\n请输入使用的功能(1~10):");
    {
        int a;
        scanf("%d",&a);

    {switch(a)
    {
        case 0:menu();break;
        case 1:add();break;
        case 2:alter();break;
        case 3:dele();break;
        case 4:search();break;
        case 5:paix();break;
        case 6:liulan();break;
        case 9:help();break;
        case 8:readfile();break;
        case 7:wenjian();break;
        case 10:exit(0);
    }
    }
    }
    printf("\n");
}



void paix()
{   
    int n;
    system("cls");
    printf("\n1.按照学号来排序#####2.按照姓名来排序#####3.返回主菜单\n");
    printf("请输入使用的功能(1~3):");
    scanf("%d",&n);
    if(n==1)
        xuehao();
    if(n==2)
        xingmin();
    if(n<1&&n>2)
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}


void xuehao()
{
    int i,j,k;
    printf("\n================以下为按学号排序================\n");
    for(i=0;i<M;i++)
        for(j=0;j<M-i;j++)
            if(stu[j].num>stu[j+1].num)
            {
                temp=stu[j];  
                stu[j]=stu[j+1];  
                stu[j+1]=temp;
            }
    printf("学号,姓名,性别,工作单位,电话号码,E-mail\n");
    for(i=0;i<M;i++)
        printf("%d,%s,%s,%s,%d,%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,stu[i].phonenum,stu[i].email);
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}


void xingmin()
{
    int i,j;
    char k[10];
    printf("\n================以下为按姓名排序================\n");
    for(i=0;i<M;i++)
        for(j=0;j<M-i;j++)
            if(strcmp(stu[j].name,stu[j+1].name))
            {
                temp=stu[j];  
                stu[j]=stu[j+1];  
                stu[j+1]=temp;
            }
    printf("学号,姓名,性别,工作单位,电话号码,E-mail\n");
    for(i=0;i<M;i++)
    printf("%d,%s,%s,%s,%d,%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,stu[i].phonenum,stu[i].email);
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}


void liulan()
{
    int i;
    system("cls");
    printf("\n==================以下为所有信息==================\n");
    printf("学号,姓名,性别,工作单位,电话号码,E-mail\n");
    for(i=0;i<M;i++)
        printf("%d,%s,%s,%s,%d,%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,stu[i].phonenum,stu[i].email);
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}


void wenjian()////////////////////////////////////////*存储结构体中的信息到文件中****/////////////////////////////////////////////////
{
    FILE *fp;
    int i;
    system("cls");
    if((fp=fopen("stu.txt","a+"))==NULL)
    {
        printf("cannot open file\n");
        return;
    }
    fp=fopen("stu.txt","a+");
    for(i=0;i<M;i++)
    {  
        fprintf(fp,"%d,%s,%s,%s,%d,%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,stu[i].phonenum,stu[i].email);
    }
    fclose(fp);
    printf("已存储\n");
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}



void readfile()/////*读取文件中的信息到结构体中****//////
{
    char *p="stu.txt";
    FILE *fp;
    int i=0;
    if ((fp=fopen("stu.txt","r"))==NULL)
    {  
        printf("Open file error! Strike any key to exit!");
        system("pause");
        system("cls");
        menu();
    }
    while(fscanf(fp,"%d,%s,%s,%s,%d,%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,stu[i].phonenum,stu[i].email)==6)
    {  
        i++;
        i=i;
    }
    fclose(fp);
    H=i;
    printf("录入完毕!\n");
    system("pause");
    system("cls");
    menu();
}









void add()
{    int n,i;
    system("cls");
    printf("请输入要写入的学生人数:\n");
    scanf("%d",&n);

    for(i=M+H;i<M+n+H;i++)
    {
        printf("学号");
        scanf("%d",&stu[i].num);
        printf("\n姓名:");
        scanf("%s",stu[i].name);
        printf("\n性别:");
        scanf("%s",stu[i].sex);
        printf("\n工作单位:");
        scanf("%s",stu[i].workplace);
        printf("\n电话号码:");
        scanf("%d",&stu[i].phonenum);
        printf("\n邮箱:");
        scanf("%s",stu[i].email);
    }
    printf("已录入!\n");
    M=M+n+H;
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}



void search()
{    int n;
    system("cls");
    printf("\n#####1.按照姓名来查找\n#####2.按照学号来查找\n#####3.按照电话号码查找\n#####4.按邮箱查找\n#####5.返回主菜单\n");
    printf("请输入使用的功能(1~5):");
    scanf("%d",&n);
    if(n==1)
        findname();
    if(n==2)
        findnum();
    if(n==3)
        findphonenum();
    if(n==4)
        findemail();
    if(n<1&&n>4)
        menu();   
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}




void findname()
{
    int i=0,j=0;
    char name[20];
    printf("请输入查找学生姓名:");
    scanf("%s",name);
    for(i=0;i<M;i++)
        if(strcmp(name,stu[i].name)==0)
        {
            printf("学号:%d\n",stu[i].num);
            printf("姓名:%s\n",stu[i].name);
            printf("性别:%s\n",stu[i].sex);
            printf("工作单位:%s\n",stu[i].workplace);
            printf("电话号码:%d\n",stu[i].phonenum);
            printf("邮箱:%s\n",stu[i].email);
            j++;
            break;
        }
        if(j==0)
        printf("没有找到该学生信息\n");
            printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}




void findnum()
{
    int n,i,j=0;
    printf("请输入查找学生学号:");
    scanf("%d",&n);
    for(i=0;i<M;i++)
        if(n==stu[i].num)
        {
            printf("学号:%d\n",stu[i].num);
            printf("姓名:%s\n",stu[i].name);
            printf("性别:%s\n",stu[i].sex);
            printf("工作单位:%s\n",stu[i].workplace);
            printf("电话号码:%d\n",stu[i].phonenum);
            printf("邮箱:%s\n",stu[i].email);
            j++;
            break;
        }
        if(j==0)
        printf("没有找到该学生信息\n");
            printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}


void findphonenum()
{
    int n,i,j=0;
    printf("请输入查找学生电话:");
    scanf("%d",&n);
    for(i=0;i<M;i++)
        if(n==stu[i].phonenum)
        {
            printf("学号:%d\n",stu[i].num);
            printf("姓名:%s\n",stu[i].name);
            printf("性别:%s\n",stu[i].sex);
            printf("工作单位:%s\n",stu[i].workplace);
            printf("电话号码:%d\n",stu[i].phonenum);
            printf("邮箱:%s\n",stu[i].email);
            j++;
            break;
        }
        if(j==0)
        printf("没有找到该学生信息\n");
            printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}



void findemail()
{
    char email[20];
    int i,j=0;
    printf("请输入查找学生邮箱:");
    scanf("%s",email);
    for(i=0;i<M;i++)
        if(strcmp(email,stu[i].email)==0)
        {
            printf("学号:%d\n",stu[i].num);
            printf("姓名:%s\n",stu[i].name);
            printf("性别:%s\n",stu[i].sex);
            printf("工作单位:%s\n",stu[i].workplace);
            printf("电话号码:%d\n",stu[i].phonenum);
            printf("邮箱:%s\n",stu[i].email);
            j++;
            break;
        }
        if(j==0)
        printf("没有找到该学生信息\n");
            printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}





void alter() //修改通讯录中的信息//
{
    int i,k,n;
    char name[20];
    system("cls");
    if(M==0)
    {
        printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字则返回主菜单)");
        printf("请选择");
        scanf("%d",&n);
        if(n==1)
            add();
else
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
    }
    printf("\n 请输入要修改学生的姓名:");
    scanf("%s",name);
    for(i=0;i<M;i++)
        if(strcmp(name,stu[i].name)==0)
        {
            printf("\n 已查询到,记录为:");
                printf("\n\n 学号,姓名,性别,工作地址,电话,邮箱:");
            printf("\n %d,%s,%s,%s,%d,%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,stu[i].phonenum,stu[i].email);
            break;
        }
        if(i==M)//当i=N时,证明通讯录中所有的学生都已经查证//
        {
            printf("\n 没有该同学的信息,请选择其它操作:");
            printf("\n 如果输入1则重新输入数据,否则返回到主菜单.");
            if(n=1)  alter();
else     
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
        }
        else
        {
            system("pause");
            system("cls");
            printf("\n 学号,姓名,性别,工作地址,电话,邮箱:");
                    printf("\n %d,%s,%s,%s,%d,%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,stu[i].phonenum,stu[i].email);
            printf("\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");   
            printf("\n 请选择要修改的信息且一次操作只能修改一次:");
            printf("\n\n 1.学号  2.姓名"); //满足各种需要修改的程序//
            printf("\n\n 3.性别  4.工作地址");
                printf("\n\n 5.电话  6.邮箱");
                printf("输入其它数字则返回主菜单");
                scanf("%d",&k);
                if (k==1)// 修改学号//
                {
                    printf("请输入新数据:");
                    printf("请输入学号:");
                    scanf("%d",&stu[i].num);
                }
                if (k==2)//修改姓名//
                {
                    printf("请输入新数据:");
                    printf("请输入姓名:");
                    scanf("%s",stu[i].name);
                }
                if(k==3)//修改性别//
                {
                    printf("请输入新数据:");
                    printf("请输入性别:");
                    scanf("%s",stu[i].sex);
                }
                if(k==4)//修改工作地址//
                {
                    printf("请输入新数据:");
                    printf("请输入通讯地址:");
                    scanf("%s",stu[i].workplace);
                }
                if(k==5)//修改电话//
                {
                    printf("请输入新数据:");
                    printf("请输入电话号码:");
                    scanf("%d",&stu[i].phonenum);
                }
                if(k==6)//修改邮箱//
                {
                    printf("请输入新数据:");
                    printf("请输入新的邮箱");
                    scanf("%s",stu[i].email);
                }
else   
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
                printf("***************************************************************");

        }

}





/************************************************删除通讯录中的信息******************************************************/
void deletebyphonenum()
{
    int i,j,n;
    int phonenum;
    printf("\n请输入要删除用户电话号码:");
    scanf("%d",&phonenum);
    if(M==0)
    {
        printf("暂无通讯录数据,是否添加通讯录:1.是(按其它数字则返回主菜单)");
        printf("请选择");
        scanf("%d",&n);
        if(n==1)
            add();}
        else
        {        
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
        
    }
   
    for (i=0;i<M;i++)
    {
        if (strcmp(&stu[i].phonenum,&phonenum)==0)
        {
            for (j=0;j<M-1;j++)
            {
            stu[j]=stu[j+1];
            M--;
            printf("\n删除成功");
            printf("\n即将返回主菜单\n");
            system("pause");
            system("cls");
            menu();
            }
        }
        else
    printf("对不起,文件中无任何纪录");
    printf("\n即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
    }

}

void deletebyname()
{
    int j,i;
    char name[20];
 printf("\n请输入要删除用户姓名:");
 scanf("%s",name);
 if(M==0)
    {
        printf("\n对不起,文件中无任何纪录");
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
    }
for (i=0;i<M;i++)
{
 if (strcmp(stu[i].name,name)==0)
 {
  for (j=0;j<M-1;j++)
   stu[j]=stu[j+1];
  M--;
  printf("\n删除成功");
      printf("\n即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
   }
  }
 }



dele()
{
    char choic;
    system("cls");
    printf("1-按电话号码删除 2-按姓名删除\n");
    printf("请选择:");
    choic=getch();
    switch (choic)
    {
        case '1':deletebyphonenum();break;
        case '2':deletebyname();break;
    }
    printf("即将返回主菜单\n");
    system("pause");
    system("cls");
    menu();
}




void help()
{
    int n;
    system("cls");//清屏
    printf("\n1.添加学生信息  2.修改学生信息.\n");
    printf("\n3.删除学生信息  3.查询学生信息.\n");
    printf("\n4.学生信息排序  6.浏览学生信息.\n");
    printf("\n7.返回主菜单");
    printf("\n");
    printf("\n请选择序号(1~7):");
    scanf("%d",&n);
    switch(n)
    {
        case 1:adddd();
                break;
        case 2:bdddd();   
                break;
        case 3:cdddd();
                break;
        case 4:dddd();
                break;
        case 5:edddd();
                break;
        case 6:fdddd();
                break;
        case 7:menu();
                break;
    }        
}            
            
void adddd()
{
    printf("该功能能在通讯录中添加学生信息,如性别,学号,姓名,电话号码,工作单位,E-mail地址\n这些信息将会保存在文件中\n");
    printf("以便其他功能使用\n");
    printf("即将返回上一个菜单");
    system("pause");
    system("cls");
    help();
}

void bdddd()
{
    printf("该功能能在通讯录中修改学生信息,如性别,学号,姓名,电话号码,工作单位,E-mail地址\n这些信息将会保存在文件中\n");
    printf("以便其他功能使用\n");
    printf("即将返回上一个菜单");
    system("pause");
    system("cls");
    help();
}

void cdddd()
{
    printf("该功能能在通讯录中删除学生信息,如性别,学号,姓名,电话号码,工作单位,E-mail地址\n这些信息将会保存在文件中\n");
    printf("以便其他功能使用\n");
    printf("即将返回上一个菜单");
    system("pause");
    system("cls");
    help();
}

void dddd()
{
    printf("该功能能在通讯录中查询学生信息,如性别,学号,姓名,电话号码,工作单位,E-mail地址\n这些信息将会保存在文件中\n");
    printf("以便其他功能使用\n");
    printf("即将返回上一个菜单");
    system("pause");
    system("cls");
    help();
}   

void edddd()
{
    printf("该功能按姓名排序\n");
    printf("该功能按学号排序\n");
    printf("即将返回上一个菜单");
    system("pause");
    system("cls");
    help();
}

void fdddd()
{
    printf("该功能能在通讯录中浏览学生信息,如性别,学号,姓名,电话号码,工作单位,E-mail地址\n这些信息将会保存在文件中\n");
    printf("以便其他功能使用\n");
    printf("即将返回上一个菜单");
    system("pause");
    system("cls");
    help();
}            



我可以把通讯录内容存储到文件中,可是读取的时候失败了,弄了很久还是不太清楚,请教一下各位前辈我的数据存储和读取文件哪里出了问题。


搜索更多相关主题的帖子: search include 通讯录 信息 
2016-12-28 23:45
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
fscanf和scanf的用法相似~

while(fscanf(fp,"%d,%s,%s,%s,%d,%s\n",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].workplace,&stu[i].phonenum,&stu[i].email)==6)
    {  
        i++;
    }

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-29 01:23
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
上面水贴,看这段代码~

程序代码:
void readfile()/////*读取文件中的信息到结构体中****//////
{ 
    char *p="stu.txt"; 
    FILE *fp; 
    int i=0; 

    if ((fp=fopen("stu.txt","r"))==NULL) 
    {  
        printf("Open file error! Strike any key to exit!"); 
        system("pause"); 
        system("cls");
        menu(); 
    } 

    while(fscanf(fp,"%d,%[^,]%*c%[^,]%*c%[^,]%*c%d,%s\n",&stu[i].num,stu[i].name,stu[i].sex,stu[i].workplace,&stu[i].phonenum,stu[i].email)==6)
    {  
        i++;
        M++;
    }

    fclose(fp); 
    H=i; 
    printf("录入完毕!\n");
    system("pause"); 
    system("cls");
    menu(); 
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-29 02:07
hzhgagaga
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-12-28
收藏
得分:0 
回复 3楼 九转星河
成功了,非常感谢!但是我发现有时候排序中按学号排序,有些信息会显示0.....0,然后浏览的时候那些信息也是0.....0,然后回到主菜单,用姓名排序,有些0.....0又会恢复成原来的信息,这是怎么回事呢
2016-12-29 11:11
快速回复:通讯录的信息存储和读取问题
数据加载中...
 
   



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

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