當前位置:首頁 » 考試成績 » 學生成績管理系統演算法思想

學生成績管理系統演算法思想

發布時間: 2021-01-23 17:56:41

1. 學生成績管理系統程序實現思路

類設計:1、超類:Person,子類:Student、Teacher、Administrator。
2、Course類(課程)
資料庫:學生與課程是多對專多關系,教師與課程的關屬系看你的需要來設計。
表現層:windows程序或網頁B/S的
功能:1、學生只能查詢成績。2、教師能輸入學生成績和查詢。3、管理員能設置課程信息。

2. 學生成績管理系統

學生成績管理系統C代碼
/ *頭文件* /
#包括
包括
#包括 / *其他指令* /
包括中/ *字元串函數* /
/ *內存操作函數* /
/ *字元處理函數* /
包括 / *動態地址分配函數* /
定義:LEN大小(學生)
typedef結構中,學??生/ *定義結構數組,用於緩存數據* /
{字元數[6];
字元名稱[5];
得分[3];
int總和;
>浮動平均水平;
詮釋訂單
結構STU *下;
}的學生;

/ *函數原型* /
學生的init( );/ /初始化函數* /
詮釋MENU_SELECT的(); / *菜單函數* /
學生的create(); / *創建的鏈表* /
無效列印(學生*頭); / *顯示所有記錄* /
無效搜索(學生*頭); / *找到記錄* /
學生刪除(STUDENT *頭); / *刪除記錄* / />學生排序(學生頭); / *排序* /
學生(學生*頭,新的學生*); *插入/ *插入記錄* /
無效保存(的學生頭); / *保存文件* /
學生的load(); / *讀取文件* /

/ *主函數介面* /
主()
{的學生*頭,新的;
頭的init(); / *初始化鏈表頭的值是NULL * /
(;) / *循環無限* /
{開關(menu??_select())
{
案例1:頭= create()方法的突破;
案例2:列印(頭);休息;
案例3:搜索(頭);突破;
情況下,4頭=刪除(頭);突破;
情況下5頭排序(頭);突破;
案例6:頭插入(頭,與新的);打破; / *新的返回地址* /
案例7:保存(頭);
案例8:頭=負載(
案例9:退出);突破;(0)/ *如果菜單,返回值是年底的9個項目* /
}
}
}

/ *初始化函數* /
學生的init()
{
返回NULL; / *返回一個空指針* /
}
a>
/ *菜單選擇功能* /
menu_select

{N;
結構日期d / *定義的時間結構* / /> GETDATE(&D)/ *讀取系統日期,並把它在結構上D * /
printf的(「按任意鍵進入菜單......」); / *按任意鍵進入主菜單* /
的getch(); / *讀取從鍵盤輸入一個字元,但不顯示在屏幕上* /
clrscr(); / *清屏* / /> printf(「請********************************************* *********************************** \ n「);
printf(」請\ T \噸的\ n「);
printf(」請\ n \ t \ t學生成績管理系統\ n「);
printf(」請************ ************************* MENU ************************ *************** \ n「);
printf的(」\ t \ t \ T1輸入記錄\ n「); / *輸入學生記錄* / BR /> printf的(「\ t \ t \ T2列印記錄\ n」); / *顯示* /
printf的(「\ t \ t \ T3的搜索記錄名稱\ n」); / * * /
printf的(「\ t \ t \ T4。刪除記錄\ n」); / *刪除* /
printf的(「\ t \ t \ T5。排序,使新的文件\ n「); / *排序* / <br /輸出(」\ t \ t \ T6插入記錄到列表\ n「); / *插入* /
printf的(」\ t \ t \ T7保存的文件\ n「); / *保存* /
printf的(」\ t \ t \ T8負載的文件\ n「); / *讀* /
printf的(」\ t \ T \ T9退出\ n「); / *退出* /
printf的(」\ n \ t \ t胡嘿黌\ n「);
printf的(」****** ************************************************** ************************ \ n「);
printf的(」\ t \ t \ t \ t%d \ \%d的\ \%e\「,d.da_year,d.da_mon,d.da_day); / *顯示當前系統日期* /
做{
printf的(」\ n \ t \ t \拉幅機的選擇(1?9):「);
scanf的(」%d「,&N);
}(N 9)/ *如果該選項是不減肥9 * /
回報率(N); / *返回選項的數量,主要功能調用相應的函數* /

}
/ *輸入函數* /
學生創??建()
{I,S
學生頭= NULL,* P / *定義函數這個函數返回一個指針表頭指針* /
Clrscr();
(;)
{P =(學生)的malloc(LEN); / *打開了一個新的單元* / BR />(P)/ *如果指針p是空* /
{printf的(「\ Nout的記憶。」); / *輸出內存溢出* /
回報(頭); / *返回頭指針,下同* /
}
printf的(「請輸入NUM(0:列表結束):」);
scanf的(「%s」,P-> NUM);
(P->數[0] == '0')打破; / *如果第一個字元的學生數0輸入* /
printf(「請結束輸入姓名:「);
scanf的(」%s「,P->名稱);
printf(」請輸入%D分數\ n「); / *迅速啟動分型結果* /

= 0; / *計算每個學生的總成績,初始值為0 * /
(i = 0; I <3; i + +)/ * 3個療程周期的3倍* /
{
做{
printf的(「得分%D:」,i +1);
scanf的(「%d」的,普 - >得分[I]);
(P->得分[I] 得分[I]> 100)/ *確保得分在0至100之間* /
printf的(「數據錯誤,請重新輸入\ n」);
}而(P>得分[I] [I]> 100分);
= S + P->得分[I] / *堆積門的成績* /
}
P->總和= S / *節省的總成績* /
對平均= (浮)/ 3; / *首先轉換類型轉換s轉換為float類型,然後尋求的平均* /
P->訂單= 0; / *在此之前的值排序為0 * / BR /> P> =頭; / *頭節點作為一個新的輸入節點的後繼節點* /
頭= P / *新的輸入節點作為新的頭節點* /
}
a>回報(頭);
}

