學(xué)生成績管理系統(tǒng)—C語言課程設(shè)計(jì)報(bào)告_第1頁
學(xué)生成績管理系統(tǒng)—C語言課程設(shè)計(jì)報(bào)告_第2頁
學(xué)生成績管理系統(tǒng)—C語言課程設(shè)計(jì)報(bào)告_第3頁
學(xué)生成績管理系統(tǒng)—C語言課程設(shè)計(jì)報(bào)告_第4頁
學(xué)生成績管理系統(tǒng)—C語言課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、c語言課程設(shè)計(jì)報(bào)告題 目: 學(xué)生成績管理系統(tǒng)一. 設(shè)計(jì)目的1. 強(qiáng)化上機(jī)動(dòng)手能力,在理論和實(shí)踐的基礎(chǔ)上進(jìn)一步鞏固c語言程序設(shè)計(jì)課程學(xué)習(xí)的內(nèi)容,掌握工程化軟件設(shè)計(jì)的基本方法2. 學(xué)會(huì)將知識(shí)應(yīng)用于實(shí)際的方法,提高分析和解決問題的能力,增加綜合能力3. 為后續(xù)各門計(jì)算機(jī)課程的學(xué)習(xí)打下堅(jiān)實(shí)基礎(chǔ)二. 設(shè)計(jì)內(nèi)容1、密碼登錄;2、通過鍵盤輸入學(xué)生信息,包括學(xué)生學(xué)號(hào)、姓名、成績;3、將輸入的信息保存到指定文件中;4、從文件中讀取學(xué)生信息;5、顯示全部學(xué)生信息;6、按學(xué)生總分進(jìn)行降序排序;7、刪除學(xué)生信息;8、查找學(xué)生信息,可以通過學(xué)號(hào)查找,也可以通過姓名查找;9、統(tǒng)計(jì)學(xué)生信息,統(tǒng)計(jì)出最高分和學(xué)生人數(shù);10、退

2、出系統(tǒng);三概要設(shè)計(jì)1功能模塊圖;主程序輸 入 學(xué) 生信 息顯 示 學(xué) 生信 息查 找 學(xué) 生信 息修 改 學(xué) 生信 息密碼登錄刪 除學(xué) 生信 息總 分排 序情 況統(tǒng) 計(jì)學(xué) 生信 息2各個(gè)模塊詳細(xì)的功能描述。1、密碼登錄:進(jìn)入系統(tǒng)前需輸入密碼口令,此處的密碼分為管理員登錄密碼“abcde”,學(xué)生登錄密碼“12345”;2、輸入信息:輸入學(xué)生信息,包括:學(xué)號(hào)、姓名、成績;3、顯示信息:顯示輸入的信息或者經(jīng)過處理后的信息4、查找信息:查找學(xué)生信息,可以按學(xué)號(hào)查找,也可以按姓名查找;5、修改信息:修改學(xué)生的任何信息;6、刪除信息:通過查找學(xué)生姓名刪除該學(xué)生信息;7、排序信息:將輸入的學(xué)生信息排序,按總

3、分成績降序排列;8、統(tǒng)計(jì)信息:統(tǒng)計(jì)出所有信息中的最高分成績的學(xué)生的信息和學(xué)生人數(shù)。四詳細(xì)設(shè)計(jì)1功能函數(shù)的調(diào)用關(guān)系圖學(xué)生信息管理系統(tǒng)登錄系統(tǒng)輸入密碼登錄系統(tǒng)錄入學(xué)生信息顯示學(xué)生信息總分排序情況刪除學(xué)生信息修改學(xué)生信息學(xué)生成績統(tǒng)計(jì)查詢學(xué)生信息按2鍵退出系統(tǒng)2各功能函數(shù)的數(shù)據(jù)流程圖1、主函數(shù)模塊登錄(輸入密碼)判斷密碼顯示主菜單選擇要操作的模塊調(diào)用相應(yīng)模塊返回主菜單退出選擇項(xiàng)結(jié)束密碼錯(cuò)誤密碼正確2、輸入模塊學(xué)生信息輸入模塊進(jìn)入依次輸入各項(xiàng)信息選擇自符ch判斷ch!=n& ch!=n返回2、輸出與排序模塊輸出學(xué)生信息模塊進(jìn)入p=head輸出對(duì)應(yīng)學(xué)生信息p=p-nextp!=null結(jié)束總分排序情況進(jìn)入

