青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

系統功能:
 手機的漢語拼音輸入法很'聰明',只要用數字鍵組合,就能夠自動找到能組成拼音的字母組合.從2開始分別代表2:abc,3:def,4:ghi,5:jkl,6:mno,7:pqrs,8:tuv,9:wxyz"
鍵盤布局如圖示 +-------+-------+-------+
         |1 OK   |2 abc  |3 def  |
     +-------+-------+-------+
     |4 ghi  |5 jkl  |6 mno  |
     +-------+-------+-------+
     |7 pqrs |8 tuv  |9 wxyz |
     +-------+-------+-------+
     |#<prep>|0<back>|*<next>|
     +-------+-------+-------+
拼音規則:輸入時手機有3個狀態:
1. 拼音狀態: 只接受2至9,和結束鍵1。按下1則進入狀態2,如果候選拼音組合唯一則自動進入狀態3(此時拼音不必拼完);如果無匹配的拼音組合,則一直忽略直到遇到#取消當前拼音。若用戶輸入非法字符,則自動屏蔽非法字符,只讀取合法字符。若只輸入結束鍵1,表示用戶選擇離開。
2. 選擇拼音狀態 : 根據用戶輸入的數字組合,在屏幕上列出滿足條件的拼音組合,每頁最多有10個組合,按字母順序標號由0到9。接受0-9任何一個鍵則選擇對應組合進入狀態3。忽略選擇不存在組合的位置的數字。接受*則下翻一頁。如果已經到達最后一頁則忽略*號。接受#則取消當前拼音,并回到狀態1。
3. 漢字選擇狀態: 進入本狀態,如果所選的拼音組合包含對應漢字。則可以選擇漢字。否則回到狀態1,并且此時不輸出任何漢字。每頁最多有10個漢字,按輸入的數據順序排列。接受0-9任何一個鍵則選擇對應漢字并輸出輸出后回到拼音狀態。忽略選擇不存在組合的位置的數字。接受#則取消當前拼音,并回到狀態1。
注意:提供一個文本文件,里面包含所有的漢語拼音及對應漢字。文件包含若干行,每行2個字符串,串之間有1個空格分開。行尾沒有空格。第一個串只包含英文字母,表示一個有效的拼音發音組合。后一個串包含若干個漢字。每個漢字是2個字節組成的。第一個字節最高位為1,第二個字節在0x40到0xfe之間,且不為0x7f。


總體設計:
一。讀取文件信息
    1。從文件中把所有漢語拼音及對應漢字讀入內存。因為文件中的每個拼音及其所有同音字處在同一行中,故可用一個指針數組*storage[]存儲文件內容,數組的每個元素指向文件中的一行。

二。讀取用戶數據
    2。讀取用戶輸入的字符串,并對其進行適當的轉換,判斷字符串是否合法,并屏蔽非法字符得到一個只包含合法數字字符的新字符串。

三。處理用戶數據,并請用戶選擇正確的拼音和漢字
    3。采用遞歸的方法,求出數字字符串對應的所有拼音組合,把所有滿足條件的拼音組合添加到線性鏈表letterList。
    4。把匹配的拼音組合按順序顯示到屏幕,請用戶選取一個組合。
    5。根據選中的拼音組合,到*storage[]中找到相應的漢字,并按順序輸出到屏幕,請用戶選取一個漢字。
    6。輸出用戶選取的漢字,同時輸出到文件。

四。重復步驟2-6,直到用戶選擇退出。


