嵌入式課程設計 學生信息管理系統(tǒng)_第1頁
嵌入式課程設計 學生信息管理系統(tǒng)_第2頁
嵌入式課程設計 學生信息管理系統(tǒng)_第3頁
嵌入式課程設計 學生信息管理系統(tǒng)_第4頁
嵌入式課程設計 學生信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式課程設計報告冊 題目:學生信息管理系統(tǒng) 班級:移動三班 輔導老師:邱雅一、軟件需求分析1、可行性分析(1)經(jīng)濟可行性 :目前中國有越來越多的中小型企業(yè)在蓬勃發(fā)展,而現(xiàn)代化員工信息管理系統(tǒng)已經(jīng)逐漸取代了傳統(tǒng)的人工信息管理,智能化的管理系統(tǒng)更具有高效性可行性,所以自能管理系統(tǒng)將會成為或正在成為現(xiàn)代化公司員工信息管理的有效方式; :這款學生信息管理系統(tǒng)的價格適合所有學校消費群體,將會有很大的應用空間,滿足各種學校學生管理的要求; :學生系信息管理系統(tǒng)的價格比相對于同類公司員工管理系統(tǒng)產(chǎn)品較低,同時本軟件的成本低于同類產(chǎn)品的平均水平,具有很大的利潤空間; :本系統(tǒng)的開發(fā)環(huán)境和軟件環(huán)境都是當前流行

2、的產(chǎn)品,本系統(tǒng)的軟件需求都是基本的功能和應用,在現(xiàn)實中很容易實現(xiàn)。(2)法律可行性本軟件的開發(fā)采用C語言作為軟件的開發(fā)語言,沒有采用同類產(chǎn)的代碼,完全是自主開發(fā),并按照國際上軟件開發(fā)的相關規(guī)定來實現(xiàn)開發(fā)的;(3)技術可行性 本軟件開發(fā)系統(tǒng)采用linux開發(fā)平臺,具有很強的兼容性和擴展性,本軟件的占用的內(nèi)存較小大部分的硬件處理系統(tǒng)都可以兼容,開發(fā)語言采用國際通用的C高級編程語言具有很高的維護可行性,經(jīng)過綜合分析我認為現(xiàn)階段我方所擁有的資源和技術人員,在技術上完全可以實現(xiàn)這款軟件的開發(fā),并且能高質(zhì)量,快速的完成這項工作。2、用戶需求概述用戶需要一個可以簡單的實現(xiàn)通訊錄功能的簡單通訊錄系統(tǒng),分別完成

3、查詢,增加,修改,刪除的一些簡單的功能要求在完成所要求功能的前提下增強與用戶的互動,使軟件的可操作性增強,此外還可以自愿加入一些新的功能來進行對軟件的優(yōu)化在優(yōu)化的同時要注意軟件基本功能的保障。二、軟件分析與設計一功能 1、創(chuàng)建班級2、輸出學生信息3、按照學號錄入學生成績4、按照班級錄入學生成績5、按照學號修改學生成績6、按照班級修改學生成績7、按照班級統(tǒng)計學生的總成績8、按照學號查詢學生成績9、按照班級輸出不及格學生名單及科目10、按照班級輸出學生成績單0、退出系統(tǒng) 二功能模塊圖: 圖1 系統(tǒng)功能模塊圖三、主要功能的實現(xiàn)程序設計一般由兩部分組成算法和數(shù)據(jù)結構,合理地選擇和實現(xiàn)一個數(shù)據(jù)結構和處理

4、這些數(shù)據(jù)結構具有同樣的重要性,在學生信息管理程序中由于預計記錄數(shù)比較大能夠、刪除、保存等外更多的情況是查詢。所以選用動態(tài)鏈表保存數(shù)據(jù)。1、學生信息管理 由于信息輸入量比較大,需要的存儲空間大,所以需要采用樹的雙親表示法進行信息存儲,為了方便采用以下定義。struct studentint num;char name20;char sex5;char class30;int semester;char course30;int score3;struct student *next;struct listint class;struct student *head;2.main()主函數(shù) 程序采

