当前位置: 首页 > article >正文

学生信息管理系统

设计一个学生信息管理系统,学生信息包括:学号,姓名,专业,住址,电话。试编写满足以下要求的程序,并调试通过。
要求:系统能够增加、删除、修改学生的信息记录,且能够根据学号查找该学生的住址,电话。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 学生信息结构体
typedef struct Student {
    int id;   // 学号 
    char name[10];   // 姓名 
    char major[20];   // 专业
    char address[50];   // 住址
    char phone[20];   // 电话
} Student;

// 单链表节点结构体
typedef struct Node {
    Student data;
    struct Node *next;
} Node;

// 单链表头指针
Node *head = NULL;

// 函数声明
void output();
void insert();
void deleteById(int id);
void modifyById(int id);
void searchById(int id);
void printList();
void addToList(Student student);
void removeFromList(int id);
void initializeStudents();  // 初始化已有的学生信息

// 设定已有5名学生信息
void initializeStudents() {
    Student students[5] = {
        {2301, "小陈", "计算机", "翻斗花园1号楼2号房", "1008611"},
        {2302, "小梁", "软件学", "翻斗花园2号楼5号房", "1008622"},
        {2303, "小吴", "审计", "翻斗花园3号楼9号房", "1008633"},
        {2304, "小李", "文学", "不翻斗草园2号楼2号房", "1008644"},
        {2305, "小黄", "密码学", "不翻斗草园2号楼3号房", "1008655"} 
    };

    for (int i = 0; i < 5; i++) {
        addToList(students[i]);  // 将学生信息添加到单链表
    }
}

int main() {
    int choice, id;

    // 初始化5名学生
    initializeStudents();

    while (1) {
        printf("\n学生信息管理系统\n");
        printf("1. 输出学生信息\n");
        printf("2. 插入学生信息\n");
        printf("3. 删除学生信息\n");
        printf("4. 修改学生信息\n");
        printf("5. 查找学生信息\n");
        printf("6. 退出\n");
        printf("请选择操作: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                output();
                break;
            case 2:
                insert();
                break;
            case 3:
                printf("请输入要删除的学生学号: ");
                scanf("%d", &id);
                deleteById(id);
                break;
            case 4:
                printf("请输入要修改的学生学号: ");
                scanf("%d", &id);
                modifyById(id);
                break;
            case 5:
                printf("请输入要查找的学生学号: ");
                scanf("%d", &id);
                searchById(id);
                break;
            case 6:
                return 0;
            default:
                printf("无效的选择,请重新选择!\n");
        }
    }

    return 0;
}

// 输出学生信息
void output() {
    printf("\n单链表中的学生信息表:\n");
    printf("学号\t姓名\t专业\t住址\t电话\n");
    printList(); // 打印单链表中的学生信息
}

// 插入学生信息
void insert() {
    Student newStudent;
    printf("请输入学号: ");
    scanf("%d", &newStudent.id);
    printf("请输入姓名: ");
    scanf("%s", newStudent.name);
    printf("请输入专业: ");
    scanf("%s", newStudent.major);
    printf("请输入住址: ");
    scanf("%s", newStudent.address);
    printf("请输入电话: ");
    scanf("%s", newStudent.phone);

    // 将新学生信息添加到单链表中
    addToList(newStudent);
}

// 删除学生信息
void deleteById(int id) {
    // 从单链表中删除学生信息
    removeFromList(id);
}

// 修改学生信息
void modifyById(int id) {
    Node *temp = head;
    while (temp != NULL) {
        if (temp->data.id == id) {
            printf("请输入新的姓名: ");
            scanf("%s", temp->data.name);
            printf("请输入新的专业: ");
            scanf("%s", temp->data.major);
            printf("请输入新的住址: ");
            scanf("%s", temp->data.address);
            printf("请输入新的电话: ");
            scanf("%s", temp->data.phone);
            return;
        }
        temp = temp->next;
    }

    printf("未找到该学生。\n");
}

// 查找学生信息
void searchById(int id) {
    Node *temp = head;
    while (temp != NULL) {
        if (temp->data.id == id) {
            printf("学号: %d 姓名: %s 专业: %s 住址: %s 电话: %s\n",
                   temp->data.id, temp->data.name, temp->data.major, temp->data.address, temp->data.phone);
            return;
        }
        temp = temp->next;
    }

    printf("未找到该学生。\n");
}

// 打印单链表中的学生信息
void printList() {
    Node *temp = head;
    while (temp != NULL) {
        printf("%d\t%s\t%s\t%s\t%s\n",
               temp->data.id, temp->data.name,
               temp->data.major, temp->data.address, temp->data.phone);
        temp = temp->next;
    }
}

// 将学生信息添加到单链表
void addToList(Student student) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = student;
    newNode->next = NULL;

    if (head == NULL) {
        head = newNode;
    } else {
        Node *temp = head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
    }
}

// 从单链表中删除学生信息
void removeFromList(int id) {
    Node *current = head;
    Node *previous = NULL;

    while (current != NULL && current->data.id != id) {
        previous = current;
        current = current->next;
    }

    if (current == NULL) {
        printf("没有找到该学生\n");
    } else if (previous == NULL) {
        head = current->next;
        free(current);
    } else {
        previous->next = current->next;
        free(current);
    }
}


http://www.kler.cn/a/444701.html

相关文章:

  • 3.使用SD卡挂载petalinux根文件系统
  • Linux crontab 使用教程
  • HTTP—02
  • 【Linux进程】进程间的通信
  • 【异常】GL-SFT1200路由器中继模式,TL-CPE1300D无法搜寻5G网问题分析
  • CEF127 编译指南 MacOS 篇 - 编译 CEF(六)
  • 基于 JAVA 的 SSM 网络直播带货查询系统:JSP 主导的设计与实现架构
  • 3164: 查找“支撑数”
  • 远程控制软件新趋势
  • 二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片
  • (四)Spring Cloud Alibaba 2023.x:高效构建 Gateway 网关服务
  • 数据特性库 前言
  • 串口通信控制LED灯
  • 车辆重识别代码笔记12.20
  • 项目搭建+删除(单/批)
  • 【机器学习】机器学习的基本分类-强化学习-REINFORCE 算法
  • 带渐变边框的图(uniapp版本+uview)
  • 使用idea进行maven项目打war包
  • 【Linux】UDP通信
  • AOI外观缺陷检测机
  • unordered_map和unorderset_set的使用
  • Dot Foods EDI 需求分析及对接流程
  • Java爬虫大冒险:如何征服1688商品搜索之巅
  • 自然语言处理的不同流派
  • 冬日养仓鼠小指南:温暖与陪伴同行
  • 【LeetCode】将有序数组转换为二叉搜索树