Bee_YG 2015-06-11 02:39 采纳率: 0%
浏览 2435

C++用指针实现读取,load()方法一直不行,麻烦看下

C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下

  • 写回答

3条回答 默认 最新

  • Bee_YG 2015-06-11 02:41
    关注

    // 通讯录管理系统,主要用动态链表实现

    include //I/O函数

    include //字符串函数,提供字符串处理的原函数

    include //标准库函数,提供malloc,system,exit等函数

    define N 50 //定义常数表示记录数

    typedef struct contact//定义数据结构
    {
    char name[10]; //姓名
    char age[3]; //年龄
    char tele[11]; //电话号码
    char postcode[6]; //邮编号码
    char addr[50]; //单位地址
    char email[30]; //邮箱
    struct contact * pnext;
    }contact, *pcontact;

    //函数的声明
    int menu(); //主菜单函数
    pcontact creat();

    bool insert (pcontact phead, int pos); //创建并添加联系人
    void traverse(pcontact phead); // 显示联系人
    int length(pcontact phead); //保存记录长度
    void sort(pcontact phead); //按姓名拼音首字母排序联系人
    void search(pcontact phead); //查找联系人
    void updata(pcontact phead); //修改联系人
    void delete_name(pcontact phead); //删除联系人
    void delete_list(pcontact phead, int pos);

    void save(pcontact phead); //存储联系人
    void load(pcontact phead); //从文件中读联系人
    int exit(); //退出系统

    //主函数
    int main()
    {
    pcontact phead = NULL;
    system ("cls"); // 清屏,需要头文件stdlib.h
    phead = creat();
    while (1)
    {
    int i = 0;
    switch (menu())
    {
    case 0: insert (phead, ++i); break;
    case 1: updata (phead); break;
    case 2: delete_name (phead); break;
    case 3: search(phead); break;
    case 4: save (phead); break;
    case 5: load (phead); break;
    case 6: exit (0); break;
    default: printf ("请输入数字0到6:\n");
    }
    printf ("\t\t\t请按enter键返回主菜单\n");
    getchar ();
    system ("CLS");
    }
    return 0;
    }

    //主菜单函数,函数返回值为整数,代表所选的菜单项
    int menu()
    {
    char s[20];
    int num;
    printf("*************************欢迎进入X-X-X通讯录管理系统*************************\n");
    printf("-----------------------------------主菜单-------------------------------------\n\n");
    printf ("\t\t\t\t0.添加信息\n");
    printf ("\t\t\t\t1.修改信息\n");
    printf ("\t\t\t\t2.删除信息\n");
    printf ("\t\t\t\t3.查找信息\n");
    printf ("\t\t\t\t4.存储信息\n");
    printf ("\t\t\t\t5.读入信息\n");
    printf ("\t\t\t\t6.退出系统\n");
    printf ("\n**********************************感谢使用************************************\n");
    do
    {
    printf ("请输入您的选项(0-6):");
    gets (s);
    num = atoi(s); //将字符串转换成一个整型数值
    }while (num < 0 || num > 6);
    return num;
    }

    //创建一个动态空链表
    pcontact creat()
    {
    //分配一个不存放有效数据的头结点
    pcontact phead = (pcontact)malloc( sizeof(contact) );
    if (NULL == phead)
    {
    exit (-1); //分配内存失败,终止程序
    }
    phead->pnext = NULL;
    return phead;
    }

    //创建并添加联系人信息
    //在phead所指向链表的第pos个节点的前面插入一个新的结点
    bool insert (pcontact phead, int pos)
    {
    int i = 0;
    pcontact p = phead;
    while(NULL != p && i < pos-1)
    {
    p = p->pnext;
    ++i;
    }
    if (i > pos-1 || NULL == p)
    return false;
    //如果程序能执行到这一行说明p已经指向了第pos-1个结点,但第pos-1个节点是否存在无所谓
    //分配新的结点
    pcontact pnew = (pcontact)malloc(sizeof(contact));
    if (NULL == pnew)
    {

    exit(-1);//动态分配内存失败
    }
    system ("CLS");
    printf("*************************欢迎进入X-X-X通讯录管理系统*************************\n");
    printf("------------------------此目录下可创建并添加联系人信息------------------------\n\n");
    printf ("请输入联系人姓名:");
    gets (pnew->name);
    printf ("请输入联系人年龄:");
    gets (pnew->age);
    printf("请输入联系人电话号码:");
    gets (pnew->tele);
    printf("请输入联系人邮编号码:");
    gets (pnew->postcode);
    printf ("请输入联系人单位地址:");
    gets (pnew->addr);
    printf ("请输入联系人邮箱:");
    gets (pnew->email);
    printf ("添加联系人信息成功!");
    printf ("\n**********************************感谢使用************************************\n");
    //将新的结点存入p节点的后面
    pcontact q = p->pnext;
    p->pnext = pnew;
    pnew->pnext = q;
    return true;
    }
    //修改信息
    void updata(pcontact phead)
    {
    char name[10];
    sort(phead);
    int len = length(phead);
    pcontact p=phead->pnext;
    int i;
    system ("CLS");
    printf("*************************欢迎进入X-X-X通讯录管理系统*************************\n");
    printf("--------------------------此目录下可修改联系人信息----------------------------\n\n");
    printf("请输入您要修改的联系人姓名:\n");
    gets(name);
    printf("此联系人的所有信息如下:\n");
    printf ("联系人年龄:%s\n", p->age);
    printf ("联系人电话号码:%s\n", p->tele);
    printf ("联系人邮编号码:%s\n", p->postcode);
    printf ("联系人单位地址:%s\n", p->addr);
    printf ("联系人邮箱:%s\n", p->email);
    if (NULL != p)
    {
    for (i = 0; i < len; ++i, p = p->pnext)
    {
    printf("\n请输入您要修改的联系人信息\n");
    printf("姓名:");
    scanf("%s",&p->name);
    printf("年龄:");
    scanf("%s",&p->age);
    printf("电话号码:");
    scanf("%s",&p->tele);
    printf("邮编号码:");
    scanf("%s",&p->postcode);
    printf("单位地址:");
    scanf("%s",&p->addr);
    printf("邮箱:");
    scanf("%s",&p->email);
    printf("此联系人信息修改成功!\n");
    printf ("\n**********************************感谢使用************************************\n");
    if (i + 1 < len)
    {
    system ("pause");
    }
    }
    }
    else
    {
    printf ("对不起,通讯录系统没有此联系人信息!\n\n");
    printf ("\n**********************************感谢使用************************************\n");
    }
    return;
    }
    //显示联系人信息
    //遍历通讯录的信息,先排序,再输出
    void traverse(pcontact phead)
    {

    sort(phead);
    int len = length(phead);
    pcontact p = phead->pnext;
    int i;
    system ("CLS");
    printf("*************************欢迎进入X-X-X通讯录管理系统*************************\n");
    printf("----------------------------------联系人信息表--------------------------------\n\n");
    if (NULL != p)
    {
    for (i = 0; i < len; ++i, p = p->pnext)
    {
    printf ("联系人姓名:%s\n", p->name);
    printf ("联系人年龄:%s\n", p->age);
    printf ("联系人电话号码:%s\n", p->tele);
    printf ("联系人邮编号码:%s\n", p->postcode);
    printf ("联系人单位地址:%s\n", p->addr);
    printf ("联系人邮箱:%s\n", p->email);
    printf ("\n**********************************感谢使用************************************\n");
    if (i + 1 < len)
    {
    system ("pause");
    }
    }
    }
    else
    {
    printf ("对不起,通讯录系统没有任何联系人信息!\n\n");
    printf ("\n**********************************感谢使用************************************\n");
    }
    return;
    }
    //有效结点的个数
    int length(pcontact phead)
    {
    pcontact p = phead->pnext;
    int len = 0;
    while (NULL != p)
    {
    ++len;
    p = p->pnext;
    }
    return len;
    }
    //对通讯录进行排序,按姓名的拼音首字母顺序
    void sort(pcontact phead)
    {
    int i, j;
    int len = length(phead);
    char name[10];

    char age[3];
    char tele[11];
    char postcode[6];

    char email[30];
    char addr[50];
    pcontact p, q;
    //冒泡排序
    for (i = 0, p = phead->pnext; i < len - 1; ++i, p = p->pnext)
    for (j = i + 1, q = p->pnext; j < len; ++j, q = q->pnext)
    if (strcmp (p->name, q->name) > 0)
    {
    //交换姓名
    strcpy (name, p->name);
    strcpy (p->name, q->name);
    strcpy (q->name, name);
    //交换年龄
    strcpy (age, p->age);
    strcpy (p->age, q->age);
    strcpy (q->age, age);
    //交换电话号码
    strcpy (tele, p->tele);
    strcpy (p->tele, q->tele);
    strcpy (q->tele, tele);
    //交换邮编号码
    strcpy (postcode, p->postcode);
    strcpy (p->postcode, q->postcode);
    strcpy (q->postcode, postcode);
    //交换单位地址
    strcpy (addr, p->addr);
    strcpy (p->addr, q->addr);
    strcpy (q->addr, addr);
    //交换邮箱
    strcpy (email, p->email);
    strcpy (p->email, q->email);
    strcpy (q->email, email);
    }
    return;
    }

    //查询联系人信息
    void search(pcontact phead)
    {
    pcontact p = phead->pnext;
    char name[20];
    int len = length (phead); //记录容量的最大值
    int i;
    int mark = 0;
    int a = 0;
    system ("CLS");
    printf("*************************欢迎进入X-X-X通讯录管理系统*************************\n");
    printf("----------------------------联系人信息查询功能操作----------------------------\n\n");
    printf ("请输入您要查找的联系人姓名:");
    gets (name);
    if (NULL != p)
    {
    for (i = a; i < len; ++i, p = p->pnext)
    {
    if (strcmp (name, p->name) == 0)
    {
    printf ("\n\t\t\t以下是您查找的联系人信息\n");
    printf ("联系人姓名:%s\n", p->name);
    printf ("联系人年龄:%s\n", p->age);
    printf ("联系人电话号码:%s\n", p->tele);
    printf ("联系人邮编号码:%s\n", p->postcode);
    printf ("联系人单位地址:%s\n", p->addr);
    printf ("联系人邮箱:%s\n", p->email);
    printf ("\n**********************************感谢使用************************************\n");
    ++mark;
    if (i + 1 < len)
    {
    system ("pause");
    }
    }
    }
    if (0 == mark)
    {
    printf ("对不起,通讯录系统没有此联系人信息!\n\n");
    printf ("\n**********************************感谢使用************************************\n");
    }
    }
    else
    {
    printf ("对不起,通讯录系统没有任何联系人信息!\n\n");
    printf ("\n**********************************感谢使用************************************\n");
    }

    return;
    

    }

    //删除联系人信息
    void delete_name(pcontact phead)
    {
    int i, pos;
    int mark = 0;
    int val;
    int len = length (phead);
    char name[20];
    pcontact p = phead->pnext;
    system ("CLS");
    printf("*************************欢迎进入X-X-X通讯录管理系统*************************\n");
    printf("-----------------------------联系人信息删除功能操作---------------------------\n\n");
    printf ("请输入您要删除的联系人姓名:");
    gets (name);
    if (NULL != p)
    {
    for (i = 1; i <= len; ++i, p = p->pnext)
    {
    if (strcmp (name, p->name) == 0)
    {
    printf ("\n\t\t\t以下是您要删除的联系人信息\n");
    printf ("num:%d\n", mark+1);
    printf ("联系人姓名:%s\n", p->name);
    printf ("联系人年龄:%s\n", p->age);
    printf ("联系人电话号码:%s\n", p->tele);

    printf ("联系人邮编号码:%s\n", p->postcode);
    printf ("联系人单位地址:%s\n", p->addr);
    printf ("联系人邮箱:%s\n", p->email);
    printf ("\n**********************************感谢使用************************************\n");
    pos = i;
    ++mark;
    }

        }
        if (1 == mark )
        {
            printf ("\n\t\t是否确定删除此联系人信息?(y/n)");
            if (getchar () =='y' || getchar () =='Y')
            {
                delete_list(phead, pos); 
                printf ("\n\t\t删除联系人信息成功!\n");
                system ("pause"); 
            }
            else 
            { 
                printf (""); 
                getchar (); 
                return; 
            } 
        }
        else if (mark > 1)
        {
            printf ("这里有%d个相同的联系人!\n", mark);
            printf ("您想删除第几个联系人的信息?\n");
            printf ("num:");
            scanf ("%d", &val);
            pos = pos - mark + val;
            delete_list(phead, pos); 
            printf ("\n\t\t此联系人信息删除成功!\n");
            system ("pause"); 
        }
        else
        {
            printf ("对不起,通讯录系统没有此联系人信息!\n\n");
            printf ("\n**********************************感谢使用************************************\n");
        }
    }
    else
    {
        printf ("对不起,通讯录系统没有任何联系人信息!\n\n");
        printf ("\n**********************************感谢使用************************************\n");
    }
    
    return;
    

    }
    //删除在phead所指向链表的第pos个结点
    void delete_list (pcontact phead, int pos)
    {
    int i = 0;
    pcontact p = phead;
    if (NULL == p->pnext)
    {
    printf ("对不起,通讯录系统没有任何联系人信息!\n");
    printf ("\n**********************************感谢使用************************************\n");
    return;
    }
    while (NULL != p->pnext && i < pos - 1)
    {
    p = p->pnext;
    ++i;
    }
    //如果程序能执行到这一行说明p已经指向了第pos个结点,并且第pos个结点是存在的
    pcontact q = p->pnext; //q指向待删除的结点
    p->pnext = p->pnext->pnext; //删除p节点后面的结点
    free (q); //释放q所指向的节点所占的内存
    q = NULL;
    return;
    }
    //通讯录的记录存盘操作,使用文件指针;
    void save(pcontact phead)
    {
    FILE * fp;
    pcontact p =phead->pnext;
    fp = fopen ("contact.txt", "w");
    fprintf(fp,"***************所有联系人信息表***************\n\n");
    while (NULL != p)
    {
    fprintf(fp,"===============================================\n");
    fprintf (fp, "\t\t姓名:%s\n", p->name);
    fprintf (fp, "\t\t年龄:%s\n", p->age);
    fprintf (fp, "\t\t电话号码:%s\n", p->tele);
    fprintf (fp, "\t\t邮编号码:%s\n", p->postcode);
    fprintf (fp, "\t\t单位地址:%s\n", p->addr);
    fprintf (fp, "\t\t邮箱:%s\n\n", p->email);
    p = p->pnext;
    }
    fprintf(fp,"===============================================\n");
    fprintf (fp, "********来自X-X-X通讯录系统,欢迎使用!*******\n");
    fclose (fp);
    printf ("\n\t\t联系人信息存储成功,存储在contact.txt文档中!\n");
    return;
    }
    void load(pcontact phead)//读入联系人信息
    {
    int i,n;
    FILE *fp; //指向文件的指针
    pcontact p =phead->pnext;
    if((fp=fopen("contact.txt","rb"))==NULL)
    {
    printf("对不起,打开文件失败!\n");
    exit(1);
    }
    fscanf(fp,"%d",&n);
    for(i=0;i fscanf(fp,"%s%s%s%s%s%s%s",p->name,p->age,p->tele,p->postcode,p->addr,p->email); //按格式读入记录
    fclose(fp);
    printf("您已成功读入contact.txt文档中联系人信息!\n");
    return ;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误