大学C++课程设计报告学生成绩管理系统附源代码.docx

上传人:b****2 文档编号:22848153 上传时间:2023-04-28 格式:DOCX 页数:42 大小:406.62KB
下载 相关 举报
大学C++课程设计报告学生成绩管理系统附源代码.docx_第1页
第1页 / 共42页
大学C++课程设计报告学生成绩管理系统附源代码.docx_第2页
第2页 / 共42页
大学C++课程设计报告学生成绩管理系统附源代码.docx_第3页
第3页 / 共42页
大学C++课程设计报告学生成绩管理系统附源代码.docx_第4页
第4页 / 共42页
大学C++课程设计报告学生成绩管理系统附源代码.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

大学C++课程设计报告学生成绩管理系统附源代码.docx

《大学C++课程设计报告学生成绩管理系统附源代码.docx》由会员分享,可在线阅读,更多相关《大学C++课程设计报告学生成绩管理系统附源代码.docx(42页珍藏版)》请在冰豆网上搜索。

大学C++课程设计报告学生成绩管理系统附源代码.docx

大学C++课程设计报告学生成绩管理系统附源代码

广东海洋大学课程设计报告

课程名称:

C/C++语言程序设计

课程编号:

@@

学生姓名:

陈@@

学生班级:

信管1071

学号:

实习地点:

科技楼

起止时间:

2008.12.29-2009.01.02

指导教师:

@@

一、目的与要求

通过本课程设计的实践,全面总结C++课程学习中的的数据类型、程序结构、数组、函数、指针、结构体、链表等基本概念,掌握其使用方法。

掌握面向对象程序设计中有关类、对象、继承、重载、多态性、输入输出流类体系、文件操作的基本概念,初步学会用类与对象这种面向对象的程序设计方法编写应用程序。

培养使用面向对象的程序设计方法编写计算机程序的能力。

通过设计一个《学生成绩统计管理》,进一步熟悉C++中类的概念、类的封装、继承的实现方式。

了解系统开发的需求分析、类层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对C++的理解与VisualC++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。

程序设计是一门实践性很强的课程,必须十分重视实践环节。

许多实际的知识不是靠听课和看书学到的,而是通过长时间的实践积累的。

二、设计内容

学生成绩管理系统

1.基本功能:

a)成绩的输入(学号、姓名、英语、数学、C++语言…);

b)成绩统计(各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例);

c)总成绩统计(学生的总成绩、平均成绩及成绩排名)

d)成绩的统计结果显示。

2.扩展功能:

a)学生数据的添加、修改、与删除

b)学生数据的读取与存储

3.设计要求

a)采用面向对象的思想和方法完成设计,最好能够基于windows图形界面。

b)至少设计四个类;学生类(描述学生基本信息);成绩类:

