学生信息管理含选课
中文摘要
为了提高学生综合信息的管理效率,本课题使用C#语言和SQL Server数据库系统开发了一个WinForm类型的学生信息管理及选课系统,以提升教学质量。本系统包含管理员登录、添加学生信息、删除学生信息、查找学生信息、添加课程、修改课程、删除课程、学生根据管理员分配的账号上传自己基本信息、学生选课。
关键词:学生信息管理及选课系统,C#,SQL Server
更多源码和原文档获取:winform之家
1软件可行性研究与项目开发计划
1.1问题定义
1.2可行性分析
1.3进度计划
2.需求分析
2.1引言
2.2功能说明
2.3其他要求
操作系统:Windows10
运行环境:VisualStudio
数据库环境:SQL Server
3.概要设计
3.1功能模块设计
本学生信息管理系统主要为登录注册、添加学生信息、删除学生信息、查找学生信息、修改学生信息等。
系统功能模块图如图3-1所示。
图3-1系统功能模块图
1)登陆注册功能
A.登录:输入用户名和密码登录,验证用户名和密码,进行登录。
B.注册:老师账号后台注册,学生账号老师注册的学号即是学生账号。
2)增删查改功能
A.添加学生信息、课程信息:对学生信息和课程的录入。
B.删除学生信息、课程信息:对学生信息和课程的移除。
C.查找学生信息:查看学生信息(学号查找)。
D.修改课程信息、学生修改自己基本信息:对学生错误信息进行修改。
E.学生选课:对老师发布的课程选课、退课
3.2数据库设计
4.详细设计
4.1总体设计
(1)系统用例图
(2)系统体系结构
(3)E-R图
4.2功能模块详细分析
5.软件编码
5.1登录模块
5-1.1登录窗口
此窗体界面用于老师,学生的登录,老师账号后台注册,学生账号为老师添加的学号
登录窗口设计如下:
private void btn_login_Click(object sender, EventArgs e)
{
if (rdo_student.Checked)
{
if (txt_number.Text.Trim() == "" || txt_password.Text.Trim() == "")
MessageBox.Show("用户名或密码为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
{
User p = new User(txt_number.Text.Trim(), txt_password.Text.Trim());
if (UserManage.ValidataUsera(p))
{
this.Hide();
FormStudentMain mainForm = new FormStudentMain(txt_number.Text);
mainForm.StartPosition = FormStartPosition.CenterScreen;
mainForm.Show();
}
else
{
MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txt_password.Text = "";
}
}
return;
}
if (rdo_teacher.Checked)
{
if (txt_number.Text.Trim() == "" || txt_password.Text.Trim() == "")
MessageBox.Show("用户名或密码为空!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
{
User u = new User(txt_number.Text.Trim(), txt_password.Text.Trim());
if (UserManage.ValidataUser(u))
{
this.Hide();
FormMain mainForm = new FormMain();
mainForm.StartPosition = FormStartPosition.CenterScreen;
mainForm.Show();
}
else
{
MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txt_password.Text = "";
}
}
return;
}
}
5.2教师端学生信息模块设计
5-2学生信息教师端界
此窗体界面用于老师对学生信息的操作,可以注册学生信息,查看学生信息,移除学生。
学生信息教师端界面逻辑设计如下:
private void button1_Click(object sender, EventArgs e)
{
if (!ver.IsStudentCode(txt_Number_Revise.Text))//验证手机号是否正确
{
MessageBox.Show("请输入4位学号!!!");
return;
}
if (!ver.IsChinese(txt_Name_Revise.Text))//验证手机号是否正确
{
MessageBox.Show("姓名为中文哦!!!");
return;
}
if (txt_Name_Revise.Text == "" || txt_Number_Revise.Text == "")
{
MessageBox.Show("请输入基本信息!");
return ;
}
Regex regEx = new Regex("");
if (regEx.Match(txt_Number_Revise.Text).Success)
{
//号码符合规范
}
else
{
//非法号码
}
int Fid = int.Parse(txt_Number_Revise.Text);
string Fname = txt_Name_Revise.Text;
Students stu = new Students { Mid = Fid, Mname = Fname };
bool result = sm.Add(stu);
if (result)
{
MessageBox.Show("添加成功");
GetAll();
}
else
{
MessageBox.Show("添加失败,学号重复!");
}
Clear();
}
private void dataGridView_Revise_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView_Revise.SelectedRows.Count <= 0) //用于判断是否选中了DataGridView中的一行
{
MessageBox.Show("请选中一行进行操作");
return;
}
txt_Number_Revise.Text = dataGridView_Revise.SelectedRows[0].Cells[0].Value.ToString();
txt_Name_Revise.Text = dataGridView_Revise.SelectedRows[0].Cells[1].Value.ToString();
label25.Text = dataGridView_Revise.SelectedRows[0].Cells[2].Value.ToString();
label26.Text = dataGridView_Revise.SelectedRows[0].Cells[3].Value.ToString();
label27.Text = dataGridView_Revise.SelectedRows[0].Cells[4].Value.ToString();
label28.Text = dataGridView_Revise.SelectedRows[0].Cells[5].Value.ToString();
label29.Text = dataGridView_Revise.SelectedRows[0].Cells[6].Value.ToString();
label30.Text = dataGridView_Revise.SelectedRows[0].Cells[7].Value.ToString();
label31.Text = dataGridView_Revise.SelectedRows[0].Cells[8].Value.ToString();
label32.Text = dataGridView_Revise.SelectedRows[0].Cells[9].Value.ToString();
label33.Text = dataGridView_Revise.SelectedRows[0].Cells[10].Value.ToString();
if (dataGridView_Revise.SelectedRows[0].Cells[11].Value.ToString() == "")
{
pictureBox1.Image = null;
}
else
{
bytes = (byte[])dataGridView_Revise.SelectedRows[0].Cells[11].Value;
pictureBox1.Image = System.Drawing.Image.FromStream(new MemoryStream(bytes));
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
}
}
5.3教师端课程模块设计
5-3教师课程发布窗口
此窗体界面用于教师对课程发布,删除,修改。
功能逻辑设计如下:
private void button1_Click(object sender, EventArgs e)
{
try
{
if (!ver.IsNumber(txt_score.Text))
{
MessageBox.Show("非法输入");
return;
}
if (txt_test.Text.Trim().Equals("") || txt_teacher.Text.Trim().Equals("")
|| txt_time.Text.Trim().Equals("") || txt_place.Text.Trim().Equals("") || txt_score.Text.Trim().Equals("") || txt_score.Text.Trim().Equals(""))
{
MessageBox.Show("请输入信息");
return;
}
else
{
//int Fcourse1 = int.Parse(a);
string Funiversity2 = comboBox1.Text;
string Fmajor3 = comboBox2.Text;
string Fclass4 = txt_test.Text;
string Fteacher5 = txt_teacher.Text;
string Ftime6 = txt_time.Text;
string Fplace7 = txt_place.Text;
string Fscore8 = txt_score.Text;
Courses stu = new Courses { Munversity2 = Funiversity2, Mmajor3 = Fmajor3, Mclass4 = Fclass4, Mteacher5 = Fteacher5, Mtime6 = Ftime6, Mplace7 = Fplace7, Mscore8 = Fscore8 };
bool result = sm.Add(stu);
if (result)
{
MessageBox.Show("添加成功");
GetAll();
}
else
{
MessageBox.Show("添加失败,课程编号重复!");
}
Clear();
}
}
catch
{
MessageBox.Show("添加失败");
}
}
5.4学生端信息修改模块设计
5-4学生端信息窗口
此窗体界面用于学生根据老师分配的学号登录系统修改完善自己的信息。
学生端信息界面逻辑设计如下:
private void btnOK_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(strcon);
try
{
if (cboxStuNation.Text.Trim().Equals("") || textBox2.Text.Trim().Equals("")
|| comboBox1.Text.Trim().Equals("") || txtStuContact.Text.Trim().Equals("")
|| txtStuPostCode.Text.Trim().Equals("") || textBox3.Text.Trim().Equals("")
|| txtStuFamilyAddress.Text.Trim().Equals("") || textBox1.Text.Trim().Equals("")
)
{
MessageBox.Show("请输入完整信息");
return;
}
if (!ver.IsHandset(txtStuContact.Text))//验证手机号是否正确
{
MessageBox.Show("手机号不正确!!!");
return;
}
bool result = card.CheckIDCard(textBox3.Text); //验证身份证
if (result)
{
}
else
{
MessageBox.Show("身份证号不正确!!!");
return;
}
if (!ver.IsChinese(txtStuFamilyAddress.Text.Trim())|| !ver.IsChinese(textBox1.Text.Trim()))//验证字符串是否为汉字
{
MessageBox.Show("地址输入的不是中文!!!", "提示");
return;
}
if (!ver.IsPostalcode(txtStuPostCode.Text))//验证邮编格式是否正确
{
MessageBox.Show("邮政编号不正确!!!");
return;
}
string sex = "";
if(radioButton1.Checked)
{
sex = radioButton1.Text;
}
else
{
sex = radioButton2.Text;
}
string str1 = "update BasicInfomation set 姓名=@a,性别=@s,民族=@d,寝室号=@f,政治面貌=@g,联系电话=@h,邮政编码=@j,身份证号=@k,常住地址=@l,户籍地址=@z,学生照片=@x where 学号=@q";
SqlCommand cmd = new SqlCommand(str1, conn);
cmd.Parameters.Add(new SqlParameter("@q", txtStuNo.Text));
cmd.Parameters.Add(new SqlParameter("@a", txtStuName.Text));
cmd.Parameters.Add(new SqlParameter("@s", sex));
cmd.Parameters.Add(new SqlParameter("@d", cboxStuNation.Text));
cmd.Parameters.Add(new SqlParameter("@f", textBox2.Text));
cmd.Parameters.Add(new SqlParameter("@g", comboBox1.Text));
cmd.Parameters.Add(new SqlParameter("@h", txtStuContact.Text));
cmd.Parameters.Add(new SqlParameter("@j", txtStuPostCode.Text));
cmd.Parameters.Add(new SqlParameter("@k", textBox3.Text));
cmd.Parameters.Add(new SqlParameter("@l", txtStuFamilyAddress.Text));
cmd.Parameters.Add(new SqlParameter("@z", textBox1.Text));
cmd.Parameters.Add(new SqlParameter("@x", bytes));
conn.Open();
if (cmd.ExecuteNonQuery() > 0)
MessageBox.Show("保存成功");
}
catch (Exception ex)
{
//MessageBox.Show("失败");
//MessageBox.Show(ex.Message);
MessageBox.Show("请上传照片");
}
finally
{
conn.Close();
}
}
5.5学生选课模块设计
5-5学生选课窗口
此窗体界面用于学生根据老师发布的课程选课,对已选课程退课。
窗口设计如下:
private void btn_sure_Click(object sender, EventArgs e)
{
if (txt_N.Text.Trim().Equals(""))
{
MessageBox.Show("请先选择课程");
return;
}
SqlConnection conn1 = new SqlConnection(strcon);
string str1 = "select count(*) from Stuchoose where 课程编号=@课程编号";
SqlCommand cmd1 = new SqlCommand(str1, conn1);
cmd1.Parameters.Add(new SqlParameter("@课程编号", txt_N.Text));
conn1.Open();
if ((int)cmd1.ExecuteScalar() > 0)
{
MessageBox.Show("课程已选");
return;
}
try
{
string sql = @"insert into Stuchoose (学号,课程编号,学院,专业,课程名称,授课教师,上课时间,教室,学分) values(@学号,@课程编号,@学院,@专业,@课程名称,@授课教师,@上课时间,@教室,@学分)";
using (SqlConnection conn = new SqlConnection(strcon))
{
SqlCommand cmd = new SqlCommand(sql, conn);
//cmd.Parameters.Add(new SqlParameter("@学号", b));
//cmd.Parameters.Add(new SqlParameter("@姓名", c));
cmd.Parameters.Add(new SqlParameter("@学号", SendNameValue));
cmd.Parameters.Add(new SqlParameter("@学院", textBox34.Text));
cmd.Parameters.Add(new SqlParameter("@专业", textBox33.Text));
cmd.Parameters.Add(new SqlParameter("@课程名称", txt_classna.Text));
cmd.Parameters.Add(new SqlParameter("@课程编号", txt_N.Text));
cmd.Parameters.Add(new SqlParameter("@学分", textBox28.Text));
cmd.Parameters.Add(new SqlParameter("@授课教师", textBox31.Text));
cmd.Parameters.Add(new SqlParameter("@上课时间", textBox30.Text));
cmd.Parameters.Add(new SqlParameter("@教室", textBox29.Text));
conn.Open();
if (cmd.ExecuteNonQuery() > 0)
MessageBox.Show("选课成功");
this.FormStuchoose_Load(sender, e);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void FormStuchoose_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = getData();
string a = SendNameValue;
string strsq = string.Format("select * from Stuchoose where 学号={0}",a);
SqlDataAdapter d = new SqlDataAdapter(strsq, strcon);
DataSet dv = new DataSet();
d.Fill(dv);
dataGridView2.DataSource = dv.Tables[0];
this.toolStripStatusLabel1.Text = "当前账号:"+a;
}