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

系統功能:
 手機的漢語拼音輸入法很'聰明',只要用數字鍵組合,就能夠自動找到能組成拼音的字母組合.從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>
            亚洲精品一二| 久久精品中文字幕一区二区三区 | 中日韩在线视频| 狠狠入ady亚洲精品| 国产精品一区二区你懂的| 欧美日韩精品二区第二页| 欧美三级第一页| 日韩亚洲欧美在线观看| 久久婷婷亚洲| 欧美国产日韩在线| 亚洲国产mv| 欧美激情视频一区二区三区在线播放 | 久久久一区二区三区| 久久一二三区| 亚洲美女在线国产| 亚洲欧美日韩精品久久| 老司机精品久久| 欧美精品一区二区在线观看| 国产精品网站在线观看| 在线精品亚洲一区二区| 亚洲视频在线观看网站| 久久免费视频在线| av不卡在线| 免费在线日韩av| 国产日韩一区二区三区在线播放| 蜜桃av一区二区三区| 美女黄毛**国产精品啪啪| 欧美国产先锋| 国产精品揄拍500视频| 在线欧美日韩精品| 午夜欧美精品| 欧美高清视频免费观看| 亚洲网站在线播放| 奶水喷射视频一区| 国产欧美日韩综合精品二区| 亚洲精品久久久久| 久久漫画官网| 亚洲女人天堂成人av在线| 欧美激情欧美狂野欧美精品| 国内自拍一区| 欧美一级免费视频| 日韩亚洲欧美成人一区| 老鸭窝91久久精品色噜噜导演| 国产乱码精品一区二区三| 亚洲精品一二区| 久久综合网色—综合色88| 亚洲欧美国产高清| 欧美亚洲第一页| 亚洲精品视频在线播放| 久久亚洲综合色| 欧美一区二区三区久久精品| 亚洲欧美综合v| 亚洲美女免费视频| 亚洲自拍三区| 亚洲免费久久| 欧美日韩成人网| 裸体素人女欧美日韩| 欧美日韩情趣电影| 亚洲国产天堂久久综合| 久久久久91| 性亚洲最疯狂xxxx高清| 国产精品私房写真福利视频| 中文精品视频一区二区在线观看| 欧美18av| 欧美黑人在线观看| 亚洲欧洲在线免费| 亚洲福利视频一区| 免费日韩av| 加勒比av一区二区| 久久久91精品国产一区二区三区| 亚洲欧美日韩国产综合在线| 国产区欧美区日韩区| 久久久久在线观看| 久久久在线视频| 亚洲国产精品一区二区尤物区| 久久久久久国产精品mv| 久久嫩草精品久久久精品| 亚洲国产一区在线| 亚洲人在线视频| 欧美小视频在线| 久久国产综合精品| 久久夜色精品一区| 亚洲黄色一区| 日韩视频永久免费| 国产精品电影在线观看| 欧美在线亚洲一区| 久久激情视频| 亚洲国产91色在线| 亚洲日本aⅴ片在线观看香蕉| 国产精品亚洲成人| 久久er99精品| 久久青草福利网站| 中文欧美在线视频| 新狼窝色av性久久久久久| 精品二区视频| 日韩五码在线| 国产欧美一区在线| 欧美成人69| 久久精品女人天堂| 免费成人你懂的| 欧美一区二区视频在线| 久久乐国产精品| 最新69国产成人精品视频免费| 亚洲视频在线看| 亚洲国产精品悠悠久久琪琪| 蜜桃av噜噜一区| 国产啪精品视频| av成人免费观看| 永久免费精品影视网站| 亚洲一区二区欧美日韩| 日韩视频在线免费| 久久九九国产精品| 欧美视频二区36p| 亚洲日本va午夜在线影院| 中文一区字幕| 亚洲高清在线观看一区| 午夜亚洲性色福利视频| 亚洲精品麻豆| 久久国产精品亚洲va麻豆| 一本色道久久88精品综合| 久久天天综合| 亚洲欧美日本国产专区一区| 麻豆精品视频在线观看| 欧美诱惑福利视频| 欧美成人r级一区二区三区| 午夜亚洲视频| 欧美性猛交视频| 亚洲精品自在久久| 最新国产精品拍自在线播放| 欧美一区二区三区视频在线 | 欧美日韩国产一区二区三区地区| 蜜桃久久精品乱码一区二区| 国产一区二区三区网站| 亚洲校园激情| 亚洲欧美日韩精品久久久| 欧美日韩天天操| 9久re热视频在线精品| 日韩视频中文| 欧美日韩视频一区二区| 亚洲欧洲综合| 亚洲色图在线视频| 国产精品二区影院| 亚洲综合电影| 久久久久久婷| 一区国产精品| 久久综合99re88久久爱| 欧美国产日本在线| 国内精品久久久久影院色| 久久久综合免费视频| 美女福利精品视频| 亚洲欧洲视频在线| 欧美成人午夜| 亚洲精品欧美极品| 国产精品99久久久久久久女警| 欧美日韩在线精品一区二区三区| 亚洲精品综合| 欧美亚洲视频一区二区| 国产精品久久久久久久浪潮网站| 99re成人精品视频| 香港成人在线视频| 极品裸体白嫩激情啪啪国产精品| 久久九九久精品国产免费直播| 老色鬼久久亚洲一区二区| 精品成人国产| 欧美第一黄色网| 亚洲视频第一页| 久久在线免费观看视频| 一区二区欧美在线| 国产精品免费观看在线| 久久午夜精品| 日韩亚洲不卡在线| 久久久亚洲午夜电影| 亚洲黄色影院| 国产精品国产三级国产普通话三级 | 欧美一区二区三区四区高清| 另类综合日韩欧美亚洲| 99热精品在线观看| 国产精品丝袜xxxxxxx| 久久久精品午夜少妇| 亚洲成色www8888| 在线视频亚洲| 亚洲成人资源网| 国产精品视频网站| 欧美精品在线观看播放| 欧美一区二区精品久久911| 亚洲国内在线| 久久婷婷久久| 欧美一区二区精品久久911| 亚洲日本激情| 黄色日韩在线| 国产麻豆视频精品| 欧美日韩天天操| 你懂的一区二区| 久久9热精品视频| 亚洲天堂黄色| 亚洲三级视频在线观看| 牛牛影视久久网| 久久中文在线| 久久久久国产精品厨房| 午夜伦欧美伦电影理论片|