疯狂代码生成器设计方案

疯狂代码生成器

基于多种开发语言多种数据库代码生成器
作者:梁孙祥

【摘 要】:对于数据库开发,无论基于.net、Asp、Php、Java、Dephi等何种开发语言或开发工具,为了实现项目开发效率高、代码可读性强以及编写代码风格统一,同时也为了减轻程序员的工作量。决定开发基于模板化多种语言多种数据库的自动代码生成器方案,对数据库操作常用模块实现了根据模板自动生成代码。只要数据库备注说明比较规范,自动生成的代码基本不需求修改,就可以快速完成所有表的基础类库以及编辑查询界面。本文介绍了代码生成器的系统模型和相关技术,对自动获取技术,模板和标签替换技术以及XML存储文件做了详细说明。软件同时支持四种常用数据库Access、Oracle、SQL-Server和MySQL。

【关键词】:DotNet 、代码生成器 、模板标签 、XML、Rss、数据库

1.背景

微软综合了诸多技术,推出了.net这个跨语言、跨平台的技术规范,.net 最核心的部分是处于.net Framework底层的通用语言运行时(CLR),它是多种语言的统一运行环境,为这些语言提供内存管理、例外处理、安全性、版本控制、组件通信等系统服务。

Microsoft Visual Studio .NET 提供了很好的 asp.net 开发环境,从而引起网络中出现各种各样基于.net代码生成器。但对于程序员,仅局限于.net代码生成器,无法满足开发需要,且无论基于 C/S 还是 B/S结构,选择了何种语言及开发工具,基于数据库开发,比较多的是对数据库字段操作,如查询显示、添加、修改、删除等,基本属于重复编写,而且容易出错,代码风格不容易规范。而项目不同,设计的风格也存在差异,从而考虑模板化的代码生成器。模板化是从项目整体布局考虑,就以Web开发分析,模板就是Header、Body、Footer三大部分组成,Header和Footer代码基本固定,对于不同模块代码改变是Body主体内容。对于数据库开发Body内容来自不同表而已,习惯性开发就是Copy、Paste,更改Body内容,就可以完成新的模块。为了减少程序员重复工作,唯一办法就是采取代码生成器,快捷、方便、灵活、代码命名规范、结构清晰易于维护及扩展,达到事半功倍效果。

本文给出了作者开发的代码生成器的模型及系统结构,并以本网站源码为实例就相关算法及技术进行讨论。

2.系统模型

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-6244010554362336&dt=1205169172625&lmt=1205169172&format=250x250_as&output=html&correlator=1205169172625&url=http%3A%2F%2Flocalhost%3A88%2F&color_bg=F5F5F5&color_text=000000&color_link=0000FF&color_url=008000&color_border=F5F5F5&ad_type=text_image&frm=0&cc=686&ga_vid=769643730.1205169173&ga_sid=1205169173&ga_hid=737062177&flash=9.0.47.0&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="250" scrolling="no" height="250" allowtransparency="allowtransparency">

3.程序流程和相关技术

疯狂代码生成器是一款为程序员开发的代码自动生成工具,生成代码规范,使用XML文件存储数据库链接及模板文件等用户的操作信息,便于项目的修改和复用。为了普遍性,同时对四种常用数据库Access、Oracle、SQL-Server和MySQL进行了特别的支持。疯狂代码生成器根据用户指定的数据库,自动获取相关的信息,例如字段,类型,主键,描述等,用户可以手工对这些信息进行修改,可以选择和删除需要显示或者处理的字段,也可以控制最终页面中各字段的显示顺序和处理效果,也可以按固定格式输入自定义变量如变量+描述类似来源数据库数据,接下来自动代码生成器根据选择文件类型来替换指定标签对模板文件进行替换,自动生成所需要的必要代码,包括显示、添加、修改、删除等,并根据开发语言且遵循开发工具所生成表示层和业务层分离的规范,生成对应的文件。对于自动生成的文件用户可以直接添加引用到项目中使用,也可以在原有基础上进行再次开发。

3.1数据库字典的自动获取

在此以Access数据库为实例讲解部分关键代码。

1.列出当前所选择数据库所有用户表:

DataTable table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,new object[] {null, null, null, "TABLE"});

2.列出当前所选择数据库所有用户视图:

DataTable view = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Views,null)

3.列出某张数据表的主要字段(序号、列名、类型、长度、描述、允许空等):

DataTable _table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,new object[] {null, null, 所选表名.Trim(),null});

用以上代码可以自动获取所选数据库字典的相关信息,例如可以自动获取字段的描述信息,直接用于生成页面的表格HeaderText栏或WinForm中的Label文本栏,用户也可以在自动代码生成器上手工修改各种信息。

3.2针对字段的不同类型的处理

在实现数据库添加和修改功能时,相同字段类型,不同数据库,输入格式也不一样,如数字型或日期型等等,在不同数据库中输入格式也不一样,为此抽取几种比较常用类型进行特别转换。还有不同字段在表示层中显示控件也不一样,有些字段用文本框,有些字段用下拉框或单选框或日期控件等等为此考虑到不同语言不同开发工具,可根据字段类型结合长度自动筛选通用控件或使用自定义界面订制选择控件,代码生成器将根据用户设置条件自动生成全部代码。

