C#编程学习(01):北斗时转日历时的小程序

简介: C#编程学习(01):北斗时转日历时的小程序

需求说明:给定nav格式的北斗时文件从中提取出北斗周和周内秒信息,将该信息转化为日历时


软件界面:


2018112122390753.jpg


设计流程:


1. 变量定义:


批量处理: 打开,btn_openFile; 转换, btn_timeTrans


单一转换:北斗周对应文本框,txb_bdsWeek;周内秒对应的文本框:txb_weekInnerSec;转换结果对应的文本框,txb_resault;转换按钮:btn_singleTrans;清空按钮,btn_clear


2. 界面设计


将对话框的最大化按钮设为False的两种方式:


1)在 InitializeComponent()函数中手写代码:this.MaximizeBox = false;


2)在属性MaximizeBox设为false


将对话框设置为大小不可调整:属性FormBorderStyle设为FixedDialog


3. 代码实现


3.1 批量处理-->打开按钮

private void btn_openFile_Click(object sender, EventArgs e)
        {
            //弹出文件对话框
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();
            txtPath = ofd.FileName;
            if (txtPath.Split('.')[1] != "nav")
            {
                MessageBox.Show("打开文件应为nav格式文件,请重新选择打开", "错误提示");
            }
        }

3.2 批量处理-->转换

 private void btn_timeTrans_Click(object sender, EventArgs e)
        {
            if (txtPath == null)
            {
                MessageBox.Show("请点击 打开 按钮,选择要转换的文件", "错误提示");
                return;
            }
            string outputFilePath = txtPath.Split('.')[0] + ".bds";
            System.IO.StreamWriter file = new System.IO.StreamWriter(outputFilePath, false);
            file.Write("北斗周 周内秒 年 月 日 时 分 秒\r\n");
            //打开文件开始转换
            System.IO.StreamReader inputFile = System.IO.File.OpenText(txtPath); 
            string nextLine; 
            while ((nextLine = inputFile.ReadLine()) != null) 
            {
                string[] substrtmp = nextLine.Split(';');
                string[] substrs = substrtmp[1].Split(',');
                //得到北斗周和周内秒
                int bdsWeek = int.Parse(substrs[0]);
                double weekInnerSec = double.Parse(substrs[1]);
                CalendarTime ct = gps2CalendarTime(bdsWeek, weekInnerSec);
                file.Write("{0:D} {1:N} {2:D} {3:D} {4:D} {5:D} {6:D} {7:N}\r\n", 
                    bdsWeek, weekInnerSec, ct.year, ct.month, ct.day, ct.hour, ct.minus, ct.second);
            } 
            //关闭文件
            file.Close();
            //释放对象
            inputFile.Dispose();
            file.Dispose();
            MessageBox.Show("输出路径为:" + outputFilePath, "转换成功");
        }

3.3 北斗时到日历时转换函数

