数据结构课程设计.docx

上传人:b****4 文档编号:4334525 上传时间:2023-05-07 格式:DOCX 页数:27 大小:361.75KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共27页
数据结构课程设计.docx_第2页
第2页 / 共27页
数据结构课程设计.docx_第3页
第3页 / 共27页
数据结构课程设计.docx_第4页
第4页 / 共27页
数据结构课程设计.docx_第5页
第5页 / 共27页
数据结构课程设计.docx_第6页
第6页 / 共27页
数据结构课程设计.docx_第7页
第7页 / 共27页
数据结构课程设计.docx_第8页
第8页 / 共27页
数据结构课程设计.docx_第9页
第9页 / 共27页
数据结构课程设计.docx_第10页
第10页 / 共27页
数据结构课程设计.docx_第11页
第11页 / 共27页
数据结构课程设计.docx_第12页
第12页 / 共27页
数据结构课程设计.docx_第13页
第13页 / 共27页
数据结构课程设计.docx_第14页
第14页 / 共27页
数据结构课程设计.docx_第15页
第15页 / 共27页
数据结构课程设计.docx_第16页
第16页 / 共27页
数据结构课程设计.docx_第17页
第17页 / 共27页
数据结构课程设计.docx_第18页
第18页 / 共27页
数据结构课程设计.docx_第19页
第19页 / 共27页
数据结构课程设计.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(27页珍藏版)》请在冰点文库上搜索。

数据结构课程设计.docx

数据结构课程设计

华南师范大学增城学院

 

课程设计报告册

 

2010——2011学年度二学期

 

计算机院/系网络工程专业09年级1班

课程名称:

数据结构课程设计

姓名:

郑世煜

学号:

200906024103

 

目录

一、程序设计与实现

1、文章编辑

(1)需求分析……………………………………………………2

(2)概要设计……………………………………………………2

(3)详细设计……………………………………………………2

(4)调试报告……………………………………………………4

2、散列表实现电话号码查找系统

(1)需求分析……………………………………………………5

(2)概要设计……………………………………………………5

(3)详细设计……………………………………………………6

(4)调试报告……………………………………………………9

3、学生成绩管理系统

(1)需求分析……………………………………………………12

(2)概要设计……………………………………………………13

(3)详细设计……………………………………………………14

(4)调试报告……………………………………………………17

二、课程设计总结………………………………………………20

三、附录……………………………………………………………………21

四、教师评语及评分……………………………………………………22

 

一、程序设计与实现

1、文章编辑

(1)需求分析

输入一行文字,程序可以统计出英文字母、数字、空格的个数。

要求:

1)分别统计出其中英文字母数和数字个数及总字数并输出;

2)统计某一字符串出现的次数,并输出该次数;

3)删除某一符号,将后面的字符前移,并输出删除后的结果。

存储结构使用线性表,分别用几个子函数实现相应的功能;

输入数据的形式和范围:

可以输入大写、小写的英文字母、任何数字及标号符号。

(2)概要设计

在程序中,1)定义一数组,存放输入的内容,每个字符为数组的一个元素。

2)统计输入内容的字母,数字,符号,空格的个数。

3)定义另一数组,存放要删除的内容,每一个字符未数组的一个元素。

(3)详细设计

#include

main()