4、冒泡法排序總成績由大到小排序輸出結(jié)束3、刪除與修改信息模塊刪除學(xué)生信息模塊進(jìn)入輸入學(xué)生的姓名從頭指針依次查找p=p-next執(zhí)行刪除操作結(jié)束head=null該學(xué)生不存在修改學(xué)生信息模塊進(jìn)入輸入學(xué)生姓名從頭指針依次查找加結(jié)束判斷strcmp(p-name.a)!=op=p-next修改該學(xué)生的信息該學(xué)生不存在是否4、統(tǒng)計(jì)信息模塊學(xué)生成績統(tǒng)計(jì)模塊進(jìn)入統(tǒng)計(jì)最高分p=headp!=null通過冒泡排序第一個(gè)學(xué)生的信息統(tǒng)計(jì)成功結(jié)束4、查找信息模塊查找學(xué)生信息模塊進(jìn)入從主函數(shù)得到頭指針按學(xué)號(hào)查找按姓名查找將學(xué)號(hào)存在變量b將姓名存在變量ap!=nullp=p-nextstrcmp(p-num.b)!=0s

5、trcmp(p-name.a)!=0是是找到該學(xué)生的信息輸出信息結(jié)束3重點(diǎn)設(shè)計(jì)及編碼此程序的重點(diǎn)是既能把學(xué)生信息保存到文件中,又能保存到磁盤中,方便實(shí)用與讀取,代碼如下:struct student *creat(struct student *p)/創(chuàng)建鏈表struct student *p1 = null;p1 = (struct student*)malloc(sizeof (struct student);p - next = p1;p1 - next = null;printf(請(qǐng)輸入要添加的學(xué)生的信息n);printf(學(xué)號(hào):); scanf(%s,p1 - num);printf

6、(姓名: ); scanf(%s,p1 - name);printf(數(shù)學(xué)成績:); scanf(%d,&p1 - scorem);printf(英語成績:); scanf(%d,&p1 - scoree);printf(c成績:); scanf(%d,&p1 - scorec);p1 - sum = 0;p1 - sum = p1 - scorem + p1 - scorec + p1 - scoree; printf(總分:%d,p1 - sum); return p1;void save1(struct student *p)/將鏈表從內(nèi)存保存到文件中file *fp;if (fp =

7、fopen(d:學(xué)生成績管理系統(tǒng).txt,ab+) = null)printf(創(chuàng)建失敗!n);while(p != null)fwrite(p,sizeof(struct student),1,fp); p = p - next; fclose(fp);printf(保存成功!n);void save2(struct student *p)/將以變動(dòng)的鏈表信息存入到文件中file *fp;if (fp = fopen(d:學(xué)生成績管理系統(tǒng).txt,wb) = null)printf(創(chuàng)建失敗!n);while(p != null)fwrite(p,sizeof(struct student)

8、,1,fp); p = p - next; fclose(fp);struct student *read()/把文件中的數(shù)據(jù)讀到鏈表中file *fp;struct student *head=null,*p1=null,*p2=null;if (fp=fopen (d:學(xué)生成績管理系統(tǒng).txt,rb+)=null)printf (讀取時(shí),文件打開失敗!n);return null;head=p1=(struct student *)malloc (sizeof (struct student );while (fp != null) if (fread(p1,sizeof (struct

9、student ),1,fp) != 1)break;p1 - next = (struct student *)malloc (sizeof (struct student );p2= p1; p1= p1 - next;p2-next = null;fclose (fp);return head;五測試數(shù)據(jù)及運(yùn)行結(jié)果1 正常測試數(shù)據(jù)和運(yùn)行結(jié)果1.按總分排序2.刪除某個(gè)學(xué)生信息3. 查找學(xué)生信息2 異常測試數(shù)據(jù)及運(yùn)行1. 刪除信息出現(xiàn)異常2.修改學(xué)生信息出現(xiàn)異常六調(diào)試情況,設(shè)計(jì)技巧及體會(huì)1、對(duì)自己設(shè)計(jì)進(jìn)行評(píng)價(jià) 1) 不夠細(xì)心,開始的時(shí)候出現(xiàn)很多錯(cuò)誤2) 沒有寫登錄函數(shù)3) 寫的過于簡短,且大

