学生成绩管理系统C语言课程设计报告_第1页
学生成绩管理系统C语言课程设计报告_第2页
学生成绩管理系统C语言课程设计报告_第3页
学生成绩管理系统C语言课程设计报告_第4页
学生成绩管理系统C语言课程设计报告_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.C 语言课程设计设计报告制作人:学号:指导老师:时间:'.一、设计内容和设计要求1、设计内容题目:学生成绩管理系统设计该系统包含 20 个学生姓名和成绩信息,可对成绩进行排序,并实现由姓名查找成绩及由成绩查找姓名。2、设计要求1)由键盘输入 20 个学生(姓名)的某门课程的学习成绩 6099分。2)将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。3) 用线性搜索法检索某个学生的成绩(输入姓名,显示成绩) 。4 )* 对分搜索法检索某个学生的成绩(输入成绩,显示姓名)。二、设计思路首先是要建立20 个学生信息, 即学生姓名和学生成绩,使用子函数input 输入,

2、学生成绩使用一维数组,学生姓名使用二维数组。然后分别定义四个子函数,即直接排序法、冒泡排序法和线性查找法、对分查找法。在两个排序法中,用字符串拷贝函数来实现姓名的交换,另外,在用成绩查找姓名时,可以用直接查找,也可以用对分查找法,在这里我两种方法都使用了。最后在主函数中来设计人机界面,用switch 函数来实现操作选择,对应的情况中就调用之前定义的子函数来完成排序或查找。'.三、程序设计流程图1、程序总体流程开始输入学生姓名和成绩主菜单排序退出查找直接排序冒泡排序查找成绩查找姓名对分查找'.2、直接排序法流程图子程序入口将 i 赋给 min 将 i+1 赋给 j判断 score

3、j<scoremin?Yscorej与 scoremin交换同时 strcp 实现 namej与 namemin交换NN ,继续执行判断是否交换Y全部比较完毕,子程序结束'.3、冒泡排序法流程图子程序入口外层 i 从 0 开始内层 j 从 0 开始判断 scorej>scorej+1?Yscorej与 scorej+1交换同时 strcp 实现 namej与 namej+1交换NN ,继续执行判断是否交换Y全部比较完毕,子程序结束'.4、线性搜索法子程序入口输入姓名字符 chFor 循环检索 namei判断 namei=ch?Y输出学生姓名和成绩子程序结束N不存在此

4、学生'.5、对分搜索法子程序入口n 赋 0 值, m 赋下标最大值(n+m)/2 赋给 i输入成绩k判断k与scorei 的 大 小关系k>scoreik<scoreik=scoreii+1 赋给 ni-1 赋给 m找到, 输出学生成绩和姓名子程序结束'.四、程序设计中遇到的问题和解决方案最开始编程时,直接排序和冒泡排序法中都是通过swap 函数来实现成绩交换和姓名交换, 以达到排序目的, 但在主函数中调用时却调用不了, 程序在排序时就不能正常运行, 我的解决方案就是去掉 swap 函数,因为有可能有些函数的调用有限制条件,这样改变之后,就不存在限制问题,可以正常排

5、序。另外一个问题就是姓名数组的交换问题, 这个之前是用中间变量的方式实现交换, 结果调试时显示非法, 于是经过多次改变和尝试,发现姓名用二维数组更不容易出现问题, 于是就将姓名设置为二维数组, 然后用字符串拷贝函数来实现交换, 以达到最终排序的目的。 这样解决之后, 一方面可以使姓名不至于限制在一个字符内, 另外一个好处就是解决了排序过程中姓名交换的问题。'.五、源程序(含注释)及运行界面1、源程序#include<stdio.h>#include<string.h>#include<stdlib.h>#define NUM 20void input

