简单c语言,不用链表。学生信息管理系统的删除功能,输入学号,删除对应学号在其他结构体中的信息,在输入学生学号时,若长度不为八位,让其重新输入,若没有找到该学号则给出提示。结构体为/*构造学生结构体数组*/ typedef struct Student { char sname[50];//学生姓名 char snum[20]; //学生学号 char ssex[10]; //学生性别 char sage[4]; //学生年龄 char sid[20]; //学生身份证号 char smajor[50]; //学生专业 }student[N]; /*构造学生选课结构体数组*/ typedef struct Lesson { char snum[20];//选课的学生学号 char tid[20];//选修课程的开课号 char grade[5];//选修课程的成绩 }lesson[N]; 如输入学号,根据学号找到lesson中相同的snum,删除lesson中的相关信息,然后删除student中的信息,删除后会打出删除的相关信息,如已删除20200102 0103 93.0
时间: 2024-03-24 10:36:37 浏览: 72
C语言使用链表实现学生信息管理系统
5星 · 资源好评率100%
好的,这是一个比较具体的问题,我可以帮您解答。
首先,我们需要先定义结构体数组,包括学生信息和选课信息:
```c
#define N 100 // 定义学生最大数量
/* 学生信息结构体 */
typedef struct Student {
char sname[50]; // 学生姓名
char snum[20]; // 学生学号
char ssex[10]; // 学生性别
char sage[4]; // 学生年龄
char sid[20]; // 学生身份证号
char smajor[50]; // 学生专业
} student[N];
/* 学生选课信息结构体 */
typedef struct Lesson {
char snum[20]; // 选课的学生学号
char tid[20]; // 选修课程的开课号
char grade[5]; // 选修课程的成绩
} lesson[N];
```
接下来,我们需要实现删除学生信息的功能。首先,我们需要输入学生的学号,并判断输入是否合法(即长度是否为8位):
```c
char del_num[20];
int flag = 0; // 标记是否找到了该学号对应的学生信息
/* 输入要删除的学生学号 */
do {
printf("请输入要删除的学生学号(8位):");
scanf("%s", del_num);
if (strlen(del_num) != 8) {
printf("学号长度不合法,请重新输入!\n");
}
} while (strlen(del_num) != 8);
```
然后,我们需要遍历学生信息结构体数组,找到要删除的学生信息,并将其删除:
```c
/* 遍历学生信息结构体数组 */
for (int i = 0; i < N; i++) {
if (strcmp(student[i].snum, del_num) == 0) { // 找到了要删除的学生信息
printf("已删除 %s\t%s\t%s\t%s\t%s\t%s\n", student[i].snum, student[i].sname, student[i].ssex, student[i].sage, student[i].sid, student[i].smajor);
for (int j = 0; j < N; j++) { // 遍历学生选课信息结构体数组
if (strcmp(lesson[j].snum, del_num) == 0) { // 找到了该学生的选课信息
printf("已删除 %s\t%s\t%s\n", lesson[j].snum, lesson[j].tid, lesson[j].grade);
/* 将该选课信息删除 */
for (int k = j; k < N - 1; k++) {
strcpy(lesson[k].snum, lesson[k + 1].snum);
strcpy(lesson[k].tid, lesson[k + 1].tid);
strcpy(lesson[k].grade, lesson[k + 1].grade);
}
strcpy(lesson[N - 1].snum, "");
strcpy(lesson[N - 1].tid, "");
strcpy(lesson[N - 1].grade, "");
j--; // 由于删除了一条选课信息,所以需要将j减1
}
}
/* 将该学生信息删除 */
for (int j = i; j < N - 1; j++) {
strcpy(student[j].sname, student[j + 1].sname);
strcpy(student[j].snum, student[j + 1].snum);
strcpy(student[j].ssex, student[j + 1].ssex);
strcpy(student[j].sage, student[j + 1].sage);
strcpy(student[j].sid, student[j + 1].sid);
strcpy(student[j].smajor, student[j + 1].smajor);
}
strcpy(student[N - 1].sname, "");
strcpy(student[N - 1].snum, "");
strcpy(student[N - 1].ssex, "");
strcpy(student[N - 1].sage, "");
strcpy(student[N - 1].sid, "");
strcpy(student[N - 1].smajor, "");
flag = 1; // 标记已经找到了该学号对应的学生信息
break;
}
}
if (!flag) {
printf("未找到该学号对应的学生信息!\n");
}
```
最后,我们需要在程序结束前释放所有动态分配的内存:
```c
/* 释放动态分配的内存 */
free(student);
free(lesson);
```
完整代码如下:
阅读全文