C++学生成绩查询统计.docx
《C++学生成绩查询统计.docx》由会员分享,可在线阅读,更多相关《C++学生成绩查询统计.docx(24页珍藏版)》请在冰豆网上搜索。
C++学生成绩查询统计
制作人:
学号:
vc++
课
程
设
计
报
告
学生成绩管理简易系统
一.课程设计目的
深入理解向对象程序设计思想,运用已学知识设计简易的学生成绩管理系统,提高分析解决实际问题的能力。
二.设计要求
本系统用来管理若干个学院(系)、若干个班级的学生成绩,系统具有如下主要功能:
•成批成绩输入,即从一个固定格式中读入学生成绩,放入学生成绩。
•交互成绩输入,从屏幕上一个一个地录入学生成绩,放入学生成绩。
•查询(打印)某班级某门课的最高分、最低分、平均分及成绩清单(可按学号排序、按分数由高到低排序等)。
•查询(打印)学生(可按学号、按姓名查询)某学期的成绩清单(假定每人每学期最多能学8门课)。
•修改和删除某学生的某门课成绩。
•增加、修改、删除和查询(打印)学生的基本资料。
•根据学号查任课教师,根据教师代号查所教学生。
三.设计总体框架
程序数据处理流图
每一个功能块的算法流程图
1、建立链表
2、排序
3、插入(增加)
3、查找
5、删除
6、统计
7根据学生查找老师,根据教师代号查所教学生
8.根据教师代号查所教学生
五.数据文件格式说明
学生基本资料文件
structstudent
{
charnum[15];
charname[15];
charmajor[15];
chargrade[15];
charclas[15];
charteacher[15];
charsex[5];
floatbirthday[10];
floatscore[8];
node*next;
}head;
学生成绩资料文件
structscore{
charnum[15];
floatsubjectmun[10];
floatitem[5];
floatscore;
charteacher[15];
}
课程代号对照表文件
structsubjectmun{
floatsubjectmun[10];
charsubject[10];
floatscoreweight;
}
教师代号对照表文件
structteachermun{
floatteachermun[10];
charteachername[10];
charquality[10];
}
6.输入输出方法
studentinput(studentx)
{
cout<<"请输入学生的相关信息,以学号为字符0结束(其他项任意,但要输入!
!
):
"<cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cin>>s1>>s2>>s3>>s4>>s4>>s5>>s6>>s7>>s8>>c1>>c2>>c3;
returnx;
}
studentoutput(studentx)
{
cout<<""<<"学号"<<<"班级"<}
六.主要数据类型及其作用(数据结构)
学生类型结构体记录学生基本资料,学生成绩类型结构体记录学生成绩,课程代号对照表结构体,师代号对照表结构体为程序中根据学号查任课教师和根据教师代号查所教学生提供依据。
七.主要函数说明及其原代码
建立链表
node*GradeManage:
:
create(void)
{
node*p1,*p2,*head=0;
chars1[15],s2[25],s3[15],s4[15],s5[15],s6[5],s7[10],s8[10];
floatc1,c2,c3;
cout<<"请输入学生的相关信息,以学号为字符0结束(其他项任意,但要输入!
!
):
"<cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cin>>s1>>s2>>s3>>s4>>s4>>s5>>s6>>s7>>s8>>c1>>c2>>c3;
while(strcmp(s1,"0")!
=0)
{
p1=newnode;
strcpy(p1->num,s1);
strcpy(p1->name,s2);
strcpy(p1->major,s3);
strcpy(p1->grade,s4);
strcpy(p1->clas,s5);
strcpy(p1->teacher,s6);
strcpy(p1->sex,s7);
p1->score[1]=c1;
p1->score[2]=c2;
p1->score[3]=c3;
if(head==0)
{
head=p1;p2=p1;
}
else
{
p2->next=p1;p2=p1;
}
size++;
cout<<"继续输入"<cin>>s1>>s2>>c1>>c2>>c3;
}
cout<<"输入结束!
"<for(inti=0;i<80;i++)
cout<<'-';
p2->next=0;
return(head);
}
2、排序
node*GradeManage:
:
sort(node*head)
{
node**p;
p=newnode*[size];
if(head==0)
{
cout<<"链为空,产生错误!
"<return(NULL);
}
if(head->next==0)
{
cout<<"只有一个数据!
"<return(head);
}
else
{
node*temp;
p[0]=head;
inti;
for(i=1;i{
p[i]=p[i-1]->next;
}
p[size-1]->next=NULL;
for(i=0;ifor(intj=0;jif(strcmp(p[j]->num,p[j+1]->num)>0)
{
temp=p[j];p[j]=p[j+1];p[j+1]=temp;
}
}
p[size-1]->next=NULL;
head=p[0];
for(inti=1;i{
p[i-1]->next=p[i];
}
p[size-1]->next=0;
cout<<"排序后:
"<print(head);
delete[]p;
return(head);
}
3.查找
voidGradeManage:
:
search(node*head,char*p)
{
node*p1,*p2;
if(head==0)
{
cout<<"链为空,无法找到所要查找的学生信息!
";
return;
}
if(strcmp(head->num,p)==0)
{
p1=head;
cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cout<num<<""<name<<""<major<<""<grade
<<""<clas<<""<teacher<<""<sex<<""<}
else
{
p1=head;p2=head->next;
while(p2->next&&strcmp(p2->num,p)!
=0)
{
p1=p2;p2=p2->next;
}
if(strcmp(p2->num,p)==0)
{
cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cout<num<<""<name<<""<major<<""<grade
<<""<clas<<""<teacher<<""<sex<<""<}
else
cout<<"链上没有找到要找的学生信息!
"<}
return;
}
4.删除
voidGradeManage:
:
DeleteChain(node*head)
{
node*p;
while(head)
{
p=head;
head=head->next;
deletep;
}
}
5.求平均分
node*fun(node*head,float&aver)
{
student*h,*p,*p1;
floatsum=0;
intn=0;
aver=0;h=NULL;
p=head;
while(p!
=null){
sum+=p->grade;
n++;
p=p->next;
}
aver=sum/n;
}
4、程序代码
#include
#include
intsize=0;
structnode
{
charnum[15];
charname[15];
charmajor[15];
chargrade[15];
charclas[15];
charteacher[15];
charsex[5];
floatbirthday[10];
floatscore[8];
node*next;
}head;
classGradeManage{
public:
node*create(void);
voidprint(constnode*head);
node*sort(node*head);
node*insert(node*head,node*p);
voidsearch(node*head,char*p);
node*Deleteonenode(node*head,char*p);
voidDeleteChain(node*head);
};
node*GradeManage:
:
create(void)
{
node*p1,*p2,*head=0;
chars1[15],s2[25],s3[15],s4[15],s5[15],s6[5],s7[10],s8[10];
floatc1,c2,c3;
cout<<"请输入学生的相关信息,以学号为字符0结束(其他项任意,但要输入!
!
):
"<cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cin>>s1>>s2>>s3>>s4>>s4>>s5>>s6>>s7>>s8>>c1>>c2>>c3;
while(strcmp(s1,"0")!
=0)
{
p1=newnode;
strcpy(p1->num,s1);
strcpy(p1->name,s2);
strcpy(p1->major,s3);
strcpy(p1->grade,s4);
strcpy(p1->clas,s5);
strcpy(p1->teacher,s6);
strcpy(p1->sex,s7);
p1->score[1]=c1;
p1->score[2]=c2;
p1->score[3]=c3;
if(head==0)
{
head=p1;p2=p1;
}
else
{
p2->next=p1;p2=p1;
}
size++;
cout<<"继续输入"<cin>>s1>>s2>>c1>>c2>>c3;
}
cout<<"输入结束!
"<for(inti=0;i<80;i++)
cout<<'-';
p2->next=0;
return(head);
}
voidGradeManage:
:
print(constnode*head)
{
constnode*p=head;
cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<while(p!
=0)
{
cout<num<<""<name<<""<major<<""<grade
<<""<clas<<""<teacher<<""<sex<<""<p=p->next;
}
for(inti=0;i<80;i++)
cout<<'-';
cout<<'\n';
}
node*GradeManage:
:
sort(node*head)
{
node**p;
p=newnode*[size];
if(head==0)
{
cout<<"链为空,产生错误!
"<return(NULL);
}
if(head->next==0)
{
cout<<"只有一个数据!
"<return(head);
}
else
{
node*temp;
p[0]=head;
inti;
for(i=1;i{
p[i]=p[i-1]->next;
}
p[size-1]->next=NULL;
for(i=0;ifor(intj=0;jif(strcmp(p[j]->num,p[j+1]->num)>0)
{
temp=p[j];p[j]=p[j+1];p[j+1]=temp;
}
}
p[size-1]->next=NULL;
head=p[0];
for(inti=1;i{
p[i-1]->next=p[i];
}
p[size-1]->next=0;
cout<<"排序后:
"<print(head);
delete[]p;
return(head);
}
node*GradeManage:
:
insert(node*head,node*p)
{
node*p1,*p2;
if(head==0){p->next=0;return(p);}
if(strcmp(head->num,p->num)>=0)
{
p->next=head;
return(p);
}
p2=p1=head;
while(p2->next&&strcmp(p2->num,p->num)<0)
{
p1=p2;p2=p2->next;
}
if(strcmp(p2->num,p->num)<0)
{
p2->next=p;p->next=0;
}
else
{
p->next=p2;p1->next=p;
}
return(head);
}
voidGradeManage:
:
search(node*head,char*p)
{
node*p1,*p2;
if(head==0)
{
cout<<"链为空,无法找到所要查找的学生信息!
";
return;
}
if(strcmp(head->num,p)==0)
{
p1=head;
cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cout<num<<""<name<<""<major<<""<grade
<<""<clas<<""<teacher<<""<sex<<""<}
else
{
p1=head;p2=head->next;
while(p2->next&&strcmp(p2->num,p)!
=0)
{
p1=p2;p2=p2->next;
}
if(strcmp(p2->num,p)==0)
{
cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cout<num<<""<name<<""<major<<""<grade
<<""<clas<<""<teacher<<""<sex<<""<}
else
cout<<"链上没有找到要找的学生信息!
"<}
return;
}
node*GradeManage:
:
Deleteonenode(node*head,char*p)
{
node*p1,*p2;
if(head==0)
{
cout<<"链为空,无法找到所要删除的学生信息!
"<return(0);
}
if(strcmp(head->num,p)==0)
{
p1=head;
head=head->next;
deletep1;
cout<<"*********"<<"已成功删除!
"<<"*********"<}
else
{
p1=head;p2=head->next;
while(p2->next&&strcmp(p2->num,p)!
=0)
{
p1=p2;p2=p2->next;
}
if(strcmp(p2->num,p)==0)
{
p1->next=p2->next;
deletep2;
cout<<"*********"<<"已成功删除!
"<<"*********"<}
else
cout<<"*********"<<"链上没有找到要删除的学生信息!
"<<"*********"<}
return(head);
}
voidGradeManage:
:
DeleteChain(node*head)
{
node*p;
while(head)
{
p=head;
head=head->next;
deletep;
}
}
intmain()
{
GradeManageclass1;
node*head;
chars1[15],s2[25],s3[15],s4[15],s5[15],s6[5],s7[10],s8[10];
floatc1,c2,c3;
node*p1;
head=class1.create();//新建链表
class1.print(head);
cout<<"请输入要插入学生的信息!
"<cout<<""<<"学号"<<""<<"姓名"<<""<<"系"<<""
<<"班级"<<""<<"老师"<<""<<"性别"<<""<<"生日"<<""<<"各科成绩"<<""<cin>>s1>>s2>>s3>>s4>>s4>>s5>>s6>>s7>>s8>>c1>>c2>>c3;
p1=newnode;
strcpy(p1->num,s1);
strcpy(p1->name,s2);
strcpy(p1->major,s3);
strcpy(p1->grade,s4);
strcpy(p1->clas,s5);
strcpy(p1->teacher,s6);
strcpy(p1->sex,s7);
p1->score[1]=c1;
p1->score[2]=c2;
p1->score[3]=c3;
head=class1.insert(head,p1);
cout<<"插入后:
"<class1.print(head);
size++;//完成排序功能
head=class1.sort(head);
chars9[15];//完成查找功能
cout<<"你要查找的学生的学号:
";
cin>>s9;
class1.search(head,s3);
for(inti=0;i<80;i++)
cout<<'-';
cout<<"请输入你要删除的学生的学号:
";//完成删除功能
chars10[15];
cin>>s10;
he