/ *顯示所有記錄函數* / >無效列印(學生頭)
{i = 0; / *統計記錄數* /
學生* P / *移動指針* /

Clrscr();
P =頭; / *初始的頭指針* / /> printf(「請\ n ************************************學生****** ****************************** \ n「);
printf(」請---- -------------------------------------------------- --------------------- \ n「); <br /輸出(」|記錄|編號|名稱| SC1 SC2 SC3 |森|大道|訂單| \ n「);
printf的(」------------------------------------ ------------------------------------------- \ n「); ...... />而(p! = NULL)
{
+ +;
printf的(「|%3D |%4 |%|%-4S 3D | 3D | 3D | %的3d |%4.2f |%-5d的| \「,
,對 - >數,對 - >名稱,對 - >分數[0],對 - >分數[1],對 - > [2分],P->總之,對平均,P->訂單);
P = P->下;
}
printf的(「------ -------------------------------------------------- ----------------------- \ n「);
printf的(」*************** *********************** END ************************** ************ \ n「);
}

/ *查找錄音功能* /
無效搜索(學生*頭) BR /> {STUDENT * p; / *移動指針* /
個char [5]; / *商店的名稱的字元數組* /
Clrscr();
scanf函數
printf的(「請輸入您的名字進行搜索。\ n」);(%S「,S);
P =頭; / *分配的頭指針P * /
而(STRCMP(P->名稱,s)&& P = NULL)/ *的名稱的記錄時不看,或指針的時空* /
P = P-> / *移動指針指向下一個節點* /
(p! = NULL)/ *如果指針不為空* /
{printf(「請\ n ******** ***************************** FOUND ******************** **************** \ n「);
printf(」請---------------------- -------------------------------------------------- ------- \ n「);
printf的(」|編號|名稱| SC1 SC2 | SC3 |森|大道|訂購| \ n「);
printf的(」 - -------------------------------------------------- --------------------------- \ n「);
printf的(」| 4 |%4S |%3D |%三維|%的3d |%的3d |%4.2f |%-5d的| \ N「,
對 - >數,對 - >名稱,對 - >分數[0],對 - >分數[1],對 - >分數[2],對 - >總和,對 - >平均,對 - >順序);
printf(「請------------------- -------------------------------------------------- --------- \ n「);
printf的(」***************************** ********** END ************************************** \ N「);
}
其他
printf的(」\ n該網頁的沒有NUM%的學生在名單上。\ n「); / *學生* /
}

/ *刪除記錄的函數* /
學生*頭*刪除(學生)

學生{N; * P1 * P2 / * P1是找到要刪除一個節點的指針,P2及其前體的指針* /
字元c的s [6] / [6]用來存儲學生數,c是用於輸入字母* / </ clrscr();
printf的(「請輸入刪除的民:」);
scanf的(「%s」);
P1 = P2 =頭; / * P1和P2富最初的頭指針* /
(STRCMP(P1-NUM)&& P1 = NULL)/ *當記錄數的學校不看,或指針不為空* / /> {P2 = P1 / * P1指針的值分配給P2 P1前體指針* /
P1 = P1->; / *點p1指針到下一條記錄* /
} BR />(STRCMP(P1->民)== 0)/ *學生ID * /
{printf的(「***************** ********************* FOUND **************************** ******** \ n「);
printf(」請------------------------------ ------------------------------------------------- \ N「);
printf的(」|編號|名稱| SC1 SC2 | SC3 |森|大道|在線訂單| \ n「);
printf的(」--------- -------------------------------------------------- -------------------- \ n「);
printf的(」| 4 |%4S |%3D | 3D | 3D | 3D |%4.2f%5D | \ n「,
P1->民,P1->名稱,P1->得分[0],P1 - > [1分],P1->得分[2] ,P1->總之,P1->平均,P1->訂單);
printf的(「-------------------------- -------------------------------------------------- --- \ n「);
printf(」請*********************************** **** END ************************************** \ n「); ...... /> printf的(「你確定要刪除的學生Y / N?」); / *提示你是否要刪除,輸入y刪除n退出* /
(;)
/> {scanf函數(「%C」,&C);
(C =='N'| | C =='N'); / *如果你不刪除,然後跳出循環* /
(C =='Y'| | C =='Y')
{
(P1 ==頭)/ * P1 ==頭,被刪除節點是第一個節點* /
頭= P1->下; / *第二個節點的地址給頭* /
其他
P2->下一個= P1-> /否則,請單擊節點地址被分配到前一個節點的地址* /
N = N-1; <br /輸出(「\ nNum%的學生已被刪除。\ n」,S); /> printf的(「不要忘記保存。\ n」); / *循環後已被刪除* /
}
}
} 其他
printf的(「\ n該網頁的沒有NUM%的學生在名單上。\ n」); /,找不到節點* /
回報(頭);
}

/ *排序函數* /
學生排序(學生頭)
{INT I = 0; / *保存排名* /
學生* P1, * P2 * T,*溫度; / *定義一個臨時指針* /
溫度=頭下; / *原來的下一個節點的指針表頭的頭指針* /
頭> = NULL; / *頭節點的新表的第一個節點* /
(temp! = NULL)/ *當原表不為空,進行排??序* /
{
T =溫度; / *取前表節點* /
TEMP =溫度 - >; / *原來的頭節點的指針向後* /
P1 =頭/頭*移動指針P1指針從頭開始* /
P2 =頭; / *移動指針P2為的P1前驅體的頭指針的初始值* /
而(平均平均&& P1 = NULL)/ *成績平均比??較* /
{
P2 = P1 / *點值小進行排序,新表指針落後* /
P1 = P1->下;
}
(P1 == P2)/ * P1 == P2,點值進行排序,應該排在第一個* / BR /> {
T-> = P1;進行排序的繼任者的p * /
頭= T / * / *新的頭節點進行排序點* /
}
的else / *進行排序點應插入在中間的位置p2和p1的,例如為p的空尾之間* /
{
叔 - >下一個= p1的; / * t的後繼是p1 * /
P2-> = T / * P2的繼任噸* /
}
}
P1 =頭; / *排序頭指針被分配到P1准備填寫的排名* /
(p1! = NULL)/ * p1是不是空的,下面的操作* /
{
+ +; / *節點數量* /
P1->訂單; / *分配的節點數量的排名* /
P1 = P1->; / *指針後移* /
}
printf的(「的排序是SUCESSFUL。\ n」排序;} / *成功* /
回報(頭);
}

