实验3.选课系统

实验3.选课系统

代码包位置:
https://download.csdn.net/download/weixin_50836014/85970249

由VS实现,链接中的压缩包包含整个工程文件和实验报告。

实验环境:
Windows10
Microsoft SQL Server Management Studio 2019
Visual Studio 2019
PowerDesigner(用于数据库模型设计,可用可不用,但是强烈推荐使用)

实验报告:

一、实验要求

设计数据库,基本信息包括学生、课程、教师,学生从已分配教师的课程列表中选择相应的课程(课程列表项信息包括:课程名称、学分、授课教师、授课时间等,可以手工录入已分配教师、上课时间的课程列表信息)。
选课规则:每个学生最少选择3门课程,学分高于8学分,最多可以选择5门课程,学分不超过12学分。
实现下列功能:
(1)录入学号,自动显示学生姓名。
(2)在可选择课程列表上方显示已选择的课程列表,可以从已选择的课程列表中删除已选择的课程。
(3)显示可选择的课程列表(不包含已选择的课程),可以按规则选择3-5门课程,选择的课程自动从可选课程列表中移至已选课程列表。
(4)显示当前学生选择的课程数量、总学分。
(5)可以临时保存学生选择的课程信息,如果符合选课规则(3-5门、学分:8-12学分),则可提交选课结果。

二、SQL Server 数据库设计

数据库中一共有三个表:学生、课程、选课列表
1.“学生”表:

2.“课程”表:

在这里插入图片描述

3.“选课列表”

其物理数据模型如图:
在这里插入图片描述

在数据库中插入若干用例:

insert into 学生(姓名,学号,密码)

	values('张三','1120191011','123456'),

		  ('李四','1120201516','123456'),

		  ('王五','1120192421','123456'),

		  ('孙六','1120200046','123456'),

		  ('周七','1120191525','123456');



insert into 课程

	values	('课程01','20210101',2 ,'讲师01','2021-09-11'),

			('课程02','20210102',3 ,'讲师02','2021-09-12'),

			('课程03','20210103',2 ,'讲师03','2021-09-17'),

			('课程04','20210104',3 ,'讲师04','2021-09-28'),

			('课程05','20210105',3 ,'讲师05','2021-09-30'),

			('课程06','20210106',2 ,'讲师06','2021-10-05'),

			('课程07','20210107',2 ,'讲师07','2021-10-10'),

			('课程08','20210108',3 ,'讲师08','2021-09-17'),

			('课程09','20210109',2 ,'讲师09','2021-09-28'),

			('课程10','20210110',2 ,'讲师10','2021-10-24'),

			('课程11','20210111',3 ,'讲师11','2021-10-10');



insert into 选课列表

		values       ('20210101','1120191525'),

				('20210102','1120192421'),

				('20210109','1120191011'),

				('20210102','1120191011'),

				('20210110','1120200046'),

				('20210105','1120201516'),

				('20210107','1120200046');

三、Visual Studio 页面设计与功能实现

此处一共有两个页面,分别是”登录页面“和”选课页面“。

在这里插入图片描述

在这里插入图片描述

1.登录页面

输入密码时,将密码显示为“ * ”

private void textBox2_TextChanged(object sender, EventArgs e)

        {

            this.textBox2.PasswordChar = '*';

        }

输入完信息后,点击登录,系统在数据库中匹配信息,如果学号或密码不匹配,则返回相应提示

