1 #include <stdio.h>
2 #include <string.h>
3
4 struct student
5 {
6 char name[32];
7 int id;
8 };
9
10 int input(struct student *p);
11 void output(struct student *p, int n);
12 int del(struct student *p, int n);
13 void amend(struct student *p, int n);
14 void find(struct student *p, int n);
15
16 int main(int argc, const char *argv[])
17 {
18 struct student group[100];
19 int num = input(group);
20
21 printf("\n输出的学生信息为:\n");
22 output(group, num);
23
24 num = del(group, num); // 更新学生数量
25 printf("\n删除后的学生信息为:\n");
26 output(group, num);
27
28 // 修改学生ID
29 amend(group, num);
30 output(group, num);
31
32 // 查找学生信息
33 find(group, num);
34
35 return 0;
36 }
37
38 // 录入学生信息
39 int input(struct student *p)
40 {
41 int n = 0;
42 printf("请输入要录入多少个学生:");
43 scanf("%d", &n);
44 for (int i = 0; i < n; i++)
45 {
46 printf("第%d个学生的姓名:", i + 1);
47 scanf("%s", (p + i)->name);
48 printf("第%d个学生id号为:", i + 1);
49 scanf("%d", &((p + i)->id));
50 }
51 return n;
52 }
53
54 // 输出学生信息
55 void output(struct student *p, int n)
56 {
57 for (int i = 0; i < n; i++)
58 {
59 printf("第%d个学生的姓名:%s\n", i + 1, (p + i)->name);
60 printf("第%d个学生的ID:%d\n", i + 1, (p + i)->id);
61 }
62 }
63
64 // 删除某位学生信息
65 int del(struct student *p, int n)
66 {
67 printf("请输入要删除的学生序数:");
68 int indexToDelete = 0;
69 scanf("%d", &indexToDelete);
70
71 if (indexToDelete < 1 || indexToDelete > n)
72 {
73 printf("输入无效!\n");
74 return n; // 如果输入无效,直接返回当前学生数量
75 }
76
77 // 将后面的学生信息向前移动一个位置
78 for (int i = indexToDelete - 1; i < n - 1; i++)
79 {
80 strcpy((p + i)->name, (p + i + 1)->name);
81 (p + i)->id = (p + i + 1)->id;
82 }
83
84 // 减少学生数量
85 return n - 1;
86 }
87
88 // 修改学生信息
89 void amend(struct student *p, int n)
90 {
91 printf("请输入要修改的学生序数:");
92 int indexToModify = 0;
93 scanf("%d", &indexToModify);
94
95 if (indexToModify < 1 || indexToModify > n)
96 {
97 printf("输入无效!\n");
98 return; // 输入无效,直接返回
99 }
00
01 printf("请输入新的ID:");
02 int newId = 0;
03 scanf("%d", &newId);
04
05 // 修改指定学生的ID
06 (p + indexToModify - 1)->id = newId;
07 }
08
09 // 查找学生信息
10 void find(struct student *p, int n)
11 {
12 printf("请输入要查找的学生姓名:");
13 char targetName[32];
14 scanf("%s", targetName);
15
16 int found = 0;
17 for (int i = 0; i < n; i++)
18 {
19 if (strcmp((p + i)->name, targetName) == 0)
20 {
21 printf("找到了学生信息:\n");
22 printf("姓名:%s\n", (p + i)->name);
23 printf("ID:%d\n", (p + i)->id);
24 found = 1;
25 break;
26 }
27 }
28
29 if (!found)
30 {
31 printf("未找到该学生信息。\n");
32 }
33 }