C语言实现学生信息管理系统(顺序表)

项目概述

本项目使用 C 语言和顺序表数据结构实现一个简单的学生信息管理系统,该系统包含以下功能:

  • 创建信息表
  • 向表中插入信息
  • 按指定 key 值修改信息
  • 按指定 key 值查找信息 (查找算法不限:顺序查找、折半查找、分块查找、哈希表查找.......)
  • 按指定 key 值删除信息
  • 将系统数据按指定 key 值排序 (排序算法不限:冒泡排序、插入排序、选择排序.......)

代码实现

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

// 定义学生信息结构体
typedef struct {
    int id;          // 学号
    char name[20];   // 姓名
    int score;       // 成绩
} Student;

// 定义顺序表结构体
typedef struct {
    Student *data;   // 学生信息数组
    int length;      // 当前长度
    int capacity;    // 容量
} SeqList;

// 初始化顺序表
void init(SeqList *list, int capacity) {
    list->data = (Student *)malloc(sizeof(Student) * capacity);
    list->length = 0;
    list->capacity = capacity;
}

// 插入信息
void insert(SeqList *list, Student student) {
    if (list->length == list->capacity) {
        printf('表已满,无法插入信息!\n');
        return;
    }
    list->data[list->length] = student;
    list->length++;
}

// 按学号查找信息
int search(SeqList list, int id) {
    for (int i = 0; i < list.length; i++) {
        if (list.data[i].id == id) {
            return i;
        }
    }
    return -1;  // 未找到返回-1
}

// 按学号修改信息
void modify(SeqList *list, int id) {
    int index = search(*list, id);
    if (index == -1) {
        printf('未找到该学生信息!\n');
        return;
    }
    printf('请输入新的姓名和成绩:');
    scanf('%s %d', list->data[index].name, &(list->data[index].score));
    printf('修改成功!\n');
}

// 按学号删除信息
void remove(SeqList *list, int id) {
    int index = search(*list, id);
    if (index == -1) {
        printf('未找到该学生信息!\n');
        return;
    }
    for (int i = index; i < list->length - 1; i++) {
        list->data[i] = list->data[i + 1];
    }
    list->length--;
    printf('删除成功!\n');
}

// 冒泡排序
void bubbleSort(SeqList *list) {
    for (int i = 0; i < list->length - 1; i++) {
        for (int j = 0; j < list->length - i - 1; j++) {
            if (list->data[j].id > list->data[j + 1].id) {
                Student temp = list->data[j];
                list->data[j] = list->data[j + 1];
                list->data[j + 1] = temp;
            }
        }
    }
}

// 打印学生信息
void printStudent(Student student) {
    printf('学号:%d\t姓名:%s\t成绩:%d\n', student.id, student.name, student.score);
}

// 打印所有学生信息
void printAll(SeqList list) {
    for (int i = 0; i < list.length; i++) {
        printStudent(list.data[i]);
    }
}

int main() {
    SeqList list;
    init(&list, 100);

    // 插入信息
    Student s1 = {1001, '张三', 80};
    insert(&list, s1);
    Student s2 = {1002, '李四', 90};
    insert(&list, s2);
    Student s3 = {1003, '王五', 85};
    insert(&list, s3);
    Student s4 = {1004, '赵六', 95};
    insert(&list, s4);
    Student s5 = {1005, '钱七', 70};
    insert(&list, s5);
    
    // 向表中插入信息
    Student s6 = {1006, '孙八', 88};
    insert(&list, s6);

    // 打印所有学生信息
    printf('所有学生信息:\n');
    printAll(list);

    // 按学号查找信息
    int id = 1002;
    int index = search(list, id);
    if (index != -1) {
        printf('学号为%d的学生信息:\n', id);
        printStudent(list.data[index]);
    } else {
        printf('未找到该学生信息!\n');
    }

    // 按学号修改信息
    id = 1003;
    modify(&list, id);

    // 打印所有学生信息
    printf('修改后的学生信息:\n');
    printAll(list);

    // 按学号删除信息
    id = 1001;
    remove(&list, id);

    // 打印所有学生信息
    printf('删除后的学生信息:\n');
    printAll(list);

    // 按学号排序
    bubbleSort(&list);

    // 打印所有学生信息
    printf('排序后的学生信息:\n');
    printAll(list);

    return 0;
}

使用说明

  1. 编译代码:使用 C 语言编译器编译代码。
  2. 运行程序:运行编译后的程序。
  3. 操作系统:根据程序提示,输入相应指令进行操作。

注意事项

  • 本项目只是一个简单的示例,实际应用中需要根据需求进行修改和完善。
  • 代码中的注释详细解释了代码的功能和实现方式,请仔细阅读。
  • 您可以根据需要修改和扩展代码,例如添加其他功能或使用不同的查找和排序算法。

原文地址: https://www.cveoy.top/t/topic/fT8e 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录