5、用模塊化設計,主函數(shù)是程序的入口各模塊獨立??煞謮K調(diào) 試均由主函數(shù)控制調(diào)用控制功能的實現(xiàn)通過循環(huán)執(zhí)行一個開關語句,該語句的條件值是通過調(diào)用主菜單函數(shù)得到的返回值,根據(jù)該值調(diào)用相應的各功能函數(shù)。同時設置一個斷點。即當返回值為一定條件時運行break 0;函數(shù)結束程序,以免造成死循環(huán)。根據(jù)菜單的提示進行需要的操作。圖2 主函數(shù)輸出界面圖3 程序總體流程圖(1)主菜單直接利用輸出函數(shù) printf 輸出字符串在屏幕上顯示一個菜單并顯示一個提示輸入 選項輸入數(shù)字,將此數(shù)字作為菜單函數(shù)的返回值返回主函數(shù),主函數(shù)根據(jù) 這個數(shù)字調(diào)用相應的功能函數(shù), 制作簡便, 操作簡單界面如圖 10-2 所示:圖 4 主菜

6、單界面 由于程序中很多地方用到了字符串輸入語句會造成下一個字符不能正確讀入為了 在程序調(diào)用執(zhí)行了各個函數(shù)后能夠清晰地看到菜單并輸入新的選項。按照所見即所得的方式直接設計輸出函數(shù)輸出字符串達到菜單效果將精力主要放在程序功能的實現(xiàn)上利用 while循環(huán)語句一直執(zhí)行 scanf("%d" ,t)語句。讓用戶輸入 數(shù)按照整形數(shù)據(jù)形式輸入然后字符串轉(zhuǎn)化為數(shù)字返回主函數(shù) 。既然是數(shù)字選項為什么不用整數(shù)格式輸入而要按字符串輸入。再將其轉(zhuǎn)換呢,如果按照整數(shù)格式輸入,當用戶輸入了非數(shù)字字 符。例如 a 和 b 等由于類型不同將導致程序出錯。所以對于不參與運算的數(shù)據(jù)表面上看是數(shù)字也應將其設為字

7、符處理。例如電話號碼,千萬不要設為整數(shù)類型,程序設計技巧很多。所以讀者在編程調(diào)試中應注意并仔細體會。(2)創(chuàng)建班級 輸入記錄時按照一條一行的格式輸入,每個數(shù)據(jù)之間用空格分隔,較為清晰且能直接反映數(shù)據(jù)之間的關系,但由于 scanf 函數(shù)的特性,在輸入時數(shù)據(jù)用回車分隔也是可以的,但與界面設計不吻合界面.由于記錄并不是一次性全部輸入而是隨時填加和刪除的,而預先開辟的空間數(shù)往往大于實際的記錄數(shù)。所以程序設計為首先輸入準備輸入的記錄數(shù) n, 然后用while循環(huán)語句循環(huán)輸信息。圖5 創(chuàng)建列表頁面輸出學生信息該功能的實現(xiàn)主要是 是通過結構體數(shù)組中的鏈表指針進行輸出 圖6輸出全部信息按照學號錄入學生成績通過

8、頭指針查找到需要錄入成績的節(jié)點,錄入成績。按照班級錄入學生成績按照學號修改學生成績按照班級修改學生成績按照班級統(tǒng)計學生的總成績按照學號查詢學生成績按照班級輸出不及格學生名單及科目(11)按照班級輸出學生成績單四、程序設計(一)先進行人工檢查,即靜態(tài)檢查。在寫好一個程序以后,不要匆匆忙忙上機,而應對程序進行人工檢查。這一步十分重要,它能發(fā)現(xiàn)程序設計人員由于疏忽而造成的多數(shù)錯誤。這一步往往容易被人忽視,總希望把一切都推給計算機去做,但這樣會多占用機器時間,作為一個程序人員應當養(yǎng)成嚴謹?shù)淖黠L,每一步都要嚴格把關,不把問題留給后面的工序。為了更有效地進行人工檢查,所編的程序應力求做到以下幾點:應當采用

9、結構化程序方法編程,以增加可讀性;盡可能多加注釋,以幫助理解每段程序的作用;在編寫復雜的程序時不要將全部語句都寫在main函數(shù)中,而要多利用函數(shù),用一個函數(shù)來實現(xiàn)一個單獨的功能。各函數(shù)之間除用參數(shù)傳遞數(shù)據(jù)外,盡量少出現(xiàn)耦合關系,這樣便于分別檢查和處理。(二)在人工檢查無誤后,再上機調(diào)試。通過上機發(fā)現(xiàn)錯誤稱為動態(tài)檢查。在編譯時會給出語法錯誤的信息,調(diào)試時可以根據(jù)提示信息具體找出程序中出錯之處并改正。應當注意的是有時提示出錯的地方并不是真正出錯的位置,如果在提示出錯的行找不到錯誤的話應當?shù)缴弦恍性僬?。有時提示出錯的類型并非絕對準確,由于出錯的情況繁多且各種錯誤互有關聯(lián),因此要善于分析,找出真正的錯

