学生选课系统.docx
《学生选课系统.docx》由会员分享,可在线阅读,更多相关《学生选课系统.docx(24页珍藏版)》请在冰豆网上搜索。
![学生选课系统.docx](https://file1.bdocx.com/fileroot1/2023-1/31/f640dc90-993d-4285-806a-09f510c9c6ab/f640dc90-993d-4285-806a-09f510c9c6ab1.gif)
学生选课系统
河北xxx大学
数据库课程设计说明书
设计题目:
学生选课系统
姓名:
Xx
学号:
201114430118
专业:
地理信息系统
班级:
1班
指导教师:
xxx
xxx
xxxx
矿业工程学院
2014年6月7日
目 录
1概述1
1.1选题背景1
1.2课题目的1
1.3选课系统简介2
2需求分析2
3概念设2
3.1选课系统E-R图分析3
3.2数据库表结构设计6
4逻辑设计7
5系统开发流程8
6系统使用说明及主要代码9
6.1主要功能及截图9
6.1.1登录界面及主要代码9
6.1.2修改密码界面及主要代码10
6.1.3课程按条件查询12
6.1.4学生选课及删除13
6.1.5课程推荐14
6.1.6教师浏览信息15
6.1.7教师修改课程16
6.1.8备份还原数据16
6.2创新功能及难点17
6.2主要页面及截图17
6.2.1功能突破------分行统计插入17
6.2.2功能突破------无重复选课18
6.2.3创新突破------选课推荐20
6.2.4创新突破------数据库备份22
7课程设计体会及心得22
参考文献23
概述
随着科技的发展,校园网技术迅速发展。
对于高校而言,建立校园网的作用一般有以下两方面:
一是外部网络连接,实现与网络连接,提供本校的信息服务,融入世界信息潮流;了解外面世界,加强学术交流与合作。
另一个就是建立本校的管理信息系统,实现管理的科学化、现代化;利用现代化的手段提高教学质量和管理水平。
选题背景
选课系统属于教学信息管理系统一部分,是学生课程安排的常用系统。
随着高等教育的发展和社会需要,各高校尽多地开设各类课程,以拓宽学生的知识面,培养学生的个性和创造能力,提高学生的综合素质。
传统的人工选课数据是经过多级手工处理后上报教务处的,效率较低,而选课时烦琐的工作也给教务管理部门带来了很大的工作量,因此容易出错。
另一方面,学生对课程的迟选、补选、改选操作非常麻烦,同时教学管理部门无法掌握选课人数的变化和学生分布的情况,难以进行动态调整。
传统的选课方式已经不适应现代教务教学的改革和发展,迫切需要一种新的选课方式。
为使教学管理工作的科学化、规范化,就必须采用计算机辅助管理。
计算机管理使选课更加高效准确,省去了大量的人力劳动,提高了教学管理的信息化水平。
本系统面向全校师生和管理人员,是高校日常教学、教务管理的应用软件。
该系统的目的主要是实现学生选择选修课的公平性和方便性,让他们可以选择课程,删除选课,查询选修课程信息;对于任课教师,可以提交、修改及确认所任选课成绩;对于教学管理部门,能够实现学生数据的导入、选修课表的录入、选课系统的合理配置,如每学期每人选课最大数目、每门课程的最大容量、选课时间及避开上课地点与时间的冲突等。
但是本人的知识和能力有限,时间有限,所做的系统只实现了最基本的选课系统的功能,我会在以后的学习过程中继续完善该系统。
课题目的
通过数对学生选课流程和数据库开发过程的研究,采用SQLServer数据库技术,对学生选课系统进行开发,以期该系统可以实现广泛应用,达到便于学生选课,便于课程分配和熟悉大型数据库管理系统的结构与组成,熟悉数据库应用系统的设计方法和开发过程得目的。
选课系统简介
本系统面向全校师生,是高校日常教学、教务管理的应用软件。
该系统的目的主要是实现学生选择选修课的公平性和方便性,让他们可以选择课程,删除选课,查询选修课程信息;对于教师,可以修改、删除、添加需要选课的课程信息,查看学生的选课情况,以及修改密码等。
需求分析
作为大学生的我们日常上课所学课程总是伴随着课程的选取,通过日常选课时对选课信息的研究和详细调查,确定开发学生选课系统。
经过对各个专业的选课状况的观察、分析,并结合实际情况,确定基于MicrosoftSQLServer2008数据库软件建立基于数据库的选课系统。
分析课程信息以及师生资源信息后,针对系统需求,总结如下:
登录用户分为教师和学生,即学生选取课程,教师教授课程;
学生与课程的关系式多对多的关系,即一个学生选取多门课程,同时一门课程有多位学生选取;
教师与课程的关系式一对多的关系,即一位教师教授多门类课程;
基于此,可以建立表关系如下:
课程表:
课程号(主键),课程名,课时,教师编号,学分,选课记录;
学生表:
学号(主键),姓名,性别,入学时间,所属院系,密码;
教师表:
教师编号(主键),姓名,性别,所属院系,密码;
选课表:
选课记录(主键),课程号,学号;
概念设计
数据库的设计是指对于一个给定的应用环境,构造最有效的数据库模式,建立数据及应用系统,实质能够有效地存储数据,满足用户的需求,数据库设计是在数据库管理系统支持下进行的。
选课系统E-R图分析
在分析用户需求的基础上,建立以反映用户实际环境和需求的数据库概念模型------E-R图。
综合分析系统主要功能,可以玻璃如下实体:
教师,学生,课程,成绩。
一次,建立以下实体关系图。
图3-1-1教师实体E-R图
图3-1-2课程实体E-R图
图3-1-3学生实体E-R图
图3-1-4选课实体E-R图
p
1
m
根据全局数据概念模式,将局部的E-R图根据他们之间的练习综合成一个完整的全局E-R图:
n
1
n
图3-1-5选课系统全局E-R图
数据库表结构设计
将逻辑结构设计的关系模型转换为物理数据库,即具体的RDBMS中的支持的关系数据模型——表。
在SQLServer2008数据库管理系统中创建如下的表3-2-1~表3-2-4,以及相关的数据类型:
教师表
字段
类型
空值(NULL)
主键
教师编号
INT
NO
YES
姓名
CHAR
YES
性别
CHAR
YES
所属院系
CHAR
YES
表3-2-1
学生表
字段
类型
空值
主键
学号
INT
NO
YES
姓名
CHAR
YES
性别
CHAR
YES
入学日期
DATATIME
YES
密码
INT
YES
表3-2-2
课程表
字段
类型
空值
主键
课程号
INT
NO
YES
课程名
CHAR
YES
教师编号
INT
YES
课时
INT
YES
学分
INT
YES
选课人数
INT
YES
表3-2-3
选课表
字段
类型
空值
主键
选课记录
INT
NO
YES
课程号
INT
YES
学号
INT
YES
表3-2-4
逻辑设计
用户分为学生与教师两种,根据不同的用户身份登录可以实现不同的用户功能,其行为设计如下所示:
图4选课系统行为设计
系统开发流程
图5选课系统开发流程
系统使用说明及主要代码
该系统实现了现实生活中对选课系统的基本要求,可以方便用户实现增加、删除、修改、查看查课程的基本需求。
同时,该系统独具匠心的为学生用户添加课程推荐功能,使得学生用户了解热门课程和应选课程以方便选取课程,对于教师用户对课程的修改操作,学生端能够实时得知新添加课程,使得选课无遗漏。
对教师用户,该系统提供实时将学生选课人数统计入库,可以使得教师及时了解选课动态,教师用户还可以备份数据库并还原,以保证数据库的信息不回遗漏。
主要功能及截图
登陆界面及主要代码
图6-1登录界面
if(radstudent.Checked)
{
stringstr="select*from学生表where学号="+txtcode.Text.ToString()+"and密码="+txtpassword.Text.ToString()+"";
SqlDataReadersdr=sql.datareader(str);
boolifconn=sdr.Read();
if(ifconn)
{
SQL.Login_user=txtcode.Text;
SQL.Login_pwd=txtpassword.Text;
this.Hide();
frminformfinform=newfrminform();
finform.Show();
}
elseif(radteacher.Checked)
{
stringstr="select*from教师表where教师编号="+txtcode.Text.ToString()+"and密码="+txtpassword.Text.ToString()+"";
SqlDataReadersdr=sql.datareader(str);
boolifconn=sdr.Read();
if(ifconn)
{
SQL.Login_user=txtcode.Text;
SQL.Login_pwd=txtpassword.Text;
this.Hide();
frmteacherfteacher=newfrmteacher();
fteacher.Show();
}
修改密码界面及主要代码
图6-2修改密码
if(s=="学生表")
{
stringsqlstu="Update学生表Set密码='"+txXmm.Text+"'Where密码='"+txCsmm.Text+"'and学号='"+SQL.Login_user+"'";
sql.cmd=newSqlCommand(sqlstu,sql.conn);
sql.cmd.ExecuteNonQuery();
frmstudentfst=newfrmstudent("学生表");
fst.Show();
this.Hide();
}
else
{
stringsqltea="Update教师表Set密码='"+txXmm.Text+"'Where密码='"+txCsmm.Text+"'and教师编号='"+SQL.Login_user+"'";
//SqlDataAdaptersada=newSqlDataAdapter(sqltea,sql.conn);
sql.cmd=newSqlCommand(sqltea,sql.conn);
sql.cmd.ExecuteNonQuery();
frmteacherftc=newfrmteacher();
ftc.Show();
this.Hide();
}
intMyCount=sql.cmd.ExecuteNonQuery();
if(MyCount==0)
{
MessageBox.Show("在数据库中修改用户密码操作成功!
","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else
{
MessageBox.Show("在数据库中修改用户密码操作失败!
","信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
课程按条件查询
图6-3按条件浏览课程
stringsqljb="select课程表.*from课程表,教师表where课程表.教师编号=教师表.教师编号and姓名='"+tx1.Text+"'";
cm.CommandText=sqljb;
SqlDataReaderr=cm.ExecuteReader();
if(!
r.HasRows)
{
MessageBox.Show("授课教师不存在,请重新输入!
");tx1.Focus();
}
else
{
r.Close();
SqlDataAdapterda=newSqlDataAdapter(sqljb,sql.conn);
DataSetds=newDataSet();
da.Fill(ds);
DataTableab=newDataTable();
ab=ds.Tables[0];
dataGridView1.DataSource=ab;
}
学生选课及删除
选课
图6-4选课界面
sql.getconn();
MessageBox.Show("确定要选择此课程吗?
");
stringsqlxk="insertinto选课表(课程号,学号)values('"+(string)comboBox1.SelectedItem+"','"+SQL.Login_user+"');";
sql.cmd=newSqlCommand(sqlxk,sql.conn);
sql.cmd.ExecuteNonQuery();
删除课程
stringcode="delete选课表where课程号='"+dtxtccode.Text+"'and学号='"+SQL.Login_user+"'";
sql.cmd=newSqlCommand(code,sql.conn);
sql.cmd.ExecuteNonQuery();
MessageBox.Show("该课程已成功删除");
dtxtccode.Text="";
课程推荐
图6-5课程推荐
最受欢迎课程
stringsqlct="SELECTTOP3WITHTIES*FROM课程表ORDERBY选课人数desc";
SqlDataAdaptersda=newSqlDataAdapter(sqlct,sql.conn);
DataSetdt=newDataSet();
sda.Fill(dt);
dataGridView4.DataSource=dt.Tables[0].DefaultView;
本专业推荐课程
stringdept="select所在系from学生表where学号='"+SQL.Login_user+"'";
stringszx;
SqlDataAdapterda1=newSqlDataAdapter(dept,sql.conn);
DataTabledt1=newDataTable();
da1.Fill(dt1);
szx=Convert.ToString(dt1.Rows[0]["所在系"]);
stringsqljs="select课程表.课程号,课程名from课程表,教师表where课程表.教师编号=教师表.教师编号and所属院系='"+szx+"'";
SqlDataAdaptersda=newSqlDataAdapter(sqljs,sql.conn);
DataSetdt=newDataSet();
sda.Fill(dt);
dataGridView5.DataSource=dt.Tables[0].DefaultView;
教师浏览信息
图6-6教师浏览信息
stringstrxk="select学生表.学号,课程表.课程号,课程名,姓名,所在系from学生表,选课表,课程表where学生表.学号=选课表.学号and选课表.课程号=课程表.课程号";
sql.getconn();
SqlDataAdaptersada=newSqlDataAdapter(strxk,sql.conn);
DataSett=newDataSet();
sada.Fill(t);
this.dataGridView1.DataSource=t.Tables[0].DefaultView;
教师修改课程
图6-7教师修改课程信息
tringstrinsert="insertinto课程表(课程号,课程名,教师编号,课时,学分)values('"+txtccode.Text.Trim()+"','"+txtcn.Text.Trim()+"','"+txttchcode.Text.Trim()+"','"+txtctm.Text.Trim()+"','"+txtgrade.Text.Trim()+"');";
sql.getconn();
sql.cmd=newSqlCommand(strinsert,sql.conn);
sql.cmd.ExecuteNonQuery();
备份还原数据
图6-8备份还原
备份数据
stringmyfilepath=txtfiledialog.Text.ToString()+"\\"+txtfilename.Text.ToString()+".bak";
if(!
File.Exists(myfilepath))
{
sql.getconn();
stringcmsql=cmbsql.Text;
stringCommandText="BACKUPDATABASE"+cmsql+"TODISK='"+myfilepath+"'";
sql.cmd=newSqlCommand(CommandText,sql.conn);
sql.cmd.ExecuteNonQuery();
MessageBox.Show("数据库备份成功!
","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
MessageBox.Show(ex.Message);
}
还原数据
stringpath=txthback.Text.Trim();
stringdbname=cmbselect.Text.Trim();
stringsqlstr2="usemasterrestoredatabase"+dbname+"fromdisk='"+path+"'withreplace";
stringsingle="alterdatabase"+dbname+"setsingle_userwithrollbackimmediate"+sqlstr2;
sql.cmd=newSqlCommand(single,sql.conn);
sql.cmd.ExecuteNonQuery();
MessageBox.Show("还原数据成功");
创新功能以及难点
功能突破------分行统计插入
stringkcc="select课程号from课程表";
inta;
stringca="selectcount(*)from课程表";
sql.cmd=newSqlCommand(ca,sql.conn);
a=Convert.ToInt16(sql.cmd.ExecuteScalar());
SqlDataAdapterda=newSqlDataAdapter(kcc,sql.conn);
DataTabledt=newDataTable();
da.Fill(dt);
string[]hh=newstring[a];
string[]t=newstring[a];
for(inti=0;i{
hh[i]=Convert.ToString(dt.Rows[i]["课程号"]);
stringtongji="selectCOUNT(选课表.课程号)from选课表,课程表where选课表.课程号=课程表.课程号and选课表.课程号='"+hh[i]+"'";
sql.cmd=newSqlCommand(tongji,sql.conn);
t[i]=sql.cmd.ExecuteScalar().ToString();
stringud="update课程表set选课人数='"+t[i]+"'where课程号='"+hh[i]+"'";
SqlDataAdaptersada=newSqlDataAdapter(ud,sql.conn);
DataSettt=newDataSet();
sada.Fill(tt);
}
此处实现了根基课程表的课程号统计选课表中选择该课程的人数,再将选课人数添加到课程表中对应课程号选课人数列中。
其中,最初需要统计课程表行数以限制遍历课程表,再通过循环实现
功能突破------无重复选课
try
{
inta;
sql.getconn();
stringkcc="select课程号from选课表where学号='"+SQL.Login_user+"'";
stringca="selectcount(*)from选课表where学号='"+SQL.Login_user+"'";
sql.cmd=newSqlCommand(ca,sql.conn);
a=Convert.ToInt16(sql.cmd.ExecuteScalar());
SqlDataAdapterda=newSqlDataAdapter(kcc,sql.conn);
DataTabledt=newDataTable();
da.Fill(dt);
stringx=(string)comboBox1.SelectedItem;
string[]hh=newstring[a];
if(a==0)
{
sql.getconn();
MessageBox.Show("确定要选择此课程吗?
");
stringsqlxk="insertinto选课表(课程号,学号)values('"+(string)comboBox1.SelectedItem+"','"+SQL.Login_user+"');";
sql.cmd=newSqlCommand(sqlxk,sql.conn);
sql.cmd.ExecuteNonQuery();
sql.closeconn();
}
else
{
for(inti=0;i{
hh[i]=Convert.ToString(dt.Rows[i]["课程号"]);
if(x==hh[i])
{
Mess