数据库系统概论大作业试验

摘 要

摘要内容:

学生成绩管理系统主要提供成绩查询,方便管理的网上的信息查阅平台,学生可以通过该系统查阅与自己相关信息(查询成绩、选课、修改密码等)。教师可以通过学生管理系统增、删、改学生信息和成绩,还可以进行选课人数统计及每门课平均成绩查询。系统管理员admin可以添加、删除、修改、教师信息。开发一个学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高了办学效益和现代化水平。为教师和学生提高工作效率,实现学生成绩信息管理工作流程的系统化,规范化和自动化。在今天信息时代传统的管理方法必然会被计算机为基础的信息管理系统所代替,一个高效的学生成绩管理系统可以存储历届的学生成绩档案,不需要大量的人力,只需要几名专门录入员即可操作系统,节省大量人力,可以迅速查到所需信息、高效、安全、学生在能方便的查看自己的成绩。

关键词:学生成绩管理系统, SQL, C#, 阅览


一、需求分析

学生成绩管理系统主要提供成绩查询,方便管理的网上的信息查阅平台,学生需要通过该系统查阅与自己相关信息(查询成绩、选课、修改密码等)。教师需要通过学生管理系统增、删、改学生信息和成绩,还可以进行选课人数统计及每门课平均成绩查询。系统管理员admin需要添加、删除、修改、教师信息。新增了验证码及MD5加密功能,三种身份登录后都能通过系统中退出按钮直接终止程序。
在这里插入图片描述


二、系统分析与设计
(一)E-R图
在这里插入图片描述

(二)关系模型
学生(学号,姓名,班级,出生日期,籍贯,密码)
老师(老师号,姓名,职称,密码)
课程(课程编号,课程名称,任课老师,学分)
选课(学号,课程编号)
选课(学号,课程编号,课程名称,成绩)

三、系统实现
(一)建立数据库
在这里插入图片描述

创建的表如下:

Student表
在这里插入图片描述

Teacher表
在这里插入图片描述

Course表
在这里插入图片描述

CourseRecord表
在这里插入图片描述

CourseGrade表
在这里插入图片描述

usertable表
在这里插入图片描述
(二)连接数据库
通过封装一个Dao类,创建Dao类对象来连接数据库,进行读出与写入操作。

(三)程序界面效果

1.按钮
当光标指到按钮上时,按钮显示高亮。

2.界面
登录成功时,图片会从左到右平移到中央消失,消失后显示对应权限相关的操作界面。

3.时间
右下角显示的时间与系统时间一致,其中包括年月日时分秒。

(四)限制条件
1.设置了文本框的最大长度。

2.选课、退课系统只会显示Course表中有的课程

3.调用dataGridView1.Rows.Clear()语句,刷新后不会显示重复数据

(五)登录系统
1.登录的判定
登录界面如下:
在这里插入图片描述
登录结果的判定过程:读取文本框中内容时用Trim()去除空格等空白字符,将处理后的字符串与数据库中的数据进行比对。登录失败时会弹出对应错误的对话框,选择正确选项后对话框自动关闭,等待用户输入。

在这里插入图片描述
相关代码:MessageBox.Show(“输入不完整,请检查”, “提示”, MessageBoxButtons.OK, MessageBoxIcon.Warning);

2.图片验证码
通过初始化随机种子,然后随机颜色和字符即可。创建Bitmap类对象bmp,用Graphics类对象g在bmp上画图,最后将图片bmp放在textbox上(pictureBox2.Image = bmp;)。点击图片或“看不清,换一张”的时候就可以刷新验证码了。
在这里插入图片描述

3.账号密码进行MD5加密
使用C#中的EncryptWithMD5(string source)方法可以进行MD5加密,点击写入后,会将账号和加密成MD5格式的密码存到usertable表中。
在这里插入图片描述

(六)学生选课系统

1.查看个人成绩
登录成功时将对应学生的学号传给学生选课系统,用select语句(string sql = “select* from CourseGrade where sId=’”+SID+"’";)将满足条件的结果输出到我的成绩界面。
在这里插入图片描述

2.查看已选的课
将对应学号传给我的选课,我的选课中的Table()方法让数据投影到DataGridView上。
在这里插入图片描述
3.选课\退课
使用dataGridView1.SelectedCells[0].Value.ToString()获取选中的课程号,调用select语句判断将要插入的选课是否与CourseRecord中重复,不重复则插入。
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

