小白白白白~菜 2021-07-16 08:54 采纳率: 50%
浏览 10
已采纳

C++关于通讯录系统,运行就提示以停止停止工作?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <stdarg.h>
#define N 100
struct record//静态数组
{
char name[20];
char email[30];
char homeaddr[60];
char telephone[13];
} records[N];
int i=0;

void Data_Up()
{
FILE*fp;
fp=fopen("d:\record.text","r");//at+读写打开一个文本文件,允许读,或在文件末追加数据
for(i=0;i<10000;i++)
{
fscanf(fp,"%s\n%s\n%s\n%s\n",&records[i].name,&records[i].email,&records[i].homeaddr,&records[i].telephone);
if(strcmp(records[i].name,"stop")==0)
break;
}
}

void Add_People(char name[20])
{
for(int j=0;j<=i;j++)
if(strcmp(records[j].name,name)>0)
break;
for(int n=i;n>=j;n--)
{
strcpy(records[n+1].name,records[n].name);
strcpy(records[n+1].email,records[n].email);
strcpy(records[n+1].homeaddr,records[n].homeaddr);
strcpy(records[n+1].telephone,records[n].telephone);
}
i++;
strcpy(records[j].name,name);
printf("\n请输入联系人的电子邮件:");
scanf("%s",records[j].email);
printf("\n请输入联系人的家庭地址:");
scanf("%s",records[j].homeaddr);
printf("\n请输入联系人的电话:");
scanf("%s",records[j].telephone);
printf("添加成功!\n");
}

void Data_Save()
{
int m;
FILE*fp;
fp=fopen("record.txt","w");
for(m=0;m<i;m++)
{
fprintf(fp,"%s\n%s\n%s\n%s\n",records[m].name,records[m].email,records[m].homeaddr,records[m].telephone);
}fclose(fp);
}

int Search_Name(char namestr[20])
{
int j;
for(j=0;j<=i;j++)
{
if(strcmp(namestr,records[j].name)==0)
break;
}
return j;
}

void DeletePeo()
{
char nametemp[20];
int tp,n;
if(i<1)
{
printf("\n没有删除的记录\n");
return;
}
printf("请输入您要查找的联系人的姓名:");
scanf("%s",nametemp);
n=Search_Name(nametemp);
if(n==-1)
{
printf("查找失败!\n");
return;
}
printf("确认要删除吗?确认按1,否则按任意键返回上一级菜单!\n");
scanf("%d",&tp);
if(tp==1)
{
int j;
for(j=n+1;j<=i;j++)
{
strcpy(records[j-1].name,records[j].name);
strcpy(records[j-1].email,records[j].email);
strcpy(records[j-1].homeaddr,records[j].homeaddr);
strcpy(records[j-1].telephone,records[j].telephone);
}
i--;//人数减少
}
else return;
}

void Data_Show(int j)//浏览
{
printf("联系人的基本信息如下:\n");
printf("姓名:%s",records[j].name);
printf("电子邮箱:%s",records[j].email);
printf("通信地址:%s",records[j].homeaddr);
printf("电话号码:%s",records[j].telephone);
printf("\n");
}