6、(int a,char b30)/* 子函数 input 输入 20 个学生姓名 */int i;for(i=0;i<NUM;i+)printf(" 请输入第 %d 个学生的姓名:",i+1);scanf("%s",bi);printf(" 请输入第 %d 个学生的成绩:",i+1);scanf("%d",&ai);if(ai>99|ai<60)printf("error!n");/* 成绩大于99 或小于 60 则显示错误 */i=i-1;void zhijie(in

7、t a,char b30)/* 直接排序法 */int i,j,min,temp;char temp130;for(i=0;i<NUM-1;i+)min=i;for(j=i+1;j<NUM;j+)if(aj<amin)temp=aj;aj=amin;amin=temp;strcpy(temp1,bj);/* 字符串拷贝函数进行字符数组交换*/strcpy(bj,bmin);strcpy(bmin,temp1);printf(" 排序后的学生姓名和成绩为:n");for(i=0;i<NUM;i+)printf("%s,%dn",bi

8、,ai);'.void maopao(int a,char b30)/* 冒泡排序法 */int i,j,temp;char temp130;for(i=0;i<NUM-1;i+)for(j=0;j<NUM-i-1;j+)if(aj>aj+1)temp=aj;aj=aj+1;aj+1=temp;strcpy(temp1,bj);strcpy(bj,bj+1);strcpy(bj+1,temp1);printf(" 排序后的学生姓名和成绩为:n");for(i=0;i<=NUM-1;i+)printf("%s,%dn",bi

9、,ai);void xian1(int a,char b30)/* 线性查找,由姓名查找成绩*/char ch30;int i,flag=0;scanf("%s",ch);for(i=0;i<NUM;i+)if(strcmp(ch,bi)=0)printf(" 该学生成绩为 %dn",ai);flag=1;break;if(flag=0)printf("No found!n");void xian2(int a,char b30)/* 由成绩查找姓名*/int i,flag=0;int k;printf(" 请输入成绩

10、 :");scanf("%d",&k);for(i=0;i<NUM;i+)if(k=ai)'.printf(" 该学生姓名为 %s,成绩为 %dn",bi,ai);flag=1;break;if(flag=0)printf("NO found!n");void duifen(int a,char b30)/* 对分查找,由成绩查找姓名(排序后 )*/int i,n,m,k;printf(" 对分查找,请输入成绩:");scanf("%d",&k);n=0;

11、m=NUM-1;if(k<a0)|(k>aNUM-1)printf("error!n");while(n<=m)i=(n+m)/2;if(k=ai)printf(" 学生姓名为 :%s,成绩为 :%dn",bi,ai); break;elseif(k>ai)n=i+1;elsem=i-1;if(ai!=k)|(n>m)printf("NO found!n");void main()/* 主函数及界面*/int x,t,scoreNUM;char nameNUM30; printf("*n&quo

12、t;);printf("欢迎来到学生成绩管理系统n");printf("*n");printf(" 请输入 20 个学生的姓名和成绩n");input(score,name);printf(" 输入的学生姓名和成绩分别为:n");for(x=0;x<NUM;x+)'.printf("%s,%dt",namex,scorex);printf("n");printf("*学生成绩管理系统 *n");printf("*成绩排序直接法请按0

13、成绩排序冒泡法请按1*n");printf("*姓名查找方法一请按2成绩查找方法二请按3*n");printf("*退出系统请按 4*n");printf("请选择 :t");while(1)scanf("%d",&t);switch(t)/* 操作选择 */case 0: zhijie(score,name);duifen(score,name);break;case 1: maopao(score,name);duifen(score,name);break;case 2: printf(&q

14、uot; 请输入学生姓名:n");xian1(score,name);break;case 3:xian2(score,name);break;case 4:exit(0); /* 退出系统 */ break;default: printf(" 请在 0 到 4 之间选择 !n");2、运行界面输入学生信息'.主菜单直接排序冒泡排序线性查找对分查找'.六、体会及收获1、关于体会这次 C 语言课程设计给我最大的体会是充分调用了我们已有的 C 语言知识储备,我想,难度就在于这里,要求我们对每一个知识点,每一个内容板块都了如指掌。如果有哪里不清楚, 编程时就会频繁出错,或者是达不到想要的结果,比如像循环语句、条件语句、选择语句这些常用的就必须烂熟于心。如遇到问题,尝试独立思考,若还没有解决就再翻书或找找资料,自行琢磨,不断尝试用新的方法解决问题也是给我的一个很深的体会。2、关于收获这次有以下几方面收获:1)再次温习了所学的C 语

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论