/ *插入記錄功能* /
學生插入(學生頭STUDENT *新)
{STUDENT * P0,P1,P2;
整數N,SUM1;
P1 =頭/ * P1點的第一個節點* /
P0 =新/ * P0點要插入節點* /
printf的(「\ n請輸入一個新的記錄。\ n」) / *提示信息記錄* /
printf的(「請輸入數量:」);
scanf函數(「%s」的新數);
printf(「輸入的名稱:「);
scanf的(」%s「的新名);
printf的(」請輸入%d的分數。\ n「);
SUM1 = 0; / *保存新的得分紀錄,初始值為0 * /
為(i = 0; I <3; i + +)
{
做{
printf的(「得分%D:「,i +1);
scanf的(」%d「的,與新>得分[]);
(新 - >得分[I]> 100 | |新 - >得分[I] <0)
printf(「請數據錯誤,請重新輸入。\ n」);
}而(新 - >評分[我]> 100 | |新 - >評分[I] <0);
SUM1 = SUM1 +新 - >得分[I] / *累計門成績* /
}
新 - >金額= SUM1; /存款總額新的記錄* /
新的平均=()SUM1 / 3;
新訂單= 0;
(頭== NULL)/ *原鏈表為空表* /
{頭= P0,P0-> = NULL;} / *節點指出P0口作為頭節點* /
其他
{((P0->平均平均)&&(P1->!= NULL))
{P2 = P1 / P2點只是P1結點* /
P1 = P1->; / * P1落後節點* /
}
(P0->平均> = P1->平均)
{如果(頭== P1)頭= P0 / *插入到原來的第一個節點* / />其他P2-> = P0 / *在插入節點* /
P0-> = P1;}
其他
{P1->下一個= P0到P2點P0-> = NULL;} / *上的最後一個節點* /
}
N = N +1; / *節點數目加1 * /
頭排序(頭); / *調用sort函數的學生的成績重新排序* /
printf的(「,已插入\ nStudent%s的。\ n」,新名);
printf的(「不要忘記保存新的文件。\ n「);
回報(頭);
}

/ *將數據保存到文件函數* /
無效保存(學生*頭)
{FILE * FP; / *定義點文件指針* /
STUDENT * p; / *定義移動指針* /
字元,OUTFILE [10];
輸出(「請輸入OUTFILE名稱,例如C:\ \成績\ n」);
scanf的(「%s」,OUTFILE);
((FP =打開(OUTFILE,「WB」) )== NULL)/ *為輸出打開一個二進制文件,只寫* /
{
printf的(「無法打開文件\ n」);
回報; / *如果您無法打開返回菜單* /
}
printf的(「\ nSaving的文件... \ n」);
P =頭; / *移動指針從頭開始* /
而(p! = NULL)/ * p不為空* /
{
FWRITE(P,LEN,1,FP); / *寫的指針記錄* /
P = P->下; / *指針後移* /
}
FCLOSE(FP); / *關閉文件* /
printf的(「將文件保存成功!\ n「);
}

/ *從文件功能* /
學生中讀取數據負載()
{STUDENT * P1 * P2 *頭= NULL; / *定義記錄指針變數* /
FILE * FP / *定義指向文件的指針* /
字元的infile [10];
printf的(「輸入INFILE名稱,例如c:\ \成績\ n「);
scanf的(」%s「,infile中);
((FP =的FOPEN(INFILE,」包「))= = NULL)/ *打開一個二進制文件只讀* /
{
printf的(「無法打開文件\ n」);
回報(頭);
}
printf的(「\ n載入的文件!\ n」);
P1 =(學生)的malloc(LEN); / *開辟了一條新的單位* /
(P1 )
{
printf的(「內存不足!\ n」);
回報(頭);
}
頭= P1 / *適用於空間,作為頭指針* /

同時(!的feof(FP))/ *循環讀取數據,直到年底結束的文件* / {

(FREAD(P1,LEN,1,FP)= 1)打破; / *如果你不讀出的數據的循環* /
P1-> =(學生)的malloc(LEN); / *下一個結點打開空間* /
(P1->)
{
printf的(「內存不足!\ n」);
回報(頭); BR />}
P2 = P1 / P2點只是P1結點* /
P1 = P1->; / *指針回新讀入數據鏈當前的表* /
}
P2-> = NULL; / *最後一個節點的繼任指針為空* /
FCLOSE(FP);
輸出( 「你已經成功從文件中讀取數據!\ n」);
回報(頭);
}

3. java學生成績管理系統中演算法的問題

定義2維數組不就完了
如果有3個人的成績
String [][]student=new String[3][2];
前一個元素為姓名,後一個元素為成績
String []temp=new String[2];
排序的時候兩個元素一起排就完了唄,不過判斷條件只取決於成績元素
例如
for(int i=2;i>0;i--) //以冒泡為例好了,舉例子么,數小點吧
{
for(int j=0;j<i;j++)
{
flag=false;
if(a[j][1]>a[j+1][1]) //按順序依次比較大小,只比較右面的成績元素
{
flag=true; //這里說明比較還在繼續
temp[1]=a[j][1]; //存放成績
temp[0]=a[j][0]; //存放姓名
a[j][1]=a[j+1][1];
a[j][0]=a[j+1][0];
a[j+1][0]=temp[0];
a[j+1][1]=temp[1];//每次互換都是換兩個元素,這樣姓名和成績就是一一對應的排序了
}
}
}
這樣應該能夠滿足樓主你的要求了吧~

