基于DELPHI的小型超市進存銷管理系統(tǒng)-計算機畢業(yè)設(shè)計_第1頁
基于DELPHI的小型超市進存銷管理系統(tǒng)-計算機畢業(yè)設(shè)計_第2頁
基于DELPHI的小型超市進存銷管理系統(tǒng)-計算機畢業(yè)設(shè)計_第3頁
基于DELPHI的小型超市進存銷管理系統(tǒng)-計算機畢業(yè)設(shè)計_第4頁
基于DELPHI的小型超市進存銷管理系統(tǒng)-計算機畢業(yè)設(shè)計_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

畢業(yè)設(shè)計(論文)基于Delphi的小型超市進存銷管理系統(tǒng)論文作者姓名:申請學位專業(yè):申請學位類別:論文提交日期:基于Delphi的小型超市進存銷管理系統(tǒng)摘要在市場經(jīng)濟中,銷售是企業(yè)運作的重要環(huán)節(jié),為了更好地推動銷售,不少企業(yè)建立分公司代理,通過分公司或代理把產(chǎn)品推向最終用戶。這些分公司或代理商大多分布在全國各地,甚至是在國外,遠距離頻繁的業(yè)務信息交流構(gòu)成了這些企業(yè)業(yè)務活動的主要特點。在傳統(tǒng)方式上,公司之間通常采用電傳、電報、等方式傳遞發(fā)貨、到貨、壓貨、換貨、退貨等信息,并且對進貨、銷售、庫存等信息進行手工存檔,工作效率極其低下。本畢業(yè)設(shè)計針對傳統(tǒng)的進存銷系統(tǒng)的一些弊端,根據(jù)進存銷系統(tǒng)的基本流程,實現(xiàn)了一個小型超市的進存銷管理系統(tǒng)。本系統(tǒng)主要包含有資料管理、進貨管理、銷售管理、庫存查詢、系統(tǒng)管理、歷史查詢、賬目查詢等進存銷管理的基本功能。其中,資料管理包括有商品資料、供貨商資料、客戶資料的添加、刪除、修改、查詢等操作。本系統(tǒng)采用C/S模式,由Delphi7.0開發(fā),數(shù)據(jù)庫設(shè)計使用MSSQLServer2000。關(guān)鍵詞:C/S模式;Delphi;SQLServer2000;進存銷管理系統(tǒng)TheStockingSellingandStoringManagementSystemofSmallSupermarketBasedonDelphiAbstractSalesmanshipisanimportantpartofoperationofenterprisesinthemarketeconomy.Inordertopromotethesalesoftheproduces,manyenterprisesestablishtheagenciesofbranch,pushproductstotheterminalcustomersthroughtheseagencies.Manyagenciesorbranchesaredistributedalloverthecountry,evenabroad,sothatthemainfeatureofthesebusinessactivitiesisremotefrequentexchangeofoperationalinformation.Inthetraditionalway,thecompanyusuallyexchangemessagesaboutthetransmission,arrival,storage,change,returnofgoodsbytelex,telegraph,telephoneandstorethedataofPurchase,Sale,Storagebymanual.TAccordingtothebasicprocessoftheStockingSellingandStoringManagement,theauthorrealizedaStockingSellingandStoringManagementSystemofsmallsupermarket.Thebasicfunctionsofthissystemincludedatamanagement,inventorymanagement,salesmanagement,storageinquiry,systemmanagement,historyinquiry,accountinquiry.Thedatamanagementwhichincludeadd,delete,modifyandinquirethedataaboutgoods,dataaboutsupplieranddataaboutcustomer.ThesystemusesC/SmodelandhasbeendevelopedbyDelphi7.0.DatabasedesignuseSQLServer2000.Keywords:C/Smodel;Delphi;SQLServer2000;StockingSellingandStoring