void Change(char name[20])
{
int n,m;
char string[60];
n=Search_Name(name);
if(n>i)
{
printf("您查找的联系人不存在!\n");
return;
}
Data_Show(n);
printf("请选择您要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;5->退出!\n\n");
scanf("%d",&m);
while(m!=5)
{
switch(m)
{
case 1:
printf("%s",string);scanf("%s",string);
strcpy(records[n].name,string);
break;
case 2:
printf("请输入新的电子邮件:");
scanf("%s",string);
strcpy(records[n].email,string);
case 3:
printf("请输入新的地址:");
scanf("%s",string);
strcpy(records[n].homeaddr,string);
case 4:
printf("请输入新的电话:");
scanf("%s",string);
strcpy(records[n].telephone,string);
case 5:
return;
}

printf("请继续选择您要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!");
scanf("%d",&m);
}
}
void main()
{
int ch,m,n;//j;
char tp,nametemp[20];
Data_Up();//读取
i--;
printf("电子通讯录:\n");
printf("请选择您需要的操作:\n");
printf("1->修改;\n2->查看所有的联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n\n");
scanf("%d",&ch);
while(ch!=7)
{
switch(ch)
{
case 1:
printf("要修改的%s的姓名");
scanf("%s",nametemp);
Change(nametemp);//修改
break;
case 2:
for(m=0;m<=i;m++)
Data_Show(m);//浏览
break;
case 3:
DeletePeo();//删除
break;
case 4:
printf("请输入你要查询的人的姓名:");
scanf("%s",nametemp);
n=Search_Name(nametemp);//查找
if(n>i)
printf("没有您要找的联系人!\n");
else Data_Show(n);
break;
case 5:
printf("请输入待添加的联系人的姓名:");
scanf("%s",nametemp);
Add_People(nametemp);//添加
break;
case 6:
printf("保存数据吗?确定按8键,否则按任意键选择其它操作!\n");
scanf("%d",&tp);
if(tp==8)
Data_Save();
case 7:return;//退出
}
system("pause");
system("c|s");
printf("1->修改;n2->查看所有的联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n");
printf("请输入您的选择:");
scanf("%d",&ch);
}
}

  • 写回答

