C# 学生成绩管理系统

2023-11-17

学生成绩管理系统

前言:
一、我是一个菜鸟!
二、已经有快一年没有发文章,一直在忙着毕业和找工作的事,如今生活逐渐趋于稳定,那么 勤劳的博主又开始更新了,哈哈

本次更新的是非常经典的学生成绩管理系统,这作为一个计算机专业的你来说,可能在大一、大二或者大三就会经历一次这样的课程设计。笔者使用VS和C#语言实现了这样的一个系统,本文会讲解部分思路,如果有学弟学妹需要的话,也可以关注私聊我,我应该都会在的!

1、项目简介

1.1、项目要求

一、学生信息包括名字、语文、数学、英语三门成绩
二、实现对学生的增、删、查、改,查询结果显示在软件界面
二、点击上传成绩按钮后,把所有学生信息发送给服务器
三、点击保存后,把学生信息保存在文件中,软件打开时自动加载

1.2、需要掌握的知识

一、C#语言、winfrom控件的使用
二、Socket编程
三、C#中的File类
四、了解Josn

1.3、功能分析

一、首先就是基本的四个功能,增、删、改、查。我们需要一个容器来存储学生的信息,也就是学生对象。然后增删改查都是对这个容器中的学生对象来操作

二、把学生信息上传到服务器。这里就需要Socket编程,需要设计客户端和服务器端,当然也可以使用网络调试助手暂时代替服务器端。然后要选择上传的格式,这里选择的是Json格式,方便对象的序列化和反序列化

三、将学生信息保存在文件中并加载。这里需要知道如何对文件进行操作,包括:新建文件、文件的读写等。还需要选择文件中信息的存储格式

2、C#中的单例模式

提到单例模式,那么可能有人不知道,那么什么是单例模式呢?

2.1、什么是单例模式?

一、通俗一点来讲就是:它是唯一的并且在整个项目中都有可能被使用的对象
二、对于我一个由C到C++再到C#的菜鸟来说,C#的一些语法我的理解还只是停留于表面。就单例模式来讲,C#中居然没有拷贝构造函数!

2.2、单例模式的实现

那么废话不多说,直接上代码

namespace 成绩管理系统
{
    internal class TcpClient	//这是一个封装了客户端Socket对象的类
    {
        public Socket client = null;		//Socket对象
        private static TcpClient instance = null;		//该类的对象
        private TcpClient()	//构造函数
        {
            client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        }
        public static TcpClient getInstance()	//获取该类的唯一实例
        {
            if (instance == null)
            {
                instance= new TcpClient();
            }
            return instance;
        }
    }
 }

你该不会以为我会解释吧!
注解:单例模式的实现就是私有化构造函数,并在类内创建该类的对象,在通过一个static函数返回该类的对象。目的是确保该类的对象唯一。

2.3、单例模式的好处

一、好处就是调用方便。
二、问:单例模式对于该系统的必要性?
答:没必要,我单纯想了解一下,然后分享给你。

3、winfrom中的窗口设计

这里主要讨论一个问题,那就是winfrom中,通过窗口打开窗口的几种方式

3.1、修改主函数

废话不多说,还是直接上代码

namespace 成绩管理系统
{
    internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
			//以上不用理睬

            Data.login = new Login();	//实例化一个窗口类Login的对象
            Application.Run(Data.login);	//运行该窗口
            //以上函数运行结束会关闭login窗口
            Data.f = new Form1();			//实例化一个窗口类Form1的对象
            if(Data.loginWindowsIsClose )	//判断login窗口是否关闭
            {
                Application.Run(Data.f);
            }
        }
    }
}

注解:这段代码的主要功能有点类似于QQ的登录场景,首先打开一个登录窗口,输入一些信息,点击登录后,登录窗口关闭,新的窗口打开

3.2、加载在窗口函数

private void SeekBtn_Click(object sender, EventArgs e)
{
	//只看注释这两句
    Seek s = new Seek();		//实例化一个窗口类Login的对象
    s.ShowDialog();				//运行该窗口
    SeekFunc();

    Data.seekName = null;
    Data.seekChinese = -1;
    Data.seekMath = -1;
    Data.seekEnglish = -1;
}

