}
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