C#学生信息管理系统

news2025/9/14 8:18:08

一、引言

学生信息管理系统是现代学校管理的重要组成部分,它能够有效地管理学生的基本信息、课程信息、成绩信息等,提高学校管理的效率和质量。本文将介绍如何使用SQL Server数据库和C#语言在.NET平台上开发一个学生信息管理系统的课程设计项目。


二、项目概述

学生信息管理系统旨在为学校提供一个完善的学生信息管理平台,包括注册登录、专业管理、班级管理和学生信息管理等功能。该系统将采用C#语言进行开发,利用.NET平台提供的丰富功能和框架,同时使用SQL Server作为数据库支持,以确保系统的稳定性和性能。


三、系统功能

  1. 注册登录功能

    • 注册:学生和教师用户可以通过输入用户名、密码和个人信息完成注册。
    • 登录:已注册的用户可以使用用户名和密码进行登录,以访问系统的其他功能模块。
  2. 专业管理功能

    • 添加专业:管理员用户可以添加新的专业信息,包括专业名称、专业代码等。
    • 修改专业:管理员用户可以修改已有专业的信息,如名称、代码等。
    • 删除专业:管理员用户可以删除不再需要的专业信息。
  3. 班级管理功能

    • 添加班级:管理员用户可以添加新的班级信息,包括班级名称、所属专业、班级编号等。
    • 修改班级:管理员用户可以修改已有班级的信息,如名称、所属专业等。
    • 删除班级:管理员用户可以删除不再需要的班级信息。
  4. 学生信息管理功能

    • 添加学生:管理员用户和教师用户可以添加新的学生信息,包括学号、姓名、性别、年龄、联系方式等。
    • 修改学生信息:管理员用户和教师用户可以修改已有学生的信息。
    • 删除学生:管理员用户和教师用户可以删除不再需要的学生信息。
    • 查询学生信息:管理员用户和教师用户可以根据条件查询学生信息,如学号、姓名、班级等。

四、数据库分析

在学生信息管理系统中,我们设计了以下表来存储学校的相关信息:

  1. college(学院表):

    • 该表存储学校的各个学院信息。
    • 包括字段:Id(学院编号,自增主键)、Name(学院名称)。
  2. major(专业表):

    • 该表存储各个学院下的专业信息。
    • 包括字段:Id(专业编号,自增主键)、Name(专业名称)、CollegeId(所属学院编号,外键关联到college表的Id字段,级联删除)。
  3. majorClass(班级表):

    • 该表存储各个专业下的班级信息。
    • 包括字段:Id(班级编号,自增主键)、Name(班级名称)、MajorId(所属专业编号,外键关联到major表的Id字段,级联删除)。
  4. student(学生表):

    • 该表存储学生的基本信息。
    • 包括字段:Id(学号,主键)、Name(姓名)、MajorClassId(所属班级编号,外键关联到majorClass表的Id字段,级联删除)、Age(年龄)、Sex(性别)。
  5. siuser(系统用户表):

    • 该表存储系统用户的信息,包括管理员和教师用户。
    • 包括字段:Id(用户编号,自增主键)、Username(用户名)、Pwd(密码)、CollegeId(所属学院编号,外键关联到college表的Id字段,级联删除)。

这些表之间通过外键关联建立了关系,以便于实现数据的一致性和完整性。同时,对于学院、专业和班级信息的层级结构,我们通过相应的外键关联来实现了级联删除,以确保数据的完整性和关联性。

五、关键代码

StudentManagementWindow

