成绩.docx
《成绩.docx》由会员分享,可在线阅读,更多相关《成绩.docx(42页珍藏版)》请在冰豆网上搜索。
成绩
成绩
C++程序设计
综合性实验
学生选课小系统
姓名文鑫
班级
数学122班
综合性实验任务书
实验项目名称:
学生选课小系统
课程名称:
C++程序设计
面向专业:
信息与计算机相关专业
计划学时:
4学时
实验类型:
√综合设计
实验目的:
综合练习课程的所有知识点,熟练面向对象程序设计的方法和流程,提高分析和解决问题的能力,培养动手能力。
实验要求:
包括开发环境要求、技术文档要求两部分。
开发环境要求:
软件环境:
windowsXP/windows7
硬件环境:
计算机(Pen4CPU,512MRAM,60G以上硬盘)
技术文档要求:
按照实验报告编写要求进行。
要求相关图表绘制规范,软、硬件功能描述清晰,实验总结真实深刻。
实验内容:
建立课程类和学生类。
学生基本信息包括学号和姓名两项。
要求实现:
每个学生最多可选5门课,最少要选2门课。
根据学生实际选的课,确定学生姓名。
能查询学生选的所有课程的成绩,能得出学生所选课程的平均成绩。
可以为某个学生增加一门课或者去掉一门课,并在课程里同时增加或者去掉该学生的姓名。
每门课最多允许40名学生选,能查询每门课已选的学生人数及学生姓名名单。
每门课设置学分,每门课有所有学生成绩,可以为课程设置学分数,每门课可以查到选该门课的某个学生的成绩,也可以得到选该门课的所有学生的平均成绩。
实验仪器设备:
每个学生一台计算机,配置相关软件。
实验报告版式要求
A4纸张打印;上下页边距各2.5cm,左右页边距各3.0cm,页眉1.5cm页脚1.75cm;页码位于页脚居中打印;奇数页页眉“网络与通信综合性实验”,偶数页页眉“Internet的局部仿真”,页眉宋体小5号,一级标题:
黑体三号粗体字;二级标题:
黑体4号;三级标题黑体小4号,正文,宋体5号。
学生选课小系统综合性实验报告
实验名称:
学生选课小系统
专业班级数学122学号201212010220姓名文鑫报告日期
实验目的:
实验要求:
实验内容:
实验体会与总结:
参考文献
运行结果
1.选修课系统管理端
输入密码:
345670进入管理界面:
1.1增加学生
1.2.增加课程:
1.3.删除学生:
1.4.删出课程:
1.5.填写成绩:
1.6.修改学分
2.选修课系统学生端
学生选课系统主界面:
2.1学生选课:
2.2.学生情况
2.3选课情况
程序源代码:
#include
#include
#include
#include
usingnamespacestd;
//定义课程
classcourse//某个学生所学的课程中的某一个
{public:
charcname[20];//课程名称
floatgrade;//课程成绩
course*Next;//指向下一个课程的指针
};
//学生类
classstudent
{public:
student()
{root=NULL;
constintmaxcourse=5;
factcourse=0;}
voidreadname(charN[]);//读入学生的姓名
voidgetname(charN[]);//得到学生的姓名
voidwrecourse(charN[],floatscore);//要据课程名写入学生课程的成绩
floataverage();//学生课程的平均成绩
voidaddcourse(charN[],floatg);//给学生增加一门课
intfindcourse(charN[]);//查找是否已有此课程,如果有返回,如果没有返回
intretfactcourse()
{returnfactcourse;}//得到所学的课程数目
course*retroot()
{returnroot;}//利用键表将所有的课程保存起来
intretmaxcourse()
{return5;}//得到最多可学的课程数目
intretmincourse()
{return2;}//得到最多可学的课程数目
voidclrroot()//清零
{root=NULL;
factcourse=0;}
private:
charsname[20];//学生的姓名
intmaxcourse;//学生最多可以学五门课程
intmincourse;//学生最少可以学两门课程
intfactcourse;//学生实际所学的课程数目
course*root;//课程的根结点指针
};
voidstudent:
:
readname(charN[])//读入学生的姓名
{strcpy(sname,N);}
voidstudent:
:
getname(charN[])//得到学生的姓名
{strcpy(N,sname);}
voidstudent:
:
wrecourse(charN[],floatscore)//要据课程名写入学生课程的成绩
{course*p=root;
if(p==NULL)
return;
if(p!
=NULL)
p=p->Next;
while(p)
{if(strcmp(p->cname,N)==0)
p->grade=score;
p=p->Next;}
}
floatstudent:
:
average()//学生课程的平均成绩
{floataver=0.0;
course*p=root;
while(p)
{aver=aver+p->grade;}
aver=aver/factcourse;
returnaver;}
voidstudent:
:
addcourse(charN[],floatg)//给学生增加一门课
{course*s=newcourse;
s->Next=NULL;
if(root==NULL)
root=s;
course*p=root;
course*newcourse=newcourse;
newcourse->Next=p->Next;
p->Next=newcourse;
strcpy(newcourse->cname,N);
newcourse->grade=g;
factcourse++;}
intstudent:
:
findcourse(charN[])//查找是否已有此课程,如果有返回,如果没有返回
{course*p=root;
if(root==NULL)
return0;
p=p->Next;
while(p)
{if(strcmp(p->cname,N)==0)
return1;
p=p->Next;}
return0;}
classstudentdb
{public:
studentstu;
studentdb*Next;};
structstudentname
{chartname[20];//学生的名字
floatresult;//学生所得的该课程分数
studentname*Next;};
//课程类
classsubject
{public:
subject()
{first=NULL;
maxstudent=30;
activestudnet=0;}
floatreadcredit();//得到课程的学分
voidgetcredit(floata);//设置学分
floatgetaverage();//得到学生的平均成绩
floatgetresult(charN[]);//查找某个学生的成绩
voidgetkname(charN[]);//读出课程的名称
voidsetkname(charN[]);//读入课程的名称
studentname*retfirst()
{returnfirst;}//返回根结点
voidfindstudent(studentdb*P);//根据该课程的名称,寻找选这课程的学生
intretactivestudent()
{returnactivestudnet;}//返回实际学生数
intretmaxstudent()
{return40;}//返回最多学生数
voidclractivestudnet()
{activestudnet=0;}//从文件中读出来后将实际学生数清零
private:
intmaxstudent;//最多学生数
intactivestudnet;//实际学生数
studentname*first;//学生名单
floatcredit;//该课程的学分
floataveragerusult;//该课程的平均成绩
charkname[20];//该课程的名称
};
floatsubject:
:
readcredit()//得到课程的学分
{returncredit;}
voidsubject:
:
getcredit(floata)//设置学分
{credit=a;}
floatsubject:
:
getaverage()//得到学生的平均成绩
{floatk=0.0;
studentname*p;
p=first->Next;
if(p==NULL)
return0;
while(p)
{k=k+p->result;
p=p->Next;}
returnk/activestudnet;}
floatsubject:
:
getresult(charN[])//查找某个学生的成绩
{studentname*p;
p=first;
while(p)
{if(strcpy(p->tname,N)==0)
returnp->result;
p=p->Next;}
return-1;}
voidsubject:
:
getkname(charN[])//读出课程的名称
{strcpy(N,kname);}
voidsubject:
:
setkname(charN[])//读入课程的名称
{strcpy(kname,N);}
voidsubject:
:
findstudent(studentdb*P)//根据该课程的名称,寻找选这课程的学生
{studentname*newcode=newstudentname;
newcode->Next=NULL;
first=newcode;
studentname*T=first;
studentdb*K=P->Next;
while(K)
{course*Y=K->stu.retroot();
if(Y==NULL)
{K=K->Next;
continue;}
if(Y!
=NULL)
Y=Y->Next;
while(Y)
{if(strcmp(Y->cname,kname)==0)
{studentname*Acode=newstudentname;
charName[20];
K->stu.getname(Name);
strcpy(Acode->tname,Name);
Acode->result=Y->grade;
Acode->Next=T->Next;
T->Next=Acode;
activestudnet=activestudnet+1;
break;}
Y=Y->Next;}
K=K->Next;}
return;}
voidtuichu()
{system("cls");
cout<<"\n\n谢谢你使用选修课系统\n\n"<cout<<"\nyou'rewelcome!
\n"<getch();
exit(-1);}
//总菜单
charmenu()
{intk=0;
chara[3],c,i;
system("cls");
cout<cout<<"----------------------------------------------------------------\n"
<<"**\n"
<<"*学生选修课系统*\n"
<<"**\n"
<<"**\n"
<<"*操作方式:
*\n"
<<"*1.选修课系统学生端*\n"
<<"**\n"
<<"*2.选修课系统管理端*\n"
<<"**\n"
<<"-----------------------------------------------------------------\n"<while
(1)
{cout<<"\n\t\t请选择登入方式:
";
cin>>a;
if(strlen(a)==1)
{for(i='1';i<='2';i++)
{c=i;
if(c==a[0])
returnc;}
}
cerr<<"\n\n\t\t\t\t输入有误!
\n"<k++;
if(k>2)
{system("cls");
cerr<<"\n\n\n\t\t~~提示~~:
错误输入次数超过三次,你将被强制退出!
!
\n\n"<cout<<"\t\t按任意键继续"<getch();
tuichu();}
}
}
//选修课系统端操作
charcustom()
{charA[10];charb;chari;intk=0;
system("cls");;
cout<<"\n\n\n"
<<"****************************************************\n"
<<"*选修课系统学生端*\n"
<<"**\n"
<<"*操作方式:
.*\n"
<<"*1、学生选课*\n"
<<"*2、学生情况*\n"
<<"*3、选课情况*\n"
<<"*4、退出系统*\n"
<<"**\n"
<<"****************************************************\n"<while
(1)
{cout<<"\t\t\t请选择操作方式:
";
cin>>A;
if(strlen(A)==1)
{for(i='1';i<='4';i++)
{b=i;
if(b==A[0])returnb;}
}
cerr<<"\n\t\t\t\t输入有误!
\n"<k++;
if(k>2)
{system("cls");
cerr<<"\n\n\t\t\t~~提示~~:
错误输入超过三次!
你将被强制退出!
!
\n"<cout<<"\t\t按任意键继续"<getch();
tuichu();}
}
}
charserver()
{charA[10];charb;chari;intk=0;system("cls");;
cout<<"\n\n\n"
<<"※※※※※※※※※※※※※※※※※※※※※※※※※\n"
<<"※※\n"
<<"※选修课系统管理端※\n"
<<"※※\n"
<<"※操作方式:
※\n"
<<"※1.增加学生2.增加课程※\n"
<<"※3.删除学生4.删除课程※\n"
<<"※5.填写成绩6.更改学分※\n"
<<"※7.学生情况8.选课情况※\n"
<<"※9.保存数据0.退出系统※\n"
<<"※※\n"
<<"※※※※※※※※※※※※※※※※※※※※※※※※※\n"<while
(1)
{cout<<"\t\t请选择操作方式:
";
cin>>A;
if(strlen(A)==1)
{for(i='0';i<='9';i++)
{b=i;
if(b==A[0])
returnb;}
}
cerr<<"\n\t\t\t\t输入有误!
\n"<k++;
if(k>2)
{cerr<<"错误输入超过三次!
\n";
exit(-1);}
}
}
//密码检查
voidpassword()
{
intk=0,i;
charA[]="123456";
charB[10];
chara;
system("cls");
for(i=0;i<8;i++)
cout<while(k<=2)
{
printf("\t\t\t请输入管理员密码:
");
i=0;
while
(1)
{
a=getch();
if(a==13)
break;
B[i]=a;
i++;
printf("*");
}
B[i]='\0';
if(strcmp(A,B)==0)
return;
else
{
k++;
cerr<<"\n\n\t\t\t密码输入错误!
请重新输入!
\n"<}
if(k>=3)
{
system("cls");
cerr<<"\n\n\t\t\t输入错误密码超过三次!
请按任意键退出.."<getch();
tuichu();
}
}
}
structsubjectdb
{subjectsub;
subjectdb*Next;};
intmenu_2_7(studentdb*P);
intmenu_2_9(studentdb*Y,subjectdb*P);
intmenu_2_8(subjectdb*P);
//学生端功能函数
intmenu_1_1(studentdb*P,subjectdb*X)//学生选课
{system("cls");
cout<<"\n\n\t\t\t\t学生选课操作"<studentdb*q=P->Next;
inti;
charN[20],M[20];
if(q!
=NULL)
cout<<"\n\n\n\t\t所有学生名单如下:
\n"<else
{cerr<<"\n\n\n\t\t对不起,暂无学生名单!
请先创建!
请按任意键继续.."<return1;}
while(q)
{q->stu.getname(N);
cout<<"\t\t\t\t"<cout<q=q->Next;}
q=P->Next;
if(q==NULL)
return1;
cout<<"\n\n\t\t请输入学生姓名:
";
cin>>N;
i=0;
q=P->Next;
while(q)
{q->stu.getname(M);
if(strcmp(N,M)==0)
i++;
q=q->Next;}
intj=0,k=1;
if(i==0)
{cout<<"\n\n\t\t没有这个学生!
!
请按任意键返回.."<return1;}
elseif(i>1)
{cout<<"\n\n\t\t共找到"<
cout<<"\t\t选择第几个:
";
cin>>k;}
if(k>i||k<=0)
{cerr<<"\n\t\t\t输入有误!
按任意键继续"<return1;}
q=P->Next;
j=0;
while(q)
{q->stu.getname(M);
if(strcmp(N,M)==0)
j++;
if(j==k)
{if(q->stu.retfactcourse()>=q->stu.retmaxcourse())
{cout<<"\n\t\t所选课程已满!
按任意键继续"<return1;}
else
{subjectdb*t=X->Next;
charN1[20];
system("cls");;
if(t!
=NULL)
{cout<<"\n\n\n\t\t所有课程如下:
"<cout<<"\n\t\t\t\t课程名称\t\t学分"<else
{cerr<<"\n\n\n\t\t对不起,暂时没有课程"<return1;}
while(t)
{t->sub.getkname(N1);
cout<<"\t\t\t\t"<sub.readcredit()<t=t->Next;}
charN2[20];
cout<<"\n\t输入你所要选的课程:
";
cin>>N2;
t=X->Next;
while(t)
{t->sub.getkname(N1);
if(strcmp(N1,N2)==0)
{if(q->stu.findcourse(N2)==1)
{cout<<"\n\t\t此课程你已选过了,不能再选.按任意键继续"<return1;}