学生成绩管理系统Word文档格式.docx

上传人:b****8 文档编号:22367606 上传时间:2023-02-03 格式:DOCX 页数:23 大小:2.45MB
下载 相关 举报
学生成绩管理系统Word文档格式.docx_第1页
第1页 / 共23页
学生成绩管理系统Word文档格式.docx_第2页
第2页 / 共23页
学生成绩管理系统Word文档格式.docx_第3页
第3页 / 共23页
学生成绩管理系统Word文档格式.docx_第4页
第4页 / 共23页
学生成绩管理系统Word文档格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统Word文档格式.docx

《学生成绩管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统Word文档格式.docx

1、所用的数据库是:

sQlite 

2、开发的环境是:

QT4

二、需求分析

2.1系统功能要求设计

此系统实现如下系统功能:

(1)使得学生的成绩管理工作更加清晰、条理化、自动化。

(2)通过用户名和密码登录系统,查询课程基本资料,学生所选课程成绩,修改用户密码等功能。

容易地完成学生信息的查询操作。

(3)设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面的功能要求。

2.2系统模块设计

成绩管理系统大体可以分成二大模块如,一是学生的基本信息模块,里面应该包含学生的各方面的基本信息;

再者便是课程管理模块,在该模块中应该包含有对学生成绩信息的查询和处理,如平均成绩、最好成绩、最差成绩以及不及格学生的统计等功能模块;

再其次还有教师、课程等相关信息的模块;

可以得到系统流程图:

2.3数据字典

数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。

利用SQlite建立“学生选课”数据库,其基本表清单及表结构描述如下:

数据库中用到的表:

数据库表名

关系模式名称

备注

Student

学生

学生学籍信息表

Course

课程

课程基本信息表

Score

成绩

选课成绩信息表

Student基本情况数据表,结构如下:

字段名

字段类型

NotNull

说明

Student_sno

Char

Primarykey

学号

Student_sn

char

学生姓名

Student_sex

‘男’或‘女’

性别

Student_dept

系别

Student_age

年龄

Student_address

地址

course数据表,结构如下:

约束控制

course_cno

主键(primarykey)

课程号

course_cname

notnull

课程名称

course_hour

int

课时

course_score

numeric(2,1)

学分

score情况数据表,结构如下:

主键,外部键

student_sno

score

Notnull

三、概念模型设计

由需求分析的结果可知,本系统设计的实体包括:

(1)学生基本信息:

学号,姓名,性别,籍贯,年龄,专业。

(2)课程基本信息:

课程名,课程号,分数,学时,学分。

这些实体间的联系包括:

(1)每位学生可以学习多门课程,每门课程可供多位学生学习。

由上述分析可得到系统的E—R图

四、逻辑和物理结构设计

4.1由系统E—R图转化而得到的关系模式如下:

(1)学生(学号,姓名,性别,年龄,地址,系别),其主关键字为学号;

(2)课程(课程名,课程号,学时,学分),其中主关键字为课程号;

(3)成绩(课程号,学号,分数)其中主关键字为学号和课程号。

可以与学生关系模式合并为:

学生(学号,姓名,性别,年龄,地址,系别,成绩,课程号)。

4.2确定关系模型的存取方法

在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。

可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。

在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:

在经常需要搜索的列上建立索引;

在主关键字上建立索引;

在经常用于连接的列上建立索引,即在外键上建立索引;

在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。

才能充分利用索引的作用避免因索引引起的负面作用。

4.3确定数据库的存储结构

确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。

因为该成绩管理系统的数据量小,,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排。

(1)创建学生基本信息表:

