c语言题,急求大神给我答案

c语言题,急求大神给我答案使用结构体表示一个学生的信息,包括学号,姓名,性别,生日,班级,每门课的成绩,并编写程序完成学生信息的录入,查询,信息列表(能按指定项目排序显示)的功能

简单写了一个输入及显示程序。

默认#define DEBUG 0,定义这个是为了调试用,免得每次都要输入数据,麻烦;想要调试,设DEBUG成1就好。

具体代码示例:

#include<stdio.h>
#include<string.h>
#include<malloc.h> 
#define LEN sizeof(struct student)
#define DEBUG 0
struct subject {
int math;//数字成绩 
int english;//英语成绩 
int chinese;//语文成绩 
int chemistry;//化学成绩 
int physics;//物理成绩 
};
struct student
{
  long int id;
  char name[20];
  char sex[2];
  long birthday;
  char grade[20];
  struct subject  report;
  struct student *next;
};

struct student *insertOneStudentMessage(struct student *header){
struct student *p = (struct student*)malloc(LEN);
scanf("%ld%s%s%ld%s%d%d%d%d%d",&p->id,p->name,p->sex,&p->birthday,p->grade,
&p->report.math,&p->report.english,&p->report.chinese,&p->report.chemistry,&p->report.physics);
p->next = header;
return p;
}
struct student *inputMoreStudentMessages(struct student *header){
int i,n = 0;
printf("请输入要录入的学生信息数:");
scanf("%d", &n);

for(i=0; i<n; i++){
printf("\n录入第%d条数据(学号,名字,性别,生日,班级,数学成绩,英文成绩,语文成绩,化学成绩,物理成绩):\n", i+1);
header = insertOneStudentMessage(header);
}
return header;
}
void queryById(struct student *header, long int id){
struct student *p = header;
while(p!= NULL){
if(p->id == id){
break;
}
p = p->next;
}
if(p == NULL){
printf("没有学号为%ld的学生信息。\n", id);
} else {
printf("查询学号为%ld的学生信息结果:\n", id);
printf("名字:%s\n", p->name);
printf("性别:%s\n", p->sex);
printf("生日:%ld\n", p->birthday);
printf("班级:%s\n", p->grade);
printf("数学成绩:%d\n", p->report.math);
printf("英文成绩:%d\n", p->report.english);
printf("语文成绩:%d\n", p->report.chinese);
printf("化学成绩:%d\n", p->report.chemistry);
printf("物理成绩:%d\n", p->report.physics);
}
}
int compareByType(struct student *a, struct student *b, int type){
switch(type){
case 0:
return (a->report.math < b->report.math);
case 1:
return (a->report.english < b->report.english);
case 2:
return (a->report.chinese < b->report.chinese);
case 3:
return (a->report.chemistry < b->report.chemistry);
case 4:
return (a->report.physics < b->report.physics);
}
return 0;
}
struct student *sortByClass(struct student *header, int type){
struct student *p;
struct student *pre;
struct student *next;
struct student *temp;
if(header == NULL){
return NULL;
}
temp = pre = p = header;
next = p->next;
while(next != NULL){
p = header;
pre = header;
while(p != next){
if(compareByType(next, p, type)){
//插入p前面
if(p == header){
temp->next = next->next;
next->next = header;
header = next;
next = temp;
break;
} else {
temp->next = next->next;
pre->next = next;
next->next = p;
next = temp;
break;
}
} else {
pre = p;
p = p->next;
}
}
temp = next;
next = next->next;
}
return header;
}
void printInfo(){
printf("0.退出程序\n");
printf("1.录入一个学生信息\n");
printf("2.录入多个学生信息\n");
printf("3.查询指定学号的学生信息\n");
printf("4.按数学成绩升序列出所有学生信息\n");
printf("5.按英文成绩升序列出所有学生信息\n");
printf("6.按语文成绩升序列出所有学生信息\n");
printf("7.按化学成绩升序列出所有学生信息\n");
printf("8.按物理成绩升序列出所有学生信息\n");
}
void printAll(struct student *header){
struct student *p = header;
printf("学号,名字,性别,生日,班级,数学,英文,语文,化学,物理\n");
while(p!=NULL){
printf("%ld %s %s %ld %s %3d %3d %3d %3d %3d\n",
p->id,p->name,p->sex,p->birthday,p->grade,
p->report.math,p->report.english,p->report.chinese,p->report.chemistry,p->report.physics);
p = p->next;
}
}
struct student * makeStudentMessageForDebug(struct student *header){
struct student message[] = {
{
12345670,"赵大","男",20101010,"物理1班",10,20,30,40,30 ,NULL
},
{
12345671,"钱二","男",20101011,"物理2班",9,21,32,12,55 ,NULL
},
{
12345672,"孙三","女",20101012,"物理3班",5,20,30,40,50 ,NULL
},
{
12345673,"李四","男",20101210,"物理1班",100,3,30,40,60 ,NULL
},
{
12345674,"张五","男",20131010,"物理4班",10,20,8,40,50 ,NULL
},
};
int n = sizeof(message)/sizeof(struct student);
int i;
struct student *pre,*p;

header = pre = p = (struct student*)malloc(LEN);
for(i=0;i<n;i++){
p->id = message[i].id;
memcpy(p->name, message[i].name, strlen(message[i].name)+1);
memcpy(p->sex, message[i].sex, strlen(message[i].sex)+1);
p->birthday = message[i].birthday;
memcpy(p->grade, message[i].grade, strlen(message[i].grade)+1);
p->report.math = message[i].report.math;
p->report.english = message[i].report.english;
p->report.chinese = message[i].report.chinese;
p->report.chemistry = message[i].report.chemistry;
p->report.physics = message[i].report.physics;
pre = p;
p = (struct student*)malloc(LEN);
pre->next = p;
}
pre->next = NULL;
return header;
}
int main()
{
long int id;
int index = 0;
int flag = 0;
struct student *header = NULL;
printInfo(); 
if(DEBUG){
header = makeStudentMessageForDebug(header);
}

while(flag == 0){
//system("cls");
printf("请输入序号进行相应操作:");
scanf("%d", &index);
switch(index){
case 0: 
flag = 1;
break;
case 1:
printf("请录入学生信息(学号,名字,性别,生日,班级,数学成绩,英文成绩,语文成绩,化学成绩,物理成绩):");
header = insertOneStudentMessage(header);
break;
case 2:
header = inputMoreStudentMessages(header);
break;
case 3:
printf("请输入要查询的学生学号:");
scanf("%ld", &id);
queryById(header, id);
break;
case 4:
header = sortByClass(header, 0);
printAll(header);
break;
case 5:
header = sortByClass(header, 1);
printAll(header);
break;
case 6:
header = sortByClass(header, 2);
printAll(header);
break;
case 7:
header = sortByClass(header, 3);
printAll(header);
break;
case 8:
header = sortByClass(header, 4);
printAll(header);
break;
}
}
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答