C++课程设计报告学生学籍管理系统.docx
《C++课程设计报告学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告学生学籍管理系统.docx(41页珍藏版)》请在冰豆网上搜索。
C++课程设计报告学生学籍管理系统
南京航空航天大学
《面向对象程序设计语言》课程设计报告
学籍管理系统
学号:
姓名:
日期:
十二、数据测试7
一、需求分析
Ø学籍管理现状
1、目前国内大中专院校众多,在校的学生人数占据了社会人口很大一部分,是社会群体中的新生力量;
2、对学生学籍的管理是各大院校日常管理中不可忽视的一个重要环节;
3、随着计算机等高新科技的发展,对学籍的管理早已不能仅仅满足于纸质文件。
因此,开发出一套计算机学生学籍管理系统显得很有必要。
Ø本系统存在的价值
1、满足了各大院校对学籍管理的强烈要求;
2、力图用最少的代码完成最多的功能,代码简洁没有冗余;
3、系统操作简便明了,根据提示即可进行简便常用的日常学籍管理;
4、占用资源少、需求大、简便易操作,多彩的可视化界面。
综合以上众多优势,证明了本系统存在的价值。
Ø选择C++的理由
C++为了解决程序设计的复杂性,美国贝尔实验室于1980年开始研制一种“带类”的C,到1983年才正式命名为C++。
C++语言吸收了C和Simula67的精髓,具有C无可比拟的优越性。
C++结构清晰、易于维护、已于拓展,同时又不失效率。
(节选自《C++简明教程》(皮德常),电子工业出版社)
综合以上优点,我们选定C++为本次系统的程序设计语言
二、程序的主要功能
1、添加功能:
添加学生的基本信息,包括姓名,学号,性别,年龄,身份证号码,籍贯,班级,学分,绩点
2、删除功能:
按学号对学生的信息进行删除
3、显示功能:
显示所有学生的详细信息
4、查找功能:
选择按照姓名或学号查找学生并显示其详细信息
三、程序运行平台
VS2012
四、系统总框架图
***************************学籍管理系统包含两个子系统*****************
五、程序类的说明
(1).ClassInfo//学生信息Info类的声明
{
public:
Info();//构造函数
Info(Info&obj);//拷贝构造函数
voidsetP1(double);
voidsetP2(double);
voidsetCla(int);
voidsetNumber(int);
voidsetAge(int);
voidsetName(string);
voidsetSex(string);
voidsetId(string);
voidsetPlace(string);//类中各数据的设置函数
doublegetP1();//获取学分
doublegetP2();//获取绩点
intgetCla();//获取班级
intgetNumber();//获取学号
intgetAge();//获取年龄
stringgetName();//获取姓名
stringgetSex();//获取性别
stringgetId();//获取身份证号码
stringgetPlace();//获取籍贯
friendofstream&operator<<(ofstream&output,Info&ToT);//重载输出文件流操作符
friendifstream&operator>>(ifstream&input,Info&ToT);//重载输入文件流操作符
};
(2).ClassStu//stu类的声明
{
public:
Stu();//构造函数
voidadd();//添加记录的函数
voiddel();//删除记录的函数
voidsearch();//查找记录的函数
voidshow();//显示记录的函数
};
(3).ClassCla//班级管理子系统类的声明
{
public:
voidshowCla();//显示全部班级的函数
voidshowStu();//显示某班学生的函数
voidshowStuInfo();//显示某班学生的详细信息的函数
voidshowGra();//显示某班成绩的函数
voidshowSort();//显示某班成绩排序的函数
};
(4).ClassGra//成绩管理子系统类的声明
{
public:
voidGhigh();//查询学分高于某值的学生的函数
voidGlow();//查询学分低于某值的学生的函数
voidPhigh();//查询绩点高于某值的学生的函数
voidPlow();//查询绩点低于某值的学生的函数
voidsort();
};
(5).ClassMenu//主菜单类的声明
{
public:
voidmainmenu();//学籍管理系统主菜单函数
voidexitmenu();//退出学籍管理系统的函数
voidclassmenu();//班级管理子系统菜单函数
voidgrademenu();//成绩管理子系统菜单函数
};
**************************共五个类************************
六、模块分析
1.添加模块
系统将提示用户输入新添加的学生的信息,储存在文件中
2.查找模块
首先由用户输入要查找的学生姓名或学号,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的学生资料。
3.显示模块
显示模块将输出所有学生的详细信息。
根据用户输入的学号删除相应学生信息。
1.显示全部班级
2.查询某班学生
3.查询某班学生详细信息
4.查询某班成绩信息
5.查询某班成绩排序
6.退出子系统
1.查询学分高于某值的学生
2.查询学分低于某值的学生
3.查询绩点高于某值的学生
5.所有学生成绩排序
七、比较有特色的函数
1.排序
voidqsort(Infob[],intl,intr)
{
inti,j;
doublemid1,mid2;
Infox;
i=l;j=r;
mid1=(b[(l+r)>>1].getP1());
mid2=(b[(l+r)>>1].getP2());
do{
while(b[i].getP1()while(b[j].getP1()>mid1||b[j].getP2()==mid2&&b[j].getP2()>mid2)j--;
if(i<=j)
{
x=b[i];b[i]=b[j];b[j]=x;
i++;j--;
}
}while(i<=j);
if(iif(j>l)qsort(b,l,j);
}
2.按照姓名or学号查找的函数
voidStu:
:
search()
{
strings;/*记录输入的姓名*/
inti,num;/*记录输入的学号*/
ifstreamin("code.dat");
cout<<"\t\t\t记录查询可以按照以下两种方式进行\n\n"<cout<<"\t\t\t按照姓名查询请按1,按照学号查询请按2:
"<cin>>i;
if(i==1)
{
cout<<"\t\t\t请输入学生姓名:
"<cin>>s;
}
if(i==2)
{
cout<<"\t\t\t请输入学生学号:
"<cin>>num;
}
while(!
in.eof())
{
in>>one;
if(i==1)
{
if(one.getName()==s)
{
x()<<<"\t年龄:
"<"<"<<<"\t班级:
"<"<"<cout<<"\t-------------------------------------------------------------------------"<}
continue;
}
if(i==2)
{
if(one.getNumber()==num)
{
cout<<"\t学号:
"<"<"<e()<<<"\t班级:
"<"<"<cout<<"\t---------------------------------------------------------------------------"<}/*按照学号查找并输出*/
continue;
}
}
in.close();
cout<<"\t\t\t按任意键继续......"<cin.ignore();
getchar();
}
八、存在的不足与对策
欠缺对输入异常的处理,当所输入数据不符合要求时系统出现错误。
运行程序时严格按照提示输入信息。
九、程序源代码
#include"Stu.h"
#include"Menu.h"
#include"Cla.h"
#include"Gra.h"
#include
usingnamespacestd;
intmain()
{
Menua;
Stub;
Claz;
Grazz;
intx,y;
charc;
ofstreamout("code.dat");
out.close();
while
(1)
{
a.mainmenu();
cin>>x;
switch(x)
{
case1:
b.add();
while
(1)
{
cout<<"是否继续添加记录(y/n)?
";
cin>>c;
if(c=='y')b.add();
elsebreak;
}//添加记录
break;
case2:
b.search();break;//查找记录
case3:
b.del();break;//删除记录
case4:
b.show();break;//显示记录
case5:
{
while
(1)
{
a.classmenu();
cin>>y;
switch(y)
{
case1:
z.showCla();break;
case2:
z.showStu();break;
case3:
z.showStuInfo();break;
case4:
z.showGra();break;
case5:
z.showSort();break;
case6:
break;
}
if(y==6)break;
}
break;
}//进入班级管理子系统
case6:
{
while
(1)
{
a.grademenu();
cin>>y;
switch(y)
{
case1:
zz.Ghigh();break;
case2:
zz.Glow();break;
case3:
zz.Phigh();break;
case4:
zz.Plow();break;
case5:
zz.sort();break;
case6:
break;
}
if(y==6)break;
}
break;
}//进入成绩管理子系统
case7:
a.exitmenu();break;//退出主程序
}
}
}***************************以上为主程序**************************
*****************************以下为界面的实现程序************************
voidMenu:
:
mainmenu()
{
cout<<"\n\n\n\t\t\t★★★★★学籍管理系统★★★★★\n\n\n";
cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t\t※1.添加记录※\n";
cout<<"\t\t※2.查询记录※\n";
cout<<"\t\t※3.删除记录※\n";
cout<<"\t\t※4.显示记录※\n";
cout<<"\t\t※5.☆班级管理※\n";
cout<<"\t\t※6.☆成绩管理※\n";
cout<<"\t\t※7.退出系统※\n";
cout<<"\t\t※※\n";
cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t\t\t请选择(1,2,3,4,5,6,7);";//主界面
}
voidMenu:
:
classmenu()
{
cout<<"\n\n\n\t\t\t★★★★★班级管理子系统★★★★★\n\n\n";
cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t\t※1.显示全部班级※\n";
cout<<"\t\t※2.查询某班学生※\n";
cout<<"\t\t※3.查询某班学生详细信息※\n";
cout<<"\t\t※4.查询某班成绩信息※\n";
cout<<"\t\t※5.查询某班成绩排序※\n";
cout<<"\t\t※6.退出子系统※\n";
cout<<"\t\t※※\n";
cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t\t\t请选择(1,2,3,4,5,6);";//子系统界面
}
voidMenu:
:
grademenu()
{
cout<<"\n\n\n\t\t\t★★★★★成绩管理子系统★★★★★\n\n\n";
cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t\t※1.查询学分高于某值的学生※\n";
cout<<"\t\t※2.查询学分低于某值的学生※\n";
cout<<"\t\t※3.查询绩点高于某值的学生※\n";
cout<<"\t\t※4.查询绩点低于某值的学生※\n";
cout<<"\t\t※5.所有学生成绩排序※\n";
cout<<"\t\t※6.退出子系统※\n";
cout<<"\t\t※※\n";
cout<<"\t\t※※※※※※※※※※※※※※※※※※※※※※※\n";
cout<<"\t\t\t请选择(1,2,3,4,5,6);";//子系统界面
}
*******************以下为对数据添加、查询、删除、显示的实现程序******************
Case1(添加记录),Case2(查询记录),Cas3(删除记录),Case4(显示记录)
#include"Info.h"
Info:
:
Info()//构造函数
Info:
:
Info(Info&obj)//拷贝构造函数
voidInfo:
:
setP1(doublea)
voidInfo:
:
setP2(doublea)
voidInfo:
:
setCla(inta)
voidInfo:
:
setNumber(inta)
voidInfo:
:
setName(stringa)
voidInfo:
:
setAge(inta)
voidInfo:
:
setSex(stringa)
voidInfo:
:
setPlace(stringa)
voidInfo:
:
setId(stringa)
intInfo:
:
getNumber()
intInfo:
:
getAge()
stringInfo:
:
getName()
stringInfo:
:
getSex()
stringInfo:
:
getId()
intInfo:
:
getCla()
doubleInfo:
:
getP1()
doubleInfo:
:
getP2()
stringInfo:
:
getPlace()ofstream&operator<<(ofstream&output,Info&ToT)
{
output<<<<<"\n"<returnoutput;
}//重载<<操作符
ifstream&operator>>(ifstream&input,Info&ToT)
{
intnumber;
intage;
doublepoint1;
doublepoint2;
intcla;
stringname;
stringsex;
stringid;
stringplace;
input>>number>>name>>sex>>age>>id>>place>>point1>>point2>>cla;
ToT.setNumber(number);
ToT.setName(name);
ToT.setSex(sex);
ToT.setAge(age);
ToT.setId(id);
ToT.setPlace(place);
ToT.setCla(cla);
ToT.setP1(point1);
ToT.setP2(point2);
returninput;
}//重载>>操作符
***************以下为班级管理子系统的实现程序***********
voidCla:
:
showCla()
{
intf[1000];
inti,flag;
f[0]=0;
ifstreaminput("code.dat");
while(!
input.eof())
{
flag=0;
input>>a;
if(input.fail())break;
for(i=1;i<=f[0];i++)
if(f[i]==a.getCla())
{
flag=1;
break;
}
if(!
flag)
{
f[0]++;
f[f[0]]=a.getCla();
}
}
input.close();
cout<cout<<"所录入的班级共:
"<cout<for(i=1;i<=f[0];i++)
cout<cout<cout<<"按任意键继续......"<cin.ignore();
getchar();
***************************以上为显示班级的程序***************************
voidCla:
:
showStu()
{
inti,num,all=0;;
ifstreaminput("code.dat");
cout<<"--------------------------------------------------------------"<cout<cout<<"请输入您想查询的班级号:
"<cin>>num;
cout<cout<cout<<"该班级所包含的学生有:
"<cout<cout<while(!
input.eof())
{
input>>a;
if(a.getCla()==num)
{
all++;
cout<<"学号:
"<"<}
}
input.close();
cout<cout<cout<<"该班级共有学生数为:
"<cout<cout<cout<<"-------------------------------------------------------------"<cout<<"按任意键继续......"<cin.ignore();
getchar();
}
************************以上为显示班级学生的程序************************
voidCla:
:
showGra()
{
doublemax1=-1000,max2=-1000,min1=1000,min2=1000;
inti,num,all=