资源描述
学生学籍管理系统的设计报告
———————————————————————————————— 作者:
———————————————————————————————— 日期:
18
个人收集整理 勿做商业用途
学生学籍管理系统的设计报告
一、需求分析
信息社会的高科技,商品经济化的高效益,使计算机的应用已普及到经济和社会生活的各个领域。计算机虽然与人类的关系愈来愈密切,还有人由于计算机操作不方便继续用手工劳动。为了适应现代社会人们高度强烈的时间观念,学籍管理系统软件将会为教学办公室带来了极大的方便.
学籍管理的繁索给具有强烈时间观念的人员带来了诸多不便,教学办公室缺少一种完善的学籍管理软件,为了对学生档案的管理方便,开发人员完成了全面的调查与分析,同时与目标用户进行了多次深入沟通,并在次基础上着手开发《学籍管理系统》软件。
二、概要设计
软件适用于教育界,对学生的学籍可以随时输入、输出、查找、修改。
1、功能需求
① 能够游览学生学籍的所有信息
② 能够制定招生计划并能进行学生注册登记管理
③ 能够通过学生的一个信息找到个人学籍的相关信息(例如:知道学生的姓名能够找到该学生的所有有关的学籍信息)
④ 通过一条信息找到与之匹配的信息(例如:查询同一专业的所有人员)
⑤ 相关人员能对包含学生的学籍信息进行管理(因为学生有关情况不是固定不变的所以一旦学生信息发生改变就要对原有信息进行诸如添加,删除,修改等的操作)
⑥ 必须能对学生有关信息进行相关统计计算(例如:评定各项奖项,德育考评等)
⑦ 需要提供打印功能(能对要打印的各项内容都能进行打印服务)
⑧ 对毕业生进行档案管理
⑨ 能提供条形码进行刷卡服务
2、性能需求
数据精确度:查询时应保证查全率,所有相应域包含查询关键字的记录都应能查到
时间特性:一般操作的响应时间应在1-2秒内,对软磁盘和打印机及条形码刷卡服务响应时间也应在可接受的时间内完成。
适应性:对前面提到的运行环境要求不应存在困难.
三、详细说明
本系统的主要任务是实现对学校教导处的学生信息管理、成绩管理、课程管理及相关查询。其主要功能包括:
1、学生信息管理功能
班级管理:提供给班主任进行本班学生的信息更新、删除。
添加学生:以班级为单位,进行学生入库。其中分为单个添加和成批添加.单个添加学生供数量较少的学生信息入库;成批添加可以从现存的学生信息EXCEL文件中成批录入到数据库中.
删除学生.当学生毕业后,学生信息转移备份数据库中,系统的基本数据库中需要删除学生信息。该功能主要进行成批地删除学生信息,如连续学号区段的多位学生信息删除,整个班级的删除,所有学生信息的删除。
新生管理。本部分的功能主要有新生导入、分班、及设置学号。新生导入实现从现存的EXCEL新生名单中录入学生信息。分班功能实现按新生的报考专业、成绩及性别进行分班.设置学号实现自动为各班学生编发学号。
学生信息备份。在学生信息删除前,将其按班级为单位保存到备份数据库。
2.学生成绩管理功能
分数录入:以班级为单位,录入各科目的期中、期末、总评成绩。
总分及名次:计算指定班级学生的总分及名次。
补考成绩录入:修改总评成绩,以决定最终补考人数。
成绩备份:为指定班级及指定的学期数的学生成绩保存到备份数据库中。
3、课程信息管理功能
课程管理:提供本学期各年级各专业所开课程名称的录入、修改、删除。它是 学生成绩管理的基础:用以保证数据库中一致性原则。
4、查询功能.
学生信息查询:根据用户的要求,查询学生数据库的所有可能的信息,其中包括成绩查询。
备份成绩查询:按班级为单位查询备份数据库的学生信息,补考情况。
四、软件编码本文为互联网收集,请勿用作商业用途本文为互联网收集,请勿用作商业用途
#include<iostream>
#include〈string>
#include〈iomanip〉
#include<fstream>
using namespace std;
#define NULL 0
class student
{
public:
long num;
string name;
string dizhi,dihua,banji;
student *next;
};
int n; //链结点的个数
student *head,*stu;
/////////////////////////////////////////////////////////////////////
student *creat(void) //创建动态链表 返回以各指向链表头的指针
{ student *head;
student *p1,*p2;
n=0;
p1=p2=new student; //开辟新单元,用P1 P2指向
cout〈<”按顺序输入学生的学号,姓名,地址,电话,班级,输入0 * * * *就停止录入(*为任意字符)” <<endl;
cin〉〉p1—〉num>>p1—>name〉〉p1-〉dizhi>〉p1—>dihua〉>p1->banji;
head=NULL;
while(p1->num!=0) //循环输入的作用
{n=n+1;
if(n==1)head=p1;
else p2-〉next=p1;
p2=p1;
p1=new student; //开辟新单元,
cin>>p1-〉num〉>p1—>name〉>p1—〉dizhi〉>p1->dihua〉>p1—〉banji; //输入数据
}
p2—>next=NULL; //p2指向最后
return(head);
}
///////////////////////////////////////////作为二进制储存和读出二进制文件
void write_read()
{student *p;
student stud[100];
n=0;
for(p=head;p!=NULL;p=p—〉next)
{ stud[n]。dizhi=p-〉dizhi;
stud[n].dihua=p—〉dihua;
stud[n]。banji=p-〉banji;
stud[n].name=p->name;
stud[n]。num=p-〉num;
n++;
}
ofstream outfile(”student.dat”,ios::binary);
if(!outfile)
{ cerr〈〈”open error。.。."〈〈endl;
abort();
}
for(int i=0;i〈n;i++)
outfile。write((char*)&stud[i],sizeof(stud[i]));
outfile。close();
ifstream infile("student。dat”,ios::binary);
if(!infile)
{ cerr〈<"open error..。。”〈〈endl;
abort();
}
for(int j=0;j<n;j++)
infile.read((char*)&stud[i],sizeof(stud[i]));
infile.close();
for(int k=0;k<n;k++)
{ cout<<"姓名: ”<<stud[k].name〈<endl;
cout<〈"学号: "〈<stud[k]。num<〈endl;
cout〈〈"地址 : "〈<stud[k]。dizhi〈<endl;
cout〈<"电话: ”<<stud[k]。dihua<〈endl;
cout〈〈”班级: "<〈stud[k].banji〈〈endl〈<endl〈<endl;
}
}
///////////////////////////////////////////////////////////////图形的输出
void exit()
{
cout<<” ┃ \n”
” ┃ \n"
" ┏━━━━┻━━━━┓ \n”
" ┃ ┃ \n"
" ┏━━━━┻━━━━━━━━━┻━━━━┓\n”
" ┃ ^^^^^谢谢使用^^^^^^^ ┃\n"
" ┃ ┃\n”
" ┃ 偷得浮生半日闲 ┃\n”
” ┃ ┃\n"
” ┃ ┃\n”
” ┗━━━━━━━━━━━━━━━━━━━┛\n”;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void print(student *head) //输出链表
{student *p;
cout〈<" 学生信息表 "<〈endl;
p=head;
if(head!=NULL)
cout<<” ”〈<endl;
cout〈<" 学号 姓名 地址 电话 班级 "〈<endl;
cout〈<” "〈〈endl;
if(head!=NULL)
do
{ cout〈〈setw(12)<〈p—〉num
〈〈setw(14)<〈p-〉name
<〈setw(10)<〈p—>dizhi
〈<setw(10)〈〈p-〉dihua
<〈setw(10)<〈p-〉banji
〈〈endl;
cout〈<” "〈〈endl;
p=p—〉next;
}while(p!=NULL);
}
////////////////////////////////////////////////////////////////////////删除链表
student *del(student *head,long num)
{student *p1,*p2;
if(head==NULL)
{cout〈<"此为空表"<〈endl;return(head);}
p1=head;
while(num!=p1->num && p1—>next!=NULL)
{p2=p1;p1=p1->next;}
if(num==p1-〉num)
{if(p1==head)head=p1-〉next;
else p2->next=p1->next;
cout〈〈”删除”〈<num<<endl;
n=n-1;}
else
cout<〈"没有该同学数据!"<〈num〈<endl;
return(head);
cout<〈endl<<endl;
}
///////////////////////////////////////////////////////////////////////////// 链表的舔加
student *insert(student *head,student *stud)
{student *p0,*p1,*p2;
p1=head; //P1指向第一个节点
p0=stud; //要插入的节点
if(head==NULL)
{head=p0;p0—>next=NULL;} //是P0指向节点作为头
else
{while((p0->num〉p1—〉num)&&(p1—>next!=NULL))
{p2=p1; p1=p1—>next;}
if(p0—>num〈=p1->num)
{if(head==p1)head=p0;
else
p2-〉next=p0;
p0—>next=p1;
}
else
{p1—>next=p0;p0—〉next=NULL;} //差 如节点之后
}
n=n+1; //节点+1
return(head);
cout<〈endl〈〈endl;
}
///////////////////////////////////////////////////////////////////////查找学生
void find()
{student *p;
int a;
cout<<”请输入想要找的学生的学号”〈<endl;
cin>>a;
for(p=head;p!=NULL;p=p—>next)
{ if(a==p—〉num)
{ cout〈〈" ”〈<endl;
cout〈<” 学号 姓名 地址 地话 班级 "〈<endl;
cout〈<” "<<endl;
cout〈<setw(12)<〈p—〉num
〈<setw(14)〈<p—〉name
<<setw(10)〈<p->dizhi
〈<setw(10)〈<p->dihua
<<setw(10)〈〈p->banji
<〈endl;
cout<<” ”〈<endl;
break;
}
else
continue;
}
}
///////////////////////////////////////////////////////////////////////////////删除和添加的链表的多次执行的实现
void list()
{ int a;
long del_num;
student *creat(void);//输入学生数据
student *cunt_put(student *);
student *del(student *,long);
student *insert(student *,student *);
void print(student *);
cout〈<" "<〈endl〈〈endl<〈endl;
head=creat();
print(head); //输出全部结点
cout<〈”如果要删除学生资料请输入1,如果需要添加请输入2"<〈endl;
cin〉〉a;
if(a==1)
{ cout〈〈"输入要删除学号"<<endl;
cin〉>del_num;
while(del_num!=0 )
{ head=del(head,del_num);
print(head); //调用输出函数
cout〈〈”是否继续删除:是(输入学号),不是(输入0)"〈<endl;
cin>〉del_num;
}
}
cout<<”,往下执行就按任意数字"<<endl;
cin>>a;
if (a==2) //操作选择
{ cout<<"输入要添加的就输入学号"<〈endl;
stu=new student; //开创新的空间
cin>>stu-〉num>>stu->name>〉stu->dizhi〉>stu-〉dihua〉>stu—〉banji; //输入数据
while(stu—〉num!=0) //可以循环删除,删除多个
{ head=insert(head,stu); //调用添加函数
print(head); //调用输出函数
cout<<"如果需要添加请输入学号,无需添加输入0 * * * *就停止录入(*为任意字符)”<〈endl;
stu=new student;
cin〉〉stu-〉num>>stu—〉name〉〉stu-〉dizhi〉>stu->dihua〉〉stu->banji;
}
}
cout〈〈endl〈〈endl;
}
/////////////////////////////////////////////////////////////////////////调用各个函数
void swich()
{ int a;
list();//删除和添加调用
cout〈<”退出软件输入9 直接查看学生资料输入10”<<endl;
cin〉>a;
if(a==9)
exit();
if(a=10)
{ for(int u=0;;u++)
{
cout〈〈” 0按学号查某个学生的数据 1查看成绩表 3退出系统且读取二进制文件 "〈〈endl;
int t;
cin〉>t;
if(t==1)
{ print(head);continue;
}
if(t==3)
{ exit();
break;
}
if(t==0)
{ find();continue;
}
}
}
cout〈<”读取二进制文件如下"<<endl<〈endl<<endl;
write_read();
}
////////////////////////////////////////////////////////密码实现
void mima()
{ int n,m=1988825;
for(int j=0;;j++)
{
cout<〈”这是我的地盘,请输入密码:"〈〈endl;
cin>〉n;
if(m==n)
{ cout<<”恭喜你猜对了!!!”<〈endl;
swich();
break;
}
else
{
cout〈<”内有怪物,生人勿进!”<<endl;
continue;
}
}
}
//////////////////////////////////////////////////主函数
int main()
{ mima();
return 0;
}
五、测试文档
1、集成测试
集成测试将测试每一个部件之间的工作是否正常。在这个阶段,我们假设所有的单元已通过开发人员个人在单元测试阶段测试全部通过,没有任何错误。
集成测试包括以下内容:
连续集成测试
数据库测试
数据整合测试
2、功能测试
功能测试环境
操作系统:windows 98
内存:128M
网络环境:校园网
本功能测试共分为:
系统功能测试
测试是否可以正常添加用户和修改密码,系统正常退出
测试是否可以正常对班级进行管理,学生的单个或成批添加,删除以及新生信息的导入和学生信息备份
测试成绩管理中是否可以进行分数录入,汇总及排名和成绩备份等操作
测试课程信息模块中针对课程管理,老师和课程的关系之间操作是否正常
测试是否可以正常查询学生,老师和成绩
3、 链接测试
这一部分将测试系统各模块之间的超链接跳转是否正确
4、 文档测试
本章主要内容为:
测试文档是否包括全部内容
测试软件功能描述与其他功能有没有冲突
查看软件功能描述是否是原来系统分析和需求
查看文档内容在特定的情况和进度下,以现有人力,物力和资源能否实现
5、负载测试
这一部分将测试正常情况下系统性能和用户数目之间的关系
本章主要内容为:
查看在多个用户同时使用本系统时是否正常
6、极限测试
这一部分将测试所有极端的情况,如速度非常快的情况下和速度非常慢的情况下,以及所有其它的极端情况。
本章主要内容为:
网络资源极限测试
综合极限测试本文为互联网收集,请勿用作商业用途文档为个人收集整理,来源于网络
六、其它
简单的说明学籍管理系统数据库各数据表的结构如下。
(1)数据库名:student。
(2)student表(学生信息表)如表1-1所示。
表1—1 student表(学生信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
sno
char
8
NOT NULL
是
学生学号
sname
char
8
NOT NULL
学生姓名
sex
char
2
NULL
学生性别
native
char
20
NULL
籍贯
birthday
smalldate
4
NULL
学生出生日期
dno
char
6
NULL
学生所在院系编号(外键)
spno
char
8
NULL
专业代码(外键)
classno
char
4
NULL
班级号
entime
smalldate
4
NULL
学生入校时间
home
varchar
40
NULL
学生家庭住址
tel
varchar
40
NULL
学生联系电话
(3)course表(课程信息表)如表1—2所示。
表1-2 course表(课程信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
cno
char
10
NOT NULL
是
课程编号
spno
char
8
NULL
专业代码(外键)
cname
char
20
NOT NULL
课程名称
ctno
tinyint
1
NULL
课程类型编号(外键)
experiment
tinyint
1
NULL
实验时数
lecture
tinyint
1
NULL
授课学时
semester
tinyint
1
NULL
开课学期
credit
tinyint
1
NULL
课程学分
(4)student_course表(学生选课成绩表)如表1—3所示。
表1-3 student_course表(学生选课成绩表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
sno
char
8
NOT NULL
是
学生学号
tcid
smallint
2
NOT NULL
是
上课编号
score
tinyint
1
NULL
学生成绩
注意:上课编号tcid是指teacher_course(教师上课课表)中的tcid,而不是course表(课程信息表)中的课程编号cno。
(5)teacher表(教师信息表)如表1-4所示。
表1—4 teacher表(教师信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
tno
char
8
NOT NULL
是
教师编号
tname
char
8
NOT NULL
教师姓名
sex
char
2
NULL
教师性别
birthday
smalldate
4
NULL
教师出生日期
dno
char
6
NULL
教师所在院系编号(外键)
pno
tinyint
1
NULL
教师职务或职称编号
home
varchar
40
NULL
教师家庭住址
zipcode
char
6
NULL
邮政编码
tel
varchar
40
NULL
联系电话
email
varchar
40
NULL
电子邮件
(6)department表(院系信息表)如表1-5所示。
表1—5 department表(院系信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
dno
char
6
NOT NULL
是
院系编号
dname
char
20
NOT NULL
院系名称
header
char
8
NULL
院系负责人
addr
varchar
40
NULL
院系办公地址
del
varchar
40
NULL
联系电话
(7)user表(用户信息表)如表1-6所示。
表1-6 user表(用户信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
usrno
char
8
NOT NULL
是
用户名
usrpwd
char
8
NULL
密码
usrrights
int
4
NOT NULL
操作权限
(8)speciality表(专业信息表)如表1-7所示.
表1-7 speciality表(专业信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
spno
char
8
NOT NULL
是
专业代码
dno
char
6
NOT NULL
院系编号(外键)
spname
char
20
NOT NULL
专业名称
(9)class表(班级信息表)如表1—8所示。
表1—8 class表(班级信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
classno
char
4
NOT NULL
是
班级号
spno
char
8
NOT NULL
是
专业代码
header
char
8
NULL
班负责人
(10)teacher_course表(教师上课课表)如表1-9所示。
表1-9 teacher_course表(教师上课课表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
tcid
smallint
2
NOT NULL
是
上课编号
tno
char
8
NULL
教师编号(外键)
spno
char
8
NULL
专业代码(外键)
classno
char
4
NULL
班级号
cno
char
10
NOT NULL
课程编号(外键)
semester
char
6
NULL
学期
schoolyear
char
10
NULL
学年
classtime
varchar
40
NULL
上课时间
classroom
varchar
40
NULL
上课地点
weektime
tinyint
1
NULL
每周课时数
(11)change表(学籍变更信息表)如表1—10所示。
表1—10 change表(学籍变更信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
changeid
smallint
2
NOT NULL
是
记录号
sno
char
8
NOT NULL
学生学号(外键)
change
char
1
NOT NULL
变更代码(外键)
rectime
datetime
8
NOT NULL
记录时间
description
varchar
100
NULL
描述
(12)reward表(奖励记录信息表)如表1-11所示。
表1-11 reward表(奖励记录信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
rewardid
smallint
2
NOT NULL
是
记录号
sno
char
8
NOT NULL
学生学号(外键)
续表
字段名称
类 型
宽 度
允许空值
主 键
说 明
levels
char
1
NOT NULL
级别代码(外键)
rectime
datetime
8
NOT NULL
记录时间
description
varchar
100
NULL
描述
(13)punishment表(处罚记录信息表)如表1-12所示。
表1-12 punishment表(处罚记录信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
punishmentid
smallint
2
NOT NULL
是
记录号
sno
char
8
NOT NULL
学生学号(外键)
levels
char
1
NOT NULL
级别代码(外键)
rectime
datetime
8
NOT NULL
记录时间
enable
char
1
NOT NULL
是否生效(T-是 F-否)
description
varchar
100
NULL
描述
(14)change_code表(学籍变更信息表)如表1-13所示。
表1—13 change_code表(学籍变更信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
code
char
1
NOT NULL
是
变更代码
description
varchar
100
NULL
描述
(15)reward_levels表(奖励记录信息表)如表1-14所示.
表1—14 reward_levels表(奖励记录信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
code
char
1
NOT NULL
是
代码
description
varchar
100
NULL
描述
(16)punishment_levels表(处罚记录信息表)如表1—15所示.
表1-15 punishment_levels表(处罚记录信息表)
字段名称
类 型
宽 度
允许空值
主 键
说 明
code
char
1
NOT NU
展开阅读全文