数据结构课程设计.docx

上传人:b****3 文档编号:5489650 上传时间:2022-12-17 格式:DOCX 页数:35 大小:715.11KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共35页
数据结构课程设计.docx_第2页
第2页 / 共35页
数据结构课程设计.docx_第3页
第3页 / 共35页
数据结构课程设计.docx_第4页
第4页 / 共35页
数据结构课程设计.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

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

数据结构课程设计.docx

数据结构课程设计

 

 

课程设计报告册

 

2011——2012学年度第一学期

 

计算机院/系信息管理与信息系统专业09年级1班

课程名称:

《数据结构课程设计》

1、程序设计与实现

(1)学生成绩管理系统…………………………………………………………3

1.需求分析…………………………………………………………………3

2.概要设计…………………………………………………………………3

3.详细设计…………………………………………………………………4

4.调试分析…………………………………………………………………8

(2)文章编辑……………………………………………………………………12

1.需求分析…………………………………………………………………12

2.概要设计…………………………………………………………………12

3.详细设计…………………………………………………………………12

4.调试分析…………………………………………………………………19

(3)运动会分数统计……………………………………………………………24

1.需求分析…………………………………………………………………24

2.概要设计…………………………………………………………………24

3.详细设计…………………………………………………………………25

4.调试分析…………………………………………………………………29

2、课程设计总结……………………………………………………31

附录……………………………………………………………………32

教师评语………………………………………………………………34

 

1、程序设计与实现

(1)学生成绩管理系统

1.需求分析

用c语言编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。

本程序可对5个学生成绩进行管理,可以按降序输出学生总成绩,可以按学号作为关键字查询学生成绩,可以执行退出程序命令。

1)INPUT:

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

2)SORT:

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

3)QUERY:

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

4)

EXIT:

退出。

2.概要设计

程序设计流程图:

 

本程序采用数组存储方式存储数据;

3.详细设计

#include

#include

structstu1/*采用结构体定义学生结点*/

{

intnum;

charname[20];

ints[3];

intscore;

};

 

structstu1student[5];/*建立一个长度为5的结构体数组*/

voidinput();

voidsort();

voidquery();

main()/*主程序*/

