关于毕设的一个问题,Java||C#

问题背景:
简单描述一下,本人毕设想做一个本地不需联网的单机客户服务器系统
几个客户机可以给服务器发送信息。服务器作为前台,客户机是服务员。

奈何本人本科期间虽认真学过Java语法和算法以及C#但还是感觉无从下手

问题1:
Java的界面设计本科几乎没有涉及,学的都是一些老掉牙的技术,本科教材是2001年的。不过我可以自学,就是问下,java或c#可以实现我所描述的功能吗?任务量重不重呢?

问题2:
写好的java或c#程序怎么能单独打包出来成咱们用的app的样子呢?总不能每次运行都要先打开eclipse吧?

先谢谢佬们了!!

大致叙述

问题1

我不知道你要用C/S还是B/S架构;从“客户机”来看似乎是要实现C/S架构,但你的需求描述在我看来还是有点模糊。这里我还是分开来讲。
B/S的web系统的话,springboot+vue就是为初学者、轻量级开发而生的(事实上也可以做到企业级开发,我们这里只是说这个技术栈门槛比较低,容易学),基本两三个月就能用这个技术栈做出管理系统。
C/S架构的话,我个人并不熟悉java的有关技术栈,但是C#的WPF是相当简单易学的;值得一提的是C#的.NET技术也适用于B/S架构开发(但我个人认为比springboot+vue要麻烦)。但既然你是写服务器-客户端交互的软件,那么网络访问肯定是不可避免的;退一步讲,就算你不用网络,也总得用什么方法建立客户端和服务端的通信对吧?可以用CAN,RS232等很多协议,但都比网络要麻烦。
此外在选择C/S还是B/S的时候有一个要注意的地方:B/S架构有很多封装好的框架,比如springboot,甚至不需要去关心通信细节,只要写好接口就可以,使用C/S无论如何恐怕都比B/S的这些架构要更加复杂。

问题2

不同语言不太一样。java就用java指令,C#的话,简单程序应该是双击打开就可以,需要命令行参数的话我就不太清楚了。

细节

我们再说说细节方面的东西。

C/S架构下如何启动程序?

Java需要使用java指令。建议考虑maven,maven使用mvn package打包出来的jar文件,比如说叫做a.jar,那么执行就是java -jar a.jar。
C#的话,没有命令行参数应该是双击打开即可,有的话就得用CLI界面。

技术栈的任务量比较

B/S架构

SpringBoot+Vue3技术栈非常容易实现。前者需要了解Java,后者需要了解Node.js;都只需要了解基本语法和框架API,完全不需要了解底层原理,工作量非常少(对毕设而言)。
如果不分离前后端的话,可以舍弃Vue,学习成本可能少一些,但工作量可能会大一些。

C/S架构

客户端技术栈比较复杂,我只用过Qt,工作量肯定比硬写C++要少,但仍然比SpringBoot+Vue复杂。C#的话,优势主要在WPF易用,界面可以直接画,但是仍然需要考虑写通信控制逻辑,而SpringBoot是不需要自己写控制逻辑的,但可以进行优化。
我个人的意见是:SpringBoot+Vue是工作量最少的,但普通本科一般不教,学习成本大一些。

使用C#+Signalr可以比较轻松实现你的需求,代码量也很少,一个服务端,一个客户端,总代码量不到100行。

先看演示效果:

img

解决方案目录:

img

服务端示例代码:

MessageHub.cs

using Microsoft.AspNetCore.SignalR;

namespace ChatDemo.Server.Hubs
{
    public class MessageHub : Hub
    {
        public Task SendMessage(string user, string message)
        {
            Console.WriteLine($"服务器接收到消息,内容:{user},{message}");
            return Clients.All.SendAsync("ReceiveMessage", user, message);
        }

        /// <summary>
        /// Called when a new connection is established with the hub.
        /// </summary>
        /// <returns>A <see cref="T:System.Threading.Tasks.Task" /> that represents the asynchronous connect.</returns>
        public override Task OnConnectedAsync()
        {
            Console.WriteLine($"客户[{Context.ConnectionId}]连接成功.");
            return base.OnConnectedAsync();
        }
    }
}

Program.cs

using ChatDemo.Server.Hubs;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSignalR();

var app = builder.Build();

app.MapHub<MessageHub>("/hub/message");
app.Run();

客户端

using Microsoft.AspNetCore.SignalR.Client;

namespace ChatDemo.Client
{
    public partial class FrmMain : Form
    {
        private HubConnection _connection;
        public FrmMain()
        {
            InitializeComponent();
        }

        private async void btnSendMessage_Click(object sender, EventArgs e)
        {
            try
            {
                await _connection.InvokeAsync("SendMessage", txtUser.Text, txtNewMessage.Text);
            }
            catch (Exception ex)
            {
                AppendMessage(ex.Message);
            }
        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            _connection = new HubConnectionBuilder()
                .WithUrl("http://localhost:5025/hub/message")
                .Build();
            _connection.Closed += async (error) =>
            {
                await _connection.StartAsync();
            };
            _connection.On<string, string>("ReceiveMessage", (user, message) =>
            {
                Invoke(() =>
                {
                    var newMessage = $"{user}: {message}";
                    AppendMessage(newMessage);
                });
            });
            try
            {
                _connection.StartAsync();
                AppendMessage("已成功连接到消息服务器");
                txtNewMessage.Focus();
            }
            catch (Exception ex)
            {
                AppendMessage(ex.Message);
            }
        }

        private void AppendMessage(string message)
        {
            rtxtMessages.AppendText($"[{DateTime.Now}]==>>{message}{Environment.NewLine}");
        }
    }
}

你可以把程序打包,然后将包放到服务器上,这样只要你服务器开着,你就可以通过 iP.项目名的方式访问到你所写的程序,至于你说的APP的形式,恐怕你要开发一个 APP 才行,因为在手机上运行的软件基本上都需要网络的支持

你可以去找找C++的课设书 里面好像有个Q友的课设跟你的需求差不多 自己偷点代码差不多了