学生成绩管理系统
前言:
一、我是一个菜鸟!
二、已经有快一年没有发文章,一直在忙着毕业和找工作的事,如今生活逐渐趋于稳定,那么
勤劳的博主又开始更新了,哈哈
本次更新的是非常经典的学生成绩管理系统,这作为一个计算机专业的你来说,可能在大一、大二或者大三就会经历一次这样的课程设计。笔者使用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、查找界面
后言:
一、没想到吧,我还有后言,哈哈哈!
二、提问:写了这些东西有啥用?看了我也不知道课设怎么做。 答:这些只是我这段时间的学习总结,想要程序的话可以私聊,咳咳,先关注!
三、如果你有什么问题也可以评论或者私聊,会的我都会回,不会的我会回不会,哈哈,一起加油吧!