{

inti=1;

while(i!

=0)/*菜单界面设置*/

{

printf("\n\n*Thanksforusingstudentachievementsearchsystem!

*\n");

printf("\n--------------Menu----------------\n\n");

printf("|1.inputscores|\n\n");

printf("|2.sortscores|\n\n");

printf("|3.findscores|\n\n");

printf("|4.exit|\n\n");

printf("------------------------------\n\n");

printf("Pleasechooseonetocontinue:

");

a1:

scanf("%d",&i);

if(i<1||i>4)

{

printf("\nYouroperationiswrong,pleasechooseagain:

");

gotoa1;

}/*跳出多重循环并执行a1*/

switch(i)/*菜单选择*/

{

case1:

input();break;

case2:

sort();break;

case3:

query();break;

case4:

exit(0);

}/*选择4时退出程序*/

}

printf("PleasepressENTERtoexit");

getchar();

getchar();

}

 

voidinput()/*学生信息输入*/

{

intk;

printf("\n\n\nPleaseinputthestudent'sinformation:

\n\n1.number2.name3.mark14.mark25.mark3\n");

for(k=0;k<5;k++)/*利用for循环输入信息,学生学号默认为1~5*/

{

scanf("%d%s%d%d%d",&student[k].num,student[k].name,&student[k].s[0],&student[k].s[1],&student[k].s[2]);

student[k].score=student[k].s[0]+student[k].s[1]+student[k].s[2];

}

}

 

voidsort()/*学生成绩总分降序排列*/

{

inttmp1,i,j,tag=1;

chartmp2[8];

structstu1student2[5];

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

{

student2[i].num=student[i].num;

strcpy(student2[i].name,student[i].name);

student2[i].score=student[i].score;

}

for(i=0;i<4&&tag==1;i++)

{

for(j=0;j<4-i;j++)

{

if(student2[j].score

{

tmp1=student2[j].num;student2[j].num=student2[j+1].num;student2[j+1].num=tmp1;

strcpy(tmp2,student2[j].name);strcpy(student2[j].name,student2[j+1].name);strcpy(student2[j+1].name,tmp2);

tmp1=student2[j].score;student2[j].score=student2[j+1].score;student2[j+1].score=tmp1;

tag=1;

}

}

}/*冒泡法,使用双循环把总分相对较高的学生信息向上移动*/

printf("\n");

printf("number\tname\tscore\n");

for(i=0;i<5;i++)/*通过循环把学生信息通过列表的形式显示出来*/

printf("%d\t%s\t%d\n",student2[i].num,student2[i].name,student2[i].score);

printf("\n\nPleasepressENTERtoreturnMenu!

!

");

getchar();

getchar();

}

voidquery()/*输入学号并查询学生信息*/

{

intn,t=0;

intf;

charj;

printf("\nPleaseinputthenumyouwanttofind:

");

a1:

scanf("%d",&n);

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

{

if(n==student[f].num)

{

printf("numnamemark1mark2mark3score\n");

printf("%d%s%d%d%d%d",student[f].num,student[f].name,student[f].s[0],student[f].s[1],student[f].s[2],student[f].score);

t=1;

break;}

elset=0;

}

if(t==0)

{

printf("\nItisthewrongnumber,pleaseinputagain:

");

gotoa1;

}

printf("\n\nDoyouwanttocontinue?

[YorN]");

scanf("%c",&j);

j=getchar();

getchar();

if(j=='y'||j=='Y')

{

printf("\nPleaseinputthenumyouwanttofind:

");

gotoa1;

}

printf("\nPleasepressENTERtoreturnMenu!

");

getchar();

}

4.调试分析

1)调试过程所遇到的问题:

输入学号时,带有字母,运行出现死循环;

解决方案:

输入学号时,输入的必须是数字。

2)测试数据和测试结果:

测试数据1:

Number

Name

Mark1

Mark2

Mark3

1

Momo

85

83

90

2

Kaka

76

80

85

3

Nono

90

77

80

4

Lily

66

89

90

5

Jojo

50

78

88

测试数据2:

Number

Name

Mark1

Mark2

Mark3

1

Tina

95

80

77

2

Anna

67

83

90

3

Yoga

80

69

88

4

Mini

90

65

92

5

Papa

78

60

56

测试结果:

测试结果1:

测试结果2:

(2)文章编辑

1.需求分析

用C++设计一个程序,输入一行文字(可以输入大写、小写的英文字母,任何数字及标点符号),程序可以统计出文字、数字、空格的个数。

1)分别统计出其中英文字母数和空格数及总字数;

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

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

2.概要设计

While循环主菜单,进入程序后,用gets(str)录入字符串,程序利用isalpha(),isdigit(),strlen()等函数实现对一字符串的字符统计;再进入主功能菜单,分别有四个功能,统计字符数(子程序利用isalpha()和strlen()函数实现统计)、计算字符重复次数、删除还有退出。

其中除了退出功能外,其余三种功能都有各自的子程序完成其任务算法。

3.详细分析

#include

#include

#include

#defineMAX500

voidmain()

{

charstr[MAX];

inta=1;

intb,c,d;

//clrscr();

printf("\nPleaseinputstring:

\n");

gets(str);

while(a>=1&&a<=4)

{

printf("\n-----------------------------------MainMenu----------------------------------");/*主菜单界面设置*/

printf("\n1.statisticalinputsstringofthecharacternumber(Letter,Figure,Space,Punctuation).");

printf("\n2.countthestringrepetitionsnumber.");

printf("\n3.deletethecharacter.");

printf("\n4.exit.");

printf("\n--------------------------------------------------------------------------------\n");

printf("\nPleasechooseonetocontinue:

");

scanf("%d",&a);

if(a<1||a>4)

{

printf("\nYouroperationiswrong!

Pleasechooseagain!

");

scanf("%d",&a);

}/*!

a*/

if(a==1)

{

c=func1(str);

if(c==1)

continue;

}/*a=1*/

if(a==2)

{

c=func2(str);

if(c==1)

continue;

}/*a=2*/

if(a==3)

{

func3(str);

}/*a=3*/

if(a==4)

{

printf("\nDoyoureallywanttoquit?

Continuetopress1,exitpleasepress0.");

scanf("%d",&b);

printf("\nThankyouforyouruse!

");

break;

}/*a=4*/

}/*while*/

}/*main*/

intfunc1(charstr[MAX])/*调用func1函数*/

{

inti=1,j;

inte,d,a,c,sp,sy;

while(i>=1&&i<=6)

{

e=0;

d=0;

sp=0;

sy=0;

a=0;

printf("\n\n1.Letter");

printf("\n2.Figure");

printf("\n3.Space");

printf("\n4.Punctuation");

printf("\n5.Allcharacters");

printf("\n6.Return");

printf("\nPleasechooseonetocontinue:

");

scanf("%d",&i);

if(i<1||i>6)

{

printf("\nYouroperationiswrong!

Pleasechooseagain!

(Pleasepressanykeytoreturn!

)");

scanf("%d",&i);

continue;

}/*!

i*/

if(i==1)

{

for(j=0;j

{

if(isalpha(str[j])!

=0)

{

e=e+1;

}/*e*/

}/*for*/

printf("\n");

puts(str);

printf("ThenumberofLetters:

%d",e);/*统计文章里字母的个数*/

}/*i=1*/

if(i==2)

{

for(j=0;j

{

if(isdigit(str[j])!

=0)

{

d=d+1;

}/*d*/

}/*for*/

printf("\n");

puts(str);

printf("\nThenumberofFigures:

%d",d);/*统计文章里数字的个数*/

}/*i=2*/

if(i==3)

{

for(j=0;j

{

if(str[j]=='')

{

sp=sp+1;

}/*sp*/

}/*for*/

printf("\n");

puts(str);

printf("ThenumberofSpaces:

%d",sp);/*统计文章里空格键的个数*/

}/*i=3*/

if(i==4)

{

for(j=0;j

{

if(isdigit(str[j])!

=0)

{

d=d+1;

}/*d*/

if(isalpha(str[j])!

=0)

{

e=e+1;

}/*e*/

if(str[j]=='')

{

sp=sp+1;

}/*sp*/

}/*for*/

sy=strlen(str)-sp-e-d;

printf("\n");

puts(str);

printf("ThenumberofPunctuations:

%d",sy);/*统计文章里标点符号的个数*/

}/*i=4*/

if(i==5)

{

a=strlen(str);/*把长度赋值给a*/

printf("\n");

puts(str);

printf("Totalcharacternumber:

%d",a);/*统计文章里全部字符的个数*/

}/*i=5*/

if(i==6)

{

c=1;

return(c);

}/*i=6*/

}/*while*/

c=1;

return(c);

}/*func1*/

intfunc2(charstr[MAX])/*调用func2函数*/

{intc,b=1;

intlstr,lchi;

inti,j,count;

charchi[30];

while(b==1)

{

count=0;

printf("\nThestringyouwanttocount:

");/*输入要查询的字符串*/

scanf("%s",chi);

lstr=strlen(str);

lchi=strlen(chi);

if(lstr<=lchi)

{

printf("%d",count);

printf("Beyondtheinputrange,inputagainpleasepress1,returnpleasepress0!

");

scanf("%d",&b);

}/*lstr<=lchi*/

for(i=0;i

{

if(str[i]==chi[0])

{

for(j=0;j

{

if(str[i+j]!

=chi[j])

{

break;/*跳出循环*/

}/*if*/

}/*for*/

if(j==lchi)

{

count++;

}/*j=lchi*/

}/*if*/

}/*for*/

printf("\n");

puts(str);

printf("\nThisstringrepeated%d.",count);

printf("\nContinuetocountpleasepress1,returnpleasepress0!

");

scanf("%d",&b);

}/*while*/

c=1;

return(c);

}/*func2*/

intfunc3(charstr[MAX])/*调用func3函数*/

{

intc,b=1;

inti,j,e,t=0;

chard[1];

while(b==1)

{

t=0;

printf("\nPleaseinputthecharacteryouwanttodelete:

");/*输入要删除的字符*/

scanf("%s",&d[0]);

for(i=0;i

{

if(d[0]==str[i])

{

t=t+1;

e=i;

for(j=i;j

{

str[j]=str[j+1];

}/*for*/

str[j]='\0';

i=e-1;

}/*if*/

}/*for*/

if(t==0)

{

printf("\nItcannotbefoundinthestring%s\n",d);

}/*t*/

puts(str);

printf("\nIfyouwanttodeleteagainpleasepress1,returnpleasepress0!

");

scanf("%d",&b);

}/*while*/

c=1;

return(c);

}/*func3*/

4.调试分析

1)调试过程所遇到的问题:

在执行删除命令时,输入删除的字符时输入两个字母,结果只能删除一个,达不到删除的和输入的字符一致;

解决方案:

输入所要删除的字符时,只能输入一个才能达到删除的和输入的结果一致,如果要删除多个,可分多次删除。

2)测试数据和测试结果:

测试结果1:

测试结果2:

(3)运动会分数统计

1.需求分析

任务:

参加运动会有n个学校,学校编号为1……n。

比赛分成m个项目,项目编号为男子1……m。

项目取前五名积分;积分分别为:

7、5、3、2、1;(m<=20,n<=20)

用C++编写一个运动会分数统计程序,此程序的功能要求:

1)可以输入各个项目的前五名的学校编号;

2)能统计各学校总分;

3)可以按学校编号输出、学校总分排序输出,输出内容包括学校编号,总分和名次;

4)可以按学校编号查询学校各个项目的情况。

2.概要设计

1)该程序包括两个结构体分别为:

structnode1项目信息;

structnode2学校信息;

2)程序分为5个模块:

初始化学校及项目的信息,依次输入每个学校的信息,根据每个学校的成绩计算对应的得分,生成运动会分数排名表,并输出放在数组2中,再进入查询功能。

3.详细设计

#include

structnode1

{

intarray;

intnum;

intscore[20];

inttotal;

intranki

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

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1