m0_53989813 2021-08-24 15:35 采纳率: 73.7%
浏览 63
已结题

学生通讯录程序:用结构体和数组实现学生通讯录程序。为什么查询时就会运行不下去?


#include <stdio.h>
#include <string.h>
 #include <cstdlib>
#define N 108

typedef struct telephone
{
    char name[25];
    char num[25];
    char tel[25];
} TEL;
 
void DisplayMenu(); //显示主菜单
void save(TEL a[], int n);
void CreateList(TEL a[], int n)      //1.创建通讯录
{
    int i;
    FILE *fp;
      for (i = 0; i < n; i++)
            scanf("%s%s%s", a[i].name, a[i].num, a[i].tel);
        save(a, n);
}
int AddList(TEL a[], int n);          //2.添加学生信息
void InquireListName(TEL a[], int n); //3.按姓名查询通讯录
void InquireListNum(TEL a[], int n);  //3.按学号查询通讯录
void ChangeListName(TEL a[], int n);  //4.按姓名修改通讯录
int DelListName(TEL a[], int n);      //5.按姓名删除通讯录
int DelListNum(TEL a[], int n);       //6.按学号删除通讯录
void DisplayList(TEL a[], int n);     //7.显示通讯录
 
int main()
{
    
    struct telephone a[N];
    int  n,p=0;
    scanf("%d", &n);
    DisplayMenu(); //显示主菜单
    while (1)
    {
        int m;
        int name[25];
        scanf("%d", &m);
 

        //if( select=='l' )
        //    break;
 
        switch (m)
        {
        case 1:
            CreateList(a,n); //1.创建通讯录
            break;
        case 2:
             if (AddList(a, n)) //2.添加学生信息
                n++;
            save(a, n);
            break;
        case 3:
            printf("1.按姓名查询 2.按学号查询\n");
            scanf("%d",p);
            if(p==1){InquireListName(a, n);} //3.按姓名查询通讯录
            else {InquireListNum(a, n);} //3.按学号查询通讯录
            break;
        case 4:
            ChangeListName(a, n); //4.按姓名修改通讯录
            break;
        case 5:
            if (DelListName(a, n)) //5.按姓名删除通讯录
                n--;
            break;
        case 6:
            if (DelListNum(a, n)) //6.按学号删除通讯录
                n--;
            break;
        case 7:
            DisplayList(a, n); //7.显示通讯录
            break;
        case 8:
            exit(0); //8.退出系统
            break;
        }
    }
    return 0;
}
 
