酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #include <stdbool.h> /* 学生管理系统 包括:学号(long long int),姓名(char[]),性别(char[]),年龄(int) 存储结构:顺序表 顺序表用动态内存分配实现创建,初始容量设置为1 主要功能: 1.学生信息的插入 尾部插入 插入到指定学号后面 插入到指定姓名后面 注意:需要输入 学号(long long int),姓名(char[]),性别(char[]),年龄(int) 学号必须输入且不能重复 2.学生信息删除 尾部删除 根据学号删除学生 根据姓名删除学生 3.修改学生信息 根据学号修改学生 根据姓名修改学生 4.查询学生信息 根据学号查询学生 根据姓名查询学生 文件存储(stuinfo.txt) 结束销毁顺序表 */ //创建学生结构 struct student { long long int id;//学号

以下是一个使用 C 语言实现上述学生管理系统的示例代码,您可以根据实际需求进行修改和完善: ```c #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #include <stdbool.h> // 定义学生结构体 struct student { long long int id; // 学号 char name[50]; // 姓名 char gender[10]; // 性别 int age; // 年龄 }; // 定义顺序表结构体 struct seqList { struct student* data; // 存储学生数据的指针 int capacity; // 顺序表容量 int size; // 顺序表当前元素个数 }; // 创建顺序表 struct seqList* createList() { struct seqList* list = (struct seqList*)malloc(sizeof(struct seqList)); if (list == NULL) { printf("内存分配失败!\n"); return NULL; } list->capacity = 1; list->size = 0; list->data = (struct student*)malloc(list->capacity * sizeof(struct student)); if (list->data == NULL) { printf("内存分配失败!\n"); free(list); return NULL; } return list; } // 扩容顺序表 void expandList(struct seqList* list) { list->capacity *= 2; struct student* newData = (struct student*)realloc(list->data, list->capacity * sizeof(struct student)); if (newData == NULL) { printf("内存扩展失败!\n"); return; } list->data = newData; } // 尾部插入学生信息 void insertTail(struct seqList* list, struct student stu) { if (list->size == list->capacity) { expandList(list); } list->data[list->size++] = stu; } // 在指定学号后面插入学生信息 bool insertAfterId(struct seqList* list, long long int targetId, struct student stu) { for (int i = 0; i < list->size; i++) { if (list->data[i].id == targetId) { if (list->size == list->capacity) { expandList(list); } for (int j = list->size; j > i + 1; j--) { list->data[j] = list->data[j - 1]; } list->data[i + 1] = stu; list->size++; return true; } } return false; } // 在指定姓名后面插入学生信息 bool insertAfterName(struct seqList* list, char* targetName, struct student stu) { for (int i = 0; i < list->size; i++) { if (strcmp(list->data[i].name, targetName) == 0) { if (list->size == list->capacity) { expandList(list); } for (int j = list->size; j > i + 1; j--) { list->data[j] = list->data[j - 1]; } list->data[i + 1] = stu; list->size++; return true; } } return false; } // 尾部删除学生信息 void deleteTail(struct seqList* list) { if (list->size > 0) { list->size--; } } // 根据学号删除学生信息 bool deleteById(struct seqList* list, long long int targetId) { for (int i = 0; i < list->size; i++) { if (list->data[i].id == targetId) { for (int j = i; j < list->size - 1; j++) { list->data[j] = list->data[j + 1]; } list->size--; return true; } } return false; } // 根据姓名删除学生信息 bool deleteByName(struct seqList* list, char* targetName) { for (int i = 0; i < list->size; i++) { if (strcmp(list->data[i].name, targetName) == 0) { for (int j = i; j < list->size - 1; j++) { list->data[j] = list->data[j + 1]; } list->size--; return true; } } return false; } // 根据学号修改学生信息 bool modifyById(struct seqList* list, long long int targetId, struct student newStu) { for (int i = 0; i < list->size; i++) { if (list->data[i].id == targetId) { list->data[i] = newStu; return true; } } return false; } // 根据姓名修改学生信息 bool modifyByName(struct seqList* list, char* targetName, struct student newStu) { for (int i = 0; i < list->size; i++) { if (strcmp(list->data[i].name, targetName) == 0) { list->data[i] = newStu; return true; } } return false; } // 根据学号查询学生信息 struct student* queryById(struct seqList* list, long long int targetId) { for (int i = 0; i < list->size; i++) { if (list->data[i].id == targetId) { return &list->data[i]; } } return NULL; } // 根据姓名查询学生信息 struct student* queryByName(struct seqList* list, char* targetName) { for (int i = 0; i < list->size; i++) { if (strcmp(list->data[i].name, targetName) == 0) { return &list->data[i]; } } return NULL; } // 将学生信息保存到文件 void saveToFile(struct seqList* list, char* fileName) { FILE* file = fopen(fileName, "w"); if (file == NULL) { printf("文件打开失败!\n"); return; } for (int i = 0; i < list->size; i++) { fprintf(file, "%lld %s %s %d\n", list->data[i].id, list->data[i].name, list->data[i].gender, list->data[i].age); } fclose(file); } // 销毁顺序表 void destroyList(struct seqList* list) { free(list->data); free(list); } int main() { struct seqList* list = createList(); // 模拟插入一些学生信息 struct student stu1 = { 1001, "张三", "男", 20 }; insertTail(list, stu1); struct student stu2 = { 1002, "李四", "女", 21 }; insertTail(list, stu2); struct student stu3 = { 1003, "王五", "男", 19 }; insertTail(list, stu3); // 打印所有学生信息 for (int i = 0; i < list->size; i++) { printf("%lld %s %s %d\n", list->data[i].id, list->data[i].name, list->data[i].gender, list->data[i].age); } // 测试插入功能 struct student newStu = { 1004, "赵六", "女", 22 }; insertAfterId(list, 1002, newStu); // 再次打印所有学生信息 printf("\n 插入后:\n"); for (int i = 0; i < list->size; i++) { printf("%lld %s %s %d\n", list->data[i].id, list->data[i].name, list->data[i].gender, list->data[i].age); } // 测试删除功能 deleteTail(list); // 再次打印所有学生信息 printf("\n 删除尾部后:\n"); for (int i = 0; i < list->size; i++) { printf("%lld %s %s %d\n", list->data[i].id, list->data[i].name, list->data[i].gender, list->data[i].age); } // 测试修改功能 struct student modifyStu = { 1002, "李四改", "女", 23 }; modifyById(list, 1002, modifyStu); // 再次打印所有学生信息 printf("\n 修改后:\n"); for (int i = 0; i < list->size; i++) { printf("%lld %s %s %d\n", list->data[i].id, list->data[i].name, list->data[i].gender, list->data[i].age); } // 测试查询功能 struct student* foundStu = queryById(list, 1003); if (foundStu!= NULL) { printf("\n 查到的学生信息:%lld %s %s %d\n", foundStu->id, foundStu->name, foundStu->gender, foundStu->age); } else { printf("未找到指定学号的学生!\n"); } // 保存到文件 saveToFile(list, "stuinfo.txt"); // 销毁顺序表 destroyList(list); return 0; } ``` [2024-11-01 02:41:20 | AI写代码神器 | 2323点数解答]

相关提问