学生成绩管理系统合肥工业大学.docx

上传人:b****1 文档编号:1770812 上传时间:2023-05-01 格式:DOCX 页数:31 大小:364.76KB
下载 相关 举报
学生成绩管理系统合肥工业大学.docx_第1页
第1页 / 共31页
学生成绩管理系统合肥工业大学.docx_第2页
第2页 / 共31页
学生成绩管理系统合肥工业大学.docx_第3页
第3页 / 共31页
学生成绩管理系统合肥工业大学.docx_第4页
第4页 / 共31页
学生成绩管理系统合肥工业大学.docx_第5页
第5页 / 共31页
学生成绩管理系统合肥工业大学.docx_第6页
第6页 / 共31页
学生成绩管理系统合肥工业大学.docx_第7页
第7页 / 共31页
学生成绩管理系统合肥工业大学.docx_第8页
第8页 / 共31页
学生成绩管理系统合肥工业大学.docx_第9页
第9页 / 共31页
学生成绩管理系统合肥工业大学.docx_第10页
第10页 / 共31页
学生成绩管理系统合肥工业大学.docx_第11页
第11页 / 共31页
学生成绩管理系统合肥工业大学.docx_第12页
第12页 / 共31页
学生成绩管理系统合肥工业大学.docx_第13页
第13页 / 共31页
学生成绩管理系统合肥工业大学.docx_第14页
第14页 / 共31页
学生成绩管理系统合肥工业大学.docx_第15页
第15页 / 共31页
学生成绩管理系统合肥工业大学.docx_第16页
第16页 / 共31页
学生成绩管理系统合肥工业大学.docx_第17页
第17页 / 共31页
学生成绩管理系统合肥工业大学.docx_第18页
第18页 / 共31页
学生成绩管理系统合肥工业大学.docx_第19页
第19页 / 共31页
学生成绩管理系统合肥工业大学.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生成绩管理系统合肥工业大学.docx

《学生成绩管理系统合肥工业大学.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统合肥工业大学.docx(31页珍藏版)》请在冰点文库上搜索。

学生成绩管理系统合肥工业大学.docx

学生成绩管理系统合肥工业大学

“数据结构与算法”

课程设计报告

(一)需求和规格说明

主要功能是对批量学生的各门成绩进行录入、修改、查询、统计等,要求方便快速。

记录学生的学号、姓名、班级、性别、联系电话以及课程和成绩;可以对学生的成绩按学号和姓名进行查寻;输出显示学生成绩;并实现排序、统计及格率和优秀率功能。

编程任务:

(1)界面基本要求:

****************************

学生成绩管理系统

****************************

************************************

**F1--帮助**

**F2--输入数据并存入文件**

**F3--根据学号查询成绩**

**F4--根据姓名查询成绩**

**F5--输出文件内容**

**F6–成绩排序**

**F7--统计及格和优秀人数**

**ESC--退出系统**

************************************

另:

提倡用MFC的对话框做简单的输入输出交互界面。

(2)功能要求:

1)帮助:

系统使用方法的相关信息。

2)输入数据并存入文件:

输入相关信息,并实现文件流的读写操作。

3)根据学号查询成绩:

输入学号,查询学生的各门成绩

4)根据姓名查询成绩:

输入姓名,查询学生的各门成绩

5)输出文件内容:

屏幕输出显示所有学生的成绩

6)成绩排序:

对某门成绩或总分进行快速排序,显示、保存

7)统计及格和优秀人数:

统计及格和优秀率。

8)退出

(二)设计

主要内容如下:

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

(编译器C-Free5.0)

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

 

属性和方法定义

类名

成员类别

类型

成员名

描述

student

属性

string

Name

学生姓名

string

Number

学生学号

string

CLas

所在班级

char

Gender

性别

string

Phone

电话号码

double

Math

数学成绩

double

Computer

微机机成绩

double

Sum

总的分数

float

Jige_num

数学及格人数

float

Yousheng_num

数学优秀人数

float

Jige

微机及格人数

float

Youxiu

微机优秀人数

float

Jigelv

数学及格率

float

youshenglv

数学优秀率

float

Jigel

微机及格率

float

youxiul

微机优秀率

int

Count

统计输入数据个数

方法

void

help()

帮助文件

void

sum_score()

总分函数

void

app_score

动态节点建立的函数

void

cin_app()

输入数据的函数

void

del_score()

删除数据的函数

