Demo——學(xué)生管理系統(tǒng)(涉及泛型、枚舉明垢、鏈表和結(jié)點(diǎn)的說明)

學(xué)生管理系統(tǒng) (梳理)

1.目標(biāo)明確
A.學(xué)生:查詢學(xué)生個(gè)人信息(基本、課程)
B.老師:查詢老師個(gè)人信息
C.管理員:增刪改查

2.數(shù)據(jù)存儲(chǔ):數(shù)據(jù)庫里(文件)
保存哪些數(shù)據(jù):
a.保存所有用戶信息的文件users.txt
b.每個(gè)文件保存用戶具體信息jack.txt merry.txt

3.準(zhǔn)備知識(shí)
枚舉enum
單鏈表
結(jié)點(diǎn)



泛型(void*)

  • void*任意指針類型抵蚊,這個(gè)指針變量可以指向任意的數(shù)據(jù)類型,使用這個(gè)變量的時(shí)候必須轉(zhuǎn)化為對(duì)應(yīng)的類型

枚舉

枚舉是一種公共類型贞绳,同一片內(nèi)存空間可能存在多種值
(讓多個(gè)變量共用一種類型)

宏定義:(沒有聯(lián)系致稀,不能將多個(gè)值當(dāng)做一種類型來看待)
#define teacher 0
#define student 1
#define administrator 2
//默認(rèn)值從零開始熔酷,后邊依次遞增
enum Type{
    teacher;//0
    student;//1
    administrator;//2
}

enum Type tt = teacher;

數(shù)據(jù)結(jié)構(gòu)

線性表——數(shù)組

優(yōu)點(diǎn):查詢方便
缺點(diǎn):增刪效率低

單鏈表

優(yōu)點(diǎn):增刪效率極高
缺點(diǎn):查詢不方便

  • 創(chuàng)建一個(gè)鏈表需要有頭指針和尾指針豺裆,頭指針永遠(yuǎn)不動(dòng)指向第一個(gè)結(jié)點(diǎn)号显,尾指針用來記錄當(dāng)前的尾結(jié)點(diǎn)

結(jié)點(diǎn):存儲(chǔ)數(shù)據(jù)單元(一個(gè)結(jié)點(diǎn)同時(shí)包含數(shù)據(jù)域和指針域,一般為結(jié)構(gòu)體)

1.數(shù)據(jù)域:存儲(chǔ)具體數(shù)據(jù) 90
2.指針域:記錄下一個(gè)結(jié)點(diǎn)或上一個(gè)結(jié)點(diǎn)

鏈表的使用

/*
從終端輸入整數(shù)蔑歌,用鏈表存儲(chǔ)揽碘,輸出所有數(shù)據(jù)
數(shù)據(jù)域:整數(shù)
指針域:*
*/

#include <stdio.h>


//定義一個(gè)類型,結(jié)點(diǎn)類型 
typedef struct score{//struct Score是一種類型 
    int score;//數(shù)據(jù)域 
    struct score* next;//指向下一個(gè)結(jié)點(diǎn)的指針域 
}Score; 
//typedef是類型重定義將Score代替struct Score(單純名字的替換) 

int main(){
    //鏈表頭指針很重要(結(jié)點(diǎn)的第一個(gè)地址)
    //定義一個(gè)頭指針 
    //struct Score *pHeader;類型重定義前定義頭指針的方法
    Score *pHeader = NULL;//Score *pHeader == NULL;類等價(jià)于型重定義前定義頭指針的方法
    //尾指針
    Score *pTail = NULL;
    
    int i = 0;
    while(i < 3){
        //先創(chuàng)建一個(gè)結(jié)構(gòu)體來存儲(chǔ)數(shù)據(jù) 
        Score temp = {};
        printf("請(qǐng)輸入成績(jī):"); 
        scanf("%d",&(temp,score)); 
        
        //判斷是否是第一個(gè)結(jié)點(diǎn)
        if(pHeader ==NULL){
            //頭指針指向第一個(gè)結(jié)點(diǎn)
            pHeader = &temp; 
            //尾指針指向第一個(gè)結(jié)點(diǎn) 
            pTail = &temp;
        } else{
            //讓當(dāng)前的這個(gè)next指向這個(gè)結(jié)點(diǎn) 
            pHeader->next = &temp;
            //尾指針指向最后一個(gè)結(jié)點(diǎn)
             pTail = &temp;
        }
        
        i++;
    }
    
    //輸出
    //臨時(shí)指針指向頭結(jié)點(diǎn)
    Score *pTemp = pHeader;
    while(1){
        //輸出當(dāng)前這個(gè)結(jié)點(diǎn)數(shù)據(jù) 
        printf("%d",pTemp->score);
        
        //指針指向下一個(gè)結(jié)點(diǎn)
        if(pTemp->next == NULL){
            break; 
        }else{
            pTemp = pTemp->next;
            //尾指針 
        } 
    } 

   return 0;
}

