帮我用C语言实现下面这个功能: 最多可以输入20名同学的信息,信息内容包括:学号,姓名,出生年月日,出生地,联系电话;输入时,如果学号重复,提示错误; 输入数据后,按照出生年月日,进行排序;如果生日相同,按姓名字符先后排序; 经排序后的学生信息,按照:学号,姓名,出生年月日,出生地,联系电话,输出。
时间: 2023-03-28 14:00:27 浏览: 97
好的,我可以帮您实现这个功能。以下是C语言代码:
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT 20
struct Student {
char id[10];
char name[20];
char birthdate[20];
char birthplace[20];
char phone[20];
};
int main() {
struct Student students[MAX_STUDENT];
int n = ;
// 输入学生信息
while (n < MAX_STUDENT) {
printf("请输入第%d个学生的信息:\n", n+1);
printf("学号:");
scanf("%s", students[n].id);
// 检查学号是否重复
int i;
for (i = ; i < n; i++) {
if (strcmp(students[i].id, students[n].id) == ) {
printf("学号重复,请重新输入!\n");
break;
}
}
if (i < n) {
continue;
}
printf("姓名:");
scanf("%s", students[n].name);
printf("出生年月日:");
scanf("%s", students[n].birthdate);
printf("出生地:");
scanf("%s", students[n].birthplace);
printf("联系电话:");
scanf("%s", students[n].phone);
n++;
}
// 按出生年月日和姓名排序
int i, j;
for (i = ; i < n-1; i++) {
for (j = i+1; j < n; j++) {
if (strcmp(students[i].birthdate, students[j].birthdate) > ||
(strcmp(students[i].birthdate, students[j].birthdate) == &&
strcmp(students[i].name, students[j].name) > )) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
// 输出学生信息
printf("学号\t姓名\t出生年月日\t出生地\t联系电话\n");
for (i = ; i < n; i++) {
printf("%s\t%s\t%s\t%s\t%s\n", students[i].id, students[i].name,
students[i].birthdate, students[i].birthplace, students[i].phone);
}
return ;
}
阅读全文