招生系统C++课程设计.docx
《招生系统C++课程设计.docx》由会员分享,可在线阅读,更多相关《招生系统C++课程设计.docx(51页珍藏版)》请在冰豆网上搜索。
招生系统C++课程设计
计算机学院计算机科学与技术专业
《程序设计综合课程设计》报告
(20010/2011学年第一学期)
学生姓名:
学生班级:
学生学号:
指导教师:
2011年 1月 9日
招
生
系
统
第一章课程设计目的和要求
1.1课程设计目的
C++课程设计的主要目的是培养学生综合运用C++所学知识解决实际问题,提高学生运用知识的能力,真正做到学以致用
通过课程设计,提高学生的编程能力,使学生加深对所学知识的掌握及运用,对所学的基本知识能够做到熟练运用,从而为日后的学习和技术的培养、提高打下坚实的基础。
通过课程设计,拓展学生的知识面和思维面,丰富学生的函数库知识和加深学生对函数库的认识,使学生的思维更加灵活、全面,在编程时做到严谨、认真。
通过课程设计,使学生对学习有新的认识,改变以往学习为了考试,作业为了应付的学习态度,运用知识解决实际问题,从而让学生获得学习的乐趣,增进学生学习的动力。
在课程设计中,培养学生思考问题、解决问题的能力,并让学生做到学习联系实际,具备运用知识的现实性思维,从而让学到的知识更加灵活、更具实际可操作性。
1.2课程设计要求
1)用C语言实现系统;
2)函数功能要划分好(结构化程序设计);
3)界面友好(良好的人机交互),加必要的注释;
4)提供程序测试方案。
第二章课程设计任务内容
(1)确定每一批次的录取分数线,并将批次、分数线、实际录取人数输出到文本文件soutput.txt中,每一批次录取信息占一行,格式自定。
确定分数线时,如果在分数线处有多名考生,则将这些考生全部录取,即每一批次的实际录取人数可能会超过预定人数。
(2)如果考生成绩行的格式不对,则丢弃该考生的成绩,不作为确定分数线的依据,但要求将该考生姓名输出到文本文件serror.txt中,格式自定。
(3)将总分为650分的考生姓名输出到文本文件soutput.txt中,格式自定。
(4)将第三批次录取的所有考生的平均成绩(4舍5入)输出到文本文件soutput.txt中,格式自定。
(5)要求将下面两个时间值(单位为秒)输出到文件soutput.txt的最后:
从打开scores.txt文件到读完所有考生成绩的时间;从打开scores.txt文件到程序结束的时间。
第三章详细设计说明
3.1系统功能结构图
3.2模块分析
自定义结构体:
structinfor
{
charidentify[20];****身份证
charname[20];*********姓名
charsex[2];***********性别
intage;***************年龄
floatgrade;***********成绩
infor*l;};************下一个地址
主函数
intmain():
函数接口:
功能:
程序的入口,负责程序的运行与退出、操作以及调用其它函数。
特别函数
infor*oldrank():
注释设计:
保留原有数据*********************
在主函数中申明从而节省空间****所得结果供(2,4)共用
若“2,4”调用此函数将会产生两条链条**浪费内存空间
函数接口:
功能:
保留文件中的原有数据
功能模块函数
0->voidmake()
注释设计:
输入批数和预定录取人数****操作“0”函数块
函数接口:
功能:
输入批数和预定录取人数****操作“0”函数块
1->voidoutput()
注释:
输出处理信息*******操作“1”函数块
函数接口:
功能:
输出处理信息*******操作“1”函数块
2->infor*addrecord(infor*head)
注释:
在原有基础上继续输入信息并处理****操作“2”函数块
函数接口:
功能:
在原有基础上继续输入信息并处理****操作“2”函数块
3->voidnewrecord()
注释:
重新录入学生信息并处理****操作“3”函数块
函数接口:
功能:
重新录入学生信息并处理****操作“3”函数块
4->voiddisplayandcorrect(infor*head)
注释:
核对和改正错误信息并随之修改处理结果****操作“4”函数块
函数接口:
功能:
核对和改正错误信息并随之修改处理结果****操作“4”函数块
被调用模块函数
voidsameuse()
注释:
处理信息程序********************
************************共用体函数块***(0,2,3,4)共用
函数接口:
功能:
处理信息程序
被调用单个函数
1)infor*rank()
注释:
排列顺序
功能原理流程:
工作原理:
功能:
排列顺序
2)voidselection(infor*head)
注释:
确定各批次分数线
功能原理流程:
工作原理:
功能:
确定各批次分数线
3)voidinclude(infor*head)
注释:
筛出650分的学生
功能原理流程:
工作原理:
功能:
筛出650分的学生
4)voidrecord()
注释:
重新录入学生信息
功能原理流程:
工作原理:
功能:
重新录入学生信息
5)infor*insert(infor*head)
注释:
在原有信息上继续录入学生信息
功能原理流程:
工作原理:
功能:
在原有信息上继续录入学生信息
6)voiddisplay(infor*head)
注释:
显示要核对的信息并人工核对且记录错误信息
功能原理流程:
工作原理:
功能:
显示要核对的信息并人工核对且记录错误信息
7)voidcorrect(infor*head)
注释:
改正错误信息
功能原理流程:
工作原理:
功能:
改正错误信息
8)voidinput(infor*head)
注释:
向文件中输入所有数据
************************共用体函数块***(2,4)共用
功能原理流程:
工作原理:
获取动态链表数据链
将信息数据输入到信息文件中
功能:
向文件中输入所有数据
9)voiddell(infor*head)
注释:
删除相同的信息
功能原理流程:
功能:
删除相同的信息
3.3程序测试
)操作页面
图3.3
1)设置处理要求、查看处理信息联合测试
1******设置处理要求
图3.3-1-1.1
*****查看处理信息
图3.3-1-1.2
******设置成功
2******设置处理要求
图3.3-1-2.1
*****查看处理信息
图3.3-1-2.2
*****设置成功
2)在原有基础上继续录入信息、查看和核对录入信息联合测试
1********在原有基础上继续录入信息
图3.3-2-1.1
********查看和核对录入信息
图3.3-2-1.2
2********在原有基础上继续录入信息
图3.3-2-2.1
********查看和核对录入信息
图3.3-2-2.2
*****继续录入成功
3)重新录入信息、查看和核对录入信息、查看处理信息联合测试
1***********重新录入信息
图3.3-3-1.1
*****查看处理信息
图3.3-3-1.2
********查看和核对录入信息
图3.3-3-1.3
2********重新录入信息
图3.3-3-2.1
*****查看处理信息
图3.3-3-2.2
********查看和核对录入信息
图3.3-3-2.3
******重新录入成功
4)查看和核对录入信息单独测试
1*******查看和核对录入信息
图3.3-4-1.1
2*******查看和核对录入信息
图3.3-4-2.1
******信息修改成功
5)操作结束
图3.3-5
第四章软件使用说明
4.1操作页面
图4.1
4.2各功能操作解析
0设置批数和每批的预订人数:
首先:
0、enter
其次根据提示录入整形数据直到此功能操作结束
再次根据提示进行你想要的下一个功能操作
1查看信息处理结果:
首先:
1、enter
再次根据提示进行你想要的下一个功能操作
2在原有数据基础上录入信息:
首先:
2、enter
其次根据提示录入信息直到此功能操作结束
再次根据提示进行你想要的下一个功能操作
3重新输入信息:
首先:
3、enter
其次根据提示录入信息直到此功能操作结束
再次根据提示进行你想要的下一个功能操作
4查看和核对录入信息:
首先:
4、enter
其次根据提示进行操作直到此功能操作结束
再次根据提示进行你想要的下一个功能操作
5退出程序操作:
首先:
5、enter
程序运行结束,退出程序。
第五章课程设计心得与体会
做事不能急于求成,想尽快了事,要认真思考,对问题做到充分的了解和思考后进行处理。
思考问题时,不能只局限与纸上描述的问题本身,要善于将问题现实化,在实际中思考此类问题,从而建立实际可操作性思维,让编写的程序更具普遍适用性,更符合实际性。
死板的根据纸上要求编写程序,以实现功能为目的,不联系实际,所编写的程序是为实现目的而做,而不是用于解决实际问题。
学习知识,要认真对待,不能有模糊性思维,遇到不懂将就着过,对于基础知识更是必须做到认真,要做到彻底的明白,为日后更深的学习打下坚实的基础。
学习不能只局限于课本,要学会多练习,多阅读,多积累,做到对所学知识的拓展与丰富,从而让我们的思维更加丰富、灵活和简洁。
附录1:
参考文献
附录1.1参考书
《C++课程设计》
附录1.2参考函数块
#include\\头文件
usingmanespacestd;\\如果是TC30编译器就可以不要
voidmain()
{clock_tstart,finish;\\声明开始结束变量
start=clock();\\开始计算时间
\\你要运行的程序
finish=clock();\\结束计算时间
cout<"<<(double)(finish-start)/CLK_TCK<}
附录2:
程序清单
#include
#include
#include
#include
#include
usingnamespacestd;
structinfor
{charidentify[20];
charname[20];
charsex[2];
intage;
floatgrade;
infor*l;};
intmain()
{
voidmake();
voidoutput();
infor*oldrank();
voidnewrecord();
infor*addrecord(infor*head);
voiddisplayandcorrect(infor*head);
intn;
infor*head=NULL;
for(;;)
{cout<<"**********************************招生系统************************************"<cout<<"设置处理要求(批数和每批预定录取人数)请按0:
"<cout<<"查看处理信息请按1:
"<cout<<"在原有数据上继续录入请按2:
"<cout<<"重新录入信息请按3:
"<cout<<"查看和核对录入信息请按4:
"<cout<<"操作结束请按5:
"<cout<<"请输入按钮:
";
cin>>n;
if(n==2||n==3)
{cout<<"是否删除原有信息,是:
3,不是:
2,拒绝:
6:
";
cin>>n;}
if(n==5)
{cout<<"确定要结束吗?
是:
5,不是:
6:
";
cin>>n;}
if(n==2&&head==NULL||n==4&&head==NULL)//如果程序未运行“2”则须此操作
head=oldrank();
switch(n)
{case0:
cout<case1:
cout<case2:
cout<case3:
cout<case4:
cout<}
if(n==5)break;}
return0;
}
infor*oldrank()//保留原有数据*********************
{voiddell(infor*head);//在主函数中申明从而节省空间****所得结果供(2,4)共用
infor*head,*m;//若“2,4”调用此函数将会产生两条链条**浪费内存空间
charidentify[20],name[20],sex[2];
intage;
floatgrade;
charc='0';
ofstreamf1("score.txt",ios:
:
app);
if(!
f1)
{cerr<<"“infor*oldrank()中ofstreamf1(score.txt,ios:
:
app)”文件打开失败"<exit
(1);}
f1<f1.close();
ifstreamf("score.txt",ios:
:
in);
if(!
f)
{cerr<<"“infor*oldrank()中ifstreamf(score.txt,ios:
:
in)”文件打开失败"<exit
(1);}
head=newinfor;
m=head;
for(;;)
{f>>identify>>name>>sex>>age>>grade;
strcpy(m->identify,identify);
strcpy(m->name,name);
strcpy(m->sex,sex);
m->age=age;
m->grade=grade;
if(strcmp(identify,"0")==0&&strcmp(name,"0")==0&&strcmp(sex,"0")==0&&age==0&&grade==0)
{m->l=NULL;
break;}
elsem->l=newinfor;
m=m->l;
}
f.close();
dell(head);
returnhead;
}
voidoutput()//输出处理信息*******操作“1”函数块
{stringa,b;
inti,j=0;
cout<<"操作结果概况:
"<ifstreamf("soutput.txt",ios:
:
in);
if(!
f)
{cerr<<"“voidoutput()中ifstreamf(soutput.txt,ios:
:
in)”文件打开失败"<exit
(1);}
for(;;)
{f>>a;
if(a=="结束")break;
cout<f.close();
ifstreamf1("基础数据.txt",ios:
:
in);
if(!
f1)
{cerr<<"“voidoutput()中ifstreamf1(基础数据.txt,ios:
:
in)”文件打开失败"<exit
(1);}
f1>>i;
f1.close();
cout<<"录取名单概况:
"<ifstreamf2("备用字符串.txt",ios:
:
in);
if(!
f2)
{cerr<<"“voidoutput()中ifstreamf2(备用字符串.txt,ios:
:
in)”文件打开失败"<exit
(1);}
f2>>a;
ifstreamf3("录取名单.txt",ios:
:
in);
if(!
f3)
{cerr<<"“voidoutput()中ifstreamf3(录取名单.txt,ios:
:
in)”文件打开失败"<exit
(1);}
f3>>b;
cout<
for(intn=1;n<=i;n++)
{f2>>a;
for(;;)
{f3>>b;
j=0;
if(b=="结束")
{cout<break;}
if(a==b)
{cout<break;}
cout<
j++;
if(j==5)
{cout<<'\t';
j=0;}}
if(b=="结束")break;}
f2.close();
f3.close();
}
voidsameuse()//处理信息程序*********************
{voiddell(infor*head);//************************共用体函数块***(0,2,3,4)共用
infor*rank();
voidselection(infor*head);
voidinclude(infor*head);
cout<infor*head;
intn=1;
clock_tstart,fous,edd;
start=clock();
head=rank();
dell(head);
if(strcmp(head->identify,"0")==0&&strcmp(head->name,"0")==0&&strcmp(head->sex,"0")==0&&head->age==0&&head->grade==0)
n=0;
if(n==1)
{fous=clock();
selection(head);
include(head);
edd=clock();
ofstreamf("soutput.txt",ios:
:
app);
if(!
f)
{cerr<<"“voidsameuse()中ofstreamf(soutput.txt,ios:
:
app)”文件打开失败"<exit
(1);}
f<<"从score.txt中读取信息所需时间为:
"<<(double)(fous-start)/CLK_TCK<<',';
f<<"从score.txt中读取信息到处理完信息所需时间为:
"<<(double)(edd-start)/CLK_TCK<<"。
"<f<<"结束"<f.close();}
elseif(n==0)
{ofstreamf3("soutput.txt");
if(!
f3)
{cerr<<"“voidsameuse()中ofstreamf3(soutput.txt)”文件打开失败"<exit
(1);}
ofstreamf2("录取名单.txt");
if(!
f2)
{cerr<<"“voidsameuse()中ofstreamf2(录取名单.txt)”文件打开失败"<exit
(1);}
ofstreamf4("备用字符串.txt");
if(!
f4)
{cerr<<"“voidsameuse()中ofstreamf4(备用字符串.txt)”文件打开失败"<exit
(1);}
f3<<"没有录入有效数据"<f3<<"结束"<f2<<"没有录入有效数据"<f2<<"结束"<f4<<"没有录入有效数据"<f3.close();
f2.close();
f4.close();}
}
infor*rank()//排列顺序
{infor*head,*x,*m,*y;
charidentify[20],name[20],sex[2];
intage;
floatgrade;
head=newinfor;
strcpy(head->identify,"0");
strcpy(head->name,"0");
strcpy(head->sex,"0");
head->age=0;
head->grade=0;
head->l=NULL;
ifstreamf("score.txt",ios:
:
in);
if(!
f)
{cerr<<"“infor*rank()”中文件打开失败"<exit
(1);}
for(;;)
{x=head;
f>>identify>>name>>sex>>age>>grade;
if(strcmp(identify,"0")==0&&strcmp(name,"0")==0&&strcmp(sex,"0")==0&&age==0&&grade==0)break;
for(;;)
{if(grade>head->grade)
{m=head;
head=newinfor;
strcpy(head->identify,identify);
strcpy(head->name,name);
strcpy(head->sex,sex);
head->age=age;
head->grade=grade;
head->l=m;
break;}
elseif(grade>x->grade)
{m->l=newinfor;
y=m->l;
strcpy(y->identify,identify);
strcpy(y->name,name);
strcpy(y->sex,sex);
y->age=age;
y->grade=grade;
y->l=x;
break;}
m=x;
x=x->l;
if(x==NULL)break;}
}
f.close();
returnhead;
}
voidselection(infor*head)//确定各批次分数线
{infor*x,*y,*p;
floata;
into,m