void

displist()

打印数据的函数

void

lookup(int,string)

查找数据的函数

void

compositor(int)

排序数据的函数

void

tongji()

计算及格率和优秀率

void

menu()

系统菜单函数

 

(三)用户手册

程序运行时,进入主界面

选择”0”,读取帮助信息

帮助信息

系统有对学生的学号、姓名、班级、性别、联系电话以及计算机、数学的成绩录入等功能

可以对学生的成绩按学号和姓名进行查寻,并且能对学生成绩实现排序功能。

按照界面说明进行程序的各个子程序调用,最终完成工作后便可退出。

@2014Anpengfei.Allrightsreserved.

(四)调试及测试

在调试过程中也出现了多处错误,逐一修改,坦然漏洞还是有的。

由于系统每增加一个学生信息,无论他(她)是的情况如何,其学号和其他信息都是自定义的,但是当出现相同学号时,系统能返回上级菜单,让用户重新输入。

对于班级、性别、电话号码都是后输入系统的,没有进行限制,此系统只有保存和调用数据的功能,并不能对数据进行判断,查验是否为合法班级。

合法电话号码等等。

但是编程过程中对数学和微机的成绩输入是有限制的,输入数据必须满足0<=输入值<=100,否则将返回上级菜单重新输入。

(五)运行实例:

以两组数据为例:

学号姓名班级性别电话数学成绩微机成绩

01qq01b6666668859

02ww02g8888887980

运行各功能函数如图所示:

(六)进一步改进

(1)、并未实现文件流的读取,目前程序只能逐条进行输入,不能实现批量读入,以后会做改进。

(2)、没有实现结果的输出保存功能,信息只能在系统中调用,当系统关闭后没有保存想要的数值等功能,以后要加强。

(3)、没有进行MFC的优化设计,程序只是单纯的存在编译器当中,不过利用C-Free5.0倒是能生成”函数.exe”文件,能单独拿出来在windows操作系统下使用。

(4)、对于信息的修改,用删除重新输入的方式来完成,并未构建直接修改函数。

(七)心得体会

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。

在用的时候难免出现这样那样的错误。

如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。

解决的这个问题的办法是调整。

一个系统的菜单和提示信息非常重要。

如果没有这些用户根本不知道怎么用这个成绩管理系统。

在设计的调试过程中也无法顺利的完成调试工作。

有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

回顾此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。

学到了设计一个简单的系统。

要注意哪些方面。

也使我知道自己哪些方面做得还不够。

这不仅是程序设计,更是锻炼处理问题的能力,同时编写程序是件细心活,稍不留神就会出错,这就必须要求我对待事情要认真!

在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。

但我总结出了一点点的经验如下:

1、要对系统的功能和要求做出详细的分析,并合理分解任务。

2、把分解出来的子任务,做给一个相对独立的模块。

3、在设计一个模块之前,要简单构想一下总界面的显视情况。

4、针对构想出来的界面进行程序的编写。

(八)对课程设计的建议

1、可以多做一些技术上的指导,多讲讲算法。

针对每个人的题目,有一些建设性的指导,比如我的题目中要求MFC设计,可以简单得培训一下,或许效果会更好。

2、课程设计,每个人的题目都不一样,相互之间交流还是很少的,我建议今后可以出一些相对难一点儿题目,分组进行设计,这样在过程中每个人都能得到锻炼,还能培养合作意识和团队精神,这对即将成为程序员的我们是很重要的。

(九)附录源程序

#include

#include

#include

#include

#include

usingnamespacestd;

classstudent

{

private:

stringnumber;

stringname;

stringclas;

chargender;

stringphone;

doublecomputer;

doublemath;

doublesum;

student*head;

student*curnode;

student*next;

floatjige_num;

floatyoushen_num;

floatjige;

floatyouxiu;

floatjigelv;

floatyoushenglv;

floatjigel;

floatyouxiul;

intcount;

public:

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

//带数据域参数的构造函数,用来动态建立节点---------------------------------

student(string,string,string,char,string,double,double,double=0.0);

voidhelp();//用于描述帮助信息

voidsum_score();//总分函数

voidcin_app();//用于输入

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

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

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

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

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

voidcompositor(int);//排序函数

voidtongji();//统计及格率和优秀率

};

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

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

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

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

student:

:

student():

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

{

head=curnode=this;

}

//带参数的构造函数

student:

:

