




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)課課 程程 設(shè)設(shè) 計(jì)計(jì) 報(bào)報(bào) 告告 學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng)學(xué)學(xué) 院:院: 信信 息息 與與 工工 程程 學(xué)學(xué) 院院 專專 業(yè):業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)計(jì)算機(jī)科學(xué)與技術(shù) 目 錄第一章 需求分析1.1 課程設(shè)計(jì)題目及要求1.2 課程設(shè)計(jì)思想及開發(fā)環(huán)境第二章 概要設(shè)計(jì)2.1 總體方案 2.2 模板功能分析及其外部設(shè)計(jì)2.3 主要數(shù)據(jù)結(jié)構(gòu)第三章 詳細(xì)設(shè)計(jì)第四章 調(diào)試與操作說明 4.1 主要模板調(diào)試 4.2 系統(tǒng)缺陷及原因第五章 課程設(shè)計(jì)總結(jié)與體會(huì)第六章 參考文獻(xiàn) 第一章 需求分析1.1 課程設(shè)計(jì)題目及要求題目:學(xué)生成績管理系統(tǒng)題目:學(xué)生成績管理系統(tǒng)學(xué)生成績表:學(xué)生成績表:要求如
2、下:1) 實(shí)現(xiàn)對(duì)兩個(gè)文件數(shù)據(jù)進(jìn)行合并,生成新文件 3.txt2) 抽取出三科成績中有補(bǔ)考的學(xué)生并保存在一個(gè)新文件 4.txt3) 對(duì)合并后的文件 3.txt 中的數(shù)據(jù)按總分降序排序(至少采用兩種排序方法實(shí)現(xiàn))4) 輸入一個(gè)學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果(至少采用兩種查找方法實(shí)現(xiàn))5) 要求使用結(jié)構(gòu)體,鏈或數(shù)組等實(shí)現(xiàn)上述要求.1.2 課程設(shè)計(jì)思想及開發(fā)環(huán)境設(shè)計(jì)思想:本課題的實(shí)質(zhì)是完成對(duì)學(xué)生成績表的合并、提取、排序、查詢等功能,可以首先定義項(xiàng)目的數(shù)據(jù)結(jié)構(gòu),然后將每個(gè)功學(xué)生成績信息文件 1(1.txt) ,內(nèi)容如下姓名 學(xué)號(hào) 語文 數(shù)學(xué) 英語 張明明 01 67 78 82李成友 02
3、78 91 88張輝燦 03 68 82 56王露 04 56 45 77陳東明 05 67 38 47. . . . 學(xué)生成績信息文件 2(2.txt),內(nèi)容如下:姓名 學(xué)號(hào) 語文 數(shù)學(xué) 英語 陳果 31 57 68 82李華明 32 88 90 68張明東 33 48 42 56李明國 34 50 45 87陳道亮 35 47 58 77. . . . 能寫成一個(gè)函數(shù)來完成對(duì)數(shù)據(jù)的操作,最后完成主函數(shù)以驗(yàn)證各個(gè)函數(shù)功能并得出運(yùn)行結(jié)果??蓪⒋讼到y(tǒng)分為如下模塊,合并兩個(gè)信息表、從表中提取信息、降序排序模塊、按條件進(jìn)行查詢、退出系統(tǒng)。編寫語言: C 語言開發(fā)工具: Visual C+ 6.0VC
4、+是微軟公司開發(fā)的一個(gè) IDE(集成開發(fā)環(huán)境)。學(xué)習(xí) VC 要了解很多 Windows 平臺(tái)的特性并且還要掌握 MFC、ATL、COM 等的知識(shí), VC 基于 C,C+語言,主要由是 MFC 組成,是與系統(tǒng)聯(lián)系非常緊密的編程工具,它兼有高級(jí),和低級(jí)語言的雙重性,功能強(qiáng)大,靈活,執(zhí)行效率高,幾乎可說 VC 在 Windows 平臺(tái)無所不能。 最大缺點(diǎn)是開發(fā)效率不高。 第二章概要設(shè)計(jì)2.1 總體方案2.2 模板功能分析及其外部設(shè)計(jì) 合并兩個(gè)信息主要是將兩個(gè)成績表中的成績信息先讀取,然后寫進(jìn)新的文本中,從而建立一個(gè)新的成績表;提取信息主要是在合并信息之后所得文本中,按要求提取出所需信息,并寫進(jìn)新的文
5、本中;降序排序主要用兩種方法進(jìn)行降序排序,分別為冒泡排序和快速排序; 系統(tǒng)菜單 退出系統(tǒng)合并兩個(gè)信息表 提取信息降序排序查詢信息降序排序查詢信息在結(jié)構(gòu)體中查詢?cè)诤喜⒑蟮谋碇胁樵兠芭菖判蚨植迦肱判虿樵冃畔⒅饕前礂l件輸入信息,根據(jù)信息在文本中查詢所對(duì)應(yīng)的信息并輸出結(jié)果。 程序的外部設(shè)計(jì)主要是通過寫一個(gè)功能菜單來實(shí)現(xiàn)每個(gè)功能模板的調(diào)用,從而更好的協(xié)調(diào)各個(gè)功能之間的關(guān)系和使用。 2.3 主要數(shù)據(jù)結(jié)構(gòu)學(xué)生數(shù)據(jù)是用鏈表存放的,因?yàn)閷W(xué)生的人數(shù)是不定的,若用一個(gè)數(shù)組存放數(shù)據(jù)時(shí),有固定長度限制,若太大則可能導(dǎo)致內(nèi)存浪費(fèi),太小就不夠用。而鏈表可動(dòng)態(tài)分配內(nèi)存,根據(jù)需要而開辟內(nèi)存單元,這是本程序的鏈表數(shù)據(jù)結(jié)構(gòu),相
6、關(guān)學(xué)生需要儲(chǔ)存的信息也如下; typedef struct char name8; char id2; int chinese; int math; int english; int sum; ;student 第三章 詳細(xì)設(shè)計(jì)本程序分為合并模板、提取模板、排序模板、查詢模板。在合并兩個(gè)信息表是,采用 Unitedfile()來實(shí)現(xiàn),調(diào)用該函數(shù)打開文件1.txt 并讀取,再打開 3.txt 將從 1.txt 中讀取的信息寫入,完成后關(guān)閉 1.txt;然后打開 2.txt 讀取,并寫入 3.txt,完成后輸出并關(guān)閉兩個(gè)文本。void Unitedfile()/合并 1.txt 和 2.txt 為
7、 3.txt FILE *fp,*p; Student studd; fp=fopen(1.txt,r); /*以讀的方式打開 1.txt*/p=fopen(3.txt,w); /*以寫的方式打開 3.txt*/while( fscanf(fp,%s%s%d%d%d,,studd.id,&studd.chinese,&studd.math,&studd.english )!=EOF)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,stud
8、d.english );printf(%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); /*讀取 1.txt 的數(shù)據(jù)寫入3.txt,繼續(xù)讀取直結(jié)束*/fclose(fp); /*關(guān)閉文件 1.txt*/fp=fopen(2.txt,r); /*以寫的方式打開 2.txt*/while( fscanf(fp,%s%s%d%d%d,,studd.id,&studd.chinese,&studd.math,&studd.englis
9、h )!=EOF)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); printf(%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); /*輸出文本 3.txt 中的信息*/fclose(fp); /*關(guān)閉文件 2.txt*/fclose(p); /*關(guān)閉文件 3.txt*/在提取信息模板中,主要是從合成后的 3.txt 文本中提
10、取,先打開 3.txt 文本并讀取,再開打 4.txt 文本并寫入,通過 if 語句都讀取的信息進(jìn)行判斷,是否符合,符合的就寫入 4.txt 文本中,不符合的就跳過,繼續(xù)讀取下一個(gè)信息,一次進(jìn)行,知道文本結(jié)束,輸出文本 4.txt 的信息,并關(guān)閉兩個(gè)文本。void findout() /*提取有補(bǔ)考學(xué)生的信息寫入 4.txt 中*/FILE *fp,*p;Student studd; fp=fopen(3.txt,r);p=fopen(4.txt,w);while( fscanf(fp,%s%s%d%d%d,,studd.id,&studd.chinese,&
11、;studd.math,&studd.english )!=EOF)if(studd.chinese60|studd.math60|studd.english60)fprintf(p,%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english );printf(%-6s %-6s %-6d %-6d %-6dn,,studd.id,studd.chinese,studd.math,studd.english ); /*輸出文本 4.txt 中的信息*/fcl
12、ose(fp);fclose(p);在降序排序模塊中,有兩種排序方法;一種是冒泡排序,一種是快速排序;兩種排序方法都是采用先定義函數(shù)排序方法,然后再后面調(diào)用該函數(shù)進(jìn)行排順序,在此之前都會(huì)將成績信息總分計(jì)算出來,然后按總分進(jìn)行降序排序,然后將排序后的信息寫入到 3.txt中,并輸出,最后關(guān)閉文本。冒泡排序:void Bsort(int R,int n) int t, flag=1; /*當(dāng) flag 為 0 時(shí)則停止排序*/for(int j=1;j=j;k-) if(RkRk-1) t=Rk; Rk=Rk-1; Rk-1=t;flag=1;if(flag=0)return; void maop
13、ao() int i,n; FILE *fp;fp=fopen(3.txt,r);i=0;while(fscanf(fp,%s%s%d%d%d,,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF)studi.sum=studi.english+studi.chinese+studi.math;i+; fclose(fp); n=i-1; Bsort(stud,n); /*冒泡排序*/ fp=fopen(3.txt,w); /*將信息寫入 3.txt 中*/ for(int m=0;mi
14、;m+)fprintf(fp,%-8s %-8s %-8d %-8d %-8d %-8dn,,studm.id,studm.chinese,studm.math,studm.english,studm.sum );fclose(fp);快速排序:int Partition(int low,int high) int pivotkey;Student temp;temp=studlow;pivotkey=studlow.sum;while(lowhigh) while(lowhigh&studhigh.sum=pivotkey)-high;studlow=studhi
15、gh;while(low=pivotkey)+low;studhigh=studlow; studlow=temp; return low; void QSort(int low,int high) /*快速排序*/ int privotloc; if(lowhigh) privotloc=Partition(low,high);QSort(low,privotloc-1);QSort(privotloc+1,high); void kuaisu() /*讀取文件排序后將結(jié)果寫入 3.txt*/ int i,low,high; FILE *fp; fp=fopen(3.txt,r); i=0;
16、while(fscanf(fp,%s%s%d%d%d,,studi.id,&studi.chinese,&studi.math,&studi.english )!=EOF) studi.sum=studi.english+studi.chinese+studi.math;i+; fclose(fp);low=0; high=i-1;QSort(low,high); /*快速排序*/fp=fopen(3.txt,w); /*將排序后的數(shù)據(jù)寫入 3.txt 中*/for(int j=0;jName;for(k=1;k=n;k+)if(strcmp(stu
17、,Name)=0)flag=1;cout-姓名-學(xué)號(hào)-語文-數(shù)學(xué)-英語-總分-endl;cout studk.id ;coutstudk.chinese studk.math studk.english studk.sumendl;break; if(flag=0)cout無此學(xué)生相關(guān)信息endl; 要實(shí)現(xiàn)各個(gè)功能之間的調(diào)用,在主函數(shù)中使用while、if、case 等語句進(jìn)行調(diào)用是各個(gè)功能之間串聯(lián)起來,把各個(gè)功能看成單個(gè)的事件,利用 case 語句來對(duì)各個(gè)事件進(jìn)行選擇;利用 printf 輸出語句來形成主菜單界面。 int main() int choic
18、e; while(1) /*主菜單*/if(sign3=0)printf(*n);printf(* 學(xué)生成績管理系統(tǒng) *n);printf(* 1. 合并 1 和 2 得 3 *n); printf(* 2. 把 3 中有成績不及格的放入新文件 4 中 *n); printf(* 3. 把 3 中成績總分按降序排列 *n); printf(* 4. 輸入姓名,查找該成績信息并輸出結(jié)果 *n);printf(* 5. 退出系統(tǒng) *n);printf(*n);printf(請(qǐng)輸入(1-5)選擇要使用的功能:); sign3=1;scanf(%d,&choice);switch(choice
19、) case 1: Unitedfile();sign=1;cout1 和 2 合并成功!endl;cout請(qǐng)選擇下一步操作:endl;break; case 2: if(sign=0)cout請(qǐng)執(zhí)行操作 1 后再執(zhí)行此項(xiàng)操作!endl;cout請(qǐng)選擇下一步操作:endl;break;cout4.txt 生成成功!endl; findout();cout請(qǐng)選擇下一步操作:endl;break; case 3:if(sign=0)cout請(qǐng)執(zhí)行操作 1 后再執(zhí)行此項(xiàng)操作!endl;cout請(qǐng)選擇下一步操作:endl;break;sortfile();cout降序排列成功!endl;cout請(qǐng)選擇
20、下一步操作:endl;sign1=1;break; case 4:while(1)char c;findoutstudent();cout繼續(xù)查找或返回主菜單請(qǐng)輸入 Y/N:c;if(c=N|c=n)break; system(cls);sign3=0;break;case 5:exit(0);break; return 0; 第四章 調(diào)試與操作說明 4.1 主要模板調(diào)式菜單顯示圖:合并兩個(gè)成績表,選擇菜單 1,調(diào)試結(jié)果:提取有成績不及格學(xué)生的信息,選擇功能 2,調(diào)試結(jié)果:降序排序,將 3.txt 中學(xué)生成績總分計(jì)算出,選擇功能 1 和功能2,調(diào)試結(jié)果一樣:選擇 1 時(shí):選擇 2 時(shí):排序后,進(jìn)行查詢功能,都是輸入姓名查找,選擇功能 1 和功能2,調(diào)試完成后,如果還要繼續(xù)查詢選擇 Y,不查詢選擇 N 退到主菜單:選擇 1:選擇 2 時(shí):選擇 Y 繼續(xù)查詢時(shí):不查詢退到主菜單。退出系統(tǒng),選擇 5,調(diào)試之后按任意鍵關(guān)閉界面: 4.2 系統(tǒng)缺陷及原因缺陷:該系統(tǒng)功能存在一些缺陷,在第一步到第二步過程中,沒有
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理員體位轉(zhuǎn)移技術(shù)規(guī)范
- 首鋼礦業(yè)合作協(xié)議書
- 山東聯(lián)通5g協(xié)議書
- 運(yùn)輸?shù)缆分匦迏f(xié)議書
- 違反班級(jí)紀(jì)律協(xié)議書
- 車禍死亡調(diào)解協(xié)議書
- 門店股權(quán)轉(zhuǎn)讓協(xié)議書
- 鋪面租金保密協(xié)議書
- 門店入股合同協(xié)議書
- 雇用防疫人員協(xié)議書
- 版新教材地理人教版必修第一冊(cè)課件第四章地貌章末總結(jié)
- 地質(zhì)災(zāi)害群測(cè)群防完整(非常全面)PPT
- 盆底重建手術(shù)治療新進(jìn)展
- 國家開放大學(xué)《高等數(shù)學(xué)基礎(chǔ)》形考任務(wù)1-4參考答案
- 拔牙術(shù)的禁忌癥
- 項(xiàng)目每日情況報(bào)告
- 聚焦離子束系統(tǒng)虛擬仿真實(shí)驗(yàn)報(bào)告
- GB/T 26572-2011電子電氣產(chǎn)品中限用物質(zhì)的限量要求
- GB/T 18601-2001天然花崗石建筑板材
- GB/T 16920-2015玻璃平均線熱膨脹系數(shù)的測(cè)定
- 專業(yè)知識(shí)二湯以恒口訣(完整版)
評(píng)論
0/150
提交評(píng)論