鱼C论坛

 找回密码
 立即注册
查看: 3599|回复: 4

一个通讯录。。有耐心的看一下

[复制链接]
发表于 2012-3-7 23:30:43 | 显示全部楼层 |阅读模式
1鱼币
#include<stdio.h>
#include<string.h>
struct information
{
        char name[20];
        char kind[20];
        char tele[20];
        char address[40];
}person[500];
int num = 0;
int adduser();
int deleteuser();
int modify();
int show();
int name_search();
int kind_search();
int tele_search();
int myexit();
int i=0;


int main()
{
        int a;
while(1)
        {
        printf("\n******欢迎来到通讯录!你要做什么?*****");
        printf("\n\t\t1.添加用户");
        printf("\n\t\t2.删除用户");
        printf("\n\t\t3.修改用户");
        printf("\n\t\t4.显示用户");
        printf("\n\t\t5.按名称查询用户");
        printf("\n\t\t6.按类别查询");
        printf("\n\t\t7.按电话号码查询");
        printf("\n\t\t8.退出");
        scanf("%c",&a);
        switch(a)
        {
        case 1:adduser();break;
        case 2:deleteuser();break;
        case 3:modify();break;
        case 4:show();break;
        case 5:name_search();break;
        case 6:kind_search();break;
        case 7:tele_search();break;
        case 8:myexit();break;
        }
        return 0;
}


int name_search()
{
        char name[20];
        printf("输入姓名:");
        scanf("%s",&name);
        for(i=0;i<num;i++)
        {
                if(strcmp(person[i].name,name)==0)
                {
                        printf("\n\t\t分类: %s",person[i].kind);
                        printf("\n\t\t姓名: %s",person[i].name);
                        printf("\n\t\t电话: %s",person[i].tele);
                        printf("\n\t\t地址: %s",person[i].address);
                        return 1;
                }
                else
                        return 0;
        }
        return 0;
}

int kind_search()
{
        int i;
        char kind[20];
        for(i=0;i<num;i++)
        {
                printf("输入类型:");
                scanf("%s",&kind);
                if(strcmp(person[i].kind,kind)==0)
                {
                        printf("\n\t\t分类: %s",person[i].kind);
                        printf("\n\t\t姓名: %s",person[i].name);
                        printf("\n\t\t电话: %s",person[i].tele);
                        printf("\n\t\t地址: %s",person[i].address);
                        return 1;
                }
                else
                        return 0;
               
        }
        return 0;
}


int tele_search()
{
        int i;
        char tele[20];
        for(i=0;i<num;i++)
        {
                printf("输入电话号:");
                scanf("%s",&tele);
                if(strcmp(person[i].tele,tele)==0)
                {
                        printf("\n\t\t分类: %s",person[i].kind);
                        printf("\n\t\t姓名: %s",person[i].name);
                        printf("\n\t\t电话: %s",person[i].tele);
                        printf("\n\t\t地址: %s",person[i].address);
                        return 1;
                }
                else
                        return 0;
        }
        return 0;
}



int adduser()
{
        int a;
        char ch0;
        char ch1;
        a=name_search();
        if(a=0)
        {
                FILE *fp;
                if((fp=fopen("通讯录.txt","w"))!=NULL)
                {
                        printf("输入类型,姓名,电话号和地址");
                        scanf("%s%s%s%s",person[i].kind,person[i].name,person[i].tele,person[i].address);
                        fclose(fp);//这里已经是以结构体形式写入通讯录.txt了吗?如果不是,该怎么写呢
                }
                printf("添加成功,是否要继续添加,y/n");
                scanf("%s",&ch0);
                if(ch0=='y')
                        adduser();//w表示的是打开或创建,再用会覆盖掉以前的,应用a,怎么循环用追加?
                else
                        myexit();
        }
        if(a=1)
        {
                printf("该联系人已存在。您要做1修改2退出");
                scanf("%c",&ch1);
                if(ch1=='1')
                        modify();
                else
                        return 0;
        }
        return 0;
}



int deleteuser()
{
        int a;
        char n;
       
        a=name_search();
        if(a=1)
        {
                FILE *fp;
                if((fp=fopen("通讯录.txt","r"))!=NULL)
                        printf("是否确定要删除该项?是y,否n\n");
                scanf("%s",&n);
                if(n=='y')
                {
                        for(i=i;i<num-1;i++)
                                person[i]=person[i+1];
                        num--;//神马意思,
                }
                if(n=='n')
                        return 0;
        }
        if(a=0)
                printf("没有该联系人!");
        return 0;
}


int modify()
{
        int a;
        char n;
        a=name_search();
        if(a=1)
        {
                FILE *fp;
                if((fp=fopen("通讯录.txt","wr+"))!=NULL)
                        printf("是否确定要修改该项?是y,否n\n");
                scanf("%s",&n);
                if(n=='y')
                {
                        fp=fopen("person[i]","w");//怎样修改
                        fclose(fp);
                }
               
                if(n=='n')
                        myexit();
        }
        return 0;
}




int show()
{
        int i;
        printf("******我的联系人******");
        for(i=0;i<num;i++)
        {
                printf("\n\t\t分类: %s",person[i].kind);
                printf("\n\t\t姓名: %s",person[i].name);
                printf("\n\t\t电话: %s",person[i].tele);
                printf("\n\t\t地址: %s",person[i].address);  
                printf("\t\t");
                if(i+1<num)
                        printf("=======我是华丽丽的分割线==========");
        }
        return 0;
}

int myexit()
{
        printf("按任意键退出系统\n");
        getchar();
        return 0;
}
还有一个问题,文件和数组的关系。。我说出我的理解,有不对的望改正哈。。咱用指针指向一个文件打开后,里面的信息也是由一个个的结构体数组构成的,我们同样用一个个的指针指向它们。在添加等功能中,我们用指针找他们,然后操作它们,完事保存。对么?

最佳答案

查看完整内容

adduser() 需要更改 if((fp=fopen("通讯录.txt","a+b"))!=NULL) { printf("输入类型,姓名,电话号和地址"); scanf("%s%s%s%s",person.kind,person.name,person.tele,person.address); fwrite(&person,sizeof(information),1,fp); //fwrite可参考http://man.chinaunix.net/develop/c&c++/linux_c/default.htm fclose(fp);//这里只是关闭文件流 } 其他的大同小异,总之楼主应该以二进制形式打开文件即用fopen(" ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-7 23:30:44 | 显示全部楼层
adduser() 需要更改
if((fp=fopen("通讯录.txt","a+b"))!=NULL)
{
printf("输入类型,姓名,电话号和地址");
  scanf("%s%s%s%s",person[i].kind,person[i].name,person[i].tele,person[i].address);
  fwrite(&person[i],sizeof(information),1,fp);
  //fwrite可参考http://man.chinaunix.net/develop/c&c++/linux_c/default.htm
  fclose(fp);//这里只是关闭文件流
}
其他的大同小异,总之楼主应该以二进制形式打开文件即用fopen("xxx.txt","a+b");
将结构体保存到文件,则是用fwrite函数
将结构体读出文件,则用fread函数 具体用法楼主可以查看API
解答完毕
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-3-8 14:26:30 | 显示全部楼层
你又不是传文件指针到函数 每个函数都有个文件指针 那函数里面指针杂都不释放呢
先不说判断比较运算符写错语法问题
结构还是错
按我想main里一个文件指针就行了 其他函数使用则传进去
你这样每次都打开文件 不说有疏忽忘记关闭情况
就是windows也限制同时打开的文件数量
main里一个打开一个关闭就直接解决问题了

全部代码没一个文件定位和读写
自己都不试一下一个最简单的读写定位文件
别人怎么帮你找错
你写这么多代码都是浮云了 自己先试试简单的文件读写定位操作 能完成再想做其他的


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-3-8 22:38:18 | 显示全部楼层

不是不试一下。。根本不知道读写定位文件是什么。。第一次听说呐。。麻烦你了,看见我这么烂的,我知道水平不高,谢谢,在学了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-6-6 15:50:29 | 显示全部楼层
长长见识。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-11 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表