这是一个小小的学籍管理系统,分享给大家。本人是小白一枚,有什么问题大家可以提出来。
#目的
如今,学校的现代化管理下,学生的学籍管理显得至关重要。其中学籍内容也成为学校管理的一部分。因此,我们需要一个比较完善的学籍管理系统,为用户提供重要的信息和可查询的内容。我们小组设计的学籍管理系统,不仅可以对学生的基本信息进行查询管理,管理员还可以对系统的基础数据进行管理,对学籍信息进行维护等功能。
开发平台:Microsoft Windows 10
开发工具:采用数据库SQL SERVER和Visual Studio 2017来进行系统开发。
2.3需求规定:
该系统能基本完成学生学籍管理的基本要求。我们考虑一个学生学籍管理系统,应与题目相结合,具备支持两种不同用户,其中管理员可以对系统的基础数据进行管理,对学籍信息进行维护;学生用户可以维护个人信息,查询专业、成绩等信息。
设计要求:
- 支持两种不同用户,学生和管理员
- 学生的功能包括:
①学生可以登录查看自己的个人信息、专业信息、院系信息、以及自己各个学期的课程成绩
②学生可以修改个人的部分信息,比如联系方式
③学生可以修改个人登录系统的密码 - 管理员的功能包括:
①管理员登录可以查看所有学生的信息
② 管理员可以对学生信息进行删除、添加、修改等操作
③ 学生成绩管理:管理员根据学生的成绩,以学号和姓名为条件,添加学生的成绩
详细设计
1.登录界面
2.账号信息
(1)用户名:从数据库导入相关数据与所输入匹配
(2)密码: 从数据库导入相关数据与所输入匹配
(3)验证码:随机生成验证码进行验证
(4)人脸识别:利用百度云人脸识别函数进行验证登录。
3.登录人类型
(1)管理员:输入正确的信息后,跳转到管理员界面。
(2)专业负责人:输入正确的信息后,跳转到专业负责人界面。
(3)教师:输入正确的信息后,跳转到教师界面。
(4)学生:输入正确的信息后,跳转到学生界面。
4.功能按键
(1)登录:跳转到相应的登录界面
(2)取消:撤销跳转
3. 系统设计
3.1总体设计
3.1.1基本思路:
总体设计的目的就是要回答“概括地说,系统应该如何去实现?”对于这个问题,结合自身的选题,也就是需要我们设计出一个完善的模型,让程序员与软件设计人员清楚学生管理系统的系统结构和软件结构。
3.1.2遇到的问题:
1.在使用数据库插入语句的时候,发现自己按所学的sql语句在sql编译器来插入有些不一样。
解决办法:例如:“select * from YONGHU where LEIBIE=‘管理员’and YNO=’” + textBox1.Text.Trim() + “‘and YMIMA=’” + textBox2.Text.Trim() + “’”;极其要注意单双引号的输入匹配。我输错好几次。
方法二:在web课时,跟林老师学了在vs中直接添加数据库,在解决方案组中直接创建数据库也可。随后给它创建表,以及添加相关属性。
2.一开始自己不会如何用C#SQL连接数据库,弄了好久都不行,后面查阅相关资料才得以决,还有数据库我也不知如何设计,后面需参考数据库这本书。
解决方法:参阅了网上的相关资料和这学期学的数据库这本书籍,慢慢发现它有一些方法与格式,模仿它就慢慢可以做出来。需要用心和仔细。如:SqlConnection conn = new SqlConnection(“Data Source=DESKTOP-B4TQ3K9(服务器);Initial Catalog=xueshengguanli(数据库名字);Integrated Security=True”);这是链接数据库的关键代码。
3.还有自己想添加媒体文件播放。但是不知选择什么类型控件。后面查找相关资料发现直接添加window的播放器。同时得加上openFileDialog1这个控件。
解决方法:添加了一个任务栏,有打开和退出的功能。
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
axWindowsMediaPlayer1.URL = openFileDialog1.FileName;
}
-
还有想设计验证码来验证,我知道的运用用到图片的控件,在图片里面增加随机数或随机字母。后面肯定要到Random()方法。但是图片一开始加载不了随机数。
解决方法:新增一个timer的控件用它来实现。private void timer1_Tick(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(120, 120);
Graphics g = Graphics.FromImage(bmp);for (int i = 0; i < 5; i++) { String[] fonts = { "微软雅黑", "宋体", "黑体", "隶书", "仿宋" };//随机设置字体的样式 Point p = new Point(i * 15, 0); Color[] colors = { Color.Red, Color.Pink, Color.Black, Color.Gray, Color.GreenYellow };//随机设置字体的颜色 g.DrawString(arr[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p);//画图 } for (int i = 0; i < 100; i++)//画出声燥线 { Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height)); Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height)); g.DrawLine(new Pen(Brushes.Green), p1, p2); } PictureBox1.Image = bmp; }
3.2功能设计
功能框图(流程图)
1.数据处理与任务需求
下面列出的是学生管理数据库应用应该支持的事务。
(1) 数据应该能够支持下述维护事务。
a) 创建和维护学校内学生的详细信息。
b) 创建和维护学校内课程的详细信息。
(2) 数据应该能够支持下述查询事务
a) 以报表形式列出学生的姓名,学号及其他详细信息
b) 以报表形式列出专业的名称、专业号及其他详细信息
c) 以报表形式列出课程的名称、课程号及其他详细信息
d) 列出某一给定学生的课程及成绩
e) 列出某一专业的课程信息
#功能设计
#测试页面
<2>登录表界面窗口实现的功能。
智能人脸识别的功能实现,调用百度云智能的人脸识别函数,实现智能人脸识别,人脸识别库有学生,老师,管理员,专业负责人
百度云人脸识别库的用户组如下:
学生界面窗口实现的功能
如查询成绩,查寻个人信息,修改密码的功能。最终显示在dataGridView中显示所查询的具体数据。
教师界面窗口实现的功能
如查询成绩,用学号查询学生个人信息中的课程号和成绩等,查询教师本人信息,修改密码的功能。最终显示在dataGridView中显示所查询的具体数据。
管理员界面窗口实现的功能
在学生栏(groupBox1)中实现学生注册和查询学生,修改信息、删除信息等功能。在教师栏(groupBox2)中实现教师注册和查询教师等功能,学生成绩管理(groupBox3)中对学生成绩的管理。最终显示在dataGridView中显示所查询的具体数据。
专业负责人界面窗口实现的功能
如查询本专业课,本专业学生,本专业教师,专业负责人等功能,最终显示在dataGridView中显示所查询的具体数据。
满意度评测(Satisfaction)窗口和学校(School)窗口
如有三幅图,好,一般,不好。可以点击它。三个次数不同触发能量条到满时,School窗口的彩蛋视频将会弹出。
##部分数据库截图
<1>数据库上各个表的数据,下面所列的图在vs2017中截取。
(1)学生表Student(学号SNO,姓名SNAME,性别TSEX,出生日期SBIRTHDAY,民族SNATIVE,所在专业编号SDEPTNO,指导老师编号STEACHERRNO,电话STEL,家庭住址SADDRESS,备注信息SNOTE)
#部分源码
登录界面上验证码的关键实现与代码:
From1的加载项:
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
int rn = r.Next(0, 10);
arr += rn;
}
}
PictureBox1_Click的点击事件,也就是随机数显示的图
private void PictureBox1_Click(object sender, EventArgs e)
{
arr = null;
for (int i = 0; i < 5; i++)
{
int rn = r.Next(0, 10);
arr += rn;
}
}
用Timer1_Tick计时器的触发事件
private void timer1_Tick(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(120, 120);
Graphics g = Graphics.FromImage(bmp);
for (int i = 0; i < 5; i++)
{
String[] fonts = { "微软雅黑", "宋体", "黑体", "隶书", "仿宋" };//随机设置字体的样式
Point p = new Point(i * 15, 0);
Color[] colors = { Color.Red, Color.Pink, Color.Black, Color.Gray, Color.GreenYellow };//随机设置字体的颜色
g.DrawString(arr[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p);//画图
}
for (int i = 0; i < 100; i++)//画出声燥线
{
Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
g.DrawLine(new Pen(Brushes.Green), p1, p2);
}
PictureBox1.Image = bmp;
}
```csharp
FORM1//学生信息管理系统登录界面
namespace C
{
public partial class Form1 : Form
{
SqlConnection conn = new SqlConnection("Data Source=DESKTOP-B4TQ3K9;Initial Catalog=xueshengguanli;Integrated Security=True");
static public string sn, sub;
String arr = "";//全局变量
Random r = new Random();//全局对象
string str = "Data Source=DESKTOP-B4TQ3K9;Initial Catalog=xueshengguanli;Integrated Security=True";
//创建连接对象的变量
public Form1()
{
InitializeComponent();
}
Form2 fr2 = new Form2(); Form3 fr3 = new Form3(); Form4 fr4 = new Form4(); Form5 fr5 = new Form5();
private void dl_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(str);
// 执行对数据表中数据的增加、删除、修改操作
conn.Open();
if (textBox1.Text == "" || textBox2.Text == "")
MessageBox.Show("请不要遗漏信息!");
if (arr != textBox_Code.Text.Trim())
{
MessageBox.Show("验证码输入错误");
}
if (gly.Checked)
{
string cstr = "select * from YONGHU where LEIBIE='管理员'and YNO='" + textBox1.Text.Trim() + "'and YMIMA='" + textBox2.Text.Trim() + "'";
SqlCommand comm = new SqlCommand(cstr, conn);
SqlDataReader dr = comm.ExecuteReader();//尽快可能对数据库进行查询并得到结果
if (dr.Read()&& arr == textBox_Code.Text.Trim())
{
sn = textBox1.Text.Trim();
Form4 fm = new Form4();
fm.Show();
fr4.Show(); this.Visible = false;
}
else
{
MessageBox.Show("输入有误,请重新输入!");
textBox1.Text = ""; textBox2.Text = "";textBox_Code.Text = "";
}
}
if (js.Checked)
{
string cstr = "select * from YONGHU where LEIBIE='教师'and YNO='" + textBox1.Text.Trim() + "'and YMIMA='" + textBox2.Text.Trim() + "'";
SqlCommand comm = new SqlCommand(cstr, conn);
SqlDataReader dr = comm.ExecuteReader();
if (dr.Read() && arr == textBox_Code.Text.Trim())
{ sn = textBox1.Text.Trim(); fr3.Show(); this.Visible = false; }
else
{
MessageBox.Show("输入有误,请重新输入!");
textBox1.Text = ""; textBox2.Text = ""; textBox_Code.Text = "";
}
}
if (xs.Checked)
{
string cstr = "select * from YONGHU where LEIBIE='学生'and YNO='" + textBox1.Text.Trim() + "'and YMIMA='" + textBox2.Text.Trim() + "'";
SqlCommand comm = new SqlCommand(cstr, conn);
SqlDataReader dr = comm.ExecuteReader();
if (dr.Read() && arr == textBox_Code.Text.Trim())
{ sn = textBox1.Text.Trim(); fr2.Show(); this.Visible = false; }
else
{
MessageBox.Show("输入有误,请重新输入!");
textBox1.Text = ""; textBox2.Text = ""; textBox_Code.Text = "";
}
}
if (zyfzr.Checked)
{
string cstr = "select * from YONGHU where LEIBIE='专业负责人'and YNO='" + textBox1.Text.Trim() + "'and YMIMA='" + textBox2.Text.Trim() + "'";
SqlCommand comm = new SqlCommand(cstr, conn);
SqlDataReader dr = comm.ExecuteReader();
if (dr.Read() && arr == textBox_Code.Text.Trim())
{ sn = textBox1.Text.Trim(); fr5.Show(); this.Visible = false; }
else
{
MessageBox.Show("输入有误,请重新输入!");
textBox1.Text = ""; textBox2.Text = ""; textBox_Code.Text = "";
}
}
conn.Close(); conn.Dispose();
}
private void qx_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
int rn = r.Next(0, 10);
arr += rn;
}
}
private void PictureBox1_Click(object sender, EventArgs e)
{
arr = null;
for (int i = 0; i < 5; i++)
{
int rn = r.Next(0, 10);
arr += rn;
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
Satisfaction satisfaction = new Satisfaction();
satisfaction.Show();
}
private void buttonface_Click(object sender, EventArgs e)
{
useCamera useCamera = new useCamera();
useCamera.Show();
}
private void timer1_Tick(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(120, 120);
Graphics g = Graphics.FromImage(bmp);
for (int i = 0; i < 5; i++)
{
String[] fonts = { "微软雅黑", "宋体", "黑体", "隶书", "仿宋" };//随机设置字体的样式
Point p = new Point(i * 15, 0);
Color[] colors = { Color.Red, Color.Pink, Color.Black, Color.Gray, Color.GreenYellow };//随机设置字体的颜色
g.DrawString(arr[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p);//画图
}
for (int i = 0; i < 100; i++)//画出声燥线
{
Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
g.DrawLine(new Pen(Brushes.Green), p1, p2);
}
PictureBox1.Image = bmp;
}
}
}
`
#END
好好学习吧,利用好平时课余时间,慢慢补上来,一些不懂的知识,还有需要了解更多的前沿知识。
附上小视频
学生学籍管理系统