10、誤,而不要只從字面意義上找出錯信息,鉆牛角尖。如果系統(tǒng)提示的出錯信息很多,應當從上到下逐一改正。有時顯示出一大片出錯信息往往使人感到問題嚴重,無從下手。其實可能只有一二個錯誤。例如,對使用的變量未定義,編譯時就會對所有含該變量的語句發(fā)出出錯信息。這時只要加上一個變量定義,就所有錯誤都消除了。(三)在改正語法錯誤(包括“錯誤(error)”和“警告(warning)”)后,程序經(jīng)過連接(link)就得到可執(zhí)行的目標程序。運行程序,輸入程序所需數(shù)據(jù),就可得到運行結果。應當對運行結果作分析,看它是否符合要求。有的初學者看到運行結果就認為沒問題了,不作認真分析,這是危險的。有時,數(shù)據(jù)比較復雜,難以立即

11、判斷結果是否正確??梢允孪瓤紤]好一批“試驗數(shù)據(jù)”,輸入這些數(shù)據(jù)可以很容易判斷結果正確與否。例如解方程。事實上,當程序復雜時很難把所有的可能情況全部都試到,選擇典型的臨界數(shù)據(jù)作試驗即可。(四)運行結果不對,大多屬于邏輯錯誤。對這類錯誤往往需要仔細檢查和分析才能發(fā)現(xiàn)??梢圆捎靡韵罗k法:1.將程序與流程圖仔細對照,如果流程圖是正確的,程序?qū)戝e了,是很容易發(fā)現(xiàn)的。例如,復合語句忘記寫花括弧,只要一對照流程圖就能很快發(fā)現(xiàn)。2.如果實在找不到錯誤,可以采用“分段檢查”的方法。在程序不同的位置設幾個printf函數(shù)語句,輸出有關變量的值,逐段往下檢查。直到找到在某一段中數(shù)據(jù)不對為止。這時就已經(jīng)把錯誤局限在這

12、一段中了。不斷減小“查錯區(qū)”,就能發(fā)現(xiàn)錯誤所在。3.也可以用“條件編譯”命令進行程序調(diào)試(在程序調(diào)試階段,若干printf函數(shù)語句就要進行編譯并執(zhí)行。當調(diào)試完畢,這些語句不用再編譯了,也不再被執(zhí)行了)。這種方法可以不必一一去掉printf函數(shù)語句,以提高效率。4.如果在程序中沒有發(fā)現(xiàn)問題,就要檢查流程圖有無錯誤,即算法有無問題。如有則改正之,接著修改程序。5.有的系統(tǒng)還提供debug(調(diào)試)工具,跟蹤程序并給出相應信息,使用更為方便,請查閱有關手冊。總之,程序調(diào)試是一項細致深入的工作,需要下功夫,動腦子,善于積累經(jīng)驗。在程序調(diào)試過程中往往反映出一個人的水平,經(jīng)驗和態(tài)度。希望大家給以足夠的重視。

13、上機調(diào)試程序的目的決不是為了“驗證程序的正確”,而是“掌握調(diào)試的方法和技術”,要學會自己找問題,這樣慢慢自己就會寫出錯誤較少的實用程序。五、代碼的實現(xiàn)#include <stdio.h>#include <stdlib.h>#define MAXSIZE 100struct studentint num;char name20;char sex5;char class30;int semester;char course30;int score3;struct student *next;struct listint class;struct student *head

