C++程序设计学生学籍管理设计报告Word文档下载推荐.docx
《C++程序设计学生学籍管理设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++程序设计学生学籍管理设计报告Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
![C++程序设计学生学籍管理设计报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/7/15ffb66e-b93d-4855-99ef-48300f627c46/15ffb66e-b93d-4855-99ef-48300f627c461.gif)
3
1.3设计要求3
1.4设计原理3
二、设计内容4
2.1排序功能实现4
2.3修改功能的实现6
心得9
一、概要设计
1.1逻辑结构框图设计
老师要求我们利用自己的课余时间和短暂的上课时间里查找资料从而完成任务。
然而在这次设计中对于C++来说链表、指针、数组、函数、结构体是比较重要的,所以老师也就重点围绕这部分的内容来复习。
这次设计中就是为了复习C/C++中学过的基本知识,学习C/C++语言中函数的定义和调用方法,掌握C++中函数设计的方法和结构化设计的思想,掌握规范的程序设计思路,掌握规范的程序编码格式
1.3设计要求
运行过程中的输入输出要有提示信息及友好的格式(系统以菜单方式工作),基本算法运用函数实现。
设计面板清晰,结构明确,有明确的文字说明,有详细的注释和说明。
报告要求:
模块化程序设计,必须上机调试通过,设计报告语言简练,条理清楚。
图表规范:
程序设计组成框图,流程图。
模块功能说明函数功能、入口和出口参数说明、函数调用关系说明。
调试与测试:
调试方法,测试结果的分析与讨论,测试过程中遇到的问题及解决措施,源程序清单和执行结果。
1.4设计原理
学生成绩管理系统以菜单选择,通过调用各个函数,对单链表的遍历,实现不同的功能,不同函数处理后返回的只是一个头结点,但是通过头结点可以找到所有链表中的信息,只要有函数,找到头指针就能进行相应的操作,所以模块化的程序方便以后添加或者删除某些功能,程序中通过system(“cls”)清屏函数实现界面的转换,主函数中的循环保证程序不会退出,一个循环和一个清屏函数实现了主菜单和各子画面的切换(子函数)。
这样的话各个子函数都可以调用一开始输入的数据,这样就实现了各个不同函数调用时都能使用整个系统连续起来了。
作为一个学生成绩管理系统,增加了文件的读入和写出功能,增加了程序的实用性。
二、设计内容
2.1排序功能实现
将学生的成绩的数据用一个数组装起来并且把这些数据与链表中的数据连接起来,先以学号进行查找从而以总分来排序学生的总成绩,同时以head为头指针从而放回给链表
主要代码和模块图及流程图如下:
student*arrange(student*head)//排序功能
{studenta[20];
//申明一个结构体数组
inti,j;
studentt;
student*p;
p=head;
//从链表的头指针开始
staticintb=0;
while(p!
=0)//不为空时
{a[b].num=p->
num;
把数组中的数据与链表中的数据连接
a[b].name=p->
name;
a[b].math=p->
math;
a[b].english=p->
english;
a[b].cpp=p->
cpp;
a[b].vb=p->
vb;
a[b].pe=p->
pe;
a[b].sum=p->
sum;
//相当于建立了一个数组
a[b].sum=a[b].math+a[b].english+a[b].cpp+a[b].vb+a[b].pe;
//把各成绩相加的和
b++;
p=p->
next;
}
for(i=0;
i<
b-1;
i++)//开始以总分为主排序
for(j=i+1;
j<
b;
j++)
if(a[j].sum<
a[i].sum)
{t=a[j];
a[j]=a[i];
a[i]=t;
}//交换操作
cout<
<
"
学号"
'
\t'
姓名"
<
数学"
英语"
c++"
VB"
体育"
总分"
endl;
//输出对照信息
for(i=0;
i++)//输出排序后的信息
cout<
a[i].num<
a[i].name<
a[i].math<
a[i].english<
a[i].cpp<
a[i].vb<
a[i].pe<
a[i].sum<
//输出排序后的信息
returnhead;
}
模块图如下:
流程图如下:
2.3修改功能的实现
以学号进行查找学生不及格的成绩,然后将其修改掉输出结果。
特别是要注意必须连接链表以便整个程序能正常的运行
代码如下:
student*change(structstudent*head,stringx)//查找修改功能
{structstudent*p,*q;
structstudent*h;
if(p==NULL)
{cout<
对不起!
数据库中没有任何数据,请先录入信息\n"
;
if(p!
=NULL)
{while(p->
num!
=x&
&
p->
next!
=NULL)//当不是要查找的内容时
{q=p;
p=p->
}//就继续往下找
if(p->
num==x)//如果找到就输出相关信息
{cout<
你查找学生的信息为\n\n"
//以学好进行查找
vb"
num<
name<
math<
english<
cpp<
pe<
vb
sum<
}//先查找出要修改的信息
intmath1,english1,cpp1,pe1,vb1;
if(p->
60||p->
vb<
60)//看有小于60的没
{if(p->
60)
{cout<
输入修改的数学成绩:
cin>
>
math1;
p->
math=math1;
if(p->
输入修改的英语成绩:
english1;
english=english1;
输入要修改的C++成绩:
cpp1;
cpp=cpp1;
输入要修改的体育成绩:
pe1;
pe=pe1;
输入要修改的VB成绩:
vb1;
vb=vb1;
else
cout<
没有查找学生的信息\n"
h=head;
returnh;
相关模块图如下:
修改过程模块图如下:
修改后的模块图如下:
心得
一开始知道课题后,以为很简单,,老师建议我们选择了使用链表,它可以实现无序的在内存中存放,只要有一个头结点,就可以对整个链表进行相关的操作,在调式时遇到了很多问题,最多的是有些程序看起来很简单但是要把所有的连接在一起就有很多问题出现了,结果我发现链表的建立、查找、删除、插入以及修改还有指针这一块知识还得好好的加强,当我在编写学生成绩管理系统时,出现了许多问题,我到处查找资料同时也向老师和同学请教,经过一个星期的努力我总算实现了基本功能。
我现在体会到程序的调试是相当的重要的。
在使用指针时要特别注意用过后的指针不使用就要删除,已防出错。
链表的尾部要指向NULL,这点是很重要的。
学生成绩管理系统是我学C++以来遇见的比较复杂的程序了,因为它牵扯到很多知识,并且我以前的知识也不是很扎实。
编写这个程序,在如何进行成绩排序和修改上我费了些力气,虽然老师讲过几种排序方法,可是运用到单链表上就着实感到困难了,参考了相关资料和老师的指导这一功能总算实现了,通过和同学老师的讨论我学到了血多东西。
不管怎么说,这次课程设计还是锻炼了我编写程序的能力,对以前学过的知识有了进一不的了解,特别是链表这一知识点。
此次课程设计最大的收获是:
学会了自己学习。
教师评语
课程设计成绩:
老师签字:
设计人:
2010年7月12日星期一