大佬们帮我看一下,程序哪里出问题了?

落尘345 2021-06-22 09:19:47

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//需要用到strcmp函数
#pragma warning(disable:4996)
#define N 15//最大储存信息数
int t = 1;//t用来控制整个程序的执行,以及程序的退出; 
//函数声明
void menu();//主菜单 
void increase();//数据添加模块  
void seek();//数据查看模块
void dele();//数据删除模块 
void modify();//数据修改模块  
void exit();//退出函数 
struct communicationMethod
{
    char name[20];    //姓名
    char tel[12];      //电话号码
    int  type;        //分类:0表示办公类,1表示个人类,2表示商务类
    char email[20];   //电子邮件地址
    int num;        //条目编号
}ComMtd[N];
int main()
{
    int num;//num是菜单选项 
    while (t)//t是全局变量,用exit函数来控制循环是否继续 
    {
        menu();//输出主菜单界面 
        printf("请输入编号选择功能:");
        scanf("%d", &num);
        switch (num)
        {
        case 1: seek(); break;   //数据查看模块
        case 2: increase(); break;//数据添加模块  
        case 3: modify(); break;  //数据修改模块
        case 4: dele(); break;      //数据删除模块
        case 5: exit(); break;    //退出系统模块
        default:printf("输入有误,请重新输入!");
        }
    }
    system("pause");
    return 0;
}
void menu()
{
    printf("\n\t\t\t\t手机通信录管理系统\n");
    printf("\t\t*********************菜单**************************\n");
    printf("\t\t*                 1-数据查看                      *\n");
    printf("\t\t*                 2-数据添加                      *\n");
    printf("\t\t*                 3-数据修改                      *\n");
    printf("\t\t*                 4-数据删除                      *\n");
    printf("\t\t*                 5-退出系统                      *\n");
    printf("\t\t***************************************************\n");
}
void increase()  //数据添加模块
{
    int i, j, k = 0, flag, m = 0;//k代表人数 
    FILE* in, * out;
    if ((in = fopen("D:\\手机通信录.txt", "r")) == NULL)//打开文件 
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    for (i = 0; i < N; i++)//N是最大的人数,可在程序开头进行更改 
    {
        if (fread(&ComMtd[i], sizeof(struct communicationMethod), 1, in) == 1)
            k++;           //记录人数 
    }
    if (k == 0)
    {
        printf("当前通讯录有0人!\n");
    }
    else
    {
        printf("当前通讯录有%d人\n",k);
    }
    fclose(in);
    i = k; 
    if (k == 15)
    {
        printf("通信录已满!\n");
        return;
    }
    printf("\n请输入待增加的联系人人数:\n");
    scanf("%d", &m);
    if (m > 0)
    {
        do {
            flag = 1;
            while (flag)
            {
                flag = 0;
                printf("请输入第%d位联系人姓名\n", i + 1);
                scanf("%s", ComMtd[i].name);
                for (j = 0; j < i; j++)
                {
                    if (strcmp(ComMtd[i].name, ComMtd[j].name)==0)
                    {
                        printf("数据已经存在,请重新输入或者取消!");
                        flag = 1;
                        break;
                    }
                }//判断是否重复
            }
            printf("请输入第%d位联系人电话号码\n", i + 1);
            scanf("%s", ComMtd[i].tel);
            printf("请输入第%d位联系人的分类(0表示办公类,1表示个人类,2表示商务类):\n", i + 1);
            scanf("%d", ComMtd[i].type);
            printf("请输入第%d位联系人的电子邮件地址:\n", i + 1);
            scanf("%s", ComMtd[i].email);
            ComMtd[i].num = i+1;
            i++;
        } while (i < k + m);//只要当前人数还没到达添加后的总人数,就得继续添加        
    }
    if ((out = fopen("D:\\手机通信录.txt", "w")) == NULL)
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    for (i = 0; i < k + m; i++)
    {
        if (fwrite(&ComMtd[i], sizeof(struct communicationMethod), 1, out) != 1)
        {
            printf("添加失败!\n");
        }
    }
    printf("添加完成!\n");
    fclose(out);
    system("pause");
}
void seek()  //数据查看模块
{
    int i, k = 0, num, flag;
    FILE* in;
    if ((in = fopen("D:\\手机通信录.txt", "r")) == NULL)//打开文件 
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    for (i = 0; i < N; i++)//N是最大的人数,可在程序开头进行更改 
    {
        if (fread(&ComMtd[i], sizeof(struct communicationMethod), 1, in) == 1)
            k++;           //记录人数 
    }
    if (k == 0)
    {
        printf("当前通讯录有0人,请添加后查看!\n");
        return;
    }
    else
    {
        printf("当前通讯录有%d人\n", k);
    }
    fclose(in);
    printf("\t\t*****************************\n");
    printf("\t\t**-------0-办公类查询------**\n");
    printf("\t\t**-------1-个人类查询------**\n");
    printf("\t\t**-------2-商务类查询------**\n");
    printf("\t\t**-------3-退出本菜单------**\n");
    printf("\t\t*****************************\n");
    while (1)
    {
        flag = 0;
        printf("请输入编号选择功能:");
        scanf("%d", &num);
        switch (num)
        {
        case 0:
            for (i = 0; i < k; i++)
            {
                if (ComMtd[i].type == 0)
                {
                    flag = 1;
                    printf("姓名\t\t电话号码\t\t类别\t\t电子邮箱\t\t条目编号\n");
                    printf("%s\t\t%s\t\t%d\t\t%s\t\t%d\n", ComMtd[i].name, ComMtd[i].tel, ComMtd[i].type, ComMtd[i].email, ComMtd[i].num);
                }
            }break;
        case 1:
            for (i = 0; i < k; i++)
            {
                if (ComMtd[i].type == 1)
                {
                    flag = 1;
                    printf("姓名\t\t电话号码\t\t类别\t\t电子邮箱\t\t条目编号\n");
                    printf("%s\t\t%s\t\t%d\t\t%s\t\t%d\n", ComMtd[i].name, ComMtd[i].tel, ComMtd[i].type, ComMtd[i].email, ComMtd[i].num);
                }
            }break;
        case 2:
            for (i = 0; i < k; i++)
            {
                if (ComMtd[i].type == 2)
                {
                    flag = 1;
                    printf("姓名\t\t电话号码\t\t类别\t\t电子邮箱\t\t条目编号\n");
                    printf("%s\t\t%s\t\t%d\t\t%s\t\t%d\n", ComMtd[i].name, ComMtd[i].tel, ComMtd[i].type, ComMtd[i].email, ComMtd[i].num);
                }
            }break;
        case 3: return;
        default: printf("请在0--3之间输入\n");
        }
        if (flag == 0)
        {
            printf("找不到符合的记录!\n请重新输入!");
        }
    }
}
void dele()//数据删除模块
{
    int i, j, flag, k = 0;
    char s1[20];
    FILE* in, * out;
    if ((in = fopen("D:\\手机通信录.txt", "r")) == NULL)//打开文件 
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    for (i = 0; i < N; i++)//N是最大的人数,可在程序开头进行更改 
    {
        if (fread(&ComMtd[i], sizeof(struct communicationMethod), 1, in) == 1)
            k++;
    }
    if (k == 0)
    {
        printf("当前通讯录有0人,请先添加!\n");
        return;
    }
    else
    {
        printf("当前通讯录有%d人!\n",k);
    }
    printf("请输入需要删除的联系人的名字:\n");
    scanf("%s", s1);
    flag = 0;
    for (i = 0; i < k; i++)
    {
        if (strcmp(s1, ComMtd[i].name) == 0)
        {
            flag = 1;
            for (j = i; j < k - 1; j++)
            {
                ComMtd[j] = ComMtd[j + 1];//直接把后面都往前移动一位 
            }
        }
        if (flag == 1)
        {
            break;      //说明已经找到了需要删除的联系人,结束循环
        }
    }
    if (flag == 0)
    {
        printf("该联系人不存在!\n");
    }
    if (flag == 1)
    {
        if ((out = fopen("D:\\手机通信录.txt", "w")) == NULL)
        {
            printf("打开文件失败!\n");
            exit(0);
        }
        for (i = 0; i < k - 1; i++)
        {
            if (fwrite(&ComMtd[i], sizeof(struct communicationMethod), 1, out) != 1)
            {
                printf("删除失败!\n");
            }
        }
        printf("删除成功!\n");
        fclose(out);
    }
    system("pause");
}
void modify()//数据修改模块
{
    int i, flag, k = 0;
    char name2[20];    //姓名
    char tel2[12];      //电话号码
    int  type2;        //分类:0表示办公类,1表示个人类,2表示商务类
    char email2[20];   //电子邮件地址
    int num;          //编号
    FILE* in, * out;
    if ((in = fopen("D:\\手机通信录.txt", "r")) == NULL)//打开文件 
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    for (i = 0; i < N; i++)//N是最大的人数,可在程序开头进行更改 
    {
        if (fread(&ComMtd[i], sizeof(struct communicationMethod), 1, in) == 1)
            k++;           //记录人数 
    }
    if (k == 0)
    {
        printf("当前通讯录有0人,请先添加!\n");
        return;
    }
    else
    {
        printf("当前通讯录有%d人!\n", k);
    }
    printf("请输入需要修改的联系人姓名:\n");
    getchar();
    gets(name2);
    while (1)
    {
        flag = 0;
        for (i = 0; i < k; i++)
        {
            if (strcmp(name2, ComMtd[i].name) == 0)
            {
                flag = 1;
                int num;
                printf("***************************************************\n");
                printf("*----------------1-修改电话号码--------------------*\n");
                printf("*----------------2-修改分类------------------------*\n");
                printf("*----------------3-修改电子邮件地址-----------------*\n");
                printf("*----------------4-修改条目编号---------------------*\n");
                printf("*----------------5-退出本菜单-----------------------*\n");
                printf("****************************************************\n\n");
                printf("请输入编号选择功能:");
                scanf("%d", &num);
                switch (num)
                {
                case 1:
                    printf("请输入新的电话号码:\n");
                    getchar();
                    gets(tel2);
                    strcpy(ComMtd[i].tel, tel2); break;
                case 2:
                    getchar();
                    printf("请输入新的分类(0表示办公类,1表示个人类,2表示商务类):\n");
                    scanf("%d", &type2);
                    ComMtd[i].type = type2; break;
                case 3:
                    printf("请输入新的电子邮件地址:\n");
                    getchar();
                    gets(email2);
                    strcpy(ComMtd[i].email, email2); break;
                case 4:
                    printf("请输入新的条目编号:\n");
                    scanf("%d", &num);
                    ComMtd[i].num = num; break;
                case 5:
                    return; break;
                default:
                    printf("请在1--5之间选择!\n");
                }
                if (num > 0 && num < 5)
                {
                    if ((out = fopen("D:\\手机通信录.txt", "w")) == NULL)
                    {
                        printf("打开文件失败!\n");
                        exit(0);
                    }
                    for (i = 0; i < k; i++)
                    {
                        if (fwrite(&ComMtd[i], sizeof(struct communicationMethod), 1, out) != 1)
                        {
                            printf("修改失败!\n");
                        }
                    }
                    printf("修改成功!\n");
                    fclose(out);
                }
                break;      //找到联系人,结束循环;
            }
        }
        if (flag == 0)
        {
            printf("没有找到该联系人,请重新输入需要修改信息的联系人姓名:\n");
            gets(name2);
        }
    }
    system("pause");
}
void exit()                     //退出系统模块
{
    int g;                      //控制是否确认退出 
    printf("即将退出,确认请按1,取消请按0\n");
    scanf("%d", &g);
    if (g == 1)
    {
        t = 0;//t是main函数中while函数是否继续执行的控制条件,是一个全局变量,程序开头已经定义并且赋值位 1
        printf("成功退出!\n");
    }
    if (g == 0)
    {
        printf("退出已取消!\n");
        system("pause");
    }
}
 

