软件工程课程设计报告.docx
- 文档编号:22869095
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:27
- 大小:59.74KB
软件工程课程设计报告.docx
《软件工程课程设计报告.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
软件工程课程设计报告
软件工程课程设计报告
一、需求分析:
1、本系统只有一个文件,包含学生姓名、成绩。
姓名、语文成绩、数学成绩、英语成绩均由键盘输入。
(1)文件名:
file
(2)文件类型:
顺序文件
(3)文件结构姓名数学语文英语
数据类型字符型单精度数单精度数单精度数
数据占用长度20字节4字节4字节4字节
(4)文件记录长度:
32
2、输出时根据操作显示排名或查询成绩,按姓名、数学成绩、语文成绩、英语成绩。
3、该程序具有初始化学生成绩,录入学生成绩,修改学生成绩,删除学生成绩,添加学生成绩,按总成绩查询,按姓名查询,按总分查询排名,按英语成绩查询,显示所有学生的数据等功能。
4、测试数据:
例如:
姓名语文数学英语
小五8090100
小王908579
小李879195
按姓名查询:
输入姓名小五,显示语文成绩80,数学成绩90,英语成绩100
按语文成绩排序:
姓名语文数学英语
小王908579
小李879195
小五8090100
5、数据流图:
二、概要设计:
1、类的定义格式:
Class<类名>
{Public
<成员函数或函数数据成员的说明>:
Private:
<数据成员或成员函数的说明>
}
<各个成员的实现>
2、定义数组类型
ADTStu
{DATA:
下标index和数据元素值value组成的数据堆集合,其中任意两个数据队的下标index各不相同。
Operstions:
Creat():
建立一个数组。
Retrieve(i):
返回下标位I的元素值。
Store(i,x):
将下标位I的数据对的值为x.
}
3、义字符串类型
ADTString
{DATA:
Operation:
字符串是由n(≤0)各字符组成的有限序列S=”a1.a2.a3……an”(i≤n)
Creat():
建立一个空串
Destroy():
撤销一个串
Length():
求串长
Setnull():
置为空串
Assign():
串赋值
Contat():
串连接
Insert():
串插入
Delete():
串删除
Replace():
串替位
Substr():
取子串
Find():
求子串在主串中的位置
}
三、详细设计
1、主程序模块的基本算法
voidmain()
{
初始化
do
{根据显示键入操作符
}while(根据状态标志位返回);
do{
switch(键入的操作符)
{
case'0':
{录入模块}
case'4':
{总成绩查询模块}
case'5':
{按姓名查询模块}
case'1':
{添加成员模块}
case'2':
{删除模块}
case'3':
{修改模块}
case'6':
{显示所有学生成绩模块}
case'7':
{按总分查询排名}
case'8':
{按语文查询排名}
case'9':
{按数学查询排名}
case'y':
{按英语查询排名}
}cout<<"您想继续进行其他操作吗?
(y/n)"< boolflag4=0; do { cin>>w; if(w! ='y'&&w! ='n') cout<<"指令错误! 请重新输入! "< else flag4=1; }while(flag4==0); if(w=='y') cout<<"请输入操作代码(0录入/4按总分查询/5按姓名查询/1增加人员/2删除人员/3修改数据/6显示所有成员数据/7按总分排名/8按语文排名/9按数学排名/y按英语排名)"< cin>>p; }while(w=='y'); for(intx=0;x { deletes[x]; cout<<"deleteallmembers! "< } 2、子程序函数清单(因为所用到的算法比较简单算法略) voidmain(); voidLURU(); voidCJC(); voidNMC(); voidADDP(); voidDEL(); voidXIU(); voidDISPLAY(); voidSortZ(); voidSortC(); voidSortM(); voidSortE(); 3、学生成绩管理软件由主控模块形成顶层模块,由初始化,数据录入,增加人员,删除人员,修改数据,按总成绩查询,按语文成绩查询,按数学成绩查询,按英语成绩查询模块组成一级模块如图: 四、调试分析: (1)由于我们在各模块中用到的状态标志位太多,而且在定义时出现了错误,在老师和同学们的帮助下,我们组的成员齐心协力使得错误很快得到了解决。 (2)在一开始时我们忽略了定义友元,导致后面程序运行时遇到了问题,但是后来在九系同学的帮助下得以一一解决。 开始时,我们在定义存储文件长度空间过小,使得程序无法正常运行,后来我们又将存储空间定义为50个单元,然而在实际上我们却只用到了32个单元,在一定程度上造成了存储空间的浪费。 (3)该程序输入的内容是按顺序存储,但是在因为查找时从第一个存储单元开始顺序查找,所以导致了查询效率的降低。 还有,在各个模块中,只有录入模块进行单独的调试,而其他模块则必须和录入模块合并使用才可以调试。 因为我们的水平有限,所以可能会使该程序的编写显得过于冗长。 (4)刚开始因为主模块不够完善,调用时老出现问题,而且各子模块和主模块的衔接不够完善,经过本族成员的努力攻关,问题终于地得到解决 五、用户说明书: 1、本程序的运行环境为DOS操作系统执行文件student.exe 2、当用户启动该程序,可根据提示信息,按相应的快捷键,进行相应的操作,首先按0键进行录入成绩,完成之后,系统会提示是否继续操作并按Y/N进行选择,可继续按相应的数字键执行工作,完成查找,删除,排名等功能。 六、心得体会 开始设计自己的程序时心中充满了欣喜,觉得很新鲜,可真正做起来才知道其中的困难。 经过两个星期的编程,我们体会到编程的艰辛与复杂。 由于我知识学的不扎实,刚开始总也理不清头绪,在老师的合理安排和指导下我们本着先从大处着眼,逐步分工细化的原则,我们分头查找资料,共同讨论发扬团结一致的精神,进展非常顺利, 通过两周的软件工程课程设计的学习,使我对C语言的编程有了更进一步的了解,并且认识到书本上的知识只是C语言的基础部分,只有通过真正的实践才能接触到C语言本身的、内在的、最根本的问题,数据结构和算法是最灵魂的东西,这就促使我们在实践中倍加努力掌握真谛 七、原程序清单 #include #include #include voidLURU();//录入模块 voidCJC();//按总成绩查询模块 voidNMC();//按姓名查询 voidADDP();//添加成员模块 voidDEL();//删除模块 voidXIU();//修改模块 voidDISPLAY();//显示模块 voidSortZ();//按总分查询模块 voidSortC();//按语文查询模块 voidSortM();//按数学查询模块 voidSortE();//按英语查询模块 inti=0; ofstream*file[50];//定义插入的文件 intj=0; boolflag2=0;//状态标志位 classstu//定义的类 { charname[20]; doublemath,chinese,english,average,sum;//定义存储空间 public: //公有成员 stu() { } stu(charn[20],doublema,doublechin,doubleeng) { strcpy(name,n); math=ma; chinese=chin; english=eng; } doublegetsum()//定义求和函数 { sum=chinese+english+math; returnsum; } doublegetaver()//定义求平均成绩 { average=getsum()/3; returnaverage; } friendvoidmain(); friendvoidLURU(); friendvoidCJC(); friendvoidNMC(); friendvoidADDP(); friendvoidDEL(); friendvoidXIU(); friendvoidDISPLAY(); friendvoidSortZ(); friendvoidSortC(); friendvoidSortM(); friendvoidSortE();//定义用到的友元类 }; stu*s[50];//定义指针数组,即能容纳50个学生 voidmain()//主函数 { cout<<"请选择您需要的操作! "< cout<<"操作: "< cout<<"(0)数据录入"< cout<<" (1)增加人员"< cout<<" (2)删除人员"< cout<<"(3)修改数据"< cout<<"查询: "< cout<<"(4)按总成绩查询"< cout<<"(5)按姓名查询"< cout<<"(6)输出所有学生的数据"< cout<<"成绩名词"< cout<<"(7)按总分查询排名"< cout<<"(8)按语文查询排名"< cout<<"(9)按数学查询排名"< cout<<"(y)按英语查询排名"< cout<<"选择相关操作请输入相对的括号里的阿拉伯数字! "< charp;charw;//定义2个字符变量 do { cin>>p; if((p>='0'&&p<='10'))//输入的字符应满足的条件 flag2=1; else cout<<"指令错误! 请重新输入: "< }while(flag2==0); do{ switch(p)//循环语句 { case'0': { LURU(); break;//跳出 } case'4': { CJC(); break; } case'5': { NMC(); break; } case'1': { ADDP(); break; } case'2': { DEL(); break; } case'3': { XIU(); break; } case'6': { DISPLAY(); break; } case'7': { SortZ(); break; } case'8': { SortC(); break; } case'9': { SortM(); break; } case'y': { SortE(); break; } } cout<<"您想继续进行其他操作吗? (y/n)"< boolflag4=0; do { cin>>w;//键盘输入 if(w! ='y'&&w! ='n') cout<<"指令错误! 请重新输入! "< else flag4=1; }while(flag4==0); if(w=='y') cout<<"请输入操作代码(0录入/4按总分查询/5按姓名查询/1增加人员/2删除人员/3修改数据/6显示所有成员数据/7按总分排名/8按语文排名/9按数学排名/y按英语排名)"< cin>>p; }while(w=='y'); for(intx=0;x { deletes[x]; cout<<"deleteallmembers! "< } } voidCJC()//按成绩查询模块 { doublet;charc; do { intflag1=0; cout<<"请输入你要查询学生的总成绩"< cin>>t; for(intq=0;q { if(s[q]->getsum()==t)//按查询条件查找 { flag1=1; cout<<"您要查询的学生是: "<<(*s[q]).name< } } if(flag1==0) cout<<"对不起! 您要查询的学生不存在! "< cout<<"您想继续查询吗? (y/n)"< cin>>c; if(c! ='y'&&c! ='n') { cout<<"指令错误! 请重新输入! "< cin>>c; } } while(c=='y'); } voidNMC()//按名字查询模块 { charn[20];intj=0;charc; do{ intflag=0; cout<<"请输入你要查询的学生姓名"< cin>>n; for(intj=0;j { if(strcmp(n,(*s[j]).name)==0)//顺序查找 { flag=1; cout<<"您要查询的学生是: "<<(*s[j]).name< cout<<(*s[j]).name<<"的总成绩成绩是"<<(*s[j]).getsum()< "<<(*s[j]).getaver()< }//输出 } if(flag==0) cout<<"对不起! 您要查询的学生不存在! "< cout<<"您想继续查询吗? (y/n)"< cin>>c; if(c! ='y'&&c! ='n') { cout<<"指令错误! 请重新输入! "< cin>>c; } } while(c=='y'); } voidLURU()//录入模块 { charc; charname[20];doublemath,chinese,english; do{ cout<<"请输入姓名"< cin>>name; cout<<"请输入数学成绩: "< cin>>math; cout<<"请输入语文成绩: "< cin>>chinese; cout<<"请输入外语成绩: "< cin>>english; file[j]=newofstream("d: \\document",ios: : ate); *file[j]<<"姓名"< j++; s[i]=newstu(name,math,chinese,english); i++; cout<<"数据录入成功,想继续录入吗(y/n)"< cin>>c; flag2=0; do { if(c! ='y'&&c! ='n') { cout<<"指令错误! 请重新输入! "< cin>>c; } else flag2=1; }while(flag2==0); }while(c=='y'); } voidADDP()//添加模块 { charname[20];doublemath,chinese,english; charc; do { cout<<"请输入您要增加的学生的姓名: "< cin>>name; cout<<"请输入数学成绩: "< cin>>math; cout<<"请输入语文成绩: "< cin>>chinese; cout<<"请输入外语成绩: "< cin>>english; file[j]=newofstream("d: \\document",ios: : ate);//插入存储 *file[j]<<"姓名"< j++; s[i]=newstu(name,math,chinese,english);//建立新的存储空间 i++; cout<<"数据录入成功,想继续录入吗(y/n)"< cin>>c; if(c! ='y'&&c! ='n') { cout<<"指令错误! 请重新输入! "< cin>>c; } }while(c=='y'); } voidDEL()//删除模块 { charname[20];boolflag3=0;charc; do{ cout<<"请输入您要删除的学生姓名: "< cin>>name; for(inth=0;h { if(strcmp(name,s[h]->name)==0)//定位 { flag3=1; i--; do{ s[h]=s[h+1]; h++;// }while(h<=i); } } if(flag3==0) cout<<"您要求删除的对象本来就不存在! 请检查输入的正确性! "; cout<<"要继续删除吗? (y/n)"< cin>>c; if(c! ='y'&&c! ='n') { cout<<"指令错误! 请重新输入! "< cin>>c; } }while(c=='y'); } voidXIU()//修改模块 { charname[20];doublemat,chin,eng;flag2=0;//定义每个量的存储空间 charc; do { cout<<"请输入您要修改的学生的姓名: "< cin>>name; for(inth=0;h { if(strcmp(name,s[h]->name)==0)//定位 { flag2=1; cout<<"请输入新的数学成绩: "< cin>>mat; cout<<"请输入新的语文成绩: "< cin>>chin; cout<<"请输入新的外语成绩: "< cin>>eng; s[h]->chinese=chin;//修改 s[h]->math=mat; s[h]->english=eng; cout<<"数据修改成功! "; } } if(flag2==0) { cout<<"您要修改的学生本来就不存在! 请检查重新输入! "< } cout<<"想继续修改吗(y/n)"< cin>>c;//选择是否继续修改 if(c! ='y'&&c! ='n') { cout<<"指令错误! 请重新输入! "< cin>>c; } }while(c=='y'); } voidDISPLAY()//显示所有成绩 { cout<<"本系统所有学生数据如下: "< if(i==0) cout<<"管理系统中没有录入数据或者数据已经被删除! "< for(intk=0;k { cout< "<<""< "语文: "<<""< "<<""< <<"外语: "<<""< "<<""<<(*s[k]).getsum() <<"平均分: "<<""<<(*s[k]).getaver()< } } voidSortZ()//按总分查询模块 { intt;stub; cout<<"本系统所以学生排名如下: "< for(intx=0;x { t=x; for(inty=x+1;y { if((s[t]->getsum())<(s[y]->getsum()))//比较 t=y; if(tname<<chinese<<"数学:mathenglish<<"总分:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)