「已注销」 2022-12-20 00:45 采纳率: 91.2%
浏览 14
已结题

请问这个错误要怎么修改?

img

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef int ElemType;
typedef struct {
    char name[10];        //姓名
    char road[10];        //街道
    char city[10];        //城市
    char code[10];        //邮编
    char country[10];    //国家
}person;
typedef struct node {
    person data;        //数据域
    struct node* prior;    //前驱
    struct node* next;    //后继
}ListNode, * LinkList;
LinkList InitList();                //构造一个空的线性表
LinkList Create(LinkList head);        //创建线性表
void Enter(LinkList head);            //输入。。。
void Display(LinkList head);        //显示。。。
void Search(LinkList head);            //查找。。。
void Delete(LinkList head);            //删除...
void Save(LinkList head);            //存盘。。。
void Load(LinkList head);            //装入
void Menu(LinkList head);                        //显示主菜单页面
LinkList InitList()
{
    LinkList head = (LinkList)malloc(sizeof(ListNode));        //创建头节点
    if (head == NULL)
    {
        printf("\n建立链表失败!\n");
        exit(-1);                    //退出程序
    }
    head->next = NULL;
    head->prior = NULL;
    return head;
}
LinkList Create(LinkList head)
{
    person LM;                        //定义一个person类型的数据LM        /////////
    LinkList rear;                    /////////
    rear = head;                    /////////    
    FILE* fp = fopen("C:\\Users\\Lenovo\\Desktop\\学生信息.txt", "r");    //以文本只读打开文件
    if (fp == NULL)
    {
        printf("\n文件打开失败!\n");
        return NULL;
    }
    while (fscanf(fp, "%s%s%s%s%s", LM.name, LM.road, LM.city, LM.code, LM.country) != EOF)    //从文件读入,处理到文件尾
    {
        LinkList s = (LinkList)malloc(sizeof(ListNode));
        s->data = LM;
        s->prior = NULL;
        s->next = NULL;

        rear->next = s;
        s->prior = rear;
        rear = rear->next;
    }
    fclose(fp);
    return head;
}

void Save(LinkList head)
{
    LinkList rear;
    person LM;
    rear = head->next;//跳过头节点 
    FILE* fp;
    int i;
    if ((fp = fopen("C:\\Users\\Lenovo\\Desktop\\学生信息.txt", "wb")) == NULL)/*只打开或建立一个二进制文件,只允许写数据*/
    {
        printf("\n文件不存在!\n");
    }
    while (rear)//处理到文件尾 
    {
        LM = rear->data;
        fprintf(fp, "%s\t%s\t%s\t%s\t%s\n", LM.name, LM.road, LM.city, LM.code, LM.country);
        rear = rear->next;
    }
    fclose(fp);
}


