数据结构课程设计.docx
- 文档编号:5489650
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:35
- 大小:715.11KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(35页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
课程设计报告册
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计