《C#程序设计》
课程设计报告
(20 — 20 学年 第 学期)
题 目: 学生成绩信息管理系统
专 业:
班 级:
姓名学号:
指导教师:
成 绩:
目录
摘 要... 1
第一章 绪 论... 2
1.1 设计目的... 2
1.2 开发工具选择... 2
1.3 开发环境... 2
1.4 本报告的主要内容... 2
第二章 需求分析... 3
2.1系统需求简介... 3
2.1.1系统目标... 3
2.1.2功能需求分析... 3
2.1.3性能需求分析... 3
第三章 总体设计... 4
3.1设计概述... 4
3.2系统总体结构及功能模块划分... 4
3.2.1学生信息查询模块... 4
3.2.2学生信息管理模块... 5
3.3系统数据库概念结构设计... 5
3.3.1系统E-R图... 5
3.3.2系统数据库的设计... 6
3.4安全保密设计... 7
3.4.1用户登录安全性... 7
第四章 详细设计... 8
4.1概述... 8
4.2系统程序流程图... 8
4.3系统主要功能模块简介... 9
4.3.1系统登录... 9
4.3.2学生信息查询模块... 9
4.3.3学生信息管理模块... 10
第五章 主要功能模块代码... 12
5.1 公共类代码设计... 12
5.2 登录界面代码设计... 14
5.3 查询模块代码设计... 15
5.4 添加模块代码设计... 16
5.5 更新模块代码设计... 17
5.6 删除模块代码设计... 20
第六章 课程设计心得... 21
第七章 设计日志... 22
C#学生成绩管理系统
摘 要
本文描述的是基于Windows环境的学生信息管理系统,主要功能模块包括:学生信查询,学生信息管理,学生成绩录入,主要工具Microsoft Visual Studio 20## 设计窗体, SQL server2005建立数据库,实现学校信息管理的各个功能。
本篇报告介绍一个学生信息管理系统的从分析到设计最后到开发的全过程为,给出了学生信息管理系统的设计和技术实现的过程,特别在细节上分析功能和函数的实现思想。涉及到学生信息管理的基本功能在本报告中都有相应的描述。
本课程设计的目的是使学生能熟练掌握简单的简单Windows窗体应用程序的设计和ADO.net的应用,希望通过本次课程设计锻炼学生使用C#语言解决实际问题的能力。
本系统后台数据库采用Microsoft SQL Server 数据库,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;前台采用Microsoft 公司的Visual Studio 2008作为主要开发工具,可与SQL Server 2005数据库无缝链接。
系统开发平台:Microsoft Visual Studio2005
系统开发语言:C#
数据库管理软件:SQL Server 2005
本报告详细的介绍了学生信息管理系统的开发过程,主要涉及到的工作如下:系统的需求分析、系统的总体设计、系统的概念设计、系统各模块的详细设计、系统运行与测试。
(1) 根据查询条件实现学生信息的查询
(2) 学生选课信息查询、成绩信息的查询
(3) 学生信息、课程信息、成绩信息的增加、删除、修改
(4) 对基本信息完成增加、删除、修改时,需注意表与表之间的关联
本系统的功能需求分析如下:
(1) 学生信息查询:学生可以根据学号、姓名、专业进行查询.
(2) 学生信息管理:主要是用于学生信息更新、插入、删除;
(3) 学生成绩录入:用于学生成绩管理,录入学生成绩,也可以更新;
(1) 登录、用户界面需求:简洁、易懂、易用、友好的用户界面。
(2) 安全保密性需求:只有凭借用户名和密码登陆系统,才能进行信息的管理等。
根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能;
经过对系统的需求分析,学生信息管理系统主要划分为三个部分:学生信息查询,学生信息管理,学生成绩录入三个功能模块。如图3.2.1 系统的总体结构。
图3.2.1 系统的总体结构
学生信息查询:学生可以根据学号、姓名、专业进行查询。如图3.2.2学生信息查询模块结构。
图3.2.2 学生信息管理模块结构
学生信息管理:主要是用于学生信息更新、插入、删除,如图3.2.3学生管理模块结构。
图3.2.3 学生信息管理模块结构
根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。
系统E-R图可以将各个实体之间的关系显示出来,将各个实体间的属性依赖表示明白。如图3.3.1系统E-R图结构。
图3.3.1系统E-R图结构
综合以上分析,要实现上面的所有功能模块,主要设计表如下:
表3.3.1 用户表(usedata)
表3.3.2成绩表(SC)
表3.3.3课程表 (C)
表3.3.4学生表(S)
系统设计了登录界面,每个合法用户有用户名及一个密码,只有当用户输入正确的用户名及密码组合后才能够对学生信息进行操作。
详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
程序流程图又称为程序框图,它是历史悠久使用最广泛的描述软件设计的方法。它可将整个程序的总体流程清楚明白的显示出来。如图4.2.1系统总流程图结构。
图4.2.1系统总体流程图
用户凭借用户名及密码登录,成功登录后可对学生信息进行操作。用户界面如图4.3.1 用户登录界面所示。
图4.3.1 用户登录界面
学生信息查询:在程序主界面(如图4.3.2 程序主界面)学生可以根据学号、姓名进行查询。学生也可以只用一种条件进行信息查询,也可以多个条件查询。双击记录任一单元格可显示学生的更详细信息(如图4.3.3 详细信息窗口)。
图4.3.2 程序主界面
图4.3.3 详细信息窗口
学生信息管理:通过右击程序主界面的相应记录弹出的上下文菜单(如图4.3.4 上下文菜单)可对当前选定学生信息进行详细信息查询(如图4.3.3 详细信息窗口)、修改信息(如图4.3.5 修改信息窗口)、删除信息(如图 4.3.6 删除信息提示)。更新时如果输入的学号不存在,可选择是否添加学生信息。通过程序主界面的新建信息记录可添加学生信息(如图 4.3.7 添加信息窗口)。
图4.3.4 上下文菜单
图4.3.5 修改信息窗口
图4.3.6 删除信息提示
图4.3.7 添加信息窗口
namespace MySql
{
public class mySql
{
public String connectionString = @"SERVER=.\SQLEXPRESS;AttachDbFilename=D:\学习\C#\课程设计\StuScoreManSystem\StuScoreManSystem\StuScoManSys.mdf;
Integrated Security=True;Connect Timeout=30;User Instance=True;";
public String commondText;
public bool flag; //指示有条该条记录
public System.Data.DataView table;
public void runSql() // 执行查询、删除SQL语句
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand cmdQuery = new SqlCommand(commondText, connection);
SqlDataAdapter sda = new SqlDataAdapter(commondText, connection);
DataSet ds = new DataSet();
sda.Fill(ds);
if (commondText.IndexOf("SELECT") >= 0)
{
table = ds.Tables[0].DefaultView;
}
connection.Close();
}
}
public bool getFlag() //判断是否有该条记录
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand cmdQuery = new SqlCommand(commondText, connection);
SqlDataReader reader = cmdQuery.ExecuteReader();
if (reader.Read()) flag = true;
else flag = false;
reader.Close();
connection.Close();
return flag;
}
}
public String getContent(String require,String SNO) //获取视图表的的指定单元格内容
{
try
{
commondText = "SELECT " + require + " FROM detail WHERE 学号=" + SNO;
if (require == "up课程名称")
commondText = "SELECT 课程名称 FROM detail WHERE 学号=" + SNO;
if (require == "up成绩")
commondText = "SELECT 成绩 FROM detail WHERE 学号=" + SNO;
SqlDataAdapter sda = new SqlDataAdapter(commondText, connectionString);
DataSet ds = new DataSet();
sda.Fill(ds);
String result="";
if(require=="课程名称"||require=="成绩")
{
int i=new int();
for (i=0; i <ds.Tables[0].Rows.Count; i++)
{
result = result+ds.Tables[0].Rows[i][require].ToString()+"\n";
}
}
else
result=ds.Tables[0].Rows[0][require].ToString().Trim();
return result;
}
catch
{
return "无";
}
}
public void update()
{//添加、更新语句
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand cmdInsert = new SqlCommand(commondText, connection);
cmdInsert.ExecuteNonQuery();
connection.Close();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(), "提示");
}
}
}
}
private void login_Click(object sender, EventArgs e)
{//用户名及密码组合判断
if (username.Text.ToString().Trim() != "" && password.Text.ToString().Trim() != "")
{
mySql sql = new mySql();
sql.commondText = "SELECT * FROM userdata WHERE USERNAME='" + username.Text.ToString().Trim() + "' AND PASSWORD='" + password.Text.ToString().Trim() + "'";
try
{
bool temp = new bool();
temp = sql.getFlag();
if (temp)
{
this.Visible = false;
mainface main = new mainface(this);
main.Show();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(),"提示");
}
}
else
{
MessageBox.Show("请输入用户名和密码","提示");
}
}
private void btQuery_Click(object sender, EventArgs e)
{
mySql query=new mySql();
if (sNInput.Text.Trim() == ""&& sNoinput.Text.Trim()!="") query.commondText = "SELECT SNO AS 学号,SN AS 姓名,MN AS 专业名称,SEX AS 性别,BIRDAY AS 出生日期,TS AS 总学分,COM AS 备注 FROM S WHERE SNO="+sNoinput.Text.Trim()+"";
if (sNInput.Text.Trim() != "" && sNoinput.Text.Trim() == "") query.commondText = "SELECT SNO AS 学号,SN AS 姓名,MN AS 专业名称,SEX AS 性别,BIRDAY AS 出生日期,TS AS 总学分,COM AS 备注 FROM S WHERE SN='" +sNInput.Text.Trim()+ "'";
if (sNInput.Text.Trim() != "" && sNoinput.Text.Trim() != "") query.commondText = "SELECT SNO AS 学号,SN AS 姓名,MN AS 专业名称,SEX AS 性别,BIRDAY AS 出生日期,TS AS 总学分,COM AS 备注 FROM S WHERE SN='" + sNInput.Text.Trim() + "' and SNO=" + sNoinput.Text.Trim() + "";
if (sNInput.Text.Trim() == "" && sNoinput.Text.Trim() == "") MessageBox.Show("您输入的信息为空,请重新输入!", "错误信息");
else
{
if (query.getFlag())
{
query.runSql();
dataGridView1.DataSource = query.table;
}
else MessageBox.Show("您查找的信息不存在", "错误信息");
}
}
private void addbtOK_Click(object sender, EventArgs e)
{
if (addStuNo.Text.Trim() != "" && addStuName.Text.Trim() != ""&& addStuMajor.Text.Trim()!="")
{
mySql sql = new mySql();
sql.commondText = "SELECT CNO FROM C WHERE CN='" + listmn.Text.ToString().Trim()+ "'";
sql.runSql();
String temp = sql.table.Table.Rows[0]["CNO"].ToString();
String sexTemp=radioButton1.Checked ? "男":"女";
String comTemp;
if (addStuCom.Text.ToString().Trim() == "")
comTemp = " ";
else comTemp = addStuCom.Text.ToString().Trim();
String birTemp=" ";
if (addStuBir.Text.ToString().Trim() == "")
comTemp = " ";
else birTemp = addStuCom.Text.ToString().Trim();
sql.commondText = "INSERT INTO S (SNO,SN,MN,SEX,BIRDAY,COM) VALUES("
+addStuNo.Text.ToString().Trim()+",'"
+addStuName.Text.ToString().Trim()+"','"
+addStuMajor.Text.ToString().Trim()+"','"
+sexTemp+"','"
+birTemp+"','"
+comTemp+"');";
sql.update();
if(score.Text.ToString().Trim()!=""){
sql.commondText = "INSERT INTO SC(SNO,CNO,SCORE) VALUES ("+addStuNo.Text.ToString().Trim()
+","+temp+","+score.Text.ToString().Trim()+");";
sql.update();
}
this.Close();
}
else
{
MessageBox.Show("学号、姓名和专业名称都不可以为空!!!","错误!");
}
}
private void AddNew_Load(object sender, EventArgs e)
{//获取专业列表
mySql sql = new mySql();
sql.commondText = "SELECT DISTINCT CN FROM C";
SqlDataAdapter sda = new SqlDataAdapter(sql.commondText, sql.connectionString);
DataSet ds = new DataSet();
sda.Fill(ds);
listmn.DataSource = ds.Tables[0].DefaultView;
listmn.DisplayMember = "CN";
listmn.DisplayMember = listmn.DisplayMember.ToString().Trim();
}
private void upbtOK_Click(object sender, EventArgs e)
{
mySql sql = new mySql();
sql.commondText = "SELECT 学号 FROM detail WHERE 学号="+upStuNo.Text.ToString().Trim();
bool flagtemp = sql.getFlag();
if (!flagtemp) //如果表中无该条记录,提示是否进行添加新记录操作
{
if (MessageBox.Show("查无当前记录,无法进行更新操作!\n是否进行添加新记录的操作?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
if (upStuNo.Text.Trim() != "" && upStuName.Text.Trim() != "" && upStuMajor.Text.Trim() != "")
{
mySql sqlme = new mySql();
sqlme.commondText = "SELECT CNO FROM C WHERE CN='" + listmn.Text.ToString().Trim() + "'";
sqlme.runSql();
String temp = sqlme.table.Table.Rows[0]["CNO"].ToString();//课程号
String sexTemp = radioButton1.Checked ? "男" : "女";
String comTemp;
if (upStuCom.Text.ToString().Trim() == "")
comTemp = " ";
else comTemp = upStuCom.Text.ToString().Trim();
String birTemp;
if (upStuBir.Text.ToString().Trim() == "")
birTemp = " ";
else birTemp = upStuCom.Text.ToString().Trim();
sqlme.commondText = "INSERT INTO S (SNO,SN,MN,SEX,BIRDAY,COM) VALUES("
+ upStuNo.Text.ToString().Trim() + ",'"
+ upStuName.Text.ToString().Trim() + "','"
+ upStuMajor.Text.ToString().Trim() + "','"
+ sexTemp + "','"
+ birTemp + "','"
+ comTemp + "');";
sqlme.update();
if (upStuScore.Text.ToString().Trim() != "")
{
sqlme.commondText = "INSERT INTO SC(SNO,CNO,SCORE) VALUES (" + upStuNo.Text.ToString().Trim()
+ "," + temp + "," + upStuScore.Text.ToString().Trim() + ");";
sqlme.update();
}
this.Close();
}
else
{
MessageBox.Show("学号、姓名和专业名称都不可以为空!!!", "错误!");
}
}
}
else
{
if (upStuNo.Text.Trim() != "" && upStuName.Text.Trim() != "" && upStuMajor.Text.Trim() != "")
{
sql.commondText = "SELECT CNO FROM C WHERE CN='" + listmn.Text.ToString().Trim() + "'";
sql.runSql();
String temp = sql.table.Table.Rows[0]["CNO"].ToString();//获取课程号
String sexTemp = radioButton1.Checked ? "男" : "女";
String comTemp;
if(upStuCom.Text.ToString().Trim()=="")
comTemp=" ";
else comTemp=upStuCom.Text.ToString().Trim();
String birTemp;
if (upStuBir.Text.ToString().Trim() == "")
birTemp = " ";
else birTemp = upStuBir.Text.ToString().Trim();
sql.commondText = "UPDATE S SET SN='" + upStuName.Text.ToString().Trim() + "',MN='"
+upStuMajor.Text.ToString().Trim()+"',SEX='"
+sexTemp+"',BIRDAY='"
+ upStuBir.Text.ToString().Trim() + "',COM='"
+comTemp+"' WHERE SNO="+upStuNo.Text.ToString().Trim();
sql.update();
bool scFlag = new bool();
if (upStuScore.Text.ToString().Trim() != "")
{
try
{
mySql scTemp = new mySql();
scTemp.commondText = "SELECT CNO FROM C WHERE CN='" + listmn.Text.ToString().Trim() + "'";
scTemp.runSql();
String cntemp = scTemp.table.Table.Rows[0]["CNO"].ToString();//获取课程号
scTemp.commondText = "SELECT SNO FROM SC WHERE SNO=" + upStuNo.Text.ToString().Trim() + " AND CNO=" + cntemp;
scFlag = scTemp.getFlag();
if (scFlag)
{
sql.commondText = "UPDATE SC SET SCORE='" + upStuScore.Text.ToString().Trim() + "' WHERE SNO=" + upStuNo.Text.ToString().Trim() + " AND CNO=" + temp;
sql.update();
}
}
catch
{
sql.commondText = "INSERT INTO SC(SNO,CNO,SCORE) VALUES (" + upStuNo.Text.ToString().Trim()
+ "," + temp + "," + upStuScore.Text.ToString().Trim() + ");";
sql.update();
}
}
this.Close();
}
else
{
MessageBox.Show("学号、姓名和专业名称都不可以为空!!!", "错误!");
}
}
}
private void 删除记录ToolStripMenuItem_Click(object sender, EventArgs e)
{
mySql del = new mySql();
String temp = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();
if(MessageBox.Show("确定要删除此条记录?", "提示",MessageBoxButtons.OKCancel)==DialogResult.OK)
{
del.commondText = "DELETE FROM SC WHERE SNO=" + temp;
del.runSql();
del.commondText = "DELETE FROM S WHERE SNO=" + temp;
del.runSql();
this.dataGridView1.Rows.Remove(this.dataGridView1.CurrentRow);
}
}
为期一周的课程设计结束了,在老师和同学的帮助下,我基本完成系统的设计。我按照系统工程软件设计的要求,从需求分析,概念设计,总体设计,详细设计,系统测试等各个步骤,分步完成系统的各项任务,实现了系统中的学生信息查询,学生信息更新,学生信息添加等模块的功能。
在这短短的五天里我收获如下:
1、巩固和加深了对C#的理解,提高综合运用本课程所学知识的能力。
2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
根据我在课程设计中遇到的问题,我将在以后的学习当中注意以下几点:
1、认真上好专业实验课,多在实践中锻炼自己。
2、写程序的过程中要考虑周到,严密。
3、在做设计的时候要有信心,有耐心,切勿浮躁。
4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。
5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。
(注:指导教师评语和成绩所在表格另起一页)
西安郵電學院数据库原理及应用设计报告题目:学生信息管理系统一.设计目的学生管理系统是高校管理工作中一项非常重要的组成部分。用户的需…
电子信息科学与技术专业课程设计题单班级_***_学生***课程名称专业课程设计_课题密码锁的设计设计要求利用visualc#作为前…
学生成绩管理系统实验报告目录一开发目的2二项目描述2三系统目标2四系统结构图3五负责模块3六实验过程41系统界面设计42成绩信息管…
课程设计报告(20##--20##年度第2学期)名称:数据库原理课程设计题目:学生成绩管理系统院系:计算机系班级:网络0901学号…
面向对象程序设计大作业学生信息管理系统学院名称信息科学与工程学院专业班级数学大类20xx级2班学生姓名魏仿学号20xx010513…
软件测试课程设计报告题目学生成绩管理系统院系计算机科学学院班级软件一班成员田欣1学生成绩管理系统测试报告正文1测试概述11测试目的…
福建师范大学人民武装学院C语言程序设计报告书设计名称学生成绩管理系统专业软件工程指导老师陈琳姓名黄强学号119xx20xx0262…
实训报告题目学生信息管理系统院系信息科技学院专业电子信息工程姓名殷浩学号1152100135指导教师杨呈永日期20xx年6月26日…
郑州大学实训报告实训名称学生成绩管理系统设计姓名院系软件学院专业班级学号指导教师成绩时间年2月日至年月31日目录实训任务书I实训进…
实训报告题目学生成绩管理系统院系信息科技学院专业电子信息科学与技术姓名周谒真学号1052400101指导教师王小琼日期20xx年7…
学生成绩管理系统需求分析报告班级数学与应用数学112班姓名XX学号201XXXXXX指导老师柳文涛目录1引言311文档编制目的31…