void Enter(LinkList head)                //输入
{
    person    LM;
    char c;
    LinkList p = head;
    printf("姓名 街道 城市 邮编 国家\n");
    scanf_s("%s", LM.name);
    scanf_s("%s", LM.road);
    scanf_s("%s", LM.city);
    scanf_s("%s", LM.code);
    scanf_s("%s", LM.country);
    LinkList s = (LinkList)malloc(sizeof(ListNode));
    s->data = LM;
    s->next = p->next;
    s->next->prior = s;
    s->prior = p;
    while (p->next)
    {
        p = p->next;
    }
    p->next = s;
    Save(head);                    //调用存盘函数
    printf("\n返回主菜单!\n");
    system("pause");
    Menu(head);
}
void Display(LinkList head)                      //显示所有的信息
{
    LinkList p;
    p = head->next;
    if (!p)                    //如果p为空,说明head指针为空,即链表为空
    {
        printf("\n线性表为空!\n");
        printf("请先输入人员信息!\n");
    }
    else
    {
        printf("通讯录:\n");
        printf("姓名        街道        城市        邮编        国家        \n");
        while (p)
        {
            printf("%s\t%s\t%s\t%s\t%s\n", p->data.name, p->data.road, p->data.city, p->data.code, p->data.country);
            p = p->next;

        }
        printf("\n返回主菜单!\n");
        system("pause");        //页面暂时停留
        Menu(head);
    }
}
void Search(LinkList head)                //查找
{
    int flag = 0;
    char name[10];
    printf("\n请输入要查询的联系人的姓名:");
    scanf_s("%s", name);
    LinkList rear = head->next;
    while (rear)
    {
        if (strcmp(name, rear->data.name) == 0)
        {
            printf("姓名        街道        城市        邮编        国家        \n");
            printf("%s\t%s\t%s\t%s\t%s\n", rear->data.name, rear->data.road, rear->data.city, rear->data.code, rear->data.country);
            flag = 1;
        }
        rear = rear->next;
    }
    if (flag == 1)
    {
        printf("\n成功找到该联系人!接下来将返回菜单:\n");
        system("pause");
        Menu(head);
    }
    else
    {
        printf("\n没有这位联系人!\n");
        system("pause");
        Menu(head);
    }
}
void Delete(LinkList head)
{
    LinkList rear = head;                //找到需要删除节点的前一个节点
    LinkList p = rear->next;            //找到需要删除的节点
    char name[10];
    int flag = 0;
    int n;
    printf("请输入要删除的联系人的姓名:\n");
    scanf_s("%s", name);
    printf("\n");
    while (p)
    {
        if (strcmp(p->data.name, name) == 0)
        {
            rear->next = p->next;        //删除P节点
            free(p);
            Save(head);
            flag = 1;
        }
        rear = p;
        p = p->next;
    }
    if (flag == 1)
    {
        printf("\n已成功删除该联系人!\n");
        printf("接下来将返回菜单\n");
        system("pause");
        Menu(head);
    }
    else
    {
        printf("\n没有这个联系人!\n");
        printf("接下来将返回菜单\n");
        system("pause");
        Menu(head);
    }
}

void Load(LinkList head)                //装入,读文件 
{
    FILE* fp = fopen("D:\\王晴\\学习\\大二\\数据结构\\数据结构课程设计\\通讯录.txt", "r");
    if (fp == NULL);            //打开一个只允许写的二进制文件
    {
        printf("\n文件不存在!\n");
        exit(0);
    }
    char ch;
    while ((ch = fgetc(fp)) != EOF)
    {
        printf("%c", ch);
    }
    fclose(fp);
    printf("\n已成功打开文件所有信息!\n");
    printf("接下来将返回菜单\n");
    system("pause");
    Menu(head);
}
void Quit(LinkList head)
{
    printf("\n欢迎下次再来!\n");
}
void Menu(LinkList head)                        //输出菜单
{
    int n;
    int flag = 0;
    do {
        printf("-----------------------------------------------------\n");
        printf("---------------->>通讯管理系统<<---------------------\n");
        printf("--------------------->>主菜单<<----------------------\n");
        printf("-----------------------------------------------------\n");
        printf("*    1、输入联系人信息   *    2、显示联系人信息    *\n");
        printf("-----------------------------------------------------\n");
        printf("*    3、查找联系人信息   *    4、删除联系人信息    *\n");
        printf("-----------------------------------------------------\n");
        printf("*    5、存盘             *    6、装入              *\n");
        printf("-----------------------------------------------------\n");
        printf("*    7、退出系统         *                          *\n");
        printf("-----------------------------------------------------\n");
        printf("\n请输入菜单编号:\n");
        scanf_s("%d", &n);
        if (n < 1 || n>7)
        {
            system("cls");
            printf("选择错误!  请重新选择!\n");
            system("pause");
            flag = 1;
        }
        else
        {
            break;
        }
    } while (flag == 1);
    switch (n)
    {
    case 1:Enter(head); break;
    case 2:Display(head); break;
    case 3:Search(head); break;
    case 4:Delete(head); break;
    case 5:Save(head); break;
    case 6:Load(head); break;
    case 7:Quit(head); break;
    default:printf("输入有误!");
    }
}
int main()
{
    LinkList head = InitList();
    head = Create(head);
    Menu(head);
    return 0;
}

  • 写回答

2条回答 默认 最新

  • orbitgw C++领域新星创作者 2022-12-20 00:54
    关注
    #define CRT_SECURE_NO_WARNINGS
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月20日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装