詳細設計:
一。讀取文件信息
1。從文件中把所有漢語拼音及對應漢字讀入內存。因為文件中的每個拼音及其所有同音字處在同一行中,故可用一個指針數組*storage[]存儲文件內容,數組的每個元素指向文件中的一行。因為工程中很多函數都要用到指針數組*storage[],因此把它設置成全局變量。
實現函數:void ReadFile(const char fileName[]);
/*
函數聲明:void ReadFile(const char fileName[]);
函數功能:從指定的文件中把所有漢語拼音及對應漢字讀入一個指針數組*storage[](全局變量),
  數組的每個元素指向文件中的一行。
輸入變量: const char fileName[],指定的文件名,其中存儲了漢字庫
輸出變量:*storage[],全局變量,每個元素指向一個包含某拼音組合及其對應漢字的字符串
返回值: 無 
*/

二。讀取用戶數據
2。讀取用戶輸入的字符串buf,并對其進行適當的轉換,判斷字符串是否合法,并屏蔽非法字符得到一個只含合法數字字符的新字符串value。
轉換規則:先找到結束鍵'1',刪除結束鍵之后的字符。若無結束鍵'1',value[i] = '\0';并結束程序;
然后在buf中逆序查找#號,直到找到#號或遇到buf的第一個元素為止。若找到#號,則把#號之后的合法字符(數字)復制到value;
若未找到#號,則把buf的所有合法字符(數字)復制到value;若只輸入結束鍵'1',表示用戶選擇離開。
實現函數:void ReadValue(char value[]);
/*
函數聲明:void ReadValue(char value[]);
函數功能:讀取用戶輸入的字符串buf,并對其進行適當的轉換。
    轉換規則:先找到結束鍵'1',刪除結束鍵之后的字符。
    若無結束鍵'1',value[i] = '\0';;并結束程序;
    然后在buf中逆序查找#號,直到找到#號或遇到buf的第一個元素為止。
    若找到#號,則把#號之后的合法字符(數字)復制到value;
    若未找到#號,則把buf的所有合法字符(數字)復制到value;
    若只輸入結束鍵'1',表示用戶選擇離開。
輸入變量: char value[],用來存儲用戶輸入的合法字符的字符串
輸出變量: char value[],用來存儲用戶輸入的合法字符的字符串
返回值: 無  
*/

三。處理用戶數據,并請用戶選擇正確的拼音和漢字
    此部分可分成三個步驟:先分析并得到正確的拼音組合,再根據拼音組合得到正確的漢字,最后輸出該漢字。
3。 獲取正確的拼音組合:(若value[0] = '\0';,則跳到第6步)
實現函數:void OutPutSpell(char letters[],const char value[]);
/*
函數聲明:void OutPutSpell(char letters[],const char value[]);
函數功能:根據整理后得到的字符串value,找出對應的所有拼音組合,創建一個線性鏈表letterList,
把所有滿足條件的拼音組合添加到letterList。把存儲在letterList中的拼音組合按順序顯示到屏幕,
請用戶選取一個組合,并把用戶選擇的拼音存儲到letters。 然后銷毀線性鏈表。
輸入變量:char letters[],用來存儲用戶選擇的拼音組合 
  const char value[],用來存儲用戶輸入的合法字符的字符串 
輸出變量:char letters[],用來存儲用戶選擇的拼音組合
返回值: 無
*/

該函數包括四個主要功能函數:
LNode GetLetterList(const char value[]);
void ChooseSpell(LNode head, char letters[]);
void RecursionAnalyse(const char *keyboard[], const char value[], int pos, char buf[], LNode Head);
void DistroyList(LNode List);

