m0_73740280 2023-01-24 20:50 采纳率: 86.8%
浏览 37
已结题

请问这个C语言代码可以怎样修改

文件录入功能:输入待录入的学生信息再回车没有反应,调试时不知道怎么结束这个功能

#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <string.h>
struct Student
{
    char id[14];
    char name[10];
    int age;
    char sex[3];
    char date[10];
    char address[20];
    char phone[12];
    char email[20];
};
struct Student stu[50],ss;
int menu();
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 
int searchID(Student stu[] , int count , Student ss); 
int searchNAME(Student stu[] , int count , Student ss); 
//正常插入,返回学生数;否则,返回-1
int add(Student stu[] , int count ,Student ss);
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
int modify(Student stu[],int count,Student ss);
//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
int Delete(Student stu[],int count,Student ss);
void writeFile(Student stu[] , int count );
int readFile(Student stu[]);
int main()
{
    int  count = 0, i;
    int select, tag = 1 ;
    count = readFile(stu);
    while(tag)
    {
        //菜单 
        menu();
        scanf("%d",&select);
        switch(select)
        {
            case 1://增加
                printf("请输入待录入的学生\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\t\n");
                scanf("%s%s%d%s%s%s%s%s\n", ss.id , ss.name ,&ss.age, ss.sex ,ss.date,ss.address,ss.phone,ss.email);
                i = add(stu,count,ss);
                //如果本来不存在这个学生信息 
                if(i != -1)
                {
                    printf("录入成功\n");
                    count  = i;
                }
                else
                    printf("录入失败\n");
                break;
            case 2://按学号查找
                printf("请输入学号:");
                scanf("%s", ss.id);
                i = searchID(stu , count ,ss);
                if(i != -1 )
                    printf("%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
                else
                    printf("%s 不存在!\n",ss.id);
                break;
            case 3://按姓名查找 
                printf("请输入姓名:");
                scanf("%s", ss.name);
                i = searchNAME(stu , count ,ss);
                if(i != -1 )
                    printf("%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
                else
                    printf("%s 不存在!\n",ss.name);
                break;
            case 4://修改 
                printf("请输入待修改的学生\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\t\n");
                scanf("%s%s%d%s%s%s%s%s\n", ss.id , ss.name ,&ss.age, ss.sex ,ss.date,ss.address,ss.phone,ss.email);
                i = modify(stu , count ,ss);
                if(i == -1)
                    printf("%s 不存在,修改失败!\n",ss.id);
                    else
                    printf("修改成功\n"); 
                break;
            case 5://删除 
                printf("请输入待删除的学生学号:");
                scanf("%s", ss.id);
                i = Delete(stu , count ,ss);
                    if(i != -1 )
                {
                    printf("删除成功\n");
                    count = i; 
                }
                else
                    printf("%s 不存在,删除失败\n",ss.id);
                break;
            case 6://显示 
                printf("学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\t\n");
                for(i = 0 ; i < count ; i++ )
                    printf("%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
                break;
            case 0:
                system("cls") ;
                printf("欢迎再次使用学生信息管理系统......\n");
                tag = 0 ;
                writeFile(stu ,count );
                break;
            default:
                printf("选择错误,只能选择(0-6)");
        }
        printf("按任意键继续......\n");
        getch();
        system("cls");
    }
    getch();
    return 0;
}
 
int menu()
{
    printf("       *学生信息管理系统*    \n");
    printf("1、插入学生信息\n");
    printf("2、查找学生信息(按学号)\n");
    printf("3、查找学生信息(按姓名)\n");
    printf("4、修改学生信息\n");
    printf("5、删除学生信息\n");
    printf("6、显示学生信息\n");
    printf("0、退出系统\n");
    printf("__________________________\n");
    printf("请选择(0-6):");
}
//功能:在stu的count个元素,查找ss
//返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1 
int searchID(Student stu[] , int count , Student ss)
{
    int i ;
    for(i = 0 ; i < count ; i++)
    //i是所查找的学生在数组中的下标 
        if(strcmp(stu[i].id , ss.id) == 0) return i ;
    return -1;
}
int searchNAME(Student stu[] , int count , Student ss)
{
    int i ;
    for(i = 0 ; i < count ; i++)
        if(strcmp(stu[i].name , ss.name) == 0) return i ;
    return -1;
}
 
int add(Student stu[] , int count ,Student ss)
{
    int pos ;
    //先判断添加的信息是否原本已有这个学生
    pos = searchID(stu , count ,ss);
    //如果本来不存在,就添加 
    if(pos == -1)
    {
        stu[count] = ss;
        return count + 1;
    }
    return -1;
}
//若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
int modify(Student stu[],int count,Student ss)
{
    int pos ;
    pos = searchID(stu , count ,ss);
    if(pos == -1)
    return -1;
    else
    {
        stu[pos] =ss;
        return count;
    }
} 
 
//若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
int Delete(Student stu[],int count,Student ss)
{
    int pos , i;
        pos = searchID(stu , count ,ss);
        if(pos == -1)
            return -1;
        else
        {
            for(i = pos + 1 ; i < count ; i++ )
                stu[i - 1 ] = stu[i] ;
            return count - 1;    
        }
} 
void writeFile(Student stu[],int count )
{
    FILE *fp ;
    int i;
    //"w"是写文件 
    fp = fopen ("student.dat" , "w");
    for(i = 0 ; i < count ;i++)
    //fprinf()是把文件内容输出到屏幕 
      fprintf(fp,"%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
    fclose(fp);
}
//只读文件 
int readFile(Student stu[])
{
    FILE *fp ;
    int i;
    fp = fopen ("student.dat" , "r");
    //如果文件不存在,返回0 
    if(fp == NULL)
     return 0;
    //foef()判断文件是否结束,结束返回1,未结束返回0,用!feof()作为循环条件 
    //fscanf()将文件中的数据读入数组变量id,name...中 
    for(i = 0 ; !feof(fp) ; i++)
      fscanf(fp , "%s%s%d%s%s%s%s%s\n" ,stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
    fclose(fp);
    return i;
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-01-25 00:13
    关注

    修改如下,改动处见注释修改,供参考:

    #include <stdio.h>
    #include <windows.h>
    #include <conio.h>
    #include <string.h>
    struct Student
    {
        char id[14];
        char name[10];
        int  age;
        char sex[4];  //char sex[3];  修改
        char date[16];//char date[10];修改
        char address[20];
        char phone[12];
        char email[20];
    };
    struct Student stu[50],ss;
    int menu();
    //功能:在stu的count个元素,查找ss
    //返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
    int searchID(Student stu[] , int count , Student ss);
    int searchNAME(Student stu[] , int count , Student ss);
    //正常插入,返回学生数;否则,返回-1
    int add(Student stu[] , int count ,Student ss);
    //若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1 
    int modify(Student stu[],int count,Student ss);
    //若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1 
    int Delete(Student stu[],int count,Student ss);
    void writeFile(Student stu[] , int count );
    int readFile(Student stu[]);
    int main()
    {
        int count = 0, i;
        int select, tag = 1 ;
        count = readFile(stu);
        while(tag)
        {
            //菜单
            menu();
            scanf("%d",&select);
            switch(select)
            {
                case 1://增加
                    printf("请输入待录入的学生\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\t\n");
                    scanf("%s %s %d %s %s %s %s %s", ss.id , ss.name ,&ss.age, ss.sex ,ss.date,ss.address,ss.phone,ss.email);
                    //scanf("%s%s%d%s%s%s%s%s\n", ss.id , ss.name ,&ss.age, ss.sex ,ss.date,ss.address,ss.phone,ss.email); 修改
                    i = add(stu,count,ss);
                    //如果本来不存在这个学生信息 
                    if(i != -1)
                    {
                        printf("录入成功\n");
                        count  = i;
                    }
                    else
                        printf("录入失败\n");
                    break;
                case 2://按学号查找
                    printf("请输入学号:");
                    scanf("%s", ss.id);
                    i = searchID(stu , count ,ss);
                    if(i != -1 )
                        printf("%s %s %d %s %s %s %s %s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
                        //printf("%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email); 修改
                    else
                        printf("%s 不存在!\n",ss.id);
                    break;
                case 3://按姓名查找
                    printf("请输入姓名:");
                    scanf("%s", ss.name);
                    i = searchNAME(stu , count , ss);
                    if(i != -1 )
                        printf("%s %s %d %s %s %s %s %s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
                        //printf("%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email); 修改
                    else
                        printf("%s 不存在!\n",ss.name); //修改
                    break;
                case 4://修改
                    printf("请输入待修改的学生\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\t\n");
                    scanf("%s %s %d %s %s %s %s %s", ss.id , ss.name ,&ss.age, ss.sex ,ss.date,ss.address,ss.phone,ss.email);
                    //scanf("%s%s%d%s%s%s%s%s\n", ss.id , ss.name ,&ss.age, ss.sex ,ss.date,ss.address,ss.phone,ss.email); 修改
                    i = modify(stu , count ,ss);
                    if(i == -1)
                        printf("%s 不存在,修改失败!\n",ss.id);
                    else
                        printf("修改成功\n");
                    break;
                case 5://删除
                    printf("请输入待删除的学生学号:");
                    scanf("%s", ss.id);
                    i = Delete(stu , count ,ss);
                        if(i != -1 )
                    {
                        printf("删除成功\n");
                        count = i; 
                    }
                    else
                        printf("%s 不存在,删除失败\n",ss.id); 
                    break;
                case 6://显示 
                    printf("学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\t\n");
                    for(i = 0 ; i < count ; i++ )
                        printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
                        //printf("%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email); 修改
                    break;
                case 0:
                    system("cls") ;
                    printf("欢迎再次使用学生信息管理系统......\n");
                    tag = 0 ;
                    writeFile(stu ,count );
                    break;
                default:
                    printf("选择错误,只能选择(0-6)");
            }
            printf("按任意键继续......\n");
            getch();
            system("cls");
        }
        getch();
        return 0;
    }
     
    int menu()
    {
        printf("       *学生信息管理系统*    \n");
        printf("1、插入学生信息\n");
        printf("2、查找学生信息(按学号)\n");
        printf("3、查找学生信息(按姓名)\n");
        printf("4、修改学生信息\n");
        printf("5、删除学生信息\n");
        printf("6、显示学生信息\n");
        printf("0、退出系统\n");
        printf("__________________________\n");
        printf("请选择(0-6):");
    }
    //功能:在stu的count个元素,查找ss
    //返回值:查找成功,返回ss在stu中的位置号;否则,返回 -1
    int searchID(Student stu[] , int count , Student ss)
    {
        int i ;
        for(i = 0 ; i < count ; i++)
        //i是所查找的学生在数组中的下标 
            if(strcmp(stu[i].id , ss.id) == 0) return i ;
        return -1;
    }
    
    int searchNAME(Student stu[] , int count , Student ss)
    {
        int i ;
        for(i = 0 ; i < count ; i++)
            if(strcmp(stu[i].name , ss.name) == 0) return i ;
        return -1;
    }
    
     
    int add(Student stu[] , int count ,Student ss)
    {
        int pos ;
        //先判断添加的信息是否原本已有这个学生
        pos = searchID(stu , count ,ss);
        //如果本来不存在,就添加
        if(pos == -1)
        {
            stu[count] = ss;
            return count + 1;
        }
        return -1;
    }
    //若输入的学号存在,正常修改,返回学生数,否则,修改失败,返回 -1
    int modify(Student stu[],int count,Student ss)
    {
        int pos ;
        pos = searchID(stu , count ,ss);
        if(pos == -1)
            return -1;
        else
        {
            stu[pos] =ss;
            return count;
        }
    } 
    
    //若输入的学号存在,删除,返回学生数,否则,删除失败,返回 -1
    int Delete(Student stu[],int count,Student ss)
    {
        int pos , i;
        pos = searchID(stu , count ,ss);
        if(pos == -1)
                return -1;
        else
        {
            for(i = pos + 1 ; i < count ; i++ )
                stu[i - 1 ] = stu[i] ;
            return count - 1;
        }
    }
    void writeFile(Student stu[],int count )
    {
        FILE *fp ;
        int i;
        //"w"是写文件 
        fp = fopen ("student.dat" , "w");
        for(i = 0 ; i < count ;i++)
        //fprinf()是把文件内容输出到屏幕 
          fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email);
          //fprintf(fp,"%s%s%d%s%s%s%s%s\n",stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email); 修改
        fclose(fp);
    }
    //只读文件 
    int readFile(Student stu[])
    {
        FILE *fp ;
        int i;
        fp = fopen ("student.dat" , "r");
        //如果文件不存在,返回0
        if(fp == NULL)
         return 0;
        //foef()判断文件是否结束,结束返回1,未结束返回0,用!feof()作为循环条件
        //fscanf()将文件中的数据读入数组变量id,name...中
        for(i = 0 ;  ; i++)  //(i = 0 ; !feof(fp) ; i++)   修改
          if (fscanf(fp , "%s %s %d %s %s %s %s %s\n" ,stu[i].id , stu[i].name , &stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email)!=8) break;
          //fscanf(fp , "%s%s%d%s%s%s%s%s\n" ,stu[i].id , stu[i].name , stu[i].age,stu[i].sex,stu[i].date,stu[i].address,stu[i].phone,stu[i].email); 修改
        fclose(fp);
        return i;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月3日
  • 已采纳回答 1月26日
  • 创建了问题 1月24日

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了