14、;void CreatClassStudent(struct list Class,int n)/創(chuàng)建班級char ch;int i;i = 1;struct student *head,*p,*q;head = (struct student *)malloc(sizeof(struct student);q = p = head;while(i <= n)printf("輸入第%d個班級的信息:n",i);struct student *head,*p,*q;head = (struct student *)malloc(sizeof(struct student

15、);Classi.head = p = head;while(1)printf("輸入學號:n");scanf("%d",&head->num);printf("輸入姓名:n");scanf("%s",head->name);head->score0 = 0;head->score1 = 0;head->score2 = 0;getchar();printf("是否繼續(xù)?n");scanf("%c",&ch);if(ch = &#

16、39;n')break;p = (struct student *)malloc(sizeof(struct student);head->next = p;head = p;head ->next = NULL;i+;void print(struct list Class,int n)/輸出學生信息 按照班級輸出struct student *p;int i=1;while(i <= n )p = Classi.head;printf("移動%d班學生信息n",i);while(p != NULL)printf("%dt",

17、p->num);printf("%st",p->name);printf("%dt%dt%d",p->score0,p->score1,p->score2);p = p->next;printf("n");printf("n");i+;void StudentId(struct list Class,int n)/按照學號輸入成績int score1,score2,score3;int t;int key;printf("輸入學號:"); scanf(&quo

18、t;%d",&key);int i;i = 1;struct student *p;while(i <= n)p = Classi.head;while(p != NULL)if(p->num = key)printf("輸入3門成績:");scanf("%d%d%d",&score1,&score2,&score3);p->score0 = score1;p->score1 = score2;p->score2 = score3;t = 0;p = p->next;i+;if

19、(t != 0)printf("該學號不存在!n");void ClassId(struct list Class,int n)int i = 1;struct student *p;while(i <= n)printf("錄入%d班級的成績n",i);p = Classi.head;while(p != NULL)printf("輸入學號為%d的學生成績:",p->num);scanf("%d%d%d",&p->score0,&p->score1,&p->s

20、core2);p = p->next;printf("成績錄入結束n");i+;void StudentNumberChange(struct list Class,int n)int i = 1;int key;int score1,score2,score3;int t;printf("請輸入學號:");scanf("%d",&key);struct student *p;while(i <= n)p = Classi.head;while(p != NULL)if(p->num = key)printf

21、("請輸入新的成績:");scanf("%d%d%d",&score1,&score2,&score3);p->score0 = score1;p->score1 = score2;p->score2 = score3;t = 0;p = p->next;i+;if(t != 0)printf("該學號不存在!n");void ClassNumChange(struct list Class,int n)int class;int score1,score2,score3;char ch

22、;struct student *p;printf("輸入需要修改信息的班級號%d-%d:",1,n);scanf("%d",&class);p = Classclass.head;while(p != NULL)printf("是否要修改%d的成績:",p->num);getchar();scanf("%c",&ch);if(ch = 'n')p = p->next;continue;printf("輸入新的成績:");scanf("%d%

23、d%d",&score1,&score2,&score3);p->score0 = score1;p->score1 = score2;p->score2 = score3;p = p->next;void TotalGrade(struct list Class,int n)int sum = 0;int average;int k;int class;printf("輸入班級號%d-%dn",1,n);scanf("%d",&class);struct student *p;p = C

24、lassclass.head;while(p != NULL)sum = p->score0 + p->score1 + p->score2;average = sum / 3;printf("%d的總成績是%d平均成績是%dn",p->num,sum,average);p = p->next;void QueryResults(struct list Class,int n)int i = 1;int key;int t;struct student *p;printf("請輸入學號:");scanf("%d&q

25、uot;,&key);while(i <= n)p = Classi.head;while(p != NULL)if(p->num = key)printf("學號為%d的學生移動%d班",p->num,i);printf("%dt%dt%dn",p->score0,p->score1,p->score2);t = 0;break;p = p->next;if(t != 0)printf("該學生不存在于%d班n",i);i+;void NotPass(struct list Clas

26、s,int n)int class;printf("請輸入班級號%d-%d:",1,n);scanf("%d",&class);struct student *p;p = Classclass.head;printf("%d班不及格名單n",class);while(p != NULL)if(p->score0 < 60 | p->score1 < 60 | p->score2 < 60)printf("%dt%st",p->num,p->name);if(p

27、->score0 < 60)printf("語文t%dt不及格t",p->score0);if(p->score1 < 60)printf("線性代數(shù)t%dt不及格t",p->score1);if(p->score2<60)printf("英語t%dt不及格t",p->score2);printf("n");p = p->next;void Transcript(struct list Class,int n)int class;printf("

28、請輸入班級號:");scanf("%d",&class);struct student *p;p = Classclass.head;while(p != NULL)printf("%dt%st%dt%dt%dn",p->num,p->name,p->score0,p->score1,p->score2);p = p->next;void menu()printf("0、退出系統(tǒng)n");printf("1、創(chuàng)建班級n");printf("2、輸出學生信息n");printf("3、按照學號錄入學生成績n");printf("4、按照班級錄入學生成績n");printf("5、按照學號修改學生成績n");printf(&quo

溫馨提示

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

評論

0/150

提交評論