11計本(3)班《c++課程設(shè)計報告》學(xué)生信息管理系統(tǒng)程張磊
《11計本(3)班《c++課程設(shè)計報告》學(xué)生信息管理系統(tǒng)程張磊》由會員分享,可在線閱讀,更多相關(guān)《11計本(3)班《c++課程設(shè)計報告》學(xué)生信息管理系統(tǒng)程張磊(12頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、巢湖學(xué)院計算機(jī)與信息工程學(xué)院 課程名稱 C++課程設(shè)計 課題名稱 學(xué)生信息管理系統(tǒng) 專 業(yè) 計算機(jī)科學(xué)與技術(shù) 班 級 11級計本3班 學(xué) 號 11011169 姓 名 程張磊 聯(lián)系方式 18226926353 指導(dǎo)教師 許榮泉 目錄 一、 系統(tǒng)的設(shè)計需求--------------------------2
2、 二、 系統(tǒng)的功能模塊劃分----------------------2 三、 系統(tǒng)的整體設(shè)計--------------------------2 四、 調(diào)試分析--------------------------------6 五、 總結(jié)------------------------------------7 六、 附件:代碼------------------------------7 一、系統(tǒng)的設(shè)計需求 1、整個系統(tǒng)均用C語言實現(xiàn); 2、利用指針、鏈表來實現(xiàn)學(xué)生成績的數(shù)據(jù)結(jié)構(gòu)設(shè)計; 3、系統(tǒng)具有輸入、顯示、刪除、排序、退出基本功能; 4、系統(tǒng)的各個功
3、能模塊都用函數(shù)的形式來實現(xiàn); 5、可以將學(xué)生信息全部顯示出來出來。 二、系統(tǒng)的功能模塊劃分 每一條記錄包括一個學(xué)生的姓名、成績。同時 1、輸入功能:一次可以完成一個學(xué)生成績記錄的輸入。 2、顯示功能:完成全部學(xué)生記錄的顯示。 3、刪除功能:對指定學(xué)生的成績進(jìn)行刪除。 4、排序功能:按學(xué)生從大到小進(jìn)行排序。 5、修改功能:對學(xué)生的成績進(jìn)行修改。 三、系統(tǒng)的整體設(shè)計 1).數(shù)據(jù)結(jié)構(gòu)設(shè)計: A、輸入功能的設(shè)計: void insert_func(void) {char s_temp[4]; ptr=(struct student *) mall
4、oc(sizeof(struct student)); printf(" Student name : "); gets(ptr->name);// gets從標(biāo)準(zhǔn)輸入設(shè)備讀取字符串// printf(" Student score: "); gets(s_temp); ptr->score = atoi(s_temp);//把字符串轉(zhuǎn)化為 整數(shù)// B、刪除功能的設(shè)計: void delete_func(void)//現(xiàn)在進(jìn)入刪除操作// {char del_name[20]; printf(" Delete student name: "); gets(del_name
5、); prev = head; current = head->next; while ((current != NULL) && (strcmp(current->name , del_name)!=0))//用到了strcmp 比較字符串 {prev = current; current = current->next; }if (current != NULL) {prev->next = current->next; free(current);//釋放當(dāng)前位置// printf(" %s student record deleted\n",del_name);//輸
6、出被刪除的姓名// }else printf(" Student %s not found\n",del_name);//否則此學(xué)生不存在// C、排序功能的設(shè)計: void sort_func(void) //插入數(shù)據(jù)// {prev = head;//把頭指針?biāo)傅闹蹈督oprev// current = head->next;//把頭指針的下一個指針值付給當(dāng)前指針?biāo)傅奈恢?/ while ((current != NULL) && (current->score > ptr->score)) {prev = current; current = current->ne
7、xt; }ptr->next = current; prev->next = ptr; D、修改功能的設(shè)計: void modify_func(void) {char n_temp[20],s_temp[4];//定義字符類型// printf(" Modify student name: "); gets(n_temp);//這樣輸入姓名 current=head->next; while ((current != NULL) && (strcmp(current->name , n_temp)!=0)) {prev = current; current = curre
8、nt->next; }if (current != NULL) {printf(" **************************\n"); printf(" Student name : %s\n",current->name); printf(" Student score: %d\n",current->score); printf(" **************************\n"); printf(" Please enter new score: "); gets(s_temp); current->score = atoi(s_temp);
9、 printf(" %s student record modified\n",n_temp); }//輸出被修改的成績// else printf(" Student %s not found\n",n_temp);//否則此學(xué)生不存在// anykey_func(); E、顯示功能的設(shè)計: void display_func(void)//定義顯示// {int count=0; system("cls"); if(head->next == NULL)//如果頭指針?biāo)笖?shù)為空// {printf(" No student record\n");//則輸出學(xué)生記錄為空/
10、/ }else//否則輸出學(xué)生姓名和成績// {printf(" NAME SCORE\n"); printf(" ---------------------------\n"); current=head->next; while(current != NULL) {printf(" %-20s %3d\n", current->name, current->score); count++; current=current->next; if(count % 20 == 0) getch(); }printf(" ------------
11、---------------\n"); printf(" Total %d record(s) found\n", count); 2).功能模塊的具體設(shè)計 整個系統(tǒng)除了主函數(shù)外,另外還有8個函數(shù),實現(xiàn)5大功能:輸入功能、顯示功能、排序功能、刪除功能、修改功能。各個函數(shù)的詳細(xì)設(shè)計說明分別如下: 1、 主函數(shù) main() 利用while()循環(huán)和swithch()實現(xiàn)各函數(shù)的調(diào)用,系統(tǒng)根據(jù)輸入的數(shù)字選項來調(diào)用相應(yīng)的函數(shù)。 2、 輸入記錄函數(shù)getch(); insert_func(); 這是一個無參函數(shù),用來執(zhí)行第學(xué)生成績記錄的輸入,當(dāng)當(dāng)沒有學(xué)生紀(jì)錄時就開始進(jìn)行輸入操作。
12、 算法:先聲明一個首節(jié)點head,并將head->next設(shè)為NULL。然后用 if((fptr=fopen(“slist.dat”,”r”))==NULL)對程序進(jìn)行判斷如果成立則進(jìn)行輸入,輸入時運(yùn)用getch()函數(shù)和insert_func()主導(dǎo)來完成。 最終效果圖: 3、 顯示記錄函數(shù) void display_func(void) 這是一個不返回值的有參函數(shù),負(fù)責(zé)對全部學(xué)生成績記錄的輸出,不足之處就是不能對學(xué)生成績進(jìn)行分頁顯示。 算法: 先用if語句對頭指針的下一給位置進(jìn)行判斷看是否為空如果為空則不顯示如果不為空則輸出學(xué)生姓名及成績。算法:現(xiàn)將head->next賦值給當(dāng)前
13、位置current然后再用while對current進(jìn)行定義最后輸出。 最終效果: 4、 刪除記錄函數(shù)void delete_func(void)這是一個有參函數(shù),先輸入要刪除的學(xué)生記錄的 姓名,找到后顯示該學(xué)生信息,等確認(rèn)后便可進(jìn)行刪除。 算法:從p指向的第一個結(jié)點開始,檢查該結(jié)點中的num值是否等于輸入的要求刪除的那個姓名。如果相等就將該結(jié)點刪除,如不相等,就將p后移一個結(jié)點,再如此進(jìn)行下去,直到遇到表尾為止。最終效果: 5、排序函數(shù)void sort_func(void) 這是一個有參函數(shù),按學(xué)生成績的大小進(jìn)行排 6、修改函數(shù) void modify_func(voi
14、d)這是一個有參函數(shù),先輸入要修改的學(xué)生姓名找到后對其成績進(jìn)行修改。 算法:先將head->next賦值給當(dāng)前位置current然后用while函數(shù)對其進(jìn)行定義然后檢查該節(jié)點中的姓名是不是p要找的如果相等就修改,如不相等,就將current –>next賦值給current在于p節(jié)點比較直到遇到表尾為止。 四、調(diào)試分析 (1)剛開始沒有那個初始化函數(shù),程序運(yùn)行后,沒有輸入任何數(shù)據(jù)就試得去執(zhí)行顯示功能,結(jié)果顯示的是一些亂碼!加入初始化函數(shù)后,這種現(xiàn)象也隨之消失。 (2)剛開始執(zhí)行輸入函數(shù),輸入十個學(xué)生的成績,輸完后執(zhí)行顯示功能,學(xué)生成績記錄是按輸入時的順序顯示的,試著在其
15、中增加一些語句,希望能把學(xué)號按從大到小的順序顯示,但暫時沒有成功,但最后還是按從大到小的順序輸出了。 (3)在輸入函數(shù)中設(shè)了一個無限循環(huán),可以輸入無數(shù)個學(xué)生的成績信息,但最后失敗了只能一個一個輸入。 (4)輸入太多個學(xué)生的成績時,屏幕顯示不能控制為一頁一頁顯示,所以為了方便起見,不要輸入太多記錄,十七左右為最佳。 五、 總結(jié) 經(jīng)過C語言課程設(shè)計,感覺自己收獲不少!這次課程設(shè)計雖然花了我不少時間,但正是這些時間,讓我見識到了C語言的重要性。這個學(xué)生成績管理系統(tǒng)都是在自己知識范圍內(nèi)完成的,所以界面清晰簡單,可能不是很好看,但絕對實用! 從這里我也得到一個體會,做一個程序,
16、或者開發(fā)一個軟件,應(yīng)該著重從它的后臺制作入手,不能做出一個中看不中用的程序或者軟件。
相信這次的課程設(shè)計為我以后繼續(xù)從事計算機(jī)工作打了一個小小的開頭。
六、附件:代碼
/* file name: slist.c */
/* 單向鍵結(jié)鏈表,插入、刪除使用排序 */
//學(xué)會對文件操作文件操作和單鏈表一起使用
#include
17、d); void insert_func(void); void sort_func(void);// sort意思為類型// void delete_func(void); void display_func(void); /*DSFGAFSHDGSJHDF*/ void modify_func(void); /*DSFGAFSHDGSJHDF*/ void anykey_func(void); /*DSFGAFSHDGSJHDF*/ struct student { char name[20]; /*DSFGAFSHDGSJHDF*/ int score;
18、 struct student *next; }; struct student *ptr, *head, *current, *prev;//全部聲明為全局變量 int main(void) { char option1; system("cls");//清屏 read_func();//func意思為目前使用者定義函式的參數(shù)列的數(shù)目// while(1) { printf("****************************************\n"); printf(" 1.插入\n"); printf("
19、 2.刪除\n"); printf(" 3.顯示\n"); printf(" 4.修改\n"); printf(" 5.退出\n"); printf("****************************************\n"); printf(" Please enter your choice (1-5)..."); option1=getche(); printf("\n");/*DSFGAFSHDGSJHDF*/ switch(option1) { case
20、 '1': insert_func(); break; case '2': delete_func(); break; case '3': display_func(); break; case '4': modify_func(); break; case '5': // write_func();//寫入?yún)?shù)數(shù)目// exit(0);//這里也處理的比較好 } } } void read_func(void) { FILE *fptr;// FILE意思為歸檔// head=(struct student *) malloc(sizeof(st
21、ruct student)); head->next = NULL; /* 開始時,若表中不存在數(shù)據(jù),則要求輸入第一筆數(shù)據(jù) */ if((fptr=fopen("slist.dat","r")) == NULL) {printf(" Data file not exist\n");//數(shù)據(jù)文件不存在// printf(" Press any key to edit first record...\n"); getch();//字符插入函數(shù)// insert_func();//不存在就實行插入操作 }else {ptr=(struct student *) malloc(siz
22、eof(struct student)); while(fscanf(fptr, "%s %d", ptr->name, &ptr->score) != EOF) {sort_func(); ptr=(struct student *) malloc(sizeof(struct student)); }fclose(fptr);//關(guān)閉fptr所指的文件釋放緩沖區(qū)// }} void write_func(void) {FILE *fptr; fptr=fopen("slist.dat","w"); current=head->next;// current意思為當(dāng)前的//
23、 while(current != NULL) {fprintf(fptr, "%s %d\n", current->name, current->score); current = current->next; }fclose(fptr); }void insert_func(void) //一插入就比較字符串(想比較很簡單) 不是等到全部插完了才比較 {char s_temp[4]; ptr=(struct student *) malloc(sizeof(struct student)); printf(" Student name : "); gets(ptr->nam
24、e);// gets從標(biāo)準(zhǔn)輸入設(shè)備讀取字符串// printf(" Student score: "); gets(s_temp); ptr->score = atoi(s_temp);//把字符串轉(zhuǎn)化為 整數(shù)// sort_func(); }/*以分?jǐn)?shù)高低由大到小排列*/ void sort_func(void) //插入數(shù)據(jù)// {prev = head;//把頭指針?biāo)傅闹蹈督oprev// current = head->next;//把頭指針的下一個指針值付給當(dāng)前指針?biāo)傅奈恢?/ while ((current != NULL) && (current->scor
25、e > ptr->score)) {prev = current; current = current->next; }ptr->next = current; prev->next = ptr; }//前面是進(jìn)行成績排序操作// void delete_func(void)//現(xiàn)在進(jìn)入刪除操作// {char del_name[20]; printf(" Delete student name: "); gets(del_name); prev = head; current = head->next; while ((current != NULL) && (str
26、cmp(current->name , del_name)!=0))//用到了strcmp 比較字符串 {prev = current; current = current->next; }if (current != NULL) {prev->next = current->next; free(current);//釋放當(dāng)前位置// printf(" %s student record deleted\n",del_name);//輸出被刪除的姓名// }else printf(" Student %s not found\n",del_name);//否則此學(xué)生不存在//
27、 //以上為刪除操作// anykey_func(); }//進(jìn)入修改操作// void modify_func(void) {char n_temp[20],s_temp[4];//定義字符類型// printf(" Modify student name: "); gets(n_temp);//這樣輸入姓名 current=head->next; while ((current != NULL) && (strcmp(current->name , n_temp)!=0)) {prev = current; current = current->next; }if
28、(current != NULL) {printf(" **************************\n"); printf(" Student name : %s\n",current->name); printf(" Student score: %d\n",current->score); printf(" **************************\n"); printf(" Please enter new score: "); gets(s_temp); current->score = atoi(s_temp); printf(" %s st
29、udent record modified\n",n_temp); }//輸出被修改的成績// else printf(" Student %s not found\n",n_temp);//否則此學(xué)生不存在// anykey_func(); }//進(jìn)入顯示操作// void display_func(void)//定義顯示// {int count=0; system("cls"); if(head->next == NULL)//如果頭指針?biāo)笖?shù)為空// {printf(" No student record\n");//則輸出學(xué)生記錄為空// }else//否則輸出
30、學(xué)生姓名和成績// {printf(" NAME SCORE\n"); printf(" ---------------------------\n"); current=head->next; while(current != NULL) {printf(" %-20s %3d\n", current->name, current->score); count++; current=current->next; if(count % 20 == 0) getch(); }printf(" ---------------------------\n"); printf(" Total %d record(s) found\n", count); }anykey_func(); }void anykey_func(void)//任何鍵繼續(xù) {printf(" Press any key to continue..."); getch(); printf("\n"); } - 11 -
- 溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第八章社會組織與權(quán)威體系課件
- 硬膜下血腫護(hù)理查房課件
- 第二單元---第5課----凡爾賽體系的建立課件
- 商品行業(yè)跨境電商市場調(diào)研
- 第九章Inmarsat-BF系統(tǒng)及其船站課件
- 我與明天有個約會
- 電動氣壓止血儀課件
- 五年級語文下冊 金色的腳印2課件 魯教
- 食品中三聚氰胺的檢測方法課件
- 人事年終工作總結(jié)ppt模板商務(wù)2018計劃PPT
- 圖解石材幕墻干掛做法課件
- 農(nóng)產(chǎn)品電商項目解決方案課件
- 偶發(fā)性肺結(jié)節(jié)影像診斷方法評估與處置原則課件
- 戶外用品提案課件
- Unit4_What_are_you_doing第四課時