4. 學生成績管理系統 思路

給你個簡單的介紹:
VB開發平台的特點
SQL資料庫的特點
功能需求分析

如果你想要別人完全幫你寫好又不願意給分
你找錯地方了

5. 學生成績管理系統選題的背景和意義,課題研究的主要內容.主要研究(設計)方法論述,求這3個怎麼寫

90年代以來,西方發達國家大部分高校均成功地完成了數字化校園建設工作。目前我國的信息數字化工作也進入一個全新發展時期,特別是高校的信息化建設已進入了全面的發展階段,諸多高校充分地認識到,信息化建設己經成為了高校提高自身管理水平、提升綜合競爭實力的重要手段。在高校,各種信息管理系統層出不窮。Web資料庫技術已經成為應用最為廣泛的網站架構基礎技術在應用系統中,Web提供了與客戶進行通信聯絡的有效手段。而構建浙江水利水電專科學校學生管理信息系統也成了我校重要的議題。
學生成績管理系統是典型的信息管理系統(MIS),其開發主要包括後台資料庫的建立和維護以及前端應用程序的開發。對於前者要求建立起數據一致性和完整性強、安全性高的資料庫;對於後者則要求應用程序具有功能完備、易使用、易維護等特點。本文著重闡述了學生學籍管理系統的整體開發過程。介紹了系統的開發環境以及開發工具,對於設計思想和設計流程也做出了全面的敘述,在資料庫創建思想以及各個數據表之間的具體關聯等方面也做出了詳細說明,並且具體剖析了系統各個功能的實現過程以及詳細設計過程,在繪制簡單系統功能模塊圖的同時,力求更加清晰地表明設計思想以及對整個程序設計的規劃及具體實現。在進行了廣泛需求調查的基礎上,作者通過可行性分析,專門設計了一套基於/S結構的學生管理系統。該系統能夠很好的滿足學校教學、管理方面的要求。論文最後總結了系統的不足,給出了未來努力的方向。

6. 數據結構(學生成績管理系統)

http://wenku..com/view/dc69e8ef5ef7ba0d4a733bff.html

7. 學生成績管理系統的目的和意義是什麼

可以更快的使學生的成績相加並且排名,這對老師來說是很好可以減少很多工作量,在多人版多課考試時很有用,權只要成績出來,輸入電腦就可以在幾秒內是成績相加,並知道了某學生在學校排名,但對學生來說,考完試自由的時間就很少了

8. 2.學生成績管理系統 (c語言做)

給你找一份類似的。不完全一致。做課程設計還是可行的。自己稍加修改即可!

總體設計
一、 仔細閱讀系統要求,首先將此系統化分為如下模塊(即如下函數)

1、輸入初始的學生信息:其中包括學生的姓名、學號和性別以及學生的語文、數學、英語和計算機等相關信息;可用函數cin(stu *p1)來實現此操作。

2、查詢模塊:可用stu *lookdata(stu *p1) 來實現。找到就輸出此學生全部信息包括學生的語文、數學、英語和計算機等的成績。

3、插入模塊:可用insert( )函數來實現。其中通過學號的大小來比較的,並且以此來排序。

4、輸出學生的信息以及成績:通過學生的姓名來查看學生的語文、數學、英語和計算機等相關成績,同時也可以分別通過caverage() 、maverage() 、eaverage() 和comaverage() 來輸出語文、數學、英語和計算機等成績的平均分數、最高和最低分數。

5、退出系統:可用一個函數exit()來實現,首先將信息保存到文件中,釋放動態創建的內存空間,再退出此程序。

二、系統主模塊結構圖:

詳細設計
一、 界面設計
此系統界面採用圖形和數字化菜單設計。
主界面設計如下:

學生成績管理系統

請選擇相應的數字執行相應的功能:
1:是否輸入其他數據
2:查看數據
3:插入數據
4:查找數據
5:更新數據
6:保留數據
7:顯示或列印數據
8:語文成績狀況
9:數學成績狀況
10:英語成績狀況
11:計算機成績狀況
12:?
13:退出系統
二、 數據結構設計:
程序設計中用到的結構體類型:
學生信息結構體類型:
typedef struct student{
char name[MAX];
int num[MAX];
char sex[MAX];
int chinese;
int mathematic;
int english;
int computer;
struct student *next;
}

程序代碼:
//原始密碼是123456
#include"stdio.h"
#include"stddef.h"
#include"stddef.h"
#include"string.h"
#define MAX 10
typedef struct student{ /*定義結構體*/
char name[MAX]; /*姓名*/
int num[MAX]; /* 學號*/
char sex[MAX]; /*性別*/
int chinese; /*語文*/
int mathematic; /* 數學*/
int english; /*英語*/
int computer; /*計算機*/
struct student *next; /*結構體指針*/
}stu;
stu *head; /*頭指針*/
void print() /*顯示或列印函數*/
{
system("cls");
printf("\t\t\tScore Manage System\n"); /*成績管理系統*/
printf("<1>Enter Record\t"); /*輸入數據*/
printf("<2>Display\t"); /*顯示*/
printf("<3>Insert\t"); /*插入數據*/
printf("<4>Quest\t"); /*訪問數據*/
printf("<5>Update\t"); /*以前數據*/
printf("<6>Save\t"); /*保留數據*/
printf("<7>Fresh\t"); /*更新數據*/
printf("<8>Chinese Average\t"); /*語文平均成績*/
printf("<9>Math Average\t"); /*數學平均成績*/
printf("<10>English Average\t"); /*英語平均成績*/
printf("<11>Computer Average\t"); /*計算機平均成績*/
printf("<12>Quit\t\n"); /*退出*/
}

