日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

数据结构(C语言)——电话号码查询系统实现

發布時間:2023/12/20 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构(C语言)——电话号码查询系统实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

報告內容開始

一、數據結構課程設計目標

《數據結構》是計算機專業一門重要的專業技術基礎課程,是一門關鍵性核心課程。《數據結構》課程的目標是使學生學會分析研究計算機加工對象的特性,選擇合適的數據結構和存儲表示,以及編制相應的實現算法,培養和提高學生程序設計的能力。《數據結構》課程也是一門實踐性較強的課程,設置實踐環節是十分重要的。本課程設計的目標就是要達到理論與實際應用相結合,提高學生組織數據及編寫大型程序的能力,并培養基本的、良好的程序設計技能以及合作能力。

二、問題描述

人們在日常生活中經常需要查找某個人或某個單位的電話號碼,本實驗將實現一個簡單的個人電話號碼查詢系統,根據用戶輸入的信息(例如姓名等)進行快速查詢。

三、需求分析

1. 需求

人們在日常生活中經常需要查找某個人或某個單位的電話號碼,通過紙質記錄或是電子文檔記錄會顯得雜亂,并且難于管理維護。因此設計一個電話號碼查詢系統。

電話號碼查詢系統需要做到:

  • 通過姓名進行電話號碼查找
  • 電話號碼信息的插入
  • 電話號碼的刪除
  • 電話信息的修改
  • 電話號碼查詢系統信息的排序
  • 2. 對需求進行算法分析

    電話號碼查詢系統程序運行結束會釋放內存,導致插入信息丟失。如果要在程序運行結束后仍然保存電話號碼信息,就需要將電話號碼信息采用文件的形式存放到外存中。在系統運行時,需要將電話號碼信息從文件調入內存來進行查找等操作就需要創建一個結構體接收文件數據。完成對電話號碼的插入刪除等操作使用對單鏈表的增刪改查算法實現。利用起泡排序法對電話號碼信息進行排序。

    四、概要設計

    如果要建立電話號碼查詢系統需要輸入多個類型信息,例如姓名,電話號,郵箱等。所要求定義的數據類型不同,所以定義一個結構體封裝各類型數據。將各個功能函數定義在一個類中。需要完成的功能有:插入,排序,刪除,查找,修改,保存。要顯示這些功能結果還需要有顯示功能。

    因為電話號碼查詢系統需要記錄用戶信息,即對輸入的信息進行保存。所以在程序運行時應當有對外部數據處理的函數,即文件輸入輸出函數,需要在系統執行功能之前對外部內存進行檢索,查找是否有記錄信息的文件,如果有,則導入,如果沒有,在程序運行保存數據后,應當建立一個外部存儲文件用以存放用戶輸入信息,方便下次直接進行信息的讀入、檢索、閱覽。

    對程序進行概括設計,建立函數模塊圖,以及程序流程圖。

    函數模塊思維導圖如下:

    程序流程圖如下:

    五、詳細設計

    1.結構體的定義

    定義所需要的的結構變量,以及一些結構體函數,
    具體算法實現及注釋信息如下:

    struct TeleNumber // 定義結構體類型;封裝電話號碼查詢系統的信息 {char name[10]; // 姓名long long phoneNumber; // 固定電話號碼long long mobileNumber; // 移動電話號碼char email[30]; // 個人郵箱int s;TeleNumber* Next;//定義結構體指針void ReadFile(istream& in);//讀入文件數據void input(); //鍵盤輸入信息void display(); //DOS窗口信息顯示 }; void TeleNumber::ReadFile(istream& in) // 從文件把數據讀入到程序 {in >> name >> phoneNumber >> mobileNumber >> email; } void TeleNumber::input() // 信息輸入 {cout << " 請輸入姓名 " << endl;cin >> name;cout << " 請輸入固定電話號碼 " << endl;cin >> phoneNumber;cout << " 請輸入移動電話號碼 " << endl;cin >> mobileNumber;cout << " 郵箱 " << endl;cin >> email;s = j++;} void TeleNumber::display() // 在命令窗口顯示信息 {cout << " 姓名 :" << name << '\t' << " 固定號碼 :" << phoneNumber << '\t'<< " 移動電話號碼 :" << mobileNumber << " 郵箱 :" << email << '\t' << endl; }

    2.建立單鏈表,讀取外部文件數據

    使用頭插法建立單鏈表
    頭插法是將新增結點插入到第一個結點之前,示意圖如下:

    使用到iostream、fstream頭文件,定義讀寫操作

    程序代碼及注釋如下:

    TeleQuerySystem::TeleQuerySystem() {Head = new TeleNumber; // 頭插法建立單鏈表Head->Next = new TeleNumber;End = Head->Next;in.open("TeleNumber.txt"); // 打開外存文件,看是否有數據存在if (!in)cout << " 電話查詢系統中沒有任何信息,請輸入信息 " << endl;else{while (!in.eof()) // 如果有,則打開,并將數據讀取到程序{End->ReadFile(in);if (End->name[0] == '\0')break;End->Next = new TeleNumber;End = End->Next;}in.close();cout << " 讀取電話號碼查詢系統成功 !" << endl;}cout << " 輸入任意字符繼續 " << endl;cin >> a; } TeleQuerySystem::~TeleQuerySystem() // 釋放單鏈表 {TeleNumber* temp;while (Head->Next != End){temp = Head->Next;Head = Head->Next;delete temp;}delete Head, End; // 刪除頭尾指針 }

    3.主函數部分設計(查詢系統首頁菜單)

    利用switch語句實現輸入代號調用函數
    程序代碼及注釋信息如下:

    int main() {bool flag = true;TeleQuerySystem tele;char name[20];while (flag){system("cls");cout << "添加信息請按 1 " << endl;cout << "顯示信息請按 2 " << endl; cout << "排序信息請按 3 " << endl;cout << "查找信息請按 4 " << endl;cout << "刪除信息請按 5 " << endl;cout << "修改信息請按 6 " << endl;cout << "保存信息請按 7 " << endl;cout << " 請輸入代號: ";cin >> x;switch (x)//利用switch語句實現輸入代號調用函數{case 0:flag = false; break;case 1:tele.Insert(); break;case 2:tele.Show(); break;case 3:tele.BubbleSort(); break;case 4:cout << " 請輸入欲查找人的姓名 " << endl;cin >> name;tele.Search(name); break;case 5:tele.Delete(); break;case 6:tele.Change(); break;case 7:tele.FileSave(); break;}cout << " 輸入任意字母返回 " << endl;cin >> a;}return 0; }

    4.子函數調用(各個功能的具體實現函數)

    (1) 鏈表插入函數Insert()【實現新信息的添加】

    調用結構體內封裝函數input實現鍵入信息插入鏈表結點
    程序代碼以及注釋信息如下:

    void TeleQuerySystem::Insert() // 插入 {End->input(); // 從單鏈表尾部插入End->Next = new TeleNumber;End = End->Next;cout << endl << " 插入信息成功 " << endl; }

    (2) 顯示函數Show()

    調用結構體內封裝函數display實現鍵入信息插入鏈表結點
    程序代碼及注釋信息如下:

    void TeleQuerySystem::Show()//顯示 {TeleNumber* p = Head->Next;if (p != End) {printf("\n電話查詢系統內所有信息如下:\n\n");for (; p != End; p = p->Next)p->display();}else cout << " 沒有信息,請先輸入 " << endl; }

    (3) 排序函數BubbleSort()

    排序函數我使用起泡排序法。通過比較電話號碼進行排序。排序方法是對一個結點A的電話號碼信息與下一個結點B電話號碼信息進行比較,若A>B,則進行信息交換。再與下一個結點C進行比較,如此往復比較n-1趟結束。
    對信息交換,需要定義一個數據域交換函數進行兩個結點間的數據交換,我們使用函數 strcpy。

    程序代碼及注釋信息如下:

    void TeleQuerySystem::BubbleSort() // 起泡排序主體 {TeleNumber* p = NULL, * q = NULL;int exchange = j - 1;int bound;int i;while (exchange){bound = exchange;exchange = 0;for (p = Head->Next, i = 1; i < bound; i++, p = p->Next)if (p->mobileNumber > p->Next->mobileNumber){Swap(p, p->Next); // 調用交換函數exchange = p->s;}}Show();//調用顯示函數顯示結果 } void TeleQuerySystem::Swap(TeleNumber* p1, TeleNumber* p2) // 兩個類對象數據域進行交換 {TeleNumber* temp = new TeleNumber;strcpy_s(temp->name, p1->name);temp->mobileNumber = p1->mobileNumber;temp->phoneNumber = p1->phoneNumber;strcpy_s(temp->email, p1->email);temp->s = p1->s;strcpy_s(p1->name, p2->name);p1->mobileNumber = p2->mobileNumber;p1->phoneNumber = p2->phoneNumber;strcpy_s(p1->email, p2->email);p1->s = p2->s;strcpy_s(p2->name, temp->name);p2->mobileNumber = temp->mobileNumber;p2->phoneNumber = temp->phoneNumber;strcpy_s(p2->email, temp->email);p2->s = temp->s; }

    (4) 信息查詢函數Search()

    信息查詢函數是對姓名進行查詢,對單鏈表所有結點,從頭結點開始進行遍歷。用strcmp字符串比較函數對名字這個字符數組進行比較,若相等,則調用display輸出該結點p對應的信息。不存在則輸出“查無此人”。

    程序代碼及注釋信息如下:

    TeleNumber* TeleQuerySystem::Search(char* name) {for (TeleNumber* p = Head->Next; p != End; p = p->Next)if (!strcmp(p->name, name)){if (x == 4){p->display();return p;}elsereturn p;}if (x == 4)cout << " 查無此人 " << endl;return 0;}

    (5) 刪除函數Delete()

    刪除函數使用單鏈表刪除操作完成。思想:為找出要刪除的結點p(2結點),將前驅結點pre(1結點)的下一結點指向所要刪除的結點p的下一結點temp(3結點)。
    示意圖如下:

    程序代碼及注釋信息如下:

    void TeleQuerySystem::Delete() // 刪除 {char name[20];TeleNumber* p = new TeleNumber, * temp = NULL;cout << " 請輸入要刪除人的姓名 :" << endl;cin >> name;p->Next = Search(name); // 先進行查找,找到所要刪除的結點if (Search(name)){temp = p->Next;p->Next = p->Next->Next; // 摘鏈delete temp;cout << "\t\t 刪除成功 !" << endl;}else{cout << "\t\t 沒有找到 !" << endl;} }

    (6) 修改函數Change()

    修改信息的函數是使用查詢函數對需要修改的姓名進行查詢,查詢到的鏈表結點(姓名所對應信息)調用input函數重新輸入信息。

    程序代碼及注釋信息如下:

    void TeleQuerySystem::Change() // 修改信息 {char name[20];cout << " 請輸入要修改的人的姓名 :";cin >> name;if (Search(name)){cout << "\t\t 已找到個人的信息,請輸入新的信息 !" << endl;Search(name)->input();cout << " 修改成功! " << endl;}else{cout << "\t\t 沒有找到 !" << endl;} }

    (7) 文件保存函數FileSave()

    文件保存函數即利用iostream和fstream頭文件將鏈表信息值循環依次導入到外部存儲文件中。
    程序代碼及注釋信息如下:

    void TeleQuerySystem::FileSave() // 保存文件 {out.open("TeleNumber.txt"); // 建立外存文件 TeleNumber.txt for (TeleNumber* p = Head->Next; p != End; p = p->Next)out << p->name << "\t" << p->phoneNumber << "\t" << p->mobileNumber << "\t" << p->email << endl; // 將數據存到外存文件里out.close();cout << " 保存成功! " << endl; }

    六、軟件說明書(給出軟件如何使用,使用時的注意事項)

    軟件使用過程: 使用集成編譯軟件運行TeleQuerySystem.cpp文件 程序運行成功后首頁顯示

    • 初次運行該程序會顯示如下字段:
    電話查詢系統中沒有任何信息,請輸入信息 請輸入任意字段繼續:
    • 對電話號信息進行保存后再次運行程序會顯示如下:
    讀取電話號碼查詢系統成功! 請輸入任意字段繼續:
    • 出現“輸入任意字符繼續”后隨意輸入一個字符跳轉到主頁菜單欄

    主頁菜單欄的使用

    主頁菜單欄顯示如下:

    添加信息請按1顯示信息請按2排序信息請按3查找信息請按4刪除信息請按5修改信息請按6保存信息請按7輸入代號:
    • 使用主頁菜單欄需要根據所需要使用的功能,鍵入對應的數字。
      例如:我們需要插入信息,就使用鍵盤鍵入1,進入信息添加模塊,根據提示輸入信息即可,信息輸入完成后鍵入回車(Enter鍵)完成插入信息操作。操作過程圖如下:
    • 在顯示插入信息成功,顯示“輸入任意字符返回”字段后鍵入一個字符后返回主頁菜單欄。
      其他功能實現同理。
    • 最后鍵入7,以文件形式保存數據至外存中,文件名為“TeleNumber.txt”。

    注意事項

    • 這里我使用的是Visual Stdio
      2019,使用VC6.0需要將代碼第146、149、151、154、156、159行的strcpy_s改為strcpy。這是因為在VC++2005和VS2013版本后引入了函數后綴” _s ” 使得原函數更加安全,老版本編譯器沒有引入該后綴會導致編譯出錯。
    • 在顯示“輸入任意字符繼續”字段時切忌輸入大于單個字符的字符串,否則會出現異常
    • 在對數據信息進行增刪改查后如果沒有保存信息而關閉程序,會導致本次信息修改數據丟失

    七、測試報告

    八、心得體會

    參考文獻:《數據結構(C語言版)清華大學出版社.嚴蔚敏》

    報告內容結束

    本文章作為本人云筆記順便分享給大家,吸納一下大家建議。

    代碼部分參照了老師給的實驗報告以及網上大神的代碼(排序數據域互換代碼不是本人所寫,然而這段代碼沒有做到成功互換鏈表數據,哭了)。如有問題希望給出建議
    第一次寫博客,有問題望見諒。[別客氣,問題隨便提]
    因為疫情原因,所以課程設計原本時限一周壓縮至一天。很多功能實現有欠缺。可以適量更改一下。例如:

    • 電話號碼可以定義為字符數組類型,這樣對排序功能實現會很方便。至今我排序功能實現都有問題,原因不明,只怪自己學藝不精,不過你們幫我提出來我也不會介意,哎嘿…
    • 在插入信息時,需要重復退回主頁菜單欄,重新選擇插入功能再進行插入,每插入一條數據都要重復進行此操作,刪除操作亦是如此。操作過于繁雜。
    • 在插入信息時,需要重復退回主頁菜單欄,重新選擇插入功能再進行插入,每插入一條數據都要重復進行此操作,刪除操作亦是如此。操作過于繁雜。
    • 當進行信息刪除時,依然只能刪除多個同名結點的最靠前結點的數據。
    • 當信息出現重復時,沒有良好的查重算法進行約束。

    參考的幾篇文章找不到了,有同學見到累死文章評論區推一下鏈接
    學藝不精,輕噴…

    總結

    以上是生活随笔為你收集整理的数据结构(C语言)——电话号码查询系统实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产熟女高潮一区二区三区 | 亚洲精品手机在线 | 日本黄色免费视频 | 国产免费黄网站 | 成人激情片 | 亚洲第九页 | 美女高潮黄又色高清视频免费 | 亚洲一二三四 | 国产成人亚洲精品无码h在线 | 国产一级片一区二区 | 欧美一区二区在线免费观看 | 国产网友自拍 | 日韩精品成人无码专区免费 | 99国产精品久久久久久久成人 | 国产精品嫩草影院桃色 | 国产男女视频在线观看 | 久久国产三级 | 日本肉体xxxx裸体137大胆图 | 怡春院一区二区 | 性折磨bdsm欧美激情另类 | 69av在线 | 久久久久18 | 亚洲精品电影在线观看 | 91精品国自产在线 | 国产三级在线免费 | 精品久久国产视频 | 四虎在线观看 | 日本三级精品 | 成人欧美一区二区三区黑人动态图 | 久久免费国产 | 午夜视频久久久 | 91成人免费在线观看视频 | 欧美黑粗大 | 少妇性bbb搡bbb爽爽爽欧美 | 国产精品日韩欧美大师 | 天天做天天爱夜夜爽 | 成人三级在线看 | 人成精品 | 欧美国产一级 | 国产喷水在线 | 大胸美女被爆操 | 粗大的内捧猛烈进出在线视频 | 久久久久久久久久免费 | 亚洲五码av | 国产欲妇| www亚洲一区| 欧美伦理片网站 | 香蕉久久夜色精品国产使用方法 | 国产精品社区 | www国产成人 | 日本一区二区三区视频在线观看 | www.999热 | 国产免费成人av | 欧av在线 | 美女黄色录像 | 日本一区电影 | 亚洲无线观看 | 综合视频在线 | 国产精品无码毛片 | 国产激情自拍视频 | 日韩黄色片免费看 | www.玖玖玖| 麻豆网站视频 | 91爱爱视频 | 久久久精品人妻一区二区三区四 | 天天爽天天搞 | 国产高清自拍av | 亚洲一级精品 | 欧美网站在线 | 日韩av资源在线观看 | 日韩一区二区三区在线免费观看 | 亚洲国产精品成人无码区 | 免费午夜网站 | 九九热免费精品视频 | 成人在线网 | 国产无套丰满白嫩对白 | 人妻在线日韩免费视频 | 午夜久久久久久噜噜噜噜 | 国产精品视频一区二区在线观看 | 亚洲欧美一区二区视频 | 怡红院毛片 | 天天干天天干天天干 | 素人一区 | 久久国内偷拍 | 加勒比在线免费视频 | 国产精品毛片久久久久久 | 亚洲v在线观看 | 成人第四色 | 麻豆md0034在线观看 | 国精品一区 | 一级黄色片免费 | 极品美女销魂一区二区三区 | 国产一区二区三区精品视频 | 午夜激情婷婷 | 农村搞破鞋视频大全 | 久久久久久久久久影视 | 日本人视频69式jzzij | 黄骗免费网站 | 久久神马影院 |