课程设计01.docx

上传人:b****5 文档编号:4949655 上传时间:2022-12-12 格式:DOCX 页数:21 大小:91.32KB
下载 相关 举报
课程设计01.docx_第1页
第1页 / 共21页
课程设计01.docx_第2页
第2页 / 共21页
课程设计01.docx_第3页
第3页 / 共21页
课程设计01.docx_第4页
第4页 / 共21页
课程设计01.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

课程设计01.docx

《课程设计01.docx》由会员分享,可在线阅读,更多相关《课程设计01.docx(21页珍藏版)》请在冰豆网上搜索。

课程设计01.docx

课程设计01

面向对象程序设计

课程设计报告

 

题目:

学生成绩管理

设计者:

荣灿

班级:

计科4班

学号:

1250312072

指导教师:

郭波

 

2014年6月8日

目录

1问题描述及要求1

2需求分析1

3系统模型1

4面向对象设计要点1

5系统难点分析1

6测试分析1

7课程设计总结1

8参考资料1

设计题目

1问题描述及要求

1,定义学生(student)类,其中至少包括姓名、性别、学号、班级和四门功课的成绩。

2,实现下面的功能

1、设计菜单实现功能选择;

2、输入功能:

输入学生信息,并保存到文件中;

3、计算每个学生的总分与平均分并排序

4、能根据学号修改学生信息

5、能根据学号删除学生信息

6、查询功能:

1)能够根据学号查询学生信息;

2)能够根据姓名、班级查询学生信息

3)统计学生成绩,按照班级和科目计算平均分。

2需求分析

系统应包括记录编辑和记录查询等功能模块。

记录编辑功能完成学生记录编辑的记录增加、记录删除和记录查询,记录排序等功能。

记录查询功能可以对数据集中的记录进行查询,要求按学生学号进行精确查询,按学生姓名、班级进行模糊查询。

3系统模型

3.1类图(包含类名,类属性,类操作,以及类之间的联系)

 

Student

--特性

+name

+number

+classnumber

+sex

+istream&operator>>(istream&input,Student&st)

--操作

+Get_name()

+Get_number()

+Get_sex()

+Get_classnumber()

+voidloaddata(Student&)

+floatsum

+floatave_score

+floatscore[num_subject]

 

3.2类描述

只定义了一个学生类

classStudent

{

public:

stringGet_name();

stringGet_number();

stringGet_sex();

stringGet_classnumber();

friendvoidloaddata(Student&);/*从文件中读取记录*/

voidset_info();//设置学生信息

voidprint();//显示学生信息

floatsum;//总分

floatave_score;//平均分

floatscore[num_subject];//四门成绩

private:

stringname;//姓名

stringnumber;//学号

stringclassnumber;//班级

stringsex;//性别

};

3.3系统总体流程

 

4面向对象设计要点

系统运用到了面向对象设计中的类的知识点,定义了学生类。

以及运用到了容器vector的操作和ofstreamarchive文件的操作。

5系统难点分析

vetor,的使用问题。

以前没有接触过vector,不知道怎么使用,老师给了实例,给时间我们熟悉,教我们怎么使用,最后能够使用vectoe了,还有系统在调试时出错,无法运行,在同学的帮助下也解决了。

6测试分析

1进入主界面

2添加记录

 

3显示全部记录

4查询学生信息

 

 

5修改学生信息

6删除学生信息

7课程设计总结

通过这次课程设计,对c++的了解进一步加深,学习了一些课堂上没有的知识,非常感谢指导老师的帮助,无论在理论上还是在实践中,都给与我很大的帮助,使我得到很大的提高,为我指明了方向,避免了走弯路的可能。

8参考资料

面向对象程序设计教程(c++语言描述)

C++Primer中文版(第四版)

源程序

#include

#include

#include

#include

#include

usingnamespacestd;

#definenum_subject4

conststringsubject_[num_subject]={"高数","英语","C++","马基"};

classStudent

