软件工程课程设计报告.docx

上传人:b****1 文档编号:22869095 上传时间:2023-04-28 格式:DOCX 页数:27 大小:59.74KB
下载 相关 举报
软件工程课程设计报告.docx_第1页
第1页 / 共27页
软件工程课程设计报告.docx_第2页
第2页 / 共27页
软件工程课程设计报告.docx_第3页
第3页 / 共27页
软件工程课程设计报告.docx_第4页
第4页 / 共27页
软件工程课程设计报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

软件工程课程设计报告.docx

《软件工程课程设计报告.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。

软件工程课程设计报告.docx

软件工程课程设计报告

软件工程课程设计报告

一、需求分析:

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<

"<<""<name<<

"语文:

"<<""<chinese<<"数学:

"<<""<math

<<"外语:

"<<""<english<<"总分:

"<<""<<(*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(t

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

当前位置:首页 > 医药卫生 > 基础医学

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

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