学生成绩管理系统课程设计报告C++实现.docx

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

学生成绩管理系统课程设计报告C++实现.docx

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

学生成绩管理系统课程设计报告C++实现.docx

学生成绩管理系统课程设计报告C++实现

C++课程设计报告

 

课程设计题目:

学生成绩管理系统

学生姓名:

吴深深

学号:

201420181013

专业:

软件工程

班级:

1421810

指导教师:

邓微

2015年6月27日

目录

1功能需求分析3

2总体设计3

3数据结构的设计5

4算法设计8

4.1总体的算法设计8

4.2较难部分的算法设计9

4.2.1密码验证模块9

4.2.2降序排序部分9

4.2.3打开已有文件部分11

5.程序代码12

6.运行环境24

7.运行结果24

8.课程设计总结28

学生成绩管理系统课程设计报告

1功能需求分析

学生成绩管理是一个学校必不可少的部分,随着计算机和计算机知识的普及,学生成绩管理系统得到了更大的发展空间,通过对学生成绩管理系统的开发,可以提高校务人员的工作效率。

本系统具有以下基本功能:

1、功能菜单实现功能选择;

2、输入功能:

输入学生信息,并保存到文件中;

3、计算每个学生的总分与平均分并排序

4、能根据学号修改学生信息

5、能根据学号删除学生信息

6、查询功能:

1)能够根据学号查询学生信息;

2)能够根据姓名、班级查询学生信息

3)统计学生成绩,按照班级和科目计算平均分。

2总体设计

根据以上功能需求,本系统定义了一下函数,来逐步实现。

(1)voidinput_student();该函数实现从键盘中录入学生成绩,并且保存给学生类数组。

(2)voidrank_down();该函数以总分对学生降序排序,该函数会从每个学生的成员函数中调用intget_sum()函数,在调用函数时,被调函数根据输入数据计算出总分并且返回给主调函数。

排序以冒泡法实现,排序完成后,再依次给每个学生的数据成员rank(名次)赋值。

(3)voidsave_student();在有数据后,该函数可以实现数据以十进制的方式保存,保存时,可以自己输入文件名以及保存地址。

(4)voidrwrite_student();该函数实现对学生成绩等信息进行修改,修改前,以学号先查找到该学生,并且输出其详细信息,方便操作者进行修改。

(5)voiddelete_student();该函数能够以学号为依据,实现对象的删除,并且删除后该位置会被写一个数据填充。

(6)voidserch_menu();该函数被调用后系统会进入查看菜单,可选择以不同的方式查看学生的成绩信息。

按照不同的选择,该函数会调用一下函数。

①voidsurch_number();该函数以学号为依据实现精确查找。

②voidsurch_CLASS();能够根据姓名、班级查询学生信息

③voiddetial_class();该函数能够汇总您要查询的班级详细情况,功能包括人数,每个人都详细情况,班级平均分,和该班级的各个科目的平均分。

④voidsubject_ave();该函数能够计算出所有科目的平均分。

(7)voidopen_file();该函数可以打开已经保存的学生信息,并且显示到屏幕上,打开后可以进行上述的各种操作。

除此之外,还写了voidmain_menu();主菜单,实现对上述各个功能的选择。

3数据结构的设计

UML类图

数据结构的代码设计如下:

constintN=5000;//students[N]

staticintcount=N;//控制学生的操作数,默认值为N,在main中会提示改变

classstudent//定义学生类

{

private:

stringname,sex,number,CLASS;

intchinese,math,english,comprehensive,sum,ave,rank;

public:

stringget_name()//外部接口,查询信息时用到。

{

returnname;

}

stringget_number()//外部接口,查询信息时用到。

{

returnnumber;

}

intget_chinese()//外部接口,分班级处理时用到。

{

returnchinese;

}

intget_math()//外部接口,分班级处理时用到。

{

returnmath;

}

intget_english()//外部接口,分班级处理时用到。

{

returnenglish;

}

intget_comprehensive()//外部接口,分班级处理时用到。

{

returncomprehensive;

}

intget_sum()//总分是排序的依据,在输出信息和排序时会产生

{

sum=chinese+math+english+comprehensive;

returnsum;

}

intget_ave()

{

ave=(chinese+math+english+comprehensive)/4;

returnave;

}

stringget_CLASS()

{

returnCLASS;

}

voidset_rank(intrank)//对多个学生进行排序时产生产生名次

{

this->rank=rank;

}

voidset_Rn(intnsum,intnave,intnrank)//我把总分、平均数和名次称为余项。

{//这些数据在基本数据录入后会产生。

sum=nsum;//提供这个外部接口用于从文件中读取这些数据

ave=nave;

rank=nrank;

}

friendistream&operator>>(istream&in,student&cs)//重载插入符,实现输入基本数据

{

in>>cs.CLASS>>cs.number>>cs.name>>cs.sex>>cs.chinese

>>cs.math>>cs.english>>prehensive;

returnin;

}

friendostream&operator<<(ostream&out,student&cs)//重载提取符,实现格式输出详细信息

{

out<

<

<<"\t"<

returnout;

}

~student()

{}

};

