基于C++实现(控制台+界面)通讯录管理系统【100010012】
個人通訊錄管理系統
問題描述:
主要內容:
個人通訊錄是記錄了同學(包含一起上學的學校名稱)、同事(包含共事的單位名稱)、朋友(包含認識的地點)、親戚(包含稱呼)等與本人有關人員的數據集。
具體要求:
-
提供錄入個人信息、修改個人信息(姓名和出生日期除外)、刪除個人信息等編輯功能。
-
提供按姓名查詢個人信息的功能。
-
提供查找在5天之內過生日的人員的信息,以便發出祝賀電話或 E-mail。
-
按照姓名或出生日期排序,顯示輸出。
-
統計在給定月份出生的人數,并顯示輸出。
-
能列出全體人員的姓名、出生日期、電話和email地址。
-
能分別列出同學、同事、朋友、親戚的所有信息。
-
用菜單形式提供程序的各種功能的選擇。
系統設計
開發環境:
-
控制臺版本:VS2015
-
Qt界面版本:Qt_5_6_0_MinGW_32bit
控制臺版本與界面版本:
程序共有兩個版本,控制臺版本和界面版本。在程序設計之初,我們為了由易到難循序漸進,我們先在控制臺下實現通訊錄的各個功能。在完成并完善了控制臺下最初版本之后,再設計并實現最終的界面版本。
類體系設計:
程序結構中以Person類為基類,以Relative、Friend、Colleague和Classmate為其派生類。程序通過生成這四個派生類的對象來存儲通訊錄聯系人信息。基類Person類中包含了姓名、電話、地址等基本信息,每一個派生類各自增加了不同的數據成員以及相應返回其數據成員的成員函數。
程序中還定義了AddressBook類,這個類嚴格意義來說就是我們所理解的通訊錄。其數據成員中包含了一個Person類型的指針數組。其成員函數共有七個,七個函數可對該Person類型指針數組進行操作,以完成題目所要求的添加聯系人、刪除聯系人、顯示所有聯系人并排序等功能。
類體系設計框架如圖。
類定義:(圖片代碼中有注釋詳細說明)
基類Person類:
數據成員:
成員函數:
派生類Relative:
派生類Colleague:
派生類Friend:
派生類Classmate:
通訊錄類Addressbook:
頭文件:
Cpp文件:
通訊錄Addressbook類各部分功能:
輸入聯系人信息:
刪除聯系人:
對聯系人進行排序:
保存到文件夾
讀取文件
查找聯系人
另外需要說明的是,控制臺版本中基類Person類設為抽象類,函數Print、Print2為純虛函數。(Print輸出中文如“姓名、電話號碼”等等,Print2則輸出相應的具體成員信息) 四個派生類都有其版本的虛函數以滿足輸出不同信息的要求。
因為讀寫兼容性問題(二進制文本讀寫和虛函數似乎不兼容,這個問題我們一直未能解決。目前已將該情況向老師說明,但暫時還未得到解決)因此我們在控制臺版本中繼續采用抽象類以及虛函數,并將二進制文本讀寫改為文本讀寫。在界面版本中我們則放棄采用抽象類和虛函數,繼續使用二進制文本讀取。這樣也是為了更多使用我們所學知識。
界面實現技術細節:
添加菜單:
一、添加 QToolButton 控件,清除text,icon 為空,設置屬性 arrowType 為**DownArrow”” ,這樣就變成一個倒三角形狀。
二、彈出菜單
- 添加菜單。
- 設置樣式。
- 關聯菜單信號和槽函數。
三、響應菜單選中信號(寫槽函數)。
四、補充:彈出右鍵菜單。
- 從指定控件的類派生出一個類,把這個控件提升為這個派生類。
- 重寫 contextMenuEvent ,在這里創建菜單和關聯信號和槽函數。
- 寫對應槽函數。
重寫界面邊框
原理實際就是去掉邊框,然后添加label 和 按鈕控件手動模擬。
一、去掉系統默認邊框的顯示
二、界面布局
- 左邊添加一個 label 控件,去掉text,設置 pixmap 屬性,來設置圖片。
- 中間放一個label空間,然后是3個按鈕控件。
- 設置對應的圖片,這里用QSS樣式設置。
- QSS樣式設置。
三、代碼實現
- 響應3個按鈕點擊信號,彈出菜單前面已經提到。
- 按住標題移動功能,重寫 mousePressEvent mouseReleaseEvent
mouseMoveEvent 事件。
搜索功能,編輯框虛字提示
一、設置編輯框屬性 placeholderText ,即可實現上面的虛字提示功能,(有輸入虛字提示消失)。
二、搜索按鈕 和 上面最小化 按鈕 QSS設置一樣。
ListWidget 控件自定義窗口
思路:
ListWidget 控件下的每一個 Item(QListWidgetItem)都可以看作一個窗口,只要把窗口設置成自定義的窗口即可。
- 創建子窗口,關聯子窗口和ListWidget,關聯子窗口和父窗口的信號和槽函數。
- 槽函數之刪除子窗口。
-
判斷信號子窗口。
-
使用 takeItem 來去除子窗口。
-
- 一些函數。
TabWidget 控件
這里實際當按鈕使用,使用TabWidget 方便創建多個按鈕和響應時間。
一、QSS樣式
二、添加槽函數 void MainWindow::on_tabWidget_currentChanged(int index)
ListItem子窗口
一、設置label 的圖片 和 按鈕的樣式
二、移入顯示按鈕,移出隱藏按鈕(重寫 enterEvent leaveEvent)
三、彈出(創建)窗口
四、日期的計算和選擇
五、雙擊顯示詳細信息
重寫 ListItemForm 的 mouseDoubleClickEvent 事件即可(不是在主窗口的ListWidget響應雙擊事件)
窗口編輯和查看切換
一、編輯模式:
二、查看模式:
三、思路:
-
通過 setEnabled 函數來設置是否可編輯。
-
通過 setStyleSheet 函數來改變顯示的樣式。
- 禁用控件之后,字體會變灰(包括上面的Tab控件也是這樣來避免禁用后難看的問題)。通過 樣式表里面的 color 屬性來設置字體,避免字體變灰。
- 編輯框邊框隱藏。通過設置樣式表里面border 屬性大小為 0px 來隱藏邊框
- TabWidget 設置Tab按鈕的樣式。
- DataWidget 控件,設置 上面的樣式并沒有 去除邊框 和 黑色背景。所以使用一個label控件來顯示查看模式,編輯模式才顯示DataEdit控件。
彈出文件選擇框:
EXE文件圖標設置:
-
把圖標文件icon.ico復制到項目目錄下
-
在 .pro 文件以下一下語句
程序測試
界面設計細節(QT版本):
頁面設計與基本功能如下:
主界面:
添加菜單:
搜索功能,編輯框虛字提醒:
搜索編輯框自動補全功能:
查看聯系人詳細信息:
編輯聯系人信息:
生日選擇:
查詢最近生日與生日提醒:
生成祝賀文本:
使用說明
程序的使用:
由界面提示操作即可。
開發環境:
-
控制臺版本:VS2015
-
如果使用低版本vs打開,請先設置項目的平臺工具集屬性
-
設置方式
- 項目–>屬性–>常規–>平臺工具集–>當前VS對應的那個選項
-
-
Qt界面版本:Qt_5_6_0_MinGW_32bit
-
注意不是使用VS下的Qt插件,必須安裝Qt5.6來打開項目,而不是用VS打開。
-
注意,Qt項目的目錄路徑不能含有中文,有中文無法編譯
-
?? 資源
大小: 3.27MB
?? 資源下載:https://download.csdn.net/download/s1t16/87247954
總結
以上是生活随笔為你收集整理的基于C++实现(控制台+界面)通讯录管理系统【100010012】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyQt5 QPushButton 设置
- 下一篇: Prometheus 系列开篇:为什么要