当前位置:文档之家› 班级学生成绩管理-

班级学生成绩管理-

课程设计任务书一、课程设计题目:班级学生成绩管理二、课程设计工作自2008年9月8日起至2008年9月12日止三、课程设计内容:运用所学的C语言知识,编制和调试程序,具体要求如下:(1)添加学生数据(2)删除学生数据(3)按总成绩排序,并显示名次(成绩相同,名次相同)(4)成绩查询(5)自己再加一项功能注:每个学生数据至少应该包括学号、姓名、三门成绩,学生数据要保存在student.dat文件中。

四、课程设计要求:程序质量:●贯彻事件驱动的程序设计思想。

●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。

●用户界面中的菜单至少应包括“学生信息查询(根据姓名,或编号等。

)”、“显示全部学生信息”、“添加学生信息”、“删除学生信息”、“退出”5项。

●代码应适当缩进,并给出必要的注释,以增强程序的可读性。

课程设计说明书:课程结束后,上交课程设计说明书和源程序。

课程设计说明书的内容如下:●课程设计任务书●程序设计题目●需求分析(分析题目的要求)●程序框图(总体框图和各功能模块框图,使用传统流程图或N-S框图)●核心技术的实现方法及程序源代码及注释●个人总结●[参考资料]指导教师:____________________学生签名:____________________成绩:评语:目录I一、需求分析 (1)二、程序流程图............................ 错误!未定义书签。

三、核心技术的实现说明及相应程序段 (5)四、个人总结 (11)五、参考文献 (12)六、源程序 (12)II一、需求分析整个程序的设计采用的是主程序调用子程序,其中每一个子程序对应一个函数,它们的功能分别是:添加学生数据函数(add),删除数据函数(del),排序函数(sort),成绩查询函数(query),更改学生数据函数(modify)。

在这些函数当中,后面的一个函数属于附加功能。

1、设计add子程序实现程序最初运行时学生数据的录入以及其后的运行中学生数据的追加功能;2、设计del子程序实现的功能是按照学号对学生的数据记录进行删除;3、设计sort子程序按照题目的具体要求实现的是总成绩的递减排序以及名次显示,其中总成绩相同者名次相同;4、设计query子程序允许按照学号对学生的各科成绩进行查询;5、设计modify子程序可以实现对学生记录中信息进行修改;6、除上面介绍的功能之外,程序还具有退出功能,可以1关闭文件返回主菜单,可以在程序的一次运行当中循环执行所有的功能。

该函数主要完成提供菜单的功能。

当用户进入“班级学生成绩管理系统”时,即进入此菜单。

用户可以按照菜单提示选择0~5之间的数值,调用相应功能进行操作。

例如:1.查询记录;2.修改记录;3.删除记录;4.添加记录;5.排序记录;0.退出系统。

二、程序流程图1、程序总体结构图2图1 总程序设计流程2、具体功能框图(1)修改学生数据函数3图3 修改学生数据流程图4(2)学生成绩删除函数图3 删除学生数据流程图5(3)学生信息输出函数图4 输出学生数据流程图6三、核心技术的实现说明及相应程序段本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。

在这些函数当中,添加数据函数、删除数据函数和排序函数是程序中要求的部分,下面分别进行说明。

1、添加数据函数添加学生信息函数是最为基本的函数。

首先输入学号,再根据提示依次输入学生学号,姓名及三科成绩。

具体程序段如下:void add() /*添加*/{ int cj;printf("请输入要添加的学生学号:");scanf("%d",&st[n].num );printf("请输入要添加的学生姓名:");scanf("%s",&st[n].name);printf("1,语文成绩\n");scanf("%d",&cj);st[n].score[0]= cj;7printf("2.数学成绩:\n");scanf("%d",&cj);st[n].score[1 ]=cj;printf("3.英语成绩:\n");scanf("%d",&cj);st[n].score[2]= cj;n++;}2、删除数据函数该函数的功能是删除学生记录。

该函数执行时,由用户输入待删除学生的学号,而后按照该学号进行查找,如果文件中存在该学生的数据,则删除,否则输出学生信息不存在。

学生信息的具体信息是在结构体数组中找到的,当学生的信息被找到后,位于数组中该学生后面的学生记录依次向左移动一个位置进行覆盖,操作完成后,要删除的学生信息就被后面的数组元素覆盖掉了,也就实现了删除。

具体程序段如下:void dele() /*删除*/{int i,num ,flag,j;flag=0;printf("请输入要删除学生的学号:\n");scanf("%d",&num );for(i=0;i<5;i++){if(st[i].num ==num )/*如果找到相同的学号*/{for(j=i+1;j<n;j++)st[j-1]=st[j];flag=1;k--;/*删除学号*/}}if(flag==1)printf("该学生已成功删除!\n\n");elseprintf("该学生信息不存在或已删除!\n\n");}3、成绩查询函数该子程序主要完成在数组中查找满足相关条件的记录功能。

在此“学生成绩管理系统”中,用户可以按照学号在数组中进行查找。

若找到该记录,则输出此记录的信息;否则,输出“没有该学生”的提示。

主要运用了“printf,scanf,for,if”等语句,使得使用者查询起来,更加快速和简洁。