10、部分都是書上照抄的2 .調(diào)試上得到的體會(huì):在最后的調(diào)試過程中,發(fā)現(xiàn)有時(shí)候系統(tǒng)報(bào)錯(cuò),指出了錯(cuò)誤所在的具體位置,可是檢查的時(shí)候發(fā)現(xiàn)該位置并未出錯(cuò),這樣的錯(cuò)誤首先要查找前后幾行,如果還未檢查出錯(cuò)誤,那就很有可能在該函數(shù)的首部或是主函數(shù)的調(diào)用語句中出現(xiàn)錯(cuò)誤。發(fā)現(xiàn)該部分并未出現(xiàn)語法錯(cuò)誤,即編譯不報(bào)錯(cuò),程序運(yùn)行后,有時(shí)候會(huì)出現(xiàn)意想不到的結(jié)果,會(huì)在想不到的地方跳出程序,甚至不知道程序的什么地方就跳出了,用在不同的地方加不必要的printf語句!以檢查是否運(yùn)行到printf語句。 3設(shè)計(jì)上得到的體會(huì):在初步設(shè)計(jì)時(shí)要明確要使用的數(shù)據(jù)結(jié)構(gòu)和類型,明確設(shè)計(jì)的基本思想,清楚所寫程序的邏輯結(jié)構(gòu)和執(zhí)行順序,在調(diào)試時(shí)才能在

11、出現(xiàn)問題時(shí)及時(shí)的找到問題的所在.在完成了初步的設(shè)計(jì)并調(diào)試完成后,要進(jìn)一步優(yōu)化程序的結(jié)構(gòu),使程序更簡潔,執(zhí)行效率更高.總之,第一次完成比較正式的程序,在開始的時(shí)候遇到了不少問題,包括怎么排序,怎么添加,怎么查找,怎么刪除等一系列問題,但我并沒有慌張,而是由一個(gè)問題入手,最后將它們一一攻破,順利而又艱難的完成了這次任務(wù);通過這次實(shí)習(xí),我的編程能力得到了很大的提高,算法思路也比以前清晰多了,基本上掌握了c語言的課程內(nèi)容,雖然只有為期兩周的實(shí)習(xí),但是我的c語言還是得到了進(jìn)一步的提高。不過要想使自己的水平提高,還有待練習(xí)。雖然實(shí)習(xí)結(jié)束了,但是以后在工作中可能會(huì)經(jīng)常使用,這次的實(shí)習(xí)的確是一個(gè)很好的鍛煉機(jī)會(huì)

12、,它一定會(huì)使我受益終身的!七參考文獻(xiàn)c語言程序設(shè)計(jì) (第二版),數(shù)據(jù)結(jié)構(gòu)(c語言) 清華大學(xué)出版社八附錄:源代碼(電子版)#include#include#includestruct studentchar num9;char name9;int scorem;int scoree;int scorec; int sum;struct student *next;struct student *creat(struct student *p)/創(chuàng)建鏈表struct student *p1 = null;p1 = (struct student*)malloc(sizeof (struct st

13、udent);p - next = p1;p1 - next = null;printf(請(qǐng)輸入要添加的學(xué)生的信息n);printf(學(xué)號(hào):); scanf(%s,p1 - num);printf(姓名: ); scanf(%s,p1 - name);printf(數(shù)學(xué)成績:); scanf(%d,&p1 - scorem);printf(英語成績:); scanf(%d,&p1 - scoree);printf(c成績:); scanf(%d,&p1 - scorec);p1 - sum = 0;p1 - sum = p1 - scorem + p1 - scorec + p1 - scor

14、ee; printf(總分:%d,p1 - sum); return p1;void save1(struct student *p)/將鏈表從內(nèi)存保存到文件中file *fp;if (fp = fopen(d:學(xué)生成績管理系統(tǒng).txt,ab+) = null)printf(創(chuàng)建失敗!n);while(p != null)fwrite(p,sizeof(struct student),1,fp); p = p - next; fclose(fp);printf(保存成功!n);void save2(struct student *p)/將以變動(dòng)的鏈表信息存入到文件中file *fp;if (f

15、p = fopen(d:學(xué)生成績管理系統(tǒng).txt,wb) = null)printf(創(chuàng)建失敗!n);while(p != null)fwrite(p,sizeof(struct student),1,fp); p = p - next; fclose(fp);struct student *read()/把文件中的數(shù)據(jù)讀到鏈表中file *fp;struct student *head=null,*p1=null,*p2=null;if (fp=fopen (d:學(xué)生成績管理系統(tǒng).txt,rb+)=null)printf (讀取時(shí),文件打開失敗!n);return null;head=p1=