目錄論文總頁數(shù):24頁1引言 11.1課題背景與開發(fā)目的 11.2開發(fā)環(huán)境 11.3硬件需求 12系統(tǒng)總體設(shè)計 22.1功能概述 22.2數(shù)據(jù)庫設(shè)計 32.2.1數(shù)據(jù)庫概念模型 32.2.2數(shù)據(jù)庫各表設(shè)計 42.2.3進貨單與銷售單存儲過程 73超市進存銷系統(tǒng)的實現(xiàn) 83.1用戶登錄 83.2進存銷系統(tǒng)主界面 83.3資料管理 93.4進貨管理 103.5銷售管理 133.6庫存管理 143.7系統(tǒng)管理 143.8歷史查詢 183.9帳目查詢 19結(jié)論 22參考文獻 22致謝 23聲明 241引言1.1課題背景與開發(fā)目的電子商務的發(fā)展和市場競爭的加劇將企業(yè)推上了風口浪尖,中小企業(yè)除了積極迎接挑戰(zhàn)之外,別無選擇,網(wǎng)絡(luò)的興起與電子商務的發(fā)展帶來了時空界限的突破、貿(mào)易方式的變革和經(jīng)濟活動的革命,從某種意義上講,這些變化為中小企業(yè)創(chuàng)造了與大型企業(yè)、國外企業(yè)平等競爭的有利條件。然而,管理水平的差異會弱化這種平等的實際意義。具體而言,中小企業(yè)在進、存、銷等環(huán)節(jié)的管理上都存在著一定程度的不足,而這些不足無疑將使其在市場競爭中陷入被動的境地。在網(wǎng)絡(luò)經(jīng)濟的時代背景下,進行有效的進存銷管理已經(jīng)成為中小企業(yè)存身立業(yè)的頭等要事。然而對于一貫疏于管理的中小企業(yè)而言,實現(xiàn)有效的進存銷管理必然存在著一定的難度,因此必須借助現(xiàn)代化的管理方法和管理技術(shù)——計算機進存銷管理系統(tǒng)。超市最主要的任務是商品進貨存貨及銷售管理,即商品進存銷管理,由于商品種類繁多且數(shù)據(jù)量大,傳統(tǒng)手工操作任務繁重、工作效率低下,不適應現(xiàn)代化信息社會發(fā)展需要,所以急需使用商品進存銷管理軟件進行現(xiàn)代化管理:超市運作中批發(fā)及零售企業(yè)基本上都屬于中小型規(guī)模、而且單位數(shù)量特別多,因此商品進銷存管理軟件有很大的需求市場。本文作者選擇Delphi來開發(fā)一個小型超市的進存銷管理系統(tǒng),得到快速完美的開發(fā)效果。本文對商業(yè)進銷存管理系統(tǒng)進行系統(tǒng)分析,給出了管理系統(tǒng)用到的數(shù)據(jù)結(jié)構(gòu)及開發(fā)過程中的關(guān)鍵技術(shù)。本系統(tǒng)采用C/S模式設(shè)計,把超市工作人員從繁雜的數(shù)據(jù)管理以及處理中解放出來,避免了手工數(shù)據(jù)統(tǒng)計的種種弊端,大大地提高了工作效率。將超市進存銷的各種信息存儲于數(shù)據(jù)庫中,再通過前臺友好的用戶界面來對數(shù)據(jù)庫中的數(shù)據(jù)進行插入、刪除、修改與更新等操作,由于本系統(tǒng)設(shè)計的界面友好,操作方便,用戶能輕而易舉地學會使用,有利于企業(yè)創(chuàng)造更大的經(jīng)濟效益。1.2開發(fā)環(huán)境Delphi是Inprise公司的可視化軟件開發(fā)工具,是目前創(chuàng)建Windows應用程序最強大的開發(fā)工具之一,它具有C++的強大功能和VisualBasic的易用性,Delphi具有友好的開發(fā)環(huán)境、真正面向?qū)ο蟮某绦蛟O(shè)置、組件化的編程方式、快速Pascal編譯器,是軟件開發(fā)人員不可多得的好工具。本系統(tǒng)是在windowsXP操作系統(tǒng)下,使用BorlandDelphi7.0作為開發(fā)工具,數(shù)據(jù)庫使用的是SQLSERVER2000開發(fā)。1.3硬件需求在運行本系統(tǒng)前,請檢查一下計算機是否滿足以下要求:1.服務器要求的配置為:(1)CPU:Intel賽揚Ⅳ以上,建議IntelPentiumⅣ以上(2)內(nèi)存:128M以上,建議256M以上(3)硬盤:1G以上的可用硬盤安裝空間(4)MicrosoftSQLServer7.0以上2.客戶機硬件配置要求為:(1)CPU:Intel賽揚Ⅲ以上,建議IntelPentiumⅢ以上(2)內(nèi)存:128M以上,建議2562系統(tǒng)總體設(shè)計2.1功能概述根據(jù)進存銷管理系統(tǒng)的邏輯劃分,本系統(tǒng)一共分為七個功能,分別是資料維護、進貨管理、銷售管理、庫存查詢、系統(tǒng)管理、歷史查詢、帳目查詢。其功能結(jié)構(gòu)圖如圖2-1所示。超市進存銷管理系統(tǒng)超市進存銷管理系統(tǒng)資料維護進貨管理銷售管理庫存查詢系統(tǒng)管理帳目查詢歷史查詢權(quán)限設(shè)置用戶管理圖2-1系統(tǒng)功能結(jié)構(gòu)圖(1)資料管理主要包括商品資料、供貨商資料和客戶資料的維護,可以進行添加、刪除、修改與查詢等一系列操作。商品資料、供貨商資料、客戶資料是進銷存管理系統(tǒng)基本資料。(2)進貨管理主要功能是進貨的過程中,對數(shù)據(jù)庫數(shù)據(jù)進行實時更新,入庫的時候,將供貨商、商品等基本信息讀入數(shù)據(jù)庫的表格中,主要是讀入進貨單歷史和進貨單明細歷史中;對庫存庫中對應的商品信息,諸如,庫存數(shù)量、倉庫、庫存金額等數(shù)據(jù)進行更新操作;對應于進貨單中供貨商,產(chǎn)生應付款金額;同時打印進貨單。(3)銷售管理主要功能是銷售的過程中,對數(shù)據(jù)庫中的數(shù)據(jù)進行實時更新,出庫的時候,將客戶、商品等基本信息讀入數(shù)據(jù)庫表格中,主要是讀入銷售單歷史和銷售單明細歷史中;對庫存庫中對應的商品信息進行修改,主要是減去銷售的商品數(shù)量;對應于銷售單中的客戶,產(chǎn)生應收款金額;同時打印銷售單。(4)庫存查詢主要功能是對庫存庫中的商品信息進行查詢,輸入貨號、商品拼音或是倉庫,便可以方便快捷地查詢到庫存庫中對應的商品信息。(5)系統(tǒng)管理系統(tǒng)管理中包含系統(tǒng)用戶的權(quán)限修改功能,同時還包含有只有管理員admin才擁有的用戶管理功能,包括對用戶信息的添加、刪除、修改等操作,同時考慮到安全問題,本系統(tǒng)對用戶對應的密碼進行了MD5加密處理。(6)歷史查詢主要功能是對進貨單歷史、進貨單明細歷史、銷售單歷史、銷售單明細歷中的數(shù)據(jù)進行查詢操作。(7)帳目查詢主要功能是對進貨過程中產(chǎn)生的應付款及銷售過程中產(chǎn)生的應收款進行操作,輸入對應的供貨商號或客戶編號就能查詢到對應的應付款或應收款金額匯總,結(jié)算后,將對應的記錄從應付款或應收款表中刪除,同時對已付款或已收款中的數(shù)據(jù)進行更新。2.2數(shù)據(jù)庫設(shè)計2.2.1數(shù)據(jù)庫概念模型數(shù)據(jù)庫主要涉及到三個實體:商品、供貨商、客戶。進貨時,一張進貨單對應一個供貨商,可以向供貨商進多種貨物。銷售時,一張銷售單對應一個客戶,可以向客戶銷售多種商品。因此,一個商品可以向多個供貨商進貨,也可以銷售給多個客戶,只是對應著不同的進貨單或銷售單。E-R(Eneity-RelationshipApproach)圖是最常用的概念模型表示方法,也是數(shù)據(jù)庫的核心和基礎(chǔ),它是按用戶的觀點來對數(shù)據(jù)和信息建模,依據(jù)概念模型設(shè)計應具的特點:真實性、易理解性、易修改性、易轉(zhuǎn)換性。下面畫出商品、供貨商、客戶三個之間的實體關(guān)系圖(E-R圖):商品商品貨號條碼拼音編碼銷售進貨供貨商客戶客戶編號名稱名稱拼音編碼拼音編碼供貨商號NMPQ圖2-2商品、供貨商和客戶E-R圖2.2.2數(shù)據(jù)庫各表設(shè)計對于本超市進存銷系統(tǒng)所用到的數(shù)據(jù)庫表有:供貨商清單:保存關(guān)于供貨商的資料信息,如供貨商號、名稱等。商品清單:保存超市所經(jīng)營商品的資料信息,如貨號、品名、進貨價和銷售價等??蛻羟鍐危罕4娉锌蛻舻馁Y料信息。庫存庫:保存超市商品庫存的數(shù)量、金額等信息。應付款:保存進貨過程中產(chǎn)生的應付款信息。應收款:保存銷售過程中產(chǎn)生的應收款信息。權(quán)限清單:保存本系統(tǒng)所有使用者的權(quán)限信息。用戶清單:保存本系統(tǒng)所有使用者的信息。進貨單:進貨單主表,保存一次進貨中的所有商品的概括信息。進貨單歷史:保存進貨單歷史。進貨單明細:進貨單從表,保存每一商品的進貨信息,如進價、稅額和倉庫等。進貨單明細歷史:保存進貨單明細歷史。銷售單:銷售單主表,保存一次銷售中的所有商品的概括信息。銷售單歷史:保存銷售單歷史。銷售單明細:銷售單從表,保存每一商品的銷售信息,如銷售數(shù)量和銷售價等。銷售單明細歷史:保存銷售單明細歷史。倉庫清單:保存超市的倉庫信息,可以用于生成數(shù)據(jù)字典。已收款:保存超市結(jié)算“應收款”的情況。已付款:保存超市結(jié)算“應付款”的情況。下面給出幾個主要表的具體信息:表2-1供貨商清單字段名數(shù)據(jù)類型長度是否允許為空字段描述供貨商號Char10否主鍵拼音編碼Char40否以便查詢名稱Varchar80是地址Varchar80是Char6是Varchar20是Varchar20是電報Varchar20是銀行帳號Varchar20是庫房地址Varchar40是庫房Varchar20是表2-2庫存庫字段名數(shù)據(jù)類型長度是否允許為空字段描述貨號Char14否商品貨號倉庫Varchar20否庫存數(shù)量Decimal(28,6)否庫存金額Decimal(28,6)否庫存單價Decimal(28,6)否最新進價Decimal(28,6)是表2-3應付款字段名數(shù)據(jù)類型長度是否允許為空字段描述編號Char14否主鍵進貨單號Char14是外鍵貨號Char14否外鍵供貨商號Char10否外鍵數(shù)量Decimal(28,6)否進貨單價Decimal(28,6)是金額Decimal(28,6)是進貨日期Datetime8是狀態(tài)Char6是應付表2-4權(quán)限清單字段名數(shù)據(jù)類型長度是否允許為空字段描述權(quán)限序號Int4否自增字段用戶編號Char6是外鍵部門Char20是權(quán)限名稱Char30否表2-5用戶清單字段名數(shù)據(jù)類型長度是否允許為空字段描述用戶編號Char20否主鍵部門Char20是姓名Char10否性別Char2是密碼Varchar32否MD5加密表2-6進貨單字段名數(shù)據(jù)類型長度是否允許為空字段描述編號Char14否主鍵供貨商號Char10否外鍵進貨日期Datetime8是業(yè)務員Char10是制單人Char10是稅價合計Decimal(28,6)是不含稅價Decimal(28,6)是稅額Decimal(28,6)是表2-7進貨單明細字段名數(shù)據(jù)類型長度是否允許為空字段描述編號Char14否主鍵進貨單號Char14否外鍵貨號Char14否外鍵進貨數(shù)量Decimal(28,6)否進價Decimal(28,6)是稅價合計Decimal(28,6)是稅率Decimal(28,6)是不含稅價Decimal(28,6)是稅額Decimal(28,6)是倉庫Char20是表2-8已付款字段名數(shù)據(jù)類型長度是否允許為空字段描述供貨商號Char10否主鍵供貨商名稱Varchar80是已付金額Decimal(28,6)否最近結(jié)算Datetime8是最近的結(jié)算日期以上便是數(shù)據(jù)庫中的主要表單,商品清單、客戶清單與表2-1(供貨商清單)類似,應收款與表2-3(應付款)類似,銷售單與進貨單的對應表單類似,已收款與表2-10(已付款)類似。2.2.3進貨單與銷售單存儲過程數(shù)據(jù)庫中還設(shè)計了兩個存儲過程,分別是sf_進貨單和sf_銷售單,分別用于進貨和銷售時,對數(shù)據(jù)庫中各表的數(shù)據(jù)更新操作。進貨的時候,庫存庫中的倉庫和貨號要與進貨單明細中的倉庫和貨號相匹配,若不匹配,證明是新的記錄,進貨單明細中所對應的貨號與倉庫記錄添加到庫存庫中,若匹配,證明同一商品入的是同一倉庫,便將庫存庫中的庫存數(shù)量累加新入庫的數(shù)量;將進貨單明細中所對應的供貨商號、稅價合計、進貨數(shù)量、貨號等信息插入到應付款中,以產(chǎn)生應付款金額;將進貨單和進貨單明細中的記錄添加到對應的歷史表格中;清除進貨單和進貨單明細表格。銷售的時候,將銷售單明細中銷售的對應貨號數(shù)量從庫存庫對應的記錄中減去;將銷售單明細中對應的客戶編號、銷售價、金額等信息插入到應收款中,以產(chǎn)生應收款金額;將銷售單和銷售單明細中的記錄添加于應的歷史表格中;清除銷售單和銷售單明細表格中的記錄。3超市進存銷系統(tǒng)的實現(xiàn)3.1用戶登錄用戶登錄是一個系統(tǒng)安全性能的重要體現(xiàn),本系統(tǒng)用到的所有密碼均通過MD5加密。登錄界面上放置了一個ADOQuery1控件,并設(shè)置它的ConnetionString屬性指向的數(shù)據(jù)庫my_jxc,用以完成數(shù)據(jù)庫的連接。登錄過程是:首先在用戶清單中查找輸入的用戶名和密碼所對應的用戶編號。若沒有找到,說明輸入的用戶名或密碼有誤,并給出提示。若找到這樣的用戶編號,說明是合法用戶,再在權(quán)限清單中,查找對應的權(quán)限,找到什么權(quán)限,便將對應的功能按鈕所對應的Enabled值置為True。特別指出,在用戶清單中查找用戶名和密碼所對應的用戶編號的時候,由于界面上輸入的是明文,而用戶清單中的密碼字段是32位的密文,且MD5是單向加密的密碼算法,所以在查找之前,先引用md5單元,再調(diào)用MD5String()函數(shù)對密碼框中的明文進行加密,再用MD5Print()函數(shù)將加密后的密文顯示出來,賦值給encrypt_num變量,實際在用戶清單中找查密碼是以密文為準,而非輸入的明文,其查找用戶編號主要代碼如下://保存用戶輸入的帳號和密碼user:=edit1.Text;pass:=Edit2.Text;encrypt_num:=md5.MD5Print(MD5String(pass));//加密明文//將原來的SQL語句清除后再添加新的SQL語句ADOQuery1.SQL.Text:='select用戶編號from用戶清單where姓名='''+user+'''and密碼='''+encrypt_num+'''';temp:=adoquery1.FieldByName('用戶編號').AsString;之后便以用戶編號和權(quán)限名稱在權(quán)限清單中查找對應的權(quán)限序號,若找到對應的權(quán)限序號,說明該用戶擁有該權(quán)限,若沒有找到權(quán)限序號,說明該用戶沒有該權(quán)限,找到什么權(quán)限,便將manage和info窗體上對應的按鈕Enabled值置為True。3.2進存銷系統(tǒng)主界面超市進銷存系統(tǒng)主界面上放置七個按鈕,分別對應七個功能模塊:資料管理、進貨管理、銷售管理、庫存管理、系統(tǒng)管理、歷史查詢、帳目查詢。點擊對應的按鈕,便跳轉(zhuǎn)到對應的功能窗體上。圖3-1系統(tǒng)主界面在主界面的左下方會顯示當前登錄的用戶名字。因為當前登錄的用戶為系統(tǒng)管理員admin,所以圖3-1中顯示的登錄用戶名為ad。3.3資料管理資料管理窗體上放置的幾個主要控件是DBNavigator1控件、DBGrid1控件、ADOQuery1控件和DataSource1控件。首先是設(shè)置ADOQuery1的ConnectionString屬性指向my_jxc,再設(shè)置DataSource1的DataSet屬性為ADOQuery1,設(shè)置DBNavigator1和DBGrid1的DataSource屬性為DataSource1,資料管理分為商品資料維護、供貨商資料維護和客戶資料維護,以DBNavigator1來控制刪除、插入或修改等功能。分別點擊MainMenu菜單上不同的菜單項,來更新數(shù)據(jù)集,以顯示不同表格中的數(shù)據(jù)。例如,點擊了商品資料維護,便在ADOQuery1的SQL中添加這樣的語句:adoquery1.SQL.Text:='select*from商品清單';使DBGrid1顯示出由數(shù)據(jù)集返回的結(jié)果,同時DBNavigator1控制的商品清單中的數(shù)據(jù)。同理,點擊了供貨商資料維護或是客戶資料維護菜單時,便向ADOQuery1的SQL中添加新的SQL語句,以使控制不同的數(shù)據(jù)集。同時,窗體上還能對商品資料、供貨商資料、客戶資料進行查詢,輸入對應的拼音編碼部分或全部便能進行查詢。查詢按鈕所響應的事件:首先是根據(jù)label1的caption內(nèi)容來判斷是對那一張表格進行操作的,而label1.caption是由點擊MainMenu上不同的菜單項而改變的。例如,點擊了MainMenu上的商品資料維護,label1.caption便為“商品拼音”,點擊了“查詢”按鈕時,先判斷l(xiāng)abel1.caption=’商品拼音’,于是對商品清單進行查詢。同時,DBGrid1還有一個鼠標雙擊的響應事件,因為在進貨管理或銷售管理時,選擇供貨商、商品或是客戶信息時,需要跳轉(zhuǎn)到資料管理窗體上,雙擊DBGrid1上的記錄,以把數(shù)據(jù)傳遞到進貨單或銷售單窗體上。這樣也大大地提高了系統(tǒng)使用的方便性,簡單易用的圖形化操作界面,使用戶能更方便快捷學會使用。這部分代碼將在進貨管理和銷售管是部分詳細闡述。3.4進貨管理這部分實現(xiàn)對進貨單的管理,主要提供保存進貨單、顯示進貨單報表和打印進貨單并記帳的功能。進貨單input窗體上,放置ADOQuery1和ADOCommand1控件,并且設(shè)置它們的ConnectionString屬性指向my_jxc,以完成數(shù)據(jù)庫的連接。進貨日期默認為當前系統(tǒng)日期,制單人為前當?shù)卿浻脩簦谙吕藛沃羞x擇業(yè)務員,這幾項都可以為空,但為了使數(shù)據(jù)更加詳盡,最好不要為空。進貨單窗體如圖所示:圖3-2進貨單窗體首先選擇供貨商,鼠標點擊Combobox2時,對應的DropDown事件響應,跳轉(zhuǎn)到資料管理中去,同時將input窗體置為不可用。然后在info窗體中,DBGrid1的雙擊事件響應,判斷input.Enabled=false且label1.caption=’供貨商拼音’,于是執(zhí)行相應代碼,設(shè)置了兩個string類型的變量:num,name,分別接收DBGrid1.Fields[0]和DBGrid1.Fields[2]中的內(nèi)容,傳遞給input窗體上的ComboBox2.Text和Edit3.Text。將供貨商號和供貨商名稱返回到進貨單窗體上,以此完成了供貨商的選擇。其代碼如下:if(input.Enabled=false)and(label1.Caption='供貨商拼音')thenbegin//將供貨商的標號和名稱傳回進貨單窗體num:=dbgrid1.Fields[0].AsString;name:=dbgrid1.Fields[2].AsString;inputboBox2.Text:=num;input.Edit3.Text:=name;//成功后返回進貨單input.Enabled:=true;info.Close;manage.Hide;end;接著,選擇需要進貨的商品。在StringGrid1中雙擊單元格,以跳轉(zhuǎn)到資料管理的窗體上。在DBGrid1的雙擊事件里響應,判斷input.enabled屬性為false且label1.caption=’商品拼音’,雙擊對應紀錄,將商品清單中的貨號、品名和銷售價1的信息傳遞到進貨單窗體中,代碼如下:if(input.Enabled=false)and(label1.Caption='商品拼音')thenbegin//將貨號和商品名稱傳回進貨單窗體num:=dbgrid1.Fields[0].AsString;name:=dbgrid1.Fields[3].AsString;price:=dbgrid1.Fields[7].AsString;ifinput.currentRow=0theninput.currentRow:=1;input.StringGrid1.Cells[1,input.currentRow]:=num;input.StringGrid1.Cells[2,input.currentRow]:=name;input.StringGrid1.Cells[6,input.currentRow]:=price;//成功后返回進貨單input.Enabled:=true;info.Close;manage.Hide;end;特別指出,num,name,price分別對應著貨號、品名和價格。Cells[1,input.currentRow]指的是StringGrid1中當前行第1列所對應的單元格。在Forminput單元文件中的接口部分的public處聲明了currentRow和currentCol兩個整型變量,在implementation部分中,由StringGrid1SelectCell事件激發(fā),以currentRow和currentCol來接收Arow和Acol兩個變量。這樣便達到了,在input窗體上激發(fā)的變量,被兩個public變量接收,可以被info窗體引用的目的。在商品入庫之前,要對所進商品進貨到哪個倉庫進行選擇。添加倉庫的下拉菜單與添加業(yè)務員的過程相似,只有當選擇了商品信息且點擊了“倉庫”所對應的列,才能進行倉庫選擇。另外,當點擊某條記錄的“金額”單元格時,自動算出對應進貨記錄的金額、稅價與稅價合計。點擊“保存進貨單”按鈕時,將把進貨信息插入到進貨單和進貨單明細兩個表格中去,進貨單中的一條記錄保存的是一次進貨中向某個供貨商所有進貨商品的‘總稅價合計’、‘總不含稅額’和‘總稅額’;進貨單明細則保存的是向某個供貨商進貨的每一商品所對應的稅價合計,不含稅價和稅額等信息。首先是編號的插入,如果是插入的第一條記錄,編號為’00000’,如果不是插入第一條記錄,則分別是從進貨單歷史和進貨單明細歷史中查找出最大編號,將其加1獲取最大編號:adoquery1.SQL.Add('selectmax(編號)最大編號from進貨單歷史');maxnum:=adoquery1.FieldByName('最大編號').asstring;如果是第一條記錄,插入編號’00000’if(maxnum='')or(maxnum='')thentemp:='00000'向進貨單中插入對應記錄:adocommand1mandText:='insertinto進貨單([編號],[供貨商號],[進貨日期],[業(yè)務員],[制單人],[稅價合計],[不含稅價],[稅額])values('''+inputnum+''','''+combobox2.Text+''','''+edit1.Text+''','''+combobox1.Text+''','''+edit2.Text+''','''+edit4.Text+''','''+edit5.Text+''','''+edit6.Text+''')';adocommand1.Execute;然后點擊“顯示進貨單報表”,是對進貨單報表進行預覽。點擊“打印進貨單并記帳”,便可將進貨單報表打印成(.mdi)格式的文檔,同時執(zhí)行了“sf_進貨單”存儲過程,以對數(shù)據(jù)庫中數(shù)據(jù)進行實時地更新。下面介紹一下,報表的制作:本畢業(yè)設(shè)計所使用到的報表是用QuickReport控件制作的,由于Delphi7.0默認情況下沒有安裝此控件,因此需要手動添加。在Delphi的Packages里,點擊“Add”按鈕,找到安裝目錄下\Borland\Delphi7\Bin\dclqrt70.bpl添加QuickReport控件組。進貨單報表report上,放置QuickRep1控件、ADOQuery1控件、若干QRLabel控件以標簽文字說明,若干QRDBText控件,設(shè)置其DataSet屬性為ADOQuery1,DataField屬性為欲讀取的字段名。QucikRep1的DataSet屬性為ADOQuery1。ADOQuery1控件的ConnectionString指向my_jxc數(shù)據(jù)庫,以完成數(shù)據(jù)庫的連接。其SQL屬性中添加查詢語句,以對數(shù)據(jù)庫中數(shù)據(jù)進行查詢返回數(shù)據(jù)集以供報表上顯示。3.5銷售管理銷售過程與進貨過程類似,這部分實現(xiàn)對銷售的管理,提供的主要功能有“保存銷售單”、“打印銷售單報表”和“記帳銷售單”三個功能。其界面如圖所示:圖3-3銷售單窗體首先需要向Combobox1的下拉菜單上添加項目,其代碼與在進貨管理中添加業(yè)務員菜單項目是一樣的。鼠標點擊客戶下拉框,跳轉(zhuǎn)到資料管理窗體上,以選擇客戶。同時將output的enabled值置為false。然后在info窗體上,雙擊相應的記錄,由DBGrid1的雙擊事件響應,通過判斷,執(zhí)行相關(guān)代碼,將客戶編號和客戶名稱傳遞至output窗體上。此過程代碼與進貨管理中選擇供貨商過程的代碼類似。至此,完成了客戶選擇操作。然后雙擊output中StringGrid1的單元格,跳轉(zhuǎn)到庫存庫store窗體上。雙擊庫存庫store窗體上的StringGrid1單元,便將貨號、倉庫、銷售價等信息傳遞至store窗體上。StringGrid1的雙擊事件中,首先由adoquery2在商品清單里查得銷售價1字段,由price變量接收。貨號、品名等信息與進貨單中執(zhí)行的過程類似,在此不再贅述。當點擊保存銷售單后,第一條記錄編號為’00000’,如果不是第一條記錄,從銷售單歷史和銷售單明細歷史表格中把最大編號讀取出來,將其加1,再插入到銷售單和銷售單明細表格中去。這個過程與進貨管理中插入到進貨單歷史和進貨單明細歷史中相類似。點擊“打印銷售報表”按鈕,以打印出銷售單對應報表。點擊“記帳銷售單”按鈕,執(zhí)行“sf_銷售單”3.6庫存管理這部分主要是提供對庫存商品信息的查詢,輸入貨號、商品拼音和倉庫中的任意一項便可對庫存中商品的信息進行查詢。設(shè)置ADOQuery1控件、ADOQuery2控件的ConnectionString指向my_jxc,以完成數(shù)據(jù)庫的連接。然后向“查詢”按鈕里添加事件,以使輸入“貨號”、“商品拼音”和“倉庫”中的任意一項,便可進行查詢。由于可以對商品拼音模糊查詢,如果不輸入商品拼音的話,系統(tǒng)會將商品拼音看成一個空字符串,便得不到查詢的真實結(jié)果。所以先對其進行判斷,如果為空,便不追加對應查詢語句。其對應的代碼如下:adoquery1.SQL.Add('select庫存庫.貨號,商品清單.品名,商品清單.單位,庫存庫.倉庫,庫存庫.庫存數(shù)量,庫存庫.庫存單價,庫存庫.庫存金額from庫存庫,商品清單');adoquery1.SQL.Add('where庫存庫.貨號=商品清單.貨號and');adoquery1.SQL.Add('((商品清單.貨號='''+edit1.Text+''')or');ifedit2.Text<>''thenbeginadoquery1.SQL.Add('(商品清單.拼音編碼like''%'+edit2.Text+'%'')or');end;adoquery1.SQL.Add('(庫存庫.倉庫='''+combobox1.text+'''))');adoquery1.Open;到此,便完成了庫存查詢的操作。3.7系統(tǒng)管理系統(tǒng)管理功能中分為“用戶管理”和“權(quán)限設(shè)置”兩項功能。在用戶管理功能中,可以對用戶信息進行添加、刪除或修改等操作。“用戶管理”功能只有管理員擁有,而“權(quán)限管理”功能,只有被授予了該權(quán)限的用戶才擁有。作為系統(tǒng)管理員,所有權(quán)限均為其開放,并且系統(tǒng)管理員的權(quán)限是不能修改的。管現(xiàn)員可以對本系統(tǒng)的其它普通用戶的資料進行修改,或給其它普通用戶授予權(quán)限。系統(tǒng)管理窗體rights上放置ADOQuery1、ADOQuery2、ADOQuery3和ADOCommand1控件,它們的ConnectionString均指向my_jxc,用以連接數(shù)據(jù)庫。最左邊下拉列表框是對用戶的選擇,選擇了對應的用戶,此時在右邊的列表框中顯示它所具有的所有權(quán)限的名稱,且在最下面的組合復選框中,將其所具有的權(quán)限名稱前面顯示有”√”,可以修改復選組合框中的內(nèi)容,再點擊“確認修改”,即可完成對所對應用戶的權(quán)限的權(quán)限。點擊“用戶管理”按鈕,進入到用戶管理的窗體上。系統(tǒng)管理的主要界面如下圖所示:圖3-4權(quán)限管理窗體在系統(tǒng)管理窗體中,只有當前用戶為管理員,“用戶管理”按鈕才可見,權(quán)限功能的修改實現(xiàn)過程是這樣的:首先在ComboBox1Change事件中,當選擇了對應的用戶后,執(zhí)行相關(guān)代碼,在listbox中用以更新顯示出當前用戶名所對應的權(quán)限名稱。先以用戶名在用戶清單里查詢得到對應的用戶編號,再以用戶編號在權(quán)限清單里查詢所對應的用權(quán)限名稱,將查找到的權(quán)限名稱添加到listbox1的項目中去,查詢權(quán)限的對應代碼如下:adoquery2.SQL.Text:='select權(quán)限名稱from權(quán)限清單where用戶編號=(select用戶編號from用戶清單where姓名='''+combobox1.Text+''''+')';向列表框中添加查詢到的權(quán)限項目:whilenotadoquery2.Eofdobegintemp:=adoquery2.fieldbyname('權(quán)限名稱').AsString;listbox1.Items.Add(temp);adoquery2.Next;end;在ComboBox1Change事件中同時也對下方的checkbox的checked屬性進行修改。以對應的用戶編號和權(quán)限名稱對權(quán)限清單進行查找,如果查找到的用戶編號不為空,說明該用戶存在這樣的權(quán)限,便將對應checkbox的checked屬性設(shè)為true;否則checked屬性為false。例如:判斷用戶是否具有商品資料維護的權(quán)限,其代碼如下:adoquery2.SQL.Add('select用戶編號from權(quán)限清單where(用戶編號=(select用戶編號from用戶清單where姓名='''+combobox1.Text+'''))and(權(quán)限名稱='''+checkbox2.Caption+''')');adoquery2.Open;ifadoquery2.FieldByName('用戶編號').AsString<>''thencheckbox2.Checked:=trueelsecheckbox2.Checked:=false;另外,對于“確認修改”按鈕響應的事件,首先獲取用戶編號,以用戶姓名在用戶清單里查找對應的用戶編號賦值給臨時變量UserName;在權(quán)限清單里查找到最大的權(quán)限序號賦值給MaxNumber;刪除該用戶在權(quán)限清單里擁有的所有權(quán)限。判斷下方的checkbox的checked屬性是否為true,同時將先前查找到的最大權(quán)限序號增加,以新的權(quán)限序號插入到權(quán)限清單里,以免跟以前的權(quán)限序號沖突。例如對“商品資料維護”權(quán)限的修改,對應代碼如下:ifcheckbox1.Checkedthenbeginorder:=strtoint(MaxNumber)+1;str:=inttostr(order);adocommand1mandText:='insertinto權(quán)限清單([權(quán)限序號],[用戶編號],[權(quán)限名稱])values('''+str+''','+''''+UserNumber+''','+''''+checkbox1.Caption+''''+')';adocommand1.Execute;end;如果當前用戶為管理員的話,會看到系統(tǒng)管理窗體上出現(xiàn)一個“用戶管理”按鈕,點擊它會跳轉(zhuǎn)到用戶管理users的窗體,如圖所示:圖3-5用戶管理窗體在用戶管理窗體上,可以完成對用戶資料的修改,刪除和添加用戶的功能。雙擊上方的DBGrid中的記錄,便把對應的字段讀取出來(密碼字段除外),顯示在下方的若干edit文本框里,修改對應的記錄后,點擊“確認修改”按鈕便完成了用戶資料的修改。特別指出,由于本系統(tǒng)所有用戶的密碼字段,均使用了MD5加密。當提交時,如果提交的密碼字段為空,默認情況下不修改密碼;如果提交的密碼字段不為空,便調(diào)用md5單元中的MD5String()函數(shù)將密碼加密成為32位的密文,以MD5Print()函數(shù)將加密的字段顯示出來。這樣很好的避免了當提交空密碼的時候,對空字符串也進行加密。如果提交的密碼字段不為空,將該字段加密后更新記錄:encrypt_num:=md5.MD5Print(MD5String(edit5.Text));adocommand1mandText:='update用戶清單set用戶編號='''+edit1.Text+''',部門='''+edit2.Text+''',姓名='''+edit3.Text+''',性別='''+edit4.Text+''',密碼='''+encrypt_num+'''where用戶編號='''+edit1.Text+'''';鼠標點擊DBGrid里的某一條記錄后,再點擊“刪除”按鈕,即可將該用戶刪除。在下方的edit方本框中輸入新添加的用戶信息后,點擊添加按鈕,將新用戶的記錄插入到用戶清單里。插入之前,先做判斷,如果用戶清單里已經(jīng)有相同的用戶編號,給出提示。同時插入新用戶記錄前,也對輸入的密碼(明文)調(diào)用MD5加密算法加密成為32位密文再插入:encrypt_num:=md5.MD5Print(MD5String(edit5.Text));adocommand1mandText:='insert用戶清單values('''+edit1.Text+''','''+edit2.Text+''','''+edit3.Text+''','''+edit4.Text+''','''+encrypt_num+''')';以上便是“系統(tǒng)管理”中的全部功能的實現(xiàn)過程。3.8歷史查詢歷史查詢主要是對以往進貨記錄和銷售紀錄進行查詢。主要是對進貨單歷史、進貨單明細歷史、銷售單歷史或銷售單明細歷史進行查詢。輸入對應的記錄編號或拼音編碼便可進行查詢。歷史查詢窗體history上的ADOQuery1控件的ConnectionString指向my_jxc,以此做為數(shù)據(jù)集返回結(jié)果。通過點擊主菜單上的按鈕來動態(tài)的改變ADOQuery1所指向的數(shù)據(jù)集。圖3-6歷史查詢窗體例如,點擊了“進出貨歷史”主菜單中的“進貨單歷史”,便把ADOQuery1中的SQL查詢語句指向進貨單歷史中,同時改變label1和label2的Caption值以提示用戶輸入進貨單編號或供貨商拼音進行查詢。點擊“查詢”按鈕,首先判斷l(xiāng)abel1的caption值,來決定當前是對哪一個表進行操作,輸入“進貨單編號”或是“供貨商拼音”中的任何一項,便可進行查詢,同時“供貨商拼音”可以進行模糊查詢,所以在查詢之前,應該先判斷,如果拼音編碼輸入框不為空時才追加對應的SQL語句。ifedit2.Text<>''thenadoquery1.SQL.add('or供貨商號in(select供貨商號from供貨商清單where拼音編碼like''%'+edit2.Text+'%'')');以上便是點擊了“進貨單歷史”,程序所執(zhí)行的過程。點擊“銷售單歷史”,其執(zhí)行過程與此類似。另外,當點擊了“進出貨明細歷史”中的“進貨單明細歷史”時,也是動態(tài)的改變ADOQuery1中所對應的SQL查詢語句,同時改變label1和label2的標簽內(nèi)容。點擊了“查詢”按鈕,執(zhí)行過程也是先由label1的caption來判斷,當前操作的是哪一個表,再對相應的表進行查詢。又由于可以進行模糊查詢,所以在查詢之前也應該判斷如果拼音輸入框不為空時,便追加SQL查詢語句:ifedit2.Text<>''thenadoquery1.SQL.Add('or進貨單號in(select編號from進貨單歷史where供貨商號in(select供貨商號from供貨商清單where拼音編碼like''%'+edit2.Text+'%''))');點擊“銷售單明細歷史”,所執(zhí)行的過程與之類似。3.9帳目查詢帳目查詢功能中,可以對應收款和應付款進行匯總,匯總結(jié)算后,首先將該記錄從應收款或應付款中刪除,再將結(jié)算的信息添加到已付款或已收款中去。帳目查詢窗體account上,ADOQuery1、ADOQuery2、ADOCommand控件的ConnectionString屬性設(shè)置為指向my_jxc,用以連接數(shù)據(jù)庫。圖3-7帳目查詢窗體點擊上面的“未結(jié)算”主菜單中的“應付款”或“應收款”,動態(tài)的改變窗體上label的caption值,同時將更新數(shù)據(jù)集ADOQuery1返回不同的查詢結(jié)果。例如點擊了“應收款”,響應對應的執(zhí)行代碼:adoquery1.SQL.Text:='select*from應收款';//提示用戶輸入客戶拼音編碼label1.Caption:='客戶編號';label5.Caption:='應收款查詢';然后,輸入客戶編號進行查詢,將查詢出來該客戶未結(jié)算的帳目匯總以顯示在窗體上。如果不存在這樣的客戶編號,系統(tǒng)給出提示信息。圖3-8匯總結(jié)果由label5.Caption='應收款查詢'判斷是對應收款進行操作,在adoquey1的SQL屬性中添加:adoquery1.SQL.Text:='select*from應收款where客戶編號='''+edit1.Text+'''';以數(shù)據(jù)集adoquery1返回查詢所得結(jié)果,顯示在窗體上。在adoquery2的SQL屬性中添加語句以匯總該用戶編號所對應的應收款總金額:adoquery2.SQL.Text:='select''total''=sum(金額)from應收款where客戶編號='''+edit1.Text+'''';edit2.Text:=adoquery2.fieldbyname('total').AsString;匯總結(jié)束后,再點擊“結(jié)算”按鈕,便將匯總的帳目結(jié)算,先將帳目從應收款中刪除記錄,然后對已收款中的數(shù)據(jù)進行更新,更新過程是這樣的:判斷新添加的應收款記錄所對應的客戶編號是否在已收款中已經(jīng)存在記錄,如果存在,便將對應的已收金額累加進去,并將最近結(jié)算日期更新為當前的日期。如果不存在,說明是新的記錄,直接將新的結(jié)算記錄插入到已收款表格中去。圖3-9結(jié)算成功刪除結(jié)算記錄:adocommand1mandText:='deletefrom應收款where客戶編號='''+edit1.Text+'''';adocommand1.Execute;以輸入的客戶編號在客戶清單中查找到對應的客戶名稱,于是在數(shù)據(jù)集的SQL屬性中添加如下查詢語句,以獲取客戶名稱:adoquery2.SQL.Text:='select名稱from客戶清單where客戶編號='''+edit1.Text+'''';adoquery2.Open;name:=adoquery2.fieldbyname('名稱').AsString;獲取到“客戶名稱”后,再以客戶名稱查找已收款記錄:adoquery2.SQL.Text:='select*from已收款where客戶名稱='''+name+'''';未找到該客戶對應記錄,說明是新記錄,將新記錄插入:adocommand1mandText:='insertinto已收款([客戶編號],[客戶名稱],[已收金額],[最近結(jié)算])values('''+edit1.Text+''','''+name+''','''+edit2.Text+''','''+label4.Caption+''')';adocommand1.Execute;如果找到該用戶,證明已經(jīng)存在對應記錄,更新相應記錄:adocommand1mandText:='update已收款set已收金額=已收金額+'+edit2.Text+',最近結(jié)算='''+label4.Caption+'''where客戶編號='''+edit1.Text+'''';adocommand1.Execute;結(jié)算成功后,可以看到最新結(jié)算的客戶編號為116的記錄已經(jīng)添加到已收款中去了。圖3-10已收款結(jié)果以上便是“應收款”中進行帳目結(jié)算的全過程,“應付款”的過程與之類似。在“已結(jié)算”菜單中包含“已付款”和“已收款”兩項子菜單。提供已付款和已收款的查詢,點擊“查詢”按鈕后,以label5的caption值判斷是對哪個表進行操作,以“客戶編號”或“供貨商號”在“已收款”或“已付款”中查詢相關(guān)記錄并顯示出來。至此,本超市進存銷管理系統(tǒng)的全部功能的實現(xiàn)過程介紹完畢。結(jié)論通過幾個月的學習和工作,完成了此小型超市進存銷管理系統(tǒng)的設(shè)計,滿足了超市進存銷的基本功能??紤]到安全性能,此系統(tǒng)用MD5加密算法對密碼字段進行了加密,這樣存儲在數(shù)據(jù)庫中的密碼字段將以密文的形式出現(xiàn),而登錄驗證的時候,是對明文進行了MD5加密后再進行驗證,因此具有一定的安全性。在設(shè)計之初,選擇了ADO連接,而沒有選擇BDE連接,因為BDE連接的效率雖然高,但移植系統(tǒng)時,必須要將所需要的Borland提供的動態(tài)連接庫一起移植,所以BDE連接移植不太方便。而ADO連接在Windows系統(tǒng)的支持下可直接與SQL進行連接。此系統(tǒng)是以C/S模式開發(fā),在開發(fā)過程中,我熟悉了delphi7.0的IDE開發(fā)環(huán)境,對DELPHI進行數(shù)據(jù)庫開發(fā)也有了更深的了解。同時,對軟件的成形也有了一定的認識。在這個過程中,我為以后的學習工作積累了寶貴的經(jīng)驗。當然,由于水平和時間有限,很多可以實現(xiàn)的功能都未完成,不過我相信通過以后的努力學習,在這方面一定會有更大的提高。參考文獻[1]方睿,刁仁宏,吳四九.網(wǎng)絡(luò)數(shù)據(jù)庫原理及應用[M].成都:四川大學出版社,2005。[2]高英,石文華.Delphi數(shù)據(jù)庫開發(fā)基礎(chǔ)與應用[M].北京:人民郵電出版社,2006。[3]張敬華.Delphi5開發(fā)與應用[M].北京:北京航空航天大學出版社,2000。[4]張世明,曹德勝.Delphi程序設(shè)計基礎(chǔ)教程[M].北京:中國林業(yè)出版社,2006。[5]劉藝,羅兵,周安棟.Delphi程序設(shè)計大學教程[M].北京:機械工業(yè)出版社,2005。[6]張增強,谷會東.Delphi6.0實用開發(fā)指南[M].北京:電子工業(yè)出版社,2002。[7]雷穎杰,陳錦輝.精通Delphi6數(shù)據(jù)庫程序設(shè)計[M].北京:中國鐵道出版社,2002。[8]康吉成.Delphi6程序設(shè)計[M].北京:中國鐵道出版社,2002。致謝本文是在李梅老師的熱情關(guān)心和指導下完成的,她淵博的知識和嚴謹?shù)闹螌W作風使我受益匪淺,對順利完成本課題起到了極大的作用。在此向她表示我最衷心的感謝!在論文完成過程中,本人還得到了閆麗麗老師和一些同學的熱心幫助,本人向他們表示深深的謝意!最后向在百忙之中評審本文的各位專家、老師表示衷心的感謝!作者簡介姓名:王橋性別:男出生年月:1984.4民族:漢E-mail:kingbridge1984@163

