2024.8.15

顺序表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建顺序表(堆区),2录入学生信息,3插入一个学生信息,4删除一个学生信息,5按照位置修改一个学生信息,6、按照姓名顺序查找一个学生是否存在7、对学生年龄直接插入排序(从小到大)。

main.c

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

int main() {
    SeqList *list = NULL;
    int choice, position;
    Student student;
    char name[20];

    while (1) {
        menu();
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                list = createSeqList();
                printf("Sequential List created.\n");
                break;
            case 2:
                printf("Enter name, score, age, phone: ");
                scanf("%s %f %d %s", student.name, &student.score, &student.age, student.phone);
                addStudent(list, student);
                printf("Student added.\n");
                break;
            case 3:
                printf("Enter position to insert: ");
                scanf("%d", &position);
                printf("Enter name, score, age, phone: ");
                scanf("%s %f %d %s", student.name, &student.score, &student.age, student.phone);
                insertStudent(list, position, student);
                printf("Student inserted.\n");
                break;
            case 4:
                printf("Enter position to delete: ");
                scanf("%d", &position);
                deleteStudent(list, position);
                printf("Student deleted.\n");
                break;
            case 5:
                printf("Enter position to modify: ");
                scanf("%d", &position);
                printf("Enter new name, score, age, phone: ");
                scanf("%s %f %d %s", student.name, &student.score, &student.age, student.phone);
                modifyStudent(list, position, student);
                printf("Student modified.\n");
                break;
            case 6:
                printf("Enter name to find: ");
                scanf("%s", name);
                position = findStudentByName(list, name);
                if (position != -1) {
                    printf("Student found at position %d:\n", position);
                    printStudent(list->data[position]);
                } else {
                    printf("Student not found.\n");
                }
                break;
            case 7:
                sortStudentsByAge(list);
                printf("Students sorted by age.\n");
                break;
            case 8:
                printAllStudents(list);
                break;
            case 0:
                free(list->data);
                free(list);
                printf("Exiting...\n");
                return 0;
            default:
                printf("Invalid choice!\n");
        }
    }
}

main.h

#ifndef a

#define INITIAL_CAPACITY 10
#define a

typedef struct {
    char name[20];
    float score;
    int age;
    char phone[15];
}Student;

typedef struct {
    Student *data;
    int size;
    int capacity;
} SeqList;
// 初始化顺序表
SeqList* createSeqList();
// 录入学生信息
void addStudent(SeqList *list, Student student);
// 插入学生信息
void insertStudent(SeqList *list, int position, Student student);
// 删除学生信息
void deleteStudent(SeqList *list, int position);
// 按照位置修改学生信息
void modifyStudent(SeqList *list, int position, Student student);
// 按照姓名查找学生信息
int findStudentByName(SeqList *list, const char *name);
// 对学生年龄排序
void sortStudentsByAge(SeqList *list);
// 打印学生信息
void printStudent(Student student);
// 打印顺序表中的所有学生信息
void printAllStudents(SeqList *list);
// 主菜单
void menu();


#endif

func.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 初始化顺序表
SeqList* createSeqList() {
    SeqList *list = (SeqList*)malloc(sizeof(SeqList));
    list->data = (Student*)malloc(INITIAL_CAPACITY * sizeof(Student));
    list->size = 0;
    list->capacity = INITIAL_CAPACITY;
    return list;
}

// 录入学生信息
void addStudent(SeqList *list, Student student) {
    if (list->size == list->capacity) {
        list->capacity *= 2;
        list->data = (Student*)realloc(list->data, list->capacity * sizeof(Student));
    }
    list->data[list->size++] = student;
}

// 插入学生信息
void insertStudent(SeqList *list, int position, Student student) {
    if (position < 0 || position > list->size) {
        printf("Invalid position!\n");
        return;
    }
    if (list->size == list->capacity) {
        list->capacity *= 2;
        list->data = (Student*)realloc(list->data, list->capacity * sizeof(Student));
    }
    for (int i = list->size; i > position; i--) {
        list->data[i] = list->data[i - 1];
    }
    list->data[position] = student;
    list->size++;
}

// 删除学生信息
void deleteStudent(SeqList *list, int position) {
    if (position < 0 || position >= list->size) {
        printf("Invalid position!\n");
        return;
    }
    for (int i = position; i < list->size - 1; i++) {
        list->data[i] = list->data[i + 1];
    }
    list->size--;
}

// 按照位置修改学生信息
void modifyStudent(SeqList *list, int position, Student student) {
    if (position < 0 || position >= list->size) {
        printf("Invalid position!\n");
        return;
    }
    list->data[position] = student;
}

// 按照姓名查找学生信息
int findStudentByName(SeqList *list, const char *name) {
    for (int i = 0; i < list->size; i++) {
        if (strcmp(list->data[i].name, name) == 0) {
            return i;
        }
    }
    return -1;
}

// 对学生年龄排序
void sortStudentsByAge(SeqList *list) {
    for (int i = 1; i < list->size; i++) {
        Student temp = list->data[i];
        int j = i - 1;
        while (j >= 0 && list->data[j].age > temp.age) {
            list->data[j + 1] = list->data[j];
            j--;
        }
        list->data[j + 1] = temp;
    }
}

// 打印学生信息
void printStudent(Student student) {
    printf("Name: %s, Score: %.2f, Age: %d, Phone: %s\n", student.name, student.score, student.age, student.phone);
}

// 打印顺序表中的所有学生信息
void printAllStudents(SeqList *list) {
    for (int i = 0; i < list->size; i++) {
        printStudent(list->data[i]);
    }
}

// 主菜单
void menu() {
    printf("\nStudent Management System\n");
    printf("1. Create Sequential List\n");
    printf("2. Add Student\n");
    printf("3. Insert Student\n");
    printf("4. Delete Student\n");
    printf("5. Modify Student by Position\n");
    printf("6. Find Student by Name\n");
    printf("7. Sort Students by Age\n");
    printf("8. Display All Students\n");
    printf("0. Exit\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值