资源描述
华中科技大学文华学院C语言程序设计课程设计报告题 目: 学生信息管理系统 学 部: 信息学部 系 : 计算机信息工程系 专 业: 自动化 班 级: 09级(1)班 姓 名: 学 号: 指导老师: 设计时间:2010年12月17日 2010年 12月30日 目录一 设计内容二 设计要求三 设计思路四 流程图五 源程序六 测试与调试七 心得体会八 参考文献一设计内容题目:学生信息管理系统设计要求:学生信息包括:姓名,成绩。试设计一学生信息管理系统,使之能提供以下功能:1、能通过键盘输入学生信息:姓名和成绩2、可将输入的学生信息按成绩高低进行排序(需用两种排序法,可任意选择者两种排序方法)3、学生信息查询功能按姓名查询(需用两种查找法,并可任意选择两种查找法)二设计要求1,由键盘输入25个学生ay的某门课程的学习成绩6099分。2,将分数由低到高排序(用直接排序法和冒泡法),并显示学生姓名和对应的分数。3,用线性搜索法检索某个学生的成绩(输入姓名,显示成绩)4 *, 对分搜索法检索某个学生的成绩(输入姓名,显示成绩)三设计思路设计以菜单方式工作的学生信息管理系统,主要有学生信息输入功能,学生信息排序功能,学生信息查询功能三个模块。本设计的基本操作是通过构造结构体来实现。通过构建结构体类型数组存放25个学生的基本信息。再通过函数调用实现各子函数的功能,如:调通冒泡法排序子函数实现成绩排序。四流程图层次模块图:查询信息退出系统成绩排名主菜单折半法查找直接法查找直接法排序冒泡法排序 直接排序法流程图如下:子程序入口将studenti.score赋给minminstudentj.score?判断是否发生交换交换两学生的全部信息交换,min=studentj;结束,退出冒泡排序法流程图如下:子程序入口开始无交换,令交换标记t=0studentjscorescorej+1.score?令t=1交换两学生的全部信息T=1?退出子程序直接查找法流程图:子程序入口Studenti.name= =Name?退出循环i0?退出子程序输入字符串Name输出该学生的信息输出没有找到该学生对分查找法流程图:子程序入口姓名排序,从小到大leftright?令mid=(left+right)/2studentmid.name=Name?Namenamemid令left=mid+1输入Name输出没有找到输出该学生的信息五程序源代码#include#include#include#define N 5struct student /定义结构体char name10;int score; t, studentN; /定义一个结构体对象和一个结构体数组void input(struct student) /输入信息函数int i=0;int s;char c;doprintf(请输入学生信息:n);printf(请输入姓名:); scanf(%10s,&studenti.name); printf(请输入成绩,分数在60-99之间:); scanf(%5d,&studenti.score); if(studenti.score99)printf(分数输入有误,请重新输入:); scanf(%5d,&s); studenti.score=s;i+;printf(是否继续输入:yorY:);getchar(); c=getchar();while(c=y|c=Y)&iN);system(pause);void sort1(struct student) /直接排序法排列学生成绩int i,j;for( i=0;iN-1;i+)for( j=i+1;jstudentj.score) /通过比较成绩交换两个学生的全部信息t=studenti; studenti=studentj;studentj=t;printf(排序后的结果:n);for( i=0;iN;i+)printf(姓名: %s,成绩:%dn,studenti.name,studenti.score);void sort2(struct student) /冒泡法排列学生成绩int i,j;for (i=0;iN-1;i+)for (j=0;jstudentj+1.score) t=studentj;studentj=studentj+1;studentj+1=t;printf(The sorted result: n);for(i=0;iN;i+)printf(姓名: %s,成绩: %dn,studenti.name,studenti.score);void sortname(struct student) /姓名排序函数int i,j;for(i=0;iN-1;i+)for(j=i+1;j5;j+)if(strcmp(studentj.name,studenti.name)0)t=studenti; studenti=studentj;studentj=t;void search1(struct student) /直接查找法查询信息函数int i;char c;char Name10;doprintf(请输入您想要查询的姓名以便查找该学生的成绩:n); scanf(%10s,Name);for(i=0;iN;i+)if(strcmp(Name,studenti.name)=0) break; /通过字符串的比较来搜索要查找的姓名if(iN)printf(查询结果为:n); printf(姓名: %10s,成绩: %5dn,studenti.name,studenti.score);elseprintf(没有找到该学生的信息,不妨再次查询n);printf(是否继续查询:yorY:);getchar(); c=getchar();while(c=y|c=Y); system(pause); /暂停工作void search2(struct student) /折半查找法查询信息函数int left,right,mid;char Name10;char c;left=0;right=N-1;sortname(student5);doprintf(请输入您想要查询的姓名:); scanf(%s,Name); if(strcmp(Name,student0.name)0)printf(该姓名不存在n); while(left=right)mid=(left+right)/2; if(strcmp(Name,studentmid.name)=0)printf(查找的学生姓名是:%10s,成绩为:%5dn,Name,studentmid.score); break; elseif(strcmp(Name,studentmid.name)0)left=mid+1;if(strcmp(Name,studentmid.name)!=0)|(leftright)printf(No foundn); printf(是否继续查询:yorY:);getchar(); c=getchar();while(c=y|c=Y);system(pause); /暂停工作int menu() /主菜单函数int c;do/system(cls); /*清屏*/printf( 欢迎来到学生信息管理系统 n);printf( 主菜单n);printf( 1.输入信息n);printf( 2.直接排序法排列成绩n);printf( 3.冒泡法排列成绩n);printf( 4.直接法查找信息n);printf( 5.折半法查找信息n);printf( 6.退出系统n);printf( 请选择操作方式:);scanf(%d,&c);while(c6);return c;void main() /主函数int select;while(1)select=menu();switch(select) case 1:input(studentN); break; case 2:sort1(studentN); break; case 3:sort2(studentN); break; case 4:search1(studentN); break; case 5:search2(studentN); break; case 6:printf(谢谢使用n); exit(0); /正常退出 六测试与调试1主菜单界面2.输入信息界面3.直接排序界面4.冒泡法排序界面5.直接查找信息界面6.折半查找信息界面7.退出系统界面七心得体会通过此次程序设计课程,对于我这个刚入门的人来说,是很有难度的,这次亲手设计的程序也让我学习到不少东西。当然,我也遇到了许多困难,比如说,我一开始连结构体都弄不清楚,因为压根就没学过,但在自己看书查资料以及问同学之后,我还用结构体完成了这次的程序设计。此次设计我受益匪浅,不仅在指针、结构、文件等知识上加深了运用和理解,而且,能够自己解决一些问题使程序更加完整。这次程序设计把平时所学的知识一次性全用上了而且将近半年都没看c语言之类的书了,正好此时有一个程序设计,让我从程序的设计思路到程序的编写过程中把很多以前学过的知识都捡了起来,还把以前没学过的知识也让我学会了,比如结构体,还有,通过张老师给我们补的一节有关指针的课,虽然仅有一次课,但我通过认真听讲,还有上网查相关资料让我对指针了解的更加清楚,通过这次的设计也让我懂得了如何调用函数,如何使用冒泡法排序,如何使用直接查找法查找,更通过了解对分查找法,也让我懂得如何对人名进行排序等,总之这次的程序设计真的让我学到了很多。还有,编写这个程序对于我即将要考的二级c语言等级考试有极大的帮助,我通过到图书馆查书籍以及请教同学们帮忙等途径,还有利用上课时间、课外时间将近百来个小时完成了所有的课程设计内容,通过这个完成的过程让我巩固了之前学的知识,也让我学到了老师没讲的新知识。尽管我的程序与报告做得不是很完善,但已经是我尽最大努力写出来的了,对这份我注入了大量时间与精力的程序能如期完成,我很欣慰。但同时也使我认识到自己所掌握的知识不足,所以在接下来的时间里我要加强C语言方面的知识,尤其是结构体、指针、调用函数以及文件等方面的知识有待加固。还有这次的程序设计让我充分认识到我c语言方面的知识的不足,也让我学到了很多相关的c语言的知识,比如说结构体,相信通过此次的认识与学习以及我今后对c语言知识的加强,我会顺利通过明年3月份的二级c语言等级考试,同时我觉得这次的程序设计很及时,对于学校在这个时候安排的这个课程设计感到非常的高兴。八参考文献程序设计基础教程(c语言) 杨有安 等 人民邮电出版社 2009.C程序设计辅导与实训(第二版 ) 崔武子 等 清华大学出版社2009C语言程序设计(第二版) 谭浩强
展开阅读全文