学生选课管理系统的设计与开发

一、项目背景

学生选课管理系统是一个学校不可缺少的部分,传统的人工管理档案的方式存在着很多的缺点,如:效率低、保密性差等,所以开发一套综合教务系统管理软件很有必要,它应该具有传统的手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大的提高学校的管理效率,有助于推进学校的信息化建设。

二、技术选型

C#的窗体程序开发

本系统未采用C#实现MDI——多文档窗口,因为考虑到C#的该技术与java类似,而暑期java实训时,曾用过类似的方法做过停车场管理系统,所以想为这次的系统注入一点新鲜的血液,所以本系统设计的主题采用了了C#的C#TreeView 实现。

Sql server数据库

三、需求分析

本系统只有一类用户:管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息;开设课程、查询课程等。

3.1 管理员角色拥有的功能

管理员信息管理

  • 添加管理员信息;
  • 管理员可以添加其他的管理员信息。
  • 修改管理员信息;
  • 管理员可以删除其他的管理员信息。

课程管理

  • 开设课程;
  • 管理员可以录入课程信息,学生就可以浏览到这些课程信息,从而选课。
  • 查询课程;
  • 可以通过学期查询课程,或通过学期和课程结合的方式查询课程。

四、数据库设计

4.1 完成系统中数据表的结构设计

管理员信息表

用户表:UserInfo

字段名称

数据类型

可空

默认值

说明

id

nvarchar(20)

不可

主键,管理员id

name

nvarchar(20)

不可

管理员姓名

pwd

nvarchar(50)

不可

管理员密码

sex

nvarchar(5)

不可

管理员性别

学生选课信息表

管理员信息表:CourseInfo

字段名称

数据类型

可空

默认值

说明

id

int

不可

自动增长

主键,课程id

name

nvarchar(100)

不可

课程名称

kcms

nvarchar(500)

不可

课程描述

xkrq

DATETIME

不可

学生选课日期

xkxs

nvarchar(20)

不可

选课学生

五、界面设计

登录界面:

注册界面:

5.1 管理员角色

管理员界面:

管理员账号添加界面:

选课信息查询界面:

添加选课信息界面:

六、关键技术的介绍

使用模板来搭建框架,减少每个页面的代码量,同时方便修改

具体代码如下:

Site1.Master
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="MySite.Site1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><title>温州理工学院学生选课管理信息系统</title><asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder><style type="text/css">.auto-style1 {height: 90px;}</style></head><body bgcolor="#c0c0c0"><center><form id="form1" runat="server"><div><table width="780" bgcolor="#FFFFFF" border="0" cellpadding="0" cellspacing="0"><tr><td><img src="images/01.gif" width="780" height="120" alt=""></td></tr><tr><td><table border="0" width="100%" cellspacing="0" cellpadding="0" background="images/02.gif"><tr><td height="40" width="180" align="center"><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td><td class="ClassTitle"><asp:Label runat="server" Text="欢迎进入温州理工学院学生选课管理信息系统"></asp:Label>|<asp:Label ID="lbId" runat="server" Text="Label"></asp:Label></td></tr></table></td></tr></table><table width="780" bgcolor="#FFFFFF" border="1" cellpadding="0" cellspacing="0"><tr><td height="450" width="180" valign="top" align="center"><table border="0" width="170" cellspacing="0" cellpadding="0" class="auto-style1"><tr><td><a href="Index.aspx">信息系统用户管理</a></td></tr><tr><td><a href="AddUser.aspx">添加用户</a></td></tr><tr><td><a href="Index2.aspx">学生选课查询</a></td></tr><tr><td><a href="AddSafe.aspx">添加选课信息</a></td></tr></table></td><td height="450px" valign="top" style="padding-top:10px" align="center"><asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder></td></tr></table><table border="0" width="780" cellspacing="0" cellpadding="0"><tr><td background="images/04.gif" height="29" align="center" class="ClassTitle">联系我们&nbsp;&nbsp; <a href="login.aspx">管理员登录</a></td></tr></table></div></form></center>
</body>
</html>Site1.Master.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;namespace MySite
{public partial class Site1 : System.Web.UI.MasterPage{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){                Label1.Text = DateTime.Today.Date.ToString("yyyy年MM月dd日");if (Session["Id"]!=null){lbId.Text = Session["Id"].ToString();}}}}
}
使用自创类来处理每个页面的数据库访问操作