private void button1_Click(object sender, EventArgs e)
        {
            string sid = this.textBox1.Text;
            string password = this.textBox2.Text;
            
            if (sid.Equals("") || password.Equals(""))  
            {
                MessageBox.Show("学号或密码不能为空!");
            }
            else
            {
                SqlConnection SqlCon = null;
                string connectionString = "server=.;database=course;Trusted_Connection=SSPI";
                SqlCon = new SqlConnection(connectionString); 	//数据库连接
                SqlCon.Open();

                //在数据库中查找输入的信息是否正确
                string sql = "Select * from 学生 where 学号='" + sid + "' and 密码='" + password + "' ";   
                SqlCommand cmd = new SqlCommand(sql, SqlCon);
                cmd.CommandType = CommandType.Text;
                SqlDataReader sdr = cmd.ExecuteReader();

                //输入的信息正确
                if ( sdr.Read() )
                {
                    // MessageBox.Show("登录成功");
                    Message1 = sdr[0] + "同学,欢迎登录选课系统!";
                    Form2 fm2 = new Form2();
                    fm2.Show();
                }
                else
                {
                    MessageBox.Show("学号或密码错误");
                }
                SqlCon.Close();
            }
        }

在这里插入图片描述

2.选课页面

成功登录后,最上方会显示“学生姓名+同学,欢迎登录选课系统!”
已选课程的dataGridView1会实时显示该同学已选择的课程,可选课程的dataGridView2会实时显示未选择的课程。
在这里插入图片描述

(1)退课

单击选中“已选课程”中的一门棵,再点击“退课”按钮,已选课程表中该课程消失,同时已选课程数和已选总学分也会实时刷新。
在这里插入图片描述

(2)选课

单击选中“可选课程”中的一门棵,再点击“选课”按钮,“可选课程”表中该课程消失,“已选课程”表中出现该门课程,同时已选课程数和已选总学分也会实时刷新。

在这里插入图片描述

提示:不管是选课还是退课,系统都不会对数据库进行增、删、改、查等操作,只是两个dataGridView图表会进行实时更新,只有选择的课程符合要求并点击“确认提交”,才会对数据库进行操作。

(3)提交选课结果

点击“确认提交”按钮,系统会判断所选课程是否符合要求:3-5门课、8-12学分。
如果符合选课要求,则会向数据库的“选课列表”中插入相关信息,同时弹出“提交成功”的消息框。
在这里插入图片描述

  if (Sum_course >= 3 && Sum_credit >= 8 && Sum_course <= 5 && Sum_credit <= 12)
            {
                //退课删除
                int num_lines = 0;
                string sql_delete = "delete from 选课列表 where 学号 = '"+sid+"'";
                sql_delete = string.Format(sql_delete, sid);
                Conn.Open();
                Debug.WriteLine(sql_delete);
                SqlCommand cmd_delete = new SqlCommand(sql_delete, Conn);
                num_lines = cmd_delete.ExecuteNonQuery();
                if (num_lines == -1)
                {
                    MessageBox.Show("删除失败");
                }
                Conn.Close();
                
                //选课插入
                for (int i = 0; i < Course_selected.Rows.Count; i++)
                {
                    string cid = Course_selected.Rows[i]["课程编号"].ToString();
                    string sql_insert = "insert into 选课列表 values('"+cid+"','"+sid+"')";
                    sql_insert = string.Format(sql_insert, sid, cid);
                    Conn.Open();
                    Debug.WriteLine(sql_insert);
                    SqlCommand cmd_insert = new SqlCommand(sql_insert, Conn);
                    num_lines = cmd_insert.ExecuteNonQuery();
                    if (num_lines == -1)
                    {
                        MessageBox.Show("录入失败!");
                    }
                    Conn.Close();
                }
                MessageBox.Show("提交成功");
            }

//如果不符合要求,则返回相应的提示。

	else if (Sum_course < 3)
            {
                MessageBox.Show("所选课程过少!");
            }
     else if (Sum_course > 3)
            {
                MessageBox.Show("所选课程过多!");
            }
            else if (Sum_credit < 8)
            {
               MessageBox.Show("课程总学分偏低!");
            }
            else if (Sum_course > 15)
            {
                MessageBox.Show("课程总学分过高!");
            }

四、总结

代码包位置:
https://download.csdn.net/download/weixin_50836014/85970249


更多资源

北京理工大学—计算机专业课程资源https://blog.csdn.net/weixin_50836014/article/details/125687455

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只野指针.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值