成为最强的理塘丁真 2024-01-06 22:43 采纳率: 45.5%
浏览 3

c语言的这个学生信息管理系统运行出来为什么会有错码 如图


#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
  
// 定义学生结构体  
typedef struct Student {  
    int id;                  // 编号  
    char name[50];           // 姓名  
    char studentId[20];       // 学号  
    char college[50];         // 学院  
    char className[50];        // 班级  
    char major[50];            // 专业  
    char phone[20];            // 电话  
    int age;                   // 年龄  
    char birthday[20];         // 生日  
    char dormitory[100];       // 宿舍  
    struct Student* next;       // 下一个学生的指针  
} Student;  
Student* headOfStudents = NULL;

//学生课程信息 
typedef struct CourseInfo {  
    int courseId;                 // 课程编号  
    char name[50];                 // 姓名  
    char studentId[20];             // 学号  
    char semester[20];              // 学期  
    char courseName[100];           // 上课课程名称  
    char courseTime[50];            // 课程时间  
    char note[100];                 // 备注  
    struct CourseInfo* next;         // 下一个学生的指针  
} CourseInfo;
CourseInfo* headOfCourseInfo = NULL;
// 定义课程结构体  
typedef struct Course {  
    int courseId;             // 课程编号  
    char courseName[100];      // 课程名称  
    char courseDescription[200]; // 课程简介  
    char teacher[50];           // 任课教师  
    char courseTime[20];        // 课程时间  
    char courseAddress[100];    // 课程地址  
    char note[100];              // 备注  
    struct Course* next;         // 下一个课程的指针(对于同一学生)  
} Course;  
Course* headOfCourse = NULL;


