`

AIR桌面程序-实现对客户信息管理(FLEX+XML数据库)

    博客分类:
  • Flex
阅读更多

本程序实现了对XML的增、删、改、查操作,并同步到xml数据库中

用到的技术:

1.Flex基本布局技术,常用控件操作

2.基本事件的触发、自定义事件的触发

3.flex读写更改 操作XML对象

4.基本数据库知识

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
						xmlns:mx="http://www.adobe.com/2006/mxml" 
						layout="absolute"
						width="720" 
						height="600" 
						creationComplete="initApp()"
						xmlns:s="library://ns.adobe.com/flex/spark" 
						viewSourceURL="srcview/index.html">
	
	<mx:Script>
		<![CDATA[
			import event.*;
			
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.events.IndexChangedEvent;
			import mx.modules.Module;
			import mx.utils.StringUtil;
			
			import tree.*;  
			
			//set bindable
			[Bindable]
			internal var currentPeople:people=new people;
			public var peopledata:XML;
			public var path:File=File.documentsDirectory.resolvePath("D:/peoples.xml");
			public var n:Number;
			public var warning:String="填写信息不全";
			public var warningtitle:String="警告";
			public var searchwarning:String="填写内容不全";
			
			/**
			 * InitApp function handler
			 * */
			internal function initApp():void{				
				var peoples:FileStream=new FileStream;
				peoples.open(path,FileMode.READ);
				peopledata=XML(peoples.readUTFBytes(peoples.bytesAvailable));
				peoples.close();
				var users:Object=peopledata.user;
				n=0;
				
				for(var i:* in users){
					var newPeople:peopleItem=new peopleItem();
					var peopleInfo:people=new people;
					peopleInfo.setpeople(users[i]);
					newPeople.p=peopleInfo;
					holder_user.addChild(newPeople);
					newPeople.addEventListener(selectPeopleEvent.CLICK_PEOPLE,selectHandler);
					newPeople.y=n*newPeople.height;
					n++;
				}
			}
			/**
			 * writedata
			 **/
			public function writedata():void{
				var writedata:FileStream=new FileStream;
				writedata.open(path,FileMode.WRITE);
				writedata.writeUTFBytes(peopledata.toString());
				writedata.close();
			}
			
			/**
			 * 
			 * match
			 * */
			public function match(selectedone:people):int{
				var index:int=new int;
				var conter:int;
				for(conter=n-1;conter>=0;conter--){
					if(selectedone.id==peopledata.user[conter].id){
						index=conter;
					}else{
						continue;
					}
				}
				return index;
			}
			/**
			 * 
			 * 
			 * */
			internal function selectHandler(evt:selectPeopleEvent):void{
				currentPeople=evt.selectedUser;
			}
			/**
			 * 
			 * 
			 * */
			public function clearHandler():void{
				addname.text="";
				addotherinfo.text="";
				addphone.text="";
				addotherinfo.text = "";
				addmale.selected=false;
				addfemale.selected=false;
			}
			/**
			 * 
			 * 
			 * */
			public function addHandler():void{
				var addcontent:XML;
				if(addname.text==""||addotherinfo.text==""||addphone.text==""||(!(addmale.selected||addfemale.selected))){
					Alert.show(warning,warningtitle,Alert.OK);
				}
				else if(addmale.selected){
					 addcontent = <user>
						 					<id>{n}</id>
											<name>{addname.text}</name>
											<sex>male</sex>
											<phonenum>{addphone.text}</phonenum>
											<otherinfo>{addotherinfo.text}</otherinfo>
											</user>;
					peopledata.appendChild(addcontent);
					writedata();
					holder_user.removeAllChildren();
					initApp();
					Alert.show("添加成功!");
				}
				else{
					addcontent  =   <user>
											<id>{n}</id>
											<name>{addname.text}</name>
											<sex>female</sex>
											<phonenum>{addphone.text}</phonenum>
											<otherinfo>{addotherinfo.text}</otherinfo>
											</user>;
					peopledata.appendChild(addcontent);
					writedata();
					holder_user.removeAllChildren();
					initApp();
					Alert.show("添加成功!");
				}
				clearHandler();
			}
			public function textChangeHandler(modified:people):void
			{
				var num:int=match(modified);
				peopledata.user[num].name=peoplename.text;
				peopledata.user[num].otherinfo=peopleotherinfo.text;
				peopledata.user[num].phonenum=peoplephone.text;
				writedata();
				holder_user.removeAllChildren();
				initApp();
				if(male.selected){
					peopledata.user[num].sex="male";
				}
				else{
					peopledata.user[num].sex="female";
				}
			}
			/**
			 * 
			 * 
			 * */
			public function modifyHandler(modified:people):void{
				if(this.ModifyBtn.selected)
				{
					peoplename.enabled = true;
					peoplesex.enabled = true;
					peopleotherinfo.enabled = true;
					peoplephone.enabled = true;
					this.ModifyBtn.label = "保存信息";
				}		
				else
				{
					var num:int=match(modified);
					/* 				if(peoplename.text==""||peoplephone.text==""||peopleid.text==""||(!(male.selected||female.selected))){
					Alert.show(warning,warningtitle,Alert.OK);
					} */
					peopledata.user[num].name=StringUtil.trim(peoplename.text);
					peopledata.user[num].phonenum=StringUtil.trim(peoplephone.text);
					peopledata.user[num].otherinfo=StringUtil.trim(peopleotherinfo.text);
					writedata();
					holder_user.removeAllChildren();
					initApp();
					if(male.selected){
						peopledata.user[num].sex="male";
					}				
					else{
						peopledata.user[num].sex="female";
					}
					Alert.show("修改成功");
					selectPeopleEvent.userItemClicked = false;
					this.ModifyBtn.label = "修改此客户";
				}
			}
			/**
			 * 
			 * 
			 * */
			public function deleteHandler(deleted:people):void{				
				var num:int=match(deleted);
				delete peopledata.user[num];
				writedata();
				holder_user.removeAllChildren();
				n--;
				//Alert.show("Delete success!");
				initApp();
				selectPeopleEvent.userItemClicked = false;
			}
			/**
			 * Search Handler
			 * search a user by its name or phone(part of its name or phonenum)
			 * */
			public function searchHandler():void{
				var aim:int=new int;
				aim=n-1;
				if(searchname.text==""&&searchphone.text==""){
					Alert.show(searchwarning,warningtitle,Alert.OK);
				}else{
					for(aim;aim>=0;aim--){
						if(peopledata.user[aim].name.indexOf(StringUtil.trim(searchname.text)) != -1 || peopledata.user[aim].phonenum.indexOf(StringUtil.trim(searchphone.text)) != -1
							|| peopledata.user[aim].name == StringUtil.trim(searchname.text) || peopledata.user[aim].phonenum == StringUtil.trim(searchphone.text)
							|| peopledata.user[aim].name.search(StringUtil.trim(searchname.text)) != -1 || peopledata.user[aim].phonenum.search(StringUtil.trim(searchphone.text)) != -1	){
							break;
						}
					}
					currentPeople.setname(peopledata.user[aim].name);
					currentPeople.setsex(peopledata.user[aim].sex);
					currentPeople.setphone(peopledata.user[aim].phonenum);
					currentPeople.setotherInfo(peopledata.user[aim].otherinfo);
				}
				holder_user.removeAllChildren();
				initApp();
			}

		]]>
	</mx:Script>
	
	<mx:Panel width="200" layout="absolute" cornerRadius="15" title="客户列表" left="10" top="10" height="540">
		<mx:Canvas id="holder_user"   width="100%" height="100%">
		</mx:Canvas>
	</mx:Panel>
	<mx:Panel id="userInfo" width="435" layout="absolute" height="540" title="客户详细信息" cornerRadius="15" top="10" left="218">
		<s:VGroup paddingTop="10" paddingLeft="20" id="manageUser">	
			<s:HGroup gap="10" width="100%" height="25">
				<s:Label text="客户信息管理" paddingTop="5" fontSize="14" fontWeight="bold" toolTip="点击左边的用户即可"/>
				<s:HGroup gap="10" width="100%" height="30" paddingLeft="10" visible="{selectPeopleEvent.userItemClicked}" includeInLayout="{selectPeopleEvent.userItemClicked}" >
					<s:ToggleButton label="修改此客户"  width="100" id="ModifyBtn" change="modifyHandler(currentPeople)"/>
					<mx:Button  label="删除此客户"  width="100" click="deleteHandler(currentPeople)"/>	
				</s:HGroup>
			</s:HGroup>
					
			<s:HGroup gap="10"  width="400" height="30" paddingTop="5">
				<mx:Label text="姓名:"/>
				<mx:TextInput text="{currentPeople.name}"  id="peoplename" enabled="{!selectPeopleEvent.userItemClicked}" />
			</s:HGroup>
			<s:HGroup gap="10"  width="400" height="30" paddingTop="5">
				<mx:Label text="性别:"/> 
				<mx:TextInput text="{currentPeople.sex}"  id="peoplesex" enabled="{!selectPeopleEvent.userItemClicked}" />
				<mx:RadioButton  label="男"   id="male"/>
				<mx:RadioButton  label="女"  id="female"/>
			</s:HGroup>
			<s:HGroup  gap="10"  width="400" height="30" paddingTop="5">
				<mx:Label text="手机:"/>
				<mx:TextInput  text="{currentPeople.phonenum}" id="peoplephone" enabled="{!selectPeopleEvent.userItemClicked}" />
			</s:HGroup>
			<s:HGroup gap="10"  width="400" height="30" paddingTop="5">
				<mx:Label text="其他:"/>
				<mx:TextInput  text="{currentPeople.otherinfo}"  id="peopleotherinfo" enabled="{!selectPeopleEvent.userItemClicked}" />
			</s:HGroup>
		</s:VGroup>		
	
		<s:VGroup gap="2" width="100%" paddingTop="200" horizontalAlign="left" paddingLeft="20" id="searchUser">
			<mx:HRule width="80%" height="4" />
			<s:Label text="搜索客户 (请输入要查询的客户姓名 或 客户手机号码)" fontSize="14" fontWeight="bold" paddingTop="5"/>
			<s:HGroup gap="10">
				<mx:Label  text="客户姓名:" />
				<mx:TextInput   id="searchname"/>
				<mx:Button  label="搜索" click="searchHandler()"/>
			</s:HGroup>	
			<s:HGroup gap="10">
				<mx:Label  text="手机号码:"  />
				<mx:TextInput    id="searchphone"/>		
				<mx:Button  label="搜索" click="searchHandler()"/>
			</s:HGroup>
			<s:HGroup paddingTop="10"/>
			<mx:HRule width="80%" height="4"/>
		</s:VGroup>
		
		<s:VGroup gap="2" width="100%" paddingTop="300" paddingLeft="20" id="addUser">
			<s:Label text="添加新客户信息" fontSize="14" fontWeight="bold" paddingTop="5"/>
			<s:HGroup gap="10" paddingTop="5" width="400" height="30">
				<mx:Label  text="姓名:" />
				<mx:TextInput   id="addname"/>
			</s:HGroup>	
			<s:HGroup width="400" height="30" paddingTop="5">
				<mx:Label  text="性别:" />
				<mx:RadioButton  label="男"   id="addmale"/>
				<mx:RadioButton  label="女"  id="addfemale"/>
			</s:HGroup>
			<s:HGroup gap="10" width="400" height="30" paddingTop="5">
				<mx:Label  text="手机:"  />
				<mx:TextInput   id="addphone"/>		
			</s:HGroup>
			<s:HGroup gap="10" width="400" height="30" paddingTop="5">
				<mx:Label  text="其他:"  />
				<mx:TextInput  id="addotherinfo"/>
			</s:HGroup>						
			<s:HGroup gap="10" width="400" height="40" paddingLeft="10" paddingTop="10">
				<s:Button  label="添加" click="addHandler()"/>
				<s:Button label="取消" click="clearHandler()"/>
			</s:HGroup>			
		</s:VGroup>
			
	</mx:Panel>
</mx:WindowedApplication>

 完整源码   待续……

  • 大小: 14.9 KB
1
1
分享到:
评论

相关推荐

    Flex 的 Adobe AIR快速入门

    ### Flex的Adobe AIR快速入门知识点解析 #### 一、处理文件和数据 1. **构建目录搜索应用程序** - **异步读取文件**: 在构建目录搜索应用程序时,使用`getDirectoryListingAsync()`方法来异步获取目录列表,这样...

    AIR应用开发中文指南.pdf

    例如,如果选择使用 Flex Builder,则需确保已正确安装并配置 Flex Builder 对 AIR 的支持。如果是使用 Flex SDK,则需要完成相应的安装和配置步骤。 #### 三、创建 AIR 应用程序 - **使用 Flex Builder 创建 AIR ...

    flex air sqlite客户端安装软件

    综合以上信息,我们可以得出,这个“flex air sqlite客户端安装软件”是一个使用Flex和AIR技术开发的桌面应用程序,专门用来方便地管理和测试SQLite数据库。用户通过下载安装文件,双击Lita.swf来启动程序,利用其...

    Flex实现动态仪表盘

    7. **响应式设计**:如果你的仪表盘需要适应不同的屏幕尺寸,可以利用Flex的布局管理器和条件语句来实现响应式设计,确保在桌面、平板和移动设备上都能良好显示。 8. **性能优化**:对于大量数据的处理,要注意性能...

    FLEX写的名片管理系统(源代码无注释版)……

    AIR允许开发者将Web技术应用于桌面环境,这意味着名片管理系统不仅可以在Web浏览器上运行,还可以作为一个独立的应用程序在用户的电脑上离线使用。 5. **数据存储**:虽然源代码没有注释,但可以推测系统可能使用了...

    《使用AdobeAIR开发Android应用程序》源代码

    5. **数据存储与本地化**:学习如何使用AIR的本地文件系统接口和SQLite数据库进行数据持久化,以及如何实现多语言支持和资源文件的管理。 6. **性能优化**:源代码可能包含了针对Android设备性能优化的技巧,如减少...

    使用Restfulx框架开发AIR程序

    标题 "使用Restfulx框架开发AIR程序" 暗示了我们要探讨的是如何利用Restfulx框架来构建Adobe Integrated Runtime (AIR)应用程序。Restfulx是一个用于构建RESTful API客户端的开源库,它使得在AIR应用中与远程服务器...

    air finance源代码

    "Air finance源代码"指的是利用Adobe AIR开发的一个金融应用的源代码,可能是用于财务管理或者金融服务的示例程序。这个程序展示了如何在Adobe AIR平台上构建自定义组件和功能。 在深入探讨源代码之前,我们先了解...

    flex gbook 留言本下载

    6. **AJAX集成**:虽然Flex GBook是基于Flash技术,但可能也利用了AJAX(异步JavaScript和XML)来实现部分页面的动态更新,提高用户体验。 7. **安全性**:由于涉及用户交互和数据存储,Flex GBook必须考虑安全性...

    FLEX开发POMER框架

    FLEX全称为Flex Builder,是一款基于Adobe AIR的开发工具,主要用于构建富互联网应用程序(RIA)。它使用MXML和ActionScript语言,结合Flex SDK,能创建交互性强、用户体验良好的桌面和Web应用程序。Flex框架提供了...

    Flex网上书店销售系统

    Flex是一种用于构建富互联网应用程序(RIA)的开源框架,它基于ActionScript编程语言和MXML标记语言,能够创建交互性强、用户体验优良的Web应用。 在这款系统中,Flex的强项在于它的图形用户界面(GUI)设计和组件...

    IT技术文章示例

    Flex可以与Java后端服务进行交互,以实现对数据库的操作。这种交互通常通过HTTP请求完成,Flex发送JSON或XML格式的数据到Java服务器,服务器端再通过JDBC连接数据库执行SQL语句,处理完数据后再返回给Flex客户端。 ...

    FoED.AdvancED.Flex3.Oct.2008.eBook-ELOHiM

    从给定的文件信息来看,这是一本名为《AdvancED Flex3》的电子书,出版于2008年10月,作者包括Shashank Tiwari、Jack Herrington、Elad Elrom和Joshua Mostafa。本书由多个编辑、技术审稿人以及项目管理团队共同协作...

    Flex 与 PHP

    - **使用Flex生成数据**: Flex应用程序收集所有必要的数据,这些数据通常包括文本、图像等元素,这些元素将被用于构建最终的PDF文档。 - **发送数据到PHP**: 通过Ajax或者其他异步通信方式,将收集到的数据发送到PHP...

    EmployeeMgmt-Server

    Flex应用程序通常运行在Adobe Flash Player或Adobe AIR之上,能够提供桌面应用般的交互体验。开发者可能会使用MXML和ActionScript来编写Flex代码,构建包括员工信息录入、查询、编辑等功能的界面。 在网站建设方面...

    ActionScript开发技术大全

    26.1.3ActionScript与桌面程序交互 567 26.2网页脚本交互示例 568 26.3桌面应用交互示例 571 26.4小结 573 第27章ActionScript打印控制 574 27.1使用打印作业对象 574 27.1.1创建与启动打印作业 574 27.1.2设置打印...

    flash builder4快速入门教程

    9. **发布与部署**:了解发布设置,如何生成SWF或AIR应用,以及部署到不同平台,如Web、桌面或移动设备。 10. **优化与性能**:探讨性能优化技巧,如何减少内存占用,提高应用程序运行速度。 压缩包中的"Flash ...

Global site tag (gtag.js) - Google Analytics