c课程设计论文文档格式.docx
《c课程设计论文文档格式.docx》由会员分享,可在线阅读,更多相关《c课程设计论文文档格式.docx(36页珍藏版)》请在冰点文库上搜索。
撰写论文1 图书馆
学生签名:
2010年6月21日
课程设计(论文)评审意见
(1)完成原理分析(25分):
优( )、良( )、中( )、一般( )、差( );
(2)设计分析 (25分):
(3)完成调试 (25分):
(4)回答问题 (25分):
(5)格式规范性及考勤是否降等级:
是( )、否( )
评阅人:
职称:
2010年6月24日
华东交通大学
C++程序设计
课程设计报告
选题名称:
学生成绩管理系统
系(院):
软件学院
专业:
软件工程+信息工程
班级:
三班
姓名:
吴同学学号:
2009XXXXXXXXXX
指导教师:
莫老师
学年学期:
2009~2010学年第二学期
2010年6月24日
摘要:
随着科学技术的发展,计算机领域不断取得新的研究成果。
计算机在代替和延伸脑力劳动方面发挥越来越重要的作用,不仅在商业、企业、银行等起着重要作用,而且在日常生活中也越来越离不开计算机。
就像在大学,有很多学生的信息需要处理、保存,以及提供优质的服务,此时计算机显得尤为重要。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识。
作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,有着手工管理所无法比拟的优点。
所以,现今绝大部分大学都使用了计算机来规划整个学生的信息、提供选课、网络教学等。
学生成绩管理系统能方便用户迅速、准确处理学生的成绩,得到想要的数据并能将学生的信息以文档保存,以供使用时调出。
本文介绍了简易学生成绩管理系统在MicrosoftVisualC++6.0环境下的实现过程:
系统的分析、功能模块的设计、系统的调试和测试。
此系统的主要管理信息有:
学生的班级、学生的学号、学生的姓名、离散数学成绩、c++程序设计成绩、大学物理成绩、大学英语成绩、高等数学成绩、大学体育成绩、马克思主义基本原理成绩。
本系统的主要功能有:
输入数据(即学生成绩等相关信息)、显示所有数据、按平均分降序排列、查找并显示一组数据、插入一组数据、修改一组数据、删除一组数据、从文件中读入数据、将所有记录写入文件、退出本系统。
关键字:
学生成绩管理
1需求分析
1.1功能需求分析
简易学生成绩管理系统主要有四个大的模块:
学生信息(如班级、学号、姓名、各科成绩等)的录入文件中;
查找并显示、删除、插入、修改一组数据;
从文件中输出所有数据并进行按平均分排序;
退出此系统。
(1)学生信息的录入模块
主要功能是录入学生的信息,具体操作是:
先打开程序的主界面,然后选择数字1,即可录入数据,程序依次输出:
学生的班级、学生的学号、学生的姓名、信息专业的各科成绩等,最后会询问是否继续录入。
结束后可以选择数字9,进行数据的保存,实际生活中学生成绩的文件主要以word或excel等储存,为了方便操作我在调试本系统中成绩文件采用了txt的文档格式保存,当然也可以使用word文档形式。
(2)查找、显示、修改、插入、删除模块
主要功能是查找用户所需要的学生信息,直接选择数字4,便可根据学生的班级、学号、姓名可以查询到相关成绩,包括各科成绩还有平均分和总分等,提供了极大的便利。
为了更加具有人性化,本系统还增设了修改、插入、删除等功能,以便极大的服务广大师生。
(2)输出所有数据并进行按平均分排列模块
主要功能是方便用户进行一个全面的观察,统计所有的学生成绩,即按总分的排名。
另外,每个文件中的学生成绩管理,也会进行相应的对比,方便比较。
(3)退出系统模块
简单的利用了c++面向对象程序设计思想,设计出了可选择的退出装置。
1.2环境需求分析
操作系统:
WindowsXP
调试软件:
VisualC++6.0
1.3方法需求分析
由于数组存放数据的时候要先确定数组的规模,不能动态的分配内存空间,而单链表是非连续存放的,可以对内存空间进行动态分配,此系统是用单链表完成的。
然后定义链表的结点类型为结构就可以实现对学生学号、姓名、成绩、班级等学保存。
每次只要返回头指针,就可以对整个链表进行操作,因此选链表来存放学生信息。
2概要设计
2.1系统功能模块图
学生成绩管理系统
输入学生信息
插入学生信息
删除学生信息
显示学生信息
按姓名找学生
保存学生信息
读取学生信息
计算总分均分
学生成绩排序
按学号查成绩
分类合计
2.2设计思想:
学生成绩管理系统是用面向对象的方法设计,由于数组的存放是连续的,而单链表是非连续存放的,是动态分配内存空间,因此此系统采用单链表来完成。
各个功能模块的实现主要转变到对单链表的遍历,添加和删除结点。
3详细设计
3.1设计原理
学生成绩管理系统以菜单选择,通过调用各个函数,对单链表的遍历,实现不同的功能,不同函数处理后返回的只是一个头结点,但是通过头结点可以找到所有链表中的信息,只要有函数,找到头指针就能进行相应的操作,所以模块化的程序方便以后添加或者删除某些功能,程序中通过system(“cls”)清屏函数实现界面的转换,主函数中的循环保证程序不会退出,一个循环和一个清屏函数实现了主菜单和各子画面的切换(子函数)。
这样的话各个子函数都可以调用一开始输入的数据,这样就实现了各个不同函数调用时都能使用整个系统连续起来了。
作为一个学生成绩管理系统,增加了文件的读入和写出功能,增加了程序的实用性。
3.2程序详细代码
#include<
iostream.h>
/*引用库函数*/
stdlib.h>
ctype.h>
stdio.h>
string.h>
typedefstruct
{
charclass_0[20];
/*班级*/
intnumber;
/*学号*/
charname[20];
/*姓名*/
floatelectrics;
/*离散数学成绩*/
floatc_program;
/*C++语言成绩*/
floatmultimedia;
/*大学物理成绩*/
floatenglish;
/*大学英语成绩*/
floatmath;
/*高等数学成绩*/
floatsport;
/*体育成绩*/
floatpolity;
/*马克思主义基本原理成绩*/
floatsummary;
/*总分*/
floataverage;
/*平均分*/
}Student;
Studentstu[100];
/*结构体数组变量*/
intmenu()/*菜单函数*/
{
charc;
do
system("
cls"
);
/*运行前清屏*/
cout<
<
"
********************************学生成绩管理系统********************************"
endl;
/*菜单选择*/
----囊括信息专业主要课程----"
【1】输入数据"
【2】显示所有数据"
【3】按平均分降序排列"
【4】查找并显示一组数据"
【5】插入一组数据"
【6】修改一组数据"
【7】删除一组数据"
【8】从文件中读入数据"
【9】将所有记录写入文件"
【0】退出本系统\n"
*********************作者:
09软件工程+信息工程3班吴乐斌***********************"
请你选择操作(0-9):
c=getchar();
/*读入选择*/
}
while(c<
'
0'
||c>
9'
return(c-'
/*返回选择*/
intInput(Studentstud[],intn)/*输入若干条记录*/
inti=0;
charsign,x[10];
/*x[10]为清除多余的数据所用*/
while(sign!
='
n'
&
sign!
N'
)/*判断*/
请输入学生的班别:
;
/*交互输入*/
cin>
>
stud[n+i].class_0;
请输入学生的学号:
stud[n+i].number;
请输入学生的姓名:
stud[n+i].name;
请输入该学生『离散数学』的成绩:
stud[n+i].electrics;
请输入该学生『C++程序设计』的成绩:
stud[n+i].c_program;
请输入该学生『大学物理』的成绩:
stud[n+i].multimedia;
请输入该学生『大学英语』的成绩:
stud[n+i].english;
请输入该学生『高等数学』的成绩:
stud[n+i].math;
请输入该学生『大学体育』的成绩:
stud[n+i].sport;
请输入该学生『马克思主义基本原理』的成绩:
stud[n+i].polity;
stud[n+i].summary=stud[n+i].electrics+stud[n+i].c_program+stud[n+i].multimedia+stud[n+i].english+stud[n+i].math+stud[n+i].sport+stud[n+i].polity;
stud[n+i].average=stud[n+i].summary/7;
该学生的总分为:
stud[n+i].summary<
平均分为:
stud[n+i].average<
gets(x);
/*清除多余的输入*/
=====>
提示:
继续写入成绩?
(Y/N)"
sign;
/*输入判断*/
i++;
}
return(n+i);
voidDisplay(Studentstud[],intn)/*显示所有记录*/
inti;
if(!
stud)cout<
没有记录"
else{
--------------------------------------------------------------------------------"
/*格式头*/
班别学号姓名离散C++物理英语数学体育马克思总分平均分"
for(i=1;
i<
n+1;
i++)/*循环输入*/
stud[i-1].summary=stud[i-1].electrics+stud[i-1].c_program+stud[i-1].multimedia+stud[i-1].english+
stud[i-1].math+stud[i-1].sport+stud[i-1].polity;
stud[i-1].average=stud[i-1].summary/7;
stud[i-1].class_0<
"
stud[i-1].number<
stud[i-1].name<
stud[i-1].electrics<
stud[i-1].c_program<
stud[i-1].multimedia<
stud[i-1].english<
stud[i-1].math<
stud[i-1].sport<
stud[i-1].polity<
stud[i-1].summary<
stud[i-1].average<
\t\t\t"
}
pause"
voidSort(Studentstud[],intn)/*按平均分排序*/
inti,j,k;
floats;
chart[20];
for(i=0;
n-1;
i++)/*冒泡法排序*/
for(j=0;
j<
n-1-i;
j++)
if(stud[j].average<
stud[j+1].average)
strcpy(t,stud[j+1].class_0);
strcpy(stud[j+1].class_0,stud[j].class_0);
strcpy(stud[j].class_0,t);
k=stud[j+1].number;
stud[j+1].number=stud[j].number;
stud[j].number=k;
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
s=stud[j+1].electrics;
stud[j+1].electrics=stud[j].electrics;
stud[j].electrics=s;
s=stud[j+1].c_program;
stud[j+1].c_program=stud[j].c_program;
stud[j].c_program=s;
s=stud[j+1].multimedia;
stud[j+1].multimedia=stud[j].multimedia;
stud[j].multimedia=s;
s=stud[j+1].english;
stud[j+1].english=stud[j].english;
stud[j].english=s;
s=stud[j+1].math;
stud[j+1].math=stud[j].math;
stud[j].math=s;
s=stud[j+1].sport;
stud[j+1].sport=stud[j].sport;
stud[j].sport=s;
s=stud[j+1].polity;
stud[j+1].polity=stud[j].polity;
stud[j].polity=s;
s=stud[j+1].summary;
stud[j+1].summary=stud[j].summary;
stud[j].summary=s;
s=stud[j+1].average;
stud[j+1].average=stud[j].average;
stud[j].average=s;
intInsert(Studentstud[],intn)/*插入一条记录*/
charx[10];
/*清除多余输入所用*/
stud[n].class_0;
stud[n].number;
stud[n].name;
stud[n].electrics;
stud[n].c_program;
stud[n].multimedia;
stud[n].english;
stud[n].math;
stud[n].sport;
stud[n].polity;
stud[n].summary=stud[n].electrics+stud[n].c_program+stud[n].multimedia+stud[n].english+
stud[n].math+stud[n].sport+stud[n].polity;
stud[n].average=stud[n].summary/7;
n++;
Sort(stu,n);
/*调用排序函数*/
插入成功!
/*返回成功信息*/
return(n);
intDelete(Studentstud[],intn)/*按学号查找,删除一条记录*/
ints;
inti=0,j;
输入需要删除学生的学号:
/*交互式问寻*/
s;
while((stud[i].number-s)!
=0&
n)i++;
/*查找判断*/
if(i==n)
对不起,无法找到改学号……"
/*返回失败信息*/
for(j=i;
j++)/*删除操作*/
strcpy(stud[j].class_0,stud[j+1].class_0);
stud[j].number=stud[j+1].number;
strcpy(stud[j].name,stud[j+1].name);
stud[j].electrics=stud[j+1].electrics;
stud[j].c_program=stud[j+1].c_program;
stud[j].multimedia=stud[j+1].multimedia;
stud[j].english=stud[j+1].english;
stud[j].math=stud[j+1].math;
stud[j].sport=stud[j+1].sport;
stud[j].polity=stud[j+1].polity;
已成功删除!
return(n-1);
voidSearch(Studentstud[],intn)/*查找并显示一个记录*/
输入需要查找学生的学号:
对不起,无法找到该学生的信息!
/*输入失败信息*/
return;