实践环节报告格式课程设计.docx
《实践环节报告格式课程设计.docx》由会员分享,可在线阅读,更多相关《实践环节报告格式课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
实践环节报告格式课程设计
洛阳理工学院
课程设计说明书
课程名称数据结构
设计课题学生成绩管理系统
专业计算机科学与技术
班级B110501
学号B11050112
姓名李鹏
完成日期2013/6/10
课程设计任务书
设计题目:
学生成绩管理系统
_________________________________________________________
设计内容与要求:
学生成绩管理系统
[问题描述]
编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
[基本要求]
建立一个4个学生的信息登记表,每个学生的信息包括:
学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
(1)信息输入(INPUT)
(2)总分统计(COUNT)
(3)总分排序(SORT)
(4)查询(QUERY)
其中:
(1)对4个学生的信息进行输入;
(2)对每个学生的3门课程统计总分;
(3)对4个学生的总分按降序排序并显示出来;
(4)查询输入一个学号后,显示出该学生的有关信息;
指导教师:
王伟静
2013年6月10日
课程设计评语
成绩:
指导教师:
年月日
【问题描述】
编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。
【基本要求】
建立一个4个学生的信息登记表,每个学生的信息包括:
学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
(1)信息输入(INPUT)
(2)总分统计(COUNT)
(3)总分排序(SORT)
(4)查询(QUERY)
其中:
(1)对4个学生的信息进行输入;
(2)对每个学生的3门课程统计总分;
(3)对4个学生的总分按降序排序并显示出来;
(4)查询输入一个学号后,显示出该学生的有关信息;
【测试数据】
【算法思想】
首先定义一种包含学生信息的结构体,定义全局变量STUDENT规定输入信息的学生总数。
每一个被选择的操作都相当于一个子函数,通过输入数字项来选择所要进行的操作。
然后在主函数外部定义两个子函数等待被调用,分别用来实现排序和查找其中排序用的是冒泡排序的方法。
第一部分完成的是信息的输入通过一个循环语句就可以分别输入第一个人、第二个人……一直到第四个人的所有信息,包括姓名学号和各门课的总成绩。
在输入所有学生的各门课成绩的同时算出每门课的总成绩,作为后面总分统计操作中使用。
第二部分就是总分统计了算法也很简单也是通过一个循环语句就可以顺次的输出每个学生的总成绩,因为总分已经在输入的同时计算出来。
第三部分是总分排序也是整个程序中最为重要和关键的一部分,所使用冒泡法总共有四个学生的信息所以要比较三趟,每一趟比较出一个最小的小的下沉,最大的上升。
通过三趟的比较就已经把成绩的总分排序整理出来,然后返回整个结构体数组的首地址,就可以根据首地址分别输出排序后的学生信息了。
第四部分查找功能也很简单,就是通过输入一个学号,然后就是拿你所输入的学号和已经输入的几个学生的学号进行比较如果相等就输出这个学生的所有信息,如果不相等就输出“没有你所查找的信息”查找结束后通过输入负一结束整个操作。
至此已经完成题目中所要求的所有的任务,其中排序函数和查找函数是写在主函数之外的子函通过主函数调用就可以了。
这就是解决本次实验的整个思路过程和所使用的算法思想。
【模块划分】
首先定义一个结构体然后书写主函数,主函数中包含四个模块第一个模块用来实现信息的输入功能,第二个用来实现总分统计并输出统计结果的功能,第三个用来执行对所统计的总分进行排序的功能,第四个用来执行查找功能即输入一个学生的学号显示该学生的所有信息。
主函数的外部还要定义两个子函数分别用来实现排序和查找。
下面就把每一个模块中所使用的程序分列如下:
1.函数头文件、函数声明、定义的结构体类型
#include
#include
#defineSTUDENT4//总共有STUDENT个学生
voidchange(structstudent*);//函数声明
intfindscore(int,structstudent*);//函数声明
structstudent
{
intnum;//学号
charname[20];//姓名
intFox,C,English,total;
}*stu;//此处也可以直接定义一个容量为四的结构体数组stu[4]
2.主函数中菜单选择
printf("B11050112李鹏\n");
//structstudent*stu;
printf("***************************************\n");
printf("本管理系统包括以下功能\n");
printf("()信息输入(INPUT)\n");
printf("()总分统计(COUNT)\n");
printf("()总分排序(SORT)\n");
printf("()查询(QUERY)\n");
printf("***************************************\n");
printf("请选择所要进行的操作:
");
scanf("%d",&a);
3.选择菜单中的第一模块——信息的输入
if(a==1)
{
printf("请按如下格式输入学生信息:
\n");
printf("学号姓名Fox成绩C成绩English成绩\n");//中间空三格
stu=malloc(sizeof(structstudent)*STUDENT);
for(i=0;i<=STUDENT-1;i++)
{
scanf("%d",&(stu[i].num));//空四格
scanf("%s",(stu[i].name));//空三格
//getchar();
//gets(stu[i].name);
scanf("%d%d%d",&stu[i].Fox,&stu[i].C,&stu[i].English);//空七格空五格
stu[i].total=stu[i].Fox+stu[i].C+stu[i].English;
}
}
4.选择按菜单中的第二模块——总分统计
printf("请选择所要进行的操作:
");
scanf("%d",&a);
if(a==2)
{printf("总分统计如下:
\n");
printf("\n");
for(i=0;i<=STUDENT-1;i++)
{
printf("%s的成绩为%d\n",stu[i].name,stu[i].total);
}
}
5.选择按菜单中的第三模块——总分排序
printf("请选择所要进行的操作:
");
scanf("%d",&a);
if(a==3)
{change(stu);
printf("\n降序排列如下\n");
for(i=0;i<=STUDENT-1;i++)
{
printf("%s的总成绩%d\n",stu[i].name,stu[i].total);
}
}
6.选择按菜单中的第四模块——信息查询
printf("请选择所要进行的操作:
");
scanf("%d",&a);
if(a==4)
{printf("\n\n请输入欲查询的学号(输入-1结束):
\n");
scanf("%d",&check);
while(check!
=-1)
{
findresult=findscore(check,stu);
printf("%s的成绩为\nFox成绩%dC成绩%dEnglish成绩%d总成绩%d",stu[findresult].name,stu[findresult].Fox,stu[findresult].C,stu[findresult].English,stu[findresult].total);
scanf("%d",&check);
}
}
}
7.排序函数——冒泡法
voidchange(structstudent*stu)//排序函数
{
inti,j;
structstudenttemp;
for(j=1;j<=STUDENT-1;j++)
{
for(i=0;i<=STUDENT-1;i++)
{
if(stu[i].total{
temp=stu[i];//交换
stu[i]=stu[i+1];
stu[i+1]=temp;
}
}
}
}
8.查询函数
intfindscore(intcheck,structstudent*stu)//查找函数
{
inti;
for(i=0;i<=STUDENT-1;i++)
{
if(check==stu[i].num)
break;
}
returni;
}
【数据结构】
本次实验中所使用的数据结构是结构体指针变量,通过临时开辟空间来确定总共所要输入的数据元素的总数。
相互之间是以结构体一维数组的形式存储的,相当于顺序表的形式。
【测试情况】
【心得】
程序设计的基本目标是用算法对问题的原始数据进行处理,从而获得所期望的效果。
但这仅仅是程序设计的基本要求。
要全面提高程序的质量,提高编程效率,使程序具有良好的可读性、可靠性、可维护性以及良好的结构,编制出好的程序来,应当是每位程序设计工作者追求的目标。
而要做到这一点,就必须掌握正确的程序设计方法和技术。
而C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
所以采用结构化程序设计方法,对管理系统进行自顶向下,逐步细化,模块化设计.
通过此次实验我熟悉了数据结构的定义和数据的存储形式。
对以往所学的知识进行了回顾,对于结构体的定义和结构体变量的定义有了更深的理解,对于所学的排序算法进行了运用,特别是在本次实验中要求对总分进行降序排序,所使用的排序算法就是用的冒泡法,让最小的数据下沉最大的数据上升。
总之本次实验是一次综合性很强的实验,是对本学期所学知识的一次综合运用,是提高能力的一次很好锻炼。
通过本次实验我对数据结构这门课程有了更深一步的认识,对
于以后的学习也起到了一个很好的指导作用,在以后的学习中我会更加注重知识的运用能力,把所学的知识运用于解决实际问题中来。
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在实验课上,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
【源程序】
#include
#include
#defineSTUDENT4//总共有STUDENT个学生
voidchange(structstudent*);//函数声明
intfindscore(int,structstudent*);//函数声明
structstudent
{
intnum;//学号
charname[20];//姓名
intFox,C,English,total;
}*stu;//此处也可以直接定义一个容量为四的结构体数组stu[4]
main()
{
inti,j,check,findresult;
inta;
printf("B11050112李鹏\n");
//structstudent*stu;
printf("***************************************\n");
printf("本管理系统包括以下功能\n");
printf("()信息输入(INPUT)\n");
printf("()总分统计(COUNT)\n");
printf("()总分排序(SORT)\n");
printf("()查询(QUERY)\n");
printf("***************************************\n");
printf("请选择所要进行的操作:
");
scanf("%d",&a);
if(a==1)
{
printf("请按如下格式输入学生信息:
\n");
printf("学号姓名Fox成绩C成绩English成绩\n");//中间空三格
stu=malloc(sizeof(structstudent)*STUDENT);
for(i=0;i<=STUDENT-1;i++)
{
scanf("%d",&(stu[i].num));//空四格
scanf("%s",(stu[i].name));//空三格
//getchar();
//gets(stu[i].name);
scanf("%d%d%d",&stu[i].Fox,&stu[i].C,&stu[i].English);//空七格空五格
stu[i].total=stu[i].Fox+stu[i].C+stu[i].English;
}
}
printf("请选择所要进行的操作:
");
scanf("%d",&a);
if(a==2)
{printf("总分统计如下:
\n");
printf("\n");
for(i=0;i<=STUDENT-1;i++)
{
printf("%s的成绩为%d\n",stu[i].name,stu[i].total);
}
}
printf("请选择所要进行的操作:
");
scanf("%d",&a);
if(a==3)
{change(stu);
printf("\n降序排列如下\n");
for(i=0;i<=STUDENT-1;i++)
{
printf("%s的总成绩%d\n",stu[i].name,stu[i].total);
}
}
printf("请选择所要进行的操作:
");
scanf("%d",&a);
if(a==4)
{printf("\n\n请输入欲查询的学号(输入-1结束):
\n");
scanf("%d",&check);
while(check!
=-1)
{
findresult=findscore(check,stu);
printf("%s的成绩为\nFox成绩%dC成绩%dEnglish成绩%d总成绩%d",stu[findresult].name,stu[findresult].Fox,stu[findresult].C,stu[findresult].English,stu[findresult].total);
scanf("%d",&check);
}
}
}
voidchange(structstudent*stu)//排序函数
{
inti,j;
structstudenttemp;
for(j=1;j<=STUDENT-1;j++)
{
for(i=0;i<=STUDENT-1;i++)
{
if(stu[i].total{
temp=stu[i];//交换
stu[i]=stu[i+1];
stu[i+1]=temp;
}
}
}
}
intfindscore(intcheck,structstudent*stu)//查找函数
{
inti;
for(i=0;i<=STUDENT-1;i++)
{
if(check==stu[i].num)
break;
}
returni;
}