成绩.docx
- 文档编号:25037736
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:42
- 大小:413.04KB
成绩.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"< 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;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成绩