void save(TEL a[], int n)
{
    int i;
    FILE *fp;
    fp = fopen("stu.dat", "w");
    fprintf(fp, "%d\n", n);
    for (i = 0; i < n; i++)
        fprintf(fp, "%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
}
 
void DisplayMenu() //1.显示主菜单
{
    printf("                      学生通讯录管理系统\n\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.显示通讯录                       8.退出系统\n");
    printf("************************************************************\n");
    printf(" -------------------------------------------------------------\n");
    printf("***************************************************************\n\n");
    printf("请选择您需要的操作:\n");
}
 
void DisplayList(TEL a[], int n) //2.显示通讯录
{
    int i;
    printf("显示通讯录:\n");
    for (i = 0; i < n; i++)
        printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
    printf("\n");
}
 
void InquireListName(TEL a[], int n) //3.按姓名查询通讯录
{
    int i, flag;
    char SearchName[25];
    printf("按姓名查询通讯录:\n");
    scanf("%s", SearchName);
    for (i = 0, flag = 0; i < n; i++)
    {
        if (strcmp(SearchName, a[i].name) == 0)
        {
            printf("%s\t", a[i].name);
            printf("%s\t", a[i].num);
            printf("%s\n", a[i].tel);
            flag = 1;
            break;
        }
    }
    if (flag == 0)
    {
        printf("未查询到该姓名信息!\n");
    }
    printf("\n");
}
 
void InquireListNum(TEL a[], int n) //3.按学号查询通讯录
{
    int i, flag;
    char SearchID[25];
    printf("按学号查询通讯录:\n");
    scanf("%s", SearchID);
    for (i = 0, flag = 0; i < n; i++)
    {
        if (strcmp(SearchID, a[i].num) == 0)
        {
            printf("%s\t", a[i].name);
            printf("%s\t", a[i].num);
            printf("%s\n", a[i].tel);
            flag = 1;
            break;
        }
    }
    if (flag == 0)
    {
        printf("未查询到该学号信息!\n");
    }
    printf("\n");
}
 
void ChangeListName(TEL a[], int n) //4.按姓名修改通讯录
{
    int i, flag;
    char SearchName[25];
    printf("按姓名修改通讯录:\n");
    scanf("%s", SearchName);
    for (i = 0, flag = 0; i < n; i++)
    {
        if (strcmp(SearchName, a[i].name) == 0)
        {
            strcpy(a[i].name, SearchName);
            printf("请输入要修改的学号:");
            scanf("%s", a[i].num);
            printf("请输入要修改的电话号码:");
            scanf("%s", a[i].tel);
            //strcpy(p[i].name,ChangeName);
            //strcpy(p[i].name,ChangeTel);
            save(a, n);
            printf("信息修改完毕!\n");
            printf("%s\t%s\t%s\n", a[i].name, a[i].num, a[i].tel);
            flag = 1;
            break;
        }
    }
    if (flag == 0)
        printf("未找到该姓名信息!");
    printf("\n");
}
 

 
int DelListName(TEL a[], int n) //5.按姓名删除通讯录
{
    int i, j;
    char SearchName[25];
    printf("按姓名删除通讯录:\n");
    scanf("%s", SearchName);
    for (i = 0; i < n; i++)
    {
        if (strcmp(a[i].name, SearchName) == 0)
            break;
    }
    if (i >= n)
    {
        printf("未查询到该姓名信息!按姓名删除通讯录失败!\n");
        return 0;
    }
    else
    {
        for (j = i; j < n - 1; j++)
            a[j] = a[j + 1];
        save(a, n);
        printf("按姓名删除通讯录成功!\n");
        return 1;
    }
}
 
int DelListNum(TEL a[], int n) //6.按学号删除通讯录
{
    int i, j, flag;
    char SearchNum[25];
    printf("按学号删除通讯录:\n");
    scanf("%s", SearchNum);
    for (i = 0; i < n; i++)
    {
        if (strcmp(a[i].num, SearchNum) == 0)
            break;
    }
    if (i >= n)
    {
        printf("未查询到该学号信息!按学号删除通讯录失败!\n");
        return 0;
    }
    else
    {
        for (j = i; j < n - 1; j++)
            a[j] = a[j + 1];
        printf("按学号删除通讯录成功!\n");
        save(a, n);
        return 1;
    }
    printf("\n");
}
 
 
int AddList(TEL a[], int n) //7.添加学生信息
{
    int i, flag;
    char AddNum[25];
    printf("添加通讯录:\n");
    printf("请输入要添加的学号:");
    scanf("%s", AddNum);
    for (i = 0, flag = 0; i < n; i++)
    {
        if (strcmp(AddNum, a[i].num) == 0)
        {
            flag = 1;
            printf("学号重复!\n");
            return 0;
        }
    }
    if (flag == 0)
    {
        //n++;
        printf("学号不重复!请添加信息:\n");
        printf("请输入要添加的名字:");
        scanf("%s", a[n].name);
        strcpy(a[n].num, AddNum);
        printf("请输入要添加的电话号码:");
        scanf("%s", a[n].tel);
        //save(a,n);
        printf("添加信息成功!\n");
        return 1;
        //printf("%d",n);
    }
    printf("\n");
}

  • 写回答

1条回答 默认 最新

  • 小黑土土777 2021-08-24 15:39
    关注

    scanf("%d",&p);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月24日

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)