student(stringNumber,stringName,stringClas,charGender,stringPhone,doubleComputer,doubleMath,doubleSum):

next(NULL)

{

number=Number;

name=Name;

clas=Clas;

gender=Gender;

phone=Phone;

computer=Computer;

math=Math;

sum=Sum;

}

//////////////////////////////////统计及格率和优秀率

voidstudent:

:

tongji(){

intcount;

intjige_num=0,youshen_num=0,jige=0,youxiu=0;//分别算计算机和数学成绩的率人数和率

floatjigelv,youshenlv,jigel,youxiul;//jigelvstandforcomputer;jigelstandformath

intm=count;

for(inti=0;i<=m;i++)

{

if(computer>=60){jige_num=jige_num+1;}

if(computer>=85){youshen_num=youshen_num+1;}

if(math>=60){jige=jige+1;}

if(math>=85){youxiu=youxiu+1;}

}

jigelv=jige_num/m;

youshenlv=youshen_num/m;

jigel=jige/m;

youxiul=youxiu/m;

cout<<"计算机及格率:

"<

"<

cout<<"数学及格率:

"<

"<

jige_num=0;

youshen_num=0;

jigelv=0;

youshenlv=0;

}

////////////////////////////////帮助信息//////////////////////////

voidstudent:

:

help(){

cout<<"帮助信息"<

cout<<"系统有对学生的学号、姓名、班级、性别、联系电话以及计算机、数学的成绩录入等功能"<

cout<<"可以对学生的成绩按学号和姓名进行查寻,并且能对学生成绩实现排序功能。

"<

cout<<"@2014Anpengfei.Allrightsreserved."<

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

}

///////////////////////////////////////////////////////计算总成绩

voidstudent:

:

sum_score()

{sum=computer+math;}

voidstudent:

:

app_score(stringNumber,stringName,stringClas,charGender,stringPhone,doubleComputer,doubleMath)//动态建立节点

{

curnode->next=newstudent(Number,Name,Clas,Gender,Phone,Computer,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<<"";system("pause");

}

///////////////////////////////////////////////////输出表中的全部数据

voidstudent:

:

displist()

{

if(head->next==NULL)

{

cout<<"!

这是一个空表!

"<

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

return;

}

else{

student*pw=curnode;

curnode=head->next;

cout<<"学号姓名班级性别电话计算机数学总分"<

while(curnode!

=NULL)

{

cout<number;

cout<name;

cout<clas;

cout<gender;

cout<phone;

cout<computer;

cout<math;

curnode->sum_score();

cout<sum;

if(curnode->next!

=NULL)

cout<

else

cout<

curnode=curnode->next;

}

curnode=pw;

cout<<"!

表中内容输出完毕!

"<

cout<

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

}

}

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

voidstudent:

:

cin_app()

{

student*p=curnode;

boolb=0;

stringNumber;

stringName;

stringClas;

charGender;

stringPhone;

doubleComputer;

doubleMath;

intcount=0;

while

(1)

{

cout<<"学号:

";

cin>>Number;

curnode=head->next;

while(curnode!

=NULL)

{

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

curnode=curnode->next;

}

if(!

b)

break;

else

{

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

}

}

curnode=p;

cout<<"姓名:

";

cin>>Name;

count++;

curnode=p;

cout<<"班级(数字):

";

cin>>Clas;

curnode=p;

cout<<"性别(bforboy,gforgirl):

";

cin>>Gender;

curnode=p;

cout<<"电话:

";

cin>>Phone;

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>>Math;

while(cin.fail())

{

err_char();

cout<<"数学:

";

cin>>Math;

}

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

break;

else

score_err();}

this->app_score(Number,Name,Clas,Gender,Phone,Computer,Math);

cout<<"记录已添加!

"<

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

}

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

voidstudent:

:

lookup(intn,stringstr)

{

student*p=curnode;

boolb;

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

inti=1;

if(!

(curnode=head->next))

{

cout<<"!

这是一个空表!

"<

curnode=p;

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

return;

}

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<clas;

cout<gender;

cout<phone;

cout<computer;

cout<math;

curnode->sum_score();

cout<sum;

cout<

}curnode=curnode->next;

}

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

if(i)

{

cout<

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

}

curnode=p;

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

"<

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

}

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

voidstudent:

:

del_score(intn,stringstr)

{

student*p=curnode,*pw=head;

boolb;

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

inti=1

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

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2