{

inti,j,n=0,m=0,zimu=0,number=0,note=0,space=0;//定义变量并赋初值

chara[100];//定义数组范围

charb[10];

printf("pleaseinputastring:

");

//输入文章内容并存放在数组a[]中

for(i=0;i<=n;i++){

scanf("%c",&a[i]);

if(a[i]=='\n')

break;

n++;//统计输入的个数

}

printf("\nYourstringis:

");

//统计字母、数字、符号、空格的个数

for(i=0;i

printf("%c",a[i]);

if(a[i]>=65&&a[i]<=90||a[i]>=97&&a[i]<=122)

zimu++;

if(a[i]>=48&&a[i]<=57)

number++;

if(a[i]>=0&&a[i]<=47&&a[i]!

=32||a[i]>=58&&a[i]<=64||a[i]>=91&&a[i]<=96||a[i]>=123&&a[i]<=254)

note++;

if(a[i]==32)

space++;

}

printf("\nThestatisticalresultsareasfollows:

\n",a[i]);

printf("zimu:

%d\nnumber:

%d\nnote:

%d\nspace:

%d\n",zimu,number,note,space);//输出zimu,number,note,space个数

printf("Thewholenumberis:

%d\n\n",n);//输出输入的个数

printf("Nowdeletethenote:

");

//输入删除的内容

for(j=0;j<=m;j++){

scanf("%c",&b[j]);

if(b[j]=='\n')

break;

m++;

}

for(i=0,j=0;i

if(a[i]==b[j]&&a[i+m-1]==b[m-1]){

a[i]=a[i+m+1];

if(a[i]==a[i+m+1])

break;

}

}

printf("\nThefinalrusultis:

\n");

//删除输入的内容

if(i==0&&a[i+m]==32){

for(i=i;i

a[i]=a[i+m+1];//删除的单词后的空格也删除;

for(i=0;i<=n-m-1;i++)

printf("%c",a[i]);

}

else

{

for(i=i;i

a[i-1]=a[i+m];

for(i=0;i<=n-m-1;i++)

printf("%c",a[i]);

}

printf("\n");

}

(4)调试报告

1、运行程序,根据提示,首先输入“Todayisagoodday!

”,程序执行,统计出结果;

图1.1

2、输入要删除的单词“good”,显示最后结果“Todayisaday!

”,程序完成!

(如图1.2)

图1.2

2、散列表实现电话号码查找系统

(1)需求分析

1)设每个记录有下列数据项:

电话号码、用户名、地址;

2)从键盘输入各记录,以用户名为关键字建立散列表;

3)采用一定的方法解决冲突;

4)查找并显示给定用户名的记录。

(2)概要设计

1)建立散列表,按照散列表建立的要求,包含有以下三个小步骤:

a、获得用户的用户名,且计算用户名首字母的ASCII码(用字符减去字符‘0’);

b、用ASCII码对散列表的长度求余,则得数组中的储存位置;

c、判断储存位置是否还有数据,用线性法查找空位储存;

2)元素的查找与元素的插入相对应,其操作则在建立的基础上增加输出的语句。

3)用线性探测法解决冲突。

(3)详细设计

#include

#include

#include

//定义一个散列表结构体!

structhashlist

{

charname[20];

charnumber[20];

intadr;

}hash[35];

//调用子程序

voidmain()

{

intBulidHash();

intSearchHash();

voidoutput();

intchoise=0;

//设置功能菜单提示

for(choise=100;choise!

=0;)

{

printf("\nMainMenu\t\n");

printf("1Buildanewrecord\t\n");

printf("2Findoutyourrecord\t\n");

printf("3Outputallinfo\t\n");

printf("0Exittheprogram\t\n");

printf("\npleasechoosethenumbertocontinue:

");

scanf("%d",&choise);

printf("Yourchoise:

%d\n",choise);

//switch语句,选择选中的相应功能

switch(choise)

{

case0:

continue;

case1:

printf("NOWenteringtehBuildHash......\n\n");

BulidHash();

continue;

case2:

printf("EnteringSearchHash......\n\n");

SearchHash();

continue;

case3:

printf("Outputall......\n\n");

output();

continue;

default:

printf("Yourinputnotanum\n");

break;

}

}

getch();//让屏幕暂停,“选择、继续"

}

//散列表建立函数

intBulidHash()

{

inthashweight=0;

inthashadr=0;

inti=0;

charname_1[20];

//提示输入用户名以及输出用户名

printf("\nPleaseinputyourname:

");

scanf("%s",name_1);

printf("YourEnternameis:

%s\n",name_1);

//输出相关的测试语句

printf("Yournameis:

%s\n",name_1);

printf("Thefirstletterofyourname:

%c\n",name_1[0]);

//开始构造散列表

hashweight=name_1[0]-'0';//计算首字符权值

hashadr=hashweight%35;//计算并储存字符串的首地址

printf("hashweight:

%dhashadr:

%d\n",hashweight,hashadr);//输出相关的测试语句

//线性查找判断并记录

for(i=0;i<5;i++){

if(!

strcmp(hash[hashadr].name,"\0"))

{

strcpy(hash[hashadr].name,name_1);

printf("Pleaseinputthetelephonenumber:

");

scanf("%s",hash[hashadr].number);

hash[hashadr].adr=hashadr;

printf("name:

%snumber:

%sadr:

%d\n\n",hash[hashadr].name,hash[hashadr].number,hash[hashadr].adr);

return0;

}

hashadr=hashadr+i;//线性查找

}

printf("outofroom!

\n");

return0;}

//查找并输出函数

intSearchHash()

{

inthashweight=0;

inthashadr=0;

inti=0;

charname_1[20];

//输入用户名

printf("\nPleaseinputyourname:

");

scanf("%s",name_1);

printf("YourEnternameis:

%s\n",name_1);

//输出相关的测试语句

printf("Yournameis:

%s\n",name_1);

printf("Thefirstletterofyourname:

%c\n",name_1[0]);

hashweight=name_1[0]-'0';//计算首字符权值

hashadr=hashweight%35;//计算储存字符串的首地址

printf("hashweight:

%dhashadr:

%d\n",hashweight,hashadr);//输出相关的测试语句

for(i=0;i<5;i++)

{

if(!

strcmp(hash[hashadr+i].name,name_1))

{

printf("Yourneedinguser:

%s\n",hash[hashadr+i].name);

printf("Hisnumber:

%s\n",hash[hashadr+i].number);

return0;

}

hashadr=hashadr+i;//线性查找

}

printf("coudn'tfound!

!

\n");

return0;

}

//输出全部函数

voidoutput()

{

inti=0;

for(i=0;i<35;i++)

{

if(hash[i].adr!

=0)

{

printf("Theuser%d:

%s\n",i,hash[i].name);

printf("Hisnumber:

%s\n",hash[i].number);

printf("Hisaddress:

%d\n",hash[i].adr);

printf("\n");

}

}

return;

}

(4)调试报告

1、调试运行源程序,出现调试界面,根据提示,开始进行调试。

(如图2.1)

图2.1

2、根据提示选择,输入1,建立第一个记录。

根据提示输入第一个用户名。

(如图2.2)

图2.2

3、输入电话号码,enter,显示用户的名字、号码、地址等资料。

(如图2.3)

图2.3

4、继续输入1,建立第二个记录。

根据提示输入第二个用户名。

(如图2.4)

图2.4

5、输入电话号码,enter,显示此用户的名字、号码、地址等资料。

(如图2.5)

图2.5

6、输入2,选择要查找的用户功能,接着输入要查找的用户名。

(如图2.6)

图2.6

7、输入3,选择输出全部用户的信息。

(如图2.7)

图2.7

8、输入0,结束、退出算法程序。

3、学生成绩管理系统

(1)需求分析

编写一个简单的学生成绩管理程序,能实现对学生成绩的简单管理。

要求:

建立一个5个学生的信息登记表,每个学生的信息包括:

学号,姓名,3门课的成绩和总分。

程序运行时显示一个简单的菜单,例如:

1.INPUT(press1)

2.SORT(press2)

3.QUERY(press3)

4.EXIT(press4)

其中:

1.INPUT:

对5个学生的信息进行输入;

2.SORT:

对5个学生的总分按降序排序并显示出来;

3.QUERY:

输入一个学号后,查询显示出该学生的有关信息;

4.EXIT:

退出。

(2)概要设计

1、考虑到要排序,不需要删除操作,采用顺序存储比较方便。

2、每个学生是一个元素,包含3方面的信息,采用结构体定义学生结点。

如:

strucustu1

{intnum;

charname[8];

ints[3];

intscore;

}

学生有5个人,则可以定义一个长度为5的结构体数组,如下:

structstu1student[5];

程序分析:

1.输入学生成绩:

循环输入5个学生各部分信息;

2.排序:

可任意选择排序方法,按总分作为关键字排序,结构体数组支持整个结构体作为一个元素进行赋值;

查找:

按学号作为关键字查找。

(3)详细设计

#include

//定义学生数据表结构体

typedefstructstudent

{

intnum;

charname[8];

intscore;

}student;

//字符串输出函数

voidoutputstring(charp[])

{

inti=0;

while(p[i])

{

printf("%c",p[i]);

i++;

}

}

//显示菜单1

voidmenu1()

{

printf("\n\t*****WelcometoStudentPerformanceManager!

*****\t\n");

printf("\nMainMenu1\t\n");

printf("1Input\t\n");

printf("0Exit\t\n");

printf("\npleasechoosethenumbertocontinue:

");

}

//显示菜单2

voidmenu2()

{

printf("\n\t*****WelcometoStudentPerformanceManager!

*****\t\n");

printf("\nMainMenu2\t\n");

printf("1Input\t\n");

printf("2Sort\t\n");

printf("3Query\t\n");

printf("0Exit\t\n");

printf("\npleasechoosethenumbertocontinue:

");

}

//功能1:

录入5组学生数据

voidinput(studentp[])

{

ints=0;

for(;s<5;s++)

{

printf("PleaseinputtheNo.%dstudent'snumber:

",s+1);

scanf("%d",&p[s].num);

printf("PleaseinputtheNo.%dstudent'sname:

",s+1);

scanf("%s",p[s].name);

printf("PleaseinputtheNo.%dstudent'sscore:

",s+1);

scanf("%d",&p[s].score);

printf("\nDatarecorded!

\n\n");

}

menu2();

}

//定功能2:

按降序从高到低排列学生成绩

voidsort(studenta[])

{

inti,j;

studentp[5];

for(i=0;i<5;i++)

{

p[i]=a[i];

}

 

for(i=0;i<5;i++)

for(j=i+1;j<5;j++)

{

if((p[i].score)<(p[j].score))

{

inttemp;

temp=p[i].score;

p[i].score=p[j].score;

p[j].score=temp;

}

}

printf("Theresultfrommintomaxis:

");

for(i=0;i<5;i++)

printf("%d",p[i].score);

printf("\n");

menu2();//显示菜单2

}

//功能3:

查询某一学生数据

intquery(studentp[],inta)

{

inti=0;

for(;i<5;i++)

{

if(p[i].num==a)

{

printf("Theresultis:

\nNumber\tName\t\tScore\n");

printf("%d\t",p[i].num);;

outputstring(p[i].name);

printf("\t");

printf("%d\n",p[i].score);

printf("Querysucceed!

\n");

menu2();

return0;

}

}

return1;

}

voidmain()

{

studenta[5];

intselect;

intexitd=1;

menu1();//显示菜单1

while(exitd)//判断程序是否退出

{

scanf("%d",&select);

printf("\n");

//定义执行选项功能模块

switch(select)

{

case1:

input(a);break;

case2:

sort(a);break;

case3:

{

intnumselect;

printf("Pleaseinputthestudent'snumber(Press0toreturnMainMenu:

)");

scanf("%d",&numselect);

while(query(a,numselect))

{

printf("\nPleaseinputthenextstudent'snumber:

(Press0toreturnMainMenu:

)");

scanf("%d",&numselect);

}

}break;

case'0':

exitd=0;

default:

printf("\nWrongchoice!

Pleaseselectagain!

\n");

menu2();//显示菜单2

}

}

}

(4)调试报告

1、调试运行源程序,出现调试界面,根据提示,开始进行调试。

(如图3.1)

图3.1

2、输入1,选择开始录入5个学生的数据。

(如图3.2)

图3.2

3、录入完毕,提示Datarecorded!

,此时进入菜单2,选择想要的功能。

(如图3.3)

图3.3

4、输入2,选择降序从高到低输出之前录入的学生的成绩。

(如图3.4)

图3.4

5、接着输入3,查找想要的学生的成绩信息。

(如图3.5)

图3.5

6、输入0,结束、退出算法程序。

 

二、课程设计总结

通过这次的课程设计,加强了我的动手、思考和解决问题的能力。

作业结果很重要,但作业过程更重要,在这次的作业中,我学到了很多的东西,也积累了关于做这样的课程设计的一些经验。

通过这一次的课程设计,让我对《数据结构》以及其课程设计的知识也有了更深的理解和认识。

在此次的课程设计的过程中,遇到了不少难题,主要是由于我们学完数据结构已经差不多有一个学期的关系,有很多编程上的语句不是很熟练,加上现在正在学java语言,使得有些语句有点混乱,所以造成了很多困扰。

一开始接触到课题时,一点思路都没有,根本就不知道要选

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2