createtableStudent(

学号varchar(11)notnull,

系别varchar(5)notnull,

姓名varchar(6)notnull,

性别varchar

(2)notnull,

年龄char

(2)notnull,

地址varchar(20)notnull,

constraintPK_STUDENTprimarykey(学号)

go

executesp_addextendedproperty'

MS_Description'

'

学生基本信息描述'

user'

'

'

table'

StudentsInfo'

(2)创建课程表:

createtableCourse(

cnovarchar(5)notnull,

cnamevarchar(10)null,

xueshismallintnull,

xuefenintnull,

constraintPK_COURSEprimarykey(课程号))

(3)创建学生与课程的成绩表

createtableSC(snovarchar(11)notnull,

cnovarchar(5)notnull,

chengjivarchar(4)notnull

constraintPK_SCprimarykey(学号,课程号)

在SC表上创建索引SC_FK与SC2_FK

createindexSC_FKonSC(学号ASC)

Go

createindexSC2_FKonSC(课程号ASC)

建立课程号索引

createindexTC_FKonTC(

课程号ASC

五、系统实现

5.1、系统的模块层次结构

5.2、用户登录模块

5.2.1、用户登录界面

5.2.2、用户登录的具体

分析:

当用户填写正确的的用户和密码是就进入选择模块。

以下是按登录时实现的代码。

5.3、学生基本信息模块

5.3.1、学生个人基本信息的界面。

5.3.2、学生基本信息的查找具体实现。

voidStudentxxb:

:

on_pushButton_clicked()

{

QStringstudentno=ui->

lineEdit->

text();

model->

setFilter(QObject:

tr("

sno='

%1'

"

).arg(studentno));

//根据学号进行筛选

select();

//显示结果

ui->

clear();

setFocus();

}

这里面主要运用到:

QT4里面提供API函数来实现的。

如上:

5.3.3、学生基本信息的添加具体实现。

on_pushButton_4_clicked()

introwNum=model->

rowCount();

//获得表的行数

intid=10;

insertRow(rowNum);

//添加一行

setData(model->

index(rowNum,0),id);

5.3.4、学生基本信息的排序具体实现。

这里面主要是通过点击构件(tableView)的水平标题来选择那一列进行排序的。

当点击的时候就会产生一个信号会连接排序的函数的信号。

如;

sortByColumn(int)就是排序的函数。

5.3.5、学生基本信息的删除具体实现。

//删除

on_pushButton_8_clicked()

intcurRow=ui->

tableView->

currentIndex().row();

//获取选中的行

removeRow(curRow);

//删除该行

intok=QMessageBox:

warning(this,tr("

删除当前行!

),tr("

你确定"

删除当前行吗?

),QMessageBox:

Yes,QMessageBox:

No);

if(ok==QMessageBox:

No)

{

revertAll();

//如果不删除,则撤销

}

elsemodel->

submitAll();

//否则提交,在数据库中删除该行

这里面的删除工作也是主要用到QT的API函数来实现的。

5.4、课程基本信息模块

5.4.1、课程基本信息的界面

5.4.2、课程基本信息添加具体实现。

5.4.3、课程基本信息删除具体实现。

5.4.4、课程基本信息排序具体实现。

5.4.5、课程基本信息查找具体实现。

以上的添加,删除,排序,查找的具体实现,方法与在学生基本信息的添加,删除,排序,查找都一样的。

5.5.1、成绩基本信息的界面

图5.5.1(成绩基本信息的界面)

5.5.2、成绩基本信息的添加、删除、排序。

分析:

成绩基本信息的添加、删除、排序用的法与学生基本信息的添加、删除、排序的都一样。

5.5.3、成绩基本信息的查找。

(查找的操作界面)

可以在如上图5.5.1的右边所显示的表格中的姓名,学号进行查找。

//这是查找

voidscore:

on_pushButtonFind_clicked()

QStringcountry;

elseif(ui->

radioButtonsno->

isChecked())////根据学号进行筛选

sno='

elseif((ui->

radioButtonsname->

isChecked()))//根据姓名进行筛选

QSqlQueryquery;

query.exec(QObject:

selectsnofromstudentwheresname='

query.next();

country=query.value(0).toString();

).arg(country));

5.5.3、每个同学的总分和平均分。

代码实现如下:

界面如下所示:

5.5.4、各班的总分和下平均分。

代码和操作的界面如下:

//--计算各班的总成绩,平均成绩,按各班平均成绩进行排序

on_pushButtoClassSumAvg_clicked()

QSqlQueryqurery1;

qurery1.exec("

dropviewifexistsclassAvgSum"

);

createviewclassAvgSumas\

selectstudent.[major]as班级,sum(degree)as总分,avg(degree)as平均分fromscore1,student\

wherestudent.majorin(selectmajorfromstudent)\

andstudent.sno=score1.snogroupbystudent.majororderby平均分desc"

setTable("

classAvgSum"

5.5.5、所有学生的各科平均分。

代码和操作后显示界面如下:

//-所有学生单科平均成绩

on_pushButtonViewall_2_clicked()

QSqlQueryqurery2;

qurery2.exec("

dropviewifexistsAllavg"

createviewAllavgas\

selectameas科目,oas科目编号,avg(degree)as平均分\

fromscore1,course\

whereoin(selectofromscore1)andcourse.[cno]=score1.[cno]\

groupbyo"

model->

Allavg"

5.5.6、总分最高的学生。

//单科成绩最高的学生

on_pushButtonViewall_4_clicked()

QSqlQueryqurery3;

qurery3.exec("

dropviewifexistsdanAllSum"

createviewifnotexistsdanAllSumas\

selectcourse.[cname]as科目,student.[sname]as姓名,student.sno,H.highteras分数\

fromcourse,student,\

(selectscore1.[cno]ashighcno,max(degree)ashighter,snofromscore1groupbyo)asH\

wherestudent.[sno]=H.snoandcourse.[cno]=H.highcno"

hi"

5.5.7、单科成绩最高的学生。

5.5.8、不及格的考生信息。

//不及格的考生信息

on_pushButtonViewall_5_clicked()

QSqlQueryqurery4;

qurery4.exec("

dropviewifexistsfailure"

createviewfailureas\

selectstudent.*,course.[cname]as科目,degreeas成绩\

fromscore1,student,coursewherescore1.degree<

60andstudent.[sno]=score1.sno\

andcourse.[cno]=score1.[cno]"

failure"

5.5.9、学生获奖情况。

//这是获奖情况

QSqlQueryqurery5;

qurery5.exec("

droptableifexistsjl"

createtablejl('

姓名'

'

班级'

平均分'

奖金'

)"

);

insertintojl('

)\

selectstudent.sname,student.[major],avg(degree)asavgdegree,'

10000元(特等奖)'

\

fromscore1,studentwherestudent.sno=score1.sno\

groupbyscore1.snoorderbyavgdegreedesclimit0,1"

8000元(一等奖)'

\

fromscore1,studentwherestudent.sno=score1.snogroupby\

score1.snoorderbyavgdegreedesclimit1,1"

5000元(二等奖)'

groupbyscore1.snoorderbyavgdegreedesclimit2,3"

)\

2000元(三等奖)'

groupbyscore1.snoorderbyavgdegreedesclimit5,5"

jl"

问题1:

通过一个接口去用姓名或学号对在构件(tableview)中显示的数据进行查找。

注意在tableView构件中显示的内容可以不同在表的切换。

怎样实现呢?

答:

可以利用QT4的API函数来实现的。

因为可以通过

//根据学号进行筛选.

如果是通过姓名查找,首先在学生的信息表中通过姓名来查找相对应的学号,再用上面方法来查找。

心得:

对于这个系统设计。

最主要的是对数据库设计。

数据库设计好就可以对后面的高级语言的设计和操作比较容易。

还有要具有良好SQL语言的数据库。

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

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

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

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