/*
函數聲明:LNode GetLetterList(const char value[]); 
函數功能:首先創建一個指針數組用來存儲鍵盤上的數字字母組合,以該數字為下標,即
const char *keyboard[10] = {NULL, NULL,"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
創建一個空的線性鏈表LNode letterList。
然后調用函數RecursionAnalyse,采用遞歸的方法,求出數字字符串對應的所有拼音組合,并把它們添加到鏈表letterList。
輸入變量: const char value[],用來存儲用戶輸入的合法字符的字符串
輸出變量: 無
返回值: LNode letterList,由拼音組合所組成的鏈表,它的空間在程序執行過程中動態分配
*/
/*
函數聲明:void ChooseSpell(LNode head, char letters[]);
函數功能:把存儲在鏈表letterList中的拼音組合按順序顯示到屏幕,請用戶選取一個組合,
  若用戶輸入#號存儲letters[0] = '\0';
  若用戶輸入*號,則繼續輸出后面的拼音組合,直到全部輸出';
  若用戶輸入了有效的選擇,存儲所選擇的拼音組合到letters。
  若用戶輸入非法字符或在末頁輸入*號,報錯并要求重新輸入。
輸入變量:LNode Head,線性鏈表letterList 的頭結點
  char letters[],用來存儲用戶選擇的拼音組合 
輸出變量:char letters[],用來存儲用戶選擇的拼音組合
返回值: 無
*/
/*
函數聲明:void RecursionAnalyse(const char *keyboard[], const char value[], int pos, char buf[], LNode Head);    
函數功能:遞歸調用本函數,求出所有的拼音組合,每求出一個拼音組合便將其構造成一個字符串,
  把該字符串作為結點數據插入鏈表letterList。
輸入變量: const char *keyboard[],用來存儲手機鍵盤信息的指針數組,根據輸入的數字可以得到相應的字母
  const char value[],用來存儲用戶輸入的合法字符的字符串
  int pos, 當前所處理的value的元素的下標
  LNode Head,線性鏈表letterList 的頭結點 
輸出變量: LNode Head,線性鏈表letterList 的頭結點 
返回值: 無
*/
/*
函數聲明:void DistroyList(LNode List);
函數功能:銷毀鏈表letterList。
輸入變量:LNode *List,指向線性鏈表letterList的指針
輸出變量:無
返回值: 無
*/

4。獲取正確的漢字:(若letters[0] = '\0',則跳到第6步)
實現函數:void OutPutCharacters(const char letters[], char characters[]);
/*
函數聲明:void OutPutCharacters(const char letters[], char character[]);
函數功能:到*storage[]中找到與letters匹配的元素,將相應的漢字按順序輸出到屏幕,
  請用戶選取一個漢字,
  若用戶輸入#號或非法字符,存儲NULL到character;
  若用戶輸入*號,則繼續輸出后面的漢字,直到全部輸出,然后存儲NULL到character;
  若用戶輸入了有效的選擇,存儲所選擇的漢字到character。
輸入變量:const char letters[],用來存儲用戶選擇的拼音組合 
  char character[],用來存儲用戶選擇的漢字 
輸出變量:char character[],用來存儲用戶選擇的漢字 
返回值: 無
*/
該函數包括三個主要功能函數:
int MatchCharacters(const char letters[], int pos);
void SaveCharacters(char charactersStorage[][3], char source[]);
void ChooseCharacters(char character[], const char charactersStorage[][3]);

/*
函數聲明:int MatchCharacters(const char letters[], int pos);
函數功能:判斷storage[pos]中的拼音組合是否與字符串letters相同
輸入變量: const char letters[],用來存儲用戶選擇的拼音字符串
     int pos, 當前所處理的storage的指針元素的下標
輸出變量:無
返回值: 相同則返回1,否則返回0
*/
/*
函數聲明:void SaveCharacters(char charactersStorage[][3], char source[]);
函數功能:把source中的漢字存儲到charactersStorage中
輸入變量:char charactersStorage[][3], 用來存儲與拼音letters對應的所有漢字
    char source[], storage的一個指針元素,它的拼音部分與letters相同
輸出變量: char charactersStorage[][3], 用來存儲與拼音letters對應的所有漢字
返回值:無
*/
/*
函數聲明:void ChooseCharacters(char character[], const char charactersStorage[][3]);
函數功能:把存儲在charactersStorage中的漢字按順序顯示到屏幕,請用戶選取一個組合,
  若用戶輸入#號存儲character[0] = '\0';
  若用戶輸入*號,則繼續輸出后面的漢字,直到全部輸出';
  若用戶輸入了有效的選擇,存儲所選擇的漢字到character。
  若用戶輸入非法字符或在末頁輸入*號,報錯并要求重新輸入。
輸入變量:char character[],用來存儲用戶選擇的漢字 
  const char charactersStorage[][3],用來存儲所有同音字 
輸出變量:char character[],用來存儲用戶選擇的漢字 
返回值: 無
*/

