版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 學(xué)生成績管理系統(tǒng) </b></p><p> 本題目設(shè)計目的是訓(xùn)練學(xué)生的基本編程能力,了解管理信息系統(tǒng)的開發(fā)流程,熟悉C語言的文件和單鏈表的各種基本操作。本程序中涉及結(jié)構(gòu)體、單鏈表、文件等方面的知識。通過本程序的訓(xùn)練,使學(xué)生能對C語言的文件操作有一個更深刻的了解,掌握利用單鏈表存儲結(jié)構(gòu)實(shí)現(xiàn)對學(xué)生成績管理的原理,為進(jìn)一步開發(fā)出高質(zhì)量的管理信息系統(tǒng)打下堅實(shí)的基礎(chǔ)。
2、</p><p><b> 一、問題定義</b></p><p> 創(chuàng)建一個學(xué)生成績管理系統(tǒng)。假設(shè)系統(tǒng)中每個學(xué)生記錄只包括班級、學(xué)號、姓名、性別、數(shù)學(xué)成績、英語成績、計算機(jī)成績、總分、平均分、名次等信息。程序的運(yùn)行效果如下圖所示,選擇任意菜單后,實(shí)現(xiàn)相應(yīng)功能。</p><p> 圖1.1 學(xué)生成績管理系統(tǒng)功能需求</p>
3、<p><b> 二、系統(tǒng)設(shè)計</b></p><p><b> 2.1 總體設(shè)計</b></p><p> 采用模塊化的程序設(shè)計方法,即將較大的任務(wù)按照一定的原則分為一個個較小的任務(wù),然后分別設(shè)計各個小任務(wù)。</p><p> 本成績管理系統(tǒng)要求采用單鏈表實(shí)現(xiàn),如上圖2.1所示,它由如下五大功能模塊組成
4、:</p><p> 輸入記錄模塊。完成將數(shù)據(jù)存入單鏈表的工作。記錄可以從以二進(jìn)制形式存儲的數(shù)據(jù)文件中讀入,也可從鍵盤逐個輸入學(xué)生記錄。學(xué)生記錄由學(xué)生的基本信息和成績信息字段構(gòu)成。當(dāng)從數(shù)據(jù)文件中讀入記錄時,也就是把在以記錄為單位存儲的數(shù)據(jù)文件中,將記錄逐條復(fù)制到單鏈表中。</p><p> 查詢記錄模塊。完成在單鏈表中查找滿足相關(guān)條件的學(xué)生記錄。在此成績管理系統(tǒng)中,用戶可以按照學(xué)生的班
5、級、學(xué)號、名次或姓名在單鏈表中進(jìn)行查找。若找到該學(xué)生的記錄,則返回指向該學(xué)生的記錄的指針。否則返回一個值為NULL的空指針,并打印出未找到該學(xué)生記錄的提示信息。</p><p> 更新記錄模塊。完成對學(xué)生記錄的維護(hù)。在此成績管理系統(tǒng)中,它實(shí)現(xiàn)了對學(xué)生記錄的刪除和排序操作,并將修改后的數(shù)據(jù)存入源數(shù)據(jù)文件。</p><p> 統(tǒng)計記錄模塊。完成對各門功課最高分和不及格人數(shù)的統(tǒng)計。</
6、p><p> 輸出記錄模塊。一是實(shí)現(xiàn)對學(xué)生記錄的存盤,即將記錄寫入數(shù)據(jù)文件中;二是實(shí)現(xiàn)將記錄信息以表格的形式在屏幕上打印出來。 </p><p><b> 2.2 詳細(xì)設(shè)計</b></p><p> 2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計</p><p><b> 學(xué)生成績信息結(jié)構(gòu)體</b></p>
7、<p> #ifndef H_STUDENT_HH /*如果H_STUDENT_HH沒有定義*/</p><p> #define H_STUDENT_HH /*那就定義 H_STUDENT_HH */</p><p> #include <stdio.h></p><p>
8、 #include <string.h></p><p> #include <malloc.h></p><p> #define LEN sizeof(struct message_student) /*一個結(jié)構(gòu)體數(shù)組元素的長度*/</p><p> #define numsubs 3
9、/*學(xué)科數(shù)目*/</p><p> typedef struct message_student /*結(jié)構(gòu)體定義*/</p><p><b> {</b></p><p> char number[6]; /*學(xué)號*/</p><p> char
10、 number1[6]; /*班級*/</p><p> char name[20]; /*學(xué)生姓名*/</p><p> char sex[4]; /*性別*/</p><p> float subject[n
11、umsubs]; /*科目*/</p><p> float score; /*總分*/</p><p> float average; /*平均分*/</p><p> int index;</p>
12、<p><b> }student;</b></p><p> extern int numstus; /*學(xué)生數(shù)目*/</p><p> extern student *pointer; /*指向結(jié)構(gòu)體
13、數(shù)組*/</p><p> extern int lens;</p><p> int menu_select(); /*聲明函數(shù)*/</p><p> int dakaiwenjian(student stu[]); /*打開文件*/<
14、/p><p> int chaxunjilu(student stud[]); /*查詢記錄*/</p><p> int cunchujilu(student stud[]); /*存儲記錄*/</p><p> void huanying();
15、 /*歡迎界面*/</p><p> void xianshijilu1(); /*顯示記錄*/</p><p> void showtable(); /*顯示桌面*/</p><p> void paixu(student
16、 stu[]); /*排序*/</p><p> void shanchujilu(student stu[],int i); /*刪除*/</p><p> void tianjiajilu(student stud[]); /*添加記錄*/</p>
17、<p> void xianshijilu(student stud[],int n1,int n2); /*顯示記錄*/</p><p> void xiugaijilu(student stud[]); /*修改記錄*/</p><p> void jishu(student stud[]);
18、 /*為記錄計數(shù)*/</p><p> void paixunum(student stud[]); /*為記錄排序*/</p><p> void paixunum2(student stud[]); /*為記錄排序*/</p><p> void pa
19、ixuname(student stud[]); /*為記錄排序*/</p><p> void paixuname2(student stud[]); /*為記錄排序*/</p><p> void paixujishu(student stud[]); /*為記錄排序*
20、/</p><p> void paixujishu2(student stud[]); /*為記錄排序*/</p><p> void tongjishuju(student stud[]); /*統(tǒng)計記錄*/</p><p> void xianshijilu1();
21、 /*顯示記錄*/</p><p> 2.2.2 主控main()函數(shù)執(zhí)行流程</p><p> 本成績管理系統(tǒng)根據(jù)按鍵判斷。</p><p> 在判斷鍵值時,有效的輸入為本0至8之間的任意數(shù)值,其他輸入都被視為錯誤按鍵。若輸入為0(即變量select=0),它會繼續(xù)判斷,如果對記錄進(jìn)行過更新操作,那么是否已經(jīng)
22、保存過新的數(shù)據(jù),若沒有,則全局變量saveflage=1,系統(tǒng)會提示用戶是否需要進(jìn)行數(shù)據(jù)存盤操作,用戶輸入y或n,系統(tǒng)會自動進(jìn)行存盤操作后再執(zhí)行退出成績管理系統(tǒng)的操作。</p><p> 若選擇1,則調(diào)用tianjiajilu函數(shù),執(zhí)行增加學(xué)生記錄操作;</p><p> 若選擇2,則調(diào)用chaxunjilu函數(shù),執(zhí)行查詢學(xué)生記錄操作;</p><p> 若選
23、擇3,則首先調(diào)用chaxunjilu函數(shù),執(zhí)行查詢學(xué)生記錄操作,查找出學(xué)生紀(jì)錄后再調(diào)用shanchujilu函數(shù),執(zhí)行刪除學(xué)生記錄操作;</p><p> 若選擇4,則調(diào)用sort函數(shù),執(zhí)行按降序排序?qū)W生記錄操作;</p><p> 若選擇5,則調(diào)用tongjishuju函數(shù),執(zhí)行統(tǒng)計學(xué)生記錄操作;</p><p> 若選擇6,則調(diào)用dakaiwenjian函
24、數(shù),打開一個已儲存的文件;</p><p> 若選擇8,則調(diào)用cunchujilu函數(shù),執(zhí)行將學(xué)生記錄存入數(shù)據(jù)文件的操作;</p><p> 若選擇0,break,退出系統(tǒng);</p><p> 若輸入為0~9之外的值,default,給出按鍵錯誤的提示"輸入錯誤,請輸入數(shù)字0~8:"。</p><p><b&g
25、t; 函數(shù)功能描述</b></p><p> 函數(shù)名: strcmp 功 能: 串比較 用 法: int strcmp(char *str1, char *str2); 程序例: </p><p> #include <string.h> #include <stdio.h> </p><p>
26、; int main(void) { char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc"; int ptr; </p><p> ptr = strcmp(buf2, buf1);
27、160; if (ptr > 0) printf("buffer 2 is greater than buffer 1\n"); else printf("buffer 2 is less than buffer
28、 1\n"); </p><p> ptr = strcmp(buf2, buf3); if (ptr > 0) printf("buffer 2 is greater than buffer 3\n"); else &
29、#160; printf("buffer 2 is less than buffer 3\n"); </p><p> return 0; }</p><p> 函數(shù)名: getchar 功 能: 從stdin流中讀字符 用 法: int getchar(void)
30、; 程序例: </p><p> #include <stdio.h> </p><p> int main(void) { int c; </p><p> /* Note that getchar reads from stdin and is li
31、ne buffered; this means it will not return until you press ENTER. */ </p><p> while ((c = getchar()) != '\n') printf("%c", c
32、); </p><p> return 0; }</p><p> 函數(shù)名: gets 功 能: 從流中取一字符串 用 法: char *gets(char *string); 程序例: </p><p> #include <stdio.h> </p><p> int main(void
33、) { char string[80]; </p><p> printf("Input a string:"); gets(string); printf("The string input was: %s\n", string);
34、; return 0; }</p><p> 函數(shù)名: fopen 功 能: 打開一個流 用 法: FILE *fopen(char *filename, char *type); 程序例: </p><p> #include <stdlib.h> #include <stdio.h> #include <dir.h&
35、gt; </p><p> int main(void) { char *s; char drive[MAXDRIVE]; char dir[MAXDIR]; char file[MAXFILE]; char e
36、xt[MAXEXT]; int flags; </p><p> s=getenv("COMSPEC"); /* get the comspec environment parameter */ flags=fnsplit(s,drive,dir,file,ext); </p><p>
37、 printf("Command processor info:\n"); if(flags & DRIVE) printf("\tdrive: %s\n",drive); if(flags & DIRECTORY)
38、0; printf("\tdirectory: %s\n",dir); if(flags & FILENAME) printf("\tfile: %s\n",file); if
39、(flags & EXTENSION) printf("\textension: %s\n",ext); </p><p> return 0; }</p><p> 函數(shù)名: fscanf 功 能: 從一個流中執(zhí)行格式化輸入 用 法: int fsca
40、nf(FILE *stream, char *format[,argument...]); 程序例: </p><p> #include <stdlib.h> #include <stdio.h> </p><p> int main(void) { int i; </p><p> printf(&
41、quot;Input an integer: "); </p><p> /* read an integer from the standard input stream */ if (fscanf(stdin, "%d", &i))
42、0; printf("The integer read was: %i\n", i); else { fprintf(stderr, &qu
43、ot;Error reading an \ integer from stdin.\n"); exit(1); } return 0; }</
44、p><p> 函數(shù)名: fgetc 功 能: 從流中讀取字符 用 法: int fgetc(FILE *stream); 程序例: </p><p> #include <string.h> #include <stdio.h> #include <conio.h> </p><p> int
45、main(void) { FILE *stream; char string[] = "This is a test"; char ch; </p><p> /* open a file for update */ stream = fopen("DUMMY.FIL&
46、quot;, "w+"); </p><p> /* write a string into the file */ fwrite(string, strlen(string), 1, stream); </p><p> /* seek to the beginning of the file */ fsee
47、k(stream, 0, SEEK_SET); </p><p> do { /* read a char from the file */ ch = fgetc(stream); </p><p> /* display the
48、character */ putch(ch); } while (ch != EOF); </p><p> fclose(stream); return 0; }</p><p> 函數(shù)名: fprintf 功 能: 傳送格式化輸出到一個流中 用&
49、#160; 法: int fprintf(FILE *stream, char *format[, argument,...]); 程序例: </p><p> /* Program to create backup of the AUTOEXEC.BAT file */ </p><p> #include <stdio.h> </p&
50、gt;<p> int main(void) { FILE *in, *out; </p><p> if ((in = fopen("\\AUTOEXEC.BAT", "rt")) == NULL) {
51、160; fprintf(stderr, "Cannot open input \ file.\n"); return 1; } </p><p> if ((out = fopen(&qu
52、ot;\\AUTOEXEC.BAK", "wt")) == NULL) { fprintf(stderr, "Cannot open output \ fi
53、le.\n"); return 1; } </p><p> while (!feof(in)) fputc(fgetc(in), out); </p><p> fclose(in); fcl
54、ose(out); return 0; }</p><p> 函數(shù)名: strcpy 功 能: 串拷貝 用 法: char *strcpy(char *str1, char *str2); 程序例: </p><p> #include <stdio.h> #include <string.h> &l
55、t;/p><p> int main(void) { char string[10]; char *str1 = "abcdefghi"; </p><p> strcpy(string, str1); printf("%s\n
56、", string); return 0; }</p><p><b> 三、總結(jié)</b></p><p> 為期三周的高級語言程序設(shè)計結(jié)束了。這學(xué)期后期,我們被通知要進(jìn)行三周的課程設(shè)計。當(dāng)時有點(diǎn)懵,感覺學(xué)的東西很少,很零散,不知該怎么聯(lián)到一起,就要課程設(shè)計,是不是太難為我們了。 第一天基本上
57、都是在看書,把基本知識再熟悉一邊。老師發(fā)過來20道設(shè)計題目題,但我們幾乎不知道怎樣完成這些任務(wù),不過任務(wù)中還附帶著一些設(shè)計樣例,從這幾道樣例上我得到了不少啟發(fā),然后我們組把整個程序的思路理清了,開始著手寫程序。第一周結(jié)束的時候,我感覺自己收獲挺大的,從一開始的迷茫,不知道從何下手到把程序中的幾個模塊編寫出來,心里挺開心的。但是,到了第二周,我們由不得不再次陷入困境。在整個程序的編寫過程中。最難的就是修改和刪除這兩個模塊,這也是我們第二
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 課程設(shè)計報告-學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 課程設(shè)計報告--學(xué)生成績管理系統(tǒng)
- 課程設(shè)計報告---學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 《學(xué)生成績管理系統(tǒng)》課程設(shè)計報告
- vb學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- java課程設(shè)計報告---學(xué)生成績管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告 (2)
- java學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- java學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告 (3)
- c課程設(shè)計報告--學(xué)生成績管理系統(tǒng)
- java學(xué)生成績管理系統(tǒng)課程設(shè)計報告
- 學(xué)生成績管理系統(tǒng)課程設(shè)計報告.doc
- vfp課程設(shè)計報告---學(xué)生成績管理系統(tǒng)
評論
0/150
提交評論