c语言课程设计_学生成绩管理系统3课程设计的内容:1、每一条记录包括一个学生的学号、姓名、3门课成绩、平均成绩。2、输入功能:可以一次完成若干条记录的输入。3、显示功能:完成全部学生记录的显示。4、查找功能:完成按姓名查找学生记录,并显示。5、排序功能:按学生平均成绩进行排序。6、插入功能:按平均成绩高低插入一条学生记录。7、将学生记录存在文件score中。8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!课程设计的要求:1、用C语言实现系统;2、利用结构体数组实现学生成绩的数据结构设计;3、系统具有增加,查询,插入,排序等基本功能;4、系统的各个功能模块要求用函数的形式实现;5、完成设计任务并书写课程设计报告。6、将学生成绩信息存在文件中。#includedos.h/*暂停函数*/#includestdio.h/*I/O函数*/#includestdlib.h/*其它说明*/#includestring.h/*字符串操作函数*/#defineM1000intN=0;/*记录已经存在的记录条数*/intH=0;structstudent/*定义数据结构*/{charnumber[8];charname[16];floatscore[3];floataverage;}stud[M],temp;/*以下是函数声明*/voidload(void);/*读入记录*/voidinorder(structstudentstud[]);/*排列记录*/voidinsert(structstudentstud[]);/*插入记录*/voidsave(structstudentstud[]);/*保存记录*/voidprint(structstudentstud[]);/*显示记录*/voidsearch(structstudentstud[]);/*查找记录*/voidenter(structstudentstud[]);/*输入记录*/voiddel(void);/*删除记录*/voidchange(void);/*改变记录*/voidquit(void);/*退出系统*/intflag(structstudentstud[]);/*返回值为0或1*/intmenu(void);/*菜单*/main()/*主函数*/{/*以下printf语句为打印欢迎界面语句*/printf(\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t!!!!!\n);printf(wweeeeeeelcccccccooooommmmmmmmmeeeeeee!!!!\n);printf(!!!\n);printf(!!\n);printf(!\n);printf(wweeeeeeellllllcccccccooooommmeeeeeee\n);printf(\t\t\t\t\t\t\t\t\t\b0);sleep(1);printf(\n\n\n\n\n\t\t\t\t\t\t\t\t-----pan);sleep(1);load();/*调用读入记录函数*/for(;;)/*无限循环*/{switch(menu())/*调用主菜单函数,返回值整数作开关语句的条件*/{case1:enter(stud);break;/*输入记录*/case2:print(stud);break;/*显示要看的一页的记录*/case3:search(stud);break;/*查找记录*/case4:inorder(stud);break;/*排序*/case5:insert(stud);break;/*插入记录*/case6:save(stud);break;/*保存文件*/case7:change();break;/*改变记录*/case8:del();break;/*删除记录*/case9:quit();/*如菜单返回值为9程序结束*/}}}/*输入数据函数*/voidenter(structstudentstud[]){intn=0,i,j,k,c;charb[4];floatsum;printf(Howmanystudent'srecorddoyouwanttoenter?n=?\b\b\b);scanf(%d,&n);/*输入一次要输入记录数*/for(i=0;in;){sum=0;/*统记三科总分*/printf(Inputthe%dthstudent'snumber,N+1);scanf(%s,stud[N].number);/*输入学号*//*以下if-else语句判断所输记录是否存在*/if(flag(stud))/*调用返回值为0或1函数,判断所输入的学号是否已经存在,存在就执行if语句*/{printf(Therecordhasexist.\n);printf(Inputagain.);getch();}else{printf(Inputthe%dthstudent'sname,N+1);scanf(%s,stud[N].name);/*输入姓名*/for(j=0;j3;j++){do{printf(Inputthe%dthstudent'sscore(%d),N+1,j+1);/*打印提示*/scanf(%s,b);/*输入分数*/stud[N].score[j]=atof(b);/*将字符串强制转换成实型,得值赋给stud[N].score[j]*/if(stud[N].score[j]=0||stud[N].score[j]100)/*判断分数是否在0-100之间*/{k=1;/*分数不在0-100之间时k值为1*/printf(Errorinput!!!\n);printf(Inputagain...\n);/*打印出错提示*/}elsek=0;/*分数在0-100之间时k值为0*/}while(k);/*由k值决定是否要循环*/sum+=stud[N].score[j];/*统记三科总分*/}stud[N].average=sum/3.0;/*平均分*/printf(\nEntersuccess!!!\n);printf(\nPressanykeytoreturn.);getch();N++;/*记录数加1*/i++;H=1;}clrscr();/*清屏*/}clrscr();/*清屏*/}/*显示记录函数*/voidprint(structstudentstud[]){inti=0,k,max,maxb,n,flag='y';charm[6];/*以下if-else为判断文件中是否有记录*/if(N==0){printf(Therearenotrecord.\n);printf(Pressanykeytoreturn.);/*当N为0时(即没有记录)打印没有记录提示*/getch();}elsewhile(flag!='n'){maxb=0;i=0;/*以下分页输出记录*/do{if(N%10!=0){printf(\n\t\tThereare%dpagesinall.,N/10+1);printf(\n\t\tWhichpagedoyouwanttosee?);}else{printf(\n\t\tThereare%dpagesinall.,N/11+1);printf(\n\t\tWhichpagedoyouwanttosee?);}scanf(%s,m);/*输入要显示的页数*/k=atoi(m);/*强制把m转换成整形*/if(k){k=10*(k-1);/*此时k变为第k页的第一条信息的序号*/if(k=N)/*判断页数是否存在*/{printf(\n\t\tThepageisnotexist!!!);printf(\n\t\tInputagain.\n);}}elsek=N+1;}while(k=N);/*如果页数不存在进入do-whie循环*//*以下if-else语句是判断第k页是否有10条语句*/if((k+10)N)max=N;/*当第k页不够10条记录时*/elsemax=k+10;/*当第k页够10条记录时*/clrscr();/*以下for语句为取得第k页名字最大字符长度*/for(i=k;imax;i++){n=strlen(stud[i].name);if(nmaxb)maxb=n;}i=k;/*以下if-else是为了保证表美观*//*如果最大字符长度不大于8则按if输出,则按名字方格长度为8输出*/if(maxb8){while(imax){/*以下为输出记录*/if(i%10==0){printf(\n\t\t\t\tPage:%d,(k+10)/10);printf(\n\t|---|--------|--------|--------|--------|--------|--------|);printf(\n\t|NO:|number|name|score(1)|score(2)|score(3)|average|\n);}printf(\t|---|--------|--------|--------|--------|--------|--------|\n);printf(\t|%-2d|%-6s|%-8s|%-5.1f|%-5.1f|%-5.1f|%-7.2f|\n,i+1,stud[i].number,stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].average);i++;}printf(\t|---|--------|--------|--------|--------|--------|--------|\n);}/*如果最大字符长度大于8则按else输出,见则按名字格长度为16输出*/else{while(imax){/*以下为输出记录*/if(i%10==0){printf(\n\t\t\t\tPage:%d,(k+10)/10);printf(\n\t\b\b|---|--------|----------------|--------|--------|--------|--------|);printf(\n\t\b\b|NO:|number|name|score(1)|score(2)|score(3)|average|\n);}printf(\t\b\b|---|--------|----------------|--------|--------|--------|--------|\n);printf(\t\b\b|%-2d|%-6s|%-16s|%-5.1f|%-5.1f|%-5.1f|%-7.2f|\n,i+1,stud[i].number,stud[i].name,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].average);i++;}printf(\t\b\b|---|--------|----------------|--------|--------|--------|--------|\n);}printf(\t\t\t\b\bDoyouwanttogoon?yorn?\b\b\b\b\b\b\b);flag=getch();/*获取一个字符判断是否要继续显示*/clrscr();/*清屏*/}}/*查找函数*/voidsearch(structstudentstud[]){inti=0,n,j;charnumber[8],flag='y';clrscr();/*清屏*/while(flag!='n'){i=0;printf(\n\t\t\t\t\b\b\b\bThenumber--namel