500字范文,内容丰富有趣,生活中的好帮手!
500字范文 > 学生成绩统计c语言课程设计 学生成绩管理系统-C语言课程设计

学生成绩统计c语言课程设计 学生成绩管理系统-C语言课程设计

时间:2023-10-20 10:45:52

相关推荐

学生成绩统计c语言课程设计 学生成绩管理系统-C语言课程设计

记一次课程设计作业学生成绩管理系统#include

#include

#include

#include

/*

学生成绩管理系统介绍

C语言课程设计60936

1.支持将数据保存到文件并从文件中读取已有数据

2.支持添加、删改数据

3.支持按学号或姓名查询、删除、修改数据

4.支持简单统计,包括不及格人数、最高分、最低分

5.支持按总分排序整理数据

*/

structstudent

{

charnum[10];

charname[20];

intcgrade;

intsxgrade;

intyygrade;

inttotal;

floatave;

};

structnode

{

structstudentdata;

structnode*next;

}*head,*last;

intAdd(inti)//执行增加学生记录操作

{

structnode*tmp;

intloop=1;

while(loop)

{

printf("请按以下格式输入数据:\n");

tmp=(structnode*)malloc(sizeof(structnode));

printf("学号姓名C语言成绩数学成绩英语成绩\n");

scanf("%s%s%d%d%d",tmp->data.num,tmp->data.name,&tmp->data.cgrade,&tmp->data.sxgrade,&tmp->data.yygrade);

tmp->data.total=tmp->data.cgrade+tmp->data.sxgrade+tmp->data.yygrade;

tmp->data.ave=tmp->data.total/3.0;

if(last!=NULL)

{

last->next=tmp;

last=last->next;

}

else

{

head=last=tmp;

}

last->next=NULL;

i++;

printf("添加成功!输入1继续录入,输入0终止录入");

intt;

scanf("%d",&t);

if(t==0)

loop=0;

}

returni;

}

intDel(inti)//执行删除学生记录操作

{

chartmpname[20];

chartmpnum[10];

intfind=0,way;

structnode*tmp=head,*tmpbak=head;

printf("请选择删除依据:1.学号2.姓名\n");

scanf("%d",&way);

switch(way)

{

case1:printf("请输入学号:");

scanf("%s",tmpnum);

while((tmp!=NULL)&&(!find))

{

if(!strcmp(tmpnum,tmp->data.num))

{

find=1;

break;

}

tmpbak=tmp;

tmp=tmp->next;

}

if(!find)

{

printf("抱歉,学号%s未查到相关数据!\n",tmpnum);

}

else

{

if(tmpbak==tmp)

{

head=head->next;

printf("删除成功!\n");

i--;

returni;

}

else

{

tmpbak->next=tmp->next;

printf("删除成功!\n");

i--;

returni;

}

}

case2:printf("请输入姓名:");

scanf("%s",tmpname);

while((tmp!=NULL)&&(!find))

{

if(!strcmp(tmpname,tmp->data.num))

{

find=1;

break;

}

tmpbak=tmp;

tmp=tmp->next;

}

if(!find)

{

printf("抱歉,姓名%s未查到相关数据!\n",tmpname);

}

else

{

if(tmpbak==tmp)

{

head=head->next;

printf("删除成功!\n");

i--;

returni;

}

else

{

tmpbak->next=tmp->next;

printf("删除成功!\n");

i--;

returni;

}

}

default:printf("选择错误,查询失败!\n");

}

}

voidEdit(structnode*tmp)//执行修改学生记录操作

{

printf("请输入修改后的信息:\n");

printf("学号姓名C语言成绩数学成绩英语成绩\n");

scanf("%s%s%d%d%d",tmp->data.num,tmp->data.name,&tmp->data.cgrade,&tmp->data.sxgrade,&tmp->data.yygrade);

tmp->data.total=tmp->data.cgrade+tmp->data.sxgrade+tmp->data.yygrade;

tmp->data.ave=tmp->data.total/3.0;

printf("修改成功!\n");

printf("*************************************\n");

}

voidQuery()//执行查询学生记录操作

{

chartmpname[20];

chartmpnum[10];

intfind=0,way,change=0;

structnode*tmp=head;

printf("请选择查询方式:1.学号2.姓名\n");

scanf("%d",&way);

switch(way)

{

case1:printf("请输入学号:");

scanf("%s",tmpnum);

while((tmp!=NULL)&&(!find))

{

if(!strcmp(tmpnum,tmp->data.num))

{

find=1;

printf("找到以下数据!\n");

printf("学号姓名C语言成绩数学成绩英语成绩总分平均分\n");

printf("%s%s%d%d%d%d%.2f\n",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);

printf("*************************************\n");

printf("是否修改数据?输入1修改,输入0取消");

scanf("%d",&change);

if(change)

Edit(tmp);

}

tmp=tmp->next;

}

if(!find)

{

printf("抱歉,学号%s未查到相关数据!\n",tmpnum);

}

break;

case2:printf("请输入姓名:");

scanf("%s",tmpname);

while((tmp!=NULL)&&(!find))

{

if(!strcmp(tmpname,tmp->data.name))

{

find=1;

printf("找到以下数据!\n");

printf("学号姓名C语言成绩数学成绩英语成绩总分平均分\n");

printf("%s%s%d%d%d%d%.2f\n",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);

printf("*************************************\n");

printf("是否修改数据?输入1修改,输入0取消");

scanf("%d",&change);

if(change)

Edit(tmp);

}

tmp=tmp->next;

}

if(!find)

{

printf("抱歉,姓名%s未查到相关数据!\n",tmpname);

}

break;

default:printf("选择错误,查询失败!\n");

}

}

