C++课程设计报告学生学籍管理系统.docx
《C++课程设计报告学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告学生学籍管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
C++课程设计报告学生学籍管理系统
学籍管理系统的研究与设计
二维条码应用系统的研究
摘要
学籍管理系统设计涉及学生信息的录入,显示,查找,删除,修改,统计,保存,退出等功能,从而能够对信息进行处理。
程序中运用了相关类的知识,同时定义了一定数量的数据及成员函数。
程序使用了数组记录统计的相关数据,运用了指针实现相应功能函数的功能,运用了student,school两个类实现面向对象的要求。
程序的完成涉及到程序的分析,模块的分解,程序的控制,程序的调试
【关键词】学籍管理vc++6.0面向对象程序控制类
1题目内容、要求与分组情况总体介绍5
2系统总体设计6
2.1系统开发模式、工具及环境6
2.2任务需求分析6
2.3系统功能模块设计6
2.4数据结构分析7
2.5工作原理等7
3具体实现-8
3.1类设计8
3.2第一模块界面及实现代码9
3.3第二模块界面及实现代码13
3.4第三模块界面及实现代码15
4运行调试与分析讨论(给出运行屏幕截图,分析运行结果,改进想法。
)
20
5设计体会与小结(设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。
)23
6参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)
24
第1章题目内容、要求与分组情况总体介绍
1.1题目内容和要求
课程设计的任务:
制作一个小型的学生学籍管理系统,要求制作一个菜单,实现数据的录入,数据的显示,数据查找,数据的删除,数据的保存,数据的统计,数据的修改,系统的退出。
系统的设计要求用到C++面向对象的程序设计,要求用到类来实现,同时每一个功能用到一个函数。
基本功能:
学生基本信息(编号,姓名,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩)
成绩统计(各科总成绩,各科平均成绩,各科的及格率)
扩展功能:
学生数据的添加、修改、与删除
学生数据的读取与存储
系统特点:
系统要能够对相应的数据进行很好的测试,系统的统计对每一科的总成绩,平均成绩,及格律都进行了统计;系统数据的录入除可以手工录入外,还可以采用文件的录入;系统统计学生的基本信息较全面,包括学号,姓名,民族,政治面貌,身份证号,生日,性别,数学、英语、计算机的成绩;程序中查找运用了两种查找方式即学号查找和姓名查找。
第2章系统总体设计
2.1系统开发模式、工具及环境
系统开发模式:
采用控制台系统开发模式
系统开发工具及环境:
VisualC++6.0VisualC++6.0集成开发环境。
2.2任务需求分析
1能够输入并浏览学生的基本信息;
2能够实现对学生信息的查询和修改;
3能够对成绩进行统计;
4能够对学生的信息进行保存;
现行的系统功能:
资料维护:
系统维护包括对各学生信息和成绩的录入操作。
资料维护:
对数据表中的信息进行浏览。
系统查询:
可以对不同科目的总成绩、不及率、各科平均成绩相关信息。
2.3系统功能模块设计
现行系统组织结构图:
2.4数据结构分析
使用整型,双精度,字符型定义变量和函数。
使用结构体,类等概念实现数据存储。
同时也是用这些自定义类型定义了变量和函数。
体现面向对象设计的特点。
2.5工作原理等
系统功能结构图:
第三章具体实现
3.1类设计
类:
student
数据成员
编号,姓名,性别,籍贯,民族,生日,政治面貌,省份证,数学成绩,英语成绩,计算机成绩
类:
school
成员函数
录入函数Input():
输入编号到计算机的成绩;
统计函数count():
统计各科的总成绩,计算平均成绩,统计各科的及格率;
查询函数found():
按学号或姓名查找学生的记录;
修改函数mend():
修改指定学号学生成绩记录;
删除函数del():
删除指定学号学生记录;
输出函数show():
输出班级所有学生成绩记录;
UML图:
3.2第一模块界面及实现代码
#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;
}
}
第二模块界面及实现代码
//查找函数
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数学总分:
"<"<<<"及格率:
"<"<<<"平均分:
"<"<<<"\t\t\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.系统运行的结果
存在问题与改进想法:
1.系统中不存在报错的现象。
当籍贯等信息输入数字等时会出现这种现象,可设置提醒重新输入。
六、设计体会与小结(设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。
)
1.在做了课程实验以后,我对C++的了解更深了,很多知识得到了巩固,一些不懂的知识也渐渐明了!
这其中主要是对类的封装收获很多,在类的封装过程中,对数据的访问控制问题很重要;在面向对象程序设计中,对访问的控制也是比较重要,我相信这对以后学习其他面向对象程序语言会有很大的帮助!
2.作了学生学籍管理系统程序后,我对类和对象更加熟悉了,作为C++所特有得指针、类和对象再编写程序得过程中运用十分广泛,我还必须多加练习才能达到一个更高的水平,类和对象、指针都是非常重要的!
3.在完完整整的做完一个课程实验后,我对程序的整体性有了一个明确的认识,做一个程序必须要注意程序前后的联系,要具有清晰的思路,程序要具有层次。
对整体性的把握至关重要!
4.学习计算机语言,最重要的就是上机操作,我深感自己动手能力比较差,在以后的学习中,还必须多多上机调试程序,从实践中多积累经验,为以后工作打下坚实的基础。
参考文献
[1]陈雪飞《C++实例入门》,中国青年出版社,2004年5月出版
[2]谭浩强编,《C++面向对象程序设计》,清华大学出版社,2005年7月出版
[3]李师贤等译,《C++精髓》,机械工业出版社,2002年8月出版
[4]韩滨魏海萍,《C++类库使用手册》,电子工业出版社,2007年7月出版
[5]陈灿煌,《C++彻底研究》中国青年出版社,2005年9月出版。
[6]谢昕,刘觉夫,王更生.C++程序设计(第一版).北京:
邮电大学出版社,2009