通訊錄管理系統(tǒng)課程設(shè)計

按照慣例,一波課程設(shè)計走起~

這次寫的是通訊錄管理系統(tǒng)布持,經(jīng)過幾番大修和N+1次小修之后BUG已經(jīng)很少了~先來看看期間遇到的哪些問題吧:

Qusetion

1:針對手機號的排序問題(即交換結(jié)構(gòu)體)
2:文件寫入和調(diào)用時亂碼的問題
3:界面美化問題和用戶體驗感優(yōu)化

一:針對手機號的排序問題(即交換結(jié)構(gòu)體)

void swap(person *p){                      //交換結(jié)構(gòu)體
person *temp;
temp = p->next->next;                      //temp=p3
p->next->next = p->next->next->next;       //p3=p4
temp->next = p->next;                      //p4=p2
p->next = temp;                            //p2=p3
}

emmm絮记,你可以試著想想四個杯子在一起放著(p1-p4)灾梦,然后再拿出一個空的(temp)恳守,把第三個杯子的水倒入空杯子中峦耘,然后第四個杯子倒入第三個驳概,第二個倒入第四個赤嚼,第三個倒入第二個,即完成結(jié)構(gòu)體的交換= = 好了自己理解理解~
然后應(yīng)用:

    while (p2->next->next != NULL){
        if (atoi(p2->next->phone)>atoi(p2->next->next->phone)){          //防止輸入非int型數(shù)據(jù)
            swap(p2); k++;
        }
        p2 = p2->next;
    }

即可完成~

二:文件寫入和調(diào)用時亂碼的問題

void save(person *head){                                                //**保存文件信息**
    FILE *fp;
    if ((fp = fopen("1.txt", "w")) == NULL){
        cout << "The file  1.txt can not be opened." << endl;
        return;
    }
    person *p = head->next;
    while (p != NULL){
        fprintf(fp, "%s %s %s %s \n", p->name, p->city, p->phone,p->num);
        p = p->next;
    }
    fclose(fp);
}

如果運行顺又,可以發(fā)現(xiàn)這里是不會報錯的更卒。 而運行程序后,輸入數(shù)據(jù)稚照,程序就會出錯而關(guān)閉蹂空,此時輸入的數(shù)據(jù)并未存儲下來,進而也就無法讀取果录。
想辦法處理上枕,發(fā)現(xiàn)定義的數(shù)據(jù)類型不盡相同:

struct person {
    char name[20];
    char city[20];
    char phone[20];
    int  num;
    struct person *next;
};

手機號num定義的是int整型變量,所以先將上面的%s換為%d,再運行試試弱恒。結(jié)果繼續(xù)報錯辨萍,也未成功存儲數(shù)據(jù)。
再來看看讀取文件的錯誤:

void duqu(person *head){                                                //**讀取文件信息**
    FILE *fp;
    if ((fp = fopen("1.txt", "r")) == NULL){
        return;
    }
    while (!feof(fp)){
        person *p = head;
        person *p2 = new person;
        fscanf(fp, "%s %s %s %d", p2->name, p2->city, p2->phone,p2->num);
        while (p->next != NULL){
            p = p->next;
        }
        p->next = p2;
        p2->next = NULL;
    }
    fclose(fp);
}

細心地同學(xué)會發(fā)現(xiàn)返弹,已經(jīng)把%s改了過來锈玉,但是讀取數(shù)據(jù)時候程序仍然會出錯停止運行,然而更扯淡的是改來改去Dev都不會報錯= = 此時發(fā)現(xiàn)這款編譯器的辣雞之處了义起!
忽然想起某大佬(劉性大佬)曾說過scanf使用格式拉背,發(fā)現(xiàn)沒有加取地址符&,改正之默终,運行椅棺,仍然報錯。后來搜尋無果穷蛹,只得重頭看起代碼來~發(fā)現(xiàn)person *p = head ;定義在while里土陪,從頭到尾都是打渣子的,并未起到應(yīng)該起的作用肴熏,只是p2指向的緩存區(qū)不停地讀值鬼雀,釋放,肯定會報錯蛙吏。將它定義在while前源哩,即在FILE *fp;后鞋吉,就完美解決了問題~輸入也運行并保存成功了!励烦!

三:界面美化問題和用戶體驗感優(yōu)化

