C# 学生成绩管理系统

学生成绩管理系统

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

本次更新的是非常经典的学生成绩管理系统,这作为一个计算机专业的你来说,可能在大一、大二或者大三就会经历一次这样的课程设计。笔者使用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、查找界面

在这里插入图片描述

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

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值