void cin(stu *p1) /*輸入相關數據的函數*/
{ printf("Enter name:\n");
scanf("%s",&p1->name);
printf("Enter num:\n");
scanf("%d",&p1->num);
printf("Enter sex:\n");
scanf("%s",&p1->sex);
printf("Enter score:\n");
printf("Enter chinese:\n");
scanf("%d",&p1->chinese);
printf("Enter math:\n");
scanf("%d",&p1->mathematic);
printf("Enter English:\n");
scanf("%d",&p1->english);
printf("Enter Computer:\n");
scanf("%d",&p1->computer);
}
stu *cindata() /*其他數據是否繼續輸入的函數*/
{ stu *p1,*p2;
int i=1;
char ch;
p1=(stu *)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf("Do you Want to Continue?yes or no"); /*是否繼續輸入數據*/
ch=getchar();
ch=getchar();
if(ch=='n'||ch=='N')
{ i=0;
p1->next=NULL;
}
else
{ p2=p1;
p1=(stu *)malloc(sizeof(stu));
p2->next=p1;
}
}
return(p1->next);
}

stu *lookdata(stu *p1) /*查看數據的函數*/
{
while(p1!=NULL)
{ printf("Num:%d\t",p1->num);
printf("Name:%s\t",p1->name);
printf("Sex:%s\t",p1->sex);
printf("\n");
printf("Chinese:%d\t",p1->chinese);
printf("Math:%d\t",p1->mathematic);
printf("English:%d\t",p1->english);
printf("Computer:%d\t",p1->computer);
printf("\n");
p1=p1->next;
}
return p1;
}

void insert() /*通過比較學號來插入數據的函數*/
{ stu *p1,*p3,*p2;
char ch;
p1=head;
p3=(stu *)malloc(sizeof(stu));

p3->next=NULL;
if(head==NULL){ head=p3; return;}
cin(p3);
while(p1!=NULL&&(p1->num<p3->num)) /*通過學號的比較來插入*/
{ p2=p1;p1=p1->next;}
if(p2==head) {p3->next=head; head=p3; return;}
p3->next=p1;
p2->next=p3;

}

find(stu *p2) /*通過姓名查找查看數據的函數*/
{ char name[20];
int b=0;
printf("Enter the name of the student you want to find:"); /*通過姓名查看*/
scanf("%s",name);
while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("The data you want has be found\n");
printf(" Name:%s\t",p2->name);
printf("Num:%d\t",p2->num);
printf("sex%s\t",p2->sex);
printf("\n");
printf("Chinese:%d\t",p2->chinese);
printf("Math:%d\t",p2->mathematic);
printf("English:%d\t",p2->english);
printf("Computer:%d\t",p2->computer);
printf("\n");

b=1;
}
else if(b==0)
printf("sorry not find data!");
p2=p2->next;
}

if(b==1)
{
print();
printf("Find one\n");}
else
{print();
printf("Not find\n");

}
}

void caverage() /*求各學生語文平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->chinese;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->chinese)
max=p1->chinese;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->chinese)
min=p1->chinese;
}
printf("Chinese Average:%f",aver);
printf("Chinese Max:%f",max);
printf("Chinese Min:%f",min);
}

void maverage() /*求各學生數學平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->mathematic;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->mathematic)
max=p1->mathematic;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->mathematic)
min=p1->mathematic;
}
printf("Mathe Average:%f",aver);
printf("Mathe Max:%f",max);
printf("Mathe Min:%f",min);
}

void eaverage() /*求各學生英語平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->english;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->english)
max=p1->english;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->english)
min=p1->english;
}
printf("English Average:%f",aver);
printf("English Max:%f",max);
printf("English Min:%f",min);
}

void comaverage() /*求各學生計算機平均分、最高和最低分成績的函數*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf("not data!");
else
{for(i=0;p1!=NULL;i++,p1=p1->next)
sum+=p1->computer;
aver=sum/i;

p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
{if(max<p1->computer)
max=p1->computer;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1->next)
if(min>p1->computer)
min=p1->computer;
}
printf("Computer Average:%f",aver);
printf("Computer Max:%f",max);
printf("Computer Min:%f",min);
}

update(stu *p2) /*通過姓名查找來更新數據*/
{
char name[10]; /*p2為指向結構體struct student的指針*/
int b=0;
printf("Enter The Name"); /*輸入姓名*/
scanf("%s",name);

while(p2!=NULL)
{if(strcmp(name,p2->name)==0)
{
printf("Find you data\n");
scanf("Name:%s",p2->name);
scanf("Num:%s",p2->num);
scanf("Sex:%s",p2->sex);
scanf("Chinese:%d",p2->chinese);
scanf("Math:%d",p2->mathematic);
scanf("english:%d",p2->english);
scanf("Computer:%d",p2->computer);
printf("Success!");

b=1;}
else if(b==0)
printf("Sorry not Find data!");
p2=p2->next;}
if(b==0)
{print();
printf("Sorry not Find data!");
}
else
{
print();
printf("Finish!");
}
}

save(stu *p2) /*保留數據函數*/
{
FILE *fp;
char file[10];
printf("Enter file name"); /*輸入文件名*/
scanf("%s",file);
fp=fopen(file,"w");
while(p2!=NULL)
{
fprintf(fp,"%s",p2->name);
fprintf(fp,"%s",p2->num);
fprintf(fp,"%s",p2->sex);
fprintf(fp,"%d",p2->chinese);
fprintf(fp,"%d",p2->mathematic);
fprintf(fp,"%d",p2->english);
fprintf(fp,"%d",p2->computer);
p2=p2->next;
}
fclose(fp);
}

char password[7]="123456"; /*定義初始密碼*/