16、(struct student *)malloc (sizeof (struct student );while (fp != null) if (fread(p1,sizeof (struct student ),1,fp) != 1)break;p1 - next = (struct student *)malloc (sizeof (struct student );p2= p1; p1= p1 - next;p2-next = null;fclose (fp);return head;struct student *input()/添加函數(shù)char ch;struct student

17、*p = null,*head=null; head=p = (struct student*)malloc(sizeof(struct student);p- next = null;printf(請(qǐng)輸入要添加的學(xué)生的信息n);printf(學(xué)號(hào):); scanf(%s,p - num);printf(姓名: ); scanf(%s,p - name);printf(數(shù)學(xué)成績:); scanf(%d,&p - scorem);printf(英語成績:); scanf(%d,&p - scoree);printf(c成績:); scanf(%d,&p - scorec);p - sum = 0

18、;p - sum = p - scorem + p - scorec + p - scoree; printf(總分:%d,p - sum); for (;) printf (n是否繼續(xù)輸入學(xué)生信息?( y / n ):n);getchar( );ch = getchar ( );if (ch = y| ch = y) p = creat(p);else if(ch=n| ch=n) save1 (head);break;else printf (您的輸入有誤,請(qǐng)重新輸入,);return p-next;struct student *output()/輸出函數(shù),查看全部學(xué)生信息struct

19、student *p ;p = read(); if(read=null)exit(1);printf(n *student*n); printf( -n); printf( | 學(xué)號(hào) | 姓名 | 數(shù)學(xué) | 英語 | c語言 | 總分 |n); printf( -n);while (p != null)p - sum = 0; p - sum = p - scorem + p - scoree + p - scorec; printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,p-num, p-name,p-scorem,p-scoree,p-scor

20、ec,p-sum); printf( -n); p = p - next;return p;struct student *search()/查找函數(shù)int n;char a9,b9; struct student *p = null,*head = null; printf(請(qǐng)您選擇要查找的方式:1 按姓名 2 按學(xué)號(hào)n); scanf(%d,&n); if(n=1)printf(請(qǐng)輸入您要查找的學(xué)生的姓名:n);scanf(%s,a);p=head=read();while(p!=null)if(p=null)printf(對(duì)不起,沒有您要找的人。n); if(strcmp(p - nam

21、e,a)=0)printf(n *student*n); printf( -n); printf( | 學(xué)號(hào) | 姓名 | 數(shù)學(xué) | 英語 | c語言 | 總分 |n); printf( -n); printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,p-num, p-name,p-scorem,p-scoree,p-scorec,p-sum); printf( -n); break; p=p-next; if(n=2)printf(請(qǐng)輸入您要查找的學(xué)生的學(xué)號(hào):n); scanf(%s,b);p=head=read(); while(p!=null)i

22、f(p=null)printf(對(duì)不起,沒有您要找的人。n); if(strcmp(p - num,b)=0)printf(n *student*n); printf( -n); printf( | 學(xué)號(hào) | 姓名 | 數(shù)學(xué) | 英語 | c語言 | 總分 |n); printf( -n); printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,p-num, p-name,p-scorem,p-scoree,p-scorec,p-sum); printf( -n); break; p=p-next;return head;struct student

23、*dele()/刪除函數(shù) struct student *p1=null,*p2=null,*head=null;char a9;output();printf (請(qǐng)輸入需要?jiǎng)h除信息的人的姓名:n);scanf (%s,a);p1=head=read();if(head=null)printf(對(duì)不起,暫時(shí)沒有信息,無法刪除。n); while (head!=null)if(strcmp(a,head - name) != 0 & p1-next!=null )p2=head ; head= head-next ;if(head=null) break; if(strcmp(a,head -

24、name) = 0 & p1=head)p1=head-next ;if(strcmp(a,head-name)=0)p2-next=head-next;save2(p1);printf(該學(xué)生的信息刪除成功!);break;if(head=null)printf(對(duì)不起,沒有該學(xué)生的信息。n);return head;struct student *change()/修改函數(shù)int a;char x9;struct student *p = null,*head = null,*q = null;output();p = head = read();printf(請(qǐng)輸入要修改的人的姓名:n)

25、;scanf(%s,x); if(p = null)printf(沒有這個(gè)人!n);exit(1);while (p != null)if (strcmp(p - name,x) = 0)q = p; break; p = p - next;if(p!=null)printf(請(qǐng)選擇修改的內(nèi)容:n); printf(1.姓名n); printf(2.學(xué)號(hào)n); printf(3.數(shù)學(xué)成績n); printf(4.英語成績n); printf(5.c成績n); do scanf (%d,&a); if(a 6) printf (您輸入的數(shù)字有誤,請(qǐng)重新輸入:n);while (a=6); swi

