课程设计目录和正文模板_第1页
课程设计目录和正文模板_第2页
课程设计目录和正文模板_第3页
课程设计目录和正文模板_第4页
课程设计目录和正文模板_第5页
已阅读5页,还剩6页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE1PAGE10目录TOC\o"1-2"\h\z\u1问题描述 12需求分析 13概要设计 13.1设计思路 13.2模块划分 23.3流程图 24详细设计 34.1数据类型的定义 34.2程序分析 34.3程序清单 65测试分析 86课程设计总结 9参考文献 101问题描述设计一个职工管理程序,输出10个职工的姓名和职工号,按职工号由大到小排序,姓名顺序也随之调整,要求输入一个职工号,用折半查找法找出该职工的姓名。从主函数输入要查找的职工号,输出该职工姓名。2需求分析从问题描述中可知:要编写一个职工数据管理程序,输入职工号和姓名并按职工号由大到小排序,则需建立一个子函数input-e(),其功能是输入职工的数据。输入完成后,我们需对职工信息进行排序,此时需用到sort函数。为提高效率,sort函数是用选择法进行排序。排序后就是查找,题目要求输入一个职工号,用折半查找找出该职工的姓名。所以查找需建立子函数search,用来查找职工的信息。那么,整个程序主函数main就包括三个子函数,分别是输入函数input-e、排序函数sort和查找函数search。3概要设计,3.1设计思路(1)首先建立主函数main,在main中有三个子函数,输入、排序、查找。Main函数中用flag作为循环开关变量。先赋值flag=1,输入要查找的职工号,显示查找结果,当不再继续查找时,flag=0.循环结束。否则flag=1.(2)接下来分析第一个子函数输入函数input-e。用一个一维数组存储职工号,为整型。职工的姓名用一个二维数组存储,为字符串。定义一个变量i用i的循环递增输入职工号和职工姓名。(3)接着用选择法进行排序,建立子函数sort。每趟排序从待排记录中找到最大的记录,并与第一个记录进行交换。这样就完成了从大到小排序,是整个记录成递减序列。(4)建立一个查找函数search。功能为对指定的职工号查找出职工的姓名。用loca作为开关变量,赋值loca=0。用一个if语句判断待查的职工号与输入的职工姓名是否相符。若待查找的变量n不在查找范围,则loca=-1.结束。折半查找算法思想是考察表中中间记录,其关键字与给定的信息相符,则查找成功。若大于给定值,则在前半部分再实施折半查找;若小于给定值,则下一步在后半部分查找。一直到查找成功,或确定关键字与所给信息不存在。3.2模块划分本程序包括四个模块:(1)主程序模块,voidmain(){初始化;输入职工号和职工姓名;按职工号从大到小排序;输入职工号查找职工姓名;}(2)输入模块——实现职工号与职工姓名的输入(3)排序模块——实现将职工号从大到小排序(4)查找模块——实现输入一个职工号查找该职工的姓名3.3N-S图调用input_e函数输入职工的数量调sort函数进行排序循环开关变量flag=1输入要查找的职工号调search函数进行查找并显示结果T不查找了?FFlag=0图3.3实验系统N-S图4详细设计4.1数据类型的定义(1)数组类型#defineN10charname[N][8](2)整数类型inti,j,min,temp1,top,bott,loca;4.2程序分析此程序分为四个部分:(1)主函数部分;(2)输入部分;(3)选择排序部分;(4)查找部分。(1)主函数voidmain(){intnum[N],number,flag,c,;charname[N][8];/*定义num[]来存储职工号,name[N][8]来存储职工的姓名*/input_e(num,name);/*输入职工信息*/sort(num,name);/*由大到小排序*/for(flag=1;flag;){printf("\nqingshuruyaochazhaodezhigongming:");scanf(“%d”,&number);/*从键盘输入要查找的职工号*/search(number,num,name);/*通过职工号查找职工姓名*/printf("shifoujixuchazhao?y/n!");getchar();c=getchar();if(c=='N'||c=='n')/*判断是否继续查找*/flag=0;}}(2)输入职工号与职工姓名部分(input_e)voidinput_e(num,name)intnum[];charname[N][8];/*定义num[]来存储职工号,name[N][8]来存储职工的姓名*/{inti;for(i=0;i<N;i++){printf("\nshuruzhigonghao:");scanf("%d",&num[i]);/*输入职工号*/printf("\nshuruzhigongming:");getchar();gets(name[i]);/*输入职工的姓名*/}}(3)选择法排序部分(sort)voidsort(num,name)intnum[];charname[N][8];{inti,j,max,temp1;chartemp2[8];for(i=0;i<N-1;i++){max=i;for(j=i;j<N;j++)if(num[max]>num[j])/*选择*/max=j;temp1=num[i];/*排序*/strcpy(temp2,name[i]);/*交换*/、num[i]=num[max];strcpy(name[i],name[max]);num[max]=temp1;strcpy(name[min],temp2);}printf("\npaixujieguoruxia:\n");for(i=N-1;;i>0;i--)/*由大到小依次输出职工信息*/printf("\n%5d%10s",num[i],name[i]);}(4)查找部分(search)voidsearch(n,num,name)intn,num[];charname[N][8];{inttop,bott,min,loca;loca=0;top=0;bott=N-1;if((n<num[0])||(n>num[N-1]))/*所要查找的记录不在输入的职工信息范围*/loca=-1;/*loca重新赋值*/while((loca==0)&&(top<=bott))/*条件为真就循环*/{min=(bott+top)/2;/*折半查找,取中间值*/if(n==num[min])/*比较*/{loca=min;/*查找成功*/ printf("%dhaozhigongdexingmingshi%s\n",name[loca]);/*根据职工号输出职工姓名*/}elseif(n<num[min])/*向小于min的记录中查找*/ bott=min-1; else top=min+1;}if(loca==0||loca==-1)/*所要查找的记录不在输入的职工信息范围*/printf("%dbuzaibiaozhong.\n",n);}4.3程序清单#include"stdio.h"#defineN10voidinput_e(num,name)intnum[];charname[N][8];{inti;for(i=0;i<N;i++){printf("\nshuruzhigonghao:");scanf("%d",&num[i]);printf("\nshuruzhigongming:");getchar();gets(name[i]);}}voidsort(num,name)intnum[];charname[N][8];{inti,j,max,temp1;chartemp2[8];for(i=0;i<N-1;i++){max=i;for(j=i;j<N;j++)if(num[max]>num[j])max=j;temp1=num[i];strcpy(temp2,name[i]);num[i]=num[max];strcpy(name[i],name[max]);num[max]=temp1;strcpy(name[max],temp2);}printf("\npaixujieguoruxia:\n");for(i=N-1;i>0;i--)printf("\n%5d%10s",num[i],name[i]);}voidsearch(n,num,name)intn,num[];charname[N][8];{inttop,bott,min,loca;loca=0;top=0;bott=N-1;if((n<num[0])||(n>num[N-1]))loca=-1;while((loca==0)&&(top<=bott)){min=(bott+top)/2;if(n==num[min]){loca=min;printf("%dhaozhigongdexingmingshi:%s\n",n,name[loca]);}elseif(n<num[min])bott=min-1;elsetop=min+1;}if(loca==0||loca==-1)printf("%dbuzaibiaozhong.\n",n);}main(){intnum[N],number,flag,c,n;charname[N][8];input_e(num,name);sort(num,name);for(flag=1;flag;){printf("\nqingshuruyaochaozhaodezhigonghao:");scanf("%d",&number);search(number,num,name);printf("shifoujixuchazhao?y/n!");getchar();c=getchar();if(c=='N'||c=='n')flag=0;}}5测试分析测试数据及结果如下:按照题目所给的职工信息在键盘上进行输入,并得到测试数据。按从大到小的排序结果:从结果显示来看,确实是按从大到小排序的。查找结果也与编程的理论值一样,所以,此程序正确。6课程设计总结通过这次课程设计让我对数据结构中的排序和查找算法有了更深的理解,同时也学会了灵活运用编写简单程序的知识。虽然遇到了一些问题,但我们尽自己最大的努力来解决。此程序开始看时觉得比较简单,子函数只有三个,而且都是我们在数据结构课中用过的。但实际编写时还是遇到了一些细节问题。这是由于我们平时太少编程的原因。有时一个标点符号的输入错误让我忙了很久。这些都是因为基础知识不牢固造成的。在编程结束后,我们相互检查,发现我们在格式上都存在很多错误,所以让我们提醒自己还要更加认真,主动Word的排版和使用。当然,在编程期间我们小组成员相互帮助相互学习也让我有了很大的进步。也对以后的学习有所帮助。作为本组的小组长,我希望自己能在学会编写这个程序的基础上还有其他进步。所以我尽量与组员多交流、多讨论,也尽自己所能去帮助其他同学。从中也体会到了团队合

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论