m0_53989813 2021-08-27 17:00 采纳率: 73.7%
浏览 71
已结题

学生通讯录,一共九个功能写完七个,还有文件的导入和导出,请问这两个到底该怎么写?😭

学生通讯录程序:要求用面向对象的类实现学生通讯录程序。基本信息包括学号、姓名、班级、籍贯、手机、QQ号、电子邮箱等信息。具体实现的管理功能如下:(1)输入并显示多个学生信息;(2)可实现学生信息的添加;(3)查询(至少提供按姓名和手机查询两种方式);(4)修改(只提供按照姓名进行修改);(5)删除(依据指定的信息删除如姓名、学号等);(6)文件的导入和导出(从文件中读取若干条通讯录,或者将通讯录输出到文件中)。

img


#include <stdio.h>
#include <string.h>
#include <cstdlib>
#define N 100
typedef struct telephone
{
    char num[25];
    char name[25];
    char Class[20];
    char addr[30];
    char tel[25];
    char QQ[14];
    char mail[50];
} TEL;
 
void DisplayMenu(); //显示主菜单
void save(TEL a[], int n);
void CreateList(TEL a[], int n);      //1.创建通讯录
int AddList(TEL a[], int n);          //2.添加学生信息
void InquireListName(TEL a[], int n); //3.按姓名查询通讯录
void InquireListTel(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);       //5.按学号删除通讯录
void DisplayList(TEL a[], int n);     //6.显示通讯录
void IntoFile(int n);
int main()
{
    
    struct telephone a[N];
    int  n,p=0,q=0;
    DisplayMenu(); //显示主菜单
    printf("输入创建通讯录时初始人数:");
    scanf("%d", &n);
    while (1)
    {
        int m;
        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 {InquireListTel(a, n);} //3.按手机号查询通讯录
            break;
        case 4:
            ChangeListName(a, n); //4.按姓名修改通讯录
            break;
        case 5:
            printf("1.按姓名删除 2.按学号删除\n");
            scanf("%d", &q);
            if(q==1)
            {
                if (DelListName(a, n)) //5.按姓名删除通讯录
                n--;
            break;
            } 
            else 
            {
                if (DelListNum(a, n)) //5.按学号删除通讯录
                n--;
            break;
            } 
        case 6:
            DisplayList(a, n); //6.显示通讯录
            break;

        case 9:
            exit(0); //9.退出系统
            break;
        }
    }
    return 0;
}
 void CreateList(TEL a[], int n)      //1.创建通讯录
{
    int i;
    FILE *fp;
      for (i = 0; i < n; i++)
            scanf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", a[i].num, a[i].name,a[i].Class,a[i].addr,a[i].tel,a[i].QQ,a[i].mail);
        save(a, n);
}
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\t%s\t%s\t%s\t%s\n", a[i].num, a[i].name,a[i].Class,a[i].addr,a[i].tel,a[i].QQ,a[i].mail);
}
 
void DisplayMenu() //1.显示主菜单
{
    printf("                      请选择下面的菜单\n\n");
    printf("1 创建\n");
    printf("2 添加\n");
    printf("3 查询\n");
    printf("4 修改\n");
    printf("5 删除\n");
    printf("6 显示\n");
    printf("7 从文件导入\n");
    printf("8 导出到文件\n");
    printf("9.退出\n");
}
 
void DisplayList(TEL a[], int n) //6.显示通讯录
{
    int i;
    printf("显示通讯录:\n");
    for (i = 0; i < n; i++)
        printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", a[i].num, a[i].name,a[i].Class,a[i].addr,a[i].tel,a[i].QQ,a[i].mail);
    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].num);
            printf("%s\t", a[i].name);
            printf("%s\t", a[i].Class);
            printf("%s\t", a[i].addr);
            printf("%s\t", a[i].tel);
            printf("%s\t", a[i].QQ);
            printf("%s\n", a[i].mail);
            flag = 1;
            break;
        }
    }
    if (flag == 0)
    {
        printf("未查询到该姓名信息!\n");
    }
    printf("\n");
}
 
void InquireListTel(TEL a[], int n) //3.按s手机号查询通讯录
{
    int i, flag;
    char Searchtel[25];
    printf("按学号查询通讯录:\n");
    scanf("%s", Searchtel);
    for (i = 0, flag = 0; i < n; i++)
    {
        if (strcmp(Searchtel, a[i].tel) == 0)
        {
            printf("%s\t", a[i].num);
            printf("%s\t", a[i].name);
            printf("%s\t", a[i].Class);
            printf("%s\t", a[i].addr);
            printf("%s\t", a[i].tel);
            printf("%s\t", a[i].QQ);
            printf("%s\n", a[i].mail);
            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].Class);
            printf("请输入要修改的地址:");
            scanf("%s", a[i].addr);
            printf("请输入要修改的电话号码:");
            scanf("%s", a[i].tel);
            printf("请输入要修改的QQ:");
            scanf("%s", a[i].QQ);
            printf("请输入要修改的邮箱:");
            scanf("%s", a[i].mail);
            save(a, n);
            printf("信息修改完毕!\n");
            printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n", a[i].num, a[i].name,a[i].Class,a[i].addr,a[i].tel,a[i].QQ,a[i].mail);
            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) //5.按学号删除通讯录
{
    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) //2.添加学生信息
{
    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++].Class);
         printf("请输入要添加的地址:");
        scanf("%s", a[n++].addr);
         printf("请输入要添加的电话号码:");
        scanf("%s", a[n++].tel);
         printf("请输入要添加的QQ:");
        scanf("%s", a[n++].QQ);
         printf("请输入要添加的邮箱:");
        scanf("%s", a[n++].mail);
        printf("添加信息成功!\n");
        return 1;
    }
    printf("\n");
}
  • 写回答

4条回答 默认 最新

  • 八云黧 2021-08-27 17:18
    关注

    你的结构体中没有指针,完全可以以二进制形式把结构体写入文件,然后二进制读取文件

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月5日
  • 已采纳回答 8月28日
  • 创建了问题 8月27日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题