【存檔】大一C語言實(shí)訓(xùn)
學(xué)生信息管理系統(tǒng)實(shí)訓(xùn)指導(dǎo)
一、程序功能
??在學(xué)校中,經(jīng)常會因?yàn)楦鞣N各樣的活動(dòng)用到學(xué)生的信息。本程序便是為了更方便的查詢和管理學(xué)生信息。其基本功能模塊如下圖:

主界面如下圖所示:
?

二、程序設(shè)計(jì)目的
1.重點(diǎn)掌握數(shù)組的應(yīng)用
2.重點(diǎn)掌握結(jié)構(gòu)體的應(yīng)用
3.重點(diǎn)掌握文件讀寫功能
4.重點(diǎn)掌握自定義函數(shù)等知識
?
三、設(shè)計(jì)思路
程序設(shè)計(jì)一般由兩部分組成:數(shù)據(jù)結(jié)構(gòu)+算法,合理地選擇和實(shí)現(xiàn)一個(gè)數(shù)據(jù)結(jié)構(gòu)和處理這些數(shù)據(jù)結(jié)構(gòu)具有同樣的重要性。
1.數(shù)據(jù)結(jié)構(gòu)
? 數(shù)組是程序中最常用的結(jié)構(gòu)數(shù)據(jù)類型,用來描述由固定數(shù)目的同一類型的元素組成的數(shù)據(jù)結(jié)構(gòu)。使用靜態(tài)數(shù)組需要預(yù)先估計(jì)空間的大小,所以先預(yù)定義一個(gè)常數(shù)N,表示學(xué)生人數(shù)上限(即最多錄入幾個(gè)學(xué)生的信息)。
#define N 2000
//定義學(xué)生信息結(jié)構(gòu)體
typedef struct student {
? int num;//學(xué)號
? char name[20];//姓名
? char sex[2];//性別
int age;//年齡
? char Class[20];//班級
? char home1[10];//家庭住址【省】
? char home2[10];//家庭住址【市】
? char phone[11];//電話號碼
? } St;
St S[N];//定義全局變量存放學(xué)生信息
int L = 0; //定義全局變量存放已錄入學(xué)生人數(shù)
?
1) 該數(shù)組最多可以保存2000個(gè)學(xué)生的信息,該2000個(gè)學(xué)生的信息存放到數(shù)組S中,錄入學(xué)生的總數(shù)存放到變量L中。
2) 本程序需要information.txt和number.txt兩個(gè)文件。information.txt文件保存學(xué)生的信息(即數(shù)組S中的數(shù)據(jù)保存到information.txt文件中),number.txt文件保存錄入學(xué)生的個(gè)數(shù)(即變量L中的數(shù)據(jù)保存到number.txt文件中)。
3)數(shù)組S和變量L為全局變量,可供所有的模塊使用,所以所設(shè)計(jì)的函數(shù)都不帶參數(shù)。?
?
2.函數(shù)設(shè)計(jì)
1、Menu函數(shù)
函數(shù)原型:void Menu();
? 功能:顯示菜單。
?
2、IntputS函數(shù)
? 函數(shù)原型:void IntputS ();
? 功能:錄入學(xué)生信息。
3、ShowS函數(shù)
? 函數(shù)原型:void ShowS();
? 功能:顯示學(xué)生信息。
?
4、SearchS函數(shù)
? 函數(shù)原型:void SearchS();
? 功能:查找某一學(xué)生信息。
?
5、ScreenS函數(shù)
? 函數(shù)原型:void ScreenS();
? 功能:分類篩選學(xué)生信息。
?
6、SortS函數(shù)
? 函數(shù)原型:void SortS();
? 功能:按年齡排列學(xué)生信息。
?
7、SearchS函數(shù)
? 函數(shù)原型:void SearchS();
? 功能:查找某一學(xué)生信息。
8、AddS函數(shù)
? 函數(shù)原型:void AddS();
? 功能:增加某一學(xué)生信息。
9、DeleteS函數(shù)
? 函數(shù)原型:void DeleteS();
? 功能:刪除某一學(xué)生信息。
?
10、ChangeS函數(shù)
? 函數(shù)原型:void ChangeS();
? 功能:修改某一學(xué)生信息。
?
11、FileToMemoryL函數(shù)
? 函數(shù)原型:void FileToMemoryL();
? 功能:將文件L里的信息寫入到內(nèi)存中。
?
12、FileToMemoryS函數(shù)
? 函數(shù)原型:void FileToMemoryS();
? 功能:將文件S里的信息寫入到內(nèi)存中。
?
13、MemoryToFileL函數(shù)
? 函數(shù)原型:void MemoryToFileL();
? 功能:將L里的信息寫入到文件中。
14、MemoryToFileS函數(shù)
? 函數(shù)原型:void MemoryToFileS();
? 功能:將S里的信息寫入到文件中。
? 3、流程圖
? (1)主函數(shù)流程圖:

