顺序表实现学生管理系统(参照顺序表技能)写出菜单界面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");
}