C++课程设计学生成绩管理.docx
《C++课程设计学生成绩管理.docx》由会员分享,可在线阅读,更多相关《C++课程设计学生成绩管理.docx(25页珍藏版)》请在冰点文库上搜索。
C++课程设计学生成绩管理
湖南人文科技学院计算机系
课程设计说明书
课程名称:
C++程序设计
课程代码:
428009
题目:
统计学生成绩
年级/专业/班:
2009级工程二班
学生姓名:
魏齐、刘鑫、杨颖、欧阳健
学号:
09436225094362260943622709436228
指导教师:
袁辉勇
开题时间:
2010年9月16日
完成时间:
2010年9月26日
目录
摘要-1-
一、引言-2-
二、设计目的与任务-2-
三、设计方案-2-
1、总体设计-2-
2、详细设计-2-
3、程序清单-2-
4、程序调试与体会-2-
5、运行结果-2-
四、结论-2-
五、致谢-2-
六、参考文献-3-
摘要
本课程设计的目的是设计一个统计学生成绩的程序,用来实现对学生成绩的统计管理,其中包括学生成绩的存档、删除、查询以及排序等问题。
根据面向对象编程的思想,设计了一个学生类来封装学生的学号、成绩等相关信息以及获取学生相关信息的方法等,然后通过链表来实现学生成绩的插入、删除和查询等相关操作从而达到统计学生成绩的。
关键词:
类;C++;链表;对象
Abstract
Thiscourseisplanedtodesignastatisticalprocedureforstudentachievements,whichisusedtomanagestutentachievements,includingonfile、deletion、demand、sequencingandsoon.Inthecoursedesign,basedonourobject-orientedprogrammingideas,wedesignastudentcategorythatpackagesnumbersofstudents,marksandsoonandfromwhichwecanaccessetostudentinformation,andthenrealizeinsertion,deletion,andqueryofstudentachivementandotherrelatedoperationsbythechainstomanagethestatisticalachievementsofthestudents.Accordingtothisopinion,wecansuccessfullyuseC++languagetoachieveastatisticalprocedureforstudentachievements.Butitishardtoavoiddefectsintheproedure.Ihopetheteachertogiveguidance.
Keywords:
Class;C++,chain;Object
《C++程序设计》课程设计
------学生成绩管理
一、引言
本课程设计要实现的是一个统计学生成绩的程序,为学校的统计工作设计了一个方便的解决方案。
学生成绩的统计、排名是学校的一项重要工作,依据学生的成绩的统计排名以采取相对措施。
所以,统计工作对于学校至关重要。
然而一般的大学校而言,由于人数太多,利用人工的方法来统计学生成绩显示对于一般学校来说过于繁琐,并且任务繁重,也不便于老师或学生查看,本课程设计正是基于这一问题而提出的,我们通过所学的相关知识来设计一个统计学生成绩的程序,实现学生信息的插入、删除、查询以及相应的文件操作。
其中学生信息可以用C++中的类进行封装,然后把各个对象插入到链表中来实现学生信息的保存以便以后的查询、删除等操作。
2、设计目的与任务
1、通过课程设计更进一步理解C++的基础知识和面向对象的思想;
2、培养用系统的观点和软件开发一般规范认识软件开发,为以后的软件开发奠定基础。
并在此过程中培养严谨的科学态度和良好的工作作风。
初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3、熟练掌握C++中类及类所具备的功能在程序中的应用,并熟练了解类中函数的调用。
三、设计方案
1、总体设计
我们设计一个程序对学生物理、数学、英语、语言成绩进行统计,对学生的成绩进行可执行操作,如添加、删除、查询等等。
该程序包括以下功能模块:
1)学生信息添加模块:
能够输入学生基本信息并保存到链表中。
2)查询所有学生成绩模块:
直接显示全部学生物理、数学、英语、语言、电路分析成绩以及总分。
3)查询模块:
能够查询学生的成绩等相关信息,它包括按学生学号查询和按学生姓名查询两个子模块。
4)帮助及退出模块:
能够显示程序的帮助信息并能有效的退出程序。
2、详细设计
1)执行操作,如添加、删我们设计一个程序对学生C语言、数学、英语、体育、分析成绩进行统计,对学生的成绩进行可除、查询等等。
2)实现菜单实现选择、输入学生信息并保存到文件中、计算每个学生的总分与平均分并排序、根据学号修改学生信息、根据学号删除学生信息、根据学号查询学生信息、够根据姓名、班级查询学生信息和按照班级和科目计算平均分。
3、程序清单
#include
#include
#inc#include
lude//用getch();
usingnamespacestd;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
classStudent
{
public:
charname[20];
charClass[20];
charId[20];
intCnum;//C课程得分
intMnum;//数学课程得分
intEnum;//英语课程得分
intGnum;//体育
intsum;//总分
intave;//平均分
Student*Next;
voidInput()
{
cout<<"\t\t请输入学生的姓名:
";cin>>name;
cout<<"\t\t请输入学生的班级:
";cin>>Class;
cout<<"\t\t请输入学生的学号:
";cin>>Id;
cout<<"\t\t请输入C++的成绩:
";cin>>Cnum;
cout<<"\t\t请输入数学课程的成绩:
";cin>>Mnum;
cout<<"\t\t请输入英语课程的成绩:
";cin>>Enum;
cout<<"\t\t请输入体育课程的成绩:
";cin>>Gnum;
sum=Cnum+Mnum+Enum+Gnum;
ave=(Cnum+Mnum+Enum+Gnum)/4;
}
voidReadFile(istream&in)
{
in>>name>>Class>>Id>>Cnum>>Mnum>>Enum>>Gnum>>ave>>sum;
}
voidShow()
{
cout<<"姓名:
"<"<"<"<<<"数学:
"<"<"<"<"<}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
classStudentmassage
{
public:
Studentmassage();
~Studentmassage();
voidShowMenu();
voidFind();
voidSave();
voidModifyItem();
voidRemoveItem();
voidSwap(Student*,Student*);
voidSort();
intListCount();
voidDisplay()
{
for(Student*p=Head->Next;p!
=End;p=p->Next)
p->Show();
cout<<"输入任意字符!
继续……";
getch();
}
voidAddItem()
{
End->Input();
End->Next=newStudent;
End=End->Next;
cout<<"添加成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
private:
Student*Head,*End;
ifstreamin;
ofstreamout;
Student*FindItem(char*name)
{
for(Student*p=Head;p->Next!
=End;p=p->Next)
if(!
strcmp(p->Next->name,name))returnp;
returnNULL;
}
Student*FindID(char*Id)
{
for(Student*p=Head;p->Next!
=End;p=p->Next)
if(!
strcmp(p->Next->Id,Id))returnp;
returnNULL;
}
Student*FindCLASS(char*Class)
{
for(Student*p=Head;p->Next!
=End;p=p->Next)
if(!
strcmp(p->Next->Class,Class))returnp;
returnNULL;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage:
:
Studentmassage()
{
Head=newStudent;
Head->Next=newStudent;
End=Head->Next;
in.open("sort.txt");
if(!
in)
cout<<"这是一个新系统,无学生信息。
请先输入。
"<else
{
while(!
in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=newStudent;
End=End->Next;
}
in.close();
cout<<"\t\t读取学生信息成功!
"<}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage:
:
~Studentmassage()
{
Save();
for(Student*temp;Head->Next!
=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
deletetemp;
}
deleteHead,End;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
voidStudentmassage:
:
ShowMenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓☆学生成绩管理系统☆〓〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓★★★★★★★★★★★★★★★★★〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆1.增加学生成绩☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆2.显示学生成绩☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆3.排序统计成绩☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆4.查找学生成绩☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆5.删除学生成绩☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆6.修改学生信息☆★〓〓〓〓〓〓〓〓〓"<cout<<"〓〓〓〓〓〓〓〓〓★☆0.安全退出系统☆★〓〓〓〓〓〓〓〓〓"<cout<<"\n\t\t\n\t\t请选择:
";
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
voidStudentmassage:
:
Find()
{
charname[20],Id[10],Class[20];
intx;
Student*p=NULL;
cout<<"\n\t\t*********************************\n";
cout<<"\t\t※1.按学生的姓名查找\n\t\t※2.按学生学号查找\n\t\t※3.按学生班级查找";
cout<<"\n\t\t*********************************\n请选择:
";
cin>>x;
switch(x)
{
case1:
{cout<<"\t\t请输入要查找的学生的姓名:
";cin>>name;
if(p=FindItem(name))
{
p->Next->Show();
cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到该姓名的学生!
"<<'\n'<cout<<"输入任意字符!
继续……";
getch();
}
}break;
case2:
{
cout<<"\t\t请输入要查找的学生的学号:
";cin>>Id;
if(p=FindID(Id))
{
p->Next->Show();
cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到该学号的学生!
"<<'\n'<cout<<"输入任意字符!
继续……";
getch();
}
}break;
case3:
{cout<<"\t\t请输入要查找的学生的班级:
";cin>>Class;
if(p=FindCLASS(Class))
{
p->Next->Show();
cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到该班级的学生!
"<<'\n'<cout<<"输入任意字符!
继续……";
getch();
}
}break;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
voidStudentmassage:
:
ModifyItem()//修改信息
{
charID[20];
Student*p=NULL;
cout<<"\t\t请输入要修改的人的学号:
";cin>>ID;
if(p=FindID(ID))
{
cout<<"\t\t已找到学生的信息,请输入新的信息!
"<p->Next->Input();
cout<<"修改成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到!
"<cout<<"输入任意字符!
继续……";
getch();
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
voidStudentmassage:
:
RemoveItem()//删除信息
{
charID[20];
Student*p=NULL,*temp=NULL;
cout<<"\t\t请输入要删除的学生的学号:
";cin>>ID;
if(p=FindID(ID))
{
temp=p->Next;
p->Next=p->Next->Next;
deletetemp;
cout<<"\t\t删除成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
else
{
cout<<"\t\t没有找到!
"<cout<<"输入任意字符!
继续……";
getch();
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
voidStudentmassage:
:
Swap(Student*p1,Student*p2)
{
Student*temp=newStudent;
strcpy(temp->name,p1->name);
strcpy(temp->Id,p1->Id);
temp->Cnum=p1->Cnum;
temp->Mnum=p1->Mnum;
temp->Enum=p1->Enum;
temp->sum=p1->sum;
strcpy(p1->name,p2->name);
strcpy(p1->Id,p2->Id);
p1->Cnum=p2->Cnum;
p1->Mnum=p2->Mnum;
p1->Enum=p2->Enum;
p1->sum=p2->sum;
strcpy(p2->name,temp->name);
strcpy(p2->Id,temp->Id);
p2->Cnum=temp->Cnum;
p2->Mnum=temp->Mnum;
p2->Enum=temp->Enum;
p2->sum=temp->sum;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
intStudentmassage:
:
ListCount()//统计当前的记录总数
{
if(!
Head)
return0;
intn=0;
for(Student*p=Head->Next;p!
=End;p=p->Next)
{
n++;
}
returnn;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
voidStudentmassage:
:
Sort()//对当前学生进行排序
{
cout<<"Sorting..."<Student*p=NULL,*p1=NULL,*k=NULL;
intn=Studentmassage:
:
ListCount();
if(n<2)
return;
for(p=Head->Next;p!
=End;p=p->Next)
for(k=p->Next;k!
=End;k=k->Next)
{
if(p->sum>k->sum)
{
Studentmassage:
:
Swap(p,k);
}
}
cout<<"排序完成!
"<getch();
return;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
voidStudentmassage:
:
Save()
{
out.open("sort.txt");
for(Student*p=Head->Next;p!
=End;p=p->Next)
out<name<<"\t"<Class<<"\t"<Id<<"\t"
<Cnum<<"\t"<Mnum<<"\t"<Enum<<"\t"<Gnum<<"\t"<ave<<"\t"<sum<<'\n';
out.close();
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
intmain()
{
intx,i=0;
boolquit=false;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t◎"<cout<<"\t\t◎★★★★【欢迎进入学生成绩管理系统】★★★★◎"<for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t◎"<cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<StudentmassageGrade;
cout<<"请按任意键开始……";
getch();
while(!
quit)
{
system("cls");
Grade.ShowMenu();
cin>>x;
switch(x)
{
case0:
cout<<"★★★★感谢您的使用★★★★"<case1:
Grade.AddItem();break;
case2:
Grade.Display();break;
case3:
Grade.Sort();break;
case4:
Grade.Find();break;
case5:
Grade.RemoveItem();break;
case6:
Grade.ModifyItem();break;
}
}
return0;
}
}
4、程序调试与体会
此程序设计完成了成绩统计系统的主要功能,实现了添加、显示、删除记录、查询记录、自动保存等功能,程序的人性化设计较多,如自动保存,自动导入功能简化了操作过程,程序还人性化得增加了帮助这个选项,这对于程序的使用者来说是一个不小的帮助,本设计基本按要求完成了课程设计的任务。
但是在程序中还存在一些不足,需要改进。
如:
程序的编写不够简洁,在实际操作中,添加学生信息不够方便。
只实现了部分的操作可能。
比如输入错误的信息的程序提示。
5、运行结果
1)首先出现程序初始界面如图1
图1
2)进入功能界面,实现功能1,如图2
图2
3)实现功能显示学生信息,如图3
图3
4)实现功能查找如图4
图4
5)实现删除功能如图5
图5
6)实现修改功能如图6
图6
最后选择0安全退出程序
四、结论
本课程设计中,我们成功地实现了一个统计学生成绩的程序,达到了预期的目的。
在课程设计