班级类;课程类(描述课程信息:

课程编号,科目名称(如高等数学,大学英语等);学生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入。

三、过程与结果

主要内容如下:

1.关键类的设计,继承层次关系,代码:

首先,创建了一个student类.在student类的共有部分声明程序所需函数;然后就是student类的函数实现部分,其中定义student类的带参数及不带参数构造函数;再是常用函数的调用,并定义系统菜单函数及其界面;最后就是主函数文件。

Student类的声明如下:

主要功能函数的设计:

1.关于计算总成绩和平均成绩以及评定成绩等级的函数,而用于成绩统计中优秀、良好、中等、及格、不及格的计算,不过为便于表达,此程序采用字母A,B,C,D,E来分别表达上述

等级;代码如下:

2.此函数为查找函数的实现过程,通过whileswitch和if语句以及制表格和setw的使用将输入的数据以表格的形式打印出来,等级一栏宽度略小;

3.此函数为删除函数的实现部分,巧妙运用字母i,定义i的值0为数据不存在,1为数据存在的情况,删除时考虑数据存在与否的问题;

4.排序函数中分四种情况排序,分别按学号,总分,平均分来排序,排序结果也能有升序或降序操作,通过whileelse语句以及制表格和case的使用将输入的数据排序出来;因函数体过于庞大,在后面代码清单罗列出来时会标示出来。

数据输入设计:

数据输入以输出方式打开文件,通过this指针和地址引用把写入的数据加在文件末尾;

程序测试结果:

1运行程序.会出现如下画面,按照提示进行选择.

2.首先选择1,然后按Enter键.按照提示对学生情况进行输入.如图:

3.按任意键程序自动保存第一个同学的数据,并返回菜单,按照刚才的步骤继续输入第二个、第三个同学等等的数据;

4.选择4,然后按Enter键.对数据进行进行有目的性的排序.如图:

5.譬如选择2按总分排序,按Enter键,再在接下来的提示框中选择降序排序类型,再按一次Enter键,排序结果如图:

符合设计要求,但各科成绩“优秀”、“良好”、“中等”、“及格”、“不及格”的人数及其所占比例因个人能力有限未能设计出来;

6.按任意键又返回菜单,继续接下来的操作;

四、设计总结

这次课程设计基本上涵盖了大学一年级学习到的C++语言知识点,课程设计题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。

这次课设使我了解我编程思想和编程技巧,也认识了软件生命周期的各个环境,包括构思、设计、编写、调试、发布、文档化、维护和修订。

C++程序编译是一种要求特别精细的工作,小到一个分号(或点)都能影响整个程序的运行,这就要求我们编写程序时要特别细心,即使是一个符号,还是一个字母都不能乱用。

在这次的编写过程中,我就因为错把case序列语句里的变量中的p写成q使整个程序瘫痪。

它让我记住了学习需要认真、仔细、负责的态度对待。

这次课程设计虽说很辛苦,而且设计出来的程序不全具备课程所需的,不过扩展功能学生数据的添加、修改、与删除的函数嵌进去,而且排序功能关联升序和降序功能,正所谓鱼与熊掌不可得兼。

这次课程设计,在整个程序中,我们通过使用while循环,switch语句,冒泡排序法,表格设计中的setw()以及类的定义及使用来完成程序设计,使我提高了对C++中语句的使用能力和组合能力,进一步加强了我对使用C++编程的能力。

还让我掌握了高级程序设计语言的基本思想、基本概念、基本方法和基本技能,while语句,this指针,case作为程序的入口,一般结合switch使用等等。

一个星期以来的课程设计,感谢帮助我的同学和师长,通过和他们的交流,互相交流经验,我这次设计的程序中各大主函数体得以设计出来,感谢他们在我编程过程中为我做的提醒和指点,这真的很重要。

这次课程设计不仅让我修补了以前学习的漏洞,也让我知道一个道理:

编程需要兴趣和实际动手。

这应该可以借鉴在同学或者师长们的编程经验上。

创新思维至关重要,相对于我这略感冗余却实现不了更多功能的程序来说,有必要写出精简的代码,也有助于开发出高效的程序。

虽说我编写的程序离专业人员设计的还有好大一段距离,但它已经是我目前的极限。

我相信,通过我的努力,在不久的将来,我会编出一组真正实用的程序的。

五、成绩评定

成绩

指导教师

日期

六、附件

程序源代码清单:

#include

#include

#include

#include

usingnamespacestd;

classstudent

{

private:

stringnumber;

stringname;

doublecomputer;

doubleEnglish;

doublemath;

doublesum;

doubleave;

chargrade;

student*head;

student*curnode;

student*next;

public:

student();//不带参数的构造函数

student(string,string,double,double,double,double=0.0,double=0.0,char=NULL);//带数据域参数的构造函数,用来动态建立节点

voidsum_score();//总分函数

voidave_score();//平均分函数

voidgrade_score();//成绩等级

voidcin_app();//修改用

voidapp_score(string,string,double,double,double);//动态的建立节点

voiddel_score();//删除全部节点

voiddisplist();//输出节点中的全部数据

voidlookup(int,string);//查找函数

voiddel_score(int,string);//删除函数

voidcompositor(int,int);//排序函数

voidrework(int,string);//修改函数

};

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////student类的实现

voiderr_char();//输入错误字符检测函数

voidscore_err();//成绩范围检测函数,当输入成绩不在0到100之间时提示重新输入

student:

:

student():

next(NULL)//不带参数的构造函数

{

head=curnode=this;

}

//带参数的构造函数

student:

:

student(stringNumber,stringName,doubleComputer,doubleENglish,doubleMath,doubleSum,doubleAve,charGrade):

next(NULL)

{

number=Number;

name=Name;

computer=Computer;

English=ENglish;

math=Math;

sum=Sum;

ave=Ave;

grade=Grade;

}

voidstudent:

:

sum_score()///////////////////////计算总成绩

{sum=computer+English+math;}

voidstudent:

:

ave_score()/////////////////////计算平均成绩

{ave=(computer+English+math)/3.0;}

voidstudent:

:

grade_score()///////////////////计算成绩等级

{

inti;

i=ave;

switch(i/10)

{

case10:

grade='A';break;

case9:

grade='A';break;

case8:

grade='B';break;

case7:

grade='C';break;

case6:

grade='D';break;

default:

grade='E';

}

}

voidstudent:

:

app_score(stringNumber,stringName,doubleComputer,doubleENglish,doubleMath)//动态建立节点

{

curnode->next=newstudent(Number,Name,Computer,ENglish,Math);

curnode=curnode->next;

}

voidstudent:

:

del_score()//////////////////////删除表中的全部数据

{

student*p;

curnode=head->next;

while(curnode!

=NULL)

{

p=curnode->next;

deletecurnode;

curnode=p;

}

head->next=NULL;

curnode=head;

cout<<"┏━━━━━━━━━━━━━━━━━━━┓"<

cout<<"┃!

表中内容全部清空,现已是一个空表!

┃"<

cout<<"┗━━━━━━━━━━━━━━━━━━━┛"<

cout<<"";system("pause");

}

voidstudent:

:

displist()////////////////////////输出表中的全部数据

{

if(head->next==NULL)

{

cout<<"┏━━━━━━━━━┓"<

cout<<"┃!

这是一个空表!

┃"<

cout<<"┗━━━━━━━━━┛"<

cout<<"";system("pause");

return;

}

student*pw=curnode;

curnode=head->next;

cout<<"┏━━━━━┳━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━━┳━━┓"<

cout<<"┃学号┃姓名┃计算机┃英语┃数学┃总分┃平均分┃等级┃"<

cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<

while(curnode!

=NULL)

{

cout<<"┃"<number;

cout<<"┃"<name;

cout<<"┃"<computer;

cout<<"┃"<English;

cout<<"┃"<math;

curnode->sum_score();

cout<<"┃"<sum;

curnode->ave_score();

cout<<"┃"<ave;

curnode->grade_score();

cout<<"┃"<grade<<"┃"<

if(curnode->next!

=NULL)

cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<

else

cout<<"┗━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┛"<

curnode=curnode->next;

}

curnode=pw;

cout<<"┏━━━━━━━━━┓"<

cout<<"┃!

表中内容输出完毕!

┃"<

cout<<"┗━━━━━━━━━┛"<

cout<<"";system("pause");

}

////////////////////////////////////////输入数据

voidstudent:

:

cin_app()

{

student*p=curnode;

boolb=0;

stringNumber;

stringName;

doubleComputer;

doubleENglish;

doubleMath;

while

(1)

{

cout<<"学号:

";

cin>>Number;

curnode=head->next;

while(curnode!

=NULL)

{

b=(Number==curnode->number);

curnode=curnode->next;

}

if(!

b)

break;

else

{

cout<<"┏━━━━━━━━━━━━━━┓"<

cout<<"┃出现了相同的学号,请重新输入┃"<

cout<<"┗━━━━━━━━━━━━━━┛"<

}

}

curnode=p;

cout<<"姓名:

";

cin>>Name;

while

(1)

{

cout<<"计算机:

";

cin>>Computer;

while(cin.fail())

{

err_char();

cout<<"计算机:

";

cin>>Computer;

}

if(Computer>=0&&Computer<=100)

break;

else

score_err();

}

while

(1)

{

cout<<"英语:

";

cin>>ENglish;

while(cin.fail())

{

err_char();

cout<<"英语:

";

cin>>ENglish;

}

if(ENglish>=0&&ENglish<=100)

break;

else

score_err();

}

while

(1)

{

cout<<"数学:

";

cin>>Math;

while(cin.fail())

{

err_char();

cout<<"数学:

";

cin>>Math;

}

if(Math>=0&&Math<=100)

break;

else

score_err();

}

this->app_score(Number,Name,Computer,ENglish,Math);

cout<<"┏━━━━━━━━┓"<

cout<<"┃!

已添加一条记录!

┃"<

cout<<"┗━━━━━━━━┛"<

cout<<"";system("pause");

}

//////////////////////////////////////////查找函数的实现

voidstudent:

:

lookup(intn,stringstr)

{

student*p=curnode;

boolb;

//定义i=1,当找到数据时把i置为0.用于输出没有找到数据

inti=1;

if(!

(curnode=head->next))

{

cout<<"┏━━━━━━━┓"<

cout<<"┃!

这是一个空表!

┃"<

cout<<"┗━━━━━━━┛"<

curnode=p;

cout<<"";system("pause");

return;

}

cout<<"┏━━━━━┳━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━━┳━━┓"<

cout<<"┃学号┃姓名┃计算机┃英语┃数学┃总分┃平均分┃等级┃"<

cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<

while(curnode!

=NULL)

{

switch(n)

{

case1:

b=curnode->number==str;break;

case2:

b=curnode->name==str;break;

default:

return;

}

if(b)

{

i=0;

cout<<"┃"<number;

cout<<"┃"<name;

cout<<"┃"<computer;

cout<<"┃"<English;

cout<<"┃"<math;

curnode->sum_score();

cout<<"┃"<sum;

curnode->ave_score();

cout<<"┃"<ave;

curnode->grade_score();

cout<<"┃"<grade<<"┃"<

cout<<"┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"<

}

curnode=curnode->next;

}

//当i=1是代表没有找到数据

if(i)

{

cout<<"┣━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┫"<

cout<<"┃没有匹配的数据┃"<

cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<

}

else

cout<<"┗━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┛"<

curnode=p;

cout<<"以上是本次查找的结果!

"<

cout<<"";system("pause");

}

//////////////////////////////////////////删除函数的实现

voidstudent:

:

del_score(intn,stringstr)

{

student*p=curnode,*pw=head;

boolb;

//定义i=1,当找到数据时把i置为0.用于输出没有找到数据

inti=1;

if(!

(curnode=head->next))

{

cout<<"┏━━━━━━━┓"<

cout<<"┃!

这是一个空表!

┃"<

cout<<"┗━━━━━━━┛"<

curnode=p;

cout<<"";system("pause");

return;

}

while(curnode!

=NULL)

{

switch(n)

{

case1:

b=curnode->number==str;break;

case2:

b=curnode->name==str;break;

default:

return;

}

if(b)

{

i=0;

pw->next=curnode->next;

deletecurnode;

curnode=pw->next;

}

else

{

pw=curnode;

curnode=curnode->next;

}

}

//当i=1是代表没有找到数据

if(i)

{

cout<<"┏━━━━━━

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1