学生成绩管理系统C语言课程设计报告

上传人:m**** 文档编号:547972189 上传时间:2023-06-30 格式:DOC 页数:23 大小:388.50KB
返回 下载 相关 举报
学生成绩管理系统C语言课程设计报告_第1页
第1页 / 共23页
学生成绩管理系统C语言课程设计报告_第2页
第2页 / 共23页
学生成绩管理系统C语言课程设计报告_第3页
第3页 / 共23页
学生成绩管理系统C语言课程设计报告_第4页
第4页 / 共23页
学生成绩管理系统C语言课程设计报告_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《学生成绩管理系统C语言课程设计报告》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言课程设计报告(23页珍藏版)》请在金锄头文库上搜索。

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

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

3、始内层开始 判断scorejscorej+1?与实现N,继续执行判断是否交换全部比较完 毕,子程序结束输入姓名字符chFor循环检索namei y n赋o值,m赋下标最大值(n+m)/2赋给输入成绩k的大kscorei i -1 n查找查找成绩交换与n amemi nNY丫 交换与 namej+1N丫N不存在此学生k=scorei找到,输出学生成m绩和姓名对分查找、直接排序法流程图 2子程序入口3、冒泡排序法流程图子程序入口4、线性搜索法子程序入口子程序结5、对分搜索法子程序入口四、程序设计中遇到的问题和解决方案swap函数来最开始编程时,直接排序和冒泡排序法中都是通过 实现成绩交换和姓名交换

4、, 以达到排序目的, 但在主函数中调用 时却调用不了, 程序在排序时就不能正常运行, 我的解决方案就 是去掉swap函数,因为有可能有些函数的调用有限制条件,这样改变之后,就不存在限制问题,可以正常排序。另外一个问题就是姓名数组的交换问题, 这个之前是用中间变量 的方式实现交换, 结果调试时显示非法, 于是经过多次改变和尝 试,发现姓名用二维数组更不容易出现问题, 于是就将姓名设置 为二维数组, 然后用字符串拷贝函数来实现交换, 以达到最终排 序的目的。 这样解决之后, 一方面可以使姓名不至于限制在一个 字符内,另外一个好处就是解决了排序过程中姓名交换的问题。五、源程序(含注释)及运行界面1、

5、源程序#include#include#include#define NUM 20void input(int a,char b30) /* 子函数 input 输入 20 个学生姓名 */ int i;for(i=0;i99|ai60)printf(error!n);/*成绩大于 99 或小于 60 则显示错误 */i=i-1;void zhijie(int a,char b30)int i,j,min,temp;char temp130;for(i=0;iNUM-1;i+)min=i;for(j=i+1;jNUM;j+)if(ajamin)temp=aj;aj=amin;amin=temp

6、;strcpy(temp1,bj); /*strcpy(bj,bmin);strcpy(bmin,temp1);/*直接排序法 */字符串拷贝函数进行字符数组交换 */牰湩晴尨排序后的学生姓名和成绩为 :n);for(i=0;iNUM;i+)printf(%s,%dn,bi,ai);void maopao(int a,char b30) /* 冒泡排序法 */int i,j,temp;char temp130;for(i=0;iNUM-1;i+)for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;strcpy(temp1,bj);strcpy(bj,bj+1);st

7、rcpy(bj+1,temp1);?牰湩晴尨排序后的学生姓名和成绩为:n);for(i=0;i=NUM-1;i+)printf(%s,%dn,bi,ai);void xian1(int a,char b30) /* 线性查找,由姓名查找成绩 */ char ch30;int i,flag=0; scanf(%s,ch); for(i=0;iNUM;i+) if(strcmp(ch,bi)=0) %dn,ai); 牰湩晴尨该学生成绩为 flag=1;break;if(flag=0)printf(No found!n);*/ 由成绩查找姓名 void xian2(int a,char b30)/*

8、int i,flag=0;int k;:); 牰湩晴尨请输入成绩 scanf(%d,&k);for(i=0;iNUM;i+)if(k=ai)抽湩晴尨该学生姓名为%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;牰湩晴尨对分查找,请输入成绩 :);scanf(%d,&k);n=0;m=NUM-1;if(kaNUM-1)printf(error!n);while(nai)n=i+1;elsem=i-1; if(ai!

9、=k)|(nm) printf(NO found!n);主函数及界面 */void main() /*int x,t,scoreNUM;char nameNUM30;printf(*printf( 欢迎来到学生成绩管理系统n);printf(*牰湩晴尨请输入 20 个学生的姓名和成绩 n);input(score,name);牰湩晴尨输入的学生姓名和成绩分别为: n);for(x=0;xNUM;x+)printf(%s,%dt,namex,scorex);printf(scanf(%d,&t);switch(t)/*);printf(* printf(* printf(* printf( wh

10、ile(1)成绩排序直接法请按 0 成绩排序冒泡法请按 1*n); 姓名查找方法一请按 2 成绩查找方法二请按 3*n); 退出系统请按 4 *n); 请选择 :t);printf(*学生成绩管理系统*n);操作选择 */case 0: zhijie(score ,n ame);duife n( score ,n ame);break;case 1: maopao(score ,n ame);duife n( score ,n ame);break;?慣敳?抽湩晴尨请输入学生姓名:n);xia n1(score ,n ame);break;case 3: xia n2(score ,n ame); break;退出系统*/case 4: exit(O);/*break;?敤慦泠?瀠楲瑮?请在0到4之间选择!n);2、运行界面输入学生信息主菜单直接排序排序后的学生姓名和成绩为:a, 60s &1d,62f F63制4h,65k, 67KBw70e 71r,72t 73y,74u,75i,76i,770.78p.7?冒泡排序排序后歯当坪舛名和成绩为:附 6诃s ,.&1d 62fw,70e,71r

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号