students[N];//N=5000,但是学生的操作数是由count控制

 

注意:

学生的最终操作数是通过count决定。

4算法设计

4.1总体的算法设计

4.2较难部分的算法设计

4.2.1密码验证模块

该模块主要使用输入输出流的模块编写,进入密码验证模块时先检验密码文件是否存在,若不存在,则进行密码设置,进行密码设置时要输入两次,确保能够记住密码,设置密码成功后,密码内容会保存在文件。

若密码文件存在,则成功打开,输入密码并验证,只有三次输入机会。

4.2.2降序排序部分

该部分的核心算法是冒泡法实现排序。

作为学生成绩基本数据的派生,学生的排名也是一个基本的数据,本排名是在降序排序之后,通过外部接口set_rank()直接赋值给对象的数据成员rank,然后输出。

这一个循环体是该框图的核心部分,是冒泡法的算法。

该排序是以学生的总分为依据,通过类的外部接口voidget_sum()函数计算出总分并带回比较。

其中的N是在全局定义的学生的操作数,又是学生个数

4.2.3打开已有文件部分

文件保存之后,要能实现正常的读取,要不然,保存的就没有意义。

重要说明

每个学生对象有11个数据成员,为了输入与输出方便,该系统重载了插入符(>>)和提取符(<<)。

但是11个数据成员中只有8个是是从键盘输入,所以重载插入符时仅仅实现了8个基本数据的输入。

另外3个数据有两个是通过调用get_ave()和get_sum()时由基本数据自动算出并返回给调取位置,另外一个排名rank是在降序排序时产生。

所以,在重载提取符时实现了11个数据的格式输出。

所以文件中,每个成员有11个数据,通过重载的提取符只能提取8个,另外三个暂时保存在临时定义的sum,ave,rank中,通过对象的成员函数voidset_Rn(intnsum,intnave,intnrank)把剩余的三个值对象的数据成员。

从而避免从文件中读取数据时出现读取错位的现象。

5.程序代码请注意参考注释

#include

#include

#include

usingnamespacestd;

constintN=5000;//students[N]

staticintcount=N;//控制学生的操作数,默认值为N,在main中会提示改变

voidmima();//函数的声明

voidinput_student();

voidrank_down();

voidsave_student();

voidrwrite_student();

voiddelete_student();

voidserch_menu();

voidopen_file();

voidsurch_number();

voidsurch_CLASS();

voiddetial_class();

voidsubject_ave();

classstudent//定义学生类

{

private:

stringname,sex,number,CLASS;

intchinese,math,english,comprehensive,sum,ave,rank;

public:

stringget_name()//外部接口,查询信息时用到。

{

returnname;

}

stringget_number()//外部接口,查询信息时用到。

{

returnnumber;

}

intget_chinese()//外部接口,分班级处理时用到。

{

returnchinese;

}

intget_math()//外部接口,分班级处理时用到。

{

returnmath;

}

intget_english()//外部接口,分班级处理时用到。

{

returnenglish;

}

intget_comprehensive()//外部接口,分班级处理时用到。

{

returncomprehensive;

}

intget_sum()//总分是排序的依据,在输出信息和排序时会产生

{

sum=chinese+math+english+comprehensive;

returnsum;

}

intget_ave()

{

ave=(chinese+math+english+comprehensive)/4;

returnave;

}

stringget_CLASS()

{

returnCLASS;

}

voidset_rank(intrank)//对多个学生进行排序时产生产生名次

{

this->rank=rank;

}

voidset_Rn(intnsum,intnave,intnrank)//我把总分、平均数和名次称为余项。

{//这些数据在基本数据录入后会产生。

sum=nsum;//提供这个外部接口用于从文件中读取这些数据

ave=nave;

rank=nrank;

}

friendistream&operator>>(istream&in,student&cs)//重载插入符,实现输入基本数据

{

in>>cs.CLASS>>cs.number>>cs.name>>cs.sex>>cs.chinese

>>cs.math>>cs.english>>prehensive;

returnin;

}

friendostream&operator<<(ostream&out,student&cs)//重载提取符,实现格式输出详细信息

{

out<

<

<<"\t"<

returnout;

}

~student()

{}

};

students[N];//N=5000,但是学生的操作数是由count控制

voidmima()//密码设置与验证模块

