学生成绩管理系统C语言课程设计报告.docx
《学生成绩管理系统C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C语言课程设计报告.docx(13页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统C语言课程设计报告
C语言课程设计
设
计
报
告
制作人:
学号:
指导老师:
时间:
一、设计内容和设计要求
1、设计内容
题目:
学生成绩管理系统设计
该系统包含20个学生姓名和成绩信息,可对成绩进行排序,
并实现由姓名查找成绩及由成绩查找姓名。
2、设计要求
1)由键盘输入20个学生(姓名)的某门课程的学习成绩60~99分。
2)将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。
3)用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)。
4)*对分搜索法检索某个学生的成绩(输入成绩,显示姓名)。
2、设计思路
首先是要建立20个学生信息,即学生姓名和学生成绩,使用子函数输入,学生成绩使用一维数组,学生姓名使用二维数组。
然后分别定义四个子函数,即直接排序法、冒泡排序法和线性查找法、对分查找法。
在两个排序法中,用字符串拷贝函数来实现姓名的交换,另外,在用成绩查找姓名时,可以用直接查找,也可以用对分查找法,在这里我两种方法都使用了。
最后在主函数中来设计人机界面,用函数来实现操作选择,对应的情况中就调用之前定义的子函数来完成排序或查找。
3、程序设计流程图
1、程序总体流程
开始
输入学生姓名和成绩
主菜单
排序退出查找
直接排序冒泡排序查找成绩查找姓名
对分查找
2、直接排序法流程图
3、冒泡排序法流程图
4、线性搜索法
5、对分搜索法
4、程序设计中遇到的问题和解决方案
最开始编程时,直接排序和冒泡排序法中都是通过函数来实现成绩交换和姓名交换,以达到排序目的,但在主函数中调用时却调用不了,程序在排序时就不能正常运行,我的解决方案就是去掉函数,因为有可能有些函数的调用有限制条件,这样改变之后,就不存在限制问题,可以正常排序。
另外一个问题就是姓名数组的交换问题,这个之前是用中间变量的方式实现交换,结果调试时显示非法,于是经过多次改变和尝试,发现姓名用二维数组更不容易出现问题,于是就将姓名设置为二维数组,然后用字符串拷贝函数来实现交换,以达到最终排序的目的。
这样解决之后,一方面可以使姓名不至于限制在一个字符内,另外一个好处就是解决了排序过程中姓名交换的问题。
5、源程序(含注释)及运行界面
1、源程序
<>
20
(a[]b[][30])/*子函数输入20个学生姓名*/
{
i;
(0<)
("请输入第个学生的姓名:
"1);
(""[i]);
("请输入第个学生的成绩:
(a[i]>99[i]<60)
("!
\n");/*成绩大于99或小于60则显示错误*/
1;
}
(a[]b[][30])/*直接排序法*/
1[30];
(0<1)
;
(1<)
(a[j]{[j];a[j][];a[];(1[j]);/*字符串拷贝函数进行字符数组交换*/(b[j][]);(b[]1);}}("排序后的学生姓名和成绩为:\n");(0<)("\n"[i][i]);}(a[]b[][30])/*冒泡排序法*/{;1[30];(0<1)(0<1)(a[j]>a[1]){[j];a[j][1];a[1];(1[j]);(b[j][1]);(b[1]1);}("排序后的学生姓名和成绩为:\n");(0<1)("\n"[i][i]);}1(a[]b[][30])/*线性查找,由姓名查找成绩*/{[30]0;("");(0<)(([i])0){("该学生成绩为\n"[i]);1;;}(0){("!\n");}}2(a[]b[][30])/*由成绩查找姓名*/{0k;("请输入成绩:");("");(0<)([i]){("该学生姓名为,成绩为\n"[i][i]);1;;}(0){("!\n");}}(a[]b[][30])/*对分查找,由成绩查找姓名(排序后)*/{;("对分查找,请输入成绩:");("");01;((ka[1]))("!\n");(n<){()/2;([i]){("学生姓名为,成绩为\n"[i][i]);;}(k>a[i])1;1;}((a[i])(n>m))("!\n");}()/*主函数及界面*/{[][][30];("***************************************************************\n");("欢迎来到学生成绩管理系统\n");("***************************************************************\n");("请输入20个学生的姓名和成绩\n");();("输入的学生姓名和成绩分别为:\n");(0<){("\t"[x][x]);}("\n");("*****************学生成绩管理系统***************\n");("*********成绩排序直接法请按0成绩排序冒泡法请按1*******\n");("*********姓名查找方法一请按2成绩查找方法二请按3*******\n");("*********退出系统请按4*******\n");("请选择:\t");(1){("");(t)/*操作选择*/{0:();();;1:();();;2:("请输入学生姓名:\n");1();;3:2();;4:(0);/*退出系统*/;:("请在0到4之间选择!\n");}}}2、运行界面输入学生信息主菜单直接排序冒泡排序线性查找对分查找6、体会及收获1、关于体会这次C语言课程设计给我最大的体会是充分调用了我们已有的C语言知识储备,我想,难度就在于这里,要求我们对每一个知识点,每一个内容板块都了如指掌。如果有哪里不清楚,编程时就会频繁出错,或者是达不到想要的结果,比如像循环语句、条件语句、选择语句这些常用的就必须烂熟于心。如遇到问题,尝试独立思考,若还没有解决就再翻书或找找资料,自行琢磨,不断尝试用新的方法解决问题也是给我的一个很深的体会。2、关于收获这次有以下几方面收获:1)再次温习了所学的C语言知识,加深了理解,同时之前没有注意的一些细节问题引起了重视;2)遇到瓶颈时,尽量独立思考,不断努力,自行解决;3)当程序没有出现语法错误但运行不正常时,就要用新的方式替换,不能一味地陷在死胡同里,用新的思维方式想问题或许会达到想要的效果;4)多花时间钻研问题,坚持不懈地努力,多掌握一些知识,今后解决学习问题才会得心应手。编程不仅只是考查知识是否掌握牢固,也不只是一个时间问题,更重要的是一种毅力,一种坚持,一种迎难而上的韧劲!
[j];
a[j][];
a[];
(1[j]);/*字符串拷贝函数进行字符数组交换*/
(b[j][]);
(b[]1);
("排序后的学生姓名和成绩为:
\n");
("\n"[i][i]);
(a[]b[][30])/*冒泡排序法*/
(a[j]>a[1])
a[j][1];
a[1];
(1[j]);
(b[j][1]);
(b[1]1);
1(a[]b[][30])/*线性查找,由姓名查找成绩*/
[30]0;
("");
(([i])0)
("该学生成绩为\n"[i]);
(0)
2(a[]b[][30])/*由成绩查找姓名*/
0k;
("请输入成绩:
");
([i])
("该学生姓名为,成绩为\n"[i][i]);
(a[]b[][30])/*对分查找,由成绩查找姓名(排序后)*/
("对分查找,请输入成绩:
01;
((ka[1]))
(n<)
()/2;
{("学生姓名为,成绩为\n"[i][i]);
(k>a[i])
((a[i])(n>m))
()/*主函数及界面*/
[][][30];
("***************************************************************\n");
("欢迎来到学生成绩管理系统\n");
("请输入20个学生的姓名和成绩\n");
();
("输入的学生姓名和成绩分别为:
("\t"[x][x]);
("\n");
("*****************学生成绩管理系统***************\n");
("*********成绩排序直接法请按0成绩排序冒泡法请按1*******\n");
("*********姓名查找方法一请按2成绩查找方法二请按3*******\n");
("*********退出系统请按4*******\n");
("请选择:
\t");
(1)
(t)/*操作选择*/
0:
1:
2:
("请输入学生姓名:
1();
3:
2();
4:
(0);/*退出系统*/
:
("请在0到4之间选择!
2、运行界面
输入学生信息
直接排序
冒泡排序
线性查找
6、体会及收获
1、关于体会
这次C语言课程设计给我最大的体会是充分调用了我们已有的C语言知识储备,我想,难度就在于这里,要求我们对每一个知识点,每一个内容板块都了如指掌。
如果有哪里不清楚,编程时就会频繁出错,或者是达不到想要的结果,比如像循环语句、条件语句、选择语句这些常用的就必须烂熟于心。
如遇到问题,尝试独立思考,若还没有解决就再翻书或找找资料,自行琢磨,不断尝试用新的方法解决问题也是给我的一个很深的体会。
2、关于收获
这次有以下几方面收获:
1)再次温习了所学的C语言知识,加深了理解,同时之前没有注意的一些细节问题引起了重视;2)遇到瓶颈时,尽量独立思考,不断努力,自行解决;3)当程序没有出现语法错误但运行不正常时,就要用新的方式替换,不能一味地陷在死胡同里,用新的思维方式想问题或许会达到想要的效果;4)多花时间钻研问题,坚持不懈地努力,多掌握一些知识,今后解决学习问题才会得心应手。
编程不仅只是考查知识是否掌握牢固,也不只是一个时间问题,更重要的是一种毅力,一种坚持,一种迎难而上的韧劲!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1