摘要本文描述的是基于Windows环境的学生信息管理系统,主要功能模块包括:学生信查询,学生信息管理,学生成绩录入,主要工具Microsoft Visual Studio 2005 设计窗体, SQL server2005建立数据库,实现学校信息管理的各个功能。
本程序提供了管理员权限和用户权限,其中管理员可以对信息进行管理,而用户只可以对信息进行查询,以确保程序的安全性。
本篇报告介绍一个学生信息管理系统的从分析到设计最后到开发的全过程为,给出了学生信息管理系统的设计和技术实现的过程,特别在细节上分析功能和函数的实现思想。
涉及到学生信息管理的基本功能在本报告中都有相应的描述。
一、需求分析1系统目标1 学生信息、课程信息、成绩信息的增加、删除、修改、查询2 分别设置管理员权限和用户权限2功能需求分析本系统的功能需求分析如下:(1)学生信息查询:学生可以根据学号、姓名等进行模糊查询.(2)学生信息管理:主要是用于学生信息更新、插入、删除;(3)学生成绩录入:用于学生成绩管理,录入学生成绩,也可以更新;3性能需求分析(1)登录、用户界面需求:简洁、易懂、易用、友好的用户界面。
(2)安全保密性需求:只有凭借用户名和密码登陆系统,才能进行信息的管理等。
二总体设计1设计概述根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。
把这些模块结合起来组成一个整体。
逐一实现各个功能。
2系统数据库的设计1.所用到的数据库中的表信息:adminmsg(管理员表)列名字段类型长度主/外键对应中文名Userid int4编号Username Nvarchar50姓名Password Nvarchar50密码user(用户表)列名字段类型长度主/外键对应中文名Userid int4编号Username Nvarchar50姓名Password Nvarchar50密码Studentmsg(学生信息表)列名字段类型长度主/外键对应中文名Studentid int4Y 学号Studentname Nvarchar 50 姓名Sex Byte 1 性别department Nvarchar 50 所在系speciality Nvarchar50专业Coursemsg(课程信息表)列名字段类型长度主/外键对应中文名courseid int4Y 课程号coursename Nvarchar 50 课程名称required Nvarchar 10 性质credit int 4 学分Scoremsg(成绩表)列名字段类型长度主/外键对应中文名Studentno int4Y 学号courseid int 4 Y 课程号score int 4 成绩3.用户登录安全性检查系统设计了登录界面,每个合法用户有用户名及一个密码,在输入后系统会对相应的表进行匹配检查,只有当用户输入正确的用户名及密码组合后才能够进入相应的界面。
三详细设计1登陆安全性检查。
系统会对每一个用户进行安全性检查,只有在数据库中拥有用户信息的才可以进入系统。
截图如下:2用户权限登陆用户在输入正确的密码和用户名称之后,点击“用户身份登陆”,就进入了用户界面,界面截图如下:在这个界面正可以查询课程信息,学生信息和学院信息,还可以查看统计信息。
如图:第一章查询学生信息第二章查询课程信息第三章查询学院信息第四章查询统计信息(选中一行,可查看不及格名单)3管理员身份登陆以管理员身份登陆后可以进行学生信息,课程信息,成绩信息的添加,删除,修改,查询等操作。
(1)管理员身份界面(2)添加课程,学生信息(3)查看,修改,删除课程信息和学生信息。
学生信息页面显示后会加载全部的学生信息,上面的检索是提供了模糊搜索。
可以在列表中直接修改信息,然后点击“保存修改”,系统会保存修改后的信息。
选中一行后,点击“删除选中行信息”,系统会自动删除该行的学生信息以及其成绩信息。
课程信息页面操作同学生信息页面操作相同。
删除时会相应的删除课程信息以及和此课程信息相关的所有成绩信息。
查询总信息,根据选择的条件会显示与条件相关的所有信息。
并增加了“删除学院信息”。
在选中一行后,就会锁定该行的学院名称,并删除该学员的全部学生信息和相关的课程信息。
(4)查询统计信息查询统计信息同用户级别的查询统计信息相同(5)添加成绩信息系统会自动将课程信息和学生姓名绑定在框内。
按照下拉菜单,选择相应的课程和学生,分数就会为该学生添加相应的分数,添加后会显示在右侧的表中。
四主要功能模块代码1登陆部分代码string guanliyuan = textBox1.Text;string password = textBox2.Text;string connString = @"Data Source=acer-pc;Initial Catalog=myschool;Integrated Security=true"SqlConnection connection = new SqlConnection(connString);string sql = string.Format("select count(*) from [admin] where guanliyuan='{0}' andpassword='{1}'", guanliyuan, password);try{connection.Open();SqlCommand command = new SqlCommand(sql, connection);int num = (int)command.ExecuteScalar();if (num > 0){this.Visible = false; //登陆窗体消失Form2 a = new Form2();a.ShowDialog();}else{MessageBox.Show("您输入的用户名或密码错误", "登陆失败",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);}}catch (Exception ex){MessageBox.Show(ex.Message, "操作数据库错误", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);}finally{connection.Close();}2添加部分代码(以下全部以添加学生信息为例)string no = Convert.ToString(textBox1.Text);string name = Convert.ToString(textBox2.Text);string sex = Convert.ToString(textBox3.Text);string dept = Convert.ToString(textBox4.Text);string spec = Convert.ToString(textBox5.Text);string connString = @"Data Source=acer-pc;Initial Catalog=myschool;Integrated Security=true";SqlConnection connection = new SqlConnection(connString);String sql = string.Format("insert into studentmsg(studentno,studentname,sex,department,speciality) values ('{0}','{1}','{2}','{3}','{4}')", no, name, sex, dept, spec);try{connection.Open();SqlCommand command = new SqlCommand(sql, connection);int count = command.ExecuteNonQuery(); //执行添加命令,返回值为更新的行数if (count > 0){MessageBox.Show("添加学生信息成功", "添加成功", MessageBoxButtons.OK,rmation);}else{MessageBox.Show("添加学生信息失败", "添加失败", MessageBoxButtons.OK,rmation);}}catch (Exception ex){MessageBox.Show(ex.Message, "操作数据库出错!", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);}finally{ connection.Close(); }}3删除部分代码//提取选中行的记录的学号,进行删除string no = this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();try{//首先删除成绩表中的数据string sql = String.Format("delete from scoremsg where studentno='{0}'", no);SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);DataSet dataset = new DataSet("MyData");dataadapter.Fill(dataset);//删除学生信息表中的数据string sql2 = String.Format("delete from studentmsg where studentno='{0}'", no);SqlDataAdapter dataadapter2 = new SqlDataAdapter(sql2, connection);DataSet dataset2 = new DataSet("MyData");dataadapter2.Fill(dataset2);SqlCommand command = new SqlCommand(sql, connection);}catch (Exception ex){MessageBox.Show(ex.Message, "操作数据库出错!", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);}4修改部分代码studentmsgTableAdapter.Update(myschoolDataSet.studentmsg);//通过对datagridview中的数据进行直接的修改,再用update进行更新5对信息的统计//对学生信息进行录入string sql = String.Format("select courseid,count(studentno) 选课人数,avg(score) 平均成绩from scoremsg GROUP BY courseid ");SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);DataSet dataset = new DataSet("MyData");dataadapter.Fill(dataset);dataGridView1.Columns[0].DataPropertyName = "courseid";dataGridView1.Columns[1].DataPropertyName = "选课人数";dataGridView1.Columns[2].DataPropertyName = "平均成绩";dataGridView1.DataSource = dataset.Tables[0];//统计不及格的学生信息string no = this.dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//提取选中的行的课程号string sql = String.Format("select studentname from studentmsg,scoremsg wherestudentmsg.studentno=scoremsg.studentno and score<60and courseid='{0}'",no);SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);DataSet dataset = new DataSet("MyData");dataadapter.Fill(dataset);dataGridView2.Columns[0].DataPropertyName = "studentname";dataGridView2.DataSource = dataset.Tables[0];五课程设计心得通过对这个程序的编写,加深了我对c#这门语言和数据库操作的了解,提高了综合运用课程所学知识的能力,在整个过程中,我遇到了许多的问题,包括对一些控件功能的不了解,调试时出现的种种错误,以及对两种语言的结合使用等等。