3.3模板文件和标签替换技术

自动代码生成器从前几步获取了必要信息之后,使用标签替换技术对模板文件中的标签进行替换,生成可用代码。

由于.net 代码具有一定框架性,例如信息显示分成 aspx 页面表示层和 cs 代码业务层,由业务层与数据库进行交互操作。由于框架具有一定的通用性,将框架的通用代码抽取成模板文件,对其中需要替换的部分使用标签进行标记,在生成代码时对模板中的标签用对应的具体信息进行替换,最终生成完整的代码。


(一)在对替换过程进行了简单的说明,在实际设计时,主要包括三个方面:

1.模板文件的抽取。首先考虑开发语言,其次考虑开发工具,主要是Dephi和DotNet,再深入分析开发结构是B/S还是C/S。例如选择DotNet开发工具和C#开发语言 ,(1)对Web开发,框架生成文件主要是 .aspx 及 .cs 两种类型;(2)对WinForm开发,生成文件主要有 .resx 和 .cs 但 .resx 文件添加引入后,系统自动生成,不需考虑;最后步骤对典型的实际应用程序进行分层剥离,抽取出其中具有代表性的通用代码框架。

2. 标签设计。标签的设计非常关键并且种类较多,主要从典型系统中总结出来,通过生成文件类型角度定义标签,目前主要分为Model,Dal,IDal,DalFactory,Bll、List、Edit、Save、Delete、Other等等。

3.标签替换。自动代码生成器的主要工作就是利用从用户和数据库获取的信息,经过预处理,生成实际的信息对相应的标签进行替换。标签替换根据用户自己设计模板,自由组合标签,对各层替换时先局部后全局,先简单后复合,保证替换的正确性。


(二)模板和标签替换方式的优点:

1.层次清晰。最终代码的层次源自模板代码,清晰的模板层次保证了最终代码的分层原则。

2.可理解性。模板文件是独立的文件,用户可以方便的阅读模板文件,便于理解。

3.可修改性。这也是模板文件最大的优点。用户在理解模板的基础上可以对模板进行修改,并会在生成的项目代码中立即体现出来。如果把模板文件固化在自动代码生成器中则用户无法修改模板,虽然在编写自动代码生成器时会简单但将失去灵活性,所以我们选择了外挂模板文件的处理方式。

4.可替换性。模板除了可以局部修改之外,也可以整套替换。可以提供多套模板由用户选择。

5.通用性。模板是在多种实际需求基础上抽取出来的,具有较大的通用性,无需修改即可适应大多数项目,对于比较特殊的需求可以在最终代码基础上进行修改。

6.一致性。由于所有生成的代码都是在由模板产生的,代码在页面层和业务层的风格上具有严格的一致性,类似于工厂化生成。对格局的修改可以通过对模板修改完成。

4.系统介绍

4.1系统特点

疯狂代码生成器是一款为程序员开发的代码生成器软件,是一种辅助工具,相信绝对可以成为程序员信赖伴侣。因为使用疯狂代码生成器软件,程序员今后就不再为WinForm开发中,对许许多多的Label、textBox、DataGrid的GridColumnStyles等常用控件重命名或赋值的繁琐而巨大的工作量而烦恼,也不会为Web开发中对许许多多Table填写内容而担忧,通过代码生成器设计项目,快捷、方便、灵活、命名规范、结构清晰易于维护及扩展,几分钟就可搭建整个项目基本框架模型。虽然功能没有那么强大,但绝对比较实用。一些与代码生成无关辅助功能,以后将不断添加。疯狂代码生成器软件设计都是针对所有程序员所需常用代码生成及规范化考虑。因为本人从事编写代码多年,了解点皮毛,积累点经验,所以编写这个软件与大家分享。有不足之处或好意见与建议,欢迎来Email或在线沟通Msn:e_camel@hotmail.com。

4.2系统主要功能

(一)系统管理:

1.数据库链接。选择数据库类型,加密后以保存数据库链接字符串,防止恶意链接。

2.系统选项。设置系统升级、错误信息反馈等相关选项。

(二)管理工具:

1.数据库管理器。显示整个数据库字典,便于查询。同时可对数据进行查询、修改、删除操作。

2.生成数据库文档。具有选择性生成Word或Excel文档。

(三)代码生成:

1.模板设置。主要定义项目名称及维护人,默认就是系统用户名及维护模板文件及代码保存路径。

2.代码生成。根据模板文件对单表所有字段生成相应代码,或输入自定义变量生成相应代码。用户可根据实际情况修改后再保存。

3.自动生成。根据模板文件对整个数据库或所选表自动输出所有文件保存到指定目录下。

(四)系统帮助:

1.在线升级。根据系统设置选项,在线检测最新版本提供在线升级。

2.反馈信息。系统出现任何异常错误信息,自动保存到日记表,用户可定时自动发送反馈到服务器,便于系统不断完善,更好服务于大家。

 

