C语言成绩统计系统1.docx
- 文档编号:17288551
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:24
- 大小:195.99KB
C语言成绩统计系统1.docx
《C语言成绩统计系统1.docx》由会员分享,可在线阅读,更多相关《C语言成绩统计系统1.docx(24页珍藏版)》请在冰点文库上搜索。
C语言成绩统计系统1
C语言成绩统计系统
(1)
目录
摘要1
1.绪论1
2.系统分析1
2.1程序总体结构图2
2.2具体功能框图3
3.总体设计4
3.1功能模块设计4
3.2系统设计方案5
4.详细设计5
4.1输入学生信息5
4.2输入平时成绩和考试成绩,总成绩5
4.3总分排序5
5.调试与测试5
5.1调试6
5.2测试6
6.结论7
结束语7
参考文献7
附件1.主要界面截图7
附件2.源程序9
摘要
经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:
输入学生信息,输入平时成绩和考试成绩,算出总成绩并排序,成绩查询,在这些函数当中,前三个函数的实现严格按照题目的要求,而后面的一个函数属于附加功能。
1、绪论
经过对程序设计题目的分析可知,整个程序的设计实现大致分为以下模块,其中每一个模块对应一个函数,他们的功能分别是:
1输入学生姓名学号,考试成绩和平时成绩,2算出总成绩等于平时成绩乘以30%加上考试成绩乘以70%,3算出总成绩后按照分数排序,4查询某个学生的成绩(输入学号可以查询学生成绩信息),5最后退出程序。
每一个学生记录都包含学号、姓名,以及平时成绩(pscj),考试成绩(kscj)和总成绩(zcj)。
在程序当中,将学生记录类型定义为结构体类型,添加的学生信息直接写入C盘的student.txt文件中,其他函数每次对学生记录的访问,其数据来源都是student.txt文件,这样做不但可以保证学生数据的一致性,而且可以对学生数据进行永久保存,保证每次运行程序都可以采用原来的数据。
1、输入学生信息主要实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;
2、统计学生总成绩总成绩=平时成绩乘以30%+考试成绩乘以70%
3、总成绩排序按照题目的具体要求实现的是总成绩的排序
4、成绩查询允许按照姓名对学生的各科成绩进行查询;
5、退出
2、系统分析
2.1、程序总体结构图
2.2、具体功能框图
(1)输入学生信息
(2)输入平时成绩,考试成绩,总成绩
for(j=0;j
平时成绩
*cj->pscj
考试成绩
*cj->kscj
for(n=0;n 总成绩 *(sum+n)=0 *(sum+n)=*(sum+n)+cj->pscj*0.3+cj->kscj*0.7 (3)按照学生成绩排序 运用for循环语句: for(i=0;i 运用比较法进行排序 再次运用for循环结构 for(j=i+1;j 判断比较大小 if((*sum+j)<(*sum+k))k=j 对调*t=*(stu+k) *(stu+k)=*(stu+i) *(stu+i)=*t (4)成绩查询 for循环结构 for(i=0;i 判断并且输出姓名 If((stu+i)->num==tnum name[10]=*(stu+i)->name printf(“%s”,*(stu+i)->name) 运用for循环并判断 for(i=0;i if(*(cj+i)->name==name1[10]) 是否 输出总成绩 printf(“%d”,*(sum+i)) 3.总体设计 3.1功能模块设计 1.函数实现功能说明: (1)menu函数 是定义一个菜单函数,其功能在于输出菜单界面供使用者选择。 (2)input函数 是定义用于输入学生信息。 (3)select函数 是定义用于查询学生信息。 包括学号、姓名及各科成绩。 (4)statistics函数 计算学生的平均分。 根据学生的平均分高低,对学生的数据进行排序输出。 2.相互调用关系: Main函数调用menu函数。 Menu函数可以调用input函数、select函数和statistics函数 3.2系统设计方案 学生成绩统计系统 程序说明: 有N个学生,每个学生的数据包含学号(不重复)、姓名、平时成绩和考试成绩,试设计一学生成绩统计系统,使之能提供以下功能: 4、详细设计 本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。 在这些函数当中,输入学生信息,平时成绩,考试成绩,排序是程序中较为核心的部分,下面分别进行说明。 4.1、输入学生信息 添加数据分为两种情况,其一是在学生文件(record.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中;其二是在学生文件(record.txt)已经存在的情况下,此时文件要以读写方式或追加的方式打开,这样才可以保证以前已经存在的数据不丢失。 4.2、输入平时成绩和考试成绩,总成绩 该函数的核心内容是删除算法以及最终对源文件的更新。 该函数执行时,首先输入学生的学号,姓名,班级,在定义的结构体中,运用指针变量分别输出该学生的相关信息。 再对该生的平时成绩和考试成绩进行输入,同样运用指针来实现对数据的输入。 总成绩等于平时成绩*30%+考试成绩*70%,在总成绩程序中输入相关信息,这样该学生的信息就可以得到了 4.3、总分排序函数 对于总分的排序采用正常的比较大小的方法,将成绩高的学生成绩按由大到小的顺序进行排列,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。 排序函数使学生数据的排列顺序发生了变化。 此外,对于学生排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入。 5、调试与测试 5.1调试 在这次的课程设计当中,我对计算机有了更为深刻的认识。 对程序中涉及的问题也都全解决了,在老师及同学的帮助下,顺利地完成了这次课程设计。 在课上所学到的知识也全都运用到了程序中,是程序更加的完善,在编程序中易犯的毛病还是体现了出来,经过努力,改正了过来。 5.2测试 这次课为我今后在计算机方面的学习奠定了坚实的基础。 优点: 查找学生成绩方便,通过学生的学号和姓名可以迅速的找到每个学生的考试成绩。 也可以看到学生的排名情况。 缺点: 源程序有一些复杂,排布较多,在查找程序源的步骤时有些麻烦。 6、总结 通过这次课程设计一整周的课程设计艰难奋斗的同时让我学会了很多C语言的知识,使我对C语言更充分的认识了它的实用性,我尝试了用C语言软件编写一个实际应用的程序,我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。 在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和完善了程序。 使程序基本能完成编好和完善了程序,而且用户界面也比较友好,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。 参考文献 1谭浩强.C程序设计.北京: 清华大学出版社,2005 ·结束语 为期两个礼拜的的软件综合课程设计实习终于顺利完成,在这期间,我学到了很多课堂上学不到的东西,而且,将所学付之于实践,理论联系实际,是令我很兴奋的,但同时也感觉到了难度。 对C语言,有了更深一步的了解,并且培养出了良好的思考方式,对于编程。 虽然困难很多,问题出现的也很多,但好在,顺利完成任务了,很有成就感。 . 附件1、主要界面截图 步骤一: 录入学生信息 步骤二和三: 录入成绩和统计 步骤四: 排序显示 步骤五: 查询 附件2、源程序 #include #include #include #include #defineN100 structstud { charsno[12]; charname[10]; charhome[20]; charsc[20]; intbCome; floatscore1;//平时成绩 floatscore2;//考试成绩 floatscore3;//总成绩 }; studtemp[N]; intnumber=0; //输入学生信息 /////////////////////////////////////// intinput() { studtemp; FILE*fp; printf("输入学生信息: (输入结束在学号处输over)\n"); if((fp=fopen("stud.dat","wb"))==NULL) { printf("文件打开失败! "); exit(0); } while (1) { printf("输入学生学号: "); scanf("%s",temp.sno); if(! strcmp(temp.sno,"over")) {fclose(fp);return0;} printf("输入学生姓名: "); scanf("%s",temp.name); printf("输入学生家庭住址: "); scanf("%s",temp.home); printf("输入学生专业: "); scanf("%s",temp.sc); printf("输入年龄(输入大于0整数): "); scanf("%d",&temp.bCome); temp.score1=0.0; temp.score2=0.0; temp.score3=0.0; fwrite(&temp,sizeof(temp),1,fp); } fclose(fp); } ////////////////////////////////////// ///////////////////////////////////// voidwrite() { inti=0; FILE*fp; if((fp=fopen("stud.dat","wb"))==NULL) { printf("文件打开失败! "); exit(0); } while(temp[i].sno! =NULL) { fwrite(&temp[i],sizeof(temp),1,fp); i++; } } ///////////////////////////////////// //////////////////////////////////// //录入成绩 ////////////////////////////////////// voidset() { FILE*fp; printf("输入学号: "); charbuffer_no[20];floatp,k; scanf("%s",buffer_no); inti=0; if(strcmp(buffer_no,temp[i].sno)==0) { while(strcmp(buffer_no,temp[i].sno)==0) i++; if(i>=N) { printf("没有要找的学生信息"); } else {printf("输入平时成绩: "); scanf("%f",&p); printf("输入考试成绩: "); scanf("%f",&k); if((fp=fopen("stud.dat","rb"))==NULL) { printf("文件打开失败! "); exit(0); } fread(&temp[i],sizeof(stud),1,fp); if(strcmp(buffer_no,temp[i].sno)==0) {temp[i].score1=p;temp[i].score2=k;temp[i].score3=float(p*0.3)+float(k*0.7); } i=0; fread(&temp[i],sizeof(stud),1,fp); if(strcmp(buffer_no,temp[i].sno)==0) {temp[i].score1=p;temp[i].score2=k;temp[i].score3=float(p*0.3)+float(k*0.7); } if((fp=fopen("stud.dat","wb"))==NULL) { printf("文件打开失败! "); exit(0); } fwrite(&temp[i],sizeof(temp),1,fp); printf("成绩录入成功\n"); } } /////////////////// else {printf("输入平时成绩: "); scanf("%f",&p); printf("输入考试成绩: "); scanf("%f",&k); inti=0; if((fp=fopen("stud.dat","rb"))==NULL) { printf("文件打开失败! "); exit(0); } while(strcmp(buffer_no,temp[i].sno)! =0) { fread(&temp[i],sizeof(stud),1,fp); i++; } fclose(fp); if(strcmp(buffer_no,temp[i].sno)==0) {temp[i].score1=p;temp[i].score2=k;temp[i].score3=float(p*0.2)+float(k*0.8); } if((fp=fopen("stud.dat","wb"))==NULL) { printf("文件打开失败! "); exit(0); } i=0; while(strcmp(buffer_no,temp[i].sno)! =0) { fwrite(&temp[i],sizeof(temp),1,fp);i++; printf("成绩录入成功\n");fclose(fp); } } } ///////////////////////////////////// //成绩统计 voidchange() { FILE*fp; printf("输入学生成绩及格的分数线: "); floatxx,yy=0.0,zz=0.0,ww=0.0,tt=0.0,nn=0.0; scanf("%f",&xx); inti=0,j=0,k=0; if((fp=fopen("stud.dat","rb"))==NULL) { printf("文件打开失败! ");exit(0); } printf("总成绩及格人数平时成绩总分考试成绩总分总成绩总分总成绩平均分及格率\n"); while(fread(&temp[i],sizeof(stud),1,fp)! =0) { if(temp[i].score3>xx) j++; yy=yy+temp[i].score1; zz=zz+temp[i].score2; tt=tt+temp[i].score3; if(temp[i].bCome! =0)k++; i++; }ww=float(tt/k);nn=(float(j)/float(k))*100; printf("%d%.2f%.2f%.2f%.2f%.2f%%",j,yy,zz,tt,ww,nn); } //排序显示 //////////////////////////////////////// voidshowStu() { FILE*fp;studtempp[N],tempp1; inti=0,x=0,k,j,l;intm=-1; printf("总成绩排序的顺序: 1、升序2、降序: "); scanf("%d",&m); switch(m) { case1: if((fp=fopen("stud.dat","rb"))==NULL) { printf("文件打开失败! ");exit(0); } printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n"); while(fread(&temp[i],sizeof(stud),1,fp)! =0) { if(temp[i].sno! =NULL) { tempp[x]=temp[i]; x++; } i++; } fclose(fp); for(j=0;j { k=j; for(l=j+1;l { if(tempp[k].score3>tempp[l].score3) { tempp1=tempp[k];tempp[k]=tempp[l];tempp[l]=tempp1; } } } for(j=0;j { if(tempp[j].bCome! =0) {printf("%s%s%s%s%d%.2f%.2f%.2f\n",tempp[j].sno,tempp[j].name,tempp[j].home,tempp[j].sc,tempp[j].bCome,tempp[j].score1,tempp[j].score2,tempp[j].score3); } } break; case2: if((fp=fopen("stud.dat","rb"))==NULL) { printf("文件打开失败! ");exit(0); } printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n"); while(fread(&temp[i],sizeof(stud),1,fp)! =0) { if(temp[i].sno! =NULL) {tempp[i]=temp[i]; i++; } } fclose(fp); for(j=0;j { k=j; for(l=j+1;l { if(tempp[k].score3 { tempp1=tempp[k];tempp[k]=tempp[l];tempp[l]=tempp1; } } } for(j=0;j { if(tempp[j].bCome! =0) { printf("%s%s%s%s%d%.2f%.2f%.2f\n",tempp[j].sno,tempp[j].name,tempp[j].home,tempp[j].sc,tempp[j].bCome,tempp[j].score1,tempp[j].score2,tempp[j].score3); } } break; } } /////////////////////////////// //查询 ////////////////////// voidpx() { FILE*fp; inti=0;intm=-1; chara[100]; printf("输入查询条件: 1、学号2、姓名: "); scanf("%d",&m); switch(m) { case1: printf("输入查询学号: "); scanf("%s",a); if((fp=fopen("stud.dat","rb"))==NULL) { printf("文件打开失败! ");exit(0); } printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n"); while(fread(&temp[i],sizeof(stud),1,fp)! =0) {if(strcmp(temp[i].sno,a)==0) {printf("%s%s%s%s%d%.2f%.2f%.2f\n",temp[i].sno,temp[i].name,temp[i].home,temp[i].sc,temp[i].bCome,temp[i].score1,temp[i].score2,temp[i].score3); }i++; } fclose(fp); break; case2: printf("输入查询姓名: "); scanf("%s",a); if((fp=fopen("stud.dat","rb"))==NULL) { printf("文件打开失败! ");exit(0); } printf("学号姓名家庭住址专业年龄平时成绩考试成绩总成绩\n"); while(fread(&temp[i],sizeof(stud),1,fp)! =0) {if(strcmp(temp[i].name,a)==0) {printf("%s%s%s%s%d%.2f%.2f%.2f\n",temp[i].sno,temp[i].name,temp[i].home,temp[i].sc,temp[i].bCome,temp[i].score1,temp[i].score2,temp[i].score3); }i++; } fclose(fp); break; } } //////////////////////////////////////// ////////////////////////// voidserver(intmenu) { switch(menu) { case1: input();break;///录入学生信息 case2: set();break;///录入成绩 case3: change();break;///统计 case4: showStu();break;///排序显示 case5: px();break;///查询 case6: exit(0);break;///退出 } } //主界面 //////////////////////////////////////// voidshowWND() {intmenu=-1; while (1) { printf("成绩统计系统\n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 成绩 统计 系统