void input() {  
    int choice;  
    do {  
        printf("\n请选择要录入的信息类型:\n");  
        printf("1. 学生信息\n");  
        printf("2. 课程信息\n");  
        printf("3. 学生课程信息\n"); 
        printf("输入4退出\n");
        scanf("%d", &choice);  
        switch(choice) {  
                      case 1:  
                {  
                    Student* newStudent = (Student*)malloc(sizeof(Student)); // 创建新的学生结构体实例  
                    if (newStudent == NULL) {  
                        printf("内存分配失败!\n");  
                        break;  
                    }  
                    printf("您选择了录入学生信息。\n");  
                    printf("请输入学生编号(id):");  
                    scanf("%d", &newStudent->id);  
                    printf("请输入学生姓名:");  
                    scanf("%s", newStudent->name);  
                    printf("请输入学生学号:");  
                    scanf("%s", newStudent->studentId);  
                    printf("请输入学生学院:");  
                    scanf("%s", newStudent->college);  
                    printf("请输入学生班级:");  
                    scanf("%s", newStudent->className);  
                    printf("请输入学生专业:");  
                    scanf("%s", newStudent->major);  
                    printf("请输入学生电话:");  
                    scanf("%s", newStudent->phone);  
                    printf("请输入学生年龄:");  
                    scanf("%d", &newStudent->age);  
                    printf("请输入学生生日:");  
                    scanf("%s", newStudent->birthday);  
                    printf("请输入学生宿舍:");  
                    scanf("%s", newStudent->dormitory);  
                    newStudent->next = NULL;   // 将新学生的指针初始化为NULL,表示该节点是链表的最后一个节点。  
                    if (headOfStudents == NULL) {  // 如果链表为空,将新节点设置为头节点。  
                        headOfStudents = newStudent;  
                    } else {  // 如果链表不为空,找到最后一个节点并修改其指针。  
                        Student* current = headOfStudents;  
                        while (current->next != NULL) {  // 遍历链表找到最后一个节点。  
                            current = current->next;  
                        }  
                        current->next = newStudent;  // 将最后一个节点的指针指向新节点。  
                    }  
                    printf("学生信息录入成功!\n");  // 打印成功消息。  
                } break;
                break;  
         case 2:  
    {  
        Course* newCourse = (Course*)malloc(sizeof(Course)); // 创建新的课程结构体实例  
        printf("请输入课程编号(courseId):");  
        scanf("%d", &newCourse->courseId);  
        printf("请输入课程名称:");  
        scanf("%s", newCourse->courseName);  
        printf("请输入课程简介:");  
        scanf("%s", newCourse->courseDescription);  
        printf("请输入任课教师:");  
        scanf("%s", newCourse->teacher);  
        printf("请输入课程时间:");  
        scanf("%s", newCourse->courseTime);  
        printf("请输入课程地址:");  
        scanf("%s", newCourse->courseTime);  
        printf("请输入备注:");  
        scanf("%s", newCourse->note);  
            newCourse->next = NULL;   // 将新学生的指针初始化为NULL,表示该节点是链表的最后一个节点。  
                    if (headOfCourse == NULL) {  // 如果链表为空,将新节点设置为头节点。  
                        headOfCourse = newCourse;  
                    } else {  // 如果链表不为空,找到最后一个节点并修改其指针。  
                      Course* current = headOfCourse;  
                        while (current->next != NULL) {  // 遍历链表找到最后一个节点。  
                            current = current->next;  
                        }  
                        current->next = newCourse;  // 将最后一个节点的指针指向新节点。  
                    } 
                     printf("课程信息录入成功!\n"); 
                    
    }  
    break;
             case 3:  
    {  
        CourseInfo * newCourseInfo  = (CourseInfo *)malloc(sizeof(CourseInfo )); // 创建新的课程结构体实例  
        printf("请输入课程编号(courseId):");  
        scanf("%d", &newCourseInfo->courseId);  
        printf("请输入学生姓名:");  
        scanf("%s", newCourseInfo->name);  
        printf("请输入学生学号:");  
        scanf("%s", newCourseInfo->studentId);  
        printf("请输入学期:");  
        scanf("%s", newCourseInfo->semester);  
        printf("请输入课程名称:");  
        scanf("%s",newCourseInfo->courseName);  
        printf("请输入课程时间:");  
        scanf("%s", newCourseInfo->courseTime);  
        printf("请输入备注:");  
        scanf("%s", newCourseInfo->note);  
        newCourseInfo->next = NULL; 
            newCourseInfo->next = NULL;   // 将新学生的指针初始化为NULL,表示该节点是链表的最后一个节点。  
                    if (headOfCourseInfo == NULL) {  // 如果链表为空,将新节点设置为头节点。  
                        headOfCourseInfo = newCourseInfo;  
                    } else {  // 如果链表不为空,找到最后一个节点并修改其指针。  
                     CourseInfo* current = headOfCourseInfo;  
                        while (current->next != NULL) {  // 遍历链表找到最后一个节点。  
                            current = current->next;  
                        }  
                        current->next = newCourseInfo;  // 将最后一个节点的指针指向新节点。  
                    } 
        printf("课程信息录入成功!\n");  
    }  
    break;  
    case 4:
        break;
            default:  
                printf("无效的选择,请重新选择。\n");  
        }  
    } while(choice != 4); // 如果用户没有选择1、2或3,则继续循环。  
}


void delete1(){ 
         int type;
 printf("\n请选择要删除的信息类型:\n");  
        printf("1. 学生信息\n");  
        printf("2. 课程信息\n");  
        printf("3. 学生课程信息\n"); 
        printf("输入4退出\n");
        scanf("%d", &type);  
    switch (type) {  
          case 1: {    
    printf("请输入要删除的学生编号(id):");      
    int id;      
    scanf("%d", &id);      
    Student* current = headOfStudents;     
    Student* prev = NULL;      
    while (current != NULL) {      
        if (current->id == id) {      
            if (prev == NULL) { // 删除头部节点    
                headOfStudents = current->next;     
                free(current); // 释放内存空间    
            } else { // 删除中间节点或尾部节点    
                prev->next = current->next;     
                free(current); // 释放内存空间    
            }      
            printf("学生信息删除成功!\n");      
            return;      
        }      
        prev = current;      
        current = current->next;      
    }      
    printf("没有找到该学生信息!\n");      
    break;      
}      
        case 2: {
        
            printf("请输入要删除的课程编号(courseId):");  
            int courseId;  
            scanf("%d", &courseId);  
            Course* current = headOfCourse;
            Course* prev = NULL;  
            while (current != NULL) {  
                if (current->courseId == courseId) {  
                    if (prev == NULL) { // 删除头部节点  
                        headOfCourse = current->next;  
                    } else { // 删除中间节点或尾部节点  
                        prev->next = current->next;  
                    }  
                    free(current); // 释放内存空间  
                    printf("课程信息删除成功!\n");  
                    return;  
                }  
                prev = current;  
                current = current->next;  
            }  
            printf("没有找到该课程信息!\n");  
        
            break;  
        }
       case 3:  
       {
    
            printf("请输入要删除的课程编号(courseId):");  
            int courseId;  
            scanf("%d", &courseId);  
            CourseInfo* current = headOfCourseInfo;
            CourseInfo* prev = NULL;  
            while (current != NULL) {  
                if (current->courseId == courseId) {  
                    if (prev == NULL) { // 删除头部节点  
                        headOfCourseInfo = current->next;  
                    } else { // 删除中间节点或尾部节点  
                        prev->next = current->next;  
                    }  
                    free(current); // 释放内存空间  
                    printf("学生课程信息删除成功!\n");  
                    return;  
                } 
                else {
                
                prev = current;  
                current = current->next; 
            }
            }  
            if(current==NULL)
            printf("没有找到该课程信息!\n");  
        return;
        }
    }
}

