




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言实验语言报告第十章班级:班组员(学号):指导教师:报告设计时间:2012-1-01一、实验题目: 学生成绩管理系统V3.0某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,参考例10.4,用二维数组做函数参数,编程实现如下菜单驱动的学生成绩管理系统:(1) 录入每个学生的学号、姓名和考试成绩;(2) 计算课程的总分和平均分;(3) 按成绩由高到低排出名次表;(4) 按成绩由低到高排出名次表;(5) 按学号由小到大排除成绩表;(6) 按姓名的字典顺序排出成绩表;(7) 按学号查询学生排名及其考试成绩;(8) 按姓名查询学生排名及其考试成绩;(9) 按优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(059)5个类别,统计每个类别的人数以及所占的百分比;(10) 输出每个学生的学号、姓名、考试成绩,以及课程总分和平均分。要求程序运行后先显示如下菜单,并提示用户输入选项:1. Append record2. Caculate total and average score of course3. Sort in descending order by score4. Sort in ascending order by score5. Sort in ascending order by number6. Sort in dictionary order by name7. Search by number 8. Search by name9. Statistic analysis10. List record11. ExitPlease enter your choice根据用户输入的选项执行相应的操作。二、实验目的:在第9章实验“学生成绩管理系统V2.0”的基础上,通过增加任务要求,熟悉二维数组作函数参数、字符串处理函数、字符串处理操作、模块化程序设计以及增量测试方法。三、程序设计思想: 模块化程序设计思想,将题目中要求的功能用函数去实现,注意每个函数的接口如下:(1) 为实现菜单驱动:int Menu(void)(2) 录入录入每个学生的学号、姓名和考试成绩int ReadScore(int score,char nameMAX_LEN,long n);(3) 计算课程的总分和平均分void AverTotalcourse(int score,float sum,int aver);(4) 按成绩由高到低排出名次表,按成绩由低到高排出名次表;设计一个升序降序通用的函数【要使用函数指针,涉及字符串的复制strcpy】int Descengding(int a,int b)void SelectionSort()int Ascending(int a,int b)(5) 按学号由小到大排除成绩表void Sortbynum()(6) 按姓名的字典顺序排出成绩表【涉及字符串比较strcmp】void Sortbyname()(7) 按学号查询学生排名及其考试成绩【用折半查找的方式】 void Searchbynum()(8) 按姓名查询学生排名及其考试成绩【顺序查找的方式】 void Sortbyname()(9)按优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(059)5个类别,统计每个类别的人数以及所占的百分比void StatisticAnalysis(int score,int n)(10)输出每个学生的学号、姓名、考试成绩,以及课程总分和平均分。 void PrintScore(long num,char nameMAX_LEN,int score,int n四、完整程序:/*程序功能:用于学生成绩管理 编程者:陈丽娟,黄梦莹,刘薇 日期:2012-12-18*/# include# include# include# include# define MAX_LEN 10# define N 30int Menu(void); /*对要用到的函数进行定义*/void ReadScore(int score,char nameMAX_LEN,long num,int n);void AverTotalcourse(int score,int n);void SelectionSort(int(*compare)(int a,int b),int score,char nameMAX_LEN,long num,int n);int Descending(int a,int b);int Ascending(int a,int b);void Sortbynum(int score,char nameMAX_LEN,long num,int n);void Sortbyname(int score,char nameMAX_LEN,long num,int n);void Searchbynum(int score,char nameMAX_LEN,long num,int n);void Searchbyname(int score,char nameMAX_LEN,long num,int n);void StatisticAnalysis(int score,int n);void PrintScore(long num,char nameMAX_LEN,int score,int n);void main()int n;int ch;int scoreN;char nameNMAX_LEN; /*定义二维字符数组*/long numN; /*定义一维字符数组*/printf(Input the student number:);scanf(%d,&n);ch=Menu();/*显示菜单,并读取输入数据*/switch(ch)case 1:ReadScore(score,name,num,n);break;/*输入成绩*/case 2:AverTotalcourse(score,n);break;/*计算总分和平均分*/case 3:SelectionSort(Descending,score,name,num,n);break;/*函数指针指向Descending*/case 4:SelectionSort(Ascending,score,name,num,n);break; /*函数指针指向Ascending*/case 5:Sortbynum(score,name,num,n);break;/*按学号排*/case 6:Sortbyname(score,name,num,n);break;case 7:Searchbynum(score,name,num,n);break;case 8:Searchbyname(score,name,num,n);break;case 9:StatisticAnalysis(score,n);break;case 10:PrintScore(num,name,score,n);break;case 0:exit(0); printf(End of program!); break;default:printf(Input error);break; /*函数功能:形成菜单驱动,并输入数字选择相应功能*/*函数参数:无*/*函数返回值:数字*/int Menu(void)int num;printf(1.Append recordn);printf(2.Caculate total and average score of coursen);printf(3.Sort in descending order by scoren);printf(4.Sort in ascending order by scoren);printf(5.Sort in ascending order by numbern);printf(6.Sort in dictionary order by namen);printf(7.Search by number n);printf(8.Search by namen);printf(9.Statistic analysisn);printf(10.List recordn);printf(11.Produce the scoren);printf(Please enter your choicen);scanf(%d,&num);return num;/*函数功能:1输入学生的学号,姓名和分数*/*函数参数:学生人数,分数姓名学号*/*函数返回值:无*/void ReadScore(int score,char nameMAX_LEN,long num,int n)int i;printf(Input studens ID,name and score:);/*输入参加考试学生的学号,姓名和分数*/for(i=0;in;i+) /*对所有的学生进行循环*/scanf(%ld%s%d,&numi,nameiMAX_LEN,scorei);/*以长整型、字符型、整形分别输入学号、姓名、分数*/*函数功能:2计算每个学生的总分和平均分*/*函数参数:学生人数,分数*/*函数返回值:无*/void AverTotalofcourse (int score,int n)int sum=0; int i; float aver=0; for(i=0;in;i+) sum=scorei+sum; aver=(float)sum/n; printf(The Total score of course is:%d,the aver score of course is %f,sum,aver);/*函数功能:34交换法实现按成绩升序或降序排序,并实现姓名及学号随学号调整*/*函数参数:学生人数,分数,姓名,学号*/*函数返回值:无*/void SelectionSort(int(*compare)(int a,int b),int score,char nameMAX_LEN,long num,int n)int i,j,k,temp;long temp2;char temp3MAX_LEN;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+) if(*compare)(scorej,scorek)k=j; if (k!=i) temp=scorek;scorek=scorei;scorei=temp;temp2=numk;numk=numi;numi=temp2;strcpy(temp3,namek);strcpy(namek,namei);strcpy(namei,temp3); /*使数据按升序排序*/int Ascending(int a,int b)return ab;/*这样比较决定了按升序排序,如果ab;/*这样比较决定了按升序排序,如果ab,则交换*/*函数功能:()5交换法实现按学号从小到大排名排序,并实现姓名及成绩随学号调整*/*函数参数:学生人数,分数姓名学号*/*函数返回值:无*/void Sortbynum(int score,char nameMAX_LEN,long num,int n)int i,j,k,temp;long temp2;char temp3MAX_LEN;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(numjnumi) temp=scorei;scorei=scorej;scorej=temp; temp2=numi;numi=numj;numj=temp2; strcpy(temp3,namei); strcpy(namei,namej); strcpy(namej,temp3);/*函数功能:6选择法实现按姓名的字典顺序排序,并实现姓名及成绩随学号调整*/*函数参数:学生人数,分数姓名学号*/*函数返回值:无*/void Sortbyname(int score,char nameMAX_LEN,long num,int n)int i,j,k,temp;long temp2;char temp3MAX_LEN;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(strcmp(namej,namek)0)/*按姓名的字典顺序排序*/k=j; if (k!=i)temp=scorek;scorek=scorei;scorei=temp;temp2=numk;numk=numi;numi=temp2;strcpy(temp3,namek);strcpy(namek,namei);strcpy(namei,temp3);/*函数功能:7按折半查找方式按学号查询学生排名及考试成绩,并输出排名及成绩,输入错误时进行提示,并重新输入*/*函数参数:学生人数,分数姓名学号*/*函数返回值:无*/void Searchbynum(int score,char nameMAX_LEN,long num,int n)Sortbynum(score,name,num,n);long number;int low,high,mid;low=0;high=n-1;printf(Input the number you want to search:);/* 输入想要查询的学生的学号*/scanf(%ld,&number);while(lownummid)low=mid+1;else if(numbernummid)high=mid-1;elseprintf(%ld,mid); /*函数功能:8按线性查找方式按姓名查询学生排名及考试成绩,并输出排名及成绩,输入错误时进行提示,并重新输入*/*函数参数:学生人数,分数姓名学号*/*函数返回值:无*/void Searchbyname(int score,char nameMAX_LEN,long num,int n)int i;char name2MAX_LEN;int flag=0;/*置标志变量为假*/printf(Input the students name:);scanf(%s,name2);dofor(i=0;in;i+)if(strcmp(name2,namei)=0)printf(The name is%s,NO.%d,the score is%d,name,i,score);flag=1; /*找到时标志变量为真*/if(flag=0) /*若循环结束仍未找到,提示输入了错误姓名*/printf(You put the wrong name,please put the name again!);while(flag=0); /*循环直到输入正确的学号*/void StatisticAnalysis(int score,int n)int i,total=0,t6=0,0,0,0,0,0;for(i=0;i=0&scorei60)t0+;else if (scorei70)t1+;else if (scorei80)t2+;else if(scorei90)t3+;else if(scorei100)t4+;else if(scorei=100)t5+;for (i=0;i=5;i+)total=total+ti;if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论