void main() /*主函數*/
{ int choice;
stu *p2;
char s[8];
int flag=0,i; /*標志項*/
int n=3;
do{ printf("Enter password:\n");
scanf("%s",s);
if(!strcmp(s,password)) /*進行密碼匹配驗證*/
{ printf("PASS\n\n\n");
flag=1;
break;
}
else{
printf("Error Enter again:\n");
n--;
}
}
while(n>0);
if(!flag)
{printf("you have Enter 3 times!"); /*輸入密碼超過了3次!!*/
exit(0); /*自動退出*/
}
/*密碼驗證成功後進入的界面*/

printf("~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n"); /*操作界面*/
printf("\t\tWelcom to the Mis\n");
printf("Author:-----\tClass:------\tNum:------\n"); /*作者,班級和號碼*/
printf("Adress:HG\n"); /*地址*/
printf("%%%%%%%%%%%%%%%%%%%%%%%%%%%\n");
printf("\t\tEnter OP:\n");
printf("\n\n\n\n");
printf("==============\t\t==============\n");
printf("==============\t\t==============\n");
printf("\t\tEnter the MIS yes or no\n"); /*問進入系統與否*/

scanf("%d",&choice);
if(choice=='n'||choice=='N')
exit(1);

print();
while(1)
{
printf("Enter choice:");
scanf("%d",&i);
if(i<1||i>13)
{
printf("Enter num from 1 to 13:\n"); /*再從1-13中進行選擇*/
exit(1);
}

switch(i)
{ case 1:
p2=cindata(); /*其他數據是否繼續輸入的函數*/
break;
case 2:
p2=lookdata(head); /*查看數據的函數*/
break;
case 3:
insert(); /*通過比較學號來插入數據的函數*/
break;
case 4:
find(head); /*通過姓名查找查看數據的函數*/
break;
case 5:
update(head); /*通過姓名查找來更新數據*/
break;
case 6:
save(head); /*保留數據函數*/
break;
case 7:
print(); /*顯示或列印函數*/
break;
case 8:
caverage(); /*求各學生語文平均分、最高和最低分成績的函數*/
break;
case 9:
maverage(); /*求各學生數學平均分、最高和最低分成績的函數*/
break;
case 10:
eaverage(); /*求各學生英語平均分、最高和最低分成績的函數*/
break;
case 11:
comaverage(); /*求各學生計算機平均分、最高和最低分成績的函數*/
break;
case 12:
; /*空操作*/
case 13:
exit(1); /*退出*/
break;
}
scanf("%d",&i);
}
}

9. 學生成績管理系統C語言編程