聲明本論文的工作是2007年02月至2007年06月在成都信息工程學院網(wǎng)絡(luò)工程系完成的。文中除了特別加以標注地方外,不包含他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得成都信息工程學院或其他教學機構(gòu)的學位或證書而使用過的材料。除非另有說明,本文的工作是原始性工作。關(guān)于學位論文使用權(quán)和研究成果知識產(chǎn)權(quán)的說明本人完全了解成都信息工程學院有關(guān)保管使用學位論文的規(guī)定,其中包括:(1)學校有權(quán)保管并向有關(guān)部門遞交學位論文的原件與復印件。(2)學??梢圆捎糜坝 ⒖s印或其他復制方式保存學位論文。(3)學??梢詫W術(shù)交流為目的復制、贈送和交換學位論文。(4)學校可允許學位論文被查閱或借閱。(5)學校可以公布學位論文的全部或部分內(nèi)容(保密學位論文在解密后遵守此規(guī)定)。除非另有科研合同和其他法律文書的制約,本論文的科研成果屬于成都信息工程學院。特此聲明!作者簽名:年月日en,untilintheDeepsofTimeandinthemidstofthevasthallsofE?therecametobethathourandthatplacewherewasmadethehabitationoftheChildrenofIl鷙atar.AndinthisworkthechiefpartwastakenbyManw?andAul?andtheValarfortifiedtheirdwelling,andupontheshoresoftheseatheyraisedthePel髍i,theMountainsofAman,highestuponEarth.AndaboveallthemountainsofthePel髍iwasthatheightuponwhosesummitManw?sethisthrone.TaniquetiltheElvesnamethatholymountain,andOioloss?EverlastingWhiteness,andElerr韓aCrownedwithStars,andmanynamesbeside;buttheSindarspokeofitintheirlatertongueasAmonUilos.FromtheirhallsuponTaniquetilManw?andVardacouldlookoutacrosstheEarthevenintothefurthestEast.BehindthewallsofthePel髍itheValarestablishedtheirdomaininthatregionwhichiscalledValinor,andthereweretheirhouses,theirgardens,andtheirtowers.InthatguardedlandtheValargatheredgreatstoreoflightandanthefairestthingsthatweresavedfromtheruin;andmanyothersyetfairertheymadeanew,andValinorbecamemorebeautifuleventhanMiddle-earthintheSpringofArda;anditwasblessed,fortheDeathlessdweltthere,andtherenaughtfadednorwithered,neitherwasthereanystainuponflowerorleafinthatland,noranycorruptionorsicknessinanythingthatlived;fortheverystonesandwaterswerehallowed.AndwhenValinorwasfull-wroughtandthemansionsoftheValarwereestablished,inthemidstoftheplainbeyondthemountainstheybuilttheircity,Valmarofmanybells.Beforeitswesterngatetherewasagreenmound,Ezellohar,thatisnamedalsoCorollair?andYavannahallowedit,andshesattherelonguponthegreengrassandsangasongofpower,inwhichwassetallherthoughtofthingsthatgrowintheearth.ButNiennathoughtinsilence,andwateredthemouldwithothatthefirstdesignsoftheValarwereneverafterrestored.IntheconfusionandthedarknessMelkorescaped,thoughfearfelluponhim;forabovetheroaringoftheseasheheardthevoiceofManw?asamightywind,unfoldingofthethingsthattheyhaddeviseddintoalongtunnelofmisery,withhopegrowingeverfainterbehind.Theyran,andtheyran,strivingtokeepupthepacesetbytheOrcs,lickedeverynowandagainwithacruelthongcunninglyhandled.Iftheyhaltedorstumbled,theywereseizedanddraggedforsomedistance.Thewarmthoftheorc-draughthadgone.Pippinfeltcoldandsickagain.Suddenlyhefellfacedownwardontheturf.Hardhandswithrendingnailsgrippedandliftedhim.Hewascarriedlikeasackoncemore,anddarknessgrewabouthim:whetherthedarknessofanothernight,orablindnessofhiseyes,hecouldnottell.Dimlyhebecameawareofvoicesclamouring:itseemedthatmanyoftheOrcsweredemandingahalt.Ugl鷎wasshouting.Hefelthimselfflungtotheground,andhelayashefell,tillblackdreamstookhim.Buthedidnotlongescapefrompain;soontheirongripofmercilesshandswasonhimagain.Foralongtimehewastossedandshaken,andthenslowlythedarknessgaveway,andhecamebacktothewakingworldandfoundthatitwasmorning.Orderswereshoutedandhewasthrownroughlyonthegrass.Therehelayforawhile,fightingwithdespair.Hisheadswam,butfromtheheatinhisbodyheguessedthathehadbeengivenanotherdraught.AnOrcstoopedoverhim,andflunghimsomebreadandastripofrawdriedflesh.Heatethestalegreybreadhungrily,butnotthemeat.HewasfamishedbutnotyetsofamishedastoeatfleshflungtohimbyanOrc,thefleshofhedarednotguesswhatcreature.Hesatupandlookedabout.Merrywasnotfaraway.Theywerebythebanksofaswiftnarrowriver.Aheadmountainsloomed:atallpeakwascatchingthefirstraysofthesun.Adarksmudgeofforestlayonthelowerslopesbeforethem.TherewasmuchshoutinganddebatingamongtheOrcs;aquarrelseemedonthepointofbreakingoutagainbetweentheNorthernersandtheIsengarders.Somewerepointingbackawaysouth,andsomewerepointingeastward.'Verywell,'saidUgl鷎.'Leavethemtomethen!Nokilling,asI'vetoldyoubefore;butifyouwanttothrowawaywhatwe'vecomeallthewaytoget,throwitaway!I'lllookafterit.LetthefightingUruk-haidothework,asusual.Ifyou'reafraidoftheWhiteskins,run!Run!There'stheforest,'heshouted,pointingahead.'Gettoit!It'syourbesthope.Offyougo!Andquick,beforeIknockafewmoreheadsoff,toputsomesenseintotheothers.'Therewassomecursingandscuffling,andthenmostoftheNorthernersbrokeawayanddashedoff,overahundredofthem,runningwildlyalongtherivertowardsthemountains.ThehobbitswereleftwiththeIsengarders:agrimdarkband,fourscoreatleastoflarge,swart,slant-eyedOrcswithgreatbowsandshortbroad-bladedswords.AfewofthelargerandbolderNorthernersremainedwiththem.'Nowwe'lldealwithGrishn醟h,'saidUgl鷎;butsomeevenofhisownfollowerswerelookinguneasilysouthwards.'Iknow,'growledUgl鷎.'Thecursedhorse-boyshavegotwindofus.Butthat'sallyourfault,Snaga.Youandtheotherscoutsoughttohaveyourearscutoff.Butwearethefighters.We'llfeastonhorsefleshyet,orsomethingbetter.'AtthatmomentPippinsawwhysomeofthetroophadbeenpointingeastward.Fromthatdirectiontherenowcamehoarsecries,andtherewasGrishn醟hagain,andathisbackacoupleofscoreofotherslikehim:long-armedcrook-leggedOrcs.Theyhadaredeyepaintedontheirshields.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論