面向对象程序设计+课程设计报告1.docx
《面向对象程序设计+课程设计报告1.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计+课程设计报告1.docx(35页珍藏版)》请在冰点文库上搜索。
![面向对象程序设计+课程设计报告1.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/fd9328d1-5e20-4325-802b-ab5fa0e2bb03/fd9328d1-5e20-4325-802b-ab5fa0e2bb031.gif)
面向对象程序设计+课程设计报告1
面向对象程序设计课程设计
学生学籍管理系统
院系:
计算机科学技术学院二系
班级:
计11–1班
姓名:
梁娟(20号)
合作者:
田媛媛迟苗苗
指导教师:
薛曼玲
2012年7月06日
面向对象程序设计课程设计任务书
一、题目:
学生学籍管理系统
二、设计要求
(1)梁娟(组长)、田媛媛和迟苗苗组成设计小组。
(2)小组成员分工协作完成,要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。
(3)查阅相关资料,自学具体课题中涉及到的新知识。
(4)根据实现的功能,划分出合理的对象类,明确对象类间的关系。
为每个对象类设计正确的属性和方法,为每个方法设计合理的方法体。
(5)编程简练,程序功能齐全,能正确运行。
(6)课题完成后提交课程设计报告,格式规范,内容详实。
其主要内容包括:
1-封皮、2-课程设计任务书,3-指导教师评语与成绩、4-目录、5-需求分析、6-概要设计、7-详细设计(含主要代码)、8-调试分析与测试结果、9-用户使用说明、10-附录或参考资料。
报告用A4纸打印,中文字体为宋体,西文字体用TimeNewRoma,小四号字,行距采用“固定值”18磅,首行缩进2字符。
(7)课程设计报告内容的说明:
需求分析-分析课题需要实现的功能以及要用到的知识点,分析课题涉及的对象间的关系;概要设计-根据实现的功能,划分出合理的对象类,明确对象类间的关系;为每个对象类设计正确的属性和方法,为每个方法设计合理的方法体;详细设计-具体的类、对象和功能的实现以及主要程序代码;调试分析与测试结果-用多组测试用例调试分析系统的正确性、完备性等各项性能指标,写出测试结果;用户使用说明-编写该系统的使用说明书;附录或参考资料-完整的程序代码以及查阅资料的参考文献。
三、课程设计工作量
由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。
四、课程设计工作计划
2012年6月25日,指导教师讲课,学生根据题目准备资料;
2012年6月26日、27日、28日,设计小组进行总体方案设计和任务分工;每人完成自己承担的程序模块并通过独立编译;
2012年6月29日~2012年7月5日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;同时撰写报告。
2012年7月6日,验收;提交课程设计报告。
指导教师签章:
教研室主任签章
面向对象程学设计课程设计指导教师评语与成绩
指导教师评语:
课程设计表现成绩:
课程设计验收成绩:
课程设计报告成绩:
课程设计总成绩:
指导教师签章
2012年7月6日
第1章需求分析4
1.1性能需求4
1.2功能需求4
第2章概要设计5
2.1功能模块设计5
2.2类的分析与设计7
第3章程序设计9
3.1录入函数9
3.2查找函数9
3.3删除函数10
3.4显示函数11
3.5修改函数11
3.6保存函数12
3.7统计函数13
第4章用户使用说明14
第5章程序清单14
参考文献26
第1章需求分析
1.1性能需求
系统软件环境:
MicrosoftVisualC++6.0,即利用网上资料查询。
1.2功能需求
需求分析-分析课题需要实现的功能以及要用到的知识点,分析课题涉及的对象间的关系;
要开发学生成绩数据管理程序,首先要分析改程序应实现哪些功能。
对学生成绩管理系统程序的功能需求可描述如下:
程序运行后显示程序运行后显示学生成绩管理系统的操作界面,操作界面中有8项操作,分别有1:
录入学生信息2:
显示学生信息3:
查找学生信息4:
删除学生信息5:
修改学生信息6:
统计学生成绩7:
保存学生信息0:
退出系统这8个操作是学生成绩系统要实现的功能。
实现基本的学生成绩数据管理,如:
具有建立文件,读取文件和保存记录的功能,并可增加、显示、修改、删除、查询学生记录的功能,并能对学生成绩进行统计.其中数据的查找、数据的删除又可通过不同的方式如按学号或姓名等进行操作。
第2章概要设计
2.1功能模块设计
Show( )函数:
所运用的几个模块整体上有个统一认识,方便了对程序的调用,节省了时间。
显示主菜单功能。
del( )函数:
该函数实现的是删除功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的删除所选的目标
output()函数
该函数是一个输出函数,它运用了for循环语句,本程序定义了两个变量,通过scanf语句的使用,又调用了函数SIR,实现了简洁明了的对学生成绩,姓名以及学号等进行输出
Input( )函数:
该函数是一个输入函数,它运用了for循环语句,本程序定义了两个变量,通过scanf语句的使用,又调用了函数SIR,实现了简洁明了的对学生成绩,姓名以及学号等进行键入。
found()函数
该函数实现的是查找功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的查找所选的目标
mend()函数
该函数实现的是修改功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的修改所选的目标
2.2类的分析与设计
此程序主要包含一个类student用来.对学生相关学籍信息的描述.
School.数据成员number;name.sex.place.nation.Birth.party.id.score
Number学生学号.Name学生姓名sex学生性别place学生籍贯nation民族
Classstudent
{public:
student*next;
student(){}
~student(){}
char*getname(){returnname;}
intgetnumber(){returnnumber;}
doublegetscore(inti){returnscore[i];}
floatgetg(){return(score[0]+score[1]+score[2]+score[3]+score[4]+score[5]);}
classschool
{
public:
school(){head=newstudent;head->next=NULL;key=0;}
~school(){deletehead;}
voidinput();
voidmend();
voiddel();
intfind(student**p,intnum,char*pn="^");
voidfound();
voidshow();
第3章程序设计
3.1录入函数
本段函数通过链表尾插法录入学生的信息,通过while函数的使用,可以实现连续输入学生信息
voidschool:
:
input()
{
student*p,*p2=NULL;
p=head;
intn;
while(p->next)
p=p->next;
while(n)
{
p2=newstudent;
p2->input();
p->next=p2;
p2->next=NULL;
p=p->next;
school:
:
setkey
(1);
cout<<"\t\t\t按1继续,按0返回:
";
cin>>n;
}
3.2查找函数
该函数实现的是查找功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的查找所选的目标
voidschool:
:
found()
{
student*p;
intnum=-1,n=9;
charname[20]="^";
do
{
cout<<"\t\t1:
按学号查找,2:
按姓名查找:
";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入学号:
";
cin>>num;
}
if(n==2)
{cout<<"\t\t\t输入姓名:
";
cin>>name;
}
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要查找的内容!
"< return;
}
(p->next)->output();/
3.3删除函数
该函数实现的是删除功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的删除所选的目标
voidschool:
:
del()
{
student*p,*p2;
intnum;
cout<<"\t\t\t输入学号:
";
cin>>num;
if(!
find(&p,num,"^")){
cout<<"\t\t找不到你要删除的内容!
"<return;
}
(p->next)->output();
p2=p->next;
p->next=p2->next;
deletep2;
school:
:
setkey
(1);
}
3.4显示函数
所运用的几个模块整体上有个统一认识,方便了对程序的调用,节省了时间。
显示主菜单功能。
此函数主要是遍历整个链表,用来输出ZG类链表中的所有结点,就是所有职工信息。
voidschool:
:
show()
{
student*p;
p=head;
while(p->next)
{
(p->next)->output();
p=p->next;
}
}
3.5修改函数
该函数实现的是修改功能。
该函数虽然定义的变量不多,但通过if语句和scanf语句的使用,对文件进行了读去和运用,简便的修改所选的目标
voidschool:
:
mend()
{
student*p;
intnum=-1,n;
charname[20]="^";
do
{
cout<<"\t\t1:
按学号修改,2:
按姓名修改:
";
cin>>n;
}while(n<1||n>2);
if(n==1)
{
cout<<"\t\t\t输入学号:
";
cin>>num;
}
if(n==2)
{
cout<<"\t\t\t输入姓名:
";
cin>>name;
}
if(!
find(&p,num,name))
{
cout<<"\t\t找不到你要修改的内容!
"<return;
}
(p->next)->output();
(p->next)->input();
school:
:
setkey
(1);
}
}
3.6保存函数
通过链表访问学校类中的信息并进行保存,其中还用while函数实现这一过程
voidschool:
:
save()
{
student*p;
p=head;
ofstreamos("student.txt",ios:
:
out);
if(school:
:
getkey()==1)while(p->next)
{
(p->next)->output(os);
p=p->next;
}
}
cout<<"\t\t\t文件已保存!
"< school:
:
setkey(0);
}
3.7统计函数
通过使用链表访问shool类并使用while循环实现了这一统计
voidschool:
:
count()
{
student*p;
p=head;
intn=0;
doubleg[3]={0,0,0};
floatj[3]={0,0,0};
while(p->next)
{
p=p->next;
n++;
for(inti=0;i<3;i++)
{
g[i]=g[i]+(p->getscore(i));
(p->getscore(i))>=60?
j[i]++:
0;
}
}
cout<<"\t\t\b\b\b\b高数总分:
"<"<<<"及格率:
"<"<<<"平均分:
"<"<<<"\t\t\b\b\b\b面向对象程序设计总分:
"<"<<<"及格率:
"<<<"\t\t\b\b\b\b大学物理总分:
"<"<<<"及格率:
"<"<<<"平均分:
"<"<<<"\t\t\b\b\b\b大学体育总分:
"<"<<<"及格率:
"<第4章用户使用说明
系统功能说明:
1录入:
作用:
用于对学生学籍信息进行输入,并保存.
方法:
先输入学生学籍信息,然后录入,最后按enter结束.你所录入的文字
就给保存到该文件里!
2显示
输入学生学号,或者姓名可以显示学生的学籍信息
3查找:
有两种,一种按学号,一种按姓名.
4删除
输入需要删除的学生的学号,或者姓名
5修改
输入需要修改的学生的学号,或者姓名
6统计:
作用:
用于对学生学习成绩进行统计
方法:
输入学生学号,或者姓名.然后按确定
7保存
. 按7,并按确定,可以保存学生学籍信息
0退出:
作用:
退出整个"学生学籍管理系统";
方法:
按0并按确定.
第5章程序清单
#include
#include
#include
#include
usingnamespacestd;
classstudent
{
protected:
intnumber;
charname[20];
charsex[6];
charplace[20];
charnation[6];
charbirth[20];
charparty[10];
charid[20];
floatscore[5];
public:
student*next;
student(){}
~student(){}
char*getname(){returnname;}
intgetnumber(){returnnumber;}
doublegetscore(inti){returnscore[i];}
floatgetg(){return(score[0]+score[1]+score[2]+score[3]+score[4]+score[5]);}
voidinput()
{
inte=1;
cout<<"\t\t\t按提示输入:
"<cout<<"\t\t输入学号:
";
cin>>number;
cout<<"\t\t输入姓名:
";
cin>>name;
do
{
cout<<"\t\t输入性别:
";
cin>>sex;
if(strcmp(sex,"男")==0||strcmp(sex,"女")==0)
{
cout<<"\t\t输入籍贯:
";
cin>>place;
cout<<"\t\t输入民族:
";
cin>>nation;
cout<<"\t\t输入生日:
";
cin>>birth;
cout<<"\t\t输入政治面貌:
";
cin>>party;
cout<<"\t\t输入身份证号:
";
cin>>id;
cout<<"\t\t输入高数分数:
";
cin>>score[0];
cout<<"\t\t输入大学英语分数:
";
cin>>score[1];
cout<<"\t\t输入面向对象程序设计分数:
";
cin>>score[2];
cout<<"\t\t输入大学物理分数:
";
cin>>score[3];
cout<<"\t\t输入线性代数分数:
";
cin>>score[4];
cout<<"\t\t输入大学体育分数:
";
cin>>score[5];
e=0;
}
else
{
cout<<"\t\t\t无此类型性别!
重新输入!
"<e=1;
}
}while(e);
return;
}
voidinput(ifstream&is)
{
is>>number>>name>>sex>>place>>nation>>birth>>party>>id
>>score[0]>>score[1]>>score[2]>>score[3]>>score[4]>>score[5];
is.get();
}
voidoutput()
{
cout<<"学生基本信息如下:
"<cout<<"学号:
"<<<"姓名:
"<<<"性别:
"<<<"籍贯:
"<<<"民族:
"<<<"生日:
"<<<"政治面貌:
"<<<"身份证号:
"<<<"高数:
"<<<"大学英语英语:
"<<<"面向对象程序设计:
"<<<"大学物理:
"<<<"线性代数:
"<<<"大学体育:
"<<<"总分:
"<}
voidoutput(ofstream&os)
{
os<<<<<<<<<<<<<<}
};
classschool
{
public:
school(){head=newstudent;head->next=NULL;key=0;}
~school(){deletehead;}
voidinput();
voidmend();
voiddel();
intfind(student**p,intnum,char*pn="^");
voidfound();
voidshow();
voidcount();
voidsave();
voidbegin();
voidclear();
charmainmenu();
intgetkey(){returnkey;}
voidsetkey(intk){key=k;}
private:
student*head;
intkey;
};
//主选菜单函数
charschool:
:
mainmenu()
{
charn[6];
cout<<"\n\n☆☆☆☆Welcometothestudentmanagementsystem☆☆☆☆"<cout<<"作者:
计11-1班田媛媛梁娟迟苗苗"<<<"****************************"<<<"****************************"<<<"**1:
录入学生信息**"<<<"**2:
显示学生信息**"<<<"**3:
查找学生信息**"<<<"**4:
删除学生信息**"<<<"**5:
修改学生信息**"<<<"**6:
统计学生成绩**"<<<"**7:
保存学生信息**"<<<"**0:
退出系统**"<<<"****************************"<<<"****************************"<<<"请选择:
";
cin>>n;
returnn[0];
}
//录入函数
voidschool:
:
input()
{
student*p,*p2=NULL;
p=head;
intn;
while(p->next)
p=p->next;
while(n)
{
p2=new