||#include<stdio.h> /*引用庫函數*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定義結構體數組*/
{
char num[10]; /*學號*/
char name[20]; /*姓名*/
int score; /*成績*/
}Student;
Student stu[80]; /*結構體數組變數*/
int menu_select() /*菜單函數*/
{
char c;
do{
system("cls"); /*運行前清屏*/
printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/
printf("\t\t | 1. Input Records |\n");
printf("\t\t | 2. Display All Records |\n");
printf("\t\t | 3. Sort |\n");
printf("\t\t | 4. Insert a Record |\n");
printf("\t\t | 5. Delete a Record |\n");
printf("\t\t | 6. Query |\n");
printf("\t\t | 7. Statistic |\n");
printf("\t\t | 8. Add Records from a Text File|\n");
printf("\t\t | 9. Write to a Text file |\n");
printf("\t\t | 0. Quit |\n");
printf("\t\t*****************************************\n");
printf("\t\t\tGive your Choice(0-9):");
c=getchar(); /*讀入選擇*/
}while(c<'0'||c>'9');
return(c-'0'); /*返回選擇*/
}
int Input(Student stud[],int n) /*輸入若干條記錄*/
{int i=0;
char sign,x[10]; /*x[10]為清除多餘的數據所用*/
while(sign!='n'&&sign!='N') /*判斷*/
{ printf("\t\t\tstudent's num:"); /*交互輸入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n+i].score);
gets(x); /*清除多餘的輸入*/
printf("\t\t\tany more records?(Y/N)");
scanf("\t\t\t%c",&sign); /*輸入判斷*/
i++;
}
return(n+i);
}
void Display(Student stud[],int n) /*顯示所有記錄*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式頭*/
printf("\t\t\tnumber name score\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循環輸入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>1&&i%10==0) /*每十個暫停*/
{printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按學號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;
q=&stud[j].score;
s=*p;
*p=*q;
*q=s;
}
}
int Insert_a_record(Student stud[],int n) /*插入一條記錄*/
{char x[10]; /*清除多餘輸入所用*/
printf("\t\t\tstudent's num:"); /*互動式輸入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n].score);
gets(x);
n++;
Sort_by_num(stud,n); /*調用排序函數*/
printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/
return(n);
}
int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/
{ char s[20];
int i=0,j;
printf("\t\t\ttell me his(her) name:"); /*互動式問尋*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*返回失敗信息*/
return(n);
}
for(j=i;j<n-1;j++) /*刪除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
}
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student stud[],int n) /*查找並顯示一個記錄*/
{ char s[20];
int i=0;
printf("\t\t\tinput his(her) name:"); /*互動式輸入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*輸入失敗信息*/
return;

}
printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學生信息*/
printf("\t\t\this(her) score:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n) /*新增功能,輸出統計信息*/
{ int i,j=0,k=0,sum=0;
float aver; /*成績平均值*/
for(i=0;i<n;i++) /*循環輸入判斷*/
{
sum+=stud[i].score;
if(stud[j].score>stud[i].score) j=i;
if(stud[k].score<stud[i].score) k=i;
}
aver=1.0*sum/n;
printf("\t\t\tthere are %d records.\n",n); /*總共記錄數*/
printf("\t\t\tthe hignest score:\n"); /*最高分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);
printf("\t\t\tthe lowest score:\n"); /*最低分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);
printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/
}
int AddfromText(Student stud[],int n) /*從文件中讀入數據*/
{ int i=0,num;
FILE *fp; /*定義文件指針*/
char filename[20]; /*定義文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename); /*輸入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/
{ printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num); /*讀入總記錄量*/
while(i<num) /*循環讀入數據*/
{
fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);
i++;
}
n+=num;
fclose(fp); /*關閉文件*/
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/
{
int i=0;
FILE *fp; /*定義文件指針*/
char filename[20]; /*定義文件名*/
printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打開文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循環寫入數據*/
while(i<n)
{
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);
i++;
}
fclose(fp); /*關閉文件*/
printf("Successed!\n"); /*返回成功信息*/
}
void main() /*主函數*/
{
int n=0;
for(;;)
{
switch(menu_select()) /*選擇判斷*/
{
case 1:
printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/
Display(stu,n);
break;
case 3:
printf("\t\t\tSort\n");
Sort_by_num(stu,n); /*按學號排序*/
printf("\t\t\tSort Suceessed!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\tInsert a Record\n");
n=Insert_a_record(stu,n); /*插入一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\tDelete a Record\n");
n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\tQuery\n");
Query_a_record(stu,n); /*查找並顯示一個記錄*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\tStatistic\n");
Statistic(stu,n); /*新增功能,輸出統計信息*/
printf("\t\t\t");
system("pause");
break;
case 8:
printf("\t\t\tAdd Records from a Text File\n");
n=AddfromText(stu,n); /*新增功能,輸出統計信息*/
break;
case 9:
printf("\t\t\tWrite to a Text file\n");
WritetoText(stu,n); /*循環寫入數據*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}

四、函數調用關系圖
註:「→」代表調用
Input函數
列印鏈表記錄
Display函數
輸入若干條記錄
menu_select()函數
選擇菜單
Sort_by_num函數
顯示所有記錄
Delete_a_record函數
按姓名查找,刪除一條記錄
Query_a_record查找並顯示一條記錄
Statistic函數
輸出統計信息 (新增)
AddfromText函數
從正文中添加數據到結構體數組中
Main函數
Insert_a_record插入一條記錄
WritetoText函數 將所有數據寫入文件中
退出程序
Reverse(head)函數
按學號排序
五、設計測試流程
1、進入界面
2、輸入選項1,回車;
按提示輸入數據:
3、回到主菜單;
輸入選項7,回車;
輸入文件名:data.txt,回車;
出現成功提示,則讀入文件操作成功。
4、回到主菜單,輸入2,回車
每10個暫停顯示數據
5、回到主菜單,輸入3,回車
出現排序成功信息。
6、回到主菜單,輸入4,回車
按提示插入一組數據
7、回到主菜單,輸入5,回車
按提示輸入姓名,刪除數據
出現刪除成功的信息
8、回到主菜單,輸入6,回車
輸入姓名進行查詢
9、回到主菜單,輸入7,回車
出現統計信息
10、回到主菜單,輸入9,回車
輸入result.txt,回車
出現成功寫入文件的信息
11、回到主菜單,輸入0,回車退出系統
回答者:kingkey001 - 試用期 一級 7-14 22:38
修改答復: kingkey001,您要修改的答復如下: 積分規則 關閉
C語言課程設計報告-------學生成績簡單管理程序
一、系統菜單的主要功能
(1)輸入若干條記錄
(2)顯示所有記錄
(3)按學號排序
(4)插入一條記錄
(5)按姓名查找,刪除一條記錄
(6)查找並顯示一條記錄
(7)輸出統計信息 (新增)
(8)從正文中添加數據到結構體數組中
(9)將所有數據寫入文件中
(0)退出程序
二、題目分析
該題主要考察學生對結構體,指針,文件的操作,以及C語言演算法的掌握,所以完成此道題目要求較強的設計能力,尤其是要有一種大局觀的意識。如何調程序也非常重要,通過這個程序可以學習到以前調試短程序沒有的的經驗。
菜單中的每一個選項都對應一個子程序,子程序的演算法幾乎囊獲了所有C語言學過的技巧,下面就各個子程序中的功能進行說明:
功能1和4的演算法相似,輸入一條記錄到結構體中去,其中有一部很關鍵,就是通過gets將所有的多餘的字元,回車讀去,否則就會出錯。
功能2是顯示所有的記錄,通過循環輸出,格式也比較重要。
功能3為按學號排序,因為學號定義成了字元數組的形式,因此在運用冒泡法進行排序的時候,要用到strcmp,strcpy等函數。
功能5為按姓名刪除記錄,先輸入姓名,再一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,返回n-1。
功能6的演算法在5中就已經體現了,輸入姓名,一一比較。
功能7為新增的功能,因為考慮到原來給出的函數中竟然沒有對學生成績的統計功能,因此新增此功能,可以得出所有的記錄個數,最高、最低、平均分,並輸出相關的學生信息等。
功能8和9是對文件的操作,提前准備好數據。
三、程序正文部分
#include<stdio.h> /*引用庫函數*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定義結構體數組*/
{
char num[10]; /*學號*/
char name[20]; /*姓名*/
int score; /*成績*/
}Student;
Student stu[80]; /*結構體數組變數*/
int menu_select() /*菜單函數*/
{
char c;
do{
system("cls"); /*運行前清屏*/
printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/
printf("\t\t | 1. Input Records |\n");
printf("\t\t | 2. Display All Records |\n");
printf("\t\t | 3. Sort |\n");
printf("\t\t | 4. Insert a Record |\n");
printf("\t\t | 5. Delete a Record |\n");
printf("\t\t | 6. Query |\n");
printf("\t\t | 7. Statistic |\n");
printf("\t\t | 8. Add Records from a Text File|\n");
printf("\t\t | 9. Write to a Text file |\n");
printf("\t\t | 0. Quit |\n");
printf("\t\t*****************************************\n");
printf("\t\t\tGive your Choice(0-9):");
c=getchar(); /*讀入選擇*/
}while(c<'0'||c>'9');
return(c-'0'); /*返回選擇*/
}
int Input(Student stud[],int n) /*輸入若干條記錄*/
{int i=0;
char sign,x[10]; /*x[10]為清除多餘的數據所用*/
while(sign!='n'&&sign!='N') /*判斷*/
{ printf("\t\t\tstudent's num:"); /*交互輸入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n+i].score);
gets(x); /*清除多餘的輸入*/
printf("\t\t\tany more records?(Y/N)");
scanf("\t\t\t%c",&sign); /*輸入判斷*/
i++;
}
return(n+i);
}
void Display(Student stud[],int n) /*顯示所有記錄*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式頭*/
printf("\t\t\tnumber name score\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循環輸入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>1&&i%10==0) /*每十個暫停*/
{printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按學號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;
q=&stud[j].score;
s=*p;
*p=*q;
*q=s;
}
}
int Insert_a_record(Student stud[],int n) /*插入一條記錄*/
{char x[10]; /*清除多餘輸入所用*/
printf("\t\t\tstudent's num:"); /*互動式輸入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\tstudent's name:");
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\tstudent's score:");
scanf("\t\t\t%d",&stud[n].score);
gets(x);
n++;
Sort_by_num(stud,n); /*調用排序函數*/
printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/
return(n);
}
int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/
{ char s[20];
int i=0,j;
printf("\t\t\ttell me his(her) name:"); /*互動式問尋*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*返回失敗信息*/
return(n);
}
for(j=i;j<n-1;j++) /*刪除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
}
printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student stud[],int n) /*查找並顯示一個記錄*/
{ char s[20];
int i=0;
printf("\t\t\tinput his(her) name:"); /*互動式輸入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\tnot find!\n"); /*輸入失敗信息*/
return;

}
printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學生信息*/
printf("\t\t\this(her) score:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n) /*新增功能,輸出統計信息*/
{ int i,j=0,k=0,sum=0;
float aver; /*成績平均值*/
for(i=0;i<n;i++) /*循環輸入判斷*/
{
sum+=stud[i].score;
if(stud[j].score>stud[i].score) j=i;
if(stud[k].score<stud[i].score) k=i;
}
aver=1.0*sum/n;
printf("\t\t\tthere are %d records.\n",n); /*總共記錄數*/
printf("\t\t\tthe hignest score:\n"); /*最高分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score);
printf("\t\t\tthe lowest score:\n"); /*最低分*/
printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score);
printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/
}
int AddfromText(Student stud[],int n) /*從文件中讀入數據*/
{ int i=0,num;
FILE *fp; /*定義文件指針*/
char filename[20]; /*定義文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename); /*輸入文件名*/
if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/
{ printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/
printf("\t\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num); /*讀入總記錄量*/
while(i<num) /*循環讀入數據*/
{
fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score);
i++;
}
n+=num;
fclose(fp); /*關閉文件*/
printf("\t\t\tSuccessed!\n");
printf("\t\t\t");
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/
{
int i=0;
FILE *fp; /*定義文件指針*/
char filename[20]; /*定義文件名*/
printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/
printf("\t\t\tInput the filename:");
scanf("\t\t\t%s",filename);
if((fp=fopen(filename,"w"))==NULL) /*打開文件*/
{
printf("\t\t\tcann't open the file\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循環寫入數據*/
while(i<n)
{
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score);
i++;
}
fclose(fp); /*關閉文件*/
printf("Successed!\n"); /*返回成功信息*/
}
void main() /*主函數*/
{
int n=0;
for(;;)
{
switch(menu_select()) /*選擇判斷*/
{
case 1:
printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/
Display(stu,n);
break;
case 3:
printf("\t\t\tSort\n");
Sort_by_num(stu,n); /*按學號排序*/
printf("\t\t\tSort Suceessed!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\tInsert a Record\n");
n=Insert_a_record(stu,n); /*插入一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\tDelete a Record\n");
n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\tQuery\n");
Query_a_record(stu,n); /*查找並顯示一個記錄*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\tStatistic\n");
Statistic(stu,n); /*新增功能,輸出統計信息*/
printf("\t\t\t");
system("pause");
break;
case 8:
printf("\t\t\tAdd Records from a Text File\n");
n=AddfromText(stu,n); /*新增功能,輸出統計信息*/
break;
case 9:
printf("\t\t\tWrite to a Text file\n");
WritetoText(stu,n); /*循環寫入數據*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}

四、函數調用關系圖
註:「→」代表調用
Input函數
列印鏈表記錄
Display函數
輸入若干條記錄
menu_select()函數
選擇菜單
Sort_by_num函數
顯示所有記錄
Delete_a_record函數
按姓名查找,刪除一條記錄
Query_a_record查找並顯示一條記錄
Statistic函數
輸出統計信息 (新增)
AddfromText函數
從正文中添加數據到結構體數組中
Main函數
Insert_a_record插入一條記錄
WritetoText函數 將所有數據寫入文件中
退出程序
Reverse(head)函數
按學號排序
五、設計測試流程
1、進入界面
2、輸入選項1,回車;
按提示輸入數據:
3、回到主菜單;
輸入選項7,回車;
輸入文件名:data.txt,回車;
出現成功提示,則讀入文件操作成功。
4、回到主菜單,輸入2,回車
每10個暫停顯示數據
5、回到主菜單,輸入3,回車
出現排序成功信息。
6、回到主菜單,輸入4,回車
按提示插入一組

10. 學生成績管理系統程序設計思路

我們可以針對此來題目提供一套與源要求相匹配的源碼(教學版,個人版,專業版,企業版)
為獲取建議,你需要告訴我們可用的E-Mail地址。

您還可以直接應用Baihi聯系我們, 或使用網路知道向我求助, 或藉助網路知道發送短消息
或QQ:六五七幺五六幺五('幺'讀 yao 一聲)
有時間可以完成你的問題

ES:\
交易提醒:預付訂金是陷阱
開發信息管理系統,B2B/B2C電子商務,企業/個人網站更有優惠

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919