资源描述
《C#程序设计》
课程设计报告
(2013— 2014学年 第 二 学期)
题 目: 课室管理系统
专 业: 通信工程
班 级: 电通5B
姓名学号: 毛晓智20113100159
李俊鹏20113100125
许瑞峰20113100152
指导教师: 唐小煜
成 绩:
目录
摘 要 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数据库设计框图 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
4.3.4管理员课室管理模块………………………………………………………………….10
第五章 主要功能模块代码 12
5.1 登录界面代码设计 12
5.2 管理员界面代码设计 14
5.3 注册新用户代码设计 15
5.4 学生界面代码设计 16
第六章 课程设计心得 21
C#课室管理系统
摘 要
本文描述的是基于Windows环境的学生信息管理系统,主要功能模块包括:学生借用课室,管理员管理课室,主要工具Microsoft Visual Studio 2012 设计窗体, SQL server2008建立数据库,实现课室信息管理的各个功能。
第一章 绪 论
1.1 设计目的
本课程设计的目的是使学生能熟练掌握简单的Windows窗体应用程序的设计和数据库的应用,希望通过本次课程设计锻炼学生使用C#语言解决实际问题的能力。
1.2 开发工具选择
本系统后台数据库采用Microsoft SQL Server 数据库,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;前台采用Microsoft 公司的Visual Studio 2012作为主要开发工具,可与SQL Server 2008数据库无缝链接。
1.3 开发环境
系统开发平台:Microsoft Visual Studio2012
系统开发语言:C#
数据库管理软件:SQL Server 2008
1.4 本报告的主要内容
本报告详细的介绍了课室信息管理系统的开发过程,主要涉及到的工作如下:系统的需求分析、系统的总体设计、系统的概念设计、系统各模块的详细设计、系统运行与测试。
第二章 需求分析
2.1系统需求简介
2.1.1系统目标
(1) 管理员对课室信息和用户信息的添加、修改、删除和查找
(2) 学生能添加、修改借用的课室信息
2.1.2功能需求分析
本系统的功能需求分析如下:
(1) 学生课室借用:学生可以注册用户根据学号姓名借用教学楼课室并能对其进行修改和及时的信息更新;
(2) 管理员课室管理:用于管理员对课室和用户的管理,能进行相应的添加、修改、删除和查找,用户信息也能及时更新;
2.1.3性能需求分析
(1) 登录、注册、用户界面和管理界面需求:简洁、易懂、易用、友好。
(2) 安全保密性需求:学生和管理员只有凭借用户名和密码登陆系统,才能对信息进行相应的操作;
第三章 总体设计
3.1设计概述
根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能;
3.2系统总体结构及功能模块划分
经过对系统的需求分析,学生课室借用系统主要划分为:学生信息和课室信息的填写入三个功能模块。如图3.2.1 系统的总体结构。
学生课室借用系统
学生对课室
借用的添加和修改
管理员对课室
和学生信息的
添加、修改、删除和查找
图3.2.1 系统的总体结构
3.2.1课室借用系统模块
课室借用系统
信息添加
信息修改
课室借用系统:学生可以添加或修改借用的课室的信息。如图3.2.2学生信息查询模块结构。
图3.2.2 课室借用系统模块结构
3.2.2管理员课室管理模块
管理员课室管理:主要是用于管理员对学生信息和课室信息的添加、修改、删除和查找,如图3.2.3管理员课室管理模块结构。
管理员
课室管理系统
对学生信息和
课室信息的添加
对学生信息和
课室信息的修改
对学生信息和
课室信息的删除
对学生信息和
课室信息的查找
图3.2.3管理员课室管理模块结构
3.3系统数据库概念结构设计
根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。
3.3.1数据库设计框图
数据库设计框图可以将各个实体之间的关系显示出来,将各个实体间的属性依赖表示明白。如图3.3.1数据库设计框图结构。
管理员管理课室
总表
用户注册
学生借用课室
图3.3.1数据库设计框图结构
3.3.2系统数据库的设计
综合以上分析,要实现上面的所有功能模块,主要设计表如下:
3.4安全保密设计
3.4.1用户登录安全性
系统设计了登录界面,每个合法用户和管理员有用户名及一个密码,只有当用户输入正确的用户名及密码组合后才能够对课室信息进行操作。
第四章 详细设计
4.1概述
详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
4.2系统程序流程图
程序流程图又称为程序框图,它是历史悠久使用最广泛的描述软件设计的方法。它可将整个程序的总体流程清楚明白的显示出来。如图4.2.1系统总流程图结构。
登录界面
登录
注册界面
是否注册
用户
操作界面
Y
N
修改
返回
添加
管理员界面
查找
添加
删除
串口
查找
关闭
登录界面
学生课室借用流程图 管理员课室管理流程图
4.3系统主要功能模块简介
4.3.1系统登录
用户凭借用户名及密码登录,成功登录后可对学生信息进行操作。用户界面如图4.3.1 用户登录界面所示。
图4.3.1 用户登录界面
4.3.2学生注册
用户注册用户名和密码。注册界面如图4.3.2 用户登录界面所示。
图4.3.2 用户注册界面
4.3.3学生课室借用模块
用户填写相应的信息录入到数据库就可以借用到需要的课室,并能进行所需要的修改。并且能及时查看该信息。用户操作界面如图4.3.3所示。
图4.3.3 用户操作界面
4.3.4管理员课室管理模块
管理员可以根据需要对数据库的数据进行相应的查找、添加和删除,并能利用串口通信来实现数据的查找。管理员界面如图4.3.4所示。
图4.3.4 管理员界面
图4.3.5 管理员查找功能
图4.3.6 管理员添加功能
图4.3.7 管理员删除功能
图4.3.7 串口查找功能
第五章 主要功能模块代码
5.1 登录界面代码设计
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace diyige
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=(local)\\sqlexpress; Integrated Security=True;database=maoge");
con.Open();
SqlDataAdapter dap = new SqlDataAdapter("SELECT * FROM student WHERE 用户名='" + textBox1.Text + "'and 密码='" + textBox2.Text + "'", con);
DataSet ds = new DataSet("student");
dap.Fill(ds);
if (ds.Tables[0].Rows.Count > 0 && this.radioButton1.Checked == true)
{
CurrentOperator.UserName = textBox1.Text;
this.Hide();
Form4 form4 = new Form4();
form4.Visible = true;
}else
if (textBox1.Text == "mao" && textBox2.Text == "123" && this.radioButton3.Checked == true)
{ this.Hide();
Form2 form2 = new Form2();
form2.Visible = true;
}
else{
if (MessageBox.Show("输入错误,请重新输入", "Error", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
//delete
}
}
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
this.Hide();
Form3 form3 = new Form3();
form3.Visible = true;
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (MessageBox.Show("你要退出系统吗?退出请选择‘确定’", "Error", MessageBoxButtons.OKCancel) == DialogResult.OK)
System.Environment.Exit(0);
}
}
public static class CurrentOperator
{
private static string _userName;
public static string UserName
{
get { return _userName; }
set { _userName = value; }
}
}
}
5.2 管理员界面代码设计
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.IO.Ports;
namespace diyige
{
public partial class Form2 : Form
{
string rstr;
public delegate void ReadSptEventHandler();
SerialPort sp = new SerialPort();
DataTable dt = new DataTable();
public static string str = "";
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
showinf();
comboBox1.DataSource = SerialPort.GetPortNames();
}
private void showinf()
{
using (SqlConnection con = new SqlConnection("Data Source=(local)\\sqlexpress; Integrated Security=True;database=maoge"))
{
// DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("select * from student", con);
da.Fill(dt);
this.dataGridView1.DataSource = dt.DefaultView;
}
}
private void button1_Click_1(object sender, EventArgs e)
{
if (MessageBox.Show("您确定要删除本条信息吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
if (str != "")
{
using (SqlConnection con = new SqlConnection("Data Source=(local)\\sqlexpress; Integrated Security=True;database=maoge"))
{
con.Open();
SqlCommand cmd = new SqlCommand("delete from student where 学号='" + str + "'", con);
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
DataTable ds = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("select * from student", con);
da.Fill(ds);
this.dataGridView1.DataSource = ds.DefaultView;
MessageBox.Show("删除成功");
}
}
}
}
private void dataGridView1_Click_1(object sender, EventArgs e)
{
str = this.dataGridView1.SelectedCells[0].Value.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=(local)\\sqlexpress; Integrated Security=True;database=maoge");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO student(学号,姓名,性别,教学楼,课室,用户名,密码) values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox7.Text + "','" + textBox8.Text + "')";
cmd.Connection = con;
cmd.ExecuteNonQuery();//添加记录
MessageBox.Show("添加成功");
DataTable dg = new DataTable();
SqlDataAdapter dap = new SqlDataAdapter("select * from student", con);
dap.Fill(dg);
this.dataGridView1.DataSource = dg.DefaultView;
}
private void button3_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=(local)\\sqlexpress; Integrated Security=True;database=maoge");
con.Open();
SqlDataAdapter dap = new SqlDataAdapter("SELECT * FROM student WHERE 学号='" + textBox6.Text + "'", con);
DataSet ds = new DataSet();
dap.Fill(ds);
dataGridView2.DataSource = ds.Tables[0].DefaultView;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//打开新串口前,先关闭之前已打开的串口,避免长期占用系统资源
if (spt.IsOpen)
{
spt.Close();
}
//重新设置选定串口
spt.PortName = comboBox1.Text; //指定要使用的串口号
spt.BaudRate = 9600; //设定波特率
spt.DataBits = 8; //设定字长
spt.StopBits = System.IO.Ports.StopBits.One; //设定停止位
spt.Parity = System.IO.Ports.Parity.None; //设定奇偶验证协议
spt.Encoding = Encoding.UTF8; //设定通信中使用的字符集
spt.DtrEnable = true; //数据终端准备就绪(可以接收数据)
spt.ReadTimeout = 1000; //设置数据读取超时为1秒
spt.WriteTimeout = 1000; //设置数据发送超时为1秒
//打开串口
try
{
spt.Open();
if (spt.IsOpen)
{
CloseSpt.Enabled = true;
msgshow.Text = "成功打开串口" + spt.PortName;
}
}
catch (Exception msg)
{
msgshow.Text = msg.Message;
}
}
private void button4_Click(object sender, EventArgs e)
{
spt.Close();
if (!spt.IsOpen)
{
CloseSpt.Enabled = false;
msgshow.Text = "已成功关闭串口" + spt.PortName;
}
}
private void Serial_Load(object sender, EventArgs e)
{
//将可用的串口名填充到下拉菜单中
comboBox1.DataSource = SerialPort.GetPortNames();
//如果sp/spt对象没有绑定spt_DataReceived事件,则要执行以下语句
//当串口有数据要接收时,将触发该事件,执行绑定到该事件委托的方法
//this.sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.spt_DataReceived);
}
private void spt_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//当发生串口数据接收事件时,创建一个自定义委托对象,执行该委托所绑定的方法
//在Logs控件所在的句柄上启动该异步委托,允许该线程修改Logs的属性
//IAsyncResult ir = Logs.BeginInvoke(new ReadSptEventHandler(ReadSpt));
//等待该委托线程完成
//Logs.EndInvoke(ir);
//把BeginInvoke和EndInvoke紧挨着放在一起,相当启动了一个异步线程,又一直等待该线程返回(这不就变成同步方法了吗?)
//本例中,可以考虑直接使用同步的方法启动一个委托
//程序会在此处等待,直至全部数据读取完毕,效果与上面BeginInvoke和EndInvoke两句一样
ReadSptEventHandler rse = new ReadSptEventHandler(ReadSpt);
Logs.Invoke(rse);
//Logs.AppendText("hahahaha");
//以下不调用异步委托,而是直接执行处理数据读取和显示任务
//由于spt读取串口数据在一个独立的线程中进行,系统将会抛出“线程安全”问题而报错
//ReadSpt();
//绘图
//DrawC();
}
void ReadSpt()
{
//以字符的方式读取串口的全部数据
rstr = spt.ReadExisting().Trim();
//读取串口接收到的数据的一个字符(字符的整型值),并以文本显示
//string rstr = spt.ReadChar().ToString();
//将数据添加到Logs控件
Logs.AppendText(rstr);
//将Logs控件的光标移到最末尾处
Logs.ScrollToCaret();
//DrawC();
}
private void button4_Click_1(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=(local)\\sqlexpress; Integrated Security=True;database=maoge");
con.Open();
SqlDataAdapter dap = new SqlDataAdapter("SELECT * FROM student WHERE 学号='" + rstr + "'", con);
DataSet ds = new DataSet();
dap.Fill(ds);
dataGridView2.DataSource = ds.Tables[0].DefaultView;
}
private void button5_Click(object sender, EventArgs e)
{
this.Hide();
Form form1 = new Form1();
form1.Show();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
if (MessageBox.Show("你要退出系统吗?退出请选择‘确定’", "Error", MessageBoxButtons.OKCancel) == DialogResult.OK)
System.Environment.Exit(0);
}
}
}
5.4 注册新用户代码设计
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace diyige
{
public partial class Form3 : Form
{
DataTable dt = new DataTable();
public Form3()
{
InitializeComponent();
}
private void Form3_Load(object sender, EventArgs e)
{
showinf();
}
private void showinf()
{
using (SqlConnection con = new SqlConnection("Data Source=(local)\\sqlexpress; Integrated Security=True;database=maoge"))
{
SqlDataAdapter da = new
展开阅读全文