




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、嵌入式課程設(shè)計(jì)報(bào)告冊 題目:學(xué)生信息管理系統(tǒng) 班級(jí):移動(dòng)三班 輔導(dǎo)老師:邱雅一、軟件需求分析1、可行性分析(1)經(jīng)濟(jì)可行性 :目前中國有越來越多的中小型企業(yè)在蓬勃發(fā)展,而現(xiàn)代化員工信息管理系統(tǒng)已經(jīng)逐漸取代了傳統(tǒng)的人工信息管理,智能化的管理系統(tǒng)更具有高效性可行性,所以自能管理系統(tǒng)將會(huì)成為或正在成為現(xiàn)代化公司員工信息管理的有效方式; :這款學(xué)生信息管理系統(tǒng)的價(jià)格適合所有學(xué)校消費(fèi)群體,將會(huì)有很大的應(yīng)用空間,滿足各種學(xué)校學(xué)生管理的要求; :學(xué)生系信息管理系統(tǒng)的價(jià)格比相對于同類公司員工管理系統(tǒng)產(chǎn)品較低,同時(shí)本軟件的成本低于同類產(chǎn)品的平均水平,具有很大的利潤空間; :本系統(tǒng)的開發(fā)環(huán)境和軟件環(huán)境都是當(dāng)前流行
2、的產(chǎn)品,本系統(tǒng)的軟件需求都是基本的功能和應(yīng)用,在現(xiàn)實(shí)中很容易實(shí)現(xiàn)。(2)法律可行性本軟件的開發(fā)采用C語言作為軟件的開發(fā)語言,沒有采用同類產(chǎn)的代碼,完全是自主開發(fā),并按照國際上軟件開發(fā)的相關(guān)規(guī)定來實(shí)現(xiàn)開發(fā)的;(3)技術(shù)可行性 本軟件開發(fā)系統(tǒng)采用linux開發(fā)平臺(tái),具有很強(qiáng)的兼容性和擴(kuò)展性,本軟件的占用的內(nèi)存較小大部分的硬件處理系統(tǒng)都可以兼容,開發(fā)語言采用國際通用的C高級(jí)編程語言具有很高的維護(hù)可行性,經(jīng)過綜合分析我認(rèn)為現(xiàn)階段我方所擁有的資源和技術(shù)人員,在技術(shù)上完全可以實(shí)現(xiàn)這款軟件的開發(fā),并且能高質(zhì)量,快速的完成這項(xiàng)工作。2、用戶需求概述用戶需要一個(gè)可以簡單的實(shí)現(xiàn)通訊錄功能的簡單通訊錄系統(tǒng),分別完成
3、查詢,增加,修改,刪除的一些簡單的功能要求在完成所要求功能的前提下增強(qiáng)與用戶的互動(dòng),使軟件的可操作性增強(qiáng),此外還可以自愿加入一些新的功能來進(jìn)行對軟件的優(yōu)化在優(yōu)化的同時(shí)要注意軟件基本功能的保障。二、軟件分析與設(shè)計(jì)一功能 1、創(chuàng)建班級(jí)2、輸出學(xué)生信息3、按照學(xué)號(hào)錄入學(xué)生成績4、按照班級(jí)錄入學(xué)生成績5、按照學(xué)號(hào)修改學(xué)生成績6、按照班級(jí)修改學(xué)生成績7、按照班級(jí)統(tǒng)計(jì)學(xué)生的總成績8、按照學(xué)號(hào)查詢學(xué)生成績9、按照班級(jí)輸出不及格學(xué)生名單及科目10、按照班級(jí)輸出學(xué)生成績單0、退出系統(tǒng) 二功能模塊圖: 圖1 系統(tǒng)功能模塊圖三、主要功能的實(shí)現(xiàn)程序設(shè)計(jì)一般由兩部分組成算法和數(shù)據(jù)結(jié)構(gòu),合理地選擇和實(shí)現(xiàn)一個(gè)數(shù)據(jù)結(jié)構(gòu)和處理
4、這些數(shù)據(jù)結(jié)構(gòu)具有同樣的重要性,在學(xué)生信息管理程序中由于預(yù)計(jì)記錄數(shù)比較大能夠、刪除、保存等外更多的情況是查詢。所以選用動(dòng)態(tài)鏈表保存數(shù)據(jù)。1、學(xué)生信息管理 由于信息輸入量比較大,需要的存儲(chǔ)空間大,所以需要采用樹的雙親表示法進(jìn)行信息存儲(chǔ),為了方便采用以下定義。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è)計(jì),主函數(shù)是程序的入口各模塊獨(dú)立??煞謮K調(diào) 試均由主函數(shù)控制調(diào)用控制功能的實(shí)現(xiàn)通過循環(huán)執(zhí)行一個(gè)開關(guān)語句,該語句的條件值是通過調(diào)用主菜單函數(shù)得到的返回值,根據(jù)該值調(diào)用相應(yīng)的各功能函數(shù)。同時(shí)設(shè)置一個(gè)斷點(diǎn)。即當(dāng)返回值為一定條件時(shí)運(yùn)行break 0;函數(shù)結(jié)束程序,以免造成死循環(huán)。根據(jù)菜單的提示進(jìn)行需要的操作。圖2 主函數(shù)輸出界面圖3 程序總體流程圖(1)主菜單直接利用輸出函數(shù) printf 輸出字符串在屏幕上顯示一個(gè)菜單并顯示一個(gè)提示輸入 選項(xiàng)輸入數(shù)字,將此數(shù)字作為菜單函數(shù)的返回值返回主函數(shù),主函數(shù)根據(jù) 這個(gè)數(shù)字調(diào)用相應(yīng)的功能函數(shù), 制作簡便, 操作簡單界面如圖 10-2 所示:圖 4 主菜
6、單界面 由于程序中很多地方用到了字符串輸入語句會(huì)造成下一個(gè)字符不能正確讀入為了 在程序調(diào)用執(zhí)行了各個(gè)函數(shù)后能夠清晰地看到菜單并輸入新的選項(xiàng)。按照所見即所得的方式直接設(shè)計(jì)輸出函數(shù)輸出字符串達(dá)到菜單效果將精力主要放在程序功能的實(shí)現(xiàn)上利用 while循環(huán)語句一直執(zhí)行 scanf("%d" ,t)語句。讓用戶輸入 數(shù)按照整形數(shù)據(jù)形式輸入然后字符串轉(zhuǎn)化為數(shù)字返回主函數(shù) 。既然是數(shù)字選項(xiàng)為什么不用整數(shù)格式輸入而要按字符串輸入。再將其轉(zhuǎn)換呢,如果按照整數(shù)格式輸入,當(dāng)用戶輸入了非數(shù)字字 符。例如 a 和 b 等由于類型不同將導(dǎo)致程序出錯(cuò)。所以對于不參與運(yùn)算的數(shù)據(jù)表面上看是數(shù)字也應(yīng)將其設(shè)為字
7、符處理。例如電話號(hào)碼,千萬不要設(shè)為整數(shù)類型,程序設(shè)計(jì)技巧很多。所以讀者在編程調(diào)試中應(yīng)注意并仔細(xì)體會(huì)。(2)創(chuàng)建班級(jí) 輸入記錄時(shí)按照一條一行的格式輸入,每個(gè)數(shù)據(jù)之間用空格分隔,較為清晰且能直接反映數(shù)據(jù)之間的關(guān)系,但由于 scanf 函數(shù)的特性,在輸入時(shí)數(shù)據(jù)用回車分隔也是可以的,但與界面設(shè)計(jì)不吻合界面.由于記錄并不是一次性全部輸入而是隨時(shí)填加和刪除的,而預(yù)先開辟的空間數(shù)往往大于實(shí)際的記錄數(shù)。所以程序設(shè)計(jì)為首先輸入準(zhǔn)備輸入的記錄數(shù) n, 然后用while循環(huán)語句循環(huán)輸信息。圖5 創(chuàng)建列表頁面輸出學(xué)生信息該功能的實(shí)現(xiàn)主要是 是通過結(jié)構(gòu)體數(shù)組中的鏈表指針進(jìn)行輸出 圖6輸出全部信息按照學(xué)號(hào)錄入學(xué)生成績通過
8、頭指針查找到需要錄入成績的節(jié)點(diǎn),錄入成績。按照班級(jí)錄入學(xué)生成績按照學(xué)號(hào)修改學(xué)生成績按照班級(jí)修改學(xué)生成績按照班級(jí)統(tǒng)計(jì)學(xué)生的總成績按照學(xué)號(hào)查詢學(xué)生成績按照班級(jí)輸出不及格學(xué)生名單及科目(11)按照班級(jí)輸出學(xué)生成績單四、程序設(shè)計(jì)(一)先進(jìn)行人工檢查,即靜態(tài)檢查。在寫好一個(gè)程序以后,不要匆匆忙忙上機(jī),而應(yīng)對程序進(jìn)行人工檢查。這一步十分重要,它能發(fā)現(xiàn)程序設(shè)計(jì)人員由于疏忽而造成的多數(shù)錯(cuò)誤。這一步往往容易被人忽視,總希望把一切都推給計(jì)算機(jī)去做,但這樣會(huì)多占用機(jī)器時(shí)間,作為一個(gè)程序人員應(yīng)當(dāng)養(yǎng)成嚴(yán)謹(jǐn)?shù)淖黠L(fēng),每一步都要嚴(yán)格把關(guān),不把問題留給后面的工序。為了更有效地進(jìn)行人工檢查,所編的程序應(yīng)力求做到以下幾點(diǎn):應(yīng)當(dāng)采用
9、結(jié)構(gòu)化程序方法編程,以增加可讀性;盡可能多加注釋,以幫助理解每段程序的作用;在編寫復(fù)雜的程序時(shí)不要將全部語句都寫在main函數(shù)中,而要多利用函數(shù),用一個(gè)函數(shù)來實(shí)現(xiàn)一個(gè)單獨(dú)的功能。各函數(shù)之間除用參數(shù)傳遞數(shù)據(jù)外,盡量少出現(xiàn)耦合關(guān)系,這樣便于分別檢查和處理。(二)在人工檢查無誤后,再上機(jī)調(diào)試。通過上機(jī)發(fā)現(xiàn)錯(cuò)誤稱為動(dòng)態(tài)檢查。在編譯時(shí)會(huì)給出語法錯(cuò)誤的信息,調(diào)試時(shí)可以根據(jù)提示信息具體找出程序中出錯(cuò)之處并改正。應(yīng)當(dāng)注意的是有時(shí)提示出錯(cuò)的地方并不是真正出錯(cuò)的位置,如果在提示出錯(cuò)的行找不到錯(cuò)誤的話應(yīng)當(dāng)?shù)缴弦恍性僬?。有時(shí)提示出錯(cuò)的類型并非絕對準(zhǔn)確,由于出錯(cuò)的情況繁多且各種錯(cuò)誤互有關(guān)聯(lián),因此要善于分析,找出真正的錯(cuò)
10、誤,而不要只從字面意義上找出錯(cuò)信息,鉆牛角尖。如果系統(tǒng)提示的出錯(cuò)信息很多,應(yīng)當(dāng)從上到下逐一改正。有時(shí)顯示出一大片出錯(cuò)信息往往使人感到問題嚴(yán)重,無從下手。其實(shí)可能只有一二個(gè)錯(cuò)誤。例如,對使用的變量未定義,編譯時(shí)就會(huì)對所有含該變量的語句發(fā)出出錯(cuò)信息。這時(shí)只要加上一個(gè)變量定義,就所有錯(cuò)誤都消除了。(三)在改正語法錯(cuò)誤(包括“錯(cuò)誤(error)”和“警告(warning)”)后,程序經(jīng)過連接(link)就得到可執(zhí)行的目標(biāo)程序。運(yùn)行程序,輸入程序所需數(shù)據(jù),就可得到運(yùn)行結(jié)果。應(yīng)當(dāng)對運(yùn)行結(jié)果作分析,看它是否符合要求。有的初學(xué)者看到運(yùn)行結(jié)果就認(rèn)為沒問題了,不作認(rèn)真分析,這是危險(xiǎn)的。有時(shí),數(shù)據(jù)比較復(fù)雜,難以立即
11、判斷結(jié)果是否正確??梢允孪瓤紤]好一批“試驗(yàn)數(shù)據(jù)”,輸入這些數(shù)據(jù)可以很容易判斷結(jié)果正確與否。例如解方程。事實(shí)上,當(dāng)程序復(fù)雜時(shí)很難把所有的可能情況全部都試到,選擇典型的臨界數(shù)據(jù)作試驗(yàn)即可。(四)運(yùn)行結(jié)果不對,大多屬于邏輯錯(cuò)誤。對這類錯(cuò)誤往往需要仔細(xì)檢查和分析才能發(fā)現(xiàn)??梢圆捎靡韵罗k法:1.將程序與流程圖仔細(xì)對照,如果流程圖是正確的,程序?qū)戝e(cuò)了,是很容易發(fā)現(xiàn)的。例如,復(fù)合語句忘記寫花括弧,只要一對照流程圖就能很快發(fā)現(xiàn)。2.如果實(shí)在找不到錯(cuò)誤,可以采用“分段檢查”的方法。在程序不同的位置設(shè)幾個(gè)printf函數(shù)語句,輸出有關(guān)變量的值,逐段往下檢查。直到找到在某一段中數(shù)據(jù)不對為止。這時(shí)就已經(jīng)把錯(cuò)誤局限在這
12、一段中了。不斷減小“查錯(cuò)區(qū)”,就能發(fā)現(xiàn)錯(cuò)誤所在。3.也可以用“條件編譯”命令進(jìn)行程序調(diào)試(在程序調(diào)試階段,若干printf函數(shù)語句就要進(jìn)行編譯并執(zhí)行。當(dāng)調(diào)試完畢,這些語句不用再編譯了,也不再被執(zhí)行了)。這種方法可以不必一一去掉printf函數(shù)語句,以提高效率。4.如果在程序中沒有發(fā)現(xiàn)問題,就要檢查流程圖有無錯(cuò)誤,即算法有無問題。如有則改正之,接著修改程序。5.有的系統(tǒng)還提供debug(調(diào)試)工具,跟蹤程序并給出相應(yīng)信息,使用更為方便,請查閱有關(guān)手冊??傊绦蛘{(diào)試是一項(xiàng)細(xì)致深入的工作,需要下功夫,動(dòng)腦子,善于積累經(jīng)驗(yàn)。在程序調(diào)試過程中往往反映出一個(gè)人的水平,經(jīng)驗(yàn)和態(tài)度。希望大家給以足夠的重視。
13、上機(jī)調(diào)試程序的目的決不是為了“驗(yàn)證程序的正確”,而是“掌握調(diào)試的方法和技術(shù)”,要學(xué)會(huì)自己找問題,這樣慢慢自己就會(huì)寫出錯(cuò)誤較少的實(shí)用程序。五、代碼的實(shí)現(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)建班級(jí)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個(gè)班級(jí)的信息:n",i);struct student *head,*p,*q;head = (struct student *)malloc(sizeof(struct student
15、);Classi.head = p = head;while(1)printf("輸入學(xué)號(hào):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)/輸出學(xué)生信息 按照班級(jí)輸出struct student *p;int i=1;while(i <= n )p = Classi.head;printf("移動(dòng)%d班學(xué)生信息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)/按照學(xué)號(hào)輸入成績int score1,score2,score3;int t;int key;printf("輸入學(xué)號(hào):"); 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("該學(xué)號(hào)不存在!n");void ClassId(struct list Class,int n)int i = 1;struct student *p;while(i <= n)printf("錄入%d班級(jí)的成績n",i);p = Classi.head;while(p != NULL)printf("輸入學(xué)號(hào)為%d的學(xué)生成績:",p->num);scanf("%d%d%d",&p->score0,&p->score1,&p->s
20、core2);p = p->next;printf("成績錄入結(jié)束n");i+;void StudentNumberChange(struct list Class,int n)int i = 1;int key;int score1,score2,score3;int t;printf("請輸入學(xué)號(hào):");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("該學(xué)號(hào)不存在!n");void ClassNumChange(struct list Class,int n)int class;int score1,score2,score3;char ch
22、;struct student *p;printf("輸入需要修改信息的班級(jí)號(hào)%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("輸入班級(jí)號(hào)%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("請輸入學(xué)號(hào):");scanf("%d&q
25、uot;,&key);while(i <= n)p = Classi.head;while(p != NULL)if(p->num = key)printf("學(xué)號(hào)為%d的學(xué)生移動(dòng)%d班",p->num,i);printf("%dt%dt%dn",p->score0,p->score1,p->score2);t = 0;break;p = p->next;if(t != 0)printf("該學(xué)生不存在于%d班n",i);i+;void NotPass(struct list Clas
26、s,int n)int class;printf("請輸入班級(jí)號(hào)%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、請輸入班級(jí)號(hào):");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)建班級(jí)n");printf("2、輸出學(xué)生信息n");printf("3、按照學(xué)號(hào)錄入學(xué)生成績n");printf("4、按照班級(jí)錄入學(xué)生成績n");printf("5、按照學(xué)號(hào)修改學(xué)生成績n");printf(&quo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T/CHTS 10097-2023雄安新區(qū)高速公路項(xiàng)目兩區(qū)建設(shè)技術(shù)指南
- T/CGCC 8-2017自熱方便菜肴制品
- T/CEPPEA 5025-2023供配電工程總承包管理規(guī)范
- T/CECS 10329-2023家用燃?xì)饪焖贌崴魇孢m性評價(jià)
- T/CECS 10187-2022無機(jī)復(fù)合聚苯不燃保溫板
- T/CCS 013-2023綜采工作面超前支架智能化控制系統(tǒng)技術(shù)規(guī)范
- T/CCMA 0145-2023混凝土機(jī)械產(chǎn)品安全標(biāo)識(shí)
- T/CCMA 0079-2019土方機(jī)械排氣煙度裝載機(jī)測量方法
- T/CBMCA 012-2020室內(nèi)環(huán)境清潔消毒服務(wù)規(guī)范
- T/CAZG 004-2019大型類人猿飼養(yǎng)管理技術(shù)規(guī)范
- 空白教案模板(表格形式-已排版)
- 通信原理ch9-1-抽樣課件
- 工程經(jīng)濟(jì)學(xué)項(xiàng)目經(jīng)濟(jì)評價(jià)案例分析
- 最全深圳市工改工案例分析
- 信托行業(yè)信息化系統(tǒng)技術(shù)白皮書
- 在市財(cái)政系統(tǒng)警示教育暨作風(fēng)建設(shè)大會(huì)上的講話
- 《管理信息系統(tǒng)》課程設(shè)計(jì)報(bào)告范文
- GB∕T 37821-2019 廢塑料再生利用技術(shù)規(guī)范
- 測量學(xué)地形圖的基本知識(shí)培訓(xùn)講義PPT(講解)
- 自控實(shí)驗(yàn)三線性定常系統(tǒng)的穩(wěn)態(tài)誤差
- 特種設(shè)備作業(yè)人員考試中心質(zhì)量管理手冊(共31頁)
評論
0/150
提交評論