4条回答 默认 最新

  • qfl_sdu 2021-07-16 09:18
    关注

    问题太多了。。。。给你改了一部分,改的地方都标出来了,代码如下:
    还有给你个建议,记录读取数量的时候,用个有意义的名字,别直接用 i ,这个 i 太普通了,你哪怕用个nmb也比用 i 强,i 容易跟局部变量弄混。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include <stdarg.h>
    #define N 100
    struct record//静态数组
    {
        char name[20];
        char email[30];
        char homeaddr[60];
        char telephone[13];
    } records[N];
    int i=0;
    
    void Data_Up()
    {
        FILE*fp;
        fp=fopen("d:\record.text","r");//at+读写打开一个文本文件,允许读,或在文件末追加数据
        //修改2
        if(fp ==0)
            return;
        //for(i=0;i<10000;i++)//修改3:for改成while
        while(!feof(fp))
        {
            //修改4,数组前不需要&
            //fscanf(fp,"%s\n%s\n%s\n%s\n",&records[i].name,&records[i].email,&records[i].homeaddr,&records[i].telephone);
            fscanf(fp,"%s\n%s\n%s\n%s\n",records[i].name,records[i].email,records[i].homeaddr,records[i].telephone);
            if(strcmp(records[i].name,"stop")==0)
                break;
            i++; //修改5:下标自增
        }
        //修改6:关闭文件
        fclose(fp);
    }
    
    void Add_People(char name[20])
    {
        int j; //修改1:j的声明放在for循环外面
        for(/*int*/ j=0;j<=i;j++)//修改1:去掉int
            if(strcmp(records[j].name,name)>0)
                break;
        for(int n= i-1 /*i*/;n>=j;n--)  //修改7:i是数组中元素的个数,下标是从i-1开始的
        {
            strcpy(records[n+1].name,records[n].name);
            strcpy(records[n+1].email,records[n].email);
            strcpy(records[n+1].homeaddr,records[n].homeaddr);
            strcpy(records[n+1].telephone,records[n].telephone);
        }
        i++;
        strcpy(records[j].name,name);
        printf("\n请输入联系人的电子邮件:");
        scanf("%s",records[j].email);
        printf("\n请输入联系人的家庭地址:");
        scanf("%s",records[j].homeaddr);
        printf("\n请输入联系人的电话:");
        scanf("%s",records[j].telephone);
        printf("添加成功!\n");
    }
    
    void Data_Save()
    {
        int m;
        FILE*fp;
        fp=fopen("record.txt","w");
        for(m=0;m<i;m++)
        {
            fprintf(fp,"%s\n%s\n%s\n%s\n",records[m].name,records[m].email,records[m].homeaddr,records[m].telephone);
        }fclose(fp);
    }
    
    int Search_Name(char namestr[20])
    {
        int j;
        for(j=0;j<=i;j++)
        {
            if(strcmp(namestr,records[j].name)==0)
                break;
        }
        return j;
    }
    
    void DeletePeo()
    {
        char nametemp[20];
        int tp,n;
        if(i<1)
        {
            printf("\n没有删除的记录\n");
            return;
        }
        printf("请输入您要查找的联系人的姓名:"); 
        scanf("%s",nametemp);
        n=Search_Name(nametemp);
        if(n==-1)
        {
            printf("查找失败!\n");
            return;
        }
        printf("确认要删除吗?确认按1,否则按任意键返回上一级菜单!\n");
        scanf("%d",&tp);
        if(tp==1)
        {
            int j;
            for(j=n+1;j<=i;j++)
            {
                strcpy(records[j-1].name,records[j].name);
                strcpy(records[j-1].email,records[j].email);
                strcpy(records[j-1].homeaddr,records[j].homeaddr);
                strcpy(records[j-1].telephone,records[j].telephone);
            }
            i--;//人数减少
        }
        else return;
    }
    
    void Data_Show(int j)//浏览
    {
        printf("联系人的基本信息如下:\n"); 
        printf("姓名:%s",records[j].name); 
        printf("电子邮箱:%s",records[j].email);
        printf("通信地址:%s",records[j].homeaddr);
        printf("电话号码:%s",records[j].telephone);
        printf("\n");
    }
    
    void Change(char name[20])
    {
        int n,m;
        char string[60];
        n=Search_Name(name);
        if(n>i)
        {
            printf("您查找的联系人不存在!\n");
            return;
        }
        Data_Show(n);
        printf("请选择您要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;5->退出!\n\n"); 
        scanf("%d",&m);
        while(m!=5)
        {
            switch(m)
            {
            case 1:
                printf("%s",string);scanf("%s",string);
                strcpy(records[n].name,string);
                break;
            case 2:
                printf("请输入新的电子邮件:");
                scanf("%s",string);
                strcpy(records[n].email,string);
            case 3:
                printf("请输入新的地址:");
                scanf("%s",string);
                strcpy(records[n].homeaddr,string);
            case 4:
                printf("请输入新的电话:");
                scanf("%s",string);
                strcpy(records[n].telephone,string);
            case 5:
                return;
            }
    
            printf("请继续选择您要修改的资料:\n1->修改联系人姓名;\n2->修改联系人电子邮件;\n3->修改联系人地址;\n4->修改联系人电话;\n5->退出!");
            scanf("%d",&m);
        }
    }
    void main()
    {
        int ch,m,n;//j;
        char tp,nametemp[20];
        Data_Up();//读取
        i--;
        printf("电子通讯录:\n");
        printf("请选择您需要的操作:\n");
        printf("1->修改;\n2->查看所有的联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n\n");
        scanf("%d",&ch);
        while(ch!=7)
        {
            switch(ch)
            {
            case 1:
                printf("要修改的%s的姓名");
                scanf("%s",nametemp);
                Change(nametemp);//修改
                break;
            case 2:
                for(m=0;m<=i;m++)
                    Data_Show(m);//浏览
                break;
            case 3:
                DeletePeo();//删除
                break;
            case 4:
                printf("请输入你要查询的人的姓名:");
                scanf("%s",nametemp);
                n=Search_Name(nametemp);//查找
                if(n>i)
                    printf("没有您要找的联系人!\n");
                else Data_Show(n);
                break;
            case 5:
                printf("请输入待添加的联系人的姓名:");
                scanf("%s",nametemp);
                Add_People(nametemp);//添加
                break;
            case 6:
                printf("保存数据吗?确定按8键,否则按任意键选择其它操作!\n");
                scanf("%d",&tp);
                if(tp==8)
                    Data_Save();
            case 7:return;//退出
            }
            system("pause");
            system("c|s");
            printf("1->修改;n2->查看所有的联系人;\n3->删除联系人;\n4->查询联系人;\n5->添加联系人;\n6->保存;\n7->退出\n");
            printf("请输入您的选择:");
            scanf("%d",&ch);
        }
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已采纳回答 7月16日
  • 创建了问题 7月16日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。