private CalendarTime gps2CalendarTime(int weekno, double gpstow)
        {
            CalendarTime ct = new CalendarTime();
            int[] dinmth={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            double isecs = gpstow;
            double fsec = gpstow - isecs;
            int dayofw = (int)(isecs / 86400);
            isecs = isecs - 86400 * dayofw;
            int h = (int)(isecs / 3600);
            isecs = isecs - 3600 * h;
            int m = (int)(isecs / 60);             
            double s = isecs - 60 * m + fsec;
            //输出时分秒
            ct.hour = h;
            ct.minus = m;
            ct.second = s;
            int ttlday = dayofw + 7 * weekno;
            ttlday -= 360;
            int yr = 1981;
            while(ttlday > 366)
            {
                ttlday = ttlday - 365;
                if (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0)
                {
                    ttlday -= 1;
                }
                yr++;
            }
            if (ttlday == 366)
            {
                if (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0)
                {
                    ct.year = yr;
                    dayofw = 366;
                }
                else
                {
                    ct.year = yr + 1;
                    dayofw = 1;
                }
            }
            if (ttlday < 366)
            {
                ct.year = yr;
                dayofw = ttlday;
            }
            int mon = 0;
            foreach (int i in dinmth)
            {
                mon += 1;
                if (ttlday <= i && ttlday > 0)
                {
                    ct.day = ttlday;
                    ct.month = mon;
                    ttlday = 0;
                }
                else if (mon == 2)
                {
                    if (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0)
                    {
                        if (ttlday > 29)
                        {
                            ttlday -= 29;
                        }
                        else
                        {
                            ct.day = 29;
                            ct.month = 2;
                            ttlday = 0;
                        }
                    }
                    else
                    {
                        ttlday -= 28;
                    }
                }
                else
                {
                    ttlday -= dinmth[mon];
                }
                if (ttlday == 0) break;
            }
            return ct;
        }

3.4 单一处理-->转换

private void btn_ouputFile_Click(object sender, EventArgs e)
        {
            int bdsWeek = int.Parse(txb_bdsWeek.Text);
            double weekInnerSec = double.Parse(txb_weekInnerSec.Text);
            CalendarTime ct = gps2CalendarTime(bdsWeek, weekInnerSec);
            txb_resault.Text = string.Format("{0:D} {1:D} {2:D} {3:D} {4:D} {5:N}", ct.year, ct.month, ct.day, ct.hour, ct.minus, ct.second);
        }

3.5 单一处理-->清除

private void btn_clear_Click(object sender, EventArgs e)
        {
            txb_weekInnerSec.Text = null;
            txb_resault.Text = null;
            txb_bdsWeek.Text = null;
        }

4 抛砖引玉

对行数较多的大文件报如下错,还请高手指点

2018112122560236.png


相关文章
|
10天前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
|
10天前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
|
10天前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
|
10天前
|
人工智能 C# 开发者
C#编程中的图形界面设计
【4月更文挑战第21天】本文探讨了C#在GUI设计中的应用,介绍了Windows Forms、WPF和UWP等常用框架,强调了简洁界面、响应式设计和数据绑定等最佳实践。通过实际案例,展示了C#在企业应用、游戏开发和移动应用中的GUI实现。随着技术发展,C#在GUI设计的未来将趋向于跨平台、更丰富的组件和AI集成,为开发者创造更多可能性。
|
10天前
|
存储 算法 C#
C#编程与数据结构的结合
【4月更文挑战第21天】本文探讨了C#如何结合数据结构以构建高效软件,强调数据结构在C#中的重要性。C#作为面向对象的编程语言,提供内置数据结构如List、Array和Dictionary,同时也支持自定义数据结构。文章列举了C#实现数组、链表、栈、队列等基础数据结构的示例,并讨论了它们在排序、图算法和数据库访问等场景的应用。掌握C#数据结构有助于编写高性能、可维护的代码。
|
10天前
|
开发框架 Linux C#
C#编程的跨平台应用
【4月更文挑战第21天】C#与.NET Core的结合使得跨平台应用开发变得高效便捷,提供统一编程模型和高性能。丰富的类库、活跃的社区支持及Visual Studio Code、Xamarin等工具强化了其优势。广泛应用在企业系统、云服务和游戏开发中,虽面临挑战,但随着技术进步,C#在跨平台开发领域的前景广阔。
|
11天前
|
人工智能 C# 云计算
C#编程的未来发展趋向
【4月更文挑战第21天】C#编程未来将深化跨平台支持,强化云计算与容器技术集成,如.NET Core、Docker。在AI和ML领域,C#将提供更丰富框架,与AI芯片集成。语言和工具将持续创新,优化异步编程,如Task、async和await,提升多核性能。开源生态的壮大将吸引更多开发者,共创更多机遇。
|
11天前
|
程序员 C#
C#编程中的面向对象编程思想
【4月更文挑战第21天】本文探讨了C#中的面向对象编程,包括类、对象、封装、继承和多态。类是对象的抽象,定义属性和行为;对象是类的实例。封装隐藏内部细节,只暴露必要接口。继承允许类复用和扩展属性与行为,而多态使不同类的对象能通过相同接口调用方法。C#通过访问修饰符实现封装,使用虚方法和抽象方法实现多态。理解并应用这些概念,能提升代码的清晰度和可扩展性,助你成为更好的C#程序员。
|
11天前
|
开发框架 安全 .NET
C#编程高手的成长之路
【4月更文挑战第21天】本文揭示了成为C#编程高手的路径:牢固掌握基础知识和面向对象编程,深入了解C#特性如泛型和委托,精通ASP.NET等框架工具,养成良好编程习惯,持续学习实践并参与开源项目,勇于挑战创新。通过这些步骤,不断提升编程技能,迈向C#编程的巅峰。
|
12天前
|
IDE 程序员 C#
C#编程入门:从零开始的旅程
【4月更文挑战第20天】本文引导初学者入门C#编程,从环境搭建开始,推荐使用Visual Studio Community版作为IDE。接着,通过编写&quot;Hello, World!&quot;程序,介绍基本语法,包括数据类型、运算符和表达式。文章还涉及控制结构、函数和方法,以及面向对象编程概念。通过学习,读者将对C#有初步了解,并激发进一步探索编程世界的兴趣。