由于局部變量的局限性,以及系統(tǒng)分配的地址會(huì)被釋放導(dǎo)致出現(xiàn)了指向不明的情況劫灶,所以應(yīng)該改進(jìn)代碼為手動(dòng)分配內(nèi)存,手動(dòng)釋放本昏,這樣就不會(huì)出現(xiàn)指向不明的擔(dān)心枪汪。

#include <stdio.h>
#include <stdlib.h>

//定義一個(gè)類型,結(jié)點(diǎn)類型 
typedef struct score{//struct Score是一種類型 
    int score;//數(shù)據(jù)域 
    struct score* next;//指向下一個(gè)結(jié)點(diǎn)的指針域 
}Score; 
//typedef是類型重定義將Score代替struct Score(單純名字的替換) 

int main(){
    //鏈表頭指針很重要(結(jié)點(diǎn)的第一個(gè)地址)
    //定義一個(gè)頭指針 
    //struct Score *pHeader;類型重定義前定義頭指針的方法
    Score *pHeader = NULL;//類等價(jià)于宏定義前定義頭指針的方法
    //尾指針
    Score *pTail = NULL;
    
    int i = 0;
    while(i < 3){
        //先創(chuàng)建一個(gè)結(jié)構(gòu)體來存儲(chǔ)數(shù)據(jù) 
        Score *pNode = (Score*)malloc(sizeof(Score));//手動(dòng)分配內(nèi)存空間
        if(pNode == NULL){
            exit(EXIT_FAILURE);
        } 
        //初始化指針量 
        pNode->next = NULL; 
        
        printf("請(qǐng)輸入成績(jī):"); 
        scanf("%d",&(pNode->score)); 
        
        //判斷是否是第一個(gè)結(jié)點(diǎn)
        if(pHeader == NULL){
            //頭指針指向第一個(gè)結(jié)點(diǎn)
            pHeader = pNode; 
            //尾指針指向第一個(gè)結(jié)點(diǎn) 
            pTail = pNode;
        } else{
            //讓當(dāng)前的這個(gè)next指向這個(gè)結(jié)點(diǎn) 
            pTail->next = pNode;
            //尾指針指向最后一個(gè)結(jié)點(diǎn)
             pTail = pNode;
        }
        
        i++;
    }
    
    //輸出
    //臨時(shí)指針指向頭結(jié)點(diǎn)
    Score *pTemp = pHeader;
    while(1){
        //輸出當(dāng)前這個(gè)結(jié)點(diǎn)數(shù)據(jù) 
        printf("%d",pTemp->score);
        
        //指針指向下一個(gè)結(jié)點(diǎn)
        if(pTemp->next == NULL){
            break; 
        }else{
            pTemp = pTemp->next;
            //尾指針 
        } 
    } 
    pTemp = pHeader->next;
    while(1){
        //釋放當(dāng)前結(jié)點(diǎn) 
        free(pHeader); 
        
        //指針指向下一個(gè)結(jié)點(diǎn)
        if(pTemp == NULL){
            break; 
        }else{
            pHeader = pTemp;
            pTemp = pTemp->next;
        } 
    } 

   return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宿稀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祝沸,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件擂送,死亡現(xiàn)場(chǎng)離奇詭異唯欣,居然都是意外死亡嘹吨,警方通過查閱死者的電腦和手機(jī)境氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來问芬,“玉大人,你說我怎么就攤上這事此衅。” “怎么了挡鞍?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵预烙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我扁掸,道長(zhǎng),這世上最難降的妖魔是什么谴分? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮掐隐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虑省。我一直安慰自己匿刮,他們只是感情好探颈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著光羞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纱兑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天潜慎,我揣著相機(jī)與錄音蓖康,去河邊找鬼。 笑死蒜焊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泳梆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼优妙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鼠哥,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朴恳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于颖,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年做入,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竟块。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒋情,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棵癣,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布狈谊,位于F島的核電站刷后,受9級(jí)特大地震影響的畴,放射性物質(zhì)發(fā)生泄漏尝胆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一含衔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贪染,春花似錦、人聲如沸杭隙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铣耘。三九已至洽沟,卻和暖如春蜗细,著一層夾襖步出監(jiān)牢的瞬間裆操,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工昆烁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人善玫。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓密强,卻偏偏與公主長(zhǎng)得像茅郎,于是被迫代替她去往敵國和親或渤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349