using NPOI.Util;
using StudentInfoManagmentSystem.Model;
using StudentInfoManagmentSystem.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace StudentInfoManagmentSystem.View {
    /// <summary>
    /// Interaction logic for StudentManagementWindow.xaml
    /// </summary>
    public partial class StudentManagementWindow {

        StudentManagementViewModel _smvm;

        public StudentManagementWindow() {
            InitializeComponent();
            _smvm = Grid.DataContext as StudentManagementViewModel;
            for (int i = 12; i < 51; i++) {
                CBAge.Items.Add(i);
            }
        }

        private void Window_MouseDown(object sender, MouseButtonEventArgs e) {
            DragMove();
        }

        private void BtnReSelect_Click(object sender, RoutedEventArgs e) {
            CurrentMajorClass.ID = -1;
            new MajorClassManagementWindow().Show();
            Close();
        }

        private void BtnExport_Click(object sender, RoutedEventArgs e) {
            var sfd = Util.FileDialogFactory.GetSFD("Excel 97-2003|*.xls|Excel 2007|*.xlsx");
            if (!(bool) sfd.ShowDialog()) return;
            var dt = _smvm.ToDataTable();
            Util.ExcelIO.Write(sfd.FileName, dt);
        }

        private void BtnSave_Click(object sender, RoutedEventArgs e) {
            _smvm.Save();
        }

        private void BtnAdd_Click(object sender, RoutedEventArgs e) {
            TBProm.Visibility = Visibility.Hidden;
            TBProm.Foreground = Brushes.Red;
            var id = TBId.Text.Trim();
            var name = TBName.Text.Trim();
            if (Util.StringUtil.IsAnyNullOrEmpty(id, name)) {
                TBProm.Text = "请填写完整信息";
                TBProm.Visibility = Visibility.Visible;
                return;
            }
            if (DBHelper.ExistStudent(id)) {
                TBProm.Text = "已存在相同学号学生";
                TBProm.Visibility = Visibility.Visible;
                return;
            }
            if (CBAge.SelectedIndex < 0) {
                TBProm.Text = "请选择年龄";
                TBProm.Visibility = Visibility.Visible;
                return;
            }
            var age = (int) (CBAge.SelectedItem);
            var sex = (bool) RBMale.IsChecked ? "男" : "女";
            var s = new Student {
                Id = id, Age = age, Name = name, Sex = sex, MajorClassId = CurrentMajorClass.ID
            };
            _smvm.Add(s);
            TBProm.Foreground = Brushes.SeaGreen;
            TBProm.Text = "添加成功";
            TBProm.Visibility = Visibility.Visible;
        }

        private void BtnDelete_Click(object sender, RoutedEventArgs e) {
            _smvm.Remove();
        }

        private void CBAll_Checked(object sender, RoutedEventArgs e) {
            foreach (var item in _smvm.Students) {
                item.IsSelected = true;
            }
        }

        private void CBAll_Unchecked(object sender, RoutedEventArgs e) {
            foreach (var item in _smvm.Students) {
                item.IsSelected = false;
            }
        }
    }
}

MajorManagementWindw

using StudentInfoManagmentSystem.Model;
using StudentInfoManagmentSystem.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace StudentInfoManagmentSystem.View {
    /// <summary>
    /// Interaction logic for MajorManagementWindow.xaml
    /// </summary>
    public partial class MajorManagementWindow {

        MajorManagementViewModel _mmvm;

        public MajorManagementWindow() {
            InitializeComponent();
            _mmvm = Grid.DataContext as MajorManagementViewModel;
        }

        private void MetroWindow_MouseDown(object sender, MouseButtonEventArgs e) {
            DragMove();
        }

        private void BTNSignOff_Click(object sender, RoutedEventArgs e) {
            CurrentUser.SignOff();
            new MainWindow().Show();
            Close();
        }

        private void BtnDelete_Click(object sender, RoutedEventArgs e) {
            var ret = MessageBox.Show("确定删除?", "提示", MessageBoxButton.YesNo);
            if (ret == MessageBoxResult.No) return;
            _mmvm.Remove(int.Parse((sender as Button).Tag.ToString()));
        }
        
        private void BtnSelect_Click(object sender, RoutedEventArgs e) {
            int id = int.Parse((sender as Button).Tag.ToString());
            CurrentMajor.ID = id;
            new MajorClassManagementWindow().Show();
            Close();
        }

        private void BtnExport_Click(object sender, RoutedEventArgs e) {
            var sfd = Util.FileDialogFactory.GetSFD("Excel 97-2003|*.xls|Excel 2007|*.xlsx");
            if (!(bool) sfd.ShowDialog()) return;
            var dt = _mmvm.ToDataTable();
            Util.ExcelIO.Write(sfd.FileName, dt);
        }

        private void BtnAdd_Click(object sender, RoutedEventArgs e) {
            var newMajorName = TBNewMajor.Text.Trim();
            if (string.IsNullOrEmpty(newMajorName)) return;
            _mmvm.Add(new Major { Name = newMajorName, CollegeId = CurrentUser.GetCollegeId() });
        }
    }
}

MajorClassManagementWindow