...全文
1074 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕基于电压-电流双闭环控制的断续导通模式(DCM)反激式开关电源展开系统性仿真研究,整合仿真模型、理论文献与Mathcad计算书三大资源,深入阐述该电源系统的设计原理与实现方法。研究重点在于构建电压外环与电流内环的双闭环控制策略,以提升电源的动态响应速度、输电压稳定性和负载调整率。通过Matlab/Simulink等工具建立精确仿真模型,验证DCM模式下反激变换器的能量传递特性、开关器件应力分布及反馈控制环路的稳定性表现。同时,借助Mathcad完成关键电路参数的数学建模与设计计算,确保理论分析与仿真结果的高度一致性,实现从理论推导到工程实践的闭环验证。; 适合人群:具备电力电子技术基础,从事开关电源设计、电力变换器开发或自动化控制等相关领域研究的研发工程师及高校研究生。; 使用场景及目标:①掌握反激式开关电源在DCM模式下的工作机理与系统建模方法;②学习电压-电流双闭环控制器的设计流程、稳定性分析与参数整定技术;③实现理论计算、数学推导与仿真实践的深度融合,支撑科研项目复现或实际工程原型开发。; 阅读建议:建议读者结合所提供的仿真文件、技术文献与Mathcad计算文档同步学习,注重理论公式推导与仿真波形结果的对照分析,动手调整控制器参数以深入理解系统动态响应特性与稳定性边界。