退课时调用delete删除选中的一行数据库对应的元组,然后调用Table()方法显示新的数据。

(七)学生管理系统

1.学生信息的增删改
增改操作时显示如下界面

在这里插入图片描述
选中一行进行删除操作,删完后自动刷新显示新的数据。

2.评定学生成绩
点击确认按钮后修改或初次评定操作成功。
在这里插入图片描述
3.选课人数统计
关键语句:select cId,Course.Name,count(cId) number from CourseRecord,Course where Course.Id=cId Group by cId,Course.Name;

在这里插入图片描述

SQL执行结果:
在这里插入图片描述4.每门课的平均成绩
关键语句:select cId,cName,avg(grade) avgrade from CourseGrade Group by cId,cName
SQL执行结果:
在这里插入图片描述在这里插入图片描述

四、总结
本次实验中,我完成ER图到关系模型的转换,也就是完成了从概念模型到逻辑设计的转换,做到了数据库与C#程序的连接与交互,了解到了如何在程序中进行基础的数据库的建立,表的建立与视图的建立,通过对程序的大量调试,改bug能力得到了较大程度的提升,没有以前那么无从下手了。在编写程序的过程中,遇到过许多困难,比如由表的外键影响到的表的增删改查、如何将用户信息存入表中等,解决这些问题之后让我更加深入的了解了数据库原理,使我受益匪浅。更重要的是,我对数据库产生了浓厚的兴趣,相信以后会把学到的东西应用到实践中去的。

五、附录(部分源代码)
(一)Dao类

class Dao
{
public SqlConnection connection()
{
string str = “Data Source=DESKTOP-N18UGLC;Initial Catalog=demo;User ID=sa;Integrated Security=true”;
SqlConnection sc = new SqlConnection(str);
sc.Open();//打开数据库链接
return sc;
}
public SqlCommand command(string sql)
{
SqlCommand sc = new SqlCommand(sql,connection());
return sc;
}
//用于delete update insert,返回受影响的行数
public int Excute(string sql)
{
return command(sql).ExecuteNonQuery();
}
//用于select,返回SqlDataReader对象,包含select到的对象
public SqlDataReader read(string sql)
{
return command(sql).ExecuteReader();
}
}

(二)验证码
private void securitycode()
{
//创建图片对象
Bitmap bmp = new Bitmap(130, 50);

        //创建GDI对象
        Graphics g = Graphics.FromImage(bmp);

        Random r = new Random();
        string str = "";
        for (int i = 0; i < 5; i++)
        {
            int rNumber = r.Next(0, 10);
            str += rNumber;
        }

        str1 = str;
        //MessageBox.Show(str);


        //声明5种不同的字体存在数组当中
        string[] fonts = { "微软雅黑", "楷体", "隶书", "仿宋", "华文行云" };

        //声明5种不同的颜色存在数组当中
        Color[] colors = { Color.Red, Color.Yellow, Color.Blue, Color.Pink, Color.Purple };

        //将产生的5个随机数画到bitmap上
        for (int i = 0; i < 5; i++)
        {
            Point p = new Point(i * 20, 5);
            g.DrawString(str[i].ToString(), new Font(fonts[i], 18, FontStyle.Bold), new SolidBrush(colors[i]), p);
        }

        //开始在图上画线
        for (int i = 0; i < 10; 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(Color.Gray), p1, p2);

        }

        //在图上放像素点
        for (int i = 0; i < 50; i++)
        {
            Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height));
            bmp.SetPixel(p1.X, p1.Y, Color.Gold);
        }
        //将图片放在picturebox上
        pictureBox2.Image = bmp;
    }

(三)Table()
//让表显示数据
public void Table()
{
string sql = “select * from Course”;
Dao dao = new Dao();
IDataReader dr = dao.read(sql);
while (dr.Read())
{
string a, b, c, d;
a = dr[“Id”].ToString();
b = dr[“Name”].ToString();
c = dr[“Teacher”].ToString();
d = dr[“Credit”].ToString();
String[] str = { a, b, c, d };
dataGridView1.Rows.Add(str);
}
dr.Close();//关闭连接
}

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值