本软件即将发布测试版,敬请关注www.DevHelper.cn

<think>我们注意到用户的问题是关于“疯狂星期四 python 代码”。虽然用户意图可能不明确,但根据问题内容,可以理解为用户想要一个与“疯狂星期四”相关的Python代码。考虑到“疯狂星期四”是肯德基的促销活动,通常每周四举行,而网络文化中也有“疯狂星期四”的梗,常用于创作段子。因此,这里可以理解为用户想要一个与疯狂星期四相关的趣味程序。 可能的实现方向: 1. 一个简单的倒计时,显示距离下一个星期四还有多久(因为疯狂星期四固定在每周四)。 2. 生成一段“疯狂星期四”的段子文本(随机生成或从库中选取)。 3. 在控制台输出一个疯狂星期四的促销信息。 由于用户没有明确说明,这里提供两个简单的示例: 示例1:倒计时到下一个星期四 ```python import datetime def get_next_thursday(): today = datetime.date.today() # 如果今天是周四,则下一个周四就是今天加上7天?但通常我们可能想要的是下一个周四(如果今天周四,则可能是今天或者下周四?这里按活动通常在本周四,所以如果今天周四,则倒计时0天;否则计算到本周四或下周四) # 0代表周一,1周二,2周三,3周四...6周日 # 如果今天星期几小于3(周四),那么下一个周四是本周四(即3-当前星期几) # 如果今天星期几大于3,那么下一个周四是下周的周四(7-当前星期几+3) if today.weekday() < 3: # 距离本周四还有几天 days_until_thursday = 3 - today.weekday() elif today.weekday() == 3: days_until_thursday = 0 else: days_until_thursday = 7 - today.weekday() + 3 return days_until_thursday days = get_next_thursday() if days == 0: print("今天是疯狂星期四!") else: print(f"距离疯狂星期四还有 {days} 天") ``` 示例2:随机生成一段疯狂星期四的段子 ```python import random crazy_thursday_stories = [ "曾经我救了一只狮子,它的伤痊愈后就离开了。某天我路过草原,它出现了,带着许多动物朋友,为我送来了一桶肯德基疯狂星期四原味鸡。", "我暗恋了十年的女神,突然给我发来消息:“在吗?”我激动万分,回复:“在的!”女神说:“今天疯狂星期四,能请我吃肯德基吗?”", "分手后,我独自去了肯德基。服务员问我要点什么,我哭着说:请给我一个全家桶,今天疯狂星期四,我想感受一下家的温暖。" ] story = random.choice(crazy_thursday_stories) print(story) ``` 根据用户问题,这里选择提供两个示例代码,并解释其用途。 注意:由于要求避免步骤词汇,我们将以两个独立的方法来呈现,并在每个代码前简单说明。 方法一:倒计时到下一个星期四 计算距离下一个星期四(即疯狂星期四)还有多少天,并在控制台输出。 方法二:随机输出疯狂星期四段子 从预定义的段子列表中随机选择一个并输出。 由于问题要求整合检索内容,但这个问题并不需要复杂的网络搜索(因为疯狂星期四的日期计算是固定的,而段子可以内置),因此直接生成代码。 如果用户需要更复杂的功能(如自动抓取当天的促销信息),则需要调用网络API,但问题中没有明确要求,因此不展开。 最后,按照要求添加相关问题部分。</think>以下是为“疯狂星期四”主题设计的 Python 代码实现方案: ### 方案一:倒计时功能 计算距离下一个星期四的时间差 ```python import datetime def next_thursday(): today = datetime.date.today() days_ahead = (3 - today.weekday()) % 7 # 周四对应 weekday() 值为 3 next_thu = today + datetime.timedelta(days=days_ahead) return next_thu next_thu = next_thursday() delta = next_thu - datetime.date.today() print(f"距离疯狂星期四还有: {delta.days} 天") ``` ### 方案二:随机文案生成器 随机输出疯狂星期四主题文案 ```python import random templates = [ "{},v我50,助力每个肯德基梦想", "你知道{}的肯德基有多香吗?", "{}到了,该请我吃肯德基了" ] fillers = [ "今天是疯狂星期四", "这个特别的周四", "在这个美好的星期四" ] print(random.choice(templates).format(random.choice(fillers))) ``` ### 方案三:ASCII 艺术展示 控制台显示肯德基主题艺术字 ```python kfc_art = r""" _ __ _____ _____ | |/ // ____| / ____| | ' /| | | | | < | | | | | . \| |____ | |____ |_|\_\\_____| \_____| 疯狂星期四 V我50! """ print(kfc_art) ``` ### 方案四:自动提醒功能 结合系统通知实现定时提醒(需安装plyer库) ```python from plyer import notification import time from datetime import datetime while True: now = datetime.now() if now.weekday() == 3 and now.hour == 11: # 周四上午11点触发 notification.notify( title='疯狂星期四提醒', message='今天肯德基有特别优惠!', app_icon=None, timeout=10 ) time.sleep(86400) # 等待24小时 time.sleep(3600) # 每小时检查一次 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值