5。顯示用戶選取的漢字到屏幕,同時按照追加的方式輸出到指定文件 。
實現函數:void PrintCharacter(const char character[], const char fileName[]);
/*
函數聲明:void PrintCharacter(const char character[], const char fileName[]);
函數功能:顯示用戶選取的漢字到屏幕,同時按照追加的方式輸出到指定文件 。
輸入變量:const char character[],用來存儲用戶選擇的漢字
  const char fileName[],指定的文件名,用來追加存儲用戶選擇的漢字
輸出變量:char character[],用來存儲用戶選擇的漢字 
返回值: 無
*/

6。重復步驟2-5,直到用戶選擇退出。

注意:這里只列出了一些主要函數,其他功能函數由程序員自行設計。要求每個函數均要做好單體測試后再加入工程中。

Posted on 2006-10-21 19:56 夢想飛揚 閱讀(805) 評論(1)  編輯 收藏 引用

Feedback

# rdgyryt  回復  更多評論   

2006-11-30 08:26 by ytyhtr
sgrghrf

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品免费| 久久精品欧美| 欧美一区二区精品| 亚洲精品国产品国语在线app| 国产精品国产三级欧美二区| 久久精品在线播放| 午夜精品av| 亚洲午夜伦理| 夜夜嗨av一区二区三区| 亚洲国产精品一区二区尤物区 | 亚洲第一在线综合在线| 亚洲免费影视| 在线亚洲自拍| 亚洲福利视频在线| 影音先锋亚洲视频| 亚洲电影免费观看高清完整版在线| 欧美国产一区二区| 欧美不卡在线| 欧美精选午夜久久久乱码6080| 欧美二区不卡| 欧美激情中文不卡| 欧美成人亚洲成人日韩成人| 欧美激情一区二区在线| 国产精品国产精品| 伊人久久亚洲影院| 亚洲欧美久久久| 欧美 日韩 国产 一区| 99在线精品视频在线观看| 久久久久久久91| 欧美日韩中文字幕精品| 激情一区二区| 欧美一区=区| 99av国产精品欲麻豆| 久久一区中文字幕| 国产精品网站视频| 99精品福利视频| 美女视频黄a大片欧美| 99re在线精品| 欧美二区乱c少妇| 精品福利av| 久久久久国产精品一区| 中文日韩在线| 欧美日韩精品一本二本三本| 亚洲国产经典视频| 久久男人资源视频| 亚洲欧美日韩在线观看a三区| 欧美精选一区| 免费成人黄色片| 欧美综合二区| 99精品视频免费| 久久米奇亚洲| 国产一区二区三区的电影| 亚洲女性裸体视频| 亚洲精品色图| 欧美精品综合| 日韩网站在线观看| 91久久一区二区| 另类专区欧美制服同性| 一区二区亚洲精品国产| 快she精品国产999| 久久国产精品久久w女人spa| 国产一区二区三区高清| 欧美一区亚洲二区| 亚洲午夜伦理| 国产欧美一区在线| 久久大逼视频| 午夜伦欧美伦电影理论片| 国产精品久久久久aaaa九色| 一本色道久久综合亚洲精品不卡 | 久久精品二区| 午夜精品免费在线| 国产一区二区看久久| 久久久噜噜噜久久狠狠50岁| 欧美在线播放一区二区| 激情欧美一区二区三区| 免费看av成人| 欧美片第一页| 性欧美xxxx视频在线观看| 亚洲在线视频网站| 狠狠色噜噜狠狠色综合久| 欧美大片免费观看| 欧美日韩国产综合久久| 午夜精品成人在线视频| 欧美在线一二三四区| 91久久久亚洲精品| 亚洲午夜激情免费视频| 国产主播一区二区| 亚洲风情亚aⅴ在线发布| 欧美三级电影网| 久久久精品一区| 欧美激情综合五月色丁香小说| 亚洲天堂成人| 久久精品99| 9久re热视频在线精品| 亚洲欧美怡红院| 一本色道婷婷久久欧美| 午夜精彩国产免费不卡不顿大片| 一区二区亚洲精品国产| 亚洲国产你懂的| 国产毛片一区二区| 亚洲二区精品| 国产日产欧产精品推荐色 | 久久综合精品国产一区二区三区| 加勒比av一区二区| 一本色道久久综合| 国产欧美一区二区精品秋霞影院| 毛片一区二区| 欧美视频日韩视频在线观看| 久久久久久久久岛国免费| 欧美高清在线| 久久久久久久久久久成人| 欧美啪啪一区| 欧美高清免费| 黄色一区二区在线观看| 中文国产成人精品| 亚洲日本一区二区| 欧美中文在线视频| 亚洲欧美国产制服动漫| 久久视频在线视频| 久久国产精品免费一区| 国产精品a久久久久| 男女精品网站| 国产在线精品一区二区中文| 这里只有精品视频| 99精品久久久| 欧美.com| 亚洲国产裸拍裸体视频在线观看乱了中文 | 美女精品视频一区| 国产精品亚洲综合一区在线观看| 免费日韩av片| 欧美视频在线一区二区三区| 亚洲第一中文字幕| 亚洲人在线视频| 久久久久久综合| 久久亚洲综合| 国产在线视频不卡二| 欧美在线免费视频| 久久综合狠狠综合久久综合88| 国产精品大片wwwwww| 亚洲一区二区精品| 狠狠色2019综合网| 久久免费精品日本久久中文字幕| 久久亚洲色图| 亚洲黄色免费网站| 欧美激情一区二区三区不卡| 亚洲欧洲一区二区三区| 一区二区冒白浆视频| 欧美日韩一区成人| 一区二区三区高清| 亚洲在线一区| 国产日韩欧美在线一区| 久久久国产亚洲精品| 亚洲成人资源网| 亚洲免费高清| 国产精品国产三级国产a| 亚洲视频中文字幕| 久久免费视频观看| 最新国产の精品合集bt伙计| 欧美福利专区| 亚洲在线1234| 美女脱光内衣内裤视频久久影院| 亚洲黄网站在线观看| 亚洲大片av| 欧美日韩一区二区三区在线看| 欧美成年人视频| 亚洲九九精品| 国产精品久久毛片a| 欧美一区二区三区啪啪 | 亚洲精品国精品久久99热| 一本色道久久综合亚洲精品按摩| 国产精品久久久久久久久久ktv | 亚洲欧美日韩系列| 欧美福利小视频| 一区二区激情视频| 国产伊人精品| 欧美日韩精品高清| 欧美一区二区三区日韩| 欧美高清视频一区二区三区在线观看 | 欧美日韩精品一区二区三区四区 | 欧美日韩成人免费| 欧美一区午夜精品| 亚洲区中文字幕| 久久久久久久精| 在线中文字幕日韩| 一区二区三区在线看| 欧美日韩你懂的| 久久蜜臀精品av| 亚洲欧美另类在线观看| 亚洲欧洲精品一区| 久久躁狠狠躁夜夜爽| 亚洲欧美综合网| 亚洲少妇中出一区| 亚洲国产精品久久人人爱蜜臀| 国产精品自拍三区| 欧美日韩国产成人在线91| 久久麻豆一区二区| 欧美在线二区| 午夜视频一区| 亚洲天堂成人| 中国成人黄色视屏|