{

public:

stringGet_name();

stringGet_number();

stringGet_sex();

stringGet_classnumber();

friendvoidloaddata(Student&);

floatsum;

floatave_score;

floatscore[num_subject];

private:

stringname;

stringnumber;

stringclassnumber;

stringsex;

friendistream&operator>>(istream&input,Student&st)

{floatsum1=0;

cout<<"\n\t请输入学生的信息:

"<

cout<<"\t\t\t请输入姓名:

";

input>>st.name;

cout<<"\n\t\t\t请输入学号:

";

input>>st.number;

cout<

cout<<"\t\t\t请输入性别:

";

input>>st.sex;

cout<

cout<<"\t\t\t请输入班级:

";

input>>st.classnumber;

cout<<"\n\t\t\t请输入四门功课的成绩:

";

for(inti=0;i

{input>>st.score[i];

sum1+=st.score[i];

}

st.sum=sum1;

st.ave_score=sum1/num_subject;

returninput;

}

friendostream&operator<<(ostream&output,Student&st)

{output<

<

for(inti=0;i

output<<'\t'<

output<<'\t'<

returnoutput;

}

};

vectorstu;

vector:

:

iteratorIterator;

Studentstud;

boolComp(constStudent&a,constStudent&b);

voiddispTable();

voidInput();

voidDisplay();

voidSort();

voidUpdata();

voidDelete();

voidfind();

voidQuerybyName();

voidQuerybyNumner();

voidManagerinfo();

voidsave();

intmenuSelect();

voidhandleMenu();

voidstart();

 

voiddispTable()//表头

{cout<<"学号\t名字\t班级\t性别";

for(inti=0;i

cout<<'\t'<

cout<<"\t总分\t平均分\t\n";

}

boolComp(constStudent&a,constStudent&b){

if(a.sum!

=b.sum)returna.sum>b.sum;

elsereturna.sum>b.sum;

}

inlinestringStudent:

:

Get_classnumber()

{returnclassnumber;}

inlinestringStudent:

:

Get_name()

{returnname;}

inlinestringStudent:

:

Get_number()

{returnnumber;}

inlinestringStudent:

:

Get_sex()

{returnsex;}

voidInput()

{charch[2];

do

{cin>>stud;

stu.push_back(stud);

cout<<"\t\t\tdoyouwantaddmore?

(Y|N):

";

cin>>ch;

}while(ch[0]=='y'||ch[0]=='Y');

}

voidDisplay()

{if(stu.empty()){cout<<"\t\t\t当前没有记录,请先添加记录!

\n";return;}

elsedispTable();

for(Iterator=stu.begin();Iterator!

=stu.end();Iterator++)

{cout<<(*Iterator);}

}

voidSort()

{if(stu.empty())

{cout<<"\t\t\t当前没有记录,请先添加记录!

\n";return;}

sort(stu.begin(),stu.end(),Comp);

cout<<"\n

}

voidUpdata()

{if(stu.empty()){cout<<"\t\t\t当前没有记录,请先添加记录!

\n";return;}

stringid;charch[2];boolmark=true;

cout<<"请输入需修改的学生的学号:

";

cin>>id;

for(Iterator=stu.begin();Iterator!

=stu.end();Iterator++)

{if((*Iterator).Get_number()==id)

{dispTable();mark=false;

cout<<(*Iterator);

cout<<"您确定要修改此条记录?

(Y|N)";

cin>>ch;

if(ch[0]=='y'||ch[0]=='Y')

{cin>>stud;

(*Iterator)=stud;

}

else{cout<<"此条记录没有被修改!

\n";return;}

}

}

if(mark){cout<<"\n\没有找到相关记录!

\n";return;}

Sort();

cerr<<"\n\t\t\t修改成功!

\n";

}

voidDelete()/*按学号删除一条记录*/

{if(stu.empty()){cout<<"当前没有记录,请先添加记录!

\n";return;}

strings;charch[2];;boolmark=true;

cout<<"\t\t\t请输入需删除的学生的学号:

";

cin>>s;

for(Iterator=stu.begin();Iterator!

=stu.end();)

{if((*Iterator).Get_number()==s)

{dispTable();mark=false;

cout<<(*Iterator);

cout<<"您确定要删除此条记录?

(Y|N)";

cin>>ch;

if(ch[0]=='y'||ch[0]=='Y')

{Iterator=stu.erase(Iterator);

cout<<"\n删除成功!

\n";

}

else

{cout<<"\n此条记录没有被删除!

\n";Iterator++;}

}

else

{Iterator++;}

}

if(mark){cout<<"\n\没有找到相关记录!

\n";return;}

Sort();

}

voidQuerybyNumber()

{if(stu.empty()){cout<<"\当前没有记录,请先添加记录!

\n";return;}

strings;boolmark=true;intn=0;

cout<<"请输入需查询的学生的学号:

";

cin>>s;

for(Iterator=stu.begin();Iterator!

=stu.end();Iterator++)

{if((*Iterator).Get_number()==s)

{n++;

if(n==1)dispTable();

mark=false;

cout<<(*Iterator);

}

}

if(mark)cout<<"\n\没有找到相关记录!

\n";

}

voidQuerybyName()

{if(stu.empty()){cout<<"\n当前没有记录,请先添加记录!

\n";return;}

stringna,cn;boolmark=true;intn=0;

cout<<"\n\t\t\t请输入需查询的学生的姓名,班级:

";

cin>>na>>cn;

for(Iterator=stu.begin();Iterator!

=stu.end();Iterator++)

{if((*Iterator).Get_name()==na&&(*Iterator).Get_classnumber()==cn)

{mark=false;

n++;

if(n==1)dispTable();

cout<<(*Iterator);

}

}

if(mark)cout<<"\n\没有找到相关记录!

\n";

}

voidfind()/***查找**/

{if(stu.empty()){cerr<<"\n当前没有记录,请添加记录!

\n";return;}

charch,c[3];

do{

cout<<"\n\t\t\t请输入查找方式:

1,学号2,姓名,班级:

";

cin>>ch;

while(ch!

='1'&&ch!

='2')

{cout<<"\n您输入有误,请重新输入:

";cin>>ch;}

switch(ch)

{

case'1':

QuerybyNumber();break;

case'2':

QuerybyName();break;

}

cout<<"\n\您想继续查找吗?

1是,0否";

cin>>c;

while(c[0]!

='1'&&c[0]!

='0')

{cout<<"\n您输入有误,请重新输入:

";cin>>c;}

}while(c[0]=='1');

}

voidManagerinfo()/*班级学生成绩统计*/

{if(stu.empty()){cout<<"\n\当前没有记录,请先添加记录!

\n";return;}

floatsum[num_subject];

memset(sum,0,num_subject*sizeof(int));

stringcn;inti,j,n=0;

boolmark=true;

intk=stu.size();

cout<<"\n\t\t\t请输入要统计的班级:

";

cin>>cn;

for(i=0;i

if(cn==stu[i].Get_classnumber())

{mark=false;

n++;

if(n==1)dispTable();

cout<

for(j=0;j

sum[j]+=stu[i].score[j];

}

if(mark){cout<<"\n\t\t\t没有找到相关记录!

";return;}

cout<<"\n\t该班有"<

\n"<

for(i=0;i

{cout<<'\t'<

cout<<":

\t"<

}

cout<

}

voidsave()/*将所有记录写入文件*/

{if(stu.empty()){cout<<"\n\t\t\t当前没有记录,请先添加记录!

\n";return;}

charfilename[20];

cout<<"将记录保存到文件中\n";

cout<<"\请输入保存记录的文件名:

";

inti,j,k=stu.size();

cin>>filename;

ofstreamfile;

file.open(filename,ios:

:

app|ios:

:

binary);

if(!

file){cout<<"\n文件打开失败!

\n";return;}

for(i=0;i

{file<

<<'\t'<

for(j=0;j

file<<'

file<<'<

}

file.close();

cout<<"\t\t\t保存成功!

\n";

}

voidloaddata(Student&st)

{charfilename[20];intj;

cout<<"从文件中读取记录\n";

cout<<"请输入文件名:

";

cin>>filename;

ifstreamofile;

ofile.open(filename,ios:

:

out|ios:

:

binary);

if(!

ofile){cout<<"\n\文件打开失败!

\n";return;}

ofile>>st.number>>st.name>>st.classnumber>>st.sex;

for(j=0;j

ofile>>st.score[j];

ofile>>st.sum>>st.ave_score;

while(!

ofile.eof())

{stu.push_back(st);

ofile>>st.number>>st.name>>st.classnumber>>st.sex;

for(j=0;j

ofile>>st.score[j];

ofile>>st.sum>>st.ave_score;

}

ofile.close();

cerr<<"\n\t\t\t读取成功!

\n";

}

 

intmenuSelect()

{cout<<"*************************\n"

<<"\1.增加记录*\n"

<<"\2.显示全部记录*\n"

<<"\3.记录排序*\n"

<<"\4.修改记录*\n"

<<"\5.删除记录*\n"

<<"\6.查询记录*\n"

<<"\7.统计学生成绩*\n"

<<"\8.保存学生记录*\n"

<<"\9.读取学生记录*\n"

<<"\t0.退出程序*\n"

<<"\*************************\n\n\n";

charchoice[2];

while

(1)

{cout<<"\n\t\t\t请输入您的选择:

";

cin>>choice;

cin.ignore();

if(choice[0]<'0'||choice[0]>'9')

{cout<<"\n输入错误,重选0-9:

";}

elsebreak;

}

return(choice[0]-'0');

}

voidhandleMenu()

{intn=0;

cout<

while

(1)

{switch(menuSelect())

{

case1:

printf("\t\t\tInputRecords\n");

Input();

system("cls");//清屏

break;

case2:

printf("\DisplayAllRecords\n");

Display();

printf("");

system("pause");

system("cls");

break;

case3:

printf("Sort\n");

Sort();

printf();

system("pause");

system("cls");

break;

case4:

printf("\t\t\tUpdataaRecord\n");

Updata();

printf();

system("pause");

system("cls");

break;

case5:

printf("tDeleteaRecord\n");

Delete();

printf();

system("pause");

system("cls");

break;

case6:

printf("\Query\

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

当前位置:首页 > 教学研究 > 教学计划

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

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