注解:这段代码的功能就类似于你打开了QQ的聊天窗口,然后点×,关闭了窗口

3.3、总结

看了一下这两段代码,是不是有种云里雾里的感觉,甚至吐槽,这**写了个啥

其实主要问题在于,你打开窗口是想要手动关闭,还是自动关闭。

如果你想自动关闭,类似于3.1,打开窗口,输入信息,点击登录,窗口自动关闭,打开新的窗口。那么就需要就窗口关闭的函数写在登录按钮中,不然程序就会卡死。

如果你想手动关闭,类似于3.2,打开窗口,输入信息,点×关闭,那么就不需要写窗口关闭函数,相当于你手动中止该进程,代码会继续向下运行。

4、文件的保存和加载

4.1、File.create()

这个函数还是比较坑人的,当然不是说它不好,而是对于我这种菜鸟不太友好

这个函数主要功能是创建一个文件,但它不是创建之后就关闭,而是创建好了,返回一个文件描述符,通过这个描述符可以对文件进行读写操作。

File类中有很多函数,还是比较好用的,但是你如果使用File.create()创建文件,但是不关闭这个文件描述符,你使用的File.xx()就会因文件被占用而报错

5、联网

关于C#如何联网,B站上还是有很多视频来讲的,我在这就不分享了,主要是累了,哎。

6、程序的截图

6.1、登录界面

在这里插入图片描述

6.2、主界面

在这里插入图片描述

6.3、查找界面

在这里插入图片描述

后言:
一、没想到吧,我还有后言,哈哈哈!
二、提问:写了这些东西有啥用?看了我也不知道课设怎么做。 答:这些只是我这段时间的学习总结,想要程序的话可以私聊,咳咳,先关注!
三、如果你有什么问题也可以评论或者私聊,会的我都会回,不会的我会回不会,哈哈,一起加油吧!

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

