2015年广工c#与.net课程设计_第1页
2015年广工c#与.net课程设计_第2页
2015年广工c#与.net课程设计_第3页
2015年广工c#与.net课程设计_第4页
2015年广工c#与.net课程设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. NET结构与 C#程序设计 课程设计 题 目 年度月历备忘录 学 院 计算机学院 专 业 计算机科学与技术 年级班别 12 级 4班 学 号 3112005901 学生姓名 柏石先 指导教师 杨劲涛 目录 一、软件说明: 3 功能说明 3 解决什么样的实际问题 3 性能说明 3 程序类型说明 3 二、软件设计 4 软件整体结构图及模块划分 4 在 VS 的“解决方案资源管理器”中的文件说明; .4 各模块对应的主要对象或方法; 5 数据库设计或数据文件说明; 9 算法分析 .10 三、测试 .13 测试用例列表; .13 软件运行截图; .14 测试情况分析 .17 四、小结 .17 五、附录 .18 用到的第三方控件或组件说明 .18 程序的主要代码 .18 一、软件说明: 功能说明 (1) 实现万年历的基本功能,可按年份查看每年的月历。并且每月的日期排布作为一个页 面显示; (2) 能够正确展示星期、一周一行,红色显示节假日、周末。并且加入了更符合实际需求 的农历显示和中国的节假日,二十四节气以及传统节日的显示等等。 (3) 在月历显示界面,鼠标点击任何一天的对应的号码,都可以打开一个小文本框,作简 单记事,所记内容存入本地的文件,并且按记录的日期进行命名,方便用户进行查找。 (4) 如果某天已经有了记事内容,可以提供直接查看以往记录的内容并且提供及时修改, 及时保存,便再次查看的功能。 解决什么样的实际问题 在日历的原有功能的基础上,增加了农历显示,传统节假日和节气的提示。也整合了 备忘录的功能。做到了简洁明了的方便用户记录每一天的备忘,并且能够快捷的方便用户 修改和查看。 性能说明 能较快的响应用户的操作,并且实时刷新界面的显示内容。窗体的切换基本流畅,画 面过度无明显卡顿。数据保存基本可靠,整体流程可行性高,对系统性能要求不高,无需 网络和数据库的的连接。 程序类型说明 是单机版的 windows 窗体程序,文件是以.exe 结尾的可执行程序。 二、软件设计 软件整体结构图及模块划分 在 VS 的“解决方案资源管理器”中的文件说明; 月历备忘录 月历显示界面 年 份 选 择 月 份 选 择 按 要 求 显 示 日 期 备忘编辑模块 首 次 编 辑 修 改 编 辑 备忘保存模块 保 存 位 置 测 试 核 验 保 存 记 录 新 增 更 改 和 删 除 解决方案管理器相关文件说明: Program.cs 则是程序的入口 DateSources 目录下的则是资源数据文件和展示的中间对象 CalendarException.cs 是自定义的月历的异常处理机制的异常类 ChineseDate.cs 是对农历处理的类,主要是转化公历转化为农历 ChineseCalender.cs 是处理节日的类,主要是根据日期计算节假日和节气 Calendar.cs 是月历显示已经交互操作的窗体代码 show.cs 是备忘录编辑和保存的操作的窗体代码 各模块对应的主要对象或方法; 在 panel2 容器里面绘制自定义的日历控件,主要功能是绘制出 5 行 7 列的日历网格布局, 再让布局网格中加载根据选择的当前年份和月份的日期数据。也就是改一个月的日期排序。 按照计算每一天的只是星期几进行相应位置的填充。 private void panel2_Paint(object sender, PaintEventArgs e) int num; Graphics graphics = e.Graphics; Pen pen = new Pen(Color.Blue, 2f); Pen pen2 = new Pen(Color.FromArgb(0xff, 0xeb, 0xd3), 1f); TextureBrush brush = new TextureBrush(Resources.hehe, WrapMode.TileFlipXY); graphics.FillRectangle(brush, 0, 0, 750, 0x1db); graphics.FillRectangle(new SolidBrush(Color.White), 5, 40, 740, 400); SolidBrush brush2 = new SolidBrush(Color.FromArgb(50, 0xff, 0xf7, 0xf1); graphics.FillRectangle(brush2, 10, 0x2d, 560, 30); graphics.DrawLine(pen2, 10, 0x2d, 570, 0x2d); graphics.DrawLine(pen2, 10, 0x4b, 570, 0x4b); for (num = 1; num 0x23f) | (e.Y 0x1b3) return; int num = (e.X - 10) / 80; int num2 = (e.Y - 0x4b) / 60; if (this.dateArraynum, num2 = null) return; DateTime time = DateTime.Parse(this.dateArraynum, num2); this.dtInfo = time; int year = time.Year; int month = time.Month; int day = time.Day; string sendmsg = year + “年“ + month + “月“ + day; Form sf = new show(sendmsg); sf.Show(); / this.panel3.Refresh(); / 将星期几转成数字表示 private int ConvertDayOfWeek(DayOfWeek dayOfWeek) switch (dayOfWeek) case DayOfWeek.Sunday: return 1; case DayOfWeek.Monday: return 2; case DayOfWeek.Tuesday: return 3; case DayOfWeek.Wednesday: return 4; case DayOfWeek.Thursday: return 5; case DayOfWeek.Friday: return 6; case DayOfWeek.Saturday: return 7; default: return 0; 获取农历日期的方法,运用现在的公历日期时间,计算得到相应的农历日期时间。 public static string GetChinaDate(DateTime dt) if (dt china.MaxSupportedDateTime | dt = leapMonth) iMonth-; string szText = “正二三四五六七八九十“; string strMonth = isLeapMonth ? “闰“ : “; if (iMonth = firstDayofWeek) DateTime time2; TimeSpan span; if (num endMonthDay) break; string str = null; string day = null; string holiday = null; string s = null; if (j 0) if (s != “) graphics.DrawString(s, new Font(“, 10f), brush, (float)(0x19 + (80 * j), (float)(0x73 + (60 * i); else graphics.DrawString(day = “初一“) ? str : day, new Font(“, 10f), brush, (float)(0x19 + (80 * j), (float)(0x73 + (60 * i); graphics.DrawString(num.ToString(CultureInfo.InvariantCulture), font, brush, (float)(15 + (80 * j), (float)(80 + (60 * i); else time2 = DateTime.Parse(string.Concat(new object year, “-“, month, “-“, num ); span = (TimeSpan)(time2 - time); this.dateArrayj, i = time2.ToShortDateString(); if (span.Days = 0) graphics.DrawEllipse(new Pen(Color.Chocolate, 3f), 15 + (80 * j), 0x55 + (60 * i), 30, 15); str = ChineseDate.GetMonth(time2); day = ChineseDate.GetDay(time2); holiday = ChineseDate.GetHoliday(time2); s = ChineseDate.GetChinaHoliday(time2); if (holiday != null) graphics.DrawString(holiday.Length 3) ? holiday.Substring(0, 3) : holiday, new Font(“, 9f), brush3, (float)(40 + (80 * j), (float)(90 + (60 * i); if (s != “) graphics.DrawString(s, new Font(“, 10f), brush2, (float)(0x19 + (80 * j), (float)(0x73 + (60 * i); else graphics.DrawString(day = “初一“) ? str : day, new Font(“, 10f), brush2, (float)(0x19 + (80 * j), (float)(0x73 + (60 * i); graphics.DrawString(num.ToString(CultureInfo.InvariantCulture), font, brush2, (float)(15 + (80 * j), (float)(80 + (60 * i); num+; 三、测试 测试用例列表; 下面主要是对备忘输入文本框的测试(备忘录输入编辑框的测试用例为字符型) 1. 保存备忘时的非空校验: 未输入程序应提示不需要保存; 只输入若干个空格,未输入其它字符程序应提示不需要保存; 2. 更改时字段唯一性校验:修改时输入重复的字段值提示友好信息; 3. 字段为特殊字符校验: 中文、英文、空格,数字,字符,下划线、单引号等所有特殊字符的组合 所有特殊字符都进行测试 4. 多行文本框输入: 1、允许回车换行 ; 2、保存后再显示能够保持输入时的格式 ; 3、仅输入回车换行,检查能否正确保存;若能,查看保存结果。若不能,查看是否有 正确提示 ; 4、仅输入空格,检查能否正确保存;若能,查看保存结果。若不能,查看是否有正确 提示 软件运行截图; 主界面的显示:今天的日期会圈出来并且标记好,节日北邮显示,农历会有显 示, 周六,周日的变成其他的颜色区别标记。 提供日期的选择和调转到今天的功能: 点击任何一天都能相应用户的操作,首先会判断改日期是否存在已有的备忘内 容。如果有直接打开显示。如果没有,提示用户将创建新的备忘文件。 备忘录编辑界面,会自动生成当前日期的相关信息。用户可以输入多种字符格 式。换行空格格式的编辑会得到保存。 点击保存操作会提示用户保存成功,点击取消将不保存相关备忘。 再次点击日历的当前日期,因为已经有生成相关备忘记录,因此会直接打开已 有备忘记录方便用户查看。而且此时用户可以随意编辑备忘的内容,并能够保 存到用户的本地磁盘。 测试情况分析 经过测试,发现设定的功能基本能够流畅实现。对一些特定的情况,程序可以得到相 应的正确提示语。对异常的处理能够合理的告知用户。整体会出现明显的 bug 和用户体验 不好的地方。 四、小结 程序关键是通过绘制自定义的控件,来实现月历的显示。还有就是各种函数之间的传 值需要考虑清楚。 因为要对数据进行计算和处理,需要很多算法,所以也参照了网络上常 规的几种日期处理的方式。 打开程序将先获取系统的时间来初始化界面,如果用户对年份和月份进行选择后则会 把对应的值来计算出该月份的第一天所对应的是星期几以及该月的最大天数,并且会对传 来的月份来判断出该月份包含的节日并标红。节日标红这块这是比较难搞的,试了各种方 法最后才找出能对单元格进行标红的正确的语句的格式。 备忘录功能这块相对而言比较容易。但是也有些细节的逻辑处理需要理顺,才能避免 出现一些没必要的错误。比如说要判定目录是否存在来创建目录,判断文件是否存在来创 建文件或者读取文件还有写入文件。由于初始化界面是没有点选单元格如果把读取文件写 到单元格点选时间中去会出现要点一次初始化时的系统时间才会显示备忘录的内容。 因此总的来说收获还是很多,也明白编程这东西,说再多还不如直接实践来得痛快。 很多东西没有亲自动手,也就永远不可能体会到。书本是死的,思想才是活的。 五、附录 用到的第三方控件或组件说明 本程序使用了一些来自网络上对于万年历计算的数据。并综合了一些其它计算类似节 气时间,节假日时间的相关数据。这些内容主要集中在: ChineseCalendar 类,里面包含了中国万年历计算的基础性数据。 ChineseDate 类,主要包含了中国农历的转化的计算底层数据。 程序的主要代码 / 中国农历 public static class ChineseDate private static ChineseLunisolarCalendar china = new ChineseLunisolarCalendar(); private static Hashtable gHoliday = new Hashtable(); private static Hashtable nHoliday = new Hashtable(); private static string JQ = “小寒“, “大寒“, “立春“, “雨水“, “惊 蛰“, “春分“, “清明“, “谷雨“, “立夏“, “小满“, “芒种“, “夏至“, “小暑“, “大暑 “, “立秋“, “处暑“, “白露“, “秋分“, “ 寒露“, “霜降“, “立冬“, “小雪“, “大雪“, “冬至“; private static int JQData = 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758; static ChineseDate() /公历节日 gHoliday.Add(“0101“, “元旦“); gHoliday.Add(“0214“, “情人节“); gHoliday.Add(“0305“, “雷锋日“); gHoliday.Add(“0308“, “妇女节“); gHoliday.Add(“0312“, “植树节“); gHoliday.Add(“0315“, “消权日“); gHoliday.Add(“0401“, “愚人节“); gHoliday.Add(“0501“, “劳动节“); gHoliday.Add(“0504“, “青年节“); gHoliday.Add(“0601“, “儿童节“); gHoliday.Add(“0701“, “建党节“); gHoliday.Add(“0801“, “建军节“); gHoliday.Add(“0910“, “教师节“); gHoliday.Add(“1001“, “国庆节“); gHoliday.Add(“1224“, “平安夜“); gHoliday.Add(“1225“, “圣诞节“); /农历节日 nHoliday.Add(“0101“, “春节“); nHoliday.Add(“0115“, “元宵节“); nHoliday.Add(“0505“, “端午节“); nHoliday.Add(“0815“, “中秋节“); nHoliday.Add(“0909“, “重阳节“); nHoliday.Add(“1208“, “腊八节“); / 获取农历 public static string GetChinaDate(DateTime dt) if (dt china.MaxSupportedDateTime | dt public static string GetYear(DateTime dt) int yearIndex = china.GetSexagenaryYear(dt); str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论