具体程序段如下:void query() /*查询*/{int i,num,flag=0;printf("请输入要查询的学生学号:\n");scanf("%d",&num);printf("学号\t姓名\t成绩\n");for(i=0;i<5;i++){if(st[i].num==num) /*如果输入的学号与存在的相同*/{printf("%d\t\t",st[i].num);printf("%s\t\t",st[i].name);printf("%d\t\t",st[i].score);printf("\n");flag=1;break; } }if(flag==0) /*如果没找到相同的学号*/printf("没有该学生.\n\n");}四、个人总结通过本次程序设计,对C语言有了进一步的认识和了解。

在本次设计中能够熟练的掌握多种有关C语言的知识,如C语言的诸多语句,为以后的学习和使用打下基础,了解了C语言的用途以及结构,知道了自己所学知识的不足,通过老师的指导和同学的帮助,充分掌握了C语言的基本知识,了解软件的应用。

这次课程设计让我对C语言的了解得到了升华。

是理论与实践最完美的结合。

希望以后老师能够给予更多的帮助和指导。

五、参考文献1 谭浩强.C程序设计.北京:清华大学出版社,2005 2刘振安刘燕君 C程序设计课程设计机械工业出版社3李珍香刘红梅赵润林汇编语言案例精编中国水利水电出版社六、源程序#include<stdio.h>#include<stdlib.h>#include<string.h>struct student{ char name[20]; /*定义姓名为字符型*/int num; /*定义学号为字符型*/int score[3];int total; /*定义成绩为整型*/};struct student st[10]={{"占强",1,78,89,85},{"李力",2,98,89,65},{"小帐",3,85,78,68},{"华子",4,84,85,68},{"大董",5,97,82,76}};int n=5;void query() /*查询*/{int i,j,num,flag=0;printf("请输入要查询的学生学号:\n");scanf("%d",&num);printf("学号\t姓名\t成绩\n");for(i=0;i<n;i++){if(st[i].num==num) /*如果输入的学号与存在的相同*/{printf("%d\t\t",st[i].num);printf("%s\t\t",st[i].name);for(j=0;j<3;j++)printf("%d\t\t",st[i].score[j]);printf("\n");flag=1;break;}}if(flag==0) /*如果没找到相同的学号*/printf("没有该学生.\n\n");}void modify() /*修改*/{int i,num,flag=0,mode,k,cj;printf("请输入要修改学生的学号:\n");scanf("%d",&num);for(i=0;i<n;i++){if(st[i].num==num ) /*如果找到相同的学号*/{flag=1;printf("请输入要修改的选项:\n");printf("1.学号\t2.姓名\t3.成绩\n");printf("请选择:\n");scanf("%d",&mode);switch(mode){case 1:printf("请输入修改后的学号:\n");scanf("%d",&st[i].num );break;case 2:printf("请输入修改后的姓名:\n");scanf("%s",&st[i].name);break;case 3:printf("1,语文2.数学3.英语\n");scanf("%d",&k);printf("请输入修改后的成绩:\n"); scanf("%d",&cj);st[i].score[k-1]=cj;break;}}}if(flag==1) /*如果找到则修改*/printf("修改成功!\n\n");else /*找不到*/printf("该生记录不存在!\n\n");}void del() /*删除*/{int i,num ,flag,j;flag=0;printf("请输入要删除学生的学号:\n");scanf("%d",&num );for(i=0;i<n;i++){if(st[i].num ==num )/*如果找到相同的学号*/{for(j=i+1;j<n;j++)st[j-1]=st[j];flag=1;n--;/*删除学号*/}}if(flag==1)printf("该学生已成功删除!\n\n");elseprintf("该学生信息不存在或已删除!\n\n"); }void add() /*添加*/{int cj;printf("请输入要添加的学生学号:");scanf("%d",&st[n].num );printf("请输入要添加的学生姓名:");scanf("%s",&st[n].name);printf("1,语文成绩\n");scanf("%d",&cj);st[n].score[0]=cj;printf("2.数学成绩:\n");scanf("%d",&cj);st[n].score[1]=cj;printf("英语成绩:\n");scanf("%d",&cj);st[n].score[2]=cj;n++;}void sort(){int i,j,p,t=0;struct student temp;printf("\n名次\t\t学号\t\t姓名\t\t总分");for(i=0;i<n;i++){ st[i].total=0;st[i].total=st[i].score[0]+st[i].score[1]+st[i].sco re[2];}for(i=0;i<n;i++){ p=n-i;for(j=0;j<(p-1);j++){ if(st[j].total>st[j+1].total){ temp=st[j];st[j]=st[j+1];st[j+1]=temp;}}t=t+1;printf("\n%-17d%-16d%-16s%-16d",t,st[j].num,st[j].n ame,st[j].total);}}output(){int i,j;for(i=0;i<n;i++){printf("%d\t\t",st[i].num);printf("%s\t\t",st[i].name);for(j=0;j<3;j++)printf("%d\t\t",st[i].score[j]);printf("\n"); }}void main(){ int menu;while(1){printf(" 班级学生成绩管理系统\n");printf("*****菜单*****\n");printf("\t**************************************\n" );printf("\t* 1.查询记录*\n");printf("\t* 2.修改记录 *\n");printf("\t* 3.删除记录 *\n");printf("\t* 4.添加记录*\n");printf("\t* 5.成绩排序 *\n");printf("\t* 6.输出记录*\n");printf("\t* 0.退出 *\n");printf("\t****************************************\ n");printf("\n输入一个选择项:\n");scanf("%d",&menu);switch(menu){ case 1:query();break;case 2: modify();break;case 3: del();break;case 4: add();break;case 5: sort();break;case 6: output();break;case 0: printf("\t谢谢使用该程序。

相关主题