


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、學(xué)生選課系統(tǒng)1 需求分析1.1 任務(wù)要求制做學(xué)生選課系統(tǒng),共包括課程信息和學(xué)生信息兩部分。課程信息包括:課程 編碼、課程名稱、適用專業(yè)、課程類型 必修、限選、必選、實踐、學(xué)習(xí))、學(xué) 分、學(xué)時、主講教師等。學(xué)生信息管理,學(xué)生選課管理 學(xué)生選課學(xué)分總數(shù)有一 定范圍),學(xué)生可以對課程進(jìn)行查詢、瀏覽,選完課后可以退選、重選,并可 以按學(xué)號、姓名進(jìn)行查詢和統(tǒng)計。要求: 1.源文件采用多文件的項目結(jié)構(gòu)。2. 數(shù)據(jù)儲存采用文件形式。3. 標(biāo)準(zhǔn)的 C 輸入輸出。4. 功能完善,適當(dāng)?shù)淖⑨尅?. 關(guān)于文件的內(nèi)容要自學(xué)。1.2系統(tǒng)功能需求分析1. 為存儲課程信息,需要定義一個結(jié)構(gòu)體類型 ,成員包括課程編碼、課程名
2、稱、 適用專業(yè)、課程類型、學(xué)分、學(xué)時、主講教師,所選人數(shù)等等,并建立鏈表, 定義該結(jié)構(gòu)體類型的指針,用于指向各節(jié)點;2. 為存儲學(xué)生信息,需要定義一個結(jié)構(gòu)體類型,成員包括學(xué)生編碼、學(xué)生姓 名、所選課程編碼、所選課程學(xué)分和等等,并建立鏈表,定義該結(jié)構(gòu)體類型的 指針,用于指向各節(jié)點;3. 對于課程信息和學(xué)生信息,可以選擇從鍵盤輸入也可選擇從文件中打開原來 存盤的信息,并對他們分別建立添加、刪除、瀏覽、查詢等功能的子函數(shù),完 成相應(yīng)的功能,對程序?qū)崿F(xiàn)模塊化。這其中要用到對鏈表的刪除、插入、增加 等知識。刪除包括課程刪除和學(xué)生信息刪除,刪除時用一結(jié)構(gòu)體指針指向鏈表 的第一個結(jié)點,檢查該節(jié)點的值是否等于
3、輸入的要刪除的課程編號或?qū)W生學(xué) 號,若相等就刪除,不相等則后移指針,直至表尾。插入時也要先找到相應(yīng)結(jié) 點,再添加。查詢功能要設(shè)置按照學(xué)生姓名、學(xué)生編號等多種方式 。4. 學(xué)生選課是要先輸入自己的學(xué)號,如果在已經(jīng)輸入的學(xué)生信息中找不到此學(xué) 號,則提示需要先輸入自己的信息。如找到了自己的學(xué)號,則可以進(jìn)行選課。 在選課之前要先對所有的課程信息進(jìn)行瀏覽。選課有一定的學(xué)分限制,超過相應(yīng)的學(xué)分 < 這里設(shè)置的是10個學(xué)分),系統(tǒng)就會顯示可以選滿的信息。此系統(tǒng) 還可以實現(xiàn)刪除所選課程的功能,設(shè)計思路與選課功能相似。5 為實現(xiàn)存儲功能,需用到文件的相關(guān)函數(shù),打開文件,將添加、修改或刪除 的信息存入磁盤中
4、。6. 實現(xiàn)易于使用者理解和使用的友好界面。2概要設(shè)計2.1系統(tǒng)總體設(shè)計框架對程序進(jìn)行模塊化可以使整個程序清晰明了。對課程信息和學(xué)生信息建立從 文件中輸入、從鍵盤中輸入、添加、刪除、查詢和瀏覽的功能,其各個子函數(shù) 中運用鏈表儲存數(shù)據(jù)。選課管理建立學(xué)生選課、推選、查詢、瀏覽的功能,其 各個子函數(shù)中運用鏈表儲存數(shù)據(jù)。從主函數(shù)開始執(zhí)行,依次調(diào)用各個子函數(shù), 并運用文件的相關(guān)知識將信息進(jìn)行存盤。2.2系統(tǒng)功能模塊圖3詳細(xì)設(shè)計I路學(xué)生選課系統(tǒng)算法設(shè)計思路如下 、函數(shù)錄void zha ng(增加刪除選課退課信息存儲)主要功能模塊的1、課程信. 從鍵盤錄入I定義指向結(jié)構(gòu)體變量的指針;II從頭指針指向的結(jié)構(gòu)
5、體開始依次錄入結(jié)構(gòu)體中所包含的III直到輸入的結(jié)構(gòu) 從文件錄入vvoid zhang1( >)I分別定義指向結(jié)構(gòu)體變量的指針和指向文件的指針;II輸入文件的路徑,打開文件,若沒有找到則有提示;III將文件中的信息依次讀出,最后結(jié)構(gòu)體的指針為N ULL2、課程信息管理 vvoid managementc(>增加課程信息 <void insert(struct course *incourse>I定義指向結(jié)構(gòu)體變量的指針;vvoid拱的編號為 0,錄入結(jié)束II 輸入要增加的課程編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到鏈表的最 后;III輸入課程結(jié)構(gòu)體各個成員的信息,使最后一
6、個結(jié)構(gòu)體指針值為N ULL 刪除課程信息 <void delc(int num1>)I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要增加的課程編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到課程編 號為輸入值的那個結(jié)構(gòu)體;III 將其刪除,其前一個的結(jié)構(gòu)體指針指向其后一個結(jié)構(gòu)體3、學(xué)生信息錄入函數(shù) <void input<) 從鍵盤錄入 <void putin( > )I 定義指向結(jié)構(gòu)體變量的指針;II 從頭指針指向的結(jié)構(gòu)體開始依次錄入結(jié)構(gòu)體中所包含的各個成員;III 直到輸入的結(jié)構(gòu)體成員的編號為 0,錄入結(jié)束 從文件錄入 <void putin2( >
7、)I 分別定義指向結(jié)構(gòu)體變量的指針和指向文件的指針;II 輸入文件的路徑,打開文件,若沒有找到則有提示;III將文件中的信息依次讀出,最后結(jié)構(gòu)體的指針為N ULL4、學(xué)生信息管理 <void managements(>) 增加學(xué)生信息 <void inserts(struct student * incouse>)I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要增加的學(xué)生編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到鏈表的最 后;III輸入學(xué)生結(jié)構(gòu)體各個成員的信息,使最后一個結(jié)構(gòu)體指針值為N ULL 刪除學(xué)生信息 <void dels(int num2>)I 定義指向結(jié)
8、構(gòu)體變量的指針;II 輸入要增加的學(xué)生編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生編 號為輸入值的那個結(jié)構(gòu)體;III 將其刪除,其前一個的結(jié)構(gòu)體指針指向其后一個結(jié)構(gòu)體5、學(xué)生選課管理 <void elective(>)學(xué)生選課 <void elect(>)I 分別定義指向課程和學(xué)生結(jié)構(gòu)體變量的指針;II 輸入要選課的學(xué)生的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生 編號為輸入值的那個結(jié)構(gòu)體,如不存在則顯示要錄入學(xué)生信息;III 輸入要選課程的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到課程編號 為輸入值的那個結(jié)構(gòu)體;IV 在學(xué)生結(jié)構(gòu)體對應(yīng)的所選課程編號中更改信
9、息,所選學(xué)分中加上相應(yīng)分值, 課程結(jié)構(gòu)體所選人數(shù)中相應(yīng)加一學(xué)生退課 <void back(>)I 分別定義指向課程和學(xué)生結(jié)構(gòu)體變量的指針;II 輸入要退課的學(xué)生的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生 編號為輸入值的那個結(jié)構(gòu)體,如不存在則顯示要錄入學(xué)生信息;III 輸入要退課程的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到課程編號 為輸入值的那個結(jié)構(gòu)體;IV 在學(xué)生結(jié)構(gòu)體對應(yīng)的所選課程編號中更改信息,所選學(xué)分中減去相應(yīng)分值, 課程結(jié)構(gòu)體所選人數(shù)中相應(yīng)減一6、信息瀏覽和保存 <void into(> )課程信息瀏覽 <void listc(> )I
10、定義指向結(jié)構(gòu)體變量的指針;II 從頭指針指向的結(jié)構(gòu)體依次向后,將課程結(jié)構(gòu)體各成員的信息一次輸出,直 到最后一個結(jié)構(gòu)體指針的值為 NULL學(xué)生信息瀏覽 <void lists(>)I 定義指向結(jié)構(gòu)體變量的指針;II 從頭指針指向的結(jié)構(gòu)體依次向后,將學(xué)生結(jié)構(gòu)體各成員的信息一次輸出,直 到最后一個結(jié)構(gòu)體指針的值為 NULL 課程信息保存 <void intoc(> )I 定義指向課程結(jié)構(gòu)體變量的指針和指向文件的指針;II 輸入保存路徑,如果沒有保存則有顯示;III 將課程信息寫入文件中;IV 將課程信息進(jìn)行保存,關(guān)閉文件 學(xué)生信息保存 <void intos(>)
11、I 定義指向?qū)W生結(jié)構(gòu)體變量的指針和指向文件的指針;II 輸入保存路徑,如果沒有保存則有顯示;III 將學(xué)生信息寫入文件中;IV 將學(xué)生信息進(jìn)行保存,關(guān)閉文件7、學(xué)生信息查詢 <void store(>)按學(xué)生姓名查詢 <void search2(>)I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要查詢的學(xué)生的姓名,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生 姓名為輸入值的那個結(jié)構(gòu)體;III 將該學(xué)生結(jié)構(gòu)體成員的各信息依次輸出按學(xué)生編號查詢 <void search1(>)I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要查詢的學(xué)生的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到
12、找到學(xué)生 編號為輸入值的那個結(jié)構(gòu)體;III 將該學(xué)生結(jié)構(gòu)體成員的各信息依次輸出3 調(diào)試分析3.1 錯誤顯示及分析a編譯時出現(xiàn)錯誤,回看程序發(fā)現(xiàn)漏掉符號等細(xì)節(jié)錯誤。b. 運行時,界面格式與最初的設(shè)想不一致,通過重新編排,符號的增減及一 進(jìn),最終達(dá)到理想界面。c. 運行時,輸入一個信息后,第二次輸入數(shù)據(jù)時很難將輸入光標(biāo)移到想要的位 子,通過按鍵的摸索,最終了解了輸入要領(lǐng)。d. 對輸入的信息查詢時沒有記錄,發(fā)現(xiàn)文件讀取錯誤。3.2 修改完善1、開始程序執(zhí)行時,各項大的功能每一次只能執(zhí)行一個就自動跳出,為了使程序保持連續(xù)性和更好的實用性,使用了start,goto start,break,sysyem
13、(Clx ”等實現(xiàn)了逐漸免于更功能的循環(huán)。2、對于學(xué)生信息中已選課程的存儲,一直不知如何存儲。后用實型數(shù)組,并進(jìn) 行循環(huán),依次讀入課程的編號,將課程編號進(jìn)行存儲。4 用戶使用說明4.1適用范圍適用于管理者將課程信息和學(xué)生信息錄入到系統(tǒng),并可以將課程信息和學(xué)生 信息進(jìn)行保存,日后如果有需要在對課程和學(xué)生信息進(jìn)行增加可刪除。同時也 適用于學(xué)生在登錄自己的學(xué)號后,瀏覽課程信息選課,進(jìn)行選課和退課操作。 4.2使用方法 首先管理者將現(xiàn)有的課程信息 包括課程編號、課程名稱、使用專業(yè)、課程類 型、學(xué)時、學(xué)分、教師、已選人數(shù) 初始為零)和學(xué)生信息 包括學(xué)生學(xué)號、 姓名、已選學(xué)時、已選課程編號)錄入到系統(tǒng),并
14、將其進(jìn)行文件保存,以便以 后使用。若要修改 增加和刪除)課程信息和學(xué)生信息,需要先從文件中錄入已 存信息,再輸入編號對其查找并進(jìn)行相關(guān)操作。學(xué)生選課需要先輸入自己的學(xué) 號,若沒有此學(xué)號的學(xué)生信息,需先錄入此人信息在進(jìn)行選課和退課。在選課 和退課前,可以先瀏覽課程信息,并記住要選課程的編號,以便選課時需要。 此外還可以學(xué)號和姓名對學(xué)生信息進(jìn)行查詢。5測試結(jié)果55.1運行結(jié)果主界面 P:娛件遠(yuǎn)課豕執(zhí)Debug誰果縈密取貳M W*M H STlUm M M M M M-M-H M K N fcM M M M W W-iMI歡迎使用此系統(tǒng)?覽 息理息理瀏息 SB® 程息主息曙生統(tǒng)信選華系 入
15、費生生息找岀 ->韁£卡囑-S 12345 6 78錄入課程信息課程信息瀏覽S3敎師選課人數(shù)"菁0聿巖I 0王閘 05 5 5分學(xué)£B質(zhì)必必必歡迎使用此系統(tǒng),菜單:* Q:渓件謹(jǐn)課尋焼Debug陡果粟統(tǒng).exe *號12 3 45678S修.王覽 息理息理瀏息 程息生息統(tǒng) ¥1子第W-系 入程入生生息找出 錄 l?f ®課程信息存儲錄入學(xué)生信息學(xué)生信息瀏覽學(xué)生信息存儲學(xué)生選課選課后學(xué)生信息瀏覽回1菜單:Q:7衆(zhòng)件選課豕蜿Wbug誰盪鑒統(tǒng).ex*1二主冃3自3麒木4: a_R存T:1- 程生息回入1234567 B覽 自S理息理瀏息 程皐息
16、屠主統(tǒng) 誥入生生息找出 錄課恚盂于蕩一退學(xué)塞姿蚩it所選課程學(xué)分所選課程編號1歡迎使用此系統(tǒng)?選課后課程信息瀏覽課程信息管理-P:點件謹(jǐn)課盞執(zhí)Deb四諧杲案燒課穆信息管理1.添加課程2則除課桓3.0諳輸入丄3 =j 學(xué)生信息管理學(xué)生信息查找渓件選課盞統(tǒng)Debug誰澡鑒統(tǒng)心*|ipfl.返回王菜單學(xué)生信息査找j 退出系統(tǒng)7附錄7.1課設(shè)小結(jié)通過這次課程設(shè)計,我對 C語言有了更深刻的了解,增強了程序的編寫能力,鞏固了專業(yè)知識,對程序的模塊化觀念也又模糊逐漸變的清晰了。在程序 的運行與調(diào)試過程中出現(xiàn)了很多錯誤,通過反復(fù)地復(fù)習(xí)課本上的相關(guān)知識,不 停地修改與調(diào)試,我終于完成了這段程序。在調(diào)試過程中,我
17、認(rèn)識到了C語言的靈活性與嚴(yán)謹(jǐn)性,同一個功能可以由不同的語句來實現(xiàn),但編寫程序時要特 別注意細(xì)節(jié)方面的問題,因為一個小小的疏忽就能導(dǎo)致整個程序不能運行。當(dāng) 然我也認(rèn)識到了自己的薄弱之處,如對鏈表相關(guān)知識的欠缺,文件運用的不熟 練,在以后的學(xué)習(xí)中我要集中精力、端正態(tài)度,爭取把知識學(xué)得更扎實、更全 面。7.2存在不足1、系統(tǒng)不夠強大,有點脆弱。2、當(dāng)輸入信息 課程信息,學(xué)生信息)后,不能自動保存,需手動保存。 對于以上不足,以后將進(jìn)行改進(jìn),以確保達(dá)到更好。7.2詳細(xì)代碼#i nclude<stdio.h> #include<stdlib.h> #include<stri
18、ng.h> int N1,N2 。struct studentint num2。char name220。int nelenum50 。/所選課程編號int nelen。/所選課程學(xué)分和struct student * next。struct courseint num1。/課程編號char name120。char major20。char type20。int credit。int period。char teacher20。int people。/選此門課程的人數(shù)struct course *next。/結(jié)構(gòu)體指針。struct course * head1。 struct stu
19、dent * head2。 void zhang(>/從鍵盤錄入課程信息struct course *p1,*p2。N1=0 。 p1=p2=(struct course *>malloc(sizeof(struct course>>。printf("課程編號t課程名稱t主修t課程性質(zhì)t學(xué)分t課時t教師n">scanf("%d%s%s%s%d%d%s",&p1->num1,p1->name1,p1->major,p1->type,&p1- >credit,&p1->
20、period,p1->teacher>。p1->people=0。head1=NULL 。while(p1->num1!=0>N1=N1+1。if(N1=1>head1=p1。else p2->next=p1。p2=p1。p1=(struct course * >malloc(sizeof(struct course>>。scanf("%d%s%s%s%d%d%s",&p1->num1,p1->name1,p1->major,p1- >type,&p1->credit,
21、&p1->period,p1->teacher>。p1->people=0。p2->next=NULL 。void zhang1(>/從文件錄入課程信息FILE * fp 。char filepath20 。struct course *p1,*p2。N1=0 。printf(" 請輸入您要讀取的路徑 :"> 。getchar(>。gets(filepath>。if(fp=fopen(filepath,"r">>=NULL>printf("找不到 s 文件!n&qu
22、ot;,filepath>。exit(0>。p1=p2=(struct course*>malloc(sizeof(struct course>>。fscanf(fp,"%d%s%s%s%d%d%s%d",&p1->num1,p1->name1,p1->major,p1- >type,&p1->credit,&p1->period,p1->teacher,&p1->people>。while(!feof(fp>>N1=N1+1。if(N1=1>
23、; head1=p1。elsep2->next=p1。p2=p1。p1=(struct course * >malloc(sizeof(struct course>>。 fscanf(fp,"%d%s%s%s%d%d%s%d",&p1->num1,p1->name1,p1->major,p1- >type,&p1->credit,&p1->period,p1->teacher,&p1->people>。p2->next=NULL 。void load(>
24、/錄入課程信息函數(shù)int i 。printf("ttt 錄入課程信息 n"> 。printf("n1. 從鍵盤錄入 "> 。printf("n2. 從文件錄入 ">。printf("n3. 返回主菜單 n">。printf(" 請選擇 1-3:"> 。 scanf("%d",&i> 。switch(i>case 1: zhang(>。 break。case 2:zhang1(> break。case 3:break
25、。void insert(struct course *incourse>/增/ 加課程信息struct course *p0,*p1,*p2。 p1=head1。p0=incourse。if(head1=NULL>head1=p0。p0->next=NULL 。else while(p0->num1>p1->num1> && (p1->next!=NULL>> p2=p1。p1=p1->next。if(p0->num1<=p1->num1>if(head1=p1>head1=p0。
26、elsep2->next=p0。p0->next=p1。elsep1->next=p0。p0->next=NULL 。N1=N1+1 。void delc(int num1>/刪除課程信息struct course *p1,*p2。 if(head1=NULL>printf("n 無法刪除 !n"> 。 goto end。p1=head1。while(num1!=p1->num1 && p1->next!=NULL>p2=p1。 p1=p1->next。if(num1=p1->num1&
27、gt; if(p1=head1> head1=p1->next。else p2->next=p1->next。printf(" 已刪除 n"> 。N1=N1-1。elseprintf("沒有此課程n">。end:。void managementc(>/課/ 程信息管理函數(shù)struct course * p1。int i,num1 。 printf("ttt 課程信息管理 n"> 。printf("1. 添加課程 n">。printf("2. 刪除課程
28、n">。printf("3. 返回 n"> 。printf(" 請輸入 1-3:n"> 。 scanf("%d",&i> 。switch(i>case 1:p1=(struct course *>malloc(sizeof(struct course>>。printf("課程編號t課程名稱t主修t課程性質(zhì)t學(xué)分t課時t教師 n">。scanf("%d%s%s%s%d%d%s",&p1->num1,p1->
29、name1,p1->major,p1- >type,&p1->credit,&p1->period,p1->teacher>。p1->people=0。 insert(p1>。break。case 2:printf("請輸入您要刪除的課程編號:n">。 scanf("%d",&num1>。delc(num1>。break。case 3:break。void putin(void>/ 從鍵盤錄入學(xué)生信息int i。struct student *p1,*p2。N
30、2=0。p1=p2=(struct student *>malloc(sizeof(struct student>>。printf("學(xué)號 t 姓名 n">。scanf("%d%s",&p1->num2,p1->name2>。p1->nelen=0。for(i=0。 i<20。 i+> p1->nelenumi=0 。head2=NULL 。while(p1->num2!=0>N2=N2+1 。if(N2=1>head2=p1。elsep2->next=p1
31、。p2=p1。p1=(struct student * >malloc(sizeof(struct student>>。scanf("%d%s",&p1->num2,p1->name2>。p1->nelen=0。for(i=0 。 i<20。 i+> p1->nelenumi=0 。p2->next=NULL 。 void putin2(>/從文件錄入學(xué)生信息int i=0 。FILE * fp 。char filepath20。struct student *p1,*p2。N2=0。print
32、f(" 請輸入您要讀取的路徑 :">。getchar(>。gets(filepath>。if(fp=fopen(filepath,"rt">>=NULL>printf("找不到 s 文件!n",filepath>。 exit(0>。p1=p2=(struct student*>malloc(sizeof(struct student>>。 fread(p1,sizeof(struct student>,1,fp>。head2=NULL 。while(!feo
33、f(fp>>i=0 。N2=N2+1 。 if(N2=1>head2=p1。elsep2->next=p1。 p2=p1。p1=(struct student * >malloc(sizeof(struct student>>。 fread(p1,sizeof(struct student>,1,fp>。p2->next=NULL 。void input(>/錄入學(xué)生信息函數(shù)int i。printf("ttt 錄入學(xué)生信息 n">。printf("n1.從鍵盤錄入 n">。pr
34、intf("2. 從文件錄入 n">。printf("3. 返回主菜單 n">。 printf(" 請輸入 1-3:n"> 。 scanf("%d",&i> 。switch(i>case 1:putin(>。 break。case 2:putin2(>。 break。case 3:break。void inserts(struct student * incouse>/增/ 加學(xué)生信息struct student *p0,*p1,*p2。 p1=head2。p
35、0=incouse。if(head2=NULL> head2=p0。 p0->next=NULL 。elsewhile(p0->num2>p1->num2> && (p1->next!=NULL>>p2=p1。 p1=p1->next。if(p0->num2 <= p1->num2>if(head2=p1> head2=p0。else p2->next=p0。 p0->next=p1。elsep1->next=p0。p0->next=NULL 。N2=N2+1。vo
36、id dels(int num2>/刪除學(xué)生信息struct student *p1,*p2。if(head2=NULL>printf("n 無法刪除 n"> 。goto end。p1=head2。while(num2!=p1->num2 && p1->next!=NULL> p2=p1。 p1=p1->next。if(num2=p1->num2>if(p1=head2>head2=p1->next。elsep2->next=p1->next。printf(" 已刪除 n
37、"> 。N2=N2-1。elseprintf(" 沒有此學(xué)生編號 n">end:。/學(xué)/ 生信息管理函數(shù)void managements(>struct student * p1。int i,num2 。 printf("ttt 學(xué)生信息管理 n"> 。printf("1. 添加學(xué)生信息 n">。printf("2. 刪除學(xué)生信息 n">。printf("3. 返回主菜單 n">。 printf(" 請選擇 1-3:n"&g
38、t; 。 scanf("%d",&i> 。switch(i> case 1:p1=(struct student *>malloc(sizeof(struct student>>。 p1->nelen=0。p1->nelenum0=0。 printf("numtnamen"> 。 scanf("%d%s",&p1->num2,p1->name2>。inserts(p1>。break。case 2:printf("請輸入您要刪除的學(xué)生編號:
39、n">。 scanf("%d",&num2>。 dels(num2>。 break。case 3:break。void elect(>/學(xué)生選課struct student * s。 struct course * p。 int a,i,b。printf(" 請輸入您的學(xué)號 :n">。 scanf("%d",&a> 。s=head2。 while(s->num2>!=a&&s->next!=NULL> s=s->next 。 i
40、f(s->num2!=a>printf(" 您的信息不存在,請重新輸入 :n">。 goto end。if(s->nelen>>10>printf(" 您的學(xué)分已滿 ">。goto end。printf(" 請輸入您要選修的課程編號 n">。 scanf("%d",&b> 。for(i=0。 (s->nelenumi>=0。 i+>。 s->nelenumi=b。p=head1。while(p->num1>!=b
41、> p=p->next。for(i=0。 (s->nelenumi>!=0 。 i+>。 s->nelenumi=b。(p->people>+。 (s->nelen>=(s->nelen>+(p->credit>。 (p->people>+。end:。void back(>/學(xué)生退課struct student * p。struct course * p1。int b,i,j,a 。printf(" 請輸入您的學(xué)號 :n">。scanf("%d",
42、&a> 。p=head2。while(p->num2!=a&&p!=NULL> p=p->next 。if(p=NULL>printf(" 您的信息不存在 :n">。elseprintf(" 請輸入您要退選的課程 :n"> 。scanf("%d",&b> 。p1=head1。while(p1->num1!=b> p1=p1->next 。 for(i=0。 p->nelenumi!=b。 i+>。 for(j=i 。 p-&g
43、t;nelenumj!=0。 j+> p->nelenumj=p->nelenumj+1 。p->nelenum-j=0。(p->nelen>=(p->nelen>-(p1->credit>。(p1->people>-。 printf("succeed!n">。void elective(>/學(xué)生選課信息管理int i。printf("ttt 學(xué)生選課信息管理 n">。prin tf("1.選課 n">。prin tf("2.退課
44、 n">。printf("3. 返回主菜單 n">。printf(" 請輸入 1-3:n"> 。scanf("%d",&i> 。switch(i>case 1:elect(>。 break。case 2:back(>。 break。case 3:break。void listc(> / 瀏覽課程信息struct course * p。 p=head1。printf(" 課程編號 課程名稱 主修 課程性質(zhì) 學(xué)分 課時 教師 選 課人數(shù) n"> 。
45、while(p!=NULL>printf("%6d%13s%13s%10s%7d%7d%12s%5dn",p->num1,p->n ame1,p->major,p->type,p->credit,p->period,p->teacher,p->people> p=p->next。void lists(>/瀏覽學(xué)生信息struct student * p。int a。p=head2。printf(" 學(xué)生編號 學(xué)生姓名 所選課程編號 所選課程學(xué)分 n">。 while(p!=NU
46、LL>printf("%6d%13s",p->num2,p->name2>。printf("%6d",p->nelen> 。for(a=0。p->nelenuma!=0&&a<14。a+> printf("%d",p->nelenuma> 。printf("n"> 。p=p->next。void intoc(>/存儲課程信息FILE * fp 。struct course * p。char filepath30。pr
47、intf("輸入路徑:"。getchar(>。gets(filepath>。if(fp=fopen(filepath,"w">>=NULL>無法儲存 !">。exit(0>。p=head1。while(p!=NULL>fprintf(fp,"%d%s%s%s%d%d%s%dn",p->num1,p->name1,p- >major,p->type,p->credit,p->period,p->teacher,p->people&g
48、t;。p=p->next。fclose(fp>。printf("已儲存入 s文件!n",filepath>。void intos(>/存儲學(xué)生信息FILE * fp 。 struct student * p。 char filepath30。printf("請輸入路徑:"。getchar(。 gets(filepath。if(fp=fopen(filepath,"wt"=NULLprintf("n 無法儲存 !"。 exit(0。 p=head2。 while(p!=NULLfwrite(p
49、,sizeof(struct student,1,fp。 p=p-next。fclose(fp 。printf(” 已儲存入 s 文件!n",filepath。void into(/信息存儲函數(shù)int i。printf("ttt 信息存儲 n"。printf("1.課程信息存儲n"。 printf("2. 學(xué)生信息存儲 tn"。 printf("3. 返回主菜單 n"。 printf(" 請輸入 1-3n"。 scanf("%d",&i 。switch(ic
50、ase(1>:intoc(>。 break。 case(2>:intos(>。 break。 case(3>:break。void store(>/信息存儲瀏覽函數(shù)int i 。printf("tt 信息存儲和瀏覽 n">。 printf("1. 課程信息瀏覽 n">。 printf("2. 學(xué)生信息瀏覽 n">。printf("3.信息存儲 n">。 printf("4. 返回主菜單 n">。printf(" 請輸入
51、1-4:n"> 。 scanf("%d",&i> 。switch(i> case(1>:listc(>。 break。 case(2>:lists(>。 break。case(3>:into(>。 break。 case(4>:break。void search1(>/按/ 學(xué)生編號查找學(xué)生信息int a,b。 struct student * p。printf(" 請輸入學(xué)生編號 ">。 scanf("%d",&a>。p=head
52、2。printf(" 學(xué)號 學(xué)生姓名 所選課程編號 所選課程學(xué)分 n"> while(p!=NULL>if(p->num2=a>printf("%6d%13s ",p->num2,p->name2>。for(b=0。p->nelenumb!=O&&b<14 。 b+>printf("%d",p->nelenumb> 。printf("%10dn",p->nelen> 。p=p->next。void search2(>/按/ 學(xué)生姓名查找學(xué)生信息int b。char name20。struct student * p。printf(" 請輸入要查找的學(xué)生姓名 :">。 scanf("%s",name>。p=head2。printf(" 學(xué)號 學(xué)生姓名 所選課程編號 所選課程學(xué)分 n"> while(p!
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZZB 3589-2023 潔凈轉(zhuǎn)子泵標(biāo)準(zhǔn)
- 2025年度礦山新能源利用合作開發(fā)協(xié)議
- 二零二五年度船舶租賃與船舶融資租賃合同
- 二零二五年度金融產(chǎn)品創(chuàng)新增資協(xié)議
- 2025年度酒店品牌授權(quán)及加盟合作協(xié)議
- 二零二五年度有機果園使用權(quán)及品牌授權(quán)合同
- 二零二五美容院轉(zhuǎn)讓合同包含員工培訓(xùn)體系與職業(yè)發(fā)展規(guī)劃
- 2025年度旅游度假區(qū)合租商鋪合作協(xié)議
- 二零二五年度知識產(chǎn)權(quán)標(biāo)準(zhǔn)化與認(rèn)證顧問合同
- 二零二五年度科技園區(qū)出租房承包管理協(xié)議
- GB/T 33589-2017微電網(wǎng)接入電力系統(tǒng)技術(shù)規(guī)定
- 2022年四川省綿陽市中考化學(xué)試卷
- 學(xué)習(xí)-化工單元第十四講萃取
- (完整版)微生物檢驗技術(shù)練習(xí)題(含答案)
- 佛山市內(nèi)戶口遷移申請表
- 《工程制圖完整》課件
- 說課比賽一等獎《醫(yī)用化學(xué)》說課課件
- 常見焊接缺陷以及其處理方法PPT
- 《子宮脫垂護(hù)理查房》
- 關(guān)于對項目管理的獎懲制度
評論
0/150
提交評論