using StudentInfoManagmentSystem.Model;
using StudentInfoManagmentSystem.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace StudentInfoManagmentSystem.View {
    /// <summary>
    /// Interaction logic for MajorClassMagementWindow.xaml
    /// </summary>
    public partial class MajorClassManagementWindow {

        MajorClassManagementViewModel _mcmvm;

        public MajorClassManagementWindow() {
            InitializeComponent();
            _mcmvm = Grid.DataContext as MajorClassManagementViewModel;
        }

        private void MetroWindow_MouseDown(object sender, MouseButtonEventArgs e) {
            DragMove();
        }

        private void BtnReSelect_Click(object sender, RoutedEventArgs e) {
            CurrentMajor.ID = -1;
            new MajorManagementWindow().Show();
            Close();
        }

        private void BtnDelete_Click(object sender, RoutedEventArgs e) {
            var ret = MessageBox.Show("确定删除?", "提示", MessageBoxButton.YesNo);
            if (ret == MessageBoxResult.No) return;
            _mcmvm.Remove(int.Parse((sender as Button).Tag.ToString()));
        }

        private void BtnSelect_Click(object sender, RoutedEventArgs e) {
            int id = int.Parse((sender as Button).Tag.ToString());
            CurrentMajorClass.ID = id;
            new StudentManagementWindow().Show();
            Close();
        }

        private void BtnAdd_Click(object sender, RoutedEventArgs e) {
            var newMajorClassName = TBNewMajorClass.Text.Trim();
            if (string.IsNullOrEmpty(newMajorClassName)) return;
            _mcmvm.Add(new MajorClass { Name = newMajorClassName, MajorId = CurrentMajor.ID });
        }

        private void BtnExport_Click(object sender, RoutedEventArgs e) {
            var sfd = Util.FileDialogFactory.GetSFD("Excel 97-2003|*.xls|Excel 2007|*.xlsx");
            if (!(bool) sfd.ShowDialog()) return;
            var dt = _mcmvm.ToDataTable();
            Util.ExcelIO.Write(sfd.FileName, dt);
        }
    }
}

六、程序截图

在这里插入图片描述
请添加图片描述
请添加图片描述

在这里插入图片描述

七、联系与交流

q:969060742 完整代码、sql

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

risc-v向量扩展strlen方法学习

riscv向量文档中给出了strlen的实现&#xff0c; 大概是这么一个思路&#xff0c; 加载向量: 使用向量加载指令&#xff08;如 vload&#xff09;从内存中加载一个向量长度的字符。比较向量与零: 使用向量比较指令&#xff08;如 vmask 或 vcmpeq&#xff09;来检查向量中的每…

HTTPS RSA 握手解析(计算机网络)

传统的 TLS 握手基本都是使用 RSA 算法来实现密钥交换的&#xff0c;在将 TLS 证书部署服务端时&#xff0c;证书文件其实就是服务端的公钥&#xff0c;会在 TLS 握手阶段传递给客户端&#xff0c;而服务端的私钥则一直留在服务端。 在 RSA 密钥协商算法中&#xff0c;客户端会…

【generate】如何维护一套icon组件库,直接输出svg为react component

https://github.com/ant-design/ant-design-web3/pull/761/files 实现了icon-preview(通过jsdoc, 鼠标放在组件上可以看到icon的样式)&#xff0c;因为打包方式、产物以及命名上有一些不同&#xff0c;可能需要稍加改造。 这个同步脚本应该后续也用得上&#xff0c;略加改造同步…

装饰工程管理系统|基于Springboot的装饰工程管理系统设计与实现(源码+数据库+文档)

装饰工程管理系统-项目立项子系统目录 目录 基于Springboot的装饰工程管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 &#xff08;2&#xff09;合同报价管理 &#xff08;3&#xff09;装饰材料总计划管理 &#xff08;4&#xff0…

深度解析GPT中的Tokenizer

继学习完深度解析大语言模型中的词向量后&#xff0c;让我们继续学习大语言模型中另外几个重要概念&#xff1a;token&#xff08;词元&#xff09;、tokenization&#xff08;词元化&#xff09;、tokenizer&#xff08;词元生成器&#xff09;。 在GPT模型中&#xff0c;toke…

Minikube本地搭建单节点Kubernetes集群

1、什么是 Minikube Minikube 是一个开源工具&#xff0c;旨在为开发者提供一种便捷的方式在本地环境中搭建单节点的 Kubernetes 集群。它主要用于开发、测试和学习 Kubernetes 应用程序&#xff0c;无需依赖大型的硬件资源或复杂的多节点集群配置。minikube 使用轻量级虚拟化技…

小林coding图解计算机网络|基础篇02|键入网址到网页显示,期间发生了什么?

小林coding网站通道&#xff1a;入口 本篇文章摘抄应付面试的重点内容&#xff0c;详细内容还请移步&#xff1a;小林coding网站通道 文章目录 孤单小弟——HTTP真实地址查询——DNS指南好帮手——协议栈可靠传输——TCP远程定位——IP两点传输——MAC出口——网卡送别者——交…

