


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C/C+程序設(shè)計課程設(shè)計報告專 業(yè):電子信息科學(xué)與技術(shù)班 級: 08 級一班學(xué) 號: 2姓 名: 張玉印版本號: 32018-07-20時 間 :目錄1 概述 11.1 目的 11.2 計劃 22 課程設(shè)計過程及結(jié)果 22.1 編程環(huán)境及工具 22.2 排序與簡單分析 22.3 綜合設(shè)計 32.3.1 功能實現(xiàn) 32.3.2 程序異常處理 62.3.3 特色功能 73 課程設(shè)計總結(jié) 73.1 課程設(shè)計計劃執(zhí)行情況 73.2 我理解的 C+ 83.3 改進設(shè)想 8附錄關(guān)鍵代碼 8原創(chuàng)聲明:本課程設(shè)計報告及相應(yīng)的軟件程序的全部內(nèi)容均為本人獨立完 成,如有抄襲,愿承擔(dān)相應(yīng)后果。聲明人:張玉印學(xué)號:2
2、1概述1.1目的C/C+獨立完成回顧并加深對C/C+程序設(shè)計相關(guān)知識的理解,能夠用 簡單數(shù)據(jù)管理軟件的編寫。1.2 計劃看到這些C/C+的設(shè)計題目,首先想到要用 C做因為C+畢竟沒有學(xué)過,要在這么短的時間內(nèi)學(xué)好 C+,并能運用自如做出這么大的題目有點困難。首先,溫習(xí)一下C語言課本,重拾一下當時學(xué) C時的好的思想和方法。再者,拿出一下午和晚上的時間做完排序題目。1.2.4 最后,拿出全部精力攻克學(xué)生成績管理軟件編程。1.2.5 寫實驗報告2 課程設(shè)計過程及結(jié)果2.1編程環(huán)境及工具2.1.1 環(huán)境變量的應(yīng)用和設(shè)置2 . 1 . 2批處理及命令行編譯2.1.3 C/C+項目的組成,軟件開發(fā)環(huán)境的使用
3、,重點掌握軟件調(diào)試。2.2 排序與簡單分析簡單分析:題目是 “把一個完全由小寫字母組成字符串按照每個字母的出現(xiàn)次數(shù) 從低到高重新排序”。首先分析題目要求的是字母,而且是小寫字母,不同字母出現(xiàn) 的次數(shù)相同的在一起并按字母表順序排列,出現(xiàn)次數(shù)越多越靠后,如 aassdfkjiowea 回 車后變成 defijkowssaaa。程序設(shè)計思路:首先對輸入的字符串用比較法進行排序,然后從前往后找字母個數(shù) 分別為1, 2, 3, 4, 5直到N的字符,輸出即可。因為字母是事先排好序的,所以從前往后輸出字母的順序是字母表順序。2.3綜合設(shè)計功能實現(xiàn)文件讀入fsca nf(文件指針,格式字符串,輸入表列>
4、; ;文件的讀入是fscanf的應(yīng)用。首先在項目文件夾中建立一個文本文件,fscanf以“r” <只讀方式)打開這個文本文件,并將這個文本文件中的內(nèi)容以空格鍵為分隔符讀 入內(nèi)存中。讀入程序如下圖:FILE Rfi=fopen("A .txt*'RfiFopen;ftC=Fopen("C;For(i=0;i<H;i+)FscanF(RA,studi nun.studi .na(«etstudi .sexvstudi .clas);For(i=fl;i<M;i+)Fscanf (RBpcoui .cnun,ane,Ekcoul.
5、credit);for<i->i<V;i+)f scanffRC ,stus i _nun),stusi .cnun,&stusi .score) ;|ftlose(RA); fclose(RB);Fclose(RC);尸亠» X信息顯示信息顯示同樣是fscanf函數(shù)的應(yīng) 用,首先將文件中的數(shù)據(jù)讀入內(nèi)存 中,然后用標準輸出函數(shù)printf輸出,學(xué)生信息表的信息輸出如右圖, 編寫的程序如下圖,成績表顯示時其 中的課程號要換成課程名稱輸出。畋學(xué)生信息文件”學(xué)號姓名 性別 班級200801200U02200804200U05200806王立 王五 劉建 睜文 辭文
6、測拴機電 eta "7. 甩十二電子一站伸生信息衰顯示函廳<FILE int i: if(fp-Fcpen("ft. tJCf /r" )-NHLL) printFC'Cnnt open this FiletVn");Bllt(D);卜printFCn學(xué)生信息文件”n、n 學(xué)號 姓名 性別班級、nn"Fp=Fopen(B'fi-txt"F0r(i=B;i<P;l+)FscanF(iFp.1R.Stlidi -nuRl!stUdi .nam.Studivstudi ,clas):printf (5%9s%7s
7、%10sn'stucfi .nunstudEi .name .studfi .sex.studi .clas);fclose(fp>:此功能遇到的問題:用fscanf函數(shù)時寫入浮點數(shù)成績時,只能寫成如下格式:fscan f(p2,"%s%s%f",stusi. nu m,stusi.c num,&stusi.score。而不能寫成:fsca nf(p2,"%s%s%.1f",stusi. nu m,um,&stusi.score。否則將顯示一團亂碼。數(shù)據(jù)錄入fprintf(文件指針,格式字符串,輸入列表;fp
8、rintf函數(shù)和fscanf函數(shù)都是格式化讀寫函數(shù),對象都是磁盤文件。Fprintf和fscanf功能相反,它是把內(nèi)存中的數(shù)據(jù)寫到文件型指針fp指定的文件上去。首先用fopen函數(shù)以“ w”方式打開文件,如果沒有此文件就以該文件名在項目文件夾中新建 一個文件。數(shù)據(jù)錄入的設(shè)計思路是:在屏 幕中輸入一條記錄,通過scanf函數(shù)寫入結(jié)構(gòu)體 < 即內(nèi)存)中,再通過 fprintf函數(shù)把內(nèi)存中的數(shù)據(jù)輸出到指 定的文件中。注意輸入時要做一下判斷,判 斷輸入的學(xué)號是否是學(xué)生表中存在 的數(shù)據(jù),如是在學(xué)生表中不存在則 不往內(nèi)存中輸,屏幕打印“ error num in put! ”,需重新輸入。輸入的 課
9、程號和輸入學(xué)號一樣需做一下判 斷。再者成績文件打開時要以文本 追加形式打開,也可以用讀寫文本 形式打開,再用指針定位到文件末尾進行數(shù)據(jù)錄入。輸入完成后可以查看輸入后的學(xué)成成績表,如 圖。數(shù)據(jù)錄入的部分主要程序如下所示:p2=fopen("C.txt","r+">。fseek(p2,0,2>。對文件的追加 for(i=0,c=' '。 c=' '。i+>printf("n輸入學(xué)生的成績記錄:n學(xué)號:"。 for(j=0。 j=0。 >sca nf("%s",st
10、usi. num>。for(k=0 o k<N。 k+>if(strcmp(stusi. nu m,studk. num>=0> j=1 oif(j=1>breakoelseprintf("error num input!"> 。printf("課程號:">。 for(j=0。j=0。> sca nf("%s",stusi.c num>。for(k=0 o k<N。 k+>if(strcmp(stusi.c num ,couk.c num>=0> j=
11、1 oif(j=1>elsebreak。printf("error num input!"> 。printf("成績:">。scanf("%f",&stusi.score>。fprintf(p2,"%4s%4s %.1f n",stusi.num,um,stusi.score>。 L=L+1 。printf("n*<繼續(xù)錄入按空格鍵確認>*n">。c=getch(>。 fclose(p2>。成績查詢成績查詢是文件
12、中的數(shù)據(jù)輸入數(shù)據(jù)區(qū)后,進行的一系列邏輯性的查找。通過輸入學(xué)號進入事先 定義的字符型數(shù)組,然后通過在“C.txt ”中查找該學(xué)號的學(xué)生所修課程的成績輸出。改程序的算法為:Stepl:用scanf函數(shù)將文件中的數(shù)據(jù)導(dǎo)入內(nèi)存數(shù)據(jù)區(qū)中;Step2:定義字符型數(shù)組存儲輸入的學(xué)生 學(xué)號;Step3:輸入學(xué)號在文件3中查找是否有 相同的字符串,若有則執(zhí)行 step4,若無則執(zhí) 行 step ;Step4:通過學(xué)號在文件1中查找到該生的姓名班級輸出;Step5:通過學(xué)號找到對應(yīng)的課程號,在 文件2中找到相對應(yīng)的課程名稱和相應(yīng)的學(xué) 分。課程名稱輸出,學(xué)分要根據(jù)文件3中所得的分數(shù)輸出,如果分數(shù)小于60分則輸出實得
13、學(xué)分為0,如果分數(shù)大于 60,則學(xué)分按原樣輸出,執(zhí)行step7;Step6:輸出“該學(xué)生無修課程記錄請重新輸入學(xué)號”;Step7:輸入一個字符判斷該字符是否為空格鍵,若是的則跳到step3,否則往下執(zhí)行;Step8:算法結(jié)束。對指定的課程的成績排序功能<1><2> <3> <4> <5> <&> <7)出進入功能t請輪入要查砌學(xué)號:Z00S04I*:苜|(zhì)ra|F0石科Hs.-ns i h - h - 1 -_1X 名名名名腫 程fl 0 0 V A B -b B 97 gg 舊 9此功能的算法為:Stepl
14、:建立一個整型數(shù)組和一個字符型數(shù)組;Step2:輸入課程號存在字符型數(shù)組中;Step3:將字符型數(shù)組中的字符串和文件 把此結(jié)構(gòu)體的標號記下來存到整形 數(shù)組中;Step4:用整形數(shù)組的值作為文件3結(jié)構(gòu)體的標號,在文件 3中找相同 的值,若存在相同的值則執(zhí)行step5,否則執(zhí)行step ;Step5 :,進行比較為此標號的分3中的課程號進行比較,如果有相同的字符串則<1><2><3><4><5><6><進入功能行:*青輸入課程號:C01名軽為;喊大學(xué)英語乂吃科目的相芙成鎬為;99.0 2H0804劉建軟件一<1&g
15、t;<2><3><4><5>>丄為* <6的齧 能.名成 功*W 入程課相 逬課的的 人號目 科99,091.7SS.078.072.0S&.02008R5 2008(3 200&06 200&05 2008Q4二一二二一二 件子子尹子件 電電電軟 建文文文戈建 劉數(shù),比較法進行從大到小排列輸出;Step6:根據(jù)文件 3中的課程名找到相應(yīng)的學(xué)號,找到學(xué)號后在文件1中輸出對應(yīng)的姓名;Step7:根據(jù)文件3中的課程號在文件 2中找到相應(yīng)的課程名輸出,執(zhí)行step9;Step8:輸出"*!無此課程的相關(guān)記錄
16、 * ”;Step9:輸入一個字符,判斷是不是空格鍵若是則返回step2;否則輸出“ *此功能已退出! * ”,算法結(jié)束。對成績記錄的刪除設(shè)計思路:要想刪除文件中的數(shù)據(jù),首先以只讀方式“r”打開,將這個文件中的數(shù)據(jù)輸入內(nèi)存中關(guān)閉文件型指針,然后以只讀方式“w”打開此時文件為空文件),然后將內(nèi)存中的和要刪除的數(shù)據(jù)不相同的記錄再輸出到文件,即可完成刪除。此功能設(shè)計算法:Stepl:將文本中的數(shù)據(jù)輸入內(nèi)存中;Step2:將該文本刪除后重新建立,創(chuàng)建字符型數(shù)組。Step3:要是刪除學(xué)生記錄,則輸入學(xué)號,在文件1中逐個查找當學(xué)號和文件1中的記錄不相同時輸出到文件中;在文件3中查找當文件3中的數(shù)據(jù)和輸入時
17、學(xué)號不相同時導(dǎo)出到文件3中;Step4:要是刪除課程中的記錄,則采用相同的方法在文件2和文件3中查找,不相同時重新導(dǎo)出到相應(yīng)的文件中;Step5:接收一個字符,判斷是不是空格鍵,若是則返回step2Step6:判斷是否打印已經(jīng)刪除后的文件,若是則把相應(yīng)的文件打印出來,結(jié)束;否則不打印, 算法結(jié)束。保存功能叱按空格鍵纟悵續(xù)執(zhí)行刪除功能”*是否繼續(xù)執(zhí)行其他菜卑功能.按空格犍確認用*系統(tǒng)已退出丹,是否保存操作:否是*文件未保存設(shè)計思路:重新建立三個文件 用來存放上次操作后保存的數(shù)據(jù), 當執(zhí)行保存功能時因為原來的文件 已經(jīng)在操作中更改,故不需任何操 作推出即可;當不執(zhí)行保存功能 時,因為要恢復(fù)上次操作
18、后 及本次 操作前的數(shù)據(jù)),就可以把新建的 三個文件中的數(shù)據(jù)重新輸出到本次 操作的文件中即可完成不保存。232程序異常處理指針定位問題:如果用fopen打開文件往內(nèi)存中輸入數(shù)據(jù)后,此時文件型指針已經(jīng) 指向末尾,若此時再想調(diào)用文件中的數(shù)據(jù)就會出錯,必須再關(guān)閉文件再打開或者使用 文件型指針定位使文件指針指向文件開頭。刪除功能問題:刪除時當輸入的數(shù)據(jù)較少時該功能能夠準確無誤的把刪除后的數(shù)據(jù) 輸出到文件夾中,并能正確顯示;當刪除數(shù)據(jù)較多時如刪到五個以上時就會出現(xiàn)問 題,其實輸出到文件中的數(shù)據(jù)沒有問題,顯示時就會有少的數(shù)據(jù)。成績錄入功能問題:該功能存在和刪除功能同樣的問題,當文件中的成績記錄小于20時該
19、功能能夠成功錄入,并能正確顯示,超過 20條記錄時,就會出現(xiàn)如下圖的對話 框,我知道這是內(nèi)存分配問題導(dǎo)致的,但始終未能改出來。學(xué)生管理.eXe L應(yīng)用程序錯誤"000405164"指令引用的*0x00003630*內(nèi)存松該內(nèi)存不能為* wr it tgr/' *棗綏止程序”請單擊“確定” °要調(diào)試程序,諸單擊審取消"°確定 | 取消特色功能界面友好:功能菜單選擇時,看到大部分學(xué)生的程序運行時,遇到需要選擇的情況 就要輸入功能但后的數(shù)字,通過 switch(語句進行轉(zhuǎn)換到相應(yīng)的功能,感到很乏味就想 到了本程序的選擇法,運用了轉(zhuǎn)義字符“r”
20、的回車不換行功能,用 Tab鍵實現(xiàn)跳格也可以換成其他鍵的 ASCII )。選擇時就只需按一個鍵 如Tab鍵)選擇相應(yīng)的功能再 按回車鍵就行了,無需滿鍵盤找相應(yīng)的字母按,這種方式實現(xiàn)了操作界面友好。進入菜單時,有幾個光標閃幾下才能進入功能菜單,這運用了時間延遲函數(shù),老師 您驗程序時很生氣地說我是故意的,說實在的我是怕您看不到,之前故意把閃動次數(shù) 調(diào)大的。這個設(shè)計對我這樣的小程序無疑是毫無用處,我想對以后編的大程序是不是 會有一定的緩沖作用,再此只是表明了我的一個想法。能夠完成保存功能:未想到用保存功能之前,添加或刪除時總是在操作前備份一 次,操作后在復(fù)制進去,這樣很是麻煩,想到程序運行結(jié)束時能不
21、能自己把原來操作 前的數(shù)據(jù)再導(dǎo)進已經(jīng)操作的文件中去。保存函數(shù)功能是:刪除數(shù)據(jù)或者添加數(shù)據(jù)時如 果添加錯了或刪除錯了能夠恢復(fù)原來的數(shù)據(jù)即不保存。3課程設(shè)計總結(jié)此次課程設(shè)計不僅讓我們回顧了 C語言,也讓我們更好的了解 C語言的應(yīng)用和編 程方法,尤其是最后一道編程題,雖然編的程序不盡是非常完美,但讓我學(xué)到了很多 東西。猛然發(fā)現(xiàn)當初在課堂上學(xué)到的還不到C的一個角,C語言的許多功能都未曾涉及到。上課時編的程序最多不過五十行,如今編的程序竟然達到五六百行,這是當時 想都沒有想到的。以前看到的那些眼花繚亂的程序我也可以實現(xiàn),心中莫名升起一種 自豪感。軟件各功能之間除基礎(chǔ)的之外幾乎沒有什么聯(lián)系,這讓我明白了各
22、大公司為 什么分模塊編程,有的功能很好而有的功能不是很完美,這也許是軟件之間的優(yōu)異性 所在吧。以前覺得文件是很高級的編程方法,如今用起來也能得心應(yīng)手,對該軟件的編程 就用了 fscanf和fprintf兩個函數(shù),其余的都是邏輯設(shè)計方面的問題。這種設(shè)計不僅讓我 學(xué)到了許多東西,而且讓我開闊了視野,這個軟件的程序除了一個函數(shù)getch(網(wǎng)上搜的之外其余都是自己編的。讓我大為獲益的一點是C可以調(diào)用其他方面的功能或轉(zhuǎn)換成其他功能,比如轉(zhuǎn)換成 DOS功能,以后要對C語言多多學(xué)習(xí)來更好的掌握它。看 到其他同學(xué)編的軟件,有密碼和計算平均分的功能,3.1課程設(shè)計計劃執(zhí)行情況各項計劃都進行的挺順利,只是時間來不
23、及了書沒看完就去編程,轉(zhuǎn)換方法編程序時哪里不會就去找課本和資料。3.2 我理解的 C+C+ 是比 C 更高級的語言。主流的 3 種操作系統(tǒng) Windows,Linux,Unix, 內(nèi)核都是用 C 語言和匯編寫的,上層高 級特性是用 C+ 寫的。我們玩的許多游戲如魔獸等都是用C+ 編寫的。3.3 改進設(shè)想3.3.1 查詢功能該功能不能計算平均分,設(shè)想能夠計算出查詢出來的成績的平均分,并能夠?qū)崿F(xiàn) 把查詢出的成績記錄從大到小和從小到大排列之間切換。3.3.2 具有統(tǒng)計和防錯功能能夠識別出輸入的是字符還是數(shù)字,以至于在輸入學(xué)號時給與提示輸入字符還是數(shù) 字,使界面更加友好。能夠統(tǒng)計出各個文件中的記錄,比
24、如說分宿舍時需要統(tǒng)計出學(xué)生數(shù)量就可以調(diào)用此 功能。3.3.3 保存功能的該進在軟件現(xiàn)有保存功能的基礎(chǔ)上在增加保存時可以把操作的文件在存儲到未操作的文 件中,這樣就使備用的未操作文件組保存,成為下一次操作的源文件,這一設(shè)計思路 未能設(shè)計的原因是:即使保存文件操作后,因為程序中存在宏定義的值,這個值不能 改變。此次設(shè)想定義全局變量,把上次運算的值記在文件中攻下一次調(diào)用,這樣就可 以實現(xiàn)真正意義上的保存功能了。附錄 關(guān)鍵代碼排序程序#include<stdio.h>#include<string.h># define N 255int M 。void main(>int
25、 i,j,k,t 。char aN 。printf(" 請輸入小于 %d 個小寫字母: n",N> 。scanf("%s",a> 。M=strlen(a> 。for(i=0 。 i<M 。 i+>for(j=i。j<M。j+>if(ai>aj>k=ai 。ai=aj 。aj=k 。printf("n"> 。for(t=1 。 t<=M 。 t+>for(i=0 。 i<M 。 i+=k>k=0。for(j=i。j<M。j+>if(aj=ai
26、>k+ 。if(k=t>for(j=1 。 j<=t 。 j+> printf("%c",ai> 。printf("n"> 。學(xué)生成績管理軟件程序#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define N 6#define M 6#define Y 12int P=N,Q=M,L=Y 。struct studentchar num20 。char name20 。char
27、sex20 。char clas20 。studN 。struct coursechar cnum20 。char cname20 。int credit 。couM 。struct stuscorechar num20 。char cnum20 。 float score 。stusY 。void Delete(>/ 刪除函數(shù)int i,t=0,s=0,m=1,c,f=N,g=Y 。char a20 。void xstu(> 。void score(> 。FILE *DA,*DB,*DC 。DA=fopen("A.txt","r"&g
28、t; 。 DB=fopen("B.txt","r"> 。 DC=fopen("C.txt","r"> 。 for(i=0 。 i<P。 i+> fscanf(DA,"%s%s%s%s",studi.num,,studi.sex,studi.clas> 。for(i=0 。 i<Q。 i+> fscanf(DB,"%s%s%d",um,ame,&coui.credit> 。f
29、or(i=0 。 i<L 。 i+> fscanf(DC,"%s%s%f",stusi.num,um,&stusi.score> 。fclose(DA> 。fclose(DB> 。fclose(DC> 。for(c=' '。c=''。> printf("n *< 刪除學(xué)生記錄 >* *< 刪除課程記錄 >*n"> 。 /對學(xué)生記錄和課程記 錄進行選擇刪除for(m=9,s=0 。 m=9 。 s+> if(m=9>
30、if(s%2=0> printf("*r">。if(s%2=1>printf("* r">。 printf("n"> 。m=getch(> 。if(m='r'>if(s%2=0>/ 刪除學(xué)生記錄printf("*n">printf(" 請輸入要刪除的學(xué)生學(xué)號: "> 。DA=fopen("A.txt","w"> 。 /換成 W 后新建刪除后的新文件 / fseek(RA,0,
31、2> 。 /刪除后的數(shù)放在原有數(shù)據(jù)后 scanf("%s",a> 。for(i=0 。 i<f 。 i+>if(strcmp(a,studi.num>!=0>fprintf(DA,"%10s%10s%10s%10sn",studi.num,,studi.sex,studi.clas>elseP=P-1。DC=fopen("C.txt","w">。fseek(RC,0,2>。 刪除后的數(shù)放在原有數(shù)據(jù)后for(i=0 。 i<g 。 i+&
32、gt;if(strcmp(a,stusi.num>!=0>fprintf(DC,"%10s%10s %.1fn",stusi.num,um,stusi.score>L=L-1 。! 該 學(xué) 號 及 相 關(guān) 記 錄。已經(jīng)刪else printf("nn 除 !n*n">fclose(DA> 。 fclose(DC> 。 xstu(> 。 score(> 。if(s%2=1>/ 刪除課程記錄printf("n *< 按空格鍵繼續(xù)執(zhí)行刪除功能 >*nn">
33、; 。 c=getch(> 。if(c=' '>f=f-1 。 g=g-1。void in(>/ 成績錄入函數(shù)FILE *p2,*iA,*iB 。int i,j,k,c,m,t 。void score(> 。p2=fopen("C.txt","r"> 。 iA=fopen("A.txt","r"> 。 iB=fopen("B.txt","r"> 。for(i=0 。 i<N。 i+> fscanf(iA,&
34、quot;%s%s%s%s",studi.num,,studi.sex,studi.clas> 。for(i=0 。 i<M 。 i+> fscanf(iB,"%s%s%d",um,ame,&coui.credit> 。for(i=0 。 i<Y 。 i+> fscanf(p2,"%s%s%f",stusi.num,um,&stusi.score> 。fclose(p2> 。 fclose(iA> 。 fclos
35、e(iB> 。p2=fopen("C.txt","r+"> 。fseek(p2,0,2> 。 /對文件的追加for(i=0,c=' ' 。 c=' '。 i+>printf("n 輸入學(xué)生的成績記錄: n 學(xué)號: "> 。for(j=0 。 j=0 。 >scanf("%s",stusi.num> 。for(k=0 。 k<N 。 k+>if(strcmp(stusi.num,studk.num>=0>j=1 。if(
36、j=1>break。elseprintf("error num input!"> 。printf(" 課程號: "> 。for(j=0 。 j=0 。 >scanf("%s",um> 。for(k=0 。 k<N 。 k+> if(strcmp(um,um>=0> j=1 。if(j=1>break。elseprintf("error num input!"> 。printf(" 成績: &qu
37、ot;> 。scanf("%f",&stusi.score> 。fprintf(p2,"%4s%4s %.1f n",stusi.num,um,stusi.score> 。L=L+1 。printf("n *< 繼續(xù)錄入按空格鍵確認 >*n"> 。 c=getch(> 。fclose(p2> 。printf("n *< 添加 %d 條記錄成功,是否查看成績表 >*nn",i> 。printf(”< 是 ><
38、否 >n">。for(m=0,t=9。m>=0。m+>if(t=9>if(m%2=0>printf(" *r"> 。if(m%2=1>printf("*r"> 。t=getch(> 。if(t='r'>if(m%2=0>score(>。break 。if(m%2=1>break 。printf(" *< 此功能已經(jīng)退出 >*nn"> 。void Research(>/ 查詢函數(shù) <注意:設(shè)置多次查
39、詢 >int i,k,t=0,s=0,j 。char a20,m=' '。FILE *RA,*RB,*RC 。RA=fopen("A.txt","r"> 。 RB=fopen("B.txt","r"> 。 RC=fopen("C.txt","r"> 。for(i=0 。 i<P。 i+>fscanf(RA,"%s%s%s%s",studi.num,,studi.sex,studi.cl
40、as> 。for(i=0 。 i<Q。 i+>fscanf(RB,"%s%s%d",um,ame,&coui.credit> 。for(i=0 。 i<L 。 i+>fscanf(RC,"%s%s%f',stusi.num,um,&stusi.score>。/以.1f 格式輸有誤for( 。 m=' '。 t=0,s=0>printf("n 請輸入要查詢的學(xué)號: ">。scanf("%s"
41、,a> 。for(i=0,j=0 。 i<L 。 i+>/7 if(strcmp(a,stusi.num>=0>j=1 。if(j=1> /6for(i=0 。 i<P 。 i+> if(strcmp(a,studi.num>=0>*n">break。printf(printf(" 姓名: %sn",> 。for(k=0 。 k<L 。 k+> /5if(strcmp(a,stusk.num>=0>/4printf("* 課程號: %s&q
42、uot;,um> 。 s+。for(i=0 。 i<Q 。 i+>/3if(strcmp(um,um>=0>/2printf(" 課程名稱: %s 成 績: %.1f",ame,stusk.score> 。if(stusk.score>=60.0>printf(" 實 得 學(xué) 分: %dn",coui.credit> 。t=t+coui.credit 。elseprintf(" 實得學(xué)分: 0n"> 。t=t+0 。
43、/3/4printf(" 共修 %d 科 ",s>。 printf(" 實得總學(xué)分為: %dn",t> 。printf(o>*nn"> 。*n">printf("n *< 繼續(xù)查詢?“是”按空格鍵 /scanf("%d",&m> 。m=getch(> 。/elseprintf(" 該學(xué)生無修課程記錄請重新輸入學(xué)號n"> 。fclose(RA> 。fclose(RB> 。fclose(RC> 。printf(
44、"n"> 。void Sort(>/ 分數(shù)排序函數(shù)int i,k,j,t,s 。 char a4 。 int bY 。 FILE *SA,*SB,*SC 。SA=fopen("A.txt","r"> 。 SB=fopen("B.txt","r"> 。 SC=fopen("C.txt","r"> 。 for(i=0 。 i<N。 i+>fscanf(SA,"%s%s%s%s",studi.num,
45、,studi.sex,studi.clas> 。 for(i=0 。 i<M 。 i+>fscanf(SB,"%s%s%d",um,ame,&coui.credit> 。 for(i=0 。 i<Y 。 i+>fscanf(SC,"%s%s%f",stusi.num,um,&stusi.score> 。 for(s=' ' 。 s=' '。>printf(" 請輸入課程號: "
46、> 。 scanf("%s",a> 。for(i=0。i<Q。i+>if(strcmp(a,um>=0>printf(" 此代號的課程名稱為: *<%s>*n",ame> 。 for(i=0,j=0 。 i<L 。 i+>if(strcmp(a,um>=0>bj=i 。j+ 。if(j=0>printf("n *<! 無此課程的相關(guān)記錄 >*nn"> 。elsefor(i=0。i<j。
47、i+> for(k=i 。 k<j 。 k+>if(stusbi.score<stusbk.score> t=bi 。 bi=bk 。 bk=t 。printf(" 此科目的相關(guān)成績?yōu)椋?n"> 。 printf("n*n">for(i=0 。 i<j 。 i+>printf(" %.1f",stusbi.score> 。for(k=0 。 k<N 。 k+>if(strcmp(stusbi.num,studk.num>=0>printf("
48、 printf(" printf("%s",studk.num> 。%s",> 。%sn",studk.clas> 。printf("n*n">printf("n * < 按空格鍵繼續(xù) ,按任意鍵退出 > *nn"> 。 s=getch(> 。 printf("nvoid score(>/*< 此功能已退出! >*nn"> 。成績信息表函數(shù)FILE *p2,*sB int i,k 。sB=fop
49、en("B.txt","r"> 。 for(i=0 。 i<Q。 i+>fscanf(sB,"%s%s%d",um,ame,&coui.credit> fclose(sB> 。 printf("n*< 學(xué) 生 成 績 >*nnnn"> 。p2=fopen("C.txt","r"> 。 /課程號輸出為課程名稱for(i=0 。 i<L 。 i+>學(xué)號課程名稱成績fscanf(p
50、2,"%s%s%f",stusi.num,um,&stusi.score>printf("%15s",stusi.num> 。for(k=0。k<M。k+>if(strcmp(um,um>=0>printf("%13s",ame> 。printf(" %.1fn",stusi.score> 。 printf("n"> fclose(p2> 。課程信息表顯示函數(shù)void
51、xcou(>/int i 。FILE *p1 。 p1=fopen("B.txt","r"> 。printf("*< 課 程 信 息 >*nnnn"> 。課程編號課程名稱學(xué)分for(i=0 。 i<Q。 i+> fscanf(p1,"%s%s%d",um,ame,&coui.credit> printf("%9s%15s%7dn",um,ame,coui.credit> 。pri
52、ntf("n">。fclose(p1> 。void xstu(>/學(xué)生信息表顯示函數(shù)FILE *fp 。 int i 。if(fp=fopen("A.txt","r">>=NULL> printf("Cannt open this file!n"> 。exit(0> 。班級printf("n*< 學(xué) 生 信 息 文 件 >*nn 學(xué) 號姓 名性 別fp=fopen("A.txt","r"> 。for(
53、i=0 。 i<P。 i+> fscanf(fp,"%s%s%s%s",studi.num,,studi.sex,studi.clas> printf("%7s%9s%7s%10sn",studi.num,,studi.sex,studi.clas> printf("n"> 。 fclose(fp> 。void Menu(>/ 菜單函數(shù)int i,c,j 。for(j=' ' o j=''。>printf("
54、;n*n">printf("n">oprintf("功能菜單n"> oprintf("n">oprintf("n">oprintf("a. 顯示功能 n"> oprintf("學(xué)生信息表 <1>nn">oprintf("課程信息表 <2>nn">oprintf("成績信息表 <3>nn">oprintf("b.數(shù)據(jù)錄入 <
55、4>nn">oprintf("c.成績查詢 <5>nn">oprintf("d.排序功能 <6>nn">oprintf("f. 刪除功能 < 7 >nn"> oprintf("g. 保存功能 < 退出 >nn"> oprintf("n*n">printf("<1> <2> <3> <4> <5> <6> <7&
56、gt; < 退出 > n"> ofor(i=0,c=9 o i>=0 o i+>if(c=9>if(i%8=0>printf("*r"> oif(i%8=1>printf("*r"> oif(i%8=2>printf("*r"> oif(i%8=3>printf("*r"> oif(i%8=4>r"> 。r"> 。r"> 。r"> 。printf(&qu
57、ot; *if(i%8=5>printf(" *if(i%8=6>printf(" * if(i%8=7>printf("c=getch(> 。if(c='r'>/printf("n 成功 n"> 。if(i%8=0>printf("n 進入功能 <1> : n"> xstu(> 。break。if(i%8=1>printf("n 進入功能 <2> : n"> 。 xcou(> 。break。i
58、f(i%8=2>printf("n 進入功能 <3> : n"> score(>。break。if(i%8=3>printf("n 進入功能 <4> : n"> in(> 。break。if(i%8=4>printf("n 進入功能 <5> : n"> Research(>。break。if(i%8=5>printf("n 進入功能 <6> :n"> 。 Sort(> 。break。 if(i%8
59、=6>printf("n 進入功能 <7> :n"> 。 Delete(> 。 break。 if(i%8=7> break。 if(i%8=7>break。printf(" *< 是否繼續(xù)執(zhí)行其他菜單功能,按空格鍵確認 >*n"> 。 j=getch(> 。 printf("nn *< 系統(tǒng)已退出 >*nn"> 。void main(>/ 主函數(shù)int i,c,j,k 。 void restore(> 。 void spark(>
60、。printf("n *>nnn"> 。 printf("n *< 學(xué)生成績管理系統(tǒng) >*nnn"> 。printf("n 制作:電子一班 nn 張玉印n"> 。printf("n*>n">printf("n < 進入 ><退出 >n"> 。for(i=0,c=9。i>=0。i+>if(c=9>if(i%2=0> printf("if(i%2=1> printf("r">。r">。c=getch(> 。 / 不用按回車就能輸入的函數(shù)/printf("%d",c> 。if(c='r'>if(i%2=0>printf("nn"> 。 /進入后開始調(diào)用函數(shù) spark(> 。Menu(> 。printf(&qu
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新型人才引領(lǐng)鄉(xiāng)村振興的路徑探索
- 重慶市開州區(qū)鎮(zhèn)東初級中學(xué)2025屆化學(xué)九上期末達標檢測模擬試題含解析
- 江蘇省無錫市第一女子中學(xué)2025屆九上化學(xué)期末預(yù)測試題含解析
- 山西財經(jīng)大學(xué)華商學(xué)院《內(nèi)部控制制度》2023-2024學(xué)年第一學(xué)期期末試卷
- 商業(yè)停車場車位租賃與廣告合作合同
- 文化教育設(shè)施設(shè)計與施工方案研究
- 2025至2030中國狗肉行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國月子中心行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 石油化工行業(yè)發(fā)展現(xiàn)狀與未來趨勢分析預(yù)測報告
- 2025至2030中國自助點菜亭行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- GB/T 14176-2012林業(yè)機械以汽油機為動力的便攜式割灌機和割草機
- VTE相關(guān)知識理論考試試題及答案
- GB/T 10413-2002窄V帶輪(有效寬度制)
- GB 30439.1-2013工業(yè)自動化產(chǎn)品安全要求第1部分:總則
- GA/T 1441-2017法庭科學(xué)同版印刷鑒定意見規(guī)范
- 氣缸的檢測課件
- DB37T 536-2019 文書檔案目錄數(shù)據(jù)采集規(guī)范
- (完整版)GB2893-2008-安全色
- FMS功能性動作篩查PPT課件
- 高一新生入學(xué)分班考試語文試卷含答案
- 格拉辛紙項目投資價值分析報告【參考模板】
評論
0/150
提交評論