C++课程设计报告学生学籍管理系统.docx
《C++课程设计报告学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告学生学籍管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
C++课程设计报告学生学籍管理系统
课程设计
学生学籍管理系统
课程名称:
C++面向对象程序设计
课程设计题目:
大学生学籍管理系统
【摘要】学籍管理系统设计涉及学生信息的录入,显示,查找,删除,修改,统计,保存,退出等功能,从而能够对信息进展处理。
程序中运用了相关类的知识,同时定义了一定数量的数据及成员函数。
程序使用了数组记录统计的相关数据,运用了指针实现相应功能函数的功能,运用了student,school两个类实现面向对象的要求。
程序的完成涉及到程序的分析,模块的分解,程序的控制,程序的调试。
【关键词】学籍管理vc++6.0面向对象程序控制类
第1章概述
1.1系统实现的目标
课程设计的任务:
制作一个小型的学生学籍管理系统,要求制作一个菜单,实现数据的录入,数据的显示,数据查找,数据的删除,数据的保存,数据的统计,数据的修改,系统的退出。
系统的设计要求用到C++面向对象的程序设计,要求用到类来实现,同时每一个功能用到一个函数。
根本功能:
学生根本信息〔编号,,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩〕
成绩统计〔各科总成绩,各科平均成绩,各科的及格率〕
扩展功能:
学生数据的添加、修改、与删除
学生数据的读取与存储
系统特点:
系统要能够对相应的数据进展很好的测试,系统的统计对每一科的总成绩,平均成绩,及格律都进展了统计;系统数据的录入除可以手工录入外,还可以采用文件的录入;系统统计学生的根本信息较全面,包括学号,,民族,政治面貌,号,生日,性别,数学、英语、计算机的成绩;程序中查找运用了两种查找式即学号查找和查找。
1.2系统实现案
第一步:
分析题目,建立类并派生出它的子类,画出类图。
第二步:
画出流程,根据流程图编写程序清单
第三步:
上机调试程序〔使用单步调试,设置断点、分块调试的法〕。
第五步:
及时整理资料,撰写课程设计报告中有关这个题目的容。
1.3系统实现环境
硬件配置:
586以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,存不小于64MB,硬盘自由空间不少于200MB。
推荐配置为存128MB或256MB〔或以上〕,硬盘自由空间500MB以上。
操作系统:
Windows2000/NT/Xp、VisualC++集成开发环境。
第2章系统分析
2.1调查
程序对学生学籍的数据处理要求
1能够输入并浏览学生的根本信息;
2能够实现对学生信息的查询和修改;
3能够对成绩进展统计;
4能够对学生的信息进展保存;
现行的系统功能:
资料维护:
系统维护包括对各学生信息和成绩的录入操作。
资料维护:
对数据表中的信息进展浏览。
系统查询:
可以对不同科目的总成绩、不及率、各科平均成绩相关信息。
2.2现行系统分析
现行系统组织构造图:
第3章系统设计
3.1系统功能设计
系统功能构造图:
3.2类设计
类:
student
数据成员
编号,,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩
类:
school
成员函数
录入函数Input():
输入编号到计算机的成绩;
统计函数count():
统计各科的总成绩,计算平均成绩,统计各科的及格率;
查询函数found():
按学号或查找学生的记录;
修改函数mend():
修改指定学号学生成绩记录;
删除函数del():
删除指定学号学生记录;
输出函数show():
输出班级所有学生成绩记录;
UML图:
3.3输入输出的设计
1.界面的设计
①、界面设计
程序运行后会出现一个简捷的窗口,便于用户查询数据。
②、功能设计
通过主窗体调用其他窗体,具体实现可以参照系统分析相关容。
应用系统主控界面包括学生信息录入,查找等功能模块。
学生信息录入功能完成学生信息和成绩的输入。
记录查询功能可以对数据各分类的记录进展查询。
2.数据输出设计
系统主界面:
统计界面:
查找界面:
显示界面:
录入界面:
修改界面:
第4章系统实现
1.代码
#include
#include
#include
#include
classstudent
{
protected:
intnumber;charname[20];
charsex[6];charplace[20];
charnation[6];charbirth[20];
charparty[10];charid[20];
floatscore[3];
public:
student*next;
student(){}
~student(){}
char*getname(){returnname;}
intgetnumber(){returnnumber;}
doublegetscore(inti){returnscore[i];}
floatgetg(){return(score[0]+score[1]+score[2]);}
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];
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];
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;
};
//录入函数
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;
}}
//子查找函数
intschool:
:
find(student**p1,intnum,char*pn)
{student*p;p=head;
while(p->next)
{
(*p1)=p;
if((p->next)->getnumber()==num||!
strcmp((p->next)->getname(),pn))
return1;p=p->next;
}
return0;}
//查找函数
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();
}
//删除函数
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);}
voidschool:
:
show()//显示函数
{student*p;p=head;
while(p->next)
{(p->next)->output();
p=p->next;
}}
//修改函数
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);
}
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);
}
voidschool:
:
begin()//初始化函数
{student*p,*p2;
p=head;clear();
longt;
ifstreamis("student.txt",ios:
:
in);
if(!
is)
{ofstreamos("student.txt",ios:
:
out);
os.close();
return;
}
intnum=-1;
while
(1)
{num=-1;t=is.tellg();
is>>num;
is.seekg(t);
if(num<0)
{is.close();
return;
}
p2=newstudent;p2->input(is);
p->next=p2;p2->next=NULL;p=p->next;
}}
voidschool:
:
clear()//清空函数
{student*p,*p2;
p=head->next;
while(p)
{p2=p;p=p->next;
deletep2;
}}
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.0?
j[i]++:
0;
}
}
cout<<"\t\t\b\b\b\b数学总分:
"<"<<<"及格率:
"<"<<<"平均分:
"<"<<<"\t\t\b\b\b\b计算机总分:
"<"<<<"及格率:
"<}
//主选菜单函数
charschool:
:
mainmenu()
{
charn[6];
cout<<"\n\n☆☆☆☆欢迎进入学籍管理系统☆☆☆☆"<<<"****************************"<<<"****************************"<<<"**1:
录入学生信息**"<<<"**2:
显示学生信息**"<<<"**3:
查找学生信息**"<<<"**4:
删除学生信息**"<<<"**5:
修改学生信息**"<<<"**6:
统计学生成绩**"<<<"**7:
保存学生信息**"<<<"**0:
退出系统**"<<<"****************************"<<<"****************************"<<<"请选择:
";
cin>>n;
returnn[0];
}
//主函数
voidmain()
{schoolpp;
intk=1;charn;pp.begin();
while(k==1)
{n=pp.mainmenu();
switch(n)
{case'1':
pp.input();break;
case'2':
pp.show();break;
case'3':
pp.found();break;
case'4':
pp.del();break;
case'5':
pp.mend();break;
case'6':
pp.count();break;
case'7':
pp.save();break;
case'0':
if(pp.getkey()==1)
{cout<<"\t\t\t是否保存?
1:
保存0:
不保存:
";
cin>>k;
if(k==1)
pp.save();
}
pp.clear();
k=0;
break;}}}
2.系统运行的结果
结论
本程序根本完成了题目要求的功能。
但是由于显示的限制,所罗列的学生成绩只给出了数学,英语,计算机的成绩。
程序可通过改进,增加科目数。
程序在显示学生信息时输入过于繁杂,不够清晰明朗,假设显示成类似表格的形式就好了。
解决方法将输出函数的输出格式改一下,难点是计算输出点的控制。
后记
此次c++课程设计,在指导教师的精心教导下,我们学会了如用C++编写一个简单的应用程序。
首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。
程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原那么,便于查询。
根据C++课程所学的概念、理论和法,按照C++程序设计的根本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。
理论联系实际,加深和稳固所学的理论知识,提高实践能力和计算机的综合运用能力。
我们编写程序的过程是辛苦与快乐的,程序的编写原那么很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
参考文献
[1]雪飞?
C++实例入门?
,中国青年,2004年5月出版
[2]谭浩强编,?
C++面向对象程序设计?
,清华大学,2005年7月出版
[3]师贤等译,?
C++精华?
,机械工业,2002年8月出版
[4]滨海萍,?
C++类库使用手册?
,电子工业,2007年7月出版
[5]灿煌,?
C++彻底研究?
中国青年,2005年9月出版。