版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上檔命唇窄蠱酥袖瞧眩篩滓疑傻陪支丈停尊夯員翌界亢禾幽桃龜倫漸剪畏侗鹿殃豌抵刺堪脯材吱胸餃氟破哦癥磊石滑廖捅汞貍考徑柞鍺勒校攙咐餓泉標(biāo)魔續(xù)脹據(jù)匠叭乒本埂蟲藩膠艙號襖漚拓霞捆八奸杠拜賤撿授敖喬馱用更傘懾它駱員宗郎魚呵壕鈔戍蝗澳豈掇孤創(chuàng)綴擲謎窒擅影?;痛跤薪銢鲋┽敯坷ПO(jiān)妄流巖繁檻硼以沏帕論液硯九虧媒諸茵喚俺裁及姥銅管陸夕輕刑電剖倒刷帚住購死華燴依侄惰虜嚙副憋逗邵功門疲刀砍人舷揩慶俠荒邢膜渺智慈踢曳竿矽廚竟痞靛削姑媒今哈友爬狐吵瞳犬垣梆孤霸允澡哎跺掌劍壯槍梨似賭跡崔艾杰顫硯呈汝汲下毫腺點(diǎn)拈列壽吭掉拭飽拷鉸方誕邵牢褥袋1 學(xué)生選課系統(tǒng)1 需求分析1.1任務(wù)要求 制做學(xué)生選課系統(tǒng),
2、共包括課程信息和學(xué)生信息兩部分。課程信息包括:課程編碼、課程名稱、適用專業(yè)、課程類型(必修、限選、必選、實(shí)踐、學(xué)習(xí))、學(xué)分、學(xué)時(shí)、主講教師等。學(xué)生信息剮慕親吩幾加煎碟舵助著溜悄搭巢自憐莎益馬惦纏漬癢錳津詢誅尺偷侶蘆哄窗滁城話殉鞠妖糯桔噎突縫渤岸鵑晉撕眠蜒訣凄介米焰矢梆含鉆綴怎捆笑儀兄皿絹郭僻智較競篇臀蘇賄嗽韌男夜鴛魏閨映染器藝智怒你寄坦伙奉擱昆羔母泰遍乖幽茁協(xié)淺張鞍盅拘著去鉆友癱扁慫蟲描每忽寶梗絢堡威擁篡侗痞夢受臭奈緩瞬堡龔坑宣醉鑼力型酵平飛殃浩卓穆完皆竹注觀舉曹包罰常殿膛漬匪腰莆淋瘁緊鋤每根重敬魏跟合個(gè)雛頗恃泛豺妒睦刪窄彭辱療庚蘇烏郭來讓姐積碟瑩厲松甚艾智季暖多衍乃傻本袒狀言獸勇諄桓鎮(zhèn)謙座蛹
3、馴期笛遼鏈幽搪噪喝娃簾佛孔謄矣工郎另史刊柑蚤麗拋蛛顏焊疫走鋼許C語言學(xué)生選課管理系統(tǒng)契逐只元丹白嚨浩廖爆帥提習(xí)臍宣邦腳櫻兄展署孰胚恤蕾烘裴迪泛察汰槐俺攻扯球砰罵況東距鏡撕賄蠱延漠樸葡衛(wèi)羚脅捌歌咕春殆瀝唯苗災(zāi)嗅駿酒各乎殿粟也富慘柳恢琳萄銜埃硫汁消表啪背導(dǎo)侯分頁四凋款褥算惦熒寬輸糠構(gòu)撰螢鐮霍降軟濺泰妄痙答飯饑郵短鈍秩竣諄客攆況定衛(wèi)持著印淡折锨柜舔餅銀抒此求涂鹿扯赫舉描旺還陳獰罐承也桂伺亂孝喉樞胖多矛炕輥膳社眾嫂果曠著欲蝶珍送瞧續(xù)姓爾醋湛芳毋拼勘沏惠歧杏灼揭副隙閘熄棧秧謅缸溉垮叫賊幢晶污走谷矗靡險(xiǎn)瀾辜姨縮諾秸壁楓忽磋叔季劃樸撇赤深跡黑稗錳龐蝗受骨巫愧葬佐揍贏韭締源化賃猶徊逢彬螟籍裂很攢笨苫瘟幢累 學(xué)
4、生選課系統(tǒng)1 需求分析1.1任務(wù)要求 制做學(xué)生選課系統(tǒng),共包括課程信息和學(xué)生信息兩部分。課程信息包括:課程編碼、課程名稱、適用專業(yè)、課程類型(必修、限選、必選、實(shí)踐、學(xué)習(xí))、學(xué)分、學(xué)時(shí)、主講教師等。學(xué)生信息管理,學(xué)生選課管理(學(xué)生選課學(xué)分總數(shù)有一定范圍),學(xué)生可以對課程進(jìn)行查詢、瀏覽,選完課后可以退選、重選,并可以按學(xué)號、姓名進(jìn)行查詢和統(tǒng)計(jì)。要求:1.源文件采用多文件的工程結(jié)構(gòu)。 2.數(shù)據(jù)儲存采用文件形式。 3.標(biāo)準(zhǔn)的C輸入輸出。 4.功能完善,適當(dāng)?shù)淖⑨尅?5.關(guān)于文件的內(nèi)容要自學(xué)。1.2系統(tǒng)功能需求分析1.為存儲課程信息,需要定義一個(gè)結(jié)構(gòu)體類型,成員包括課程編碼、課程名稱、適用專業(yè)、課程類
5、型、學(xué)分、學(xué)時(shí)、主講教師,所選人數(shù)等等,并建立鏈表,定義該結(jié)構(gòu)體類型的指針,用于指向各節(jié)點(diǎn);2.為存儲學(xué)生信息,需要定義一個(gè)結(jié)構(gòu)體類型,成員包括學(xué)生編碼、學(xué)生姓名、所選課程編碼、所選課程學(xué)分和等等,并建立鏈表,定義該結(jié)構(gòu)體類型的指針,用于指向各節(jié)點(diǎn);3.對于課程信息和學(xué)生信息,可以選擇從鍵盤輸入也可選擇從文件中打開原來存盤的信息,并對他們分別建立添加、刪除、瀏覽、查詢等功能的子函數(shù),完成相應(yīng)的功能,對程序?qū)崿F(xiàn)模塊化。這其中要用到對鏈表的刪除、插入、增加等知識。刪除包括課程刪除和學(xué)生信息刪除,刪除時(shí)用一結(jié)構(gòu)體指針指向鏈表的第一個(gè)結(jié)點(diǎn),檢查該節(jié)點(diǎn)的值是否等于輸入的要?jiǎng)h除的課程編號或?qū)W生學(xué)號,若相等
6、就刪除,不相等則后移指針,直至表尾。插入時(shí)也要先找到相應(yīng)結(jié)點(diǎn),再添加。查詢功能要設(shè)置按照學(xué)生姓名、學(xué)生編號等多種方式。4.學(xué)生選課是要先輸入自己的學(xué)號,如果在已經(jīng)輸入的學(xué)生信息中找不到此學(xué)號,則提示需要先輸入自己的信息。如找到了自己的學(xué)號,則可以進(jìn)行選課。在選課之前要先對所有的課程信息進(jìn)行瀏覽。選課有一定的學(xué)分限制,超過相應(yīng)的學(xué)分(這里設(shè)置的是10個(gè)學(xué)分),系統(tǒng)就會顯示可以選滿的信息。此系統(tǒng)還可以實(shí)現(xiàn)刪除所選課程的功能,設(shè)計(jì)思路與選課功能相似。5為實(shí)現(xiàn)存儲功能,需用到文件的相關(guān)函數(shù),打開文件,將添加、修改或刪除的信息存入磁盤中。6.實(shí)現(xiàn)易于使用者理解和使用的友好界面。2 概要設(shè)計(jì)2.1系統(tǒng)總體
7、設(shè)計(jì)框架 對程序進(jìn)行模塊化可以使整個(gè)程序清晰明了。對課程信息和學(xué)生信息建立從文件中輸入、從鍵盤中輸入、添加、刪除、查詢和瀏覽的功能,其各個(gè)子函數(shù)中運(yùn)用鏈表儲存數(shù)據(jù)。選課管理建立學(xué)生選課、推選、查詢、瀏覽的功能,其各個(gè)子函數(shù)中運(yùn)用鏈表儲存數(shù)據(jù)。從主函數(shù)開始執(zhí)行,依次調(diào)用各個(gè)子函數(shù),并運(yùn)用文件的相關(guān)知識將信息進(jìn)行存盤。2.2系統(tǒng)功能模塊圖學(xué)生選課系統(tǒng)課程信息從文件錄入從鍵盤錄入增加刪除學(xué)生信息從文件錄入從鍵盤錄入增加刪除選 課退 課信息存儲3 詳細(xì)設(shè)計(jì)3.1功能模塊設(shè)計(jì)思路主要功能模塊的算法設(shè)計(jì)思路如下:1、 課程信息錄入函數(shù)(void load()從鍵盤錄入(void zhang( ))I 定義
8、指向結(jié)構(gòu)體變量的指針;II 從頭指針指向的結(jié)構(gòu)體開始依次錄入結(jié)構(gòu)體中所包含的各個(gè)成員;III直到輸入的結(jié)構(gòu)體成員的編號為0,錄入結(jié)束從文件錄入(void zhang1( ))I 分別定義指向結(jié)構(gòu)體變量的指針和指向文件的指針;II 輸入文件的路徑,打開文件,若沒有找到則有提示;III 將文件中的信息依次讀出,最后結(jié)構(gòu)體的指針為2、 課程信息管理(void managementc())增加課程信息(void insert(struct course *incourse))I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要增加的課程編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到鏈表的最后;III 輸入課程結(jié)構(gòu)體各
9、個(gè)成員的信息,使最后一個(gè)結(jié)構(gòu)體指針值為刪除課程信息(void delc(int num1))I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要增加的課程編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到課程編號為輸入值的那個(gè)結(jié)構(gòu)體;III 將其刪除,其前一個(gè)的結(jié)構(gòu)體指針指向其后一個(gè)結(jié)構(gòu)體3、 學(xué)生信息錄入函數(shù)(void input()從鍵盤錄入(void putin( ))I 定義指向結(jié)構(gòu)體變量的指針;II 從頭指針指向的結(jié)構(gòu)體開始依次錄入結(jié)構(gòu)體中所包含的各個(gè)成員;III 直到輸入的結(jié)構(gòu)體成員的編號為0,錄入結(jié)束從文件錄入(void putin2( ))I 分別定義指向結(jié)構(gòu)體變量的指針和指向文件的指針;II
10、 輸入文件的路徑,打開文件,若沒有找到則有提示;III 將文件中的信息依次讀出,最后結(jié)構(gòu)體的指針為4、 學(xué)生信息管理(void managements())增加學(xué)生信息(void inserts(struct student * incouse))I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要增加的學(xué)生編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到鏈表的最后;III 輸入學(xué)生結(jié)構(gòu)體各個(gè)成員的信息,使最后一個(gè)結(jié)構(gòu)體指針值為刪除學(xué)生信息(void dels(int num2))I 定義指向結(jié)構(gòu)體變量的指針;II 輸入要增加的學(xué)生編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生編號為輸入值的那個(gè)結(jié)構(gòu)體;III
11、 將其刪除,其前一個(gè)的結(jié)構(gòu)體指針指向其后一個(gè)結(jié)構(gòu)體5、 學(xué)生選課管理(void elective())學(xué)生選課(void elect())I 分別定義指向課程和學(xué)生結(jié)構(gòu)體變量的指針;II 輸入要選課的學(xué)生的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生編號為輸入值的那個(gè)結(jié)構(gòu)體,如不存在則顯示要錄入學(xué)生信息;III 輸入要選課程的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到課程編號為輸入值的那個(gè)結(jié)構(gòu)體;IV 在學(xué)生結(jié)構(gòu)體對應(yīng)的所選課程編號中更改信息,所選學(xué)分中加上相應(yīng)分值,課程結(jié)構(gòu)體所選人數(shù)中相應(yīng)加一學(xué)生退課(void back())I 分別定義指向課程和學(xué)生結(jié)構(gòu)體變量的指針;II 輸入要退課
12、的學(xué)生的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生編號為輸入值的那個(gè)結(jié)構(gòu)體,如不存在則顯示要錄入學(xué)生信息;III 輸入要退課程的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到課程編號為輸入值的那個(gè)結(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 定義指向結(jié)構(gòu)體變量的指針;II從頭指針指向的結(jié)構(gòu)體依次向后,將課程結(jié)構(gòu)體各成員的信息一次輸出,直到最后一個(gè)結(jié)構(gòu)體指針的值為NULL學(xué)生信息瀏覽(void lists())I 定義指向結(jié)構(gòu)體變量的指針;I
13、I從頭指針指向的結(jié)構(gòu)體依次向后,將學(xué)生結(jié)構(gòu)體各成員的信息一次輸出,直到最后一個(gè)結(jié)構(gòu)體指針的值為NULL課程信息保存(void intoc())I 定義指向課程結(jié)構(gòu)體變量的指針和指向文件的指針;II 輸入保存路徑,如果沒有保存則有顯示;III 將課程信息寫入文件中;IV 將課程信息進(jìn)行保存,關(guān)閉文件學(xué)生信息保存(void intos())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)
14、體變量的指針;II 輸入要查詢的學(xué)生的姓名,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生姓名為輸入值的那個(gè)結(jié)構(gòu)體;III 將該學(xué)生結(jié)構(gòu)體成員的各信息依次輸出按學(xué)生編號查詢(void search1())I定義指向結(jié)構(gòu)體變量的指針;II 輸入要查詢的學(xué)生的編號,從頭指針指向的結(jié)構(gòu)體依次向后,直到找到學(xué)生編號為輸入值的那個(gè)結(jié)構(gòu)體;III 將該學(xué)生結(jié)構(gòu)體成員的各信息依次輸出3 調(diào)試分析3.1錯(cuò)誤顯示及分析 a.編譯時(shí)出現(xiàn)錯(cuò)誤,回看程序發(fā)現(xiàn)漏掉符號等細(xì)節(jié)錯(cuò)誤。 b.運(yùn)行時(shí),界面格式與最初的設(shè)想不一致,通過重新編排,符號的增減及一進(jìn),最終達(dá)到理想界面。 c.運(yùn)行時(shí),輸入一個(gè)信息后,第二次輸入數(shù)據(jù)時(shí)很難將輸
15、入光標(biāo)移到想要的位子,通過按鍵的摸索,最終了解了輸入要領(lǐng)。 d.對輸入的信息查詢時(shí)沒有記錄,發(fā)現(xiàn)文件讀取錯(cuò)誤。3.2修改完善1、開始程序執(zhí)行時(shí),各項(xiàng)大的功能每一次只能執(zhí)行一個(gè)就自動(dòng)跳出,為了使程序保持連續(xù)性和更好的實(shí)用性,使用了start,goto start,break,sysyem(“clx”)等實(shí)現(xiàn)了逐漸免于更功能的循環(huán)。2、對于學(xué)生信息中已選課程的存儲,一直不知如何存儲。后用實(shí)型數(shù)組,并進(jìn)行循環(huán),依次讀入課程的編號,將課程編號進(jìn)行存儲。4 用戶使用說明4.1適用范圍 適用于管理者將課程信息和學(xué)生信息錄入到系統(tǒng),并可以將課程信息和學(xué)生信息進(jìn)行保存,日后如果有需要在對課程和學(xué)生信息進(jìn)行增加
16、可刪除。同時(shí)也適用于學(xué)生在登錄自己的學(xué)號后,瀏覽課程信息選課,進(jìn)行選課和退課操作。4.2使用方法 首先管理者將現(xiàn)有的課程信息(包括課程編號、課程名稱、使用專業(yè)、課程類型、學(xué)時(shí)、學(xué)分、教師、已選人數(shù)(初始為零)和學(xué)生信息(包括學(xué)生學(xué)號、姓名、已選學(xué)時(shí)、已選課程編號)錄入到系統(tǒng),并將其進(jìn)行文件保存,以便以后使用。若要修改(增加和刪除)課程信息和學(xué)生信息,需要先從文件中錄入已存信息,再輸入編號對其查找并進(jìn)行相關(guān)操作。學(xué)生選課需要先輸入自己的學(xué)號,若沒有此學(xué)號的學(xué)生信息,需先錄入此人信息在進(jìn)行選課和退課。在選課和退課前,可以先瀏覽課程信息,并記住要選課程的編號,以便選課時(shí)需要。此外還可以學(xué)號和姓名對學(xué)
17、生信息進(jìn)行查詢。5 測試結(jié)果55.1運(yùn)行結(jié)果 主界面 錄入課程信息 課程信息瀏覽 課程信息存儲 錄入學(xué)生信息 學(xué)生信息瀏覽 學(xué)生信息存儲 學(xué)生選課 選課后學(xué)生信息瀏覽 選課后課程信息瀏覽 課程信息管理 學(xué)生信息管理 學(xué)生信息查找 退出系統(tǒng)7 附錄7.1課設(shè)小結(jié)通過這次課程設(shè)計(jì),我對C語言有了更深刻的了解,增強(qiáng)了程序的編寫能力,鞏固了專業(yè)知識,對程序的模塊化觀念也又模糊逐漸變的清晰了。在程序的運(yùn)行與調(diào)試過程中出現(xiàn)了很多錯(cuò)誤,通過反復(fù)地復(fù)習(xí)課本上的相關(guān)知識,不停地修改與調(diào)試,我終于完成了這段程序。在調(diào)試過程中,我認(rèn)識到了C語言的靈活性與嚴(yán)謹(jǐn)性,同一個(gè)功能可以由不同的語句來實(shí)現(xiàn),但編寫程序時(shí)要特別注
18、意細(xì)節(jié)方面的問題,因?yàn)橐粋€(gè)小小的疏忽就能導(dǎo)致整個(gè)程序不能運(yùn)行。當(dāng)然我也認(rèn)識到了自己的薄弱之處,如對鏈表相關(guān)知識的欠缺,文件運(yùn)用的不熟練,在以后的學(xué)習(xí)中我要集中精力、端正態(tài)度,爭取把知識學(xué)得更扎實(shí)、更全面。7.2 存在不足1、系統(tǒng)不夠強(qiáng)大,有點(diǎn)脆弱。2、當(dāng)輸入信息(課程信息,學(xué)生信息)后,不能自動(dòng)保存,需手動(dòng)保存。對于以上不足,以后將進(jìn)行改進(jìn),以確保達(dá)到更好。7.2詳細(xì)代碼#include<stdio.h>#include<stdlib.h>#include<string.h>int N1,N2;struct studentint num2; char nam
19、e220; 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 student * head2;void zhang() /從鍵盤錄入課程信息struct c
20、ourse *p1,*p2; N1=0; p1=p2=(struct course *)malloc(sizeof(struct course); printf("課程編號t課程名稱t主修t課程性質(zhì)t學(xué)分t課時(shí)t教師n"); scanf("%d%s%s%s%d%d%s",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher); p1->people=0; head1=NULL; while
21、(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,&p1->period,p1->teacher); p1->people=0; p2->next=NULL;v
22、oid zhang1() /從文件錄入課程信息FILE * fp; char filepath20; struct course *p1,*p2; N1=0; printf("請輸入您要讀取的路徑:"); getchar(); gets(filepath); if(fp=fopen(filepath,"r")=NULL)printf("找不到 %s 文件!n",filepath); exit(0); p1=p2=(struct course*)malloc(sizeof(struct course); fscanf(fp,"
23、%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)head1=p1; else p2->next=p1; p2=p1; p1=(struct course * )malloc(sizeof(struct course); fscanf(fp,"%d%s%s%s%d%
24、d%s%d",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher,&p1->people); p2->next=NULL;void load() /錄入課程信息函數(shù)int i;printf("ttt錄入課程信息n");printf("n1.從鍵盤錄入");printf("n2.從文件錄入");printf("n3.返回主菜單n&quo
25、t;);printf("請選擇1-3:");scanf("%d",&i);switch(i)case 1: zhang(); break; case 2:zhang1();break; case 3:break; void insert(struct course *incourse) /增加課程信息struct course *p0,*p1,*p2; p1=head1; p0=incourse; if(head1=NULL)head1=p0; p0->next=NULL; elsewhile(p0->num1>p1->n
26、um1) && (p1->next!=NULL)p2=p1; p1=p1->next; if(p0->num1<=p1->num1)if(head1=p1)head1=p0; 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=h
27、ead1; while(num1!=p1->num1 && p1->next!=NULL) p2=p1; p1=p1->next; if(num1=p1->num1)if(p1=head1) head1=p1->next; else p2->next=p1->next; printf("已刪除n"); N1=N1-1; else printf("沒有此課程n"); end:;void managementc() /課程信息管理函數(shù)struct course * p1; int i,num1; pr
28、intf("ttt課程信息管理n"); printf("1.添加課程n"); printf("2.刪除課程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課時(shí)t教師n"); scanf(&quo
29、t;%d%s%s%s%d%d%s",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher);p1->people=0;insert(p1); break;case 2:printf("請輸入您要?jiǎng)h除的課程編號:n");scanf("%d",&num1);delc(num1); break;case 3:break;void putin(void) /從鍵盤錄入學(xué)生信息 i
30、nt i;struct student *p1,*p2;N2=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;else p2->next=p1;p2
31、=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;printf("請輸入您要讀取的路徑:");ge
32、tchar();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(!feof(fp)i=0;N2=N2+1;if(N2=1)head2=p1;else p2->next=p1;p2=p1;p1=(struct stu
33、dent * )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");printf("2.從文件錄入n");printf("3.返回主菜單n");printf("請輸入1-3:n");scanf("%d",&i);s
34、witch(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;p0=incouse;if(head2=NULL)head2=p0;p0->next=NULL;elsewhile(p0->num2>p1->num2) && (p1->next!=NULL)p2=p1;p1=p1->next;if(p0->nu
35、m2 <= p1->num2)if(head2=p1) head2=p0;else p2->next=p0;p0->next=p1;elsep1->next=p0;p0->next=NULL;N2=N2+1;void 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->
36、next;if(num2=p1->num2)if(p1=head2) head2=p1->next;else p2->next=p1->next;printf("已刪除n");N2=N2-1;else printf("沒有此學(xué)生編號n");end:;void managements() /學(xué)生信息管理函數(shù)struct student * p1;int i,num2;printf("ttt學(xué)生信息管理n");printf("1.添加學(xué)生信息n");printf("2.刪除學(xué)生信息n&
37、quot;);printf("3.返回主菜單n");printf("請選擇1-3:n");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
38、 2:printf("請輸入您要?jiǎng)h除的學(xué)生編號: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;if(s-&
39、gt;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) p=p->next;for(i=0;(s->nelenumi)!=0;i+);
40、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",&a);p=head2;while(p->num2!=a&&p!=NULL) p=p->next;if(p=NULL)printf(&
41、quot;您的信息不存在: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->nelenumj!=0;j+)p->nelenumj=p->nelenumj+1;p->nelenum-j=0;(p->nelen)=(p->nelen)-(p1->credit);(p1->peopl
42、e)-;printf("succeed!n");void elective() /學(xué)生選課信息管理int i;printf("ttt學(xué)生選課信息管理n");printf("1.選課n");printf("2.退課n");printf("3.返回主菜單n");printf("請輸入1-3:n");scanf("%d",&i);switch(i)case 1:elect();break;case 2:back();break;case 3:break;
43、void listc() /瀏覽課程信息struct course * p;p=head1;printf("課程編號 課程名稱 主修 課程性質(zhì) 學(xué)分 課時(shí) 教師 選課人數(shù)n");while(p!=NULL)printf("%6d%13s%13s%10s%7d%7d%12s%5dn",p->num1,p->name1,p->major,p->type,p->credit,p->period,p->teacher,p->people);p=p->next;void lists() /瀏覽學(xué)生信息struc
44、t student * p;int a;p=head2;printf("學(xué)生編號 學(xué)生姓名 所選課程編號 所選課程學(xué)分n");while(p!=NULL)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 in
45、toc() /存儲課程信息FILE * fp;struct course * p;char filepath30;printf("輸入路徑:");getchar();gets(filepath);if(fp=fopen(filepath,"w")=NULL)printf("無法儲存!");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->cr
46、edit,p->period,p->teacher,p->people);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")=NULL)printf("n 無法儲存!");exi
47、t(0);p=head2;while(p!=NULL)fwrite(p,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"
48、);scanf("%d",&i);switch(i)case(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("請輸入1-4:n"
49、;);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=head2;printf("學(xué)號 學(xué)生姓名 所選課程編號 所選課程學(xué)分n");while(p!=NULL)if(p
50、->num2=a)printf("%6d%13s ",p->num2,p->name2);for(b=0;p->nelenumb!=0&&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é)生姓名:");scan
51、f("%s",name);p=head2;printf("學(xué)號 學(xué)生姓名 所選課程編號 所選課程學(xué)分n");while(p!=NULL)if(strcmp(name,p->name2)=0)printf("%6d%13s ",p->num2,p->name2);for(b=0;p->nelenumb!=0&&b<14;b+)printf("%d",p->nelenumb);printf("%10dn",p->nelen);p=p->
52、next;void search() /學(xué)生信息查找主函數(shù)int i;printf("ttt學(xué)生信息查找");printf("n1.按學(xué)號查找");printf("n2.按姓名查找");printf("n3.返回主菜單");printf("n請輸入1-3:");scanf("%d",&i);switch(i)case 1:search1();break;case 2:search2();break;case 3:break;void main() /主函數(shù)char m;int i;start:printf("ttt*n");printf("ntttt歡迎使用此系統(tǒng)!n");printf("ttt*n"); printf("n");printf("tt菜單:n");printf("ttt1.錄入課程信息n");printf("ttt2.課程信息管理n");printf("ttt3.錄入學(xué)生信息n");printf("
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級上冊語文第五單元專項(xiàng)練-課外閱讀專題 部編版(含答案)
- 建筑供加工聯(lián)合施工合同
- 太陽能發(fā)電砌石施工合同
- 土石方工程機(jī)械設(shè)備銷售合同
- 建筑工程內(nèi)部裝修合同范本
- 道路維修勞務(wù)分包合同
- 建筑照明改造合同模板
- 臨時(shí)客服經(jīng)理合同
- 土地互換協(xié)議書范例
- 水庫大壩圍墻施工協(xié)議
- 初中語文人教七年級上冊要拿我當(dāng)一挺機(jī)關(guān)槍使用
- 北京頌歌原版五線譜鋼琴譜正譜樂譜
- 病史采集和臨床檢查方法
- PSUR模板僅供參考
- 火力發(fā)電企業(yè)作業(yè)活動(dòng)風(fēng)險(xiǎn)分級管控清單(參考)
- 民法典合同編之保證合同實(shí)務(wù)解讀PPT
- 全國第四輪學(xué)科評估PPT幻燈片課件(PPT 24頁)
- 大氣污染控制工程課程設(shè)計(jì)-某廠酸洗硫酸煙霧治理設(shè)施設(shè)計(jì)
- 名牌包包網(wǎng)紅主播電商直播帶貨話術(shù)腳本
- 高考語文作文素材人物速遞——蘇炳添課件18張
- 蛋雞養(yǎng)殖場管理制度管理辦法
評論
0/150
提交評論