1、 一.目标和要求 经过本课程设计实践,全方面总结C++课程学习中数据类型、程序结构、数组、函数、指针、结构体、链表等基础概念,掌握其使用方法。掌握面向对象程序设计中相关类、对象、继承、重载、多态性、输入输出流类体系、文件操作基础概念,初步学会用类和对象这种面向对象程序设计方法编写应用程序。培养使用面向对象程序设计方法编写计算机程序能力。 经过设计一个《学生成绩统计管理》,深入熟悉C++中类概念、类封装、继承实现方法。了解系统开发需求分析、类层次设计、模块分解、编码测试、模块组装和整体调试全过程,加深对C++了解和Visual C++环境使用;逐步熟悉程序设计方法,并养成良好编程习惯。程序
2、设计是一门实践性很强课程,必需十分重视实践步骤。很多实际知识不是靠听课和看书学到,而是经过长时间实践积累。 一、 设计内容 学生成绩管理系统 1. 基础功效: 这个程序关键功效是输入学生姓名、成绩,学号,并能够对学生成绩按学号进行查询。该系统含有存贮学生数据,按学号按需要修改学生成绩,列出学生成绩和统计功效。 2. 扩展功效: 学生数据添加、修改、和删除 2.E—R 修改数据 删除数据 查询数据 显示数据 平均数据 添加数据 学生成绩管理系统 二、 过程和结果 关键内容以下: 1. 关键类设计,继承层次关系,代码: 首先,创建了一个s
3、tudent类. Student类申明以下: class Student{ public: int Class,num; char name[8]; float cpp,math,eng,ave; int order; Student *next; public: Student() {} Student(int c1,int n1,char*n,float e1,float c2,float m,float e2,float s,float p,float a, int o,Student *next=NULL) { Class
4、c1;num=n1; strcpy(name,n); cpp=c2;math=m;eng=e2;ave=a; order=o; this->next=next; } 关键功效函数设计: 1. 创建学生数据,对学生成绩录入。 代码:friend Student *Create(Student *head,istream& in) {int y; Student *p; int Class,num; char name[8]; float cpp,math,eng; if(&in==&cin) //cout
5、<<"\n\n请输入学生数据(输入成绩非法,则结束),数据输入格式为:\n"
//<<"班级 姓名 学号 C++ 数学 英语 \n";
//in>>Class>>name>>num>>cpp>>math>>eng;
//cout<<"\n\n请输入学生数据:\n"
cout<<"班级:"<
6、um;
cout<<"C++成绩:"<
7、num;strcpy(p->name,name); p->cpp=cpp;p->math=math; p->eng=eng; p->ave=(cpp+math+eng)/6; head=Insert(head,p); //in>>Class>>name>>num>>elec>>cpp>>math>>eng>>polity>>sport; cout<<"\t\t*****继续添加请按1*******\n"; cout<<"\t\t*****返回主菜单请按2*******\n";
8、 in>>y; if(y==2) { ShowMenu(); } else{head=Create(head,cin);} SetOrder(head); //设置排名 return head; } 2. 此函数为查找函数实现过程 关键代码:friend const Student * Lookup(const Student *head,int num) //查找指定学号为num结点 { while(head && head->num!=num)
9、head=head->next;
return head;
}
friend void OutputOne(const Student* head) //输出一个学生数据
{
cout< 10、ent *DeleteStudent(Student *head,int num)
{
Student *p1=head,*p2=p1;
while(p2&&p2->num!=num)
p1=p2,p2=p2->next;
if(p2)
{
if(p2==p1)
{
head=head->next;delete p1;
}
else
{
p1->next=p2->next;delete p2;
}
cout<<"已删除"< 11、head);
}else cout<<"没找到指定学生!\n";
return head;
}
4.排序函数中平均分来排序,排序结果为降序操作。
friend void SetOrder(Student*head)
{
int order=1;
while(head)
{head->order=order++;head=head->next;}
}
5.修改学生信息
friend Student *Modify(Student *head,int num) //修改学号为学生数据
{
Student *p1=head,*p 12、2=p1;
while(p2&&p2->num!=num) //寻求待修改结点
p1=p2,p2=p2->next;
if(p2) //修改指定结点数据
{
/*cout<<"\n\n请输入新数据,格式为:\n"
<<"班级 姓名 学号 C++ 数学 英语 \n";
cin>>p2->Class>>p2->name>>p2->num>>p2->cpp>>p2->math
>>p2->eng;*/
cout<<"班级:"< 13、 cout<<"姓名:"< 14、id(p2->cpp)||!Valid(p2->math)||!Valid(p2->eng)
)
{
cout<<"\n\n成绩数据非法!请重新输入,格式为:\n"
<<"班级 姓名 学号 C++ 数学 英语 \n";
cin>>p2->Class>>p2->name>>p2->num>>p2->cpp>>p2->math
>>p2->eng;
}
p2->ave=(p2->cpp+p2->math+p2->eng)/3;
//将修改指定结点从原链表上修改下来,并重新降序插入原链表
if(p2== 15、p1)
head=Insert(p2->next,p2);
else
{
p1->next=p2->next;
head=Insert(head,p2);
}
SetOrder(head);
}
else cout<<"没找到指定学生!\n";
return head;
}
6.显示数据:
friend void OutputAll(const Student*head) //输出全部学生数据
{
if(!head) {cout<<"\n\n\t\t没有任何学生数据!\n\n"; 16、 return;}
cout<<"\n\n\t\t学生成绩表\n\n";
cout<<"班级\t姓名\t学号\tC++\t数学\t英语\t名次\n";
while(head)
{
OutputOne(head);head=head->next;
}
}
7.平均数据函数
friend void Statistic(const Student *head)
{
int i=0;
float
ave_cpp=0,
ave_math=0,
ave_eng=0;
while(head) 17、
{
ave_cpp+=head->cpp;
ave_math+=head->math;
ave_eng+=head->eng;
i++;head=head->next;
}
if(!i)
{
cout<<"\n\n没有任何学生数据!\n";return;}
cout<<"\n\n\t\t各门课程平均成绩表\n\n";
cout<<"tC++\t数学\t英语\n";
cout< 18、
}
程序测试结果:
1运行程序.会出现以下画面,根据提醒进行选择.
2. 首先选择1,然后按Enter键.根据提醒对学生情况进行输入.图:
3. 按1键能够添加多个学生成绩数据,按2返回主界面。
4. 选择5, 然后按Enter键,显示刚才输入数据和排名情况。
5在主界面选择2能够修改学生数据。
6.在主界面选择3能够按学号查询学生成绩情况
7. 在主界面选择7能够按学号删除学生成绩信息
三、 设计总结
这次课程设计基础上涵盖了学习到C++ 语言知识点,课程设计题目要求不仅要求对书本即使是网上搜来代码,但这些代码没措施运行, 19、我把这些代码改了和增加了自己写代码,最终能够运行,而且抵达自己想要结果,这次课程设计不仅让我修补了以前学习漏洞,也让我知道一个道理:编程需要爱好和实际动手。C++语言程序设计课程设计,我从中受益匪浅,而且对C++语言程序设计这一门课程有了更深一步认识。
附件
程序源代码清单:
#include 20、xt;
public:
Student() {}
Student(int c1,int n1,char*n,float e1,float c2,float m,float e2,float s,float p,float a,
int o,Student *next=NULL)
{
Class=c1;num=n1;
strcpy(name,n);
cpp=c2;math=m;eng=e2;ave=a;
order=o;
this->next=next;
}
friend int Valid(float 21、score)
{
return (score<0||score>100) ?0:1;
}
friend void SetOrder(Student*head)
{
int order=1;
while(head)
{head->order=order++;head=head->next;}
}
friend Student* Insert(Student *head,Student *p) //在head所指链表中降序插入结点p
{
Student*p1,*p2;
if(head==0)
{
22、
head=p;p->next=0;
}
else if(head->ave<=p->ave)
{
p->next=head;head=p;
}
else
{
p2=p1=head;
while(p2->next&&p2->ave>p->ave)
{
p1=p2;p2=p2->next;
}
if(p2->ave>p->ave)
{
p2->next=p;p->next=0;
}
else {
p->next=p2;p1->next=p;
}
23、
}
return head;
}
friend Student *Create(Student *head,istream& in)
{int y;
Student *p;
int Class,num;
char name[8];
float cpp,math,eng;
if(&in==&cin)
//cout<<"\n\n请输入学生数据(输入成绩非法,则结束),数据输入格式为:\n"
//<<"班级 姓名 学号 C++ 数学 英语 \n";
//in>>Class>>name>>num>>cpp>>m 24、ath>>eng;
//cout<<"\n\n请输入学生数据:\n"
cout<<"班级:"< 25、th;
cout<<"英语成绩 :"< 26、nsert(head,p);
//in>>Class>>name>>num>>elec>>cpp>>math>>eng>>polity>>sport;
cout<<"\t\t*****继续添加请按1*******\n";
cout<<"\t\t*****返回主菜单请按2*******\n";
in>>y;
if(y==2)
{
ShowMenu();
}
else{head=Create(head,cin);}
27、 SetOrder(head); //设置排名
return head;
}
friend const Student * Lookup(const Student *head,int num) //查找指定学号为num结点
{
while(head && head->num!=num)
head=head->next;
return head;
}
friend void OutputOne(const Student* head) //输出一个学生数据
{
cout< 28、<'\t'< 29、学号\tC++\t数学\t英语\t名次\n";
while(head)
{
OutputOne(head);head=head->next;
}
}
friend Student *Modify(Student *head,int num) //修改学号为学生数据
{
Student *p1=head,*p2=p1;
while(p2&&p2->num!=num) //寻求待修改结点
p1=p2,p2=p2->next;
if(p2) //修改指定结点数据
{
/*cout<<"\n\n请输入新数据 30、格式为:\n"
<<"班级 姓名 学号 C++ 数学 英语 \n";
cin>>p2->Class>>p2->name>>p2->num>>p2->cpp>>p2->math
>>p2->eng;*/
cout<<"班级:"< 31、cout<<"C++成绩:"< 32、 数学 英语 \n";
cin>>p2->Class>>p2->name>>p2->num>>p2->cpp>>p2->math
>>p2->eng;
}
p2->ave=(p2->cpp+p2->math+p2->eng)/3;
//将修改指定结点从原链表上修改下来,并重新降序插入原链表
if(p2==p1)
head=Insert(p2->next,p2);
else
{
p1->next=p2->next;
head=Insert(head,p2);
}
SetO 33、rder(head);
}
else cout<<"没找到指定学生!\n";
return head;
}
friend Student *DeleteStudent(Student *head,int num)
{
Student *p1=head,*p2=p1;
while(p2&&p2->num!=num)
p1=p2,p2=p2->next;
if(p2)
{
if(p2==p1)
{
head=head->next;delete p1;
}
else
{ 34、
p1->next=p2->next;delete p2;
}
cout<<"已删除"< 35、
ave_cpp+=head->cpp;
ave_math+=head->math;
ave_eng+=head->eng;
i++;head=head->next;
}
if(!i)
{
cout<<"\n\n没有任何学生数据!\n";return;}
cout<<"\n\n\t\t各门课程平均成绩表\n\n";
cout<<"tC++\t数学\t英语\n";
cout< 36、
friend void DeleteChain(Student *head)
{Student *p;
while(head)
{
p=head;head=head->next;delete p;
}
}
friend void ShowMenu(void)
{
cout<<"\n\n";
cout<<"\t\t******欢迎使用学生成绩管理系统******\n"
<<"\t\t* *\n"
<<"\t\t* 1.从键盘录入和添加数据 37、 *\n"
// <<"\t\t* 2.从文件录入和添加数据 *\n"
<<"\t\t* 2.修改数据 *\n"
<<"\t\t* 3.查询数据 *\n"
<<"\t\t* 4.删除数据 *\n"
<<"\t\t* 5.显示数据 *\n"
<<"\t\t* 6.平均数据 *\n"
// <<"\ 38、t\t* 7.保留数据 *\n"
<<"\t\t* *\n"
<<"\t\t* 0.退出系统 *\n"
<<"\t\t**********************************\n\n";
}
};
void main (void)
{
Student *head=0;
int select;
while(1)
{
ShowMenu();
cout<<"\ 39、t\t请输入你选择(0~6):";cin>>select;
switch(select)
{
case 0:
DeleteChain(head);
cout<<"\n\n谢谢您使用本系统!\n\n";
return;
case 1:
head=Create(head,cin);
break;
/*case 2:
{
char fname[256];
cout<<"请输入文件名:";
cin.get();
cin.getline(fname,256);
ifs 40、tream in(fname);
if(!in)
{
cout<<"\n不能打开"< 41、 cin>>num;
const Student *t=Lookup(head,num);
if(t)
{
cout<<"\t\t\t\t"< 42、 head=DeleteStudent(head,num);
}break;
case 5:
OutputAll(head);break;
case 6:
Statistic(head);break;
/*case 7:
if(head)
{
char fname[256];
cout<<"请输入文件名:";
cin.get();
cin.getline(fname,256);
SaveAll(head,fname);
}else cout<<"\n\n尚无数据可保留!\n\n";
break;*/
default:
cout<<"\n\n非法操作!\n\n";
}
}
}