{

stringmima,mima1;

ifstreammimafile("mima.txt");

if(mimafile.fail())//检验是否设置过密码

{

cout<<"您是第一次使用本系统,请设置密码:

"<

cin>>mima;

cout<<"请再输入一次:

"<

cin>>mima1;

if(mima==mima1)

{

ofstreammimafile;

mimafile.open("mima.txt");

mimafile<

cout<<"密码设置成功!

"<

}

else//当设置密码两次输入不一致,重新设置

{

do

{

cout<<"两次输入不一致,请重新输入:

"<

cin>>mima;

cout<<"请再输入一次:

"<

cin>>mima1;

}while(mima!

=mima1);

ofstreammimafile;

mimafile.open("mima.txt");

mimafile<

cout<<"密码设置成功!

"<

}

}

else//若之前设置过密码,可以直接进入密码验证模块

{

stringmima,mima1;

cout<<"检验您之前设置过密码,请输入密码:

"<

cin>>mima1;

mimafile>>mima;

if(mima!

=mima1)

{

inti=2;

for(;i>0;i--)

{

cout<<"密码错误,请重新输入(您还有"<

"<

cin>>mima1;

if(mima1==mima)

{

mimafile.close();

break;

}

}

if(i<=0)

{

exit(0);

mimafile.close();

}

}

else

{

mimafile.close();

}

}

return;

}

voidinput_student()//输入学生信息

{

system("cls");

cout<<"请按照下面格式输入"<

<<"班级\t学号\t姓名\t性别\t语文\t数学\t英语\t综合"<

for(inti=0;i

{

cin>>s[i];

}

}

voidsave_student()//保存学生信息

{

system("cls");

stringfilename;

cout<<"请输入文件名字:

"<

cin>>filename;

//getline(cin,filename,'\n');

fstreamstudentfile(filename,ios:

:

out);

studentfile<

studentfile<

for(inti=0;i

{

studentfile<

}

studentfile.close();

cout<<"数据已经成功保存为文件"<

}

voidrwrite_student()//修改学生成绩信息

{

system("cls");

charF;

stringnumber;

do//用do循环实现持续的修改

{

inti=0;

cout<<"请输入要修改的学生学号:

";

cin>>number;

for(i=0;i

{

if(number==s[i].get_number())

{

cout<<"修改前,学生信息为:

"<

cout<<"班级\t学号\t姓名\t性别\t语文\t数学\t英语\t综合\t总分\t平均\t名次"<

cout<

cout<<"请按照下面格式输入"<

<<"班级\t学号\t姓名\t性别\t语文\t数学\t英语\t综合"<

cin>>s[i];

cout<<"数据修改成功!

"<

break;

}

}

if(i>=count)

{

cout<<"查无此人!

"<

}

cout<<"是否继续修改数据?

(输入任意键继续,输入n取消本次操作。

):

";

cin>>F;

}while(F!

='n');

}

voiddelete_student()//删除学生信息

{

system("cls");

charF,P;

stringnumber;

do

{

inti=0;

cout<<"请输入要删除的学生学号:

";

cin>>number;

for(i=0;i

{

if(number==s[i].get_number())

{

cout<<"要删除的学生信息为:

"<

cout<<"班级\t学号\t姓名\t性别\t语文\t数学\t英语\t综合\t总分\t平均\t名次"<

cout<

cout<<"是否删除?

(输入任意键继续,输入n取消本次操作。

)"<

cin>>P;

if(P!

='n')

{

for(;i

{

s[i]=s[i+1];//数据删除过程

}

cout<<"数据删除成功!

"<

count--;//数据删除后,就少了一个,计数变量自减

}

break;

}

}

cout<<"是否继续查找删除对象?

(输入任意键继续,输入n取消本次操作。

):

";

cin>>F;

}while(F!

='n');

}

voidsurch_number()//按照学号查找学生成绩信息

{

system("cls");

charF;

stringnumber;

do//用do实现持续删除

{

inti=0;

cout<<"请输入要查询的学生学号:

";

cin>>number;

for(i=0;i

{

if(number==s[i].get_number())

{

cout<<"该学生详细信息为:

"<

cout<<"班级\t学号\t姓名\t性别\t语文\t数学\t英语\t综合\t总分\t平均\t名次"<

cout<

cout<<"查询结束!

"<

break;

}

}

if(i>=count)

{

cout<<"查无此人!

"<

}

cout<<"是否继续查找?

(输入任意键继续,输入n取消本次操作。

):

";

cin>>F;

}while(F!

='n');

}

voidsurch_CLASS()//按照班级和姓名实现学生信息的查找

{

system("cls");

charF;

stringname,CLASS;

do//用do循环实现持续的查找

{

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

当前位置:首页 > 小学教育 > 数学

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

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