voidTongji()//执行统计学生记录操作

{

structnode*tmp=head;

intcbjg=0,sxbjg=0,yybjg=0,avebjg=0,cmax=0,sxmax=0,yymax=0,avemax=0,cmin=100,sxmin=100,yymin=100,avemin=100;

printf("正在统计数据,请稍候...\n");

while(tmp!=NULL)

{

if(tmp->data.cgrade<60)

cbjg++;

if(tmp->data.cgrade>cmax)

cmax=tmp->data.cgrade;

if(tmp->data.cgrade

cmin=tmp->data.cgrade;

if(tmp->data.sxgrade<60)

sxbjg++;

if(tmp->data.sxgrade>sxmax)

sxmax=tmp->data.sxgrade;

if(tmp->data.sxgrade

sxmin=tmp->data.sxgrade;

if(tmp->data.yygrade<60)

yybjg++;

if(tmp->data.yygrade>yymax)

yymax=tmp->data.yygrade;

if(tmp->data.yygrade

yymin=tmp->data.yygrade;

if(tmp->data.ave<60)

avebjg++;

if(tmp->data.ave>avemax)

avemax=tmp->data.ave;

if(tmp->data.ave

avemin=tmp->data.ave;

tmp=tmp->next;

}

printf("****************************\n统计完成,数据如下:\n");

printf("C语言不及格人数:%d最高分:%d最低分:%d\n",cbjg,cmax,cmin);

printf("数学不及格人数:%d最高分:%d最低分:%d\n",sxbjg,sxmax,sxmin);

printf("英语不及格人数:%d最高分:%d最低分:%d\n",yybjg,yymax,yymin);

printf("平均分不及格人数:%d最高分:%d最低分:%d\n",avebjg,avemax,avemin);

printf("**********************************\n");

}

voidSort(intn)//执行按降序进行排列学生记录的操作

{

inti,j;

structnode*tmp=head,*tmpbak=head->next,*bak;

bak=(structnode*)malloc(sizeof(structnode));

for(i=0;i

{

for(j=0;i+j

{

if(tmpbak->data.total>tmp->data.total)

{

bak->data=tmp->data;

tmp->data=tmpbak->data;

tmpbak->data=bak->data;

}

tmp=tmp->next;

tmpbak=tmpbak->next;

}

tmp=head;

tmpbak=head->next;

}

printf("排序完成!\n");

}

intSave()//执行存盘操作stuinfo.dat

{

if(!head)return0;

FILE*fp=fopen("stuinfo.dat","wb");

inti=0;

while(head)

{

fwrite(&head->data,sizeof(student),1,fp);

i++;

head=head->next;

}

fclose(fp);

returni;

}

intload()//从文件stuinfo.dat中载入数据

{

FILE*fp=fopen("stuinfo.dat","rb");

if(!fp)

{

printf("Cannotopenthefile!\n");

return0;

}

structnode*tmp;

fseek(fp,0,SEEK_END);

longend=ftell(fp);

fseek(fp,0,SEEK_SET);

inti=0;

if(ftell(fp)==end)

{

printf("无记录!\n");

return0;

}

while(ftell(fp)!=end)

{

tmp=(structnode*)malloc(sizeof(structnode));

tmp->next=NULL;

fread(&tmp->data,sizeof(structstudent),1,fp);

i++;

if(last!=NULL)

{

last->next=tmp;

last=last->next;

}

else

{

head=last=tmp;

}

last->next=NULL;

}

fclose(fp);

returni;

}

voidDisplay()//执行将学生记录以表格形式打印输出至屏幕的操作

{

structnode*tmp=head;

printf("学号姓名C语言成绩数学成绩英语成绩总分平均分\n");

while(tmp!=NULL)

{

printf("%s%s%d%d%d%d%.2f",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);

tmp=tmp->next;

printf("\n");

}

}

voidWrong()//给出按键错误提示

{

printf("输入错误,请重新输入!\n");

}

intQuit()//存盘且退出

{

Save();

return0;

}

intMenu()//操作选单

{

inti;

printf("========================================================\n");

printf("欢迎使用学生成绩管理系统!\n");

printf("0:存盘并退出\n");

printf("1:增加学生记录\n");

printf("2:删除学生记录\n");

printf("3:查询/修改学生记录\n");

printf("4:统计学生记录\n");

printf("5:按降序进行排列学生记录\n");

printf("6:将学生记录以表格形式打印输出至屏幕\n");

printf("========================================================\n");

printf("请选择你需要的操作:");

scanf("%d",&i);

printf("\n");

returni;

}

voidmain()

{

inti,choice,loop=1;

i=load();

printf("从stuinfo.dat导入了%d条数据\n\n",i);

while(loop)

{

choice=Menu();

switch(choice)

{

case0:loop=Quit();break;

case1:i=Add(i);break;

case2:i=Del(i);break;

case3:Query();break;

case4:Tongji();break;

case5:Sort(i);break;

case6:printf("共有%d条数据!\n",i);Display();break;

default:Wrong();

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。