26、tch (a) case 1 :printf(請(qǐng)輸入更改后的姓名:n); scanf(%s,p - name); break; case 2 :printf(請(qǐng)輸入更改后的學(xué)號(hào):n); scanf(%s,p - num); break; case 3 :printf(請(qǐng)輸入更改后的數(shù)學(xué)成績:n);scanf(%d,&p - scorem);break; case 4 :printf(請(qǐng)輸入更改后的英語成績:n);scanf(%d,&p - scoree);break; case 5 :printf(請(qǐng)輸入更改后的c成績:n); scanf(%d,&p - scorec);break;p-sum

27、 =0;p-sum=p-scorem +p-scoree +p-scorec ;printf(更改后的總分:%d,p-sum); save2 (head); output();if(p=null)printf(對(duì)不起,沒有這個(gè)人。n);return head;struct student *sortsum(struct student *head)/排序函數(shù) struct student *p,*p1,*p2,*p3; struct student m, n; if (head = null) return null; m.next=head; p=&m; while (p-next!=nul

28、l) p=p-next; p=p-next=&n; while (p!=m.next) p3=&m; p1=p3-next; p2=p1-next; while (p2!=p) if (p1 - sum) sum) ) p1-next=p2-next; p2-next=p1; p3-next=p2;p3=p2; p2=p1-next; else p3=p1; p1=p2; p2=p2-next; p=p1; while (p-next!=&n) p=p-next; p-next=null; return m.next;struct student *outputsortsum()/總分排序輸出

29、int i=0;struct student *head = null , *p = null;head = read(); p = sortsum(head);printf(n *student*n);printf( -n);printf( | 名次 | 學(xué)號(hào) | 姓名 | 數(shù)學(xué) | 英語 | c語言 | 總分 |n);printf( -n); while(p != null)i+; printf( | %3d | %4s | %-4s | %3d | %3d | %3d | %3d |n,i,p-num, p-name,p-scorem,p-scoree,p-scorec,p-sum);p

30、rintf( -n);p=p-next;return head;struct student *statistic()/統(tǒng)計(jì)函數(shù)int m = 0;struct student *head=null;struct student *p,*q;p = head = read();while( p != null)m+; p = p - next; printf(總共有%d個(gè)學(xué)生信息.nn,m);q= sortsum(head);printf(分?jǐn)?shù)最高的學(xué)生的信息:n); printf(n *student*n);printf( -n);printf( | 學(xué)號(hào) | 姓名 | 數(shù)學(xué) | 英語 |

31、c語言 | 總分 |n);printf( -n);printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,q-num, q-name,q-scorem,q-scoree,q-scorec,q-sum);printf( -n);return head;void mima1 () while(1) int a=1; int i; char ch10; char num20=abcde; printf(進(jìn)入管理員成績管理系統(tǒng)之前請(qǐng)先輸入密碼n); printf(請(qǐng)輸入您的密碼 :n); for(i=0;i10;i+) chi=getch(); if(chi=1

32、3 ) break; putchar(*); chi=0; if(strcmp(num,ch)=0) a = 0; if(a=0) printf(n歡迎進(jìn)入管理員管理系統(tǒng) !n); getchar(); break; else printf(n這個(gè)密碼是錯(cuò)誤的! ); printf(n請(qǐng)輸入正確的密碼:); void mima2 () while(1) int a=1; int i; char ch10; char num20=12345; printf(進(jìn)入學(xué)生成績管理系統(tǒng)之前請(qǐng)先輸入密碼n); printf(請(qǐng)輸入您的密碼 :n); for(i=0;i10;i+) chi=getch();

33、 if(chi=13 ) break; putchar(*); chi=0; if(strcmp(num,ch)=0) a = 0; if(a=0) printf(n歡迎進(jìn)入學(xué)生成績管理系統(tǒng) !n); getchar(); break; else printf(n這個(gè)密碼是錯(cuò)誤的! ); printf(n請(qǐng)輸入正確的密碼:); void menu1()system(cls);printf(nn 歡迎進(jìn)入管理員管理系統(tǒng)!nn); printf(n *主菜單*n);printf( * 1 添加學(xué)生成績 *n); printf( * * 2 查找學(xué)生成績 * *n); printf( * * * 3 刪除指定學(xué)生 * * *n); printf( * * * 4 修改學(xué)生信息 * * *n); printf( * * * 5 總分排序信息 * * *n); printf( * * 6 查看全部信息 * *n); printf( * 7 統(tǒng)計(jì)學(xué)生人數(shù) *n); printf( * 8 停止程序運(yùn)行 *n); printf( *n); void menu2() system(cls); printf(nn 歡迎進(jìn)入學(xué)生管理系統(tǒng)!nn); printf(n *主菜單*n); pri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論