版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院課程設(shè)計(jì)成績單課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)姓名xxx性別x學(xué)號(hào)xxx班級(jí)xxx班綜合成績成績等級(jí)程序運(yùn)行情況 (占總成績20%)能正確運(yùn)行(20 分)口基本能止確運(yùn)行(15 分)口能運(yùn)行但結(jié)果不完善(10 分)程序功能的完善程 度(占總成績10%)口完善(10 分)口基本完善 (8分)不完善 (5分)程序結(jié)構(gòu)的合理性 (占總成績10%)口合理(10 分)口基本合理 (8分)口/、太合理 (5分)對(duì)問題的答辯情況 (占總成績40%)概念正確有創(chuàng)新 口能正確回答所有問題(40 分)(35 分)部分問題回答概念不清晰(20 分)口基本能正確回答 (30 分)學(xué)生的工作態(tài)度與 獨(dú)立工
2、作能力(占總成績10%)工作態(tài)度認(rèn)真能獨(dú)立完成任務(wù)工作態(tài)度認(rèn)真但獨(dú)立性較差(10 分)(8 分)工作態(tài)度基本認(rèn)真但缺乏獨(dú)立性(5分)設(shè)計(jì)報(bào)告的規(guī)范性 (占總成績10%)符合規(guī)范 (10 分)口基本符合規(guī)范 (8分)匚規(guī)范性較差 (5分)優(yōu)秀:90分100分 良好:80分89分 中等:7079分 及格:6069分 不及格0分59分武漢科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院制表目錄引言 3一、問題描述二、需求分析三、詳細(xì)設(shè)計(jì)四、所遇到的問題和分析解決五、系統(tǒng)特色及關(guān)鍵技術(shù)六、結(jié)論及心得體會(huì)七、附錄(源代碼) 引言通過本課程設(shè)計(jì), 使自己更加系統(tǒng)地理解和掌握數(shù)據(jù)結(jié)構(gòu)的基本概念; 能自如地根據(jù)實(shí)際要求,設(shè)計(jì)相應(yīng)
3、的數(shù)據(jù)結(jié)構(gòu),并運(yùn)用 C或C+語言實(shí)現(xiàn)所設(shè)計(jì)的算法,編寫較大型的程序,分析和解決實(shí)際應(yīng)用問題,進(jìn)一步加深、鞏固所學(xué)專業(yè)課程的基本理論知識(shí), 理論聯(lián)系實(shí)際, 進(jìn)一步培養(yǎng)自己綜合分析問題和解決問題的能力。掌握C語言或C+語言獨(dú)立的編寫、調(diào)試應(yīng)用程序和進(jìn)行其它相關(guān)設(shè)計(jì)的技能。此項(xiàng)目主要是考察我們對(duì)結(jié)構(gòu)體、數(shù)組、文件等具體操作,以及對(duì) C 語言語法的掌握,所以做成此項(xiàng)目要求比較高的設(shè)計(jì)要求,對(duì)整體有很熟悉的概括,同時(shí)調(diào)試過程也是很重要的, 對(duì)程序界面的要求也比較高, 要設(shè)計(jì)的合理同時(shí)也要美觀一點(diǎn), 能夠人性化的描述清楚你的各個(gè)功能, 一目了然, 對(duì)其他用戶使用本程序簡單易懂,這才能成本程序或本系統(tǒng)是成功
4、的。對(duì)于學(xué)生成績管理系統(tǒng), 此項(xiàng)目每年都有學(xué)生去做, 但是能夠在其他項(xiàng)目中脫穎而出, 還要有自己的設(shè)計(jì)特色, 用簡單的語言詳細(xì)描述系統(tǒng)的功能, 這才是關(guān)鍵。這個(gè)設(shè)計(jì)能夠練習(xí)我們的理解和運(yùn)用結(jié)構(gòu)化程序設(shè)計(jì)的思想和方法, 掌握開發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法, 學(xué)會(huì)調(diào)試一個(gè)比較長的程序的基本方法, 同時(shí)掌握書寫程序設(shè)計(jì)開發(fā)文檔的能力。問題描述1、課程設(shè)計(jì)應(yīng)完成的工作( 1 )編寫算法( 2 )算法測(cè)試,并有具體的測(cè)試結(jié)果和結(jié)果分析( 3 )撰寫課程報(bào)告,內(nèi)容包括:封面目錄課程設(shè)計(jì)報(bào)告正文使用說明參考文獻(xiàn)2、總體設(shè)計(jì)工作(包含幾大功能模塊)1. 顯 示 本 學(xué) 期 考 核 的 7 門 科 目 信 息
5、以 供 學(xué) 生 選 課 ;2. 輸入學(xué)生基本信 息并顯 示;3. 輸入學(xué)生的選課 信息;4. 查 找 某 學(xué) 生 的 信 息 及 選 修 科 目 的 信 息;5. 修改某學(xué)生的信息;6. 增加一個(gè)學(xué)生的記錄;7. 刪除某個(gè)學(xué)生的記錄;8. 按 學(xué) 號(hào) 降 序 排 序, 依 次 輸 出 ;9. 將學(xué)生的信息存儲(chǔ)入文 件。二、 需求分析1、系統(tǒng)描述該系統(tǒng)實(shí)現(xiàn)對(duì)若干個(gè)大學(xué)生的學(xué)習(xí)成績進(jìn)行管理。至少包括以下信息:結(jié)構(gòu)體:學(xué)生,選修科目,選修信息學(xué)生: 學(xué)號(hào),姓名,性別,年齡,所屬院系選修科目:科目編號(hào),科目名稱,科目學(xué)分選修信息:選修該科目者學(xué)號(hào),科目編號(hào),科目成績2、功能要求1使用中文菜單,界面設(shè)計(jì)
6、和用戶輸入輸出要人性化些;2 . 將學(xué)生信息保存在文本文檔中, 具體對(duì)學(xué)生信息進(jìn)行插入刪除查詢操作時(shí), 將保存在文本文檔中的學(xué)生信息提取出來,保存在自己定義的數(shù)據(jù)結(jié)構(gòu)中,然后再對(duì)該數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,所有操作完成,或者在相應(yīng)的命令后,再將學(xué)生信息保存到文本文檔中;3 .具有數(shù)據(jù)輸入功能,輸入的數(shù)據(jù)能最終保存在文件中;4 .具有數(shù)據(jù)刪除功能,能最終從文件中刪除;5 .排序功能,根據(jù)自己設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)排序算法;6 .具有多種查詢(如按學(xué)號(hào)查詢、按姓名查詢、按成績查詢等)及輸出功能;7 .學(xué)生信息的修改(比如修改學(xué)生姓名,修改學(xué)生某門課程的成績)。考查點(diǎn):插入時(shí)注意學(xué)號(hào)的處理,可以不填嗎 ,是否
7、重復(fù),其他數(shù)據(jù)是否可以亂填,如何控制;刪除時(shí)一要防止誤操作,二要考慮該生的選課信息,如何處理 ;修改時(shí)同樣要考慮各數(shù)據(jù)項(xiàng)的性質(zhì);對(duì)選修表進(jìn)行插入、刪除、修改操作;查詢要求可以實(shí)現(xiàn)多條件查詢。有3個(gè)文件:Student.txt中的內(nèi)容:SnoSname Ssex Sage SdeptCourse.txt中的內(nèi)容:CnoCname Ccredit1 英語42 數(shù)學(xué)23 信息系統(tǒng)44 操作系統(tǒng)35 數(shù)據(jù)結(jié)構(gòu)46 數(shù)據(jù)處理27 C/C+4SC.txt中的內(nèi)容:SnoCno Grade3、開發(fā)環(huán)境Visual C+不僅僅是是一個(gè) C+編譯器,而是一個(gè)基于Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境IDE,
8、 這種環(huán)境開發(fā)出來的軟件穩(wěn)定性好、可移植性強(qiáng),可以編制各種各樣的Windows應(yīng)用程序。三、詳細(xì)設(shè)計(jì)2、界面設(shè)1主界面:查 找學(xué) 生刪 除 學(xué) 生信息存入后即可修入相關(guān)的彳亍操退 出 本 系 統(tǒng)如:選擇1 ,即可顯示本學(xué)期考核的 7門科目信息)在本界面里用戶可以輸入學(xué)生相關(guān)的信息數(shù)據(jù),按照提示進(jìn)行操作即可,例如 所有操作均有提示語,比較人性化的管理,易懂,簡單。3、大概設(shè)計(jì)模塊(1)先編入系統(tǒng)所需的庫函數(shù),從而使程序可運(yùn)行#include<stdio.h>#include<stdlib.h>#include<string.h>#include <con
9、io.h> 文件和標(biāo)準(zhǔn)控制臺(tái)的輸入輸出(2) Main()函數(shù)的設(shè)計(jì)在main()函數(shù)中主要運(yùn)用 do-while循環(huán)語句和switch()-case選擇判斷語句來調(diào)用相關(guān) 功能模塊。系統(tǒng)的運(yùn)行是在一個(gè)永真的循環(huán)里進(jìn)行的,只有在主界面并選擇“退出”時(shí),才 會(huì)跳出永真循環(huán),并退出程序。(3)主界面的設(shè)計(jì)在主界面中包括“顯示本學(xué)期考核的7門科目信息以供學(xué)生選科目輸入學(xué)生基本信息并顯示 輸入學(xué)生的選課信息查找某學(xué)生的信息及選修科目的信息修改某學(xué)生的信息增加一個(gè)學(xué)生的記錄刪除某學(xué)生的記錄按數(shù)據(jù)結(jié)構(gòu)降序(冒泡)排序?qū)W(xué)生的信息存儲(chǔ)入文件退出”等全部的功能,之所以設(shè)計(jì)這麼一個(gè)主界面,一是因?yàn)槟苁褂脩?/p>
10、對(duì)程序操作的流程更加清晰簡明,二是保證了用戶同時(shí)只能對(duì)一個(gè)文件進(jìn)行操作系統(tǒng)的要求,保證了系統(tǒng)不會(huì)打開文件紊亂或者出現(xiàn)致命的錯(cuò)誤。每個(gè)函數(shù)體如下:Int main();主函數(shù)void save();選修課程文件存儲(chǔ)void load();選修課程文件輸出void input(struct student *headp);學(xué)生信息的輸入void xuxiuinput(struct student *headp,struct StuCourse SC);/ 選修信息的輸入void find(struct student *headp,struct StuCourse SC口); 查找學(xué)生的信息及選修
11、信息int modify(struct student *headp,struct StuCourse SC口); 修改學(xué)生信息及選修信息void insert(struct student *headp,struct StuCourse SC);/ 增加 個(gè)學(xué)生的信息void shanchu(struct student *headp,struct StuCourse SC);/ 刪除 個(gè)學(xué)生的信息void sort(struct student *headp);學(xué)生信息按學(xué)號(hào)大小排序void filesave(struct student *headp,struct StuCourse S
12、C);/ 學(xué)生信息及選修信息錄入文件void fileload(struct student *headp,struct StuCourse SC口); 文件信息輸出4、詳細(xì)設(shè)計(jì)思想(1)確定語言算法由于之前都沒有做過類似的設(shè)計(jì),所以一時(shí)間不能夠確定到底使用何種語言來設(shè)計(jì)本系統(tǒng),所以在網(wǎng)上看了一些其他人設(shè)計(jì)的程序,鏈表的、數(shù)組的,C+的,各種各樣的,也不知如何選擇,但是仔細(xì)地看了其中的設(shè)計(jì)思想,最終還是用C和鏈表的來做,一是覺得本人對(duì)指針數(shù)組掌握的不是很熟練,那么在設(shè)計(jì)過程中容易產(chǎn)生不能理解的錯(cuò)誤,耽誤時(shí)間,二是想運(yùn)用 C,可以鞏固一下所學(xué)的數(shù)據(jù)結(jié)構(gòu)的知識(shí),之前做實(shí)驗(yàn)的時(shí)候一直用C+來做,都沒
13、怎么用所學(xué)的知識(shí),這時(shí)候想練練。就這樣確定了整體的結(jié)構(gòu)算法。(2)確定程序主要功能模塊這個(gè)就比較簡單了,主要是根據(jù)系統(tǒng)設(shè)計(jì)的說明及要求來設(shè)計(jì),從而設(shè)計(jì)了十大功 能模塊,有文件操作,有系統(tǒng)維護(hù)功能,排序和統(tǒng)計(jì)功能,有輸入輸出等基本功能,比較人 性化,添加了較多的提示語。這個(gè)程序的主要功能時(shí)輸入學(xué)生的學(xué)號(hào),姓名,學(xué)期和三科成績來對(duì)其進(jìn)行存儲(chǔ),在存儲(chǔ)后可以對(duì)學(xué)生的成績按學(xué)號(hào)及學(xué)期或姓名及學(xué)期來進(jìn)行查詢,同時(shí)輸出此同學(xué)的平均分及總分,之后可以對(duì)某個(gè)同學(xué)的成績進(jìn)行各種操作,例如修改,刪除等,同時(shí)還可以對(duì)學(xué)生們的成績按照總分或單科成績排序,在整個(gè)過程中所做的操作都會(huì)保存到"student.txt
14、”文件中并顯示。(3)系統(tǒng)結(jié)構(gòu)體的設(shè)計(jì)long Snum;學(xué)號(hào)char Sname20;/ 姓名char Ssex10;/性另1Jint Sage;年齡char Sdept10;/ 所屬院系struct student *next;/ 指針;選修struct StuCourse/ 結(jié)I 杓體學(xué)long Sno;選修考學(xué)號(hào)int SCno;/ 選,多科目編號(hào)double Grade;/述修科目成績);(4)各功能模塊的設(shè)計(jì)* 主函數(shù)模塊用函數(shù)int main() 來實(shí)現(xiàn)主要是來顯示主菜單, 使用戶選擇操作。首先定義一個(gè)指針數(shù)組 (全局使用)StuCourse SCSIZE (SIZE=1000)
15、,;在此處SIZE是指數(shù)組大小,之前有定義的,在這里應(yīng)用了 do-while 和switch-case 語句來進(jìn)行選擇,是個(gè)比較簡單實(shí)現(xiàn)的模塊。最后若選擇“0”則是退出永真循環(huán)。*選修課程的文件輸入(出)模塊用函數(shù) void save();與 void load();來實(shí)現(xiàn)主要用來將已定義的結(jié)構(gòu)體數(shù)組Course存儲(chǔ)入文件Course.txt ,以及將其中數(shù)據(jù)從文件Course.txt中輸入。void save()/ 錄入文件FILE *fp;int i;if(fp=fopen("Course.txt","w")尸NULL) printf("
16、無法打開此文件! n");exit(0);for(i=0;i<7;i+)if(fwrite(&Coi,sizeof(struct Course),1,fp)!=1)printf(" 無法打開文件Course.txt!n");fclose(fp);void load()/ 導(dǎo)出文件FILE *fp;int i;if(fp=fopen("Course.txt","r")=NULL)printf(" 無法打開文件Course.txt!n");exit(0);for(i=0;i<7;i+)fr
17、ead(&Coi,sizeof(struct Course),1,fp);printf("%4d%10s%8dn",Coi.Cno,Coi.Cname,Coi.Credit);fclose(fp);* 輸入學(xué)生記錄模塊用函數(shù) void input(struct student *headp);來實(shí)現(xiàn)主要功能用來對(duì)學(xué)生的信息進(jìn)行收集和輸入。首先會(huì)跳出主菜單,選擇”2 ”,進(jìn)入輸入模塊輸入所需學(xué)生個(gè)數(shù)的學(xué)生信息,比如學(xué)號(hào),姓名,性別,年齡及所屬院系(以學(xué)號(hào)為0 結(jié)束輸入新的學(xué)生信息) 等。 輸完之后會(huì)自動(dòng)跳出主菜單, 根據(jù)主菜單來在此基礎(chǔ)上進(jìn)行操作。期間會(huì)有一些提示語,
18、按此操作即可。根據(jù)if 和 for 語句來判定期間是否有重復(fù)學(xué)號(hào)輸入,在本操作中,允許有重復(fù)學(xué)生姓名出現(xiàn)。在此模塊中,同時(shí)也用到了一個(gè)控制變量a,它是用來判定的條件變量。之后返回主菜單。* 輸入選修信息模塊用函數(shù) void xuxiuinput(struct student *headp,struct StuCourse SC)來實(shí)現(xiàn)主要功能用于選修信息的錄入。首先會(huì)跳出主菜單,選擇“3“,進(jìn)入輸入模塊輸入所需選修科目的個(gè)數(shù), 接著輸入選修該科目者的學(xué)號(hào)及科目編號(hào)及成績。 根據(jù) for-while 語句來控制,期間會(huì)有提示語。在本操作中,不允許學(xué)號(hào)的重復(fù),科目編號(hào)控制在1-7 。* 查找學(xué)生及
19、選修信息模塊用函數(shù) void find(struct student *headp,struct StuCourse SC)實(shí)現(xiàn)主要功能用于學(xué)生基本信息的查找以及選修信息的查找。首先會(huì)跳出主菜單,選擇” 4 , 接著選擇查找的方式( 1. 學(xué)號(hào)查找 2. 姓名查找),輸入學(xué)號(hào)(姓名),便會(huì)顯示擁有該學(xué)號(hào)(姓名)學(xué)生的基本信息;對(duì)于選修信息也是同樣。該模塊運(yùn)用了 for-while語句,對(duì)于學(xué)號(hào),科目編號(hào)等進(jìn)行控制,避免重復(fù)等情況出現(xiàn)。* * 修改學(xué)生及選修信息模塊用函數(shù) int modify(struct student *headp,struct StuCourse SC)實(shí)現(xiàn)主要功能是修改
20、學(xué)生的基本信息以及選修科目的信息。首先跳出主菜單,選擇 5 。輸入你想要修改的學(xué)生的學(xué)號(hào), 接著會(huì)彈出一個(gè)提示語" 請(qǐng)輸入你想修改的學(xué)生信息的標(biāo)號(hào): 1. 學(xué)號(hào) 2. 姓名 3.性別 4. 年齡 5. 所屬院系 6. 選修科目信息 : " ,選擇想要修改的選項(xiàng),例如 1,接著輸入新的學(xué)號(hào),修改成功。在本模塊中運(yùn)用了 if-else 語句及 while 語句來控制變量,只有正確輸入才會(huì)彈出循環(huán),正確顯示。* * 插入學(xué)生記錄及選修信息模塊用函數(shù) void insert(struct student *headp,struct StuCourse SC) 實(shí)現(xiàn)主要功能是插入一個(gè)
21、新的學(xué)生記錄,并將該學(xué)生的選修信息錄入到 StuCourse 中。首先彈出主菜單,選擇6 ,輸入新增加的學(xué)生的學(xué)號(hào),接著輸入該學(xué)生的選修信息,然后再輸入學(xué)生的姓名, 年齡等信息。 在本模塊中同樣使用 while 語句以及 if-else 語句來控制學(xué)號(hào)等的輸入 。* * 刪除學(xué)生記錄以及選修信息模塊用函數(shù) void shanchu(struct student *headp,struct StuCourse SC)來實(shí)現(xiàn)主要功能是刪除一個(gè)學(xué)生的記錄并刪除其中 StuCourse 中的記錄。首先有個(gè)選擇的操作,之后會(huì)有判斷語句,根據(jù)所輸入的學(xué)號(hào),來顯示刪除前的信息記錄,添加for 循環(huán)語句,循環(huán)
22、把后一位的信息提前一位,整體數(shù)量減一,來進(jìn)行全局變量的修改,之后再把修改過后的信息記錄保存到文件中去。在現(xiàn)實(shí)中會(huì)有由于某些原因而不在學(xué)校的同學(xué)的記錄,這時(shí)候就要對(duì)其記錄進(jìn)行刪除操作,這樣可以使系統(tǒng)及時(shí)更新并得到優(yōu)化。*按數(shù)據(jù)結(jié)構(gòu)學(xué)號(hào)(冒泡)降序排序模塊用函數(shù) void sort(struct student *headp)來實(shí)現(xiàn)主要功能時(shí)是用來對(duì)學(xué)生的記錄來按學(xué)號(hào)大小進(jìn)行排序。這樣方便對(duì)學(xué)生有個(gè)大致的了解。本排序使用冒泡排序。它有兩個(gè)優(yōu)點(diǎn):一是“編程復(fù)雜度”很低,很容易寫出代碼; 二是具有穩(wěn)定性,這里的穩(wěn)定性是指原序列中相同兩元素的相對(duì)順序仍然保持到排序后的序 列。冒泡排序時(shí)進(jìn)過 n-1趟子排
23、序完成的,第i趟子排序從第1個(gè)數(shù)至第n+1個(gè)數(shù),若第 個(gè)數(shù)比后一個(gè)數(shù)大(則升序,小則降序。本程序一律采用降序)則交換兩數(shù)。本程序中冒泡 排序代碼如下:for(p1=*headp,i=0;i<count-1;i+,p1=p1->next)for(p2=p1->next,j=i+1;j<count;j+,p2=p2->next)if(p1->Snum<p2->Snum)num=p2->Snum;p2->Snum=p1->Snum;p1->Snum=num;strcpy(name,p2->Sname);strcpy(p2-
24、>Sname,p1->Sname);strcpy(p1->Sname,name);strcpy(sex,p2->Ssex);strcpy(p2->Ssex,p1->Ssex);strcpy(p1->Ssex,sex);age=p2->Sage;p2->Sage=p1->Sage;p1->Sage=age;strcpy(dept,p2->Sdept);strcpy(p2->Sdept,p1->Sdept);strcpy(p1->Sdept,dept);排序前:排序后:* 將學(xué)生及選修信息存入文件并顯示模塊用
25、函數(shù) void filesave(struct student *headp,struct StuCourse SC)及 voidfileload(struct student *headp,struct StuCourse SC) 實(shí)現(xiàn)主要功能是將之前輸入的學(xué)生信息及選修科目信息存儲(chǔ)入文件并從文件中導(dǎo)出顯示。首先本模塊中有2個(gè)文件指針 FILE *fp1,*fp2 ,分別指向 Student.txt 文件與 StuCourse.txt文件。此時(shí)會(huì)有提示語" 請(qǐng)確認(rèn)是否將數(shù)據(jù)存儲(chǔ)進(jìn)文件: 1. 是 2. 否: " ,選擇 1 ,將信息存入。* 以上就是本程序的詳細(xì)設(shè)計(jì)及基本
26、思想 *四、所遇到的問題和分析解決1、 存在的不足本學(xué)生成績管理系統(tǒng)由九大模塊組成,每個(gè)模塊相互聯(lián)系又相互獨(dú)立。這個(gè)學(xué)生成績管理系統(tǒng)存在著很多不足之處, 由于自己本身編程能力的問題, 這個(gè)系統(tǒng)可以實(shí)現(xiàn)的功能非常有限。 只能實(shí)現(xiàn)學(xué)生管理系統(tǒng)最基本的功能, 可以進(jìn)行簡單的輸入、輸出學(xué)生資料,查詢和修改學(xué)生信息, 能直接從文件中讀入數(shù)據(jù),能對(duì)系統(tǒng)所作的修改、 操作進(jìn)行保存等。而且在每個(gè)模塊也有不足的地方, 比如在輸入學(xué)生資料時(shí), 對(duì)有些信息項(xiàng)沒有嚴(yán)格的規(guī)定, 可以輸入任何的字符。這有待以后努力,更詳盡的實(shí)現(xiàn)模塊的功能。2、 do-while 語句的位置問題在修改學(xué)生記錄此模塊中, 若循環(huán)語句的位置不
27、對(duì)那么這個(gè)循環(huán)就會(huì)自動(dòng)跳出, 或變?yōu)閬y碼, 不能實(shí)現(xiàn)原有的功能。 所以要想清楚到底是在哪安放, 按照邏輯思路找到相應(yīng)的語句正確添加就行了。3、 細(xì)節(jié)方面其實(shí)在有些細(xì)節(jié)方面還是要特別注意啊,比如分號(hào)的添加,<<與>> 的方向問題,函數(shù)的返回值等問題, 雖然容易改掉, 但是很容易養(yǎng)成不好的習(xí)慣, 而且還會(huì)浪費(fèi)時(shí)間, 所以在一開始寫的時(shí)候就要很仔細(xì),這樣才能保證程序編的精細(xì),同時(shí)若出現(xiàn)很多這樣的錯(cuò)誤的話,在編寫程序的時(shí)候也會(huì)心里煩的,所以在編程的時(shí)候要認(rèn)真仔細(xì)。4、 文件的寫入與讀出剛開始時(shí)對(duì)文件的操作不是很明白,一直不能很好的操作文件,直到最后快要驗(yàn)收的時(shí)候,仍舊出現(xiàn)了嚴(yán)重
28、的問題,就是對(duì)已經(jīng)存在的文件讀取問題,通過"讀取文件并輸出學(xué)生信息 " ,將數(shù)據(jù)從文件中讀取,但是不能夠正常的讀出,最后把讀文件的操作語句進(jìn)行仔細(xì)檢查后,發(fā)現(xiàn)語句的順序有點(diǎn)問題,把fscanf()語句進(jìn)行再修改后就能夠正常的讀取文件了。5、 內(nèi)存的分配問題對(duì)于初學(xué)者的話對(duì)內(nèi)存的分配和釋放問題是比較抽象的和模糊的問題, 在排序是之前就出現(xiàn)了交換數(shù)據(jù)困難的問題,以及內(nèi)存分配空間繁瑣釋放空間不及時(shí)的問題,造成空間的浪費(fèi),使得程序運(yùn)行時(shí)效率較低, 因此最后采用了順序存儲(chǔ)記錄的方式, 這就能改變前面所出現(xiàn)的問題。6、 較小的問題方面其余的就沒什么比較大的問題了,基本上只要細(xì)心一點(diǎn)的話
29、就可以正確調(diào)試了。5、 系統(tǒng)特色及關(guān)鍵技術(shù)其實(shí)在本程序的設(shè)計(jì)過程當(dāng)中,沒有很吸引人的關(guān)鍵技術(shù),因?yàn)楸救说?C 語言或 C+語言都不是學(xué)的很好, 所以當(dāng)初設(shè)計(jì)的時(shí)候就只是想把功能都實(shí)現(xiàn)就好了, 盡可能的把所要求的功能都編進(jìn)程序, 這樣就覺得很滿足了。 所以都是設(shè)計(jì)的比較簡單易懂的語言, 這樣自本程序要說有什么值得說所以就沒有時(shí)間去細(xì)細(xì)地去設(shè)計(jì)自己的程序。的,那就只有人性化這點(diǎn)了,在設(shè)計(jì)成學(xué)的時(shí)候, 因?yàn)樽约号屡炝耍?所以添加了很詳盡的提示,這樣在編程的過程中或調(diào)試的時(shí)候都能夠比較快的運(yùn)行。還有就是盡可能的應(yīng)用了do-while 語句和 switch-case 語句, 這兩個(gè)語句在之前不是很常用
30、, 所以在這個(gè)程序中試煉了一下, 雖然在編寫的過程中總是出錯(cuò),但還是成功的用好了, 也是程序有條理一些。我也知道這些東西別人可能比我弄得還要好, 但是我在我所學(xué)的知識(shí)中成功的應(yīng)用了這些, 我覺得就是好事, 就是進(jìn)步。 唯一的亮點(diǎn)可能就是進(jìn)入系統(tǒng)是的密碼設(shè)計(jì)了, 就這一點(diǎn)小小的設(shè)計(jì)就花了我好幾個(gè)小時(shí)去調(diào)試,因?yàn)榭偰茉诤竺娉绦虻募尤爰斑\(yùn)行時(shí)發(fā)現(xiàn)一些新的小問題。6、 結(jié)論及心得體會(huì)一周多的課程設(shè)計(jì), 終于成功的驗(yàn)收了, 雖然有些疲憊, 但還是有很多的收獲的, 像計(jì)算機(jī)組成原理的課設(shè)一樣,我又一次鞏固了所學(xué)到的知識(shí),之前的學(xué)習(xí)只是停留在理論基礎(chǔ)上,現(xiàn)在自己動(dòng)手操作試驗(yàn)后, 才是真正的理解及體會(huì)。 C
31、也學(xué)了近一年, 有很多知識(shí)都是似懂非懂, 通過平時(shí)上機(jī)操作,自己也了解了一些,但讓我有了更深的理解和更好的認(rèn)識(shí), 則是在這次的課設(shè)上,之前的困惑也通過這次的課設(shè)解決了一些,雖然還是不能夠全面的理解,但是有進(jìn)步就很高興。在課程設(shè)計(jì)之前,因?yàn)橛辛司C合實(shí)驗(yàn)的經(jīng)驗(yàn)與教訓(xùn),明白了寫代碼這一步是非常重要的,因?yàn)楫?dāng)你把代碼輸進(jìn)去之后,并編譯讓其運(yùn)行,發(fā)現(xiàn)通過不了,再來檢查出問題,是很費(fèi)費(fèi)力的事情, 因此分析和規(guī)劃代碼是很重要的, 最重要的是要把邏輯結(jié)構(gòu)寫好, 這樣就不會(huì)出現(xiàn)大問題, 寫代碼就要先找出核心的內(nèi)容, 用多種方法來實(shí)現(xiàn)核心部分, 這樣可以盡可能的避免發(fā)現(xiàn)邏輯或編譯不支持的錯(cuò)誤。通過本次論文設(shè)計(jì),
32、我初步學(xué)會(huì)了論文設(shè)計(jì)的基本方法, 學(xué)會(huì)了怎樣去借鑒別人的方法和經(jīng)驗(yàn), 知道了如何整合資料和處理這些資料的能力, 這位以后做畢設(shè)的論文打下了基礎(chǔ),使我感覺比較好的是有一種成功的喜悅, 雖然在編譯的時(shí)候會(huì)經(jīng)常因?yàn)橐恍┬〉腻e(cuò)誤而心煩意亂, 但是也不失為一件好事, 失敗的越多積累的經(jīng)驗(yàn)越豐富,對(duì)人的考驗(yàn)也比較多, 那么在最后編譯成功時(shí)的喜悅就越濃烈, 也是自己的能力有了進(jìn)一步的提高。 由于知識(shí)和經(jīng)驗(yàn)的不足, 這個(gè)程序編寫的不是很盡如人意, 但是融合了自己的心血, 就覺得是最好的,所以在以后還是需要較多的努力的,還是會(huì)在以后的學(xué)習(xí)過程中不斷地提高和改進(jìn)的。七、附錄(源代碼)#include<std
33、io.h>#include<stdlib.h>#include<string.h>#include<conio.h> static int count=0; static int scnum=0; #define N 10 #define SIZE 1000 struct studentlong Snum;char Sname20;char Ssex10;int Sage;char Sdept10;struct student *next;struct Courseint Cno;char Cname20;int Credit;struct Cours
34、e Co7=1," 英語 ",4,2," 數(shù)學(xué) ",2,3," 信息系統(tǒng) ",4,4," 操作系統(tǒng) ",3,5," 數(shù)據(jù)結(jié)構(gòu) ",4,6," 數(shù)據(jù)處理 ",2,7,"c/c+",4;struct StuCourselong Sno;int SCno;double Grade;printf("n printf("n printf("n供學(xué)生選課n");printf("n printf("n prin
35、tf("n息 n");printf("n printf("n printf("n printf("n printf("n printf("nvoid menu()學(xué) 生 成 績 統(tǒng) 計(jì) 與 分 析 系 統(tǒng) nn");菜 單 nn");1. 顯 示 本 學(xué) 期 考 核 的 7 門 科 目 信 息 以2. 輸入學(xué)生基本信息并顯示n");3. 輸入學(xué)生的選課信息n");4. 查 找 某 學(xué) 生 的 信 息 及 選 修 科 目 的 信5. 修 改 某 學(xué) 生 的 信 息 n"
36、;);6. 增加一個(gè)學(xué)生的記錄n");7. 刪除某個(gè)學(xué)生的記錄n");8. 按 學(xué) 號(hào) 降 序 排 序, 依 次 輸 出 n");9. 將學(xué)生的信息存儲(chǔ)入文件n");0. 退 出已錄入 %d 名學(xué)生的記錄nn",count);/選修課程文件存儲(chǔ)void save()FILE *fp;int i;if(fp=fopen("Course.txt","w")=NULL)printf(" 無法打開此文件! n");exit(0);for(i=0;i<7;i+)if(fwrite(&
37、;Coi,sizeof(struct Course),1,fp)!=1) printf(" 無法打開文件Course.txt!n");fclose(fp);/選修課程文件輸出void load()FILE *fp;int i;if(fp=fopen("Course.txt","r")=NULL)printf(" 無法打開文件Course.txt!n");exit(0);for(i=0;i<7;i+)fread(&Coi,sizeof(struct Course),1,fp);printf("
38、%4d%10s%8dn",Coi.Cno,Coi.Cname,Coi.Credit);fclose(fp);/學(xué)生信息輸入void input(struct student *headp)struct student *p;long a;int q;printf("*nn");若 要停 止輸入 學(xué)生數(shù)據(jù),請(qǐng)將學(xué)號(hào)以0輸入printf(" 請(qǐng)輸入學(xué)生的學(xué)號(hào): n");scanf("%ld",&a);while(a!=0)p=(struct student*)malloc(sizeof(struct student);i
39、f(p=NULL) printf("no enough memory!n");exit(0);printf(" 請(qǐng)輸入學(xué)生的姓名: n");scanf("%s",p->Sname);while(1) printf(" 請(qǐng)輸入學(xué)生的性別(男/女 1/0) :n");scanf("%d",&q);if(q=1)strcpy(p->Ssex,"男");break;else if(q=0)strcpy(p->Ssex,"女");break
40、; elseprintf(" 輸入錯(cuò)誤,請(qǐng)重新輸入! n");printf(" 請(qǐng)輸入學(xué)生的年齡(請(qǐng)輸入阿拉伯?dāng)?shù)字) : n");scanf("%d",&p->Sage);printf(" 請(qǐng)輸入該學(xué)生的所屬院系 (CS/MA/IS) : n");scanf("%s",p->Sdept);p->Snum=a;count+;p->next=*headp;*headp=p;printf("nn 請(qǐng)輸入學(xué)生的學(xué)號(hào): n");scanf("%
41、ld",&a);p=*headp;printf(" 學(xué)號(hào)姓名 性別 年齡 所屬院系 n");while(p!=NULL) printf("%ld%10s%8s%8d%10sn",p->Snum,p->Sname,p->Ssex,p->Sage,p->Sdept); p=p->next;/ 選修信息的錄入 void xuxiuinput(struct student *headp,struct StuCourse SC)int a,b,c;struct student *p;p=*headp;print
42、f(" 請(qǐng)輸入選修課程的數(shù)目: n");scanf("%d",&a);scnum=scnum+a;for(int i=0;i<a;i+)while(1)printf(" 輸入選修者的學(xué)號(hào): n");scanf("%ld",&b);if(p->Snum=NULL)printf(" 系統(tǒng)中沒有任何學(xué)生信息,請(qǐng)先選擇存儲(chǔ)! n");exit(0); while(b!=p->Snum&&p->next!=NULL) p=p->next;if(
43、b=p->Snum)SCi.Sno=b;break;elseprintf(" 無法找到!請(qǐng)確認(rèn)是否已輸入該學(xué)生的信息。 n"); printf(" 輸入選修的科目編號(hào)(1-7) : n");scanf("%d",&c);while(1)if(c>=1&&c<=7)SCi.SCno=c;break; elseprintf(" 請(qǐng) 重 新選 擇 選 修科 目 ! n 輸 入 你選 修 的 科 目 的 編 號(hào) ( 1-7 ) : n");scanf("%d",
44、&c);printf(" 輸入該選修科目的成績: n");scanf("%lf",&SCi.Grade);printf(" 選修科目信息如下: n");printf("SnoCno Graden");for(i=0;i<scnum;i+)printf("%-10ld%7d%14.2lfn",SCi.Sno,SCi.SCno,SCi.Grade);/查找學(xué)生的基本信息以及選修信息-void find(struct student *headp,struct StuCourse
45、 SC)struct student *p;long b;long x;int a,i,d;char c20;p=*headp;printf(" 請(qǐng)選擇查找的方式: 1.學(xué)號(hào)查找 2.姓名查找 (輸入 1 或 2) :n");scanf("%d",&a);while(1)if(a=1)printf(" 請(qǐng)輸入該學(xué)生的學(xué)號(hào) :n");scanf("%ld",&x);if(p->Snum=NULL)printf(" 系統(tǒng)中沒有任何學(xué)生信息,請(qǐng)先選擇存儲(chǔ)! n");break;w
46、hile(x!=p->Snum&&p->next!=NULL)p=p->next;if(x=p->Snum)printf(" 學(xué)號(hào)姓名 性別 年齡 所屬院系 n");printf("%ld%10s%8s%8d%10sn",p->Snum,p->Sname,p->Ssex,p->Sage,p->Sdept);elseprintf(" 無法找到!請(qǐng)確認(rèn)是否已輸入該學(xué)生的信息。 n");break;else if(a=2)printf(" 請(qǐng)輸入該學(xué)生的姓名:
47、n");scanf("%s",c);if(p->Snum=NULL)printf(" 系統(tǒng)中沒有任何學(xué)生信息,請(qǐng)先選擇存儲(chǔ)! n");menu();while(strcmp(c,p->Sname)!=0)&&p->next!=NULL)p=p->next;if(strcmp(c,p->Sname)=0)printf(" 學(xué)號(hào)姓名 性別 年齡 所屬院系 n");printf("%ld%10s%8s%8d%10sn",p->Snum,p->Sname,
48、p->Ssex,p->Sage,p->Sdept);elseprintf(" 無法找到!請(qǐng)確認(rèn)是否已輸入該學(xué)生的信息。 n");break;elseprintf(" 輸入方式錯(cuò)誤,請(qǐng)重新選擇查找方式! n");while(1)printf(" 請(qǐng)選擇選修科目查找的方式:1.學(xué)號(hào)查找2.科目編號(hào)查找(輸入 1 或2) :n");scanf("%d",&a);if(a=1)printf(" 請(qǐng)輸入想要查找的學(xué)生選課信息者的學(xué)號(hào): n");scanf("%ld&qu
49、ot;,&b);printf(" 選修科目信息如下: n");printf("SnoCno Graden");for(i=0;i<scnum;i+)if(b=SCi.Sno)printf("%-10ld%7d%14.2lfn",SCi.Sno,SCi.SCno,SCi.Grade);break;else if(a=2)printf(" 請(qǐng)輸入想要查找的學(xué)生選課信息的科目編號(hào): n");scanf("%d",&d);printf(" 選修科目信息如下: n"
50、;);printf("SnoCno Graden");for(i=0;i<scnum;i+)if(d=SCi.SCno)printf("%-10ld%7d%14.2lfn",SCi.Sno,SCi.SCno,SCi.Grade);break;elseprintf(" 輸入錯(cuò)誤!請(qǐng)重新輸入! nn");/ 修改學(xué)生的信息以及選修科目的信息int modify(struct student *headp,struct StuCourse SC)struct student *p,*k;int q,i,j,m,n;long x,a,b
51、;p=*headp;k=*headp;int y;printf(" 請(qǐng)輸入要修改的學(xué)生的學(xué)號(hào): n");scanf("%ld",&x);while(x!=p->Snum&&p->next!=NULL)p=p->next;if(x=p->Snum)printf(" 請(qǐng)輸入你想修改的學(xué)生信息的標(biāo)號(hào):1.學(xué)號(hào)2.姓名3.性別4.年齡5.所屬院系6.選修科目信息:n");scanf("%d",&y);while(1)if(y=1)printf(" 請(qǐng)輸入該生
52、的新學(xué)號(hào): n");scanf("%ld",&b);for(i=0;i<scnum;i+)if(SCi.Sno=p->Snum)SCi.Sno=b;p->Snum=b;break;if(y=2)printf(" 請(qǐng)輸入該學(xué)生的新姓名: n");scanf("%s",p->Sname);break;if(y=3)printf(" 請(qǐng)重選該學(xué)生的性別: n");while(1)printf(" 請(qǐng)輸入學(xué)生的性別(男/女 1/0) :n");scanf(&qu
53、ot;%d",&q);if(q=1)strcpy(p->Ssex," 男 ");break;else if(q=0)strcpy(p->Ssex,"女");break;elseprintf(" 輸入錯(cuò)誤,請(qǐng)重新輸入! n");break;if(y=4)printf(" 請(qǐng)輸入該生的年齡(請(qǐng)輸入阿拉伯?dāng)?shù)字) : n");scanf("%d",&p->Sage);break;if(y=5)printf(" 請(qǐng)輸入該學(xué)生的所屬院系 (CS/MA/I
54、S) : n");scanf("%d",p->Sdept);break;if(y=6)n");printf(" 請(qǐng)輸入想要修改的選修科目信息:1.選修者的學(xué)號(hào)2.選修科目編號(hào)scanf("%d",&j);while(1)if(j=1)printf(" 請(qǐng)輸入想要修改的學(xué)號(hào): n");scanf("%ld",&a);for(i=0;i<scnum;i+)if(a=SCi.Sno)printf(" 請(qǐng)輸入新學(xué)號(hào): n");scanf(&quo
55、t;%ld",&n);SCi.Sno=n;while(a!=k->Snum&&k->next!=NULL)k=k->next;if(a=k->Snum)k->Snum=n;break;else if(j=2)printf(" 輸入想要修改科目的編號(hào): n");load();scanf("%d",&m);for(i=0;i<scnum;i+)if(m=SCi.SCno)printf(" 輸入新的科目編號(hào):n");scanf("%d",&am
56、p;SCi.SCno);printf(" 請(qǐng)重新輸入該選修科目的成績: n");scanf("%lf",&SCi.Grade);break;elseprintf(" 輸入錯(cuò)誤!請(qǐng)重新輸入! n");break;elseprintf("n 選擇錯(cuò)誤,重選! n");printf(" 學(xué)號(hào)姓名 性別 年齡 所屬院系 n");printf("%ld%10s%8s%8d%10sn",p->Snum,p->Sname,p->Ssex,p->Sage,p-
57、>Sdept);printf(" 選修科目信息如下: n");printf("SnoCno Graden");for(i=0;i<scnum;i+)printf("%-10ld%7d%14.2lfn",SCi.Sno,SCi.SCno,SCi.Grade);elseprintf(" 系統(tǒng)未錄入該學(xué)生的信息!請(qǐng)重新輸入學(xué)號(hào)! n");return 0;/ 插入一個(gè)學(xué)生的信息并修改選修科目的信息void insert(struct student *headp,struct StuCourse SC)lon
58、g n;int q,a,j,b,c,m,i=1;struct student *p,*last,*current;p=(struct student *)malloc(sizeof(struct student);current=*headp;printf(" 輸入一個(gè)新的學(xué)生的記錄(先輸入學(xué)號(hào)) : n");scanf("%ld",&n);while(current!=NULL)if(current->Snum=n)printf(" 該學(xué)生記錄已經(jīng)存在,請(qǐng)重新輸入! n");printf(" 輸入一個(gè)新的學(xué)生的記錄(先輸入學(xué)號(hào)): n");scanf("%ld",&n);current=*headp;elsecurrent=current->next;p->Snum=n;count+;printf(" 請(qǐng)輸入學(xué)號(hào)為 %ld 的選修信息: nn",p->Snum);printf(" 請(qǐng)輸入該生選修課程的數(shù)目: n");scanf("%d",&a);m=scnum;for(j=m;j
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年“新九論”學(xué)習(xí)心得體會(huì)例文(3篇)
- 2025年湖南貨運(yùn)從業(yè)資格證新政
- 2025年濰坊b2貨運(yùn)資格證多少道題
- 二零二五版籃球場(chǎng)地租賃及賽事門票銷售合同3篇
- 2025版體檢服務(wù)信息化建設(shè)合作合同協(xié)議2篇
- 2024跨國公司研發(fā)中心合作合同
- 二零二五年度城市綜合體消防安全管理代理服務(wù)合同3篇
- 二零二五年度合同擔(dān)保制度標(biāo)準(zhǔn)合同范本匯編3篇
- 2025版天然氣發(fā)電機(jī)組購銷合同范本3篇
- 2025年度個(gè)人對(duì)公司借款及稅收優(yōu)惠合同規(guī)范4篇
- 無人化農(nóng)場(chǎng)項(xiàng)目可行性研究報(bào)告
- 《如何存款最合算》課件
- 社區(qū)團(tuán)支部工作計(jì)劃
- 拖欠工程款上訪信范文
- 2024屆上海市金山區(qū)高三下學(xué)期二模英語試題(原卷版)
- 《wifi協(xié)議文庫》課件
- 《好東西》:女作者電影的話語建構(gòu)與烏托邦想象
- 一年級(jí)下冊(cè)數(shù)學(xué)口算題卡打印
- 2024年中科院心理咨詢師新教材各單元考試題庫大全-下(多選題部分)
- 真人cs基于信號(hào)發(fā)射的激光武器設(shè)計(jì)
- 2024年國信證券招聘筆試參考題庫附帶答案詳解
評(píng)論
0/150
提交評(píng)論