包括:数据库连接、构建数据库查找字符串、对搜索数据进行分类判断、返回封装好的数据对象、对异常数据的冲突处理等

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;namespace MySite
{public class SiteDAL{private SqlConnection sqlcon;private SqlCommand sqlcom;private string strCon = "server=(local);uid=lqc;pwd=123;database=SCMS";public DataSet GetUser(string id, string name ,string sex){string sqlstr = "select * from UserInfo where 1=1 ";if (id != "" && id != null){sqlstr = sqlstr + " And (Id = '" + id + "')";}else{if (name != "" && name != null){sqlstr = sqlstr + " And (Id like '%" + name + "%' Or name like '%" + name + "%')";}}if (sex != "全部"){sqlstr = sqlstr + " And Sex='" + sex + "'";}sqlcon = new SqlConnection(strCon);SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);DataSet myds = new DataSet();sqlcon.Open();myda.Fill(myds, "user");            sqlcon.Close();return myds;}internal int DeleteSafe(string Id){string sqlstr = "delete from CourseInfo where Id='" + Id + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}internal DataSet GetSafe(string id ,string name, DateTime? xkrq){string sqlstr = "select * from CourseInfo where 1=1 ";if (!string.IsNullOrEmpty(id)){sqlstr = sqlstr + " And (Id = " + id + ")";}else{if (name != "" && name != null){sqlstr = sqlstr + " And (Name like '%" + name + "%')";}if (xkrq!=null){sqlstr = sqlstr + " And (xkrq = '" + xkrq.Value.ToString("yyyy-MM-dd") + "')";}}sqlcon = new SqlConnection(strCon);SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);DataSet myds = new DataSet();sqlcon.Open();myda.Fill(myds, "food");sqlcon.Close();return myds;}public int DeleteUser(string Id){string sqlstr = "delete from UserInfo where Id='" + Id + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result= sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int UpdateUser(string id, string name, string pwd ,string sex){string sqlstr = "update UserInfo set name='" + name + "',Pwd='" + pwd + "',Sex='" + sex + "' where Id='" + id + "'";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int AddUser(string id, string name, string pwd, string sex){string sqlstr = "insert into UserInfo(Id,Name,Pwd,Sex)values('" + id + "','" + name + "','" + pwd + "','" + sex + "')";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int UpdateSafe(int id, string name, string kcms, DateTime xkrq, string xkxs){string sqlstr = "update CourseInfo set Name='" + name + "',kcms='" + kcms + "',xkrq='" + xkrq.ToString("yyyy-MM-dd")+ "',xkxs='" + xkxs + "' where Id=" + id;sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}public int AddSafe(string name, string kcms, DateTime xkrq, string xkxs){string sqlstr = "insert into CourseInfo(name,kcms,xkrq,xkxs)values('" + name + "','" + kcms + "','" + xkrq.ToString("yyyy-MM-dd") + "','" + xkxs + "')";sqlcon = new SqlConnection(strCon);sqlcom = new SqlCommand(sqlstr, sqlcon);sqlcon.Open();int result = sqlcom.ExecuteNonQuery();sqlcon.Close();return result;}}
}

七、完成情况总结

经过一周的努力,从一开始不知道从什么地方下手到项目最终成功运行起来,我完成了学生选课信息管理系统的开发与设计。然而我只是设计出了主要的功能,项目还有很多地方可以优化,比如优化数据库的访问速度、增加学生数据库和课程数据库来分别存储不同类型的数据信息等。

在这次大作业项目的开发过程中,我遇到了数不胜数的BUG,但是都通过生科学习到的知识或者上网搜索完美的解决了,我从课堂学习的碎片化的知识中整理出比较系统的知识体系,加上自己的理解,最终写出了这个信息管理系统。从中学习到的模板利用以及代码复用的思想让我获益良多,对以后开发别的项目都有极大的好处。

通过这次实验,使我对软件开发有了更深一步的了解。在软件开发中应注意的问题和考虑的问题都能较好的做到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89706.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89706.shtml
英文地址,请注明出处:http://en.pswp.cn/web/89706.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

垃圾回收(GC)

内存管理策略&#xff0c;在业务进程运行的过程中&#xff0c;由垃圾收集器以类似守护协程的方式在后台运行&#xff0c;按照指定策略回收不再被使用的对象&#xff0c;释放内存空间进行回收 优势&#xff1a; 屏蔽内存回收的细节&#xff1a;屏蔽复杂的内存管理工作&#xff0…

Datawhale AI夏令营-机器学习

比赛简介 「用户新增预测挑战赛」是由科大讯飞主办的一项数据科学竞赛&#xff0c;旨在通过机器学习方法预测用户是否为新增用户 比赛属于二分类任务&#xff0c;评价指标采用F1分数&#xff0c;分数越高表示模型性能越好。 如果你有一份带标签的表格型数据&#xff0c;只要…

Spring IOC容器在Web环境中是如何启动的(源码级剖析)?

文章目录一、Web 环境中的 Spring MVC 框架二、Web 应用部署描述配置传统配置&#xff08;web.xml&#xff09;&#xff1a;Java配置类&#xff08;Servlet 3.0&#xff09;&#xff1a;三、核心启动流程详解1. 启动流程图2. ★容器初始化入口&#xff1a;ContextLoaderListene…

18个优质Qt开源项目汇总

1&#xff0c;Clementine Music Player Clementine Music Player 是一个功能完善、跨平台的开源音乐播放器&#xff0c;非常适合用于学习如何开发媒体类应用&#xff0c;尤其是跨平台桌面应用。它基于 Qt 框架开发&#xff0c;支持多种操作系统&#xff0c;包括 Windows、macO…

计算机视觉:AI 的 “眼睛” 如何看懂世界?

1. 什么是计算机视觉&#xff1a;让机器 “看见” 并 “理解” 的技术1.1 计算机视觉的核心目标计算机视觉&#xff08;CV&#xff09;是人工智能的一个重要分支&#xff0c;它让计算机能够 “看懂” 图像和视频 —— 不仅能捕捉像素信息&#xff0c;还能分析内容、提取语义&am…

华为OD刷题记录

华为OD刷题记录 刷过的题 入门 1、进制 2、NC61 doing 订阅专栏

QT学习教程(二十五)

双缓冲技术&#xff08;Double Buffering&#xff09;&#xff08; 2、公有函数实现&#xff09;#include <QtGui> #include <cmath> using namespace std; #include "plotter.h"以上代码为文件的开头&#xff0c;在这里把std 的名空间加入到当前的全…

设计模式笔记_结构型_装饰器模式

1.装饰器模式介绍装饰器模式是一种结构型设计模式&#xff0c;允许你动态地给对象添加行为&#xff0c;而无需修改其代码。它的核心思想是将对象放入一个“包装器”中&#xff0c;这个包装器提供了额外的功能&#xff0c;同时保持原有对象的接口不变。想象一下&#xff0c;你有…

day25 力扣90.子集II 力扣46.全排列 力扣47.全排列 II

子集II给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情况。示例 1&…

Solidity 中的`bytes`

在 Solidity 中&#xff0c;bytes 和 bytes32 都是用来保存二进制数据的类型&#xff0c;但它们的长度、使用场景、Gas 成本完全不同。✅ 一句话区分类型一句话总结bytes32定长 32 字节&#xff0c;适合做哈希、地址、标识符等固定长度数据。bytes动态长度字节数组&#xff0c;…

初学者STM32—PWM驱动电机与舵机

一、简介 上一节课主要学习了输出比较和PWM的基本原理和结构&#xff0c;本节课就主要以实践为主通过STM32最小系统板和驱动器控制舵机和直流电机。 上一节课的坐标 初学者STM32—输出比较与PWM-CSDN博客 二、舵机 舵机是一种根据输入PWM信号占空比来控制输出角度的装置 输…

C++中的异常处理机制:try-catch

一、基本概念 异常&#xff08;Exception&#xff09;&#xff1a;程序执行过程中发生的非正常情况&#xff0c;比如除以零、访问越界、内存不足等。 异常处理&#xff08;Exception Handling&#xff09;&#xff1a;对异常情况进行捕获、分析&#xff0c;并采取补救措施&…

如何从 Windows 11 或 10 远程访问 Ubuntu 24.04 或 22.04 桌面

了解如何使用 RDP(远程桌面协议)从 Windows 11 或 10 远程连接 Ubuntu 24.04 Noble 或 22.04 LTS Jammy JellyFish 桌面的步骤。 Windows 提供了一个便捷的功能,称为远程桌面连接,它使用 RDP 协议来远程连接 PC。当从 Windows 系统建立远程桌面连接时,使用起来非常简单,…

Linux 服务器中,Tab 键自动补全功能失效

在 Linux 服务器中&#xff0c;Tab 键自动补全功能失效通常与 bash-completion 组件缺失或配置异常有关。以下是解决问题的两个关键 YUM 指令及操作步骤&#xff1a;1. 安装 bash-completion 组件 sudo yum install -y bash-completion说明&#xff1a; bash-completion 是提供…

SpringBoot服装推荐系统实战

Spring Boot 服装推荐系统实例 以下是基于Spring Boot实现的服装推荐系统的30个实例代码示例,涵盖核心功能和实现方法。 用户注册与登录功能 @RestController @RequestMapping("/api/auth") public class AuthController {@Autowiredprivate UserService userSer…

WIN10系统优化篇(一)

你是否疑惑为什么别人家的电脑运行速度飞快&#xff0c;而自己的却卡顿难用&#xff1f;其实&#xff0c;很多时候 Windows 系统可以通过简单的优化措施来提升使用体验。本文根据项目实战多年对 Win10 优化经验&#xff0c;将帮你找出系统卡顿的原因&#xff0c;并给出针对性的…

Flutter状态管理篇之ChangeNotifier基础篇(一)

目录 前言 一、什么是ChangeNotifier 二、ChangeNotifier 的基本用法 三、结合Flutter UI 使用 四、结合 Provider 的高级用法 五、ChangeNotifier 的优势与注意事项 5.1 优势 5.2 注意事项 六、与 ValueNotifier 的比较 七、实际应用场景 八、总结 前言 在 Flutter…

react17更新哪些新特性

React 17 是一个“无新特性”的发布版本&#xff0c;它的主要目标是为未来的 React 版本打好基础&#xff0c;同时改善与旧版本共存和升级的体验。虽然没有引入新的开发者 API&#xff0c;但它在内部做了很多重要的改进。以下是 React 17 的核心更新内容和特性&#xff1a;&…

Unity 常见数据结构分析与实战展示 C#

Unity 常见数据结构分析与实战展示 提示&#xff1a;内容纯个人编写&#xff0c;欢迎评论点赞&#xff0c;来指正我。 文章目录Unity 常见数据结构分析与实战展示1. 引言2. Unity 数据结构概述3. 常见数据结构1. 数组&#xff08;Array&#xff09;2. 列表&#xff08;List&…

【Linux网络编程】应用层协议 - HTTP

目录 初识HTTP协议 认识URL HTTP协议的宏观格式 Socket封装 TcpServer HttpServer 整体设计 接收请求 web根目录与默认首页 发送应答 完善页面 HTTP常见Header HTTP状态码 HTTP请求方法 cookie与session Connection 抓包 初识HTTP协议 应用层协议一定是基于…