学生信息管理课程设计报告docWord格式文档下载.docx
《学生信息管理课程设计报告docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生信息管理课程设计报告docWord格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
五.源程序………………………
六.测试与调试…………………
七.心得体会……………………
八.参考文献……………………
一.设计内容
题目:
学生信息管理系统设计
要求:
学生信息包括:
姓名,成绩。
试设计一学生信息管理系统,使之能提供以下功能:
1、能通过键盘输入学生信息:
姓名和成绩2、可将输入的学生信息按成绩高低进行排序(需用两种排序法,可任意选择者两种排序方法)3、学生信息查询功能--按姓名查询(需用两种查找法,并可任意选择两种查找法)
二.设计要求
1,由键盘输入25个学生a~y的某门课程的学习成绩60~99分。
2,将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。
3,用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)
4*,对分搜索法检索某个学生的成绩(输入姓名,显示成绩)
三.设计思路
设计以菜单方式工作的学生信息管理系统,主要有学生信息输入功能,学生信息排序功能,学生信息查询功能三个模块。
本设计的基本操作是通过构造结构体来实现。
通过构建结构体类型数组存放25个学生的基本信息。
再通过函数调用实现各子函数的功能,如:
调通冒泡法排序子函数实现成绩排序。
四.流程图
层次模块图:
直接排序法流程图如下:
冒泡排序法流程图如下:
直接查找法流程图:
对分查找法流程图:
五.程序源代码
#include<
stdio.h>
stdlib.h>
string.h>
#defineN5
structstudent//定义结构体
{
charname[10];
intscore;
}t,student[N];
//定义一个结构体对象和一个结构体数组
voidinput(structstudent)//输入信息函数
inti=0;
ints;
charc;
do
{
printf("
请输入学生信息:
\n"
);
printf("
请输入姓名:
"
scanf("
%10s"
&
student[i].name);
请输入成绩,分数在60-99之间:
scanf("
%5d"
student[i].score);
if(student[i].score<
60||student[i].score>
99)
{
printf("
分数输入有误,请重新输入:
scanf("
s);
student[i].score=s;
}
i++;
是否继续输入:
'
y'
or'
Y'
:
getchar();
c=getchar();
}while((c=='
||c=='
)&
&
i<
N);
system("
pause"
}
voidsort1(structstudent)//直接排序法排列学生成绩
inti,j;
for(i=0;
N-1;
i++)
for(j=i+1;
j<
N;
j++)
if(student[i].score>
student[j].score)//通过比较成绩交换两个学生的全部信息
t=student[i];
student[i]=student[j];
student[j]=t;
}
排序后的结果:
for(i=0;
{
姓名:
%s,成绩:
%d\n"
student[i].name,student[i].score);
voidsort2(structstudent)//冒泡法排列学生成绩
for(i=0;
for(j=0;
N-1-i;
if(student[j].score>
student[j+1].score)
{t=student[j];
student[j]=student[j+1];
student[j+1]=t;
Thesortedresult:
\n"
for(i=0;
%s,成绩:
%d\n"
voidsortname(structstudent)//姓名排序函数
for(i=0;
for(j=i+1;
5;
if(strcmp(student[j].name,student[i].name)<
0)
voidsearch1(structstudent)//直接查找法查询信息函数
inti;
charName[10];
do{
请输入您想要查询的姓名以便查找该学生的成绩:
Name);
if(strcmp(Name,student[i].name)==0)break;
//通过字符串的比较来搜索要查找的姓名
if(i<
N)
查询结果为:
%10s,成绩:
%5d\n"
else
没有找到该学生的信息,不妨再次查询\n"
是否继续查询:
}while(c=='
system("
//暂停工作
voidsearch2(structstudent)//折半查找法查询信息函数
intleft,right,mid;
left=0;
right=N-1;
sortname(student[5]);
请输入您想要查询的姓名:
%s"
if(strcmp(Name,student[0].name)<
0||strcmp(Name,student[N-1].name)>
该姓名不存在\n"
while(left<
=right)
mid=(left+right)/2;
if(strcmp(Name,student[mid].name)==0)
查找的学生姓名是:
%10s,成绩为:
%5d\n"
Name,student[mid].score);
break;
else
if(strcmp(Name,student[mid].name)<
right=mid-1;
elseif(strcmp(Name,student[mid].name)>
left=mid+1;
if((strcmp(Name,student[mid].name)!
=0)||(left>
right))
Nofound\n"
printf("
getchar();
c=getchar();
intmenu()//主菜单函数
intc;
//system("
cls"
/*清屏*/
欢迎来到学生信息管理系统\n"
主菜单\n"
1.输入信息\n"
2.直接排序法排列成绩\n"
3.冒泡法排列成绩\n"
4.直接法查找信息\n"
5.折半法查找信息\n"
6.退出系统\n"
请选择操作方式:
%d"
c);
}while(c<
1||c>
6);
returnc;
voidmain()//主函数
intselect;
while
(1)
select=menu();
switch(select)
case1:
input(student[N]);
case2:
sort1(student[N]);
break;
case3:
sort2(student[N]);
break;
case4:
search1(student[N]);
case5:
search2(student[N]);
case6:
printf("
谢谢使用\n"
exit(0);
//正常退出
}
六.测试与调试
1.主菜单界面
2.输入信息界面
3.直接排序界面
4.冒泡法排序界面
5.直接查找信息界面
6.折半查找信息界面
7.退出系统界面
七.心得体会
通过此次程序设计课程,对于我这个刚入门的人来说,是很有难度的,这次亲手设计的程序也让我学习到不少东西。
当然,我也遇到了许多困难,比如说,我一开始连结构体都弄不清楚,因为压根就没学过,但在自己看书查资料以及问同学之后,我还用结构体完成了这次的程序设计。
此次设计我受益匪浅,不仅在指针、结构、文件等知识上加深了运用和理解,而且,能够自己解决一些问题使程序更加完整。
这次程序设计把平时所学的知识一次性全用上了而且将近半年都没看c语言之类的书了,正好此时有一个程序设计,让我从程序的设计思路到程序的编写过程中把很多以前学过的知识都捡了起来,还把以前没学过的知识也让我学会了,比如结构体,还有,通过张老师给我们补的一节有关指针的课,虽然仅有一次课,但我通过认真听讲,还有上网查相关资料让我对指针了解的更加清楚,通过这次的设计也让我懂得了如何调用函数,如何使用冒泡法排序,如何使用直接查找法查找,更通过了解对分查找法,也让我懂得如何对人名进行排序等,总之这次的程序设计真的让我学到了很多。
还有,编写这个程序对于我即将要考的二级c语言等级考试有极大的帮助,我通过到图书馆查书籍以及请教同学们帮忙等途径,还有利用上课时间、课外时间将近百来个小时完成了所有的课程设计内容,通过这个完成的过程让我巩固了之前学的知识,也让我学到了老师没讲的新知识。
尽管我的程序与报告做得不是很完善,但已经是我尽最大努力写出来的了,对这份我注入了大量时间与精力的程序能如期完成,我很欣慰。
但同时也使我认识到自己所掌握的知识不足,所以在接下来的时间里我要加强C语言方面的知识,尤其是结构体、指针、调用函数以及文件等方面的知识有待加固。
还有这次的程序设计让我充分认识到我c语言方面的知识的不足,也让我学到了很多相关的c语言的知识,比如说结构体,相信通过此次的认识与学习以及我今后对c语言知识的加强,我会顺利通过明年3月份的二级c语言等级考试,同时我觉得这次的程序设计很及时,对于学校在这个时候安排的这个课程设计感到非常的高兴。
八.参考文献
程序设计基础教程(c语言)杨有安等人民邮电出版社2009.
C程序设计辅导与实训(第二版)崔武子等清华大学出版社2009
C语言程序设计(第二版)谭浩强