讀取文件時谓着,如果1.txt不存在,將會創(chuàng)建該txt文本文檔 坛掠,并出現(xiàn)一行美美的提示語~

void duqu(person *head){                                                  //**讀取文件信息** 
    FILE *fp;
    person *p = head;
    if ((fp = fopen("1.txt", "r+")) == NULL){
        cout<<"\n\n\n\n\n\n\n                   初次啟動 系統(tǒng)加載中";
          Sleep(500);cout << "●";Sleep(500);cout << "●";Sleep(500);cout << "●";
          Sleep(500);cout << "●";Sleep(500);cout << "●";Sleep(500);cout << "●";
        return; 
    }
    else{
        while (!(feof(fp))){
            person *p2 = new person;
            fscanf(fp, "%s %s %s %d\n", &p2->name, &p2->city, &p2->phone, &p2->num);
            p->next = p2;
            p = p->next;
            p->next = NULL;
        }
    }
    fclose(fp);
}

效果如圖

就問你美不美I廾!.png

顯示功能中加入:cout << "顯示完成\n" << endl;system("pause");cout << "返回主菜單";
輸入聯(lián)系人功能中排除相同姓名用戶(理論是可以重名的屉栓,但是強迫癥= =)

    while (p->next != NULL){
        if (strcmp(p->next->name, p2->name) == 0){
            cout << "此聯(lián)系人已經(jīng)存在\n即將返回主窗口" << endl; 
            Sleep(1000);
            return;
        }
        p = p->next;
    }

修改聯(lián)系人功能中加入和添加相同的功能:

        while (p3->next != NULL){
            if (strcmp(p3->next->name, p2->name) == 0){
                    cout << "與其他聯(lián)系人姓名重復(fù) 即將返回主菜單";
                    Sleep(1000);
                    return;
            }
            p3 = p3->next;
        }

界面美化

圖片.png

添加大量Sleep()舷蒲,getch(),system()等函數(shù)友多,提升用戶體驗感和友好度牲平。
因為某兔子說過,一款程序寫的再好域滥,如果用戶體驗感極差纵柿,它也是要GG的~

感謝某兔學(xué)姐,某李性大佬启绰,某浪學(xué)長給予的大力支持與鼓勵昂儒!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酬土,隨后出現(xiàn)的幾起案子荆忍,更是在濱河造成了極大的恐慌,老刑警劉巖撤缴,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刹枉,死亡現(xiàn)場離奇詭異,居然都是意外死亡屈呕,警方通過查閱死者的電腦和手機微宝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虎眨,“玉大人蟋软,你說我怎么就攤上這事∷宰” “怎么了岳守?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長碌冶。 經(jīng)常有香客問我湿痢,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任譬重,我火速辦了婚禮拒逮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臀规。我一直安慰自己滩援,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布塔嬉。 她就那樣靜靜地躺著玩徊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邑遏。 梳的紋絲不亂的頭發(fā)上佣赖,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天恰矩,我揣著相機與錄音记盒,去河邊找鬼。 笑死外傅,一個胖子當(dāng)著我的面吹牛纪吮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萎胰,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼碾盟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了技竟?” 一聲冷哼從身側(cè)響起冰肴,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎榔组,沒想到半個月后熙尉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡搓扯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年检痰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锨推。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡铅歼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出换可,到底是詐尸還是另有隱情椎椰,我是刑警寧澤,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布沾鳄,位于F島的核電站慨飘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏洞渔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疟赊。 院中可真熱鬧虽惭,春花似錦、人聲如沸泉哈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桥帆。三九已至,卻和暖如春慎皱,著一層夾襖步出監(jiān)牢的瞬間老虫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工茫多, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祈匙,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓天揖,卻偏偏與公主長得像夺欲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子今膊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內(nèi)容

  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,134評論 30 470
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,832評論 25 707
  • C/C++輸入輸出流總結(jié) 前兩天寫C++實習(xí)作業(yè)些阅,突然發(fā)現(xiàn)I/O是那么的陌生,打了好長時間的文件都沒有打開斑唬,今天終...
    LuckTime閱讀 1,721評論 0 6
  • 國外網(wǎng)站上市埋,列舉了人們臨死之前最后悔的20件事。 翻譯此文恕刘,意在自省缤谎。有則改之,無則加勉雪营。希望自己在臨終之時不會成...
    在雨縫中行走閱讀 1,317評論 10 34