前一篇,已经把数据库个设计好了。剩下的就是照着文档进行编码了。 文末的源码
开发环境:
1. Visual Studio 2013
2. SQL server 2008
快速指南:下载源码,sql2008还原数据库,vs2013打开项目,编译执行
一.配置数据库连接
首先,第一步配置好数据库连接:
1.在app.config文件里添加连接字符串,如下代码:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> </configSections> <connectionStrings> <add name="sql_homework_end.Properties.Settings.sql_homework_endConnectionString" connectionString="Data Source=.;Initial Catalog=sql_homework_end;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration> 连接字符串
2.建立数据库公共类:
1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Data; 5 using System.Data.SqlClient; 6 using System.Linq; 7 using System.Security.Cryptography; 8 using System.Text; 9 using System.Threading.Tasks; 10 11 namespace sql_homework_end 12 { 13 class sqlhelper 14 { 15 private static string connStr = ConfigurationManager.ConnectionStrings["sql_homework_end.Properties.Settings.sql_homework_endConnectionString"].ConnectionString; 16 /// <summary> 17 /// 返回受影响的数据行数 18 /// </summary> 19 /// <param name="sql"></param> 20 /// <returns></returns> 21 public static int ExecuteNoQuery(string sql) 22 { 23 using (SqlConnection conn=new SqlConnection(connStr)) 24 { 25 conn.Open(); 26 using (SqlCommand cmd=conn.CreateCommand()) 27 { 28 cmd.CommandText = sql; 29 return cmd.ExecuteNonQuery(); 30 31 } 32 } 33 } 34 /// <summary> 35 /// 返回一个数据集 36 /// </summary> 37 /// <param name="sql"></param> 38 /// <returns></returns> 39 public static DataSet ExecuteDataSet(string sql) 40 { 41 using (SqlConnection xonn=new SqlConnection(connStr)) 42 { 43 xonn.Open(); 44 using (SqlCommand cmd = xonn.CreateCommand()) 45 { 46 cmd.CommandText = sql; 47 SqlDataAdapter adapter = new SqlDataAdapter(cmd); 48 DataSet dataset = new DataSet(); 49 adapter.Fill(dataset); 50 return dataset; 51 } 52 } 53 } 54 public static object ExecuteScalar(string sql) 55 { 56 using (SqlConnection conn=new SqlConnection(connStr)) 57 { 58 conn.Open(); 59 using (SqlCommand cmd=conn.CreateCommand()) 60 { 61 cmd.CommandText = sql; 62 return cmd.ExecuteScalar(); 63 } 64 } 65 } 66 /// <summary> 67 /// md5加密 68 /// </summary> 69 /// <param name="strPwd"></param> 70 /// <returns></returns> 71 public static string GetMD5(string strPwd) 72 { 73 string pwd = ""; 74 //实例化一个md5对象 75 MD5 md5 = MD5.Create(); 76 // 加密后是一个字节类型的数组 77 byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(strPwd)); 78 //翻转生成的MD5码 79 s.Reverse(); 80 //通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 81 //只取MD5码的一部分,这样恶意访问者无法知道取的是哪几位 82 for (int i = 3; i < s.Length - 1; i++) 83 { 84 //将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 85 //进一步对生成的MD5码做一些改造 86 pwd = pwd + (s[i] < 198 ? s[i] + 28 : s[i]).ToString("X"); 87 } 88 return pwd; 89 } 90 91 92 } 93 }
二.功能设计
1.登录功能
界面预览:
功能有:身份验证,退出。公共变量传值。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace sql_homework_end 12 { 13 public partial class login : Form 14 { 15 public login() 16 { 17 InitializeComponent(); 18 } 19 20 //界面传值 21 public static string GlobelValue; // 注意,必须申明为static变量 22 //登录按钮事件 23 private void btn_login_Click(object sender, EventArgs e) 24 { 25 if (cmb_identity.Text.ToString()=="管理员") 26 { 27 verify_identidy("tb_admin","admin_name"); 28 main a = new main(); 29 a.Show(); 30 } 31 else if (cmb_identity.Text.ToString()=="学生") 32 { 33 verify_identidy("tb_student","student_name"); 34 studnet s = new studnet(); 35 s.Show(); 36 } 37 38 } 39 //身份验证的函数 40 private void verify_identidy(string table,string name) 41 { 42 DataSet ds = new DataSet(); 43 ds = sqlhelper.ExecuteDataSet("select * from "+table+" where "+name+" = '" + tbx_loginname.Text + "'"); 44 DataTable dt = new DataTable(); 45 dt = ds.Tables[0]; 46 if (dt.Rows.Count != 0) 47 { 48 GlobelValue = tbx_loginname.Text; 49 this.Visible = false; //隐藏当前窗体 50 } 51 else 52 { 53 MessageBox.Show("用户名不存在,请重新输入"); 54 } 55 } 56 //退出按钮 57 private void btn_close_Click(object sender, EventArgs e) 58 { 59 this.Close(); 60 } 61 62 63 64 } 65 }
2.主界面-管理员
预览:
管理员信息:
学生信息:
主要使用控件:datagridview
相关代码:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace sql_homework_end 12 { 13 public partial class main : Form 14 { 15 public main() 16 { 17 InitializeComponent(); 18 19 } 20 //绑定并显示相关信息 21 DataSet ds = new DataSet(); 22 DataTable dt = new DataTable(); 23 private void 学生信息ToolStripMenuItem_Click(object sender, EventArgs e) 24 { 25 ds = sqlhelper.ExecuteDataSet("select * from tb_student"); 26 dt = ds.Tables[0]; 27 dataGridView1.DataSource = dt; 28 } 29 30 private void 课程信息ToolStripMenuItem_Click(object sender, EventArgs e) 31 { 32 ds = sqlhelper.ExecuteDataSet("select * from tb_course"); 33 dt = ds.Tables[0]; 34 dataGridView1.DataSource = dt; 35 } 36 37 private void 选课信息ToolStripMenuItem_Click(object sender, EventArgs e) 38 { 39 ds = sqlhelper.ExecuteDataSet("select * from tb_student_course"); 40 dt = ds.Tables[0]; 41 dataGridView1.DataSource = dt; 42 dataGridView1.Columns["sc_id"].DisplayIndex = 0; 43 } 44 private void 管理员信息ToolStripMenuItem_Click(object sender, EventArgs e) 45 { 46 ds = sqlhelper.ExecuteDataSet("select * from tb_admin"); 47 dt = ds.Tables[0]; 48 dataGridView1.DataSource = dt; 49 } 50 //添加按钮事件 51 private void btn_insert_Click(object sender, EventArgs e) 52 { 53 if (dataGridView1.Columns[0].HeaderText=="student_num") 54 { 55 string sql = @"insert tb_student (student_num,student_name,student_password,student_sex 56 ,student_age,student_dept)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + 57 dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value 58 + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[4].Value 59 + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[5].Value + "')"; 60 sqlhelper.ExecuteNoQuery(sql); 61 62 } 63 else if (dataGridView1.Columns[0].HeaderText=="course_num") 64 { 65 string sql = @"insert tb_course (course_num,course_name,course_credit,course_semester)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "')"; 66 sqlhelper.ExecuteNoQuery(sql); 67 } 68 else if (dataGridView1.Columns[0].HeaderText=="sc_id") 69 { 70 try 71 { 72 string sql = @"insert tb_student_course (sc_id,student_num,course_num,grade)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "')"; 73 sqlhelper.ExecuteNoQuery(sql); 74 } 75 catch (Exception) 76 { 77 MessageBox.Show("学号或姓名不存在,请重新添加。"); 78 } 79 80 } 81 else if (dataGridView1.Columns[0].HeaderText == "admin_id") 82 { 83 string sql = @"insert tb_admin (admin_id,admin_name,admin_password,remark)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value + "')"; 84 sqlhelper.ExecuteNoQuery(sql); 85 } 86 MessageBox.Show("添加成功"); 87 } 88 //更新按钮事件 89 private void btn_update_Click(object sender, EventArgs e) 90 { 91 if (dataGridView1.Columns[0].HeaderText == "student_num") 92 { 93 update("tb_student","student_num"); 94 } 95 else if (dataGridView1.Columns[0].HeaderText == "course_num") 96 { 97 update("tb_course","course_num"); 98 } 99 else if (dataGridView1.Columns[0].HeaderText == "admin_id") 100 { 101 update("tb_admin","admin_id"); 102 } 103 else if (dataGridView1.Columns[0].HeaderText == "sc_id") 104 { 105 try 106 { 107 update("tb_studnet_course","sc_id"); 108 } 109 catch (Exception) 110 { 111 MessageBox.Show("学号或课程号不存在,请重新输入"); 112 throw; 113 } 114 } 115 } 116 //更新方法 117 private void update(string table,string head_id) 118 { 119 for (int i = 0; i < dataGridView1.RowCount; i++) 120 { 121 int id = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value); 122 for (int j = 1; j < dataGridView1.ColumnCount; j++) 123 { 124 if (dataGridView1.Columns[j].Visible == true) 125 { 126 string columnName = dataGridView1.Columns[j].Name.ToString(); 127 string sql = "update " + table + " set " + columnName + "='" + dataGridView1.Rows[i].Cells[j].Value + "' where " + head_id + "='" + id + "'"; 128 sqlhelper.ExecuteNoQuery(sql); 129 } 130 } 131 } 132 MessageBox.Show("更新成功"); 133 } 134 135 //删除事件 136 private void btn_delete_Click(object sender, EventArgs e) 137 { 138 if (dataGridView1.Columns[0].HeaderText == "student_num") 139 { 140 string sql = "delete from tb_student where student_num='" + dataGridView1.SelectedCells[0].Value + "'"; 141 sqlhelper.ExecuteNoQuery(sql); 142 } 143 else if (dataGridView1.Columns[0].HeaderText == "course_num") 144 { 145 string sql = "delete from tb_course where course_num='" + dataGridView1.SelectedCells[0].Value + "'"; 146 sqlhelper.ExecuteNoQuery(sql); 147 } 148 else if (dataGridView1.Columns[0].HeaderText == "sc_id") 149 { 150 string sql = "delete from tb_student_course where sc_id='" + dataGridView1.SelectedCells[0].Value + "'"; 151 sqlhelper.ExecuteNoQuery(sql); 152 } 153 else if (dataGridView1.Columns[0].HeaderText == "admin_id") 154 { 155 string sql = "delete from tb_admin where admin_id='" + dataGridView1.SelectedCells[0].Value + "'"; 156 sqlhelper.ExecuteNoQuery(sql); 157 } 158 MessageBox.Show("删除成功"); 159 } 160 161 //界面载入显示身份和登录时间 162 private void main_Load(object sender, EventArgs e) 163 { 164 lbl_username.Text = "Welcome," + login.GlobelValue + ""; 165 lbl_logintime.Text ="登录时间:" +DateTime.Now.ToString()+""; 166 } 167 } 168 }
3.学生界面
界面预览:
个人信息显示:在这个界面,学生能看到自己的信息,并进行修改操作。
代码:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace sql_homework_end 12 { 13 public partial class studnet : Form 14 { 15 public studnet() 16 { 17 InitializeComponent(); 18 } 19 20 DataSet ds = new DataSet(); 21 DataTable dt = new DataTable(); 22 private void studnet_Load(object sender, EventArgs e) 23 { 24 lbl_username.Text = "Welcome," + login.GlobelValue + ""; 25 lbl_logintime.Text = "登录时间:" + DateTime.Now.ToString() + ""; 26 27 28 } 29 //相关信息显示 30 private void 个人信息ToolStripMenuItem_Click(object sender, EventArgs e) 31 { 32 ds = sqlhelper.ExecuteDataSet("select * from tb_student where student_name='" + login.GlobelValue + "'"); 33 dt = ds.Tables[0]; 34 dataGridView1.DataSource = dt; 35 btn_update.Visible = true; 36 btn_insert.Visible = false; 37 btn_delete.Visible = false; 38 } 39 40 private void 课程信息ToolStripMenuItem_Click(object sender, EventArgs e) 41 { 42 43 ds = sqlhelper.ExecuteDataSet("select * from tb_course"); 44 dt = ds.Tables[0]; 45 dataGridView1.DataSource = dt; 46 btn_update.Visible = false; 47 btn_insert.Visible = false; 48 btn_delete.Visible = false; 49 } 50 51 private void 选课管理ToolStripMenuItem_Click(object sender, EventArgs e) 52 { 53 54 ds = sqlhelper.ExecuteDataSet(@"select sc.sc_id,s.student_num,c.course_num,c.course_name,grade 55 from tb_student_course sc join tb_student s on sc.student_num=s.student_num 56 join tb_course c on sc.course_num=c.course_num 57 where s.student_name = '" + login.GlobelValue + "'"); 58 dt = ds.Tables[0]; 59 dataGridView1.DataSource = dt; 60 dataGridView1.Columns["sc_id"].DisplayIndex = 0; 61 btn_update.Visible = false; 62 btn_insert.Visible = true; 63 btn_delete.Visible = true; 64 } 65 //学生选课功能 66 private void btn_insert_Click_1(object sender, EventArgs e) 67 { 68 if (Convert.ToInt32(dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[4].Value) > 0) 69 { 70 MessageBox.Show("不准填写成绩"); 71 } 72 else 73 { 74 string sql = @"insert tb_student_course (sc_id,student_num,course_num)values('" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[0].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[1].Value + "','" + dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value + "')"; 75 sqlhelper.ExecuteNoQuery(sql); 76 MessageBox.Show("选课成功"); 77 } 78 } 79 //删除选的课程 80 private void btn_delete_Click(object sender, EventArgs e) 81 { 82 string sql = "delete from tb_student_course where sc_id='" + dataGridView1.SelectedCells[0].Value + "'"; 83 sqlhelper.ExecuteNoQuery(sql); 84 MessageBox.Show("删除成功,请重新选课。"); 85 } 86 //更新个人信息 87 private void btn_update_Click(object sender, EventArgs e) 88 { 89 update("tb_student", "student_num"); 90 } 91 private void update(string table, string head_id) 92 { 93 for (int i = 0; i < dataGridView1.RowCount; i++) 94 { 95 int id = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value); 96 for (int j = 1; j < dataGridView1.ColumnCount; j++) 97 { 98 if (dataGridView1.Columns[j].Visible == true) 99 { 100 string columnName = dataGridView1.Columns[j].Name.ToString(); 101 string sql = "update " + table + " set " + columnName + "='" + dataGridView1.Rows[i].Cells[j].Value + "' where " + head_id + "='" + id + "'"; 102 sqlhelper.ExecuteNoQuery(sql); 103 } 104 } 105 } 106 MessageBox.Show("更新成功"); 107 } 108 109 } 110 }
最后,写得有点乱啊。看不懂的话,可以看源码。