基础项目: 编写主函数,通过菜单控制及调用相应的子函数完成以下功能: (1)初始化顺序表L(学生信息从文件读入)。 (2)输出顺序表L(要求一名学生的信息占一行)。 (3)输出顺序表L的长度。 (4)输出顺序表L的第i个学生的信息,i的值可从键盘输入。 (5)输出学生x的位置,x的关键字值(学号或姓名)可从键盘输入。 (6)在第i个元素位置上插入学生x的信息,i和x的信息可从键盘输入。 (7)删除L的第i个元素,i的值可从键盘输入。 (8)删除L中学生x的信息,x的关键字值(学号或姓名)可从键盘输入。 3.拓展项目: <1>将顺序表的元素按“班级”信息分别存储到一个顺序表中。 <2>将顺序表的元素按“班级”信息有序输出,同一班级的按姓名有序输出。
时间: 2023-05-28 18:06:48 浏览: 66
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20 // 学号、姓名、班级的最大长度
#define MAX_STU 100 // 最多存储的学生数目
typedef struct {
char id[MAX_LEN]; // 学号
char name[MAX_LEN]; // 姓名
char grade[MAX_LEN]; // 年级
char major[MAX_LEN]; // 专业
char classno[MAX_LEN]; // 班级
} Student;
typedef struct {
Student data[MAX_STU]; // 存放学生信息的数组
int length; // 学生信息的数目
} SeqList;
// 初始化顺序表
void InitList(SeqList *L) {
L->length = 0;
}
// 从文件中读入学生信息,存入顺序表
void ReadFromFile(SeqList *L, char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Cannot open file %s\n", filename);
exit(1);
}
while (fscanf(fp, "%s %s %s %s %s", L->data[L->length].id, L->data[L->length].name, L->data[L->length].grade, L->data[L->length].major, L->data[L->length].classno) != EOF) {
L->length++;
}
fclose(fp);
}
// 输出顺序表中的所有学生信息
void PrintList(SeqList *L) {
int i;
for (i = 0; i < L->length; i++) {
printf("%s %s %s %s %s\n", L->data[i].id, L->data[i].name, L->data[i].grade, L->data[i].major, L->data[i].classno);
}
}
// 输出顺序表的长度
void PrintLength(SeqList *L) {
printf("The length of the list is %d\n", L->length);
}
// 输出顺序表中第i个学生的信息
void PrintStudent(SeqList *L, int i) {
if (i < 1 || i > L->length) {
printf("Invalid index\n");
return;
}
printf("%s %s %s %s %s\n", L->data[i - 1].id, L->data[i - 1].name, L->data[i - 1].grade, L->data[i - 1].major, L->data[i - 1].classno);
}
// 输出学生x的位置
void PrintPosition(SeqList *L, char *x) {
int i;
for (i = 0; i < L->length; i++) {
if (strcmp(L->data[i].id, x) == 0 || strcmp(L->data[i].name, x) == 0) {
printf("%d\n", i + 1);
return;
}
}
printf("Not found\n");
}
// 在第i个元素位置上插入学生x的信息
void InsertStudent(SeqList *L, int i, Student x) {
int j;
if (i < 1 || i > L->length + 1) {
printf("Invalid index\n");
return;
}
if (L->length >= MAX_STU) {
printf("List is full\n");
return;
}
for (j = L->length; j >= i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = x;
L->length++;
}
// 删除L的第i个元素
void DeleteStudent(SeqList *L, int i) {
int j;
if (i < 1 || i > L->length) {
printf("Invalid index\n");
return;
}
for (j = i; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
}
// 删除L中学生x的信息
void DeleteStudentByKey(SeqList *L, char *key) {
int i, j;
for (i = 0; i < L->length; i++) {
if (strcmp(L->data[i].id, key) == 0 || strcmp(L->data[i].name, key) == 0) {
for (j = i + 1; j < L->length; j++) {
L->data[j - 1] = L->data[j];
}
L->length--;
return;
}
}
printf("Not found\n");
}
int main() {
SeqList L;
int choice, i;
char filename[MAX_LEN], x[MAX_LEN];
Student new_stu;
InitList(&L);
printf("Input the filename to load data: ");
scanf("%s", filename);
ReadFromFile(&L, filename);
while (1) {
printf("1. Print List\n");
printf("2. Print Length\n");
printf("3. Print Student\n");
printf("4. Print Position\n");
printf("5. Insert Student\n");
printf("6. Delete Student\n");
printf("7. Delete Student by Key\n");
printf("0. Exit\n");
printf("Input your choice: ");
scanf("%d", &choice);
switch (choice) {
case 0:
return 0;
case 1:
PrintList(&L);
break;
case 2:
PrintLength(&L);
break;
case 3:
printf("Input the index of the student: ");
scanf("%d", &i);
PrintStudent(&L, i);
break;
case 4:
printf("Input the key of the student: ");
scanf("%s", x);
PrintPosition(&L, x);
break;
case 5:
printf("Input the index to insert: ");
scanf("%d", &i);
printf("Input the student's id, name, grade, major, classno: ");
scanf("%s %s %s %s %s", new_stu.id, new_stu.name, new_stu.grade, new_stu.major, new_stu.classno);
InsertStudent(&L, i, new_stu);
break;
case 6:
printf("Input the index to delete: ");
scanf("%d", &i);
DeleteStudent(&L, i);
break;
case 7:
printf("Input the key of the student: ");
scanf("%s", x);
DeleteStudentByKey(&L, x);
break;
default:
printf("Invalid choice\n");
break;
}
}
return 0;
}
阅读全文