功能4:该函数实现的是对已经存在于系统种的同学的信息进行删除操作,具体想法是学生人数num--,后面所有人的信息前移一个位置,实现信息的覆盖*/ void Delete() { int i, j,flag = -1; char op[2],information[maxsize]; setInfo("请输入:<1>按学号删除<2>按姓名删除", op); if (op[0] == '1') { setInfo("请输入学号", information); for (i = 0; i < num; i++) { if (strcmp(Students[i].Student_ID, information) == 0) { flag = 1; for (j = i + 1; j < num; j++) { copy(&Students[i], &Students[j]); } } } } else { setInfo("请输入姓名", information); for (i = 0; i < num; i++) { if (strcmp(Students[i].Name, information) == 0) { flag = 1; for (j = i + 1; j < num; j++) { copy(&Students[i], &Students[j]); } } } } if (flag == -1) { printf("查无此信息!按回车键返回\n"); wait_for_Enter(); return ; } num--;//数据减少,容量相应减少 printf("删除完成!按回车键返回\n"); wait_for_Enter(); } 请完善此删除功能,其查找学生姓名准备进行删除功能时,可以查找重名的情况,如果重名,则输入学号进一步确认,又因为每一位同学的数据不唯一,请再增加一个功能,使我们可以选择该学生某一天的考勤数据进行删除
时间: 2024-03-02 21:49:24 浏览: 40
好的,根据您的要求,我对该删除功能进行了完善,具体代码如下:
```
void Delete() {
int i, j, flag = -1;
char op[2], information[maxsize], confirm[maxsize];
setInfo("请输入:<1>按学号删除<2>按姓名删除", op);
if (op[0] == '1') {
setInfo("请输入学号", information);
for (i = 0; i < num; i++) {
if (strcmp(Students[i].Student_ID, information) == 0) {
flag = 1;
for (j = i + 1; j < num; j++) {
copy(&Students[i], &Students[j]);
}
}
}
} else {
setInfo("请输入姓名", information);
int cnt = 0, idx[maxsize];
for (i = 0; i < num; i++) {
if (strcmp(Students[i].Name, information) == 0) {
idx[cnt++] = i;
flag = 1;
}
}
if (cnt > 1) {
printf("查找到重名同学,请输入学号进行确认:");
scanf("%s", confirm);
int k;
for (k = 0; k < cnt; k++) {
if (strcmp(Students[idx[k]].Student_ID, confirm) == 0) {
i = idx[k];
for (j = i + 1; j < num; j++) {
copy(&Students[i], &Students[j]);
}
break;
}
}
if (k == cnt) {
printf("查无此信息!按回车键返回\n");
wait_for_Enter();
return;
}
} else {
i = idx[0];
for (j = i + 1; j < num; j++) {
copy(&Students[i], &Students[j]);
}
}
}
if (flag == -1) {
printf("查无此信息!按回车键返回\n");
wait_for_Enter();
return ;
}
num--;
printf("请选择删除该学生某一天的考勤数据:\n");
for (i = 0; i < 7; i++) {
printf("<%d> %s\n", i+1, week[i]);
}
int option;
scanf("%d", &option);
if (option < 1 || option > 7) {
printf("输入有误!按回车键返回\n");
wait_for_Enter();
return;
}
for (i = 0; i < num; i++) {
deleteAttendance(&Students[i].attendance[option-1]);
}
printf("删除完成!按回车键返回\n");
wait_for_Enter();
}
```
在原有代码的基础上,我增加了一个确认学号的步骤,以解决重名同学的问题。另外,我还增加了一个选择考勤日期进行删除的功能,可以选择删除该学生某一天的考勤数据。具体实现是通过 `deleteAttendance` 函数删除对应的考勤数据,该函数可以根据需要自行实现。
阅读全文