成绩.docx

上传人:b****9 文档编号:25037736 上传时间:2023-06-04 格式:DOCX 页数:42 大小:413.04KB
下载 相关 举报
成绩.docx_第1页
第1页 / 共42页
成绩.docx_第2页
第2页 / 共42页
成绩.docx_第3页
第3页 / 共42页
成绩.docx_第4页
第4页 / 共42页
成绩.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

成绩.docx

《成绩.docx》由会员分享,可在线阅读,更多相关《成绩.docx(42页珍藏版)》请在冰豆网上搜索。

成绩.docx

成绩

成绩

 

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;}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1