c语言编写学生信息采集表,假设收集到了一个班学生的所有成绩信息(不低于20人),要求用C语言编写一个简单的成绩管理系统...

05d51b6c7ce6b476a91ec36b746db557.png

代码已发,在附件,邮件名“代码”,附件Untitled2.c

如果有疑问欢迎追问。

代码如下:

#include

#include

#include

#include

#define min(A,B) (A

#define max(A,B) (A

typedef struct Student

{

long long int id;

char name[11];

int score[4];

double avg;

struct Student* next;

} Student;

void print(Student* stu)

{

printf("学号:%10lld 姓名:%10s 成绩:语文:%3d 数学:%3d 英语:%3d 计算机:%3d 平均分:%3.2lf\n",

stu->id,stu->name,stu->score[0],stu->score[1],stu->score[2],stu->score[3],stu->avg);

}

int main(void)

{

Student* head = 0;

int stucount=0;//数量

while(1)

{

printf("输入操作号:1:录入学生 2:浏览 3:查询 4:修改 5:排序 6:统计\n");

int quest;

scanf("%d",&quest);

scanf("%*[^\n]");

if(quest==1)

{

printf("录入学生:\n") ;

while(1)

{

printf("请输入学生学号(-1退出录入):\n");

long long int id;

scanf("%lld", &id);

if(id==-1)break;

Student* newStudent = (Student*)malloc(sizeof(Student));

newStudent->id=id;

printf("请输入学生名字:\n");

scanf("%10s", newStudent->name);

scanf("%*[^\n]");

printf("请输入学生语文成绩:\n");

scanf("%d",&(newStudent->score[0]));

printf("请输入学生数学成绩:\n");

scanf("%d",&(newStudent->score[1]));

printf("请输入学生英语成绩:\n");

scanf("%d",&(newStudent->score[2]));

printf("请输入学生计算机成绩:\n");

scanf("%d",&(newStudent->score[3]));

int sum=0;

for(int i=0; i<4; ++i)sum+=newStudent->score[i];

newStudent->avg = sum/4.0;

printf("学生已录入!平均分为:%lf\n",newStudent->avg);

//插入链表首,这样最新添加的显示在最上面,容易看见效果

newStudent->next=head;

head=newStudent;

++stucount;

}

}

else if(quest==2)

{

if(head==0)

printf("没有学生!\n");

else

{

printf("开始浏览学生:\n");

int st=0,en=min(st+10,stucount);

while(1)

{

printf("浏览学生:%d个到%d个学生\n",st+1,en);

Student* stu = head;

for(int i=0; i

{

stu=stu->next;

}

for(int i=st; i

{

print(stu);

stu=stu->next;

}

printf("输入操作号:1 向后翻页;2 向前翻页;-1 退出\n");

int squest;

scanf("%d",&squest);

scanf("%*[^\n]");

if(squest==1)

{

if(en!=stucount) st=en;

}

else if(squest==2)

{

st=max(0,st-10);

}

else if(squest==-1)break;

en=min(st+10,stucount);

}

}

}

else if(quest==3)

{

printf("开始查询学生信息:\n");

while(1)

{

printf("通过什么查询?1:学生id 2:学生名字 3:学生语文成绩 4:学生数学成绩 5:学生英语成绩 6:学生计算机成绩 7:平均分 -1 退出\n");

int squery,squery2;

scanf("%d", &squery);

if(squery==-1)break;

Student temp;

Student* newStudent = &temp;

if(squery==1)

{

printf("请输入学生id:\n");

scanf("%lld", &(newStudent->id));

}

else if(squery==2)

{

printf("请输入学生名字:\n");

scanf("%10s", newStudent->name);

scanf("%*[^\n]");

}

else if(squery==3)

{

printf("请输入学生语文成绩:\n");

scanf("%d",&(newStudent->score[0]));

}

else if(squery==4)

{

printf("请输入学生数学成绩:\n");

scanf("%d",&(newStudent->score[1]));

}

else if(squery==5)

{

printf("请输入学生英语成绩:\n");

scanf("%d",&(newStudent->score[2]));

}

else if(squery==6)

{

printf("请输入学生计算机成绩:\n");

scanf("%d",&(newStudent->score[3]));

}

else if(squery==7)

{

printf("请输入学生平均分:\n");

scanf("%lf",&(newStudent->avg));

}

if(squery>=3 && squery<=7)

{

printf("显示比此分数高还是低的学生?1:低 2:高\n");

scanf("%d",&squery2);

}

Student* stu = head;

int flag=0;

while(stu!=0)

{

if(squery==1)

{

if(newStudent->id==stu->id)

{

print(stu);

flag=1;

}

}

else if(squery==2)

{

if(strcmp(newStudent->name,stu->name)==0)

{

print(stu);

flag=1;

}

}

else if(squery==7)

{

if((newStudent->avg!=stu->avg) && ((newStudent->avg>stu->avg) ^ (squery2==2)))

{

print(stu);

flag=1;

}

}

else if(squery>2 && squery<7)

{

if((newStudent->score[squery-3]!=stu->score[squery-3]) && ((newStudent->score[squery-3]>stu->score[squery-3]) ^ (squery2==2)))

{

print(stu);

flag=1;

}

}

stu=stu->next;

}

if(flag==0)

{

printf("没有查到学生!\n");

continue;

}

}

}

else if(quest==4)

{

printf("开始修改学生信息:\n");

while(1)

{

printf("请输入学生学号(-1退出修改):\n");

long long int id;

scanf("%lld", &id);

if(id==-1)break;

Student* newStudent = head;

Student* lststu = 0;

while(newStudent!=0 && newStudent->id!=id)

{

lststu=newStudent;

newStudent=newStudent->next;

}

if(newStudent==0)

{

printf("没有查到学生!\n");

continue;

}

printf("请输入操作号:1:修改学生名字 2:修改学生语文成绩 3:修改学生数学成绩 4:修改学生英语成绩 5:修改学生计算机成绩 6:删除学生\n");

int squery;

scanf("%d", &squery);

if(squery==1)

{

printf("请输入学生名字:\n");

scanf("%10s", newStudent->name);

scanf("%*[^\n]");

}

else if(squery==2)

{

printf("请输入学生语文成绩:\n");

scanf("%d",&(newStudent->score[0]));

}

else if(squery==3)

{

printf("请输入学生数学成绩:\n");

scanf("%d",&(newStudent->score[1]));

}

else if(squery==4)

{

printf("请输入学生英语成绩:\n");

scanf("%d",&(newStudent->score[2]));

}

else if(squery==5)

{

printf("请输入学生计算机成绩:\n");

scanf("%d",&(newStudent->score[3]));

}

else if(squery==6)

{

stucount--;

if(lststu!=0)

lststu -> next = newStudent -> next;

else

head = newStudent -> next;

printf("已删除学生!\n");

}

if(squery!=6)

{

int sum=0;

for(int i=0; i<4; ++i)sum+=newStudent->score[i];

newStudent->avg = sum/4.0;

printf("学生已修改!他的平均分为:%lf\n",newStudent->avg);

}

}

}

else if(quest==5)

{

if(head==0)

printf("没有学生!\n");

else

{

printf("对学生按什么排序?:1:学生号 2:名字 3:语文成绩 4:数学成绩 5:修改学生英语成绩 5:计算机成绩 6:平均分\n");

int squery;

scanf("%d", &squery);

printf("升序还是降序? 1:升序 2:降序\n");

int squery2;

scanf("%d", &squery2);

int flag=1;

Student* stu = head;

Student* lststu = 0;

while(flag==1)

{

flag=0;

while(stu->next!=0)

{

int swflag=0;

if(squery==0)

{

if((stu->next->id > stu->id) ^ (squery2==1))swflag=1;

}

else if(squery==1)

{

if((strcmp(stu->next->name,stu->name)>0) ^ (squery2==1))swflag=1;

}

else if(squery==6)

{

if((stu->next->avg > stu->avg) ^ (squery2==1))swflag=1;

}

if(swflag==1)

{

flag=1;

if(lststu==0) head=stu->next;

else lststu->next=stu->next;

Student* temp = stu->next->next;

stu->next->next=stu;

stu->next=temp;

}

lststu=stu;

stu=stu->next;

}

}

printf("已排序!\n");

}

}

else if(quest==6)

{

double totscore[4]= {0};

double sum=0;

Student* stu=head;

while(stu!=0)

{

for(int i=0; i<4; ++i)

{

totscore[i]+=stu->score[i];

sum+=stu->avg;

}

}

for(int i=0; i<4; ++i) totscore[i]=totscore[i]/4.0;

sum=sum/4.0;

printf("统计:学生人数:%d 语文平均分:%lf 数学平均分:%lf 英语平均分:%lf 计算机平均分:%lf 总平均分:%lf\n",stucount,totscore[0],totscore[1],totscore[2],totscore[3],sum);

}

else if(quest==-1)

break;

}

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值