(2)函數(shù)詳細(xì)說明:
?? 1、Menu函數(shù):輸出菜單,無其他操作。
?? 2、FileToMemoryL函數(shù):將 d:\\information.txt 文件錄入到數(shù)組S中。
?? 3、FileToMemoryS函數(shù):將 d:\\number.txt 文件錄入到變量L中。
?? 4、IntputS函數(shù):用戶輸入一個(gè)值,(假設(shè)這個(gè)值是5,意思就是用戶要錄入5個(gè)學(xué)生的信息),然后引導(dǎo)用戶去依次輸入學(xué)生的信息,將用戶輸入的信息錄入到數(shù)組S中。需要注意的是,不一定是從S[0]開始錄入,應(yīng)當(dāng)是S[L],并且L的值應(yīng)當(dāng)隨著人數(shù)的增加而增加。
?? 5、ShowS函數(shù):輸出數(shù)組S中的信息即可。需要注意的是,一直輸出到S[L-1],而不是將S全部輸出。
?? 6、SearchS函數(shù):讓用戶選擇性輸入姓名或者學(xué)號,然后利用strcmp函數(shù)和for語句遍歷數(shù)組S并進(jìn)行對比找出這名學(xué)生,并輸出其信息,如果不存在此學(xué)生,那么輸出“不存在此學(xué)生”。
7、ScreenS函數(shù):根據(jù)提示,引導(dǎo)用戶去選擇按照“省”、“市”、“性別”、“年齡”進(jìn)行篩選分類。當(dāng)用戶選擇后,使用strcmp函數(shù)和for語句遍歷數(shù)組S去尋找對應(yīng)的信息,并且輸出。
?
8、SortS函數(shù):讓用戶選擇是降序還是升序,然后使用冒泡排序進(jìn)行排序并且輸出。
?? 9、AddS函數(shù): 相當(dāng)于IntputS函數(shù)的簡化版,直接提示用戶依次輸入需要增加的學(xué)生的信息,然后將用戶輸入的信息錄入到S[L]中。并且在錄入完畢后應(yīng)在函數(shù)末尾加上一條語句:L++;。
10、DeleteS函數(shù):讓用戶選擇性輸入姓名或者學(xué)號,然后通過strcmp函數(shù)和for語句遍歷數(shù)組S去尋找這名學(xué)生,如果學(xué)生存在,那么將此學(xué)生信息刪除,如果不存在,那么輸出“不存在此學(xué)生”。函數(shù)的末尾加上一條語句:L--;。(具體刪除方法可能不止一種,我的建議是將此學(xué)生的數(shù)據(jù)與后一名學(xué)生的數(shù)據(jù)進(jìn)行更換,重復(fù)操作,直到此學(xué)生的數(shù)據(jù)進(jìn)入S[L-1])
11、ChangeS函數(shù):讓用戶選擇性輸入姓名或者學(xué)號,然后通過strcmp函數(shù)和for語句遍歷數(shù)組S去尋找這名學(xué)生,如果學(xué)生存在,那么引導(dǎo)用戶去進(jìn)行信息的修改,如果學(xué)生不存在,輸出“不存在此學(xué)生”。
12、MemoryToFileL函數(shù):將L中的數(shù)據(jù)寫入到 d:\\number.txt 文件中。
13、MemoryToFileS函數(shù):將數(shù)組S中的數(shù)據(jù)寫入到d:\\information.txt文件中。
????