版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)報(bào)告</b></p><p> 2014年 6 月16日</p><p><b> 目錄</b></p><p> 一、課程設(shè)計(jì)的目的1</p><p> 二、課程設(shè)計(jì)要求1</p><p> 三、 課程設(shè)計(jì)方案1<
2、/p><p> 四、課程設(shè)計(jì)內(nèi)容1</p><p> 4.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)1</p><p> 4.1.1設(shè)計(jì)背景1</p><p> 4.1.2定義數(shù)據(jù)結(jié)構(gòu)體2</p><p> 4.1.3存儲(chǔ)方式2</p><p> 4.1.4數(shù)據(jù)結(jié)構(gòu)上的基本運(yùn)算2</p>
3、<p><b> 4.2實(shí)例應(yīng)用5</b></p><p> 4.2.1問(wèn)題描述5</p><p> 4.2.2程序設(shè)計(jì)5</p><p> 4.2.3源代碼6</p><p> 4.2.4程序運(yùn)行12</p><p><b> 五、總結(jié)14</b
4、></p><p> 六、 參考文獻(xiàn)15</p><p><b> 一、課程設(shè)計(jì)的目的</b></p><p> 1.掌握算法與數(shù)據(jù)結(jié)構(gòu)的基本概念以及程序設(shè)計(jì)的基本理論和基本方法與技術(shù),學(xué)會(huì)分析比較復(fù)雜的程序設(shè)計(jì)問(wèn)題。</p><p> 2.熟練掌握常用的數(shù)據(jù)結(jié)構(gòu)如順序表、鏈表、棧、隊(duì)列、廣義表、樹(shù)結(jié)構(gòu)、
5、圖網(wǎng)結(jié)構(gòu)等,學(xué)會(huì)各種數(shù)據(jù)結(jié)構(gòu)上的基本運(yùn)算。</p><p> 3.初步掌握算法的時(shí)間性能與空間性能的分析技巧,得到復(fù)雜程序設(shè)計(jì)的初步訓(xùn)練。</p><p> 4.學(xué)會(huì)分析研究計(jì)算機(jī)加工的數(shù)據(jù)對(duì)象的特性,能夠運(yùn)用和選擇適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)解決實(shí)際問(wèn)題。</p><p> 5.進(jìn)一步提高從事軟件分析、設(shè)計(jì)、編程和數(shù)據(jù)組織處理能力和水平。</p><p
6、><b> 二、課程設(shè)計(jì)要求</b></p><p> 在掌握常用數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上實(shí)現(xiàn)一種數(shù)據(jù)結(jié)構(gòu),可以是邏輯結(jié)構(gòu)或者是存儲(chǔ)結(jié)構(gòu)并實(shí)現(xiàn)該種數(shù)據(jù)結(jié)構(gòu)的基本運(yùn)算包括插入、刪除、元素獲取、搜索、定位和創(chuàng)建等等。</p><p> 舉出具體事例,利用數(shù)據(jù)結(jié)構(gòu)解決實(shí)際問(wèn)題。對(duì)實(shí)際學(xué)習(xí)生活中遇到的問(wèn)題進(jìn)行分析處理、建立模型,將前面設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)應(yīng)用到具體實(shí)際問(wèn)題當(dāng)中。
7、</p><p> 掌握簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)的程序?qū)崿F(xiàn)的基本策略,能夠利用高級(jí)語(yǔ)言將這種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為程序來(lái)實(shí)現(xiàn)。</p><p><b> 課程設(shè)計(jì)方案</b></p><p> 數(shù)據(jù)結(jié)構(gòu)本身就是一種定義了特定成員的結(jié)構(gòu)體,例如結(jié)構(gòu)體中包含指針和數(shù)據(jù)元素的結(jié)構(gòu)體就構(gòu)成鏈表。仿照這種做法,設(shè)計(jì)一種含多種不同類型數(shù)組的結(jié)構(gòu)體。這是在數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上
8、對(duì)順序表進(jìn)行的改進(jìn),即把原本順序表的一維數(shù)組data增加為多個(gè)數(shù)組data1[],data2[]等等,根據(jù)實(shí)際情況可以把data1[]定義為字符型,data2[]定義為整型。另外在結(jié)構(gòu)體中可以定義其他變量。</p><p> 確認(rèn)應(yīng)用該數(shù)據(jù)結(jié)構(gòu)所要解決的實(shí)際問(wèn)題為“學(xué)生成績(jī)管理系統(tǒng)”。該系統(tǒng)要求如下:</p><p> 對(duì)學(xué)生信息(包括學(xué)號(hào)、姓名、語(yǔ)文、數(shù)學(xué)、英語(yǔ)、理綜)進(jìn)行管理,包括
9、學(xué)生成績(jī)的信息輸入、輸出、查詢、刪除、排序、統(tǒng)計(jì)、退出。</p><p> 成績(jī)信息顯示瀏覽功能:完成全部學(xué)生記錄的顯示。</p><p> 排序功能:按學(xué)生平均成績(jī)進(jìn)行排序。</p><p> 成績(jī)信息錄入功能:(成績(jī)信息用文件保存,可以一次完成若干條記錄的輸入。)</p><p> 5.應(yīng)提供一個(gè)界面來(lái)調(diào)用各個(gè)功能,調(diào)用界面和各個(gè)
10、功能的操作界面應(yīng)盡可能清晰美觀!</p><p><b> 四、課程設(shè)計(jì)內(nèi)容</b></p><p><b> 4.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p><b> 4.1.1設(shè)計(jì)背景</b></p><p> 在實(shí)際學(xué)習(xí)生活中,我們需要對(duì)獲得的信息進(jìn)行處理和存儲(chǔ),然而
11、處理的元素可以是數(shù)據(jù)、符號(hào)、或者其他的記錄,等等這些數(shù)據(jù)結(jié)點(diǎn)都可以用來(lái)構(gòu)成一個(gè)線性表。線性表是由n個(gè)相同類型數(shù)據(jù)元素組成的有限序列。而有些時(shí)候需要把不同類型的數(shù)據(jù)結(jié)點(diǎn)整合在一起,用來(lái)描述某些記錄。例如,要記錄學(xué)生的成績(jī)表需要包括姓名、學(xué)號(hào)以及各科成績(jī)等數(shù)據(jù),這其中包含了字符型和整型兩種數(shù)據(jù)類型。因此,僅用含有一個(gè)數(shù)組的順序表沒(méi)辦法具體描述出詳細(xì)的信息,所以有必要增加順序表中的成員來(lái)達(dá)到目的。</p><p>
12、下面以“學(xué)生成績(jī)管理”問(wèn)題為例建立解決此類問(wèn)題的數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)體并實(shí)現(xiàn)在該數(shù)據(jù)結(jié)構(gòu)上的基本運(yùn)算。</p><p> 4.1.2定義數(shù)據(jù)結(jié)構(gòu)體</p><p> “學(xué)生成績(jī)管理”數(shù)據(jù)結(jié)構(gòu)定義如下:</p><p> typedef struct student </p><p><b> {</b></p>
13、;<p> char number[10]; </p><p> char name[20]; </p><p> float score[4]; </p><p> float sum; </p><p><b> }STU; </b></p><p> ST
14、U stu[N]; </p><p> 這里把這種結(jié)構(gòu)體成為“學(xué)生信息”。其中,數(shù)組name[]儲(chǔ)存學(xué)生姓名,數(shù)組number[]儲(chǔ)存學(xué)號(hào),數(shù)組score[]儲(chǔ)存成績(jī)數(shù)據(jù)(這里以語(yǔ)文 數(shù)學(xué) 英語(yǔ) 理綜 為成績(jī))。Sum用于儲(chǔ)存總分。</p><p><b> 4.1.3存儲(chǔ)方式</b></p><p> 由于該數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)體中的成員是不同
15、的數(shù)據(jù)類型,成員按照定義時(shí)的順序依次存儲(chǔ)在連續(xù)的內(nèi)存空間。和數(shù)組不一樣的是,結(jié)構(gòu)體的大小不是所有成員大小簡(jiǎn)單的相加,需要考慮到系統(tǒng)在存儲(chǔ)結(jié)構(gòu)體變量時(shí)的地址對(duì)齊問(wèn)題。在C++的結(jié)構(gòu)體中存儲(chǔ)方式是按一種內(nèi)存對(duì)齊的規(guī)則來(lái)存儲(chǔ)的。對(duì)于一個(gè)結(jié)構(gòu)體中每次的偏移量是相等的,以結(jié)構(gòu)體所占空間最大的變量類型為一個(gè)位訪問(wèn)的單位偏移量,這樣對(duì)于程序來(lái)說(shuō)加快了訪問(wèn)的速度,當(dāng)同時(shí)也會(huì)早造成一些空間的浪費(fèi)。一般情況下該結(jié)構(gòu)體的大小可以通過(guò)如下方法計(jì)算:</p
16、><p> .分析各個(gè)成員長(zhǎng)度;</p><p> .找出最大長(zhǎng)度的成員長(zhǎng)度M(結(jié)構(gòu)體的長(zhǎng)度一定是該成員的整數(shù)倍);</p><p> .并按最大成員長(zhǎng)度出現(xiàn)的位置將結(jié)構(gòu)體分為若干部分;</p><p> .各個(gè)部分長(zhǎng)度一次相加,求出大于該和的最小M的整數(shù)倍即為該部分長(zhǎng)度;</p><p> (5).將各個(gè)部分長(zhǎng)
17、度相加之和即為結(jié)構(gòu)體長(zhǎng)度</p><p> 4.1.4數(shù)據(jù)結(jié)構(gòu)上的基本運(yùn)算</p><p> 輸入函數(shù)inputscore()</p><p> 輸入運(yùn)算實(shí)現(xiàn)的是把原始學(xué)生數(shù)據(jù)信息包括學(xué)號(hào)、姓名、各科成績(jī)等輸入結(jié)構(gòu)體,并且把信息按照順序存儲(chǔ)結(jié)構(gòu)儲(chǔ)存在一片連續(xù)的存儲(chǔ)單元中。算法描述如下:</p><p> void inputscore
18、() </p><p><b> {</b></p><p> int i,j,n;</p><p> printf("請(qǐng)輸入學(xué)生總數(shù):\n");</p><p> scanf("%d",&n);</p><p> printf("
19、;提示:*輸入學(xué)號(hào)時(shí)請(qǐng)輸入位數(shù)為8位的數(shù)字*\n");</p><p> printf("請(qǐng)輸入學(xué)生的學(xué)號(hào) 姓名 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 理綜:\n"); </p><p> for(i=0;i<n;i++) </p><p> scanf("%s%s%f%f%f%f",stu[i].number,st
20、u[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]); </p><p><b> }</b></p><p> 插入(添加)函數(shù)add()</p><p> 插入函數(shù)實(shí)現(xiàn)將某一學(xué)生的信息插入到結(jié)
21、構(gòu)體中,即結(jié)構(gòu)體中的成員數(shù)組number[],數(shù)組name[],score[]元素分別增加1,增加的數(shù)值為所添加的新學(xué)生的信息。為了方便,add()函數(shù)利用循環(huán)功能實(shí)現(xiàn)添加多個(gè)學(xué)生信息,算法描述如下:</p><p> void add()</p><p><b> {</b></p><p> int a,i,j; </p>
22、;<p> printf("請(qǐng)輸入新增加的學(xué)生人數(shù):\n"); </p><p> scanf("%d",&a); </p><p><b> n=n+a;</b></p><p> printf("請(qǐng)輸入添加的學(xué)生的學(xué)號(hào) 姓名 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 理綜:\n&q
23、uot;);</p><p> for(i=n-a;i<n;i++)</p><p> scanf("%s%s%f%f%f%f",stu[i].number,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);</
24、p><p><b> } </b></p><p> 刪除函數(shù)delscore()</p><p> 刪除某學(xué)生的信息,根據(jù)輸入的學(xué)號(hào),搜索所有學(xué)生信息找到該學(xué)號(hào)的信息并刪除,刪除的具體操作為結(jié)構(gòu)體整體賦值將后一位學(xué)生成績(jī)信息拷貝進(jìn)入前一位學(xué)生信息的存儲(chǔ)位置,刪除該學(xué)生信息后學(xué)生總數(shù)減一。算法描述如下:</p><p&g
25、t; void delscore() </p><p><b> { </b></p><p> int i,j,flog=0; </p><p> char m,a[10]; </p><p> system("cls"); </p><p> prin
26、tf("請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào)\n"); </p><p> scanf("%s",a);</p><p> for(i=0;i<n;i++) </p><p> if(strcmp(a,stu[i].number)==0) </p><p><b> { </b
27、></p><p><b> flog=1;</b></p><p> break; </p><p><b> }</b></p><p> if(flog==0)</p><p> printf("未找到該學(xué)生信息\n"); &
28、lt;/p><p><b> else</b></p><p> printf("是否刪除該學(xué)生成績(jī)(y/n)\n");</p><p> scanf("%s",&m);</p><p> if(m=='y') </p><p
29、><b> {</b></p><p> for(i;i<n-1;i++)</p><p> stu[i]=stu[i+1]; </p><p><b> n=n-1;</b></p><p> printf("刪除成績(jī)成功\n"); <
30、/p><p><b> } </b></p><p><b> else</b></p><p> printf("刪除成績(jī)失敗\n"); </p><p><b> } </b></p><p> 輸出(顯示)函數(shù)lo
31、okscore()</p><p> 輸出所保存的學(xué)生信息。先將信息數(shù)據(jù)按照某一元素進(jìn)行排序,這里按照總分從大到小排序并輸出所有學(xué)生信息。算法描述如下:</p><p> void lookscore() </p><p><b> { </b></p><p> int i,j,k; </p>
32、<p><b> STU t; </b></p><p> for(i=0;i<n-1;i++)</p><p><b> {</b></p><p> for(k=i,j=i+1;j<n;j++) </p><p> if(stu[j].sum>s
33、tu[k].sum)</p><p><b> k=j; </b></p><p><b> if(k!=j)</b></p><p><b> {</b></p><p> t=stu[k]; </p><p> stu[
34、k]=stu[i]; </p><p><b> stu[i]=t;</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("名次\t學(xué)號(hào)\t\t姓名\t語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\t理綜\t總
35、分\n"); </p><p> for(i=0;i<n;i++)</p><p> printf("%d\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,stu[i].number,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],st
36、u[i].score[3],stu[i].sum);</p><p><b> } </b></p><p> 查詢函數(shù)searchscore()</p><p> 根據(jù)學(xué)號(hào)查詢學(xué)生信息并輸出。算法描述如下:</p><p> void searchscore() </p><p>&l
37、t;b> {</b></p><p> char a[10]; </p><p> int i,j,flog=0; </p><p> system("cls"); </p><p> printf("請(qǐng)輸入需查詢的學(xué)生學(xué)號(hào)\n"); </p>&l
38、t;p> scanf("%s",a); </p><p> for(i=0;i<n;i++)</p><p> if(strcmp(a,stu[i].number)==0) </p><p><b> {</b></p><p><b> flog=1;<
39、/b></p><p> printf("名次\t學(xué)號(hào)\t\t姓名\t語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\t理綜\t總分\n");</p><p> printf("%d\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,stu[i].number,stu[i].name,stu[i].score[0],stu[i
40、].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum);</p><p> printf("\n"); </p><p><b> break;</b></p><p> if(flog==0)</p><p> printf(
41、"未找到該學(xué)生信息!");</p><p><b> } </b></p><p><b> 4.2實(shí)例應(yīng)用</b></p><p><b> 4.2.1問(wèn)題描述</b></p><p> 已知某班級(jí)學(xué)生入學(xué)成績(jī)?nèi)缦卤?,設(shè)計(jì)“學(xué)生成績(jī)管理系統(tǒng)”使
42、其具有以下功能:</p><p> ?。?) 能完成對(duì)學(xué)生成績(jī)的錄入 </p><p> ?。?) 能按班級(jí)統(tǒng)計(jì)學(xué)生的成績(jī),求學(xué)生的總分及平均分,排序 </p><p> ?。?) 能按班級(jí),學(xué)期輸出學(xué)生的成績(jī)單和不及格科目及學(xué)生名單 </p><p> ?。?) 能查詢單
43、個(gè)學(xué)生成績(jī) </p><p> ?。?) 能修改單個(gè)學(xué)生信息 </p><p> 表1 某班學(xué)生高考入學(xué)成績(jī)表</p><p><b> 4.2.2程序設(shè)計(jì)</b></p><p> 程序主要包括以下幾個(gè)模塊:1、成績(jī)錄入功能2、成績(jī)輸出功能3、成績(jī)查詢功能4、添加模塊5、刪除模塊6、
44、修改模塊7、保存功能 8、退出系統(tǒng)</p><p><b> 主程序流程圖如下:</b></p><p><b> 圖1</b></p><p><b> 4.2.3源代碼</b></p><p> #include<stdio.h> </p>
45、<p> #include<string.h> </p><p> #include<process.h> </p><p> #include<conio.h> </p><p> #define N 30 </p><p> #define M 4</p><p
46、> typedef struct student </p><p><b> {</b></p><p> char number[10]; </p><p> char name[20]; </p><p> float score[M]; </p><p> flo
47、at sum; </p><p><b> }STU; </b></p><p> STU stu[N]; </p><p> int n; </p><p> void menu() </p><p><b> { </b></p>
48、<p> system("cls"); </p><p> printf("\n"); </p><p> printf("*********歡迎進(jìn)入學(xué)生成績(jī)管理系統(tǒng)*************\n"); </p><p> printf("
49、 菜單 \n"); </p><p> printf("輸入成績(jī)-------------------------------------1\n"); </p><p> printf("查看成績(jī)及成績(jī)排序---------------------------2\n"); <
50、;/p><p> printf("查詢學(xué)生成績(jī)---------------------------------3\n"); </p><p> printf("修改成績(jī)-------------------------------------4\n"); </p><p> printf("添加成績(jī)----
51、---------------------------------5\n");</p><p> printf("刪除成績(jī)-------------------------------------6\n"); </p><p> printf("保存成績(jī)-------------------------------------7\n"
52、); </p><p> printf("退出系統(tǒng)-------------------------------------8\n"); </p><p> printf("**********************************************\n"); </p><p> printf(&
53、quot;請(qǐng)輸入您的選擇\n"); </p><p><b> }</b></p><p> /***************輸入各個(gè)同學(xué)的學(xué)生信息******************************/ </p><p> void inputscore() </p><p><b&g
54、t; {</b></p><p><b> int i,j;</b></p><p> system("cls");</p><p> printf("請(qǐng)輸入學(xué)生總數(shù):\n");</p><p> scanf("%d",&n);&l
55、t;/p><p> printf("提示:*輸入學(xué)號(hào)時(shí)請(qǐng)輸入位數(shù)為8位的數(shù)字*\n"); /*因二維表上下 需對(duì)正故有此要求*/</p><p> printf("請(qǐng)輸入學(xué)生的學(xué)號(hào) 姓名 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 理綜:\n"); </p><p> for(i=0;i<n;i++) </p><
56、p> scanf("%s %s %f %f %f %f",stu[i].number,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]); </p><p> printf("成功輸入\n"); </p>
57、;<p><b> } </b></p><p> /*****************計(jì)算各個(gè)同學(xué)的總分*****************************/ </p><p> void sumgescore() </p><p><b> { </b></p><p&
58、gt; int i,j; </p><p> for(i=0;i<n;i++) </p><p><b> { </b></p><p> stu[i].sum=0;</p><p> for(j=0;j<M;j++) </p><p> stu[i].sum+=
59、stu[i].score[j];</p><p><b> }</b></p><p><b> }</b></p><p> /************查看學(xué)生成績(jī)及根據(jù)總分對(duì)學(xué)生進(jìn)行排序*********************/ </p><p> void lookscore() &
60、lt;/p><p><b> { </b></p><p> int i,j,k; </p><p><b> STU t; </b></p><p> sumgescore();</p><p> system("cls"); &l
61、t;/p><p> for(i=0;i<n-1;i++)</p><p><b> {</b></p><p> for(k=i,j=i+1;j<n;j++) </p><p> if(stu[j].sum>stu[k].sum)</p><p><b>
62、k=j; </b></p><p><b> if(k!=j)</b></p><p><b> {</b></p><p> t=stu[k]; </p><p> stu[k]=stu[i]; </p><p><b
63、> stu[i]=t;</b></p><p><b> }</b></p><p><b> }</b></p><p> printf("名次\t學(xué)號(hào)\t\t姓名\t語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\t理綜\t總分\n"); </p><p> for(i=
64、0;i<n;i++)</p><p> printf("%d\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,stu[i].number,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum);</p><
65、p><b> } </b></p><p> /*****************通過(guò)輸入學(xué)號(hào)查找學(xué)生成績(jī)***************************/ </p><p> void searchscore() </p><p><b> {</b></p><p> c
66、har a[10]; </p><p> int i,j,flog=0; </p><p> system("cls"); </p><p> printf("請(qǐng)輸入需查詢的學(xué)生學(xué)號(hào)\n"); </p><p> scanf("%s",a); </p>
67、;<p> for(i=0;i<n;i++)</p><p> if(strcmp(a,stu[i].number)==0) </p><p><b> {</b></p><p><b> flog=1;</b></p><p> printf("名次
68、\t學(xué)號(hào)\t\t姓名\t語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\t理綜\t總分\n");</p><p> printf("%d\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,stu[i].number,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],s
69、tu[i].sum);</p><p> printf("\n"); </p><p> break; /*找到該學(xué)生成績(jī)信息后跳出for循環(huán)*/</p><p><b> } </b></p><p> if(flog==0)</p><p&
70、gt; printf("未找到該學(xué)生信息!");</p><p><b> } </b></p><p> /***************修改學(xué)生成績(jī)*****************/</p><p> void modify() </p><p><b> { </
71、b></p><p> char a[10]; </p><p> int i,j,flog=0; </p><p> system("cls"); </p><p> printf("請(qǐng)輸入需要修改成績(jī)的學(xué)生學(xué)號(hào)\n"); </p><p> sca
72、nf("%s",a); </p><p> for(i=0;i<n;i++)</p><p> if(strcmp(a,stu[i].number)==0) </p><p><b> {</b></p><p><b> flog=1;</b></p
73、><p> printf("名次\t學(xué)號(hào)\t\t姓名\t語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\t理綜\t總分\n");</p><p> printf("%d\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,stu[i].number,stu[i].name,stu[i].score[0],stu[i].score[1],s
74、tu[i].score[2],stu[i].score[3],stu[i].sum);</p><p> printf("\n");</p><p><b> break;</b></p><p><b> }</b></p><p> if(flog==1)</p
75、><p><b> {</b></p><p> printf("請(qǐng)重新輸入該學(xué)生的學(xué)號(hào) 姓名 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 理綜:\n");</p><p> scanf("%s %s %f %f %f %f",stu[i].number,stu[i].name,&stu[i].score[0],&
76、;stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);</p><p> printf("修改成功\n"); </p><p><b> }</b></p><p><b> else</b></p><p>
77、; printf("未找到該學(xué)生信息\n");</p><p><b> } </b></p><p> /*****************添加學(xué)生成績(jī)********************/ </p><p> void add()</p><p><b> {</b
78、></p><p> int a,i,j; </p><p> system("cls"); </p><p> printf("請(qǐng)輸入新增加的學(xué)生人數(shù):\n"); </p><p> scanf("%d",&a); </p><p
79、><b> n=n+a;</b></p><p> printf("請(qǐng)輸入添加的學(xué)生的學(xué)號(hào) 姓名 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 理綜:\n");</p><p> for(i=n-a;i<n;i++)</p><p> scanf("%s %s %f %f %f %f",stu[i].number
80、,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);</p><p> printf("添加成功\n"); </p><p><b> } </b></p><p> /**
81、*****************刪除學(xué)生成績(jī)*************************/ </p><p> void delscore() </p><p><b> { </b></p><p> int i,j,flog=0; </p><p> char m,a[10]; </p&g
82、t;<p> system("cls"); </p><p> printf("請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào)\n"); </p><p> scanf("%s",a);</p><p> for(i=0;i<n;i++) </p><p> if(st
83、rcmp(a,stu[i].number)==0) </p><p><b> { </b></p><p><b> flog=1;</b></p><p> printf("名次\t學(xué)號(hào)\t\t姓名\t語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\t理綜\t總分\n");</p><p>
84、; printf("%d\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,stu[i].number,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum);</p><p> printf("\n");<
85、;/p><p> break; </p><p><b> }</b></p><p> if(flog==0)</p><p> printf("未找到該學(xué)生信息\n"); </p><p><b> else</b></p>
86、<p> printf("是否刪除該學(xué)生成績(jī)(y/n)\n");</p><p> scanf("%s",&m);</p><p> if(m=='y') </p><p><b> {</b></p><p> for(i;i
87、<n-1;i++)</p><p> stu[i]=stu[i+1]; /*結(jié)構(gòu)體整體賦值將后一位學(xué)生成績(jī)信息拷貝進(jìn)入前一位學(xué)生信息的存儲(chǔ)位置*/ </p><p> n=n-1; /*刪除該學(xué)生信息后學(xué)生總數(shù)減一 */ </p><p> printf("刪除成績(jī)成功
88、\n"); </p><p><b> } </b></p><p><b> else</b></p><p> printf("刪除成績(jī)失敗\n"); </p><p><b> } </b></p><
89、;p> /******************保存學(xué)生成績(jī)************************/ </p><p> void savescore() </p><p><b> {</b></p><p> FILE *fp; </p><p> int i,flag=1; </
90、p><p><b> char m;</b></p><p> system("cls"); </p><p> puts("是否保存學(xué)生成績(jī)(y/n)");</p><p> scanf("%s",&m); </p><
91、;p> if(m=='y') </p><p><b> { </b></p><p> if((fp=fopen("score.dat","wb"))==NULL) </p><p><b> {</b></p><p>
92、; printf("文件打開(kāi)失敗\n"); </p><p> return; </p><p><b> }</b></p><p> for(i=0;i<n;i++)</p><p> if(fwrite(&stu[i],sizeof(struct studen
93、t),1,fp)!=1) </p><p><b> { </b></p><p> printf("保存失敗\n");</p><p> flag=0; </p><p><b> } </b></p><p> if(flag==
94、1)</p><p> printf("保存成功!\n");</p><p> fclose(fp); </p><p><b> } </b></p><p><b> else</b></p><p><b> return;
95、</b></p><p><b> }</b></p><p> void main() </p><p><b> { </b></p><p> short int flag=0; </p><p><b> menu(); </
96、b></p><p><b> do </b></p><p><b> {</b></p><p> flag=1; </p><p> switch(getch()) </p><p><b> { </b></p
97、><p> case '1' : inputscore();break; /*輸入成績(jī)*/ </p><p> case '2' : lookscore();break; /*查看成績(jī)*/ </p><p> case '3' : searchscore();break; /
98、*查找成績(jī)*/ </p><p> case '4' : modify();break; /*修改成績(jī)*/ </p><p> case '5' : add();break; /*添加成績(jī)*/ </p><p> case '6' : delscor
99、e();break; /*刪除成績(jī)*/ </p><p> case '7' : savescore();break; /*保存成績(jī)*/ </p><p> case '8' :exit(0); /*退出程序*/ </p><p> default
100、 : printf("輸入有誤\n"); </p><p><b> } </b></p><p> printf("按任意鍵繼續(xù)\n"); </p><p> getch(); </p><p><b> menu(); </b&g
101、t;</p><p><b> }</b></p><p> while (flag==1); </p><p><b> } </b></p><p><b> 4.2.4程序運(yùn)行</b></p><p><b> 運(yùn)行開(kāi)始(如圖
102、2)</b></p><p><b> 圖2</b></p><p> 選擇1輸入學(xué)生信息(如圖3)</p><p><b> 圖3</b></p><p> 選擇2按總分排序并查看總體情況(如圖4)</p><p><b> 圖4</b
103、></p><p> 選擇3查詢某同學(xué)的成績(jī)(如圖5)</p><p><b> 圖5</b></p><p> 選擇4修改學(xué)生成績(jī)(如圖6)</p><p><b> 圖6</b></p><p> 選擇5添加學(xué)生成績(jī)(如圖7)</p><
104、;p><b> 圖7</b></p><p> 選擇2查看添加后的成績(jī)情況(如圖8)</p><p><b> 圖8</b></p><p> 選擇6刪除某學(xué)生成績(jī)(如圖9)</p><p><b> 圖9</b></p><p> 選
105、擇8退出系統(tǒng)(如圖10)</p><p><b> 圖10</b></p><p><b> 五、總結(jié)</b></p><p> 本次課程設(shè)計(jì)實(shí)在學(xué)習(xí)并掌握了簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)與算法的基礎(chǔ)上對(duì)數(shù)據(jù)結(jié)構(gòu)的應(yīng)用,數(shù)據(jù)結(jié)構(gòu)形式多樣,我們需要在一些簡(jiǎn)單的結(jié)構(gòu)的基礎(chǔ)上對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行修改以便解決實(shí)際生活中的不同問(wèn)題。根據(jù)不同的實(shí)際問(wèn)題
106、選擇不同的數(shù)據(jù)結(jié)構(gòu)是解決實(shí)際問(wèn)題的基礎(chǔ)?;仡櫰鸫舜握n程設(shè)計(jì),我感慨頗多,的確,從拿到題目到完成整個(gè)編程,從理論到實(shí)踐,可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到
107、問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說(shuō)結(jié)構(gòu)體……通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)熟悉了,本次課程設(shè)計(jì)結(jié)束了,我們通過(guò)這次實(shí)踐學(xué)到了許多知識(shí)。學(xué)到了設(shè)計(jì)一個(gè)簡(jiǎn)單的系統(tǒng)。要注意哪些方面。也使我們知道自己哪些方面做得還不夠。編寫(xiě)程序是件</p><p> 要熟練掌握課本知識(shí),并
108、且能在理解的基礎(chǔ)上加以創(chuàng)新;</p><p> 在做整個(gè)課程設(shè)計(jì)之前應(yīng)該對(duì)問(wèn)題進(jìn)行系統(tǒng)的分析,確定總體思路;</p><p> 將總?cè)蝿?wù)分解為幾個(gè)不同的板塊,逐個(gè)擊破;</p><p> 要有足夠的耐心和細(xì)心,堅(jiān)持不懈。</p><p><b> 參考文獻(xiàn)</b></p><p> [1
109、]寧正元·賴賢偉· 算法與數(shù)據(jù)結(jié)構(gòu)(第二版)· 清華大學(xué)出版社</p><p> [2]黃思先·劉必雄· 程序設(shè)計(jì)基礎(chǔ)教程(C語(yǔ)言版)· 科學(xué)出版社</p><p> [3]譚浩強(qiáng)· C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第三版) . 北京:清華大學(xué)出版社, 2005</p><p><b>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----huffman編碼
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用(算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---數(shù)據(jù)結(jié)構(gòu)相關(guān)算法的演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--- 數(shù)據(jù)結(jié)構(gòu)各章算法的演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)迷宮課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論