实验3.选课系统

2023-05-16

实验3.选课系统

文章目录

  • 一、实验要求
  • 二、SQL Server 数据库设计
  • 三、Visual Studio 页面设计与功能实现
    • 1.登录页面
    • 2.选课页面
      • (1)退课
      • (2)选课
      • (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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实验3.选课系统 的相关文章

  • SUMO仿真教程(5) —— 使用“XML“语言自定义构建路网

    文章目录 一 简要介绍1 node file2 edge file3 lane definitions xff08 1 xff09 路段细分 xff08 2 xff09 邻近的对向车道 xff08 3 xff09 删除边或车道 4 type
  • SUMO仿真教程(7)—— 交通需求模型介绍

    文章目录 一 简要介绍 xff1a 二 方式一 xff1a 使用行程定义三 方式二 xff1a 使用交通流定义四 方式三 xff1a 使用随机流定义五 方式四 xff1a 使用OD矩阵定义六 方式五 xff1a 使用交叉口流量和转向比定义七
  • STM32 + UCOSII 操作系统(简单讲解)

    前言 这是我将UCOSII操作系统移植在STM32单片机上后进行UCOSII操作系统学习的一些笔记与理解 xff0c 此文最后会附上我自己在UCOSII操作系统下使用STM32写的ESP8266 43 onenet 43 http协议的程序
  • 地下水监测用设备 5G无线数传终端DTU

    地下水监测用设备5G无线数传终端DTU xff0c 实现地下水水位 温度 电导率 水质 孔隙压力等数据传输入库 远程采集 远程监测 曲线及报表可视化管理 地下水监测用5G无线数传终端DTU功能配置 地下水监测用5G无线数传终端负责连接前端采
  • 图解进程线程、互斥锁与信号量-看完不懂你来打我

    在上学的时候 xff0c 老师讲到进程与线程的时候可能是这样讲的 xff1a 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程 xff0c 是操作系统进行资源分配和调度的一个独立单元 xff0c 是应用程序运行的载体 线程
  • MySQL最左匹配原则,道儿上兄弟都得知道的原则

    自MySQL5 5版本起 xff0c 主流的索引结构转为B 43 树 B 43 树的节点存储索引顺序是从左向右存储 xff0c 在检索匹配的时候也要满足自左向右匹配 目录 一 最左匹配原则的原理二 违背最左原则导致索引失效的情况三 查询优化
  • 在STM32下完成基于FreeRTOS的多任务简单程序

    一 为什么要学习 RTOS 在裸机系统中 xff0c 所有的程序基本都是自己写的 xff0c 所有的操作都是在一个无限的大循环里面实现 现实生活中的很多中小型的电子产品用的都是裸机系统 xff0c 而且也能够满足需求 但是为什么还要学习 R
  • 虚拟机连不上网问题及解决

    虚拟机联网主要涉及四个方面的配合 xff1a 网络和共享中心 xff08 物理机 xff09 虚拟网络编辑器 网络适配器 有线连接的更多设置 xff08 相关配置文件 xff09 网络和共享中心 xff1a 提示 xff1a 需要注意的点是
  • linux命令查看系统硬件的版本(dmidecode)

    dmidecode命令 可以让你在Linux系统下获取有关硬件方面的信息 dmidecode的作用是将DMI数据库中的信息解码 xff0c 以可读的文本方式显示 由于DMI信息可以人为修改 xff0c 因此里面的信息不一定是系统准确的信息
  • git 设置代理和取消代理

    本地开启VPN后 xff0c GIt也需要设置代理 xff0c 才能正常略过GFW xff0c 访问goole code等网站 设置如下 xff08 可复制 xff09 xff1a git config global https proxy
  • 上下文切换理解

    1 上下文的理解 上下文是指 xff0c 每次执行前 xff0c 都会使用需要依赖两个环境 xff0c 分别是CPU寄存器 xff08 cpu中容量小但是速度很快的内存 xff09 和程序计数器 xff08 cpu正在执行的程序位置或者是准
  • debian-11版本虚拟机无法登入root账号

    debian11创建虚拟机时我们设置了root账户密码 xff0c 然而在登入时却在未列出中无法登入root账户 xff0c 如图 1 我们登入普通账号 xff0c 这里不提权是无法保存文件的 enter 输入 i 进入编辑模式 在这个位置
  • 整数加减运算的二进制表示

    两位整数的加减都可看做 一个数加上另一个数 xff0c 首先我们要把数据的二进制表示转化成补码 xff0c 因为在计算机内部 xff0c 数据的加减是按补码进行运算的 A补 43 B补 61 A 43 B 补 xff08 mod 2 n 4
  • TCP服务器端、客户端通讯(赋源码)

    实现通讯 xff0c 我们首先要知道是怎么样的一个流程 xff0c 下图是我画的一个通讯流程图 xff1a 一 Linux服务器端 我是在Ubuntu20 04下进行的 xff0c 使用的是C 43 43 xff0c 引入头文件socket
  • 超详细正点原子STM32F429开发板视频教程笔记01

    文章目录 前言一 GPIO入门知识二 寄存器描述和配置方法1 GPIO寄存器 总结 前言 买了一块正点原子阿波罗stm32f429开发板 xff0c 趁暑假有空看看教学视频 xff0c 之前看过一部分所以从GPIO的原理和配置开始写笔记 提
  • 软件测试之项目总结全攻略

    在我们测试工作过程中 xff0c 由于公司业务发展 xff0c 快速迭代等原因 xff0c 我们遇到的项目以小项目居多 更新界面元素 xff0c 上个活动页 xff0c 优化一下原有的功能等等 xff0c 加上事情繁琐 xff0c 任务多
  • 简历中的项目经历可以怎么写?

    概述 工作这10多年来 xff0c 也经常做招聘的工作 xff0c 面试过的人超过50人次了 xff0c 而看过的候选人的简历则有几百份了 xff0c 但是清晰且能突出重点的简历 xff0c 确实很少遇到 这里基本可以说明一个问题 xff0
  • 教你用Python写一个京东自动下单抢购脚本(Python实现京东自动抢购)

    很多朋友都有网购抢购限量商品的经历 有时候蹲点抢怎么也抢不到 今天小编带你们学习怎么用Python写一个京东自动下单抢购脚本 以后再也不用拼手速拼网速啦 快来一起看看吧 1 问题背景 经过无数次抢购失败后 xff0c 发现商家会不定时的放出
  • 千里独行Thousands of miles to ride alone

    关于三国时期有很多流行的故事 其中最著名的就是千里独行 关羽保护二嫂 xff0c 从徐都出发 xff0c 经过五门 xff0c 斩六将 xff0c 终于在古城与刘备 张飞两兄弟重逢 现在 xff0c 你的任务是为关羽找到跑得比兔子还快的兄弟

随机推荐