c++课程设计实践报告.docx
《c++课程设计实践报告.docx》由会员分享,可在线阅读,更多相关《c++课程设计实践报告.docx(17页珍藏版)》请在冰豆网上搜索。
c++课程设计实践报告
中南大学
C++程序设计实践
题目学生成绩档案管理系统
成员姓名班级学号:
指导教师
学院
完成时间年月日
一、程序设计目的
二、程序使用说明
三、程序结构和流程
四、调试与分析
1.调试结果展示
2.程序的不足分析
五、程序源代码
六、总结与心得
附录:
参考文献
一、程序设计目的:
根据课题要求,设计一“学生成绩管理系统”,它的主要功能是对学生的成绩进行输入、修改和管理。
包括录入学生的信息、查询、修改、输出所有信息、统计和退出等功能。
在完成这个实验设计的过程中,更加全面地认识C++程序设计。
在已有的知识基础上,自学结构体、面向对象等内容。
让组员在设计期间,提升对C++的认识与理解,更好地掌握相关知识,将理论知识运用于实践。
具体表现在以下方面:
1.熟练运用计算机语言,理解计算机语言的思想。
能够合理运用计算机语言编写高效的程序;
2.通过课程设计,加深C++进行面向过程的结构化程序设计。
能对系统功能进行分析,并设计合理的模块化结构;
3.通过课程设计,理解C++优越于C语言的面向对象的程序编辑。
自学对文件操作与文件流等部分;
4.通过课程设计,训练C++程序调试能力,培养分析问题、解决问题和改进问题的能力;
5.通过课程设计,开发一个中小型系统,掌握系统研发全过程;
6.通过课程设计,培养团队协作能力,提升团队沟通与交流的技巧。
二、程序使用说明:
该程序使用C++设计的一个简单学生成绩管理系统,它外观大方,功能多样。
它操作人性化,易于操作,能以简便高效的方式对学生成绩进行管理和查询。
其具体的功能分为以下几个部分:
1.输入学生的数据:
只要输入学生的姓名和成绩,学号会自动生成,每输入完
一个学生数据,不用再选择,可以继续;
2.查询学生成绩:
在这个功能里,你可以选择是按照学号还是姓名进行查询,一次只能查找一人;
3.修改成绩:
该功能是在学号的基础上对学生的姓名和成绩进行修改。
学号
不会改动;
4.输出所有学生成绩:
它会将所有录入的学生数据都显示出来;
5.统计挂科和优秀人数:
在所录入的信息中统计,会显示出优秀多少人和挂科多少人;
6.退出系统:
退出学生成绩管理系统。
三、程序结构和流程:
为实现系统功能,本程序主要分为七个模块。
它们分别为:
显示中文提示选单、录入新的信息、查询信息、修改信息、列出所有的信息、统计信息、退出该程序。
这七个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,以供用户做出选择,以便决定使用学生成绩管理系统的哪种功能。
然后,通过执行选择语句,分别实现其它各个函数的调用功能。
四、调试与分析:
1、调试结果展示:
学生成绩管理系统主页面:
输入数据:
查询成绩:
修改学生信息:
输出所有学生成绩:
统计挂科和优秀人数:
2、程序的不足分析
由于本程序是分模块设计的,所以每次运行时选择完每一分块的任务并且执行完任务后,并于本次保存,再按任意键又会继续回到原来的用户选择界面,供用户继续选择所需要的任务并执行任务。
对于本程序的调试运行,总体上情况良好,具有可实施性,操作简单,使用户能够接受并方便使用。
但是,任何程序都有其改进的地方,发现问题并解决问题是追求只是的必经之路,也只有懂得发现问题才能更好的学习C++程序设计,才能使自己更有效的提高,所以在百般思考的过程中我发现的主要问题有:
对于本程序来说,录入后的信息不能删除,这样的话只会让文件中的数据越来越多,却不能按照要求去删除。
这会给使用者带来不便。
五、源程序代码:
#include
#include
#include
#include
usingnamespacestd;
constchar*file="student.dat";
constintLIM=10;
intct=0;
inlinevoideatline(){while(cin.get()!
='\n')continue;}
structstudent
{
intnum;
charname[LIM];
intgrade;
};
voidmenu()//主菜单
{
cout<<"\t************************************"<cout<<"\t欢迎使用学生成绩管理系统"<cout<<"\t************************************"<cout<<"\t**1--输入数据***********************"<cout<<"\t**2--查询成绩***********************"<cout<<"\t**3--修改学生信息*******************"<cout<<"\t**4--输出所有学生成绩***************"<cout<<"\t**5--统计挂科和优秀人数*************"<cout<<"\t**6--退出系统***********************"<cout<<"\t************************************"<}
voidmenu2()//二级菜单
{
cout<<"\t************************************"<cout<<"\t*******1--按学号查询****************"<cout<<"\t*******2--按姓名查询****************"<cout<<"\t************************************"<}
voidfind()//查找学生数据的函数
{
menu2();
inta;
intw=0;
cin>>a;intna;charsna[LIM];
fstreamfind;
find.open(file,ios_base:
:
in|ios_base:
:
out|ios_base:
:
binary);
eatline();
studentstu;
switch(a)
{
case1:
cout<<"请输入学生学号:
"<>na;break;
case2:
cout<<"请输入学生姓名:
"<>sna;break;
default:
{
cout<<"■选择执行的操作错误!
■\n";
cin.clear();
while(cin.get()!
='\n');
}
}
for(inti=1;i<=ct;i++)
{
streamposplace=(i-1)*sizeofstu;
find.seekp(place);
if(find.fail())
{
cerr<<"■查找出错!
程序将退出!
■\n";
system("pause");
exit(EXIT_FAILURE);
}
find.read((char*)&stu,sizeofstu);
switch(a)
{
case1:
if(stu.num==na)
{
w=1;
cout<cout<"<};break;
case2:
if(!
strcmp(stu.name,sna))
{
w=1;
cout<cout<"<};break;
default:
{
cout<<"■选择执行的操作错误!
■\n";
cin.clear();
while(cin.get()!
='\n');
}
}
}
if(w==0)cout<<"■未找到此人!
!
■"<find.close();
}
voidmenu5()//二级菜单
{
cout<<"\t************************************"<cout<<"\t*******1--按学号修改成绩************"<cout<<"\t*******2--按姓名修改成绩************"<cout<<"\t************************************"<}
voidaver()//统计及格和优秀人数的函数
{
fstreamfind;
find.open(file,ios_base:
:
in|ios_base:
:
out|ios_base:
:
binary);
eatline();
studentstu;
intA=0,C=0;
for(inti=1;i<=ct;i++)
{
streamposplace=(i-1)*sizeofstu;
find.seekp(place);
if(find.fail())
{
cerr<<"■查找出错!
程序将退出!
■\n";
system("pause");
exit(EXIT_FAILURE);
}
find.read((char*)&stu,sizeofstu);
if(stu.grade<=60)C++;
if(stu.grade>=90)A++;
}
cout<<"■优秀人数为:
"<"<find.close();
}
voidoutput()//输出全部学生成绩信息的函数
{
studentstu;
ifstreamfind;
find.open(file,ios_base:
:
in|ios_base:
:
binary);
cout<while(find.read((char*)&stu,sizeofstu))
{cout<cout<"<}
find.close();
}
intstu_num()//计算数据组数
{
studentstu;
ifstreamstunum;
stunum.open(file,ios_base:
:
in|ios_base:
:
binary);
if(stunum.is_open())
{
stunum.seekg(0);
while(stunum.read((char*)&stu,sizeofstu))ct++;
}
stunum.close();
returnct;
}
voidchange()//修改数据函数
{
fstreamchange;
change.open(file,ios_base:
:
in|ios_base:
:
out|ios_base:
:
binary);
if(change.eof())
change.clear();//清除EOF
cout<<"请输入你要修改的学生学号:
"<intrec;
cin>>rec;
eatline();
if(rec<=0||rec>ct)
{
cout<<"■数据不存在!
程序将退出!
■"<system("pause");
exit(EXIT_FAILURE);
}
studentstu;
streamposplace=(rec-1)*sizeofstu;
change.seekg(place);
if(change.fail())
{
cerr<<"■查找出错!
程序将退出!
■\n";
system("pause");
exit(EXIT_FAILURE);
}
change.read((char*)&stu,sizeofstu);
cout<<"你选择的是:
\n";
cout<cout<"<if(change.eof())
change.clear();//清除EOF标记
cout<<"请输入你要修改数据的姓名:
";
cin.get(stu.name,LIM);
eatline();
cout<<"请输入你要修改数据的成绩:
";
while(cin>>stu.grade)
{
if(stu.grade<0||stu.grade>100)
{
cout<<"■输入的成绩错误!
请重新输入:
■\n";
cin.clear();
while(cin.get()!
='\n');
continue;
}
break;
}
change.seekp(place);//回到查找到的地点
change.write((char*)&stu,sizeofstu)<if(change.fail())
{
cerr<<"■查找失败!
程序将退出■\n";
system("pause");
exit(EXIT_FAILURE);
}
change.close();
}
voidadd()//输入数据,的函数
{
studentstu;
ofstreamfout(file,ios_base:
:
out|ios_base:
:
app|ios_base:
:
binary);
if(!
fout.is_open())
{
cerr<<"Can'topen"<\n";
exit(EXIT_FAILURE);
}
cout<<"请输入学生姓名:
(按Enter键退出输入!
):
\n";
cin.get(stu.name,LIM);
while(stu.name[0]!
='\0')
{
eatline();
cout<<"输入学生成绩:
";
cin>>stu.grade;
if(stu.grade<0||stu.grade>100)
{
cout<<"■输入的成绩错误!
■\n";
cin.clear();
while(cin.get()!
='\n');
continue;
}
stu.num=++ct;
eatline();
fout.write((char*)&stu,sizeofstu);
cout<<"请输入学生姓名:
(按Enter键退出输入!
):
\n";
cin.get(stu.name,LIM);
}
fout.close();
}
intmain()
{
ifstreamfin;
fin.open(file,ios_base:
:
in|ios_base:
:
binary);
if(!
fin.is_open())
{
studentst[5]={{1,"小张",100},{2,"小李",90},{3,"小王",67},{4,"小赵",38},{5,"小乐",59}};
ofstreamfout(file,ios_base:
:
out|ios_base:
:
binary);
for(inti=0;i<5;i++)
fout.write((char*)&st[i],sizeofst[i]);
fout.close();
}
fin.close();
stu_num();
while
(1)
{
menu();
cout<<"请输入你要选择的操作:
\n";
charn;
cin>>n;
switch(n)
{
case'1':
eatline();add();break;
case'2':
find();break;
case'3':
change();break;
case'4':
output();break;
case'5':
aver();break;
case'6':
exit(EXIT_FAILURE);
default:
{
cout<<"■选择执行的操作错误!
■\n";
cin.clear();
while(cin.get()!
='\n');
continue;
}//如果选择错误,cin.clear等语句清除已经输入的内容,程序选择
}
system("pause");
system("cls");
cin.clear();
}
return0;
}
六、总结与心得:
通过这次的课程设计,让我充分的感觉到了要自己设计一个程序是多么的难,这个程序的设计过程中,我清楚的意识到自己的水平有多么的薄弱,每增加一个函数就要调试好久,有时候应为少了一个大括号或是分号,导致要找很久很久。
虽然系统可以运行,也具有了一些基本的功能,但我意识到了自己有太多的不足,现阶段还得依靠很多资料才能完成一个程序。
附录:
参考文献
杨长兴主编《C++程序设计》中国水利水电出版社,2012.01
谭浩民主编。
《C++程序设计实践指导》北京:
清华大学出版社,2005.7