7,348

社区成员

发帖
与我相关
我的任务
社区描述
因为缘分,所以猿粉! 这里有“入门级选手”必备的成长路线图,为“程序员后备队”提供技术大咖直播指导,丰富的学习资料已经等候多时,请查收! 陪伴猿粉共同成长,提升技术不在话下;右边扫码关注微信公众号。
其他 其他
社区管理员
  • 高校俱乐部
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

       2021年“C站百所高校巡讲” “C站名企参观”等活动,火热报名中, 与CSDN创始人蒋涛、各路技术大咖面对面!

       现招募CSDN高校俱乐部的部长并组建本校CSDN高校俱乐部,我们希望你是高校在校生且是IT技术爱好者,校内社交圈,有强烈的责任心,熟悉社团工作,有校园活动组织经验,在高校能够建立长足发展的学习型俱乐部,我们期待您的加入,CSDN高校俱乐部将赋予以下权益:

  • 高校巡讲:骨灰级专家线下巡讲
  • 线上直播:技术大咖线上分享
  • 线下沙龙:学习精英线下沙龙讨论
  • 学习小组:任务驱动,免费学习
  • 能力认证:对标大厂,高薪就业
  • 技术竞赛:竞赛选拔,实战演练
  • 企业游学:到大厂参观并学习
  • 企业招聘:面向俱乐部成员专属招聘
  • 专属博客:给各俱乐部搭建社区云
  • 电子书卡:给俱乐部成员提供学习资源
  • 组织logo:设计旗帜,活动宣传

 联系方式:

  • 电话:张老师-17734567851(同微)
  • 邮箱:student@csdn.net
  • Q Q:1218227747

试试用AI创作助手写篇文章吧