数据结构/7/2/学生管理系统

 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 }
                                                                                              
                                                                                              
                                                                                              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值