1、数据结构课程设计 课程设计报告册2011 2012 学年度 第 一 学期 计算机 院/系 信息管理与信息系统 专业 09年级 1 班课程名称:数据结构课程设计 1、程序设计与实现(1)学生成绩管理系统31. 需求分析 32. 概要设计 33. 详细设计 44. 调试分析 8(2)文章编辑121. 需求分析 122. 概要设计 12 3. 详细设计 124. 调试分析 19(3)运动会分数统计241. 需求分析 242. 概要设计 243. 详细设计 254. 调试分析 292、课程设计总结 31附录 32教师评语 341、程序设计与实现(1)学生成绩管理系统1. 需求分析用c语言编写一个简单的
2、学生信息管理程序,能实现对学生信息的简单管理。本程序可对5个学生成绩进行管理,可以按降序输出学生总成绩,可以按学号作为关键字查询学生成绩,可以执行退出程序命令。1) INPUT:对5个学生的信息进行输入;2) SORT:对5个学生的总分按降序排序并显示出来;3) QUERY:输入一个学号后,查询显示出该学生的有关信息;4) EXIT:退出。2. 概要设计程序设计流程图:本程序采用数组存储方式存储数据;3. 详细设计#include#includestruct stu1 /*采用结构体定义学生结点*/ int num; char name20; int s3; int score;struct
3、stu1 student5; /*建立一个长度为5的结构体数组*/void input();void sort();void query();main() /*主程序*/ int i=1; while(i!=0) /*菜单界面设置*/ printf(n n * Thanks for using student achievement search system! *n); printf(n -Menu-n n); printf( | 1.input scores |n n); printf( | 2.sort scores |n n); printf( | 3.find scores |n n
4、); printf( | 4.exit |n n ); printf( - n n); printf( Please choose one to continue: ); a1:scanf(%d,&i); if (i4) printf(n Your operation is wrong, please choose again: ); goto a1; /*跳出多重循环并执行a1*/ switch(i) /*菜单选择*/ case 1:input();break; case 2:sort();break; case 3:query();break; case 4:exit(0); /*选择4时
5、退出程序*/ printf(Please press ENTER to exit); getchar(); getchar();void input() /*学生信息输入*/ int k; printf(nnn Please input the students information: nn1.number 2.name 3.mark1 4.mark2 5.mark3n); for(k=0;k5;k+) /*利用for循环输入信息,学生学号默认为15*/ scanf(%d %s %d %d %d,&studentk.num,studentk.name,&studentk.s0,&studen
6、tk.s1,&studentk.s2); studentk.score=studentk.s0+studentk.s1+studentk.s2; void sort() /*学生成绩总分降序排列*/ int tmp1,i,j,tag=1; char tmp28; struct stu1 student25; for(i=0;i5;i+) student2i.num=studenti.num; strcpy(student2i.name,studenti.name); student2i.score=studenti.score; for(i=0;i4&tag=1;i+) for(j=0;j4-
7、i;j+) if (student2j.scorestudent2j+1.score) tmp1=student2j.num; student2j.num=student2j+1.num; student2j+1.num=tmp1; strcpy(tmp2,student2j.name); strcpy(student2j.name,student2j+1.name); strcpy(student2j+1.name,tmp2); tmp1=student2j.score; student2j.score=student2j+1.score; student2j+1.score=tmp1; t
8、ag=1; /*冒泡法,使用双循环把总分相对较高的学生信息向上移动*/ printf(n); printf(numbertnametscoren); for(i=0;i5;i+) /*通过循环把学生信息通过列表的形式显示出来*/ printf(%dt%st%dn,student2i.num,student2i.name,student2i.score); printf(n n Please press ENTER to return Menu !); getchar(); getchar();void query() /*输入学号并查询学生信息*/ int n,t=0; int f; char
9、 j; printf(n Please input the num you want to find:); a1:scanf(%d,&n); for(f=0;f5;f+) if(n=studentf.num) printf(num name mark1 mark2 mark3 scoren); printf( %d %s %d %d %d %d,studentf.num,studentf.name,studentf.s0,studentf.s1,studentf.s2,studentf.score); t=1; break; else t=0; if(t=0) printf(n It is t
10、he wrong number,please input again:); goto a1; printf(nn Do you want to continue? Y or N ); scanf(%c,&j); j=getchar(); getchar(); if (j=y|j=Y) printf(n Please input the num you want to find:); goto a1; printf(n Please press ENTER to return Menu!); getchar();4. 调试分析1) 调试过程所遇到的问题:输入学号时,带有字母,运行出现死循环;解决
11、方案:输入学号时,输入的必须是数字。2) 测试数据和测试结果:测试数据1:NumberNameMark1Mark2Mark31Momo8583902Kaka7680853Nono9077804Lily6689905Jojo507888测试数据2:NumberNameMark1Mark2Mark31Tina9580772Anna6783903Yoga8069884Mini9065925Papa786056测试结果:测试结果1: 测试结果2:(2)文章编辑1. 需求分析用C+设计一个程序,输入一行文字(可以输入大写、小写的英文字母,任何数字及标点符号),程序可以统计出文字、数字、空格的个数。1)
12、分别统计出其中英文字母数和空格数及总字数;2) 统计某一字符串出现的次数,并输出该次数;3) 删除某一符号,并将后面的字符前移。2. 概要设计While循环主菜单,进入程序后,用gets(str)录入字符串,程序利用isalpha(),isdigit(),strlen()等函数实现对一字符串的字符统计;再进入主功能菜单,分别有四个功能,统计字符数(子程序利用isalpha()和strlen()函数实现统计)、计算字符重复次数、删除还有退出。其中除了退出功能外,其余三种功能都有各自的子程序完成其任务算法。3. 详细分析#include #include #include #define MAX
13、500 void main() char strMAX; int a=1; int b,c,d; /clrscr(); printf(nPlease input string:n ); gets(str); while(a=1 &a=4) printf(n- Main Menu -); /*主菜单界面设置*/ printf(n 1.statistical inputs string of the character number(Letter,Figure,Space,Punctuation).); printf(n 2.count the string repetitions number.
14、); printf(n 3.delete the character.); printf(n 4.exit.); printf(n-n); printf(n Please choose one to continue: ); scanf(%d,&a); if(a4) printf(n Your operation is wrong!Please choose again! ); 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;
15、/*a=2*/ if(a=3) func3(str); /*a=3*/ if(a=4) printf(nDo you really want to quit?Continue to press 1,exit please press 0.); scanf(%d,&b); printf(n Thank you for your use!); break; /*a=4*/ /*while*/ /*main*/ int func1(char strMAX) /*调用func1函数*/ int i=1,j; int e,d,a,c,sp,sy; while(i=1 &i=6) e=0; d=0; sp
16、=0; sy=0; a=0; printf(nn 1.Letter); printf(n 2.Figure); printf(n 3.Space); printf(n 4.Punctuation); printf(n 5.All characters); printf(n 6.Return); printf(n Please choose one to continue: ); scanf(%d,&i); if(i6) printf(nYour operation is wrong!Please choose again!(Please press any key to return!); s
17、canf(%d,&i); continue; /*!i*/ if(i=1) for(j=0;jstrlen(str);j+) if(isalpha(strj)!=0) e=e+1; /*e*/ /*for*/ printf(n); puts(str); printf(The number of Letters: %d,e); /*统计文章里字母的个数*/ /*i=1*/ if(i=2) for(j=0;jstrlen(str);j+) if(isdigit(strj)!=0) d=d+1; /*d*/ /*for*/ printf(n); puts(str); printf(nThe numb
18、er of Figures: %d,d); /*统计文章里数字的个数*/ /*i=2*/ if(i=3) for(j=0;jstrlen(str);j+) if(strj= ) sp=sp+1; /*sp*/ /*for*/ printf(n); puts(str); printf(The number of Spaces: %d,sp); /*统计文章里空格键的个数*/ /*i=3*/ if(i=4) for(j=0;jstrlen(str);j+) if(isdigit(strj)!=0) d=d+1; /*d*/ if(isalpha(strj)!=0) e=e+1; /*e*/ if(
19、strj= ) sp=sp+1; /*sp*/ /*for*/ sy=strlen(str)-sp-e-d; printf(n); puts(str); printf(The number of Punctuations: %d,sy); /*统计文章里标点符号的个数*/ /*i=4*/ if(i=5) a=strlen(str); /*把长度赋值给a*/ printf(n); puts(str); printf(Total character number: %d,a); /*统计文章里全部字符的个数*/ /*i=5*/ if(i=6) c=1; return(c); /*i=6*/ /*w
20、hile*/ c=1; return(c); /*func1*/ int func2(char strMAX) /*调用func2函数*/ int c,b=1; int lstr,lchi; int i,j,count; char chi30; while(b=1) count=0; printf(nThe string you want to count:); /*输入要查询的字符串*/ scanf(%s,chi); lstr=strlen(str); lchi=strlen(chi); if(lstr=lchi) printf(%d,count); printf(Beyond the in
21、put range,input again please press 1,return please press 0!); scanf(%d,&b); /*lstr=lchi*/ for(i=0;ilstr;i+) if(stri=chi0) for(j=0;jlchi;j+) if(stri+j!=chij) break; /*跳出循环*/ /*if*/ /*for*/ if(j=lchi) count+; /*j=lchi*/ /*if*/ /*for*/ printf(n); puts(str); printf(nThis string repeated %d. ,count); pri
22、ntf(nContinue to count please press 1,return please press 0! ); scanf(%d,&b); /*while*/ c=1; return(c); /*func2*/ int func3(char strMAX) /*调用func3函数*/ int c,b=1; int i,j,e,t=0; char d1; while(b=1) t=0; printf(nPlease input the character you want to delete:);/*输入要删除的字符*/ scanf(%s,&d0); for(i=0;istrle
23、n(str);i+) if(d0=stri) t=t+1; e=i; for(j=i;jstrlen(str)-1;j+) strj=strj+1; /*for*/ strj=0; i=e-1; /*if*/ /*for*/ if(t=0) printf(nIt can not be found in the string %sn,d); /*t*/ puts(str); printf(nIf you want to delete again please press 1,return please press 0! ); scanf(%d,&b); /*while*/ c=1; return
24、(c); /*func3*/4. 调试分析1) 调试过程所遇到的问题:在执行删除命令时,输入删除的字符时输入两个字母,结果只能删除一个,达不到删除的和输入的字符一致;解决方案:输入所要删除的字符时,只能输入一个才能达到删除的和输入的结果一致,如果要删除多个,可分多次删除。2) 测试数据和测试结果:测试结果1:测试结果2:(3)运动会分数统计1. 需求分析任务:参加运动会有n个学校,学校编号为1n。比赛分成m个项目,项目编号为男子1m。项目取前五名积分;积分分别为:7、5、3、2、1;(m=20,n=20)用C+编写一个运动会分数统计程序,此程序的功能要求:1) 可以输入各个项目的前五名的学校编号;2) 能统计各学校总分;3) 可以按学校编号输出、学校总分排序输出,输出内容包括学校编号,总分和名次;4) 可以按学校编号查询学校各个项目的情况。2. 概要设计1) 该程序包括两个结构体分别为:struct node1 项目信息;struct node2 学校信息;2) 程序分为5个模块:初始化学校及项目的信息,依次输入每个学校的信息,根据每个学校的成绩计算对应的得分,生成运动会分数排名表,并输出放在数组2中,再进入查询功能。3. 详细设计#includestruct node1 int array; int num; int score20; int total; int ranki
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1