void search()
{

     int choice;  
    printf("\n请选择要查找的信息类型:\n");  
        printf("1. 学生信息\n");  
        printf("2. 课程信息\n");  
        printf("3. 学生课程信息\n"); 
        printf("输入4退出\n");
        scanf("%d", &choice);  
    switch (choice)
    {
    case 1:
    {
            int type;
                printf("输入1 按姓名查找\n");
                printf("输入2 按学号查找\n");
                printf("请输入查找方式:\n");
                scanf("%d",&type);
                 switch(type)
                 {
            
                     case 1:
                    {
                
                             printf("请输入要查找的学生姓名:");      
                             char name[10];      
                             scanf("%s", name);      
                             Student* current = headOfStudents;     
                             Student* prev = NULL;      
                                while (current != NULL) 
                                    {
                                    
                              if (strcmp(current->name,name)==0) 
                        {
                        
                              printf("学生信息:\n");  
                              printf("编号\t姓名\t学号\t学院\t班级\t专业\t电话\t年龄\t生日\t宿舍\n"); // 打印表头    
                              printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n", current->id, current->name, current->studentId, current->college, current->className, current->major, current->phone, current->age, current->birthday, current->dormitory); // 按照制表位输出学生信息  
                    return;
                     }
                             else
                              {
                               prev = current; 
                              current = current->next;  
                    }
                }
                         if(current==NULL)
                        printf("未查找到该学生!\n"); 
                         return;
            }        
            return; 
            
     case 2:
            {
            
             printf("请输入要查找的学生姓名:");      
                             char id[10];      
                             scanf("%s", id);      
                             Student* current = headOfStudents;     
                             Student* prev = NULL;      
                                while (current != NULL) {   
                              if (strcmp(current->studentId,id)==0) 
                             {
                              printf("学生信息:\n");  
                              printf("编号\t姓名\t学号\t学院\t班级\t专业\t电话\t年龄\t生日\t宿舍\n"); // 打印表头    
                              printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n", current->id, current->name, current->studentId, current->college, current->className, current->major, current->phone, current->age, current->birthday, current->dormitory); // 按照制表位输出学生信息  
                        return;
                        }
                            else
                            {
                            prev = current; 
                              current = current->next;  
            }
                }
                        if(current==NULL)
                        printf("未查找到该学生!\n"); 
                     return;
}
}
        break;
}
     case 2:
    {
    
            int type;
                printf("输入1 按课程编号查找\n");
                printf("输入2 按课程名称查找\n");
                printf("输入3 按任课教师查找\n"); 
                printf("请输入查找方式:\n");
                scanf("%d",&type);    
                switch(type)
                {
                
                    case 1:
                    {
                    printf("请输入要查找的课程编号:");      
                             int name;      
                             scanf("%d",&name);      
                              Course* current = headOfCourse;     
                              Course* prev = NULL;      
                                while (current != NULL) {
                              if(current->courseId==name) 
                        { 
                        printf("课程编号\t课程名称\t课程简介\t任课教师\t课程时间\t课程地址\t备注\n"); // 打印表头    
                        printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\n", current->courseId, current->courseName, current->courseDescription, current->teacher, current->courseTime, current->courseAddress, current->note); // 按照制表位输出课程信息    
                              return; 
                          }
                              else
                              {
                             prev = current; 
                              current = current->next;   
                    }
                    }
                        if(current==NULL)
                        printf("未查找到该课程!\n"); 
                          return;    
        }
             return;

                 case 2: 
                {
                
                         printf("请输入要查找的课程名称:");      
                             char name[10];      
                             scanf("%s", name);      
                              Course* current = headOfCourse;     
                              Course* prev = NULL;      
                                while (current != NULL) {    
                              if (strcmp(current->courseName,name)==0) 
                               {
                               
                             printf("课程编号\t课程名称\t课程简介\t任课教师\t课程时间\t课程地址\t备注\n"); // 打印表头  
                              printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\n", current->courseId, current->courseName,
                               current->courseDescription, current->teacher, current->courseTime, current->courseAddress, current->note); // 按照制表位输出课程信息  
                         return;
                         }
                              else{
                              prev = current; 
                              current = current->next;   
                    }
                }
                         if(current==NULL)
                        printf("未查找到该课程!\n"); 
                          return;    
            }
                return;

               case 3:{
            
                   
                           printf("请输入要查找的任课教师:");      
                             char name[10];      
                             scanf("%s", name);      
                              Course* current = headOfCourse;     
                              Course* prev = NULL;      
                                while (current != NULL) {    
                              if (strcmp(current->teacher,name)==0) {
                             printf("课程编号\t课程名称\t课程简介\t任课教师\t课程时间\t课程地址\t备注\n"); // 打印表头  
                              printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\n", current->courseId, current->courseName,    
                             current->courseDescription, current->teacher, current->courseTime, current->courseAddress, current->note); // 按照制表位输出课程信息  
                     return;
                      }
                          else
                          {
                          prev = current; 
                                current = current->next;   
                          }
                    }
                         if(current==NULL) 
                        printf("未查找到该课程!\n"); 
                          return;
            }
            return;

}
break;
}
}

}
// 主函数
int main() {
    int choice = 0;
    while (choice != 7) { // 7是退出选项的编号
        printf("|请选择操作:    |\n");
        printf("|1. 录入信息     |\n");
        printf("|2. 删除信息     |\n");
        printf("|3. 查找信息     |\n");
        printf("|4. 统计信息     |\n");
        printf("|5. 保存及备份   |\n");
        printf("|6. 退出         |\n");
        scanf("%d", &choice); // 获取用户选择的操作编号
        switch (choice) { // 根据用户选择的操作编号执行相应的操作
            case 1:
                input();
                break;
           case 2:
                delete1();
                break;
            case 3:
                search();
                break;
        /*    case 4:
                 count();
                 break;
            case 5:
                save();
                break;
            case 6: // 如果用户选择退出,直接退出程序。
                printf("谢谢使用!\n");
                return; // 退出程序 */
            default: // 如果用户输入的操作编号不在选项范围内,提示用户重新输入。
                printf("输入有误,请重新输入!\n");
                break;
        }
    }
    return 0; // 退出程序时返回0,表示程序正常结束。
}


 
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/056e642aecc449d6b175347d56550dde.png "#left")
  • 写回答

2条回答 默认 最新

  • .starch 2024-01-06 23:34
    关注

    试了下没有问题,
    前面加个

    #pragma warning(disable : 4996)

    评论

报告相同问题?

问题事件

  • 创建了问题 1月6日

悬赏问题

  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
  • ¥15 请求解答odoo17外发加工某工序的实操方法
  • ¥20 IDEA ssm项目 跳转页面报错500
  • ¥20 系统直接进入应急模式了,请教一下,人要裂开了
  • ¥15 页面初次加载时,JS调用对象可以调用成功,但是一旦跳转到另一个页面,再跳转回来后这个对象就显示undefind了,调用也调用不了了,什么原因?
  • ¥15 来个厉害的程序开发的,安排点活给你做
  • ¥15 rexroth indramotion MTX micro系统轴耦合编程
  • ¥100 springboot2.7.x 整合 sharding 的问题
  • ¥15 如何通过命令行操作统信360安全浏览器?