C# 学生成绩管理系统 的相关文章

  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 使用 lambda 表达式注册类型

    我想知道如何在 UnityContainer 中实现这样的功能 container RegisterType
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐

  • vim 常用命令

    文本替换 s 替换 g global 全部 如果不加g则只会替换每行第一个word1 1 20s hello helloworld g 将1 20行中的 hello 替换为 helloworld 统计字符串出现次数 s pattern gn
  • innerHTML 用法

    用法 比如在中写了如下的代码 div div 现在用top innerHTML 的方法就可以向这个id的位置写入HTML代码了 例如top innerHTML
  • 啊哈c语言 潦草的初步笔记(3)

    第四章 while 当while后面 中的关系表达式为真时 即成立时才执行 种的内容 读作 mod 也称作 取模 作用是获取余数 的左右两边必须是整数 表示除号 作用是获取商 的左右两边可以是整数也可以是小数 等待 语句 Sleep 注意S
  • 20. 异常处理

    Hi 大家好 我是茶桁 在我们日常使用Python或者其他编程语言的时候 不可避免的都会出现报错和异常 那么 我们今天就来谈谈异常 什么是异常 异常异常 根据名字简单理解 那就是非正常 也就是没有达到预期目标 异常呢 其实就是一个事件 并且
  • CAP原理的证明

    CAP概述 C Consistency 一致性 A Availability 可用性 P Partition Tolerance分区容错性 CAP理论的核心是 一个分布式系统不可能同时很好的满足一致性 可用性和分区容错性这三个需求 最多只能
  • 【业务功能118】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere-OpenELB部署及应用

    OpenELB部署及应用 一 OpenELB介绍 网址 openelb io OpenELB 是一个开源的云原生负载均衡器实现 可以在基于裸金属服务器 边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 S
  • jquery子窗体操作父窗体中的元素

    1 在父窗口中操作子窗口中的元素 如 其中 iframe1是iframe的ID 1 选中IFRAME中的所有单选钮 window frames iframe1 document find input type radio attr chec
  • 华为云云耀云服务器L实例评测|云耀云服务器L实例部署paperless-ngx文档管理系统

    华为云云耀云服务器L实例评测 云耀云服务器L实例部署paperless ngx文档管理系统 一 云耀云服务器L实例介绍 1 1 云耀云服务器L实例简介 1 2 云耀云服务器L实例特点 二 paperless ngx介绍 2 1 paperl
  • SWAPIDC服务器销售模板,记录利用swapidc搭建IDC销售网站教程

    现在免空泛滥 所以写这么一篇教程吧 一 准备工作 首先你要准备一台服务器 其中推荐使用国外的Vultr 系统使用Centos6 方便实验 也可以用我的IDC服务器 不推荐使用国内的 因为域名需要备案 容易引起访问错误 使用SSH登陆服务器后
  • CA6140数控化改装设计(论文+CAD图纸)

    摘要 随着我国工业生产的发展 机械工业即将面临着一个十分重要的课题 设备改造 本设计就是对CA6140车床的机械部分 进行数控改造 数控改造主要是简化机械传动机构 缩短传动链 提高自动化程度 也是为了解决复杂的零件加工 精度控制及提高产品质
  • [从零开始学DeepFaceLab-15]: 使用-命令行八大操作步骤-第6步:模型的选择与训练 - 进阶 - 打开Windows的GPU加速开关

    目录 前言 第1章 来自DeepFaceLab模型训练的提醒 第2章 打开该开关的意义
  • 2017校招 360 笔试题 编程题 内存管理

    内存管理 时间限制 C C 语言 1000MS 其他语言 3000MS 内存限制 C C 语言 65536KB 其他语言 589824KB 题目描述 物联网技术的蓬勃发展 各种传感器纷纷出现 小B所在的项目组正在开发一个物联网项目 她们在研
  • 基线检查工具_高效液相色谱法35问35答,鬼峰、基线漂移、拖尾、分叉峰等系列问题一步到位!(上篇)...

    按分离机制的不同 高效液相色谱法可以分为液固吸附色谱法 液液分配色谱法 正相与反相 离子交换色谱法 离子对色谱法及分子排阻色谱法 这些方法在使用的过程中往往会遇到诸如鬼峰 基线漂移 拖尾 分叉峰 保留时间漂移 柱压过高等系列问题 该如何解决
  • 线段树Segment tree(1):单点修改,区间查询

    问题描述 给定数列a 1 a 2 a N 依次进行Q次操作 操作有两类 1 i x 给定i x 将a i 加上x 2 l r 给定i x 求 i l r
  • 两年外包生涯做完,感觉自己废了一半....

    先说一下自己的情况 大专生 17年通过校招进入湖南某软件公司 干了接近2年的点点点 今年年上旬 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了五年的功能测试 已经让我变得不思进取 谈了1年的女朋友
  • 国内外自然语言处理(NLP)研究组

    博客地址 http blog csdn net wangxinginnlp article details 44890553 排名不分先后 收集不全 欢迎留言完善 中国大陆地区 腾讯人工智能实验室 Tencent AI Lab https
  • linux自增窗口状态——KwindowSystem篇

    前言 之前曾翻译过 X Desktop Group 今天分享一下如何自定义状态 此篇讲述如何通过kwindowsystem新增状态 以及设置状态的过程 窗口有不同的属性 状态 允许Action等等信息 以使窗口管理器来确定窗口的装饰 堆叠位
  • STM32之NVIC

    STM32 Cortex M3 中NVIC 嵌套向量中断控制 的理解 一 STM32 Cortex M3 中的优先级概念 STM32 Cortex M3 中有两个优先级的概念 抢占式优先级和响应优先级 也把响应优先级称作 亚优先级 或 副优
  • jinfo如何使用

    jinfo是一个用于查看和调整Java虚拟机 JVM 配置参数的命令行工具 它可以在运行时获取和修改JVM的配置信息 包括内存分配 垃圾回收 运行时编译和其他设置 要使用jinfo 需要在命令行中输入以下命令 jinfo options
  • C# 学生成绩管理系统

    学生成绩管理系统 前言 一 我是一个菜鸟 二 已经有快一年没有发文章 一直在忙着毕业和找工作的事 如今生活逐渐趋于稳定 那么 勤劳的博主又开始更新了 哈哈 本次更新的是非常经典的学生成绩管理系统 这作为一个计算机专业的你来说 可能在大一 大