《数据库学生成绩管理系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《数据库学生成绩管理系统课程设计报告.doc(27页珍藏版)》请在装配图网上搜索。
洛 阳 理 工 学 院
课 程 设 计 报 告
课程名称 数据库课程设计
设计题目 学生成绩查询系统
专 业 计算机科学与技术
班 级 B100506
学 号 B10050634
姓 名 孙帅杰
完成日期 2013年1月6号
课 程 设 计 任 务 书
设计题目: 学生成绩管理系统
设计内容与要求:
设计内容:
教务员可以输入学生、教师、班级、课程信息,一个班级只属于一个专业,一个学生只属于一个班级。教务员负责输入每个专业、每个班级需要学习哪些课程,指定课程的任课教师。一个教师可以教授多个班的多门课程。
教师可以查看学习该课程的学生名单。课程结束后,教师可以录入课程成绩。
课程分两类,必修课和选修课。学生可以选修课程,每学期几门。学生可以查看自己各门课程的成绩。学生还可以进行评教,给老师打分。
系统管理员可以输入教室信息,并结合班级、课程、教室信息实现自动排课。
设计要求:
要求完成需求分析,写出功能需求和数据需求描述;
在需求分析的基础上完成数据库的概念结构设计、逻辑结构设计、物理结构
设计;
用C#语言,完成管理系统的部分程序模块的界面设计。
指导教师: 陶 荣
2012年12月28日
课 程 设 计 评 语
成绩:
指导教师:
年 月 日
目 录
1.绪论 1
1.1 设计目的 1
1.2 开发工具选择 1
1.3 开发环境 1
1.4 本报告的主要内容 1
2.需求分析 1
2.1 系统需求简介 1
3.总体设计 2
3.1 设计概述 2
3.2 系统总体结构及功能模块划分 2
3.3 系统数据库概念结构设计 4
3.4 逻辑结构设计 7
4.主程序设计 10
4.1 登录系统 10
4.2 学生信息查询、保存、及修改 12
4.3 用户管理 18
5.设计总结与心得体会 22
6.参考文献 23
1.绪论
1.1 设计目的
本课程设计的目的是使学生能熟练掌握简单的简单Windows窗体应用程序的设计和ADO.net的应用,希望通过本次课程设计锻炼学生使用C#语言解决实际问题的能力。
1.2 开发工具选择
本系统后台数据库采用Microsoft SQL Server 数据库,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;前台采用Microsoft 公司的Visual Studio 2010作为主要开发工具,可与SQL Server 2008数据库无缝链接。
1.3 开发环境
系统开发平台:Microsoft Visual Studio2010
系统开发语言:C#
数据库管理软件:SQL Server 2008
1.4 本报告的主要内容
本报告详细的介绍了学生成绩管理系统的开发过程,主要涉及到的工作如下:系统的需求分析、系统的总体设计、系统的概念设计、系统各模块的详细设计、系统运行与测试。
2.需求分析
2.1系统需求简介
(1)系统目标
1.根据查询条件实现学生信息的查询
2.学生选课信息查询、成绩信息的查询
3.学生信息、课程信息、成绩信息的增加、删除、修改
4.对基本信息完成增加、删除、修改时,需注意表与表之间的关联
(2)功能需求分析
本系统的功能需求分析如下:
1.学生信息查询:学生可以根据学号、姓名、专业进行查询.
2.学生信息管理:主要是用于学生信息更新、插入、删除;
3.学生成绩录入:用于学生成绩管理,录入学生成绩,也可以更新;
(3)性能需求分析
1.登录、用户界面需求:简洁、易懂、易用、友好的用户界面。
2.安全保密性需求:只有凭借用户名和密码登陆系统,才能进行信息的管理等。
3.总体设计
3.1设计概述
根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能。
3.2系统总体结构及功能模块划分
经过对系统的需求分析,学生信息管理系统主要划分为三个部分:学生信息查询,学生信息管理,学生成绩录入三个功能模块。系统的总体结构如图3-1所示。
学
生
成绩录入
学
生
信
息
管理
学生信息管理系统
学
生
信
息
查询
图3-1 系统的总体结构示意图
(1)学生信息查询模块
学生信息查询
学号查询
姓名查询
学生信息查询:学生可以根据本人学号、姓名进行信息查询。学生信息查询模块结构如图3-2所示。
图3-2 学生信息管理模块结构示意图
(2)学生信息管理模块
学生信息管理:主要是用于学生信息更新、插入、删除。学生管理模块结构如图3-3所示。
基本信息录入
成绩录入
基本信息更新
成绩更新
学
生
信息删除
学
生
信
息
录入
学生信息管理
学生信息更新
图3-3 学生信息管理模块结构示意图
3.3系统数据库概念结构设计
根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。
(1)系统E-R图
系统E-R图可以将各个实体之间的关系显示出来,将各个实体间的属性依赖表示明白。
教师与课程之间的关系:
教师与课程之间是m: n的关系,即一个老师能教多门课程,一门课程可以由多个老师讲授。
图3-4教师与课程实体图
学生与教师之间的关系:
学生与教师之间是n:m的关系,即一名老师可以教授多个学生,而一个学生可以由多个教师来教。
图3-5教师与学生的实体图
学生与课程之间的关系:
学生与课程之间是n:m的关系,即一个学生可以选修多门课程,一门课程可以被多个学生选学。
图3-6学生与课程的实体图
学生与成绩之间的关系是n:m的关系:
图3-7学生与成绩的实体图
管理员与用户的关系:
图3-8管理员与用户的实体图
图3-9学生成绩管理全局E-R 图
3.4 逻辑结构设计
(1)将E-R图转化为关系模型为:
管理员(用户名,密码)
学生(学号,姓名,性别,系名,专业,出生日期)
教师(教师号,姓名,性别,院系,联系电话)
课程(课程号,课程名,学分,教师)
成绩(学号,课程号,姓名,课程名,成绩,授课老师)
管理(教师号,学号,密码)
教授(教师号,课程号,课程名)
选修(学号,课程号,成绩)
讲授(教师号,课程号)
(2)将以上数据关系模型进行优化处理得关系模型:
学生信息(学号,姓名,性别,系名,专业,出生日期)
教师信息(教师号,姓名,性别,院系,联系电话)
管理员信息(用户名,密码,用户级别)
课程表(课程号,课程名,学分,教师)
成绩表(学号、课程号、成绩)
(3)物理模型设计
学生信息表具体有学号,姓名,性别,系名,专业,出生日期,如表3-1所示
表3-1学生信息表
字段
类型
长度
约束
索引
学号
字符型
8
主键约束
有
姓名
字符型
10
性别
字符型
2
系名
字符型
20
专业
数值型
20
出生日期
字符型
8
教师信息具体有教师号,姓名,性别,院系,专业,联系电话,如表3-2所示
表3-2教师信息表
字段
类型
长度
约束
索引
教师号
字符型
8
主键约束
有
姓名
字符型
10
性别
字符型
2
院系
字符型
20
专业
数值型
20
联系电话
字符型
11
管理员信息具体有用户名、密码、用户级别,如表3-3所示
字段
类型
长度
备注
用户名
字符型
8
学号、教师号
密码
字符型
6
用户级别
字符型
10
一般操作员/系统管理员
表3-3管理员信息表
课程表信息具体有课程号,课程名,学分,教师,如表3-4所示
表3-4课程表信息
字段
类型
长度
约束
索引
课程号
字符型
10
主键约束
有
课程名
字符型
30
学分
字符型
2
教师
字符型
10
成绩表具体有学号,课程号,成绩,如表3-5所示
表3-5成绩表
字段
类型
长度
约束
索引
学号
字符型
8
主键
有
课程号
字符型
10
主键
有
成绩
数值型
5
4.主程序设计
4.1 登录系统
namespace CourseDesign
{
public partial class LoginForm : Form
{
#region 属性
///
/// 是否登录
///
private bool _isLogin = false;
public bool IsLogin
{
get { return _isLogin; }
set { _isLogin = value; }
}
//用于记录当前登录用户名;
private static string _currentUser;
public static string CurrentUser
{
get { return _currentUser; }
}
//用于记录当前登录用户密码;
private static string _currentPsw;
public static string CurrentPsw
{
get { return _currentPsw; }
}
#endregion
public LoginForm()
{
InitializeComponent();
this.labelInfo.Text = "";
this.txtBoxUser.Text = "admin";
this.txtBoxPsw.Text = "0";
}
//登录
private void btnOK_Click(object sender, EventArgs e)
{
if (txtBoxUser.Text.Trim() == "")
{
this.labelInfo.Text = "请输入您的用户名!";
}
else if (txtBoxPsw.Text.Trim() == "")
{
this.labelInfo.Text = "请输入您的密码!";
//MessageBox.Show("请输入您的密码", "错误提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
Command com = new Command();
string str = @"select * from UserInfo where userId = " + txtBoxUser.Text.ToString() + "";
DataTable table = com.GetDataSet(str);
if (table.Rows.Count <= 0)
{
this.labelInfo.Text = "用户名不存在!";
txtBoxUser.Text = "";
txtBoxPsw.Text = "";
return;
}
str = @"select * from UserInfo where userId = " + txtBoxUser.Text.ToString() + " and passWard = " + txtBoxPsw.Text.ToString() + "";
DataTable tableUser = com.GetDataSet(str);
if (tableUser.Rows.Count > 0)
{
_currentUser = txtBoxUser.Text;
_currentPsw = txtBoxPsw.Text;
IsLogin = true;
this.Close();
}
else
{
this.labelInfo.Text = "密码错误!";
txtBoxPsw.Text = "";
}
}
}
//取消
private void btnCencle_Click(object sender, EventArgs e)
{
this.Close();
}
//重置
private void btnReset_Click(object sender, EventArgs e)
{
txtBoxUser.Text = "";
txtBoxPsw.Text = "";
}
private void txtBoxUser_Click(object sender, EventArgs e)
{
this.labelInfo.Text = "";
}
private void txtBoxPsw_Click(object sender, EventArgs e)
{
this.labelInfo.Text = "";
}
}
}
图4-1用户登录界面
4.2 学生信息查询、保存、及修改
namespace CourseDesign
{
public partial class frmViewInfo : Form
{
#region 属性
private DBHelper.TypeOfOperationForBill _mOperTypeOfBill = DBHelper.TypeOfOperationForBill.nNull;
public DBHelper.TypeOfOperationForBill OperTypeOfBill
{
get { return _mOperTypeOfBill; }
set { _mOperTypeOfBill = value; }
}
//
private bool _isNew = false;
public bool IsNew
{
get { return _isNew; }
set { _isNew = value; }
}
private bool _isModified = false;
public bool IsModified
{
get { return _isModified; }
set { _isModified = value; }
}
#endregion
public frmViewInfo(DBHelper.TypeOfOperationForBill OperType)
{
_mOperTypeOfBill = OperTypeOfBill;
InitializeComponent();
SetFromText();
}
public virtual void SetFromText()
{
if (OperTypeOfBill == TypeOfOperationForBill.nView)
{
this.Text = "查看学生信息";
}
else
{
this.Text = "编辑学生信息";
}
}
//添加
private void toolStripBtnAdd_Click(object sender, EventArgs e)
{
//this.dataGridViewInfo.Rows.Add();
//_isNew = true;
Command com = new Command();
string strClass = @"select classId from ClassInfo where className = " + dataGridViewInfo.CurrentRow.Cells["classid"].Value.ToString() + "";
string dtClass = com.GetScalar(strClass).ToString();
string strdept = @"select sdeptNo from Sdept where name = " + dataGridViewInfo.CurrentRow.Cells["Sdept"].Value.ToString() + "";
string dtDept = com.GetScalar(strdept).ToString();
string str = "select * from StudentInfo where stuNum = " + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "";
DataTable dtable = com.GetDataSet(str);
if (dtable.Rows.Count <= 0)
{
if (dataGridViewInfo["stuNum", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["name", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["sex", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["birthday", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["nation", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["address", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["phone", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["classid", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["Sdept", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["intoSchoolDate", dataGridViewInfo.CurrentRow.Index].Value != null)
{
string sql = "insert into StudentInfo (stuNum,name,sex ,birthday ,nation,address,phone,classid,intoSchoolDate,Sdept) values";
sql += "(" + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["name"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["sex"].Value.ToString()
+ "," + dataGridViewInfo.CurrentRow.Cells["birthday"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["nation"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["address"].Value.ToString()
+ "," + dataGridViewInfo.CurrentRow.Cells["phone"].Value.ToString() + "," + dtClass + "," + dataGridViewInfo.CurrentRow.Cells["intoSchoolDate"].Value.ToString() + "," + dtDept + ")";
if (com.ExecuteCommand(sql) > 0)
{
dataGridViewInfo.Rows.Clear();
SelectStudentInfo();
MessageBox.Show("数据添加成功!");
}
}
else
{
MessageBox.Show("信息填写不完整!请补充完整!");
}
}
else
{
MessageBox.Show("该学生已存在,请审核信息!");
}
}
protected virtual void frmViewInfo_Load(object sender, EventArgs e)
{
this.dataGridViewInfo.Rows.Clear();
this.dataGridViewInfo.Columns.Clear();
//this.dataGridViewInfo.EditMode = DataGridViewEditMode.EditOnEnter;
DataGridViewColumn col = null;
col = new DataGridViewTextBoxColumn();
col.Name = "stuNum";
col.HeaderText = "学号";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "name";
col.HeaderText = "姓名";
this.dataGridViewInfo.Columns.Add(col);
DataGridViewComboBoxColumn col0 = new DataGridViewComboBoxColumn();
col0.FlatStyle = FlatStyle.Flat;
col0.HeaderText = "性别";
col0.Name = "sex";
col0.Items.Add("男");
col0.Items.Add("女");
this.dataGridViewInfo.Columns.Add(col0);
col = new DataGridViewTextBoxColumn();
col.Name = "birthday";
col.HeaderText = "出生年月";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "nation";
col.HeaderText = "民族";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "address";
col.HeaderText = "籍贯";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "phone";
col.HeaderText = "联系电话";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "classid";
col.HeaderText = "班级";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "intoSchoolDate";
col.HeaderText = "入学时间";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "Sdept";
col.HeaderText = "系别";
this.dataGridViewInfo.Columns.Add(col);
}
//删除
private void toolStripBtnDelete_Click(object sender, EventArgs e)
{
Command com = new Command();
if (dataGridViewInfo["stuNum", dataGridViewInfo.CurrentRow.Index].Value != null)
{
string numRow = dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString();
string str = "delete from StudentInfo where stuNum = " + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "";
if (MessageBox.Show("你确定删除学号为:" + numRow + "的学生么?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
string strScore = "select * from ScoreInfo where stuNo = " + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "";
DataTable dt = com.GetDataSet(strScore);
if (dt.Rows.Count > 0)
{
MessageBox.Show("请先删除该学生的成绩!");
}
else
{
if (com.ExecuteCommand(str) > 0)
{
//dataGridViewInfo.Rows.Clear();
//SelectStudentInfo();
dataGridViewInfo.Rows.Remove(dataGridViewInfo.CurrentRow);
MessageBox.Show("删除成功!");
}
}
}
}
else
{
if (MessageBox.Show("该数据行为空,是否删除该行?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
dataGridViewInfo.Rows.Remove(dataGridViewInfo.CurrentRow);
MessageBox.Show("删除成功!");
}
}
}
///
/// 查询学生信息
///
public void SelectStudentInfo()
{
Command com = new Command();
string str = "select s.stuNum,s.name,s.sex ,s.birthday ,s.nation,s.address,s.phone,c.className,s.intoSchoolDate,sd.name from StudentInfo s,ClassInfo c,Sdept sd" +
" where s.classid = c.classID and s.Sdept = sd.sdeptNo";
DataTable dt = com.GetDataSet(str);
for (int i = 0; i < dt.Rows.Count; i++)
{
dataGridViewInfo.Rows.Add();
for (int k = 0; k < dt.Columns.Count; k++)
{
dataGridViewInfo.Rows[i].Cells[k].Value = dt.Rows[i][k].ToString();
}
dataGridViewInfo.Rows[i].Tag = false;
}
}
//保存
private void toolStripBtnSave_Click(object sender, EventArgs e)
{
Command com = new Command();
for (int i = 0; i < dataGridViewInfo.Rows.Count - 1; i++)
{
string strClass = @"select classId from ClassInfo where className = " + dataGridViewInfo.Rows[i].Cells["classid"].Value.ToString() + "";
string dtClass = com.GetScalar(strClass).ToString();
string strdept = @"select sdeptNo from Sdept where name = " + dataGridViewInfo.Rows[i].Cells["Sdept"].Value.ToString() + "";
string dtDept = com.GetScalar(strdept).ToString();
string sql = @"update StudentInfo set stuNum = " + dataGridViewInfo.Rows[i].Cells["stuNum"].Value.ToString() + ",name = " + dataGridViewInfo.Rows[i].Cells["name"].Value.ToString()
+ ",sex = " + dataGridViewInfo.Rows[i].Cells["sex"].Value.ToString() + ",birthday = " + dataGridViewInfo.Rows[i].Cells["birthday"].Value.ToString() + ",nation = "
+ dataGridViewInfo.Rows[i].Cells["nation"].Value.ToString() + ",address = " + dataGridViewInfo.Rows[i].Cells["address"].Value.ToString() + ",phone = "
+ dataGridViewInfo.Rows[i].Cells["phone"].Value.ToString() + ",classid = " + dtClass + ",intoSchoolDate = " + dataGridViewInfo.Rows[i].Cells["intoSchoolDate"].Value.ToString() + ",Sdept = " + dtDept + " where stuNum = "
+ dataGridViewInfo.Rows[i].Cells["stuNum"].Value.ToString() + "";
if (com.ExecuteCommand(sql) > 0)
{
dataGridViewInfo.Rows.Clear();
SelectStudentInfo();
MessageBox.Show("数据修改成功!");
}
else
{
MessageBox.Show("数据修改失败!");
}
}
}
}
}
图4-2查看学生信息
图4-3学生信息显示
4.3 用户管理
namespace CourseDesign
{
public partial class FormPassword : Form
{
public FormPassword()
{
InitializeComponent();
this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
}
protected void btnOk_Click(object sender, EventArgs e)
{
if (txtBoxOldPsw.Text == null || txtBoxOldPsw.Text.Trim() == "")
{
MessageBox.Show("请输入旧密码!。", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (txtBoxNewPsw.Text == null || txtBoxNewPsw.Text.Trim() == ""
|| txtBoxEnterPsw.Text == null || txtBoxEnterPsw.Text.Trim() == "")
{
MessageBox.Show("请输入新密码!。", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
string currPwd = LoginForm.CurrentPsw;
if (currPwd == txtBoxOldPsw.Text.Trim())
{
if (isSame())
链接地址:https://www.zhuangpeitu.com/p-6492766.html