如何优化TCP?TCP的可靠传输机制是什么?

在网络世界中&#xff0c;传输层协议扮演着至关重要的角色&#xff0c;特别是TCP协议&#xff0c;以其可靠的数据传输特性而广受青睐。然而&#xff0c;随着网络的发展和数据量的激增&#xff0c;传统的TCP协议在效率方面遭遇了挑战。小编将深入分析TCP的可靠性传输机制&#x…

CentOS7安装MySQL8.0.28(持续)

第一步 &#xff1a;下载mysql MySQL https://www.mysql.com/

【剑指offr--C/C++】JZ59 滑动窗口的最大值

一、题目 二、思路及代码 暴力解法是依次往后滑动一位&#xff0c;然后比较窗口内的值。 我这里考虑&#xff1a;窗口每次往后移动一位&#xff0c;那么如果当前窗口的最大值max在窗口内部&#xff0c;那么再滑动到下一个窗口的时候&#xff0c;窗口内只有最新进来的一个元素没…

操作系统导论课后作业-第十七章答案

课程作业-第十七章&#xff1a; 17.1首先以标志flag -n 10 -H 0 -p BEST -s 0运行程序来产生一些随机的分配和空闲。你能预测malloc()/free()会返回什么吗&#xff1f;你可以在每次请求后猜测空闲列表的状态吗&#xff1f;随着时间的推移&#xff0c;你对空闲列表有什么发现&a…

Windows 11安装kb5035853补丁时,提示错误0x800f0922,并且弹出“某些操作未按计划进行,不必担心,正在撤消更改。请不要关机”

Windows 11安装kb5035853补丁时&#xff0c;提示错误0x800f0922&#xff0c;并且还在重启后弹出“某些操作未按计划进行&#xff0c;不必担心&#xff0c;正在撤消更改。请不要关机”&#xff0c;按微软官方的作法是&#xff1a;https://learn.microsoft.com/zh-cn/windows/rel…

同态加密算法的概念与应用

同态加密算法的基本概念 同态加密算法是一种特殊的加密算法&#xff0c;允许对加密状态下的数据进行计算&#xff0c;得到的结果仍然是加密的状态&#xff0c;而不是解密后的明文。同态加密算法的核心原理是将明文数据映射到一个特定的数学空间中&#xff0c;在该数学空间中实…

mac电脑安装redis教程

1、下载地址 Download | RedisRedisYou can download the last Redis source files here. For additional options, see the Redis downloads section below.Stable (7.2)Redis 7.2 …https://redis.io/download/#redis-downloads 2、安装 2.1 解压下载后的压缩文件 2.2 进入…

基于 Docker 的 go grpc quickstart

工作之后一直使用的 RPC 框架是 Apache 的 thrift&#xff0c;现在发现 grpc 更流行&#xff0c;所以也要学习一下&#xff0c;先来简单的跑一下 demo。在本地安装运行也很方便&#xff0c;不过因为有了 docker&#xff0c;所以在 docker 里面安装运行隔离性更好&#xff0c;顺…

构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Servi…

运筹学经典问题(八):CVRP和VRP-TW

文章目录 问题描述问题建模决策变量数学建模基于容量的消除子环的约束 &#xff08;load-based SECs&#xff09; CVRP完整的数学模型加上时间窗限制的CVRP 问题描述 给定一个图&#xff0c;图上的点代表客户&#xff0c;边代表客户之间的路线&#xff0c;边的权重代表客户之间…

生成式人工智能与 LangChain(预览)(上)

原文&#xff1a;Generative AI with LangChain 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 一、生成模型是什么&#xff1f; 人工智能&#xff08;AI&#xff09;取得了重大进展&#xff0c;影响着企业、社会和个人。在过去的十年左右&#xff0c;深度学习已经发…

联达动力OA 多处任意文件上传漏洞复现

0x01 产品简介 联达动力OA是PHPOA推出的新一代OA系统,系统支持性好、安全、数据高速缓存化;支持100+应用自行安装与定义,应用表单自定义,支持应用无代码开发,支持多语言。 0x02 漏洞概述 联达动力OA /FileManage/UpLoadFile.aspx、/Hosp_Portal/uploadLogo.aspx、/Dept_Por…

基于51单片机智能加湿器控制系统

基于51单片机智能加湿器控制系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff09; 功能介绍 具体功能&#xff1a; 1.LCD1602实时显示湿度值&#xff08;湿度范围10%-95%&#xff09;和湿度阈值&#xff1b; 2.可以通过按键设置湿度阈值范围&#xff1b; 3…