C語言課程設(shè)計學生信息管理系統(tǒng)_第1頁
C語言課程設(shè)計學生信息管理系統(tǒng)_第2頁
C語言課程設(shè)計學生信息管理系統(tǒng)_第3頁
C語言課程設(shè)計學生信息管理系統(tǒng)_第4頁
C語言課程設(shè)計學生信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩280頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、華中科技大學 細節(jié)成就未來2010/11/20c語言課程設(shè)計報告 課程成績信息管理系統(tǒng) 控制科學與工程系 自動化0902鄒天明 u200914289戴潛 u200914276目錄一.引言41.任務(wù)背景42.編寫目的43.任務(wù)概述4 (1)概述4(2)目標4(3)軟件性能概述4二.功能及操作介紹51.系統(tǒng)用戶對象及各自功能52.系統(tǒng)界面5(1)登錄界面(login system)5(2)注冊界面6(3)學生主界面(student system)6三、程序流程71.程序扼要流程72.學生用戶類型流程83.教師用戶類型流程84.管理員類型流程9四、系統(tǒng)模塊分析91.整體模塊關(guān)系92.菜單模塊10(1

2、)本模塊功能10(2)模塊內(nèi)部設(shè)計10(3)本模塊重要結(jié)構(gòu)體設(shè)計12(4)本模塊重要函數(shù)設(shè)計152.鏈表模塊183.文件模塊18(1)文件模塊組成18(2)模塊內(nèi)部機制19五核心算法分析221.事件的觸發(fā)算法222.信息的保存及判定233.鼠標右鍵彈出快捷菜單25六程序制作過程難點分析251.內(nèi)存問題252.登分問題25七.不足之處26八.編程分工26九程序設(shè)計心得261.戴潛262.鄒天明26十參考資料26十一程序源代碼27class.h27class.cpp28depart.h33depart.cpp34manger.h39manger.cpp40student.h42student.cp

3、p44teacher.h52teacher.cpp54page.h61page.cpp62conmicro.h67conmicro.cpp68initgra.h70initgra.cpp70message.h72message.cpp73position.h76mouse.h76mouse.cpp78menuid.h87conmenu.h90conmenu.cpp91menusys.h112menusys.cpp113stumenu.h135stumenu.cpp137teamenu.h175teamenu.cpp177mammenu.h217mammenu.cpp219window.h247

4、window.cpp251test.cpp287一.引言1.任務(wù)背景21世紀以來,人類經(jīng)濟高速發(fā)展,人們發(fā)生了日新月異的變化,特別是計算機的應用及普及到經(jīng)濟和社會生活的各個領(lǐng)域。使原本的舊的管理方法越來越不適應現(xiàn)在社會的發(fā)展。許多人還停留在以前的手工操作。這大大地阻礙了人類經(jīng)濟的發(fā)展。為了適應現(xiàn)代社會人們高度強烈的時間觀念,學校信息管理系統(tǒng)軟件為學校辦公室?guī)砹藰O大的方便。在我國,學生信息管理系統(tǒng)并非一個新的課題,雖然計算機技術(shù)在日新月異的發(fā)展,但是有的很多學校,學校的信息管理都依然由手工操作來完成,這種方法效率極低,而且容易出錯。隨著社會的發(fā)展,信息化是社會進程的必然趨勢,學校的信息管理只有

5、自動化,高效化才能發(fā)揮其價值。有些學校雖使用了計算機管理學生信息,但是系統(tǒng)不完善到處是漏洞,信息往往不能同步更新,有時甚至出錯,這樣極不完善的系統(tǒng)對管理來說是沒有任何保障的。因此,提出一個新型,高效的學生成績管理系統(tǒng)是非常必要的。2.編寫目的此次c語言課程設(shè)計是具有控制系特色的一次課程設(shè)計,具有重要的意義:通過上個學期對c語言的學習,對c語言編程有了初步的了解,獲得了一定的基礎(chǔ)但是非常缺乏實際的編程經(jīng)驗,無法從質(zhì)上對自己的編程技巧有一個很大的提高,這次的課程設(shè)計給我們提供了一個非常好的鍛煉機會。通過二個人的分工合作,在實際中運用和訓練程序設(shè)計的模塊化和工程化思想和技術(shù),努力掌握c語言精髓;同時

6、提高自己的交流與團隊合作的能力。為以后的更專業(yè)更復雜的課程設(shè)計和實踐活動打好基礎(chǔ)。3.任務(wù)概述(1)概述本軟件是將現(xiàn)代化的計算機技術(shù)和傳統(tǒng)的教學、教務(wù)工作相結(jié)合,按照學院的工作流程設(shè)計完成的.完全實現(xiàn)了工作過程的計算機化,提高了工作效率和工作質(zhì)量,為管理員更好地決策有一定幫助.(2)目標 本軟件旨在幫助教務(wù)人員更好地對學生進行管理, 教務(wù)人員首先編排班級,對學生進行基本的信息錄入,再由任課老師對成績進行錄入。教務(wù)處、任課老師跟據(jù)實際情況對錄入的成績進行維護,各位同學對以上錄入的信息可以跟據(jù)自己的需要進行適當?shù)牟樵儭Mㄟ^軟件的開發(fā)過程,了解掌握軟件開發(fā)的基本流程,培養(yǎng)團隊合作的能力。(3)軟件性

7、能概述1)靈活性該系統(tǒng)給予tc2.0和bc31開發(fā),適用于dos3.0以上的所有dos版本和windows操作系;本軟件設(shè)計中加入了鼠標和鍵盤操作,因此操作過程必須依賴鼠標和鍵盤才能實現(xiàn)所有功能;本軟件對于顯卡無特殊要求。2)輸入輸出由于本軟件由用戶輸入各種數(shù)據(jù)較多,因此采用全英文模式輸入和輸出。3)錯誤檢測整個系統(tǒng)對用戶的各種可能的輸入做了各種檢測和限制,能夠及時以警示的方式提醒其錯誤操作,大大提高了系統(tǒng)運行的穩(wěn)定性。二.功能及操作介紹1.系統(tǒng)用戶對象及各自功能 本系統(tǒng)面向三種用戶,分別有不同的權(quán)限,具體如下: 普通學生:可以通過注冊本系統(tǒng),實現(xiàn)查詢自己信息,修改自己信息,查詢課表,查詢分數(shù)

8、,選課、查詢自己教師信息的功能。普通教師:可以通過注冊本系統(tǒng),實現(xiàn)查詢自己信息,修改自己信息,查詢自己課程安排,查詢自己學生信息,登記分數(shù)功能。系統(tǒng)管理員:最主要功能是發(fā)布課表,和院系,包括正常課表和選修課表。2.系統(tǒng)界面(1)登錄界面(login system)說明:在當前界面,用戶可以選擇登錄方式(即學生還是老師)進入自己的主界面,管理員無需選擇自己的登錄方式而按默認的用戶名admin即可登錄(其它類型用戶無法注冊該用戶名),用戶也可以通過register按鈕進入注冊界面。同時,點擊quit鍵即可退出當前程序。若用戶輸入錯誤則會彈出警告框,點擊ok重新輸入。(2)注冊界面說明:在當前界面,

9、用戶可以注冊自己的信息,若輸入信息不完整則會彈出警告框,此時點擊ok鍵即可重新輸入信息。若用戶名或者用戶id已經(jīng)注冊,也會彈出警告框,此時應修改自己的用戶名方能成功注冊。點擊back鍵可以返回至登錄界面,點擊quit鍵可以退出當前程序。(3)學生主界面(student system)說明:在當前界面,用戶在主菜單欄有5個選項,依次是information,class,score,help,about選項。下面來詳細介紹個選項的功能。1)information該項菜單有3項子菜單,分別是my information,edit information,login again,exit。第一項可以查

10、看自己的所有當前信息,第三項可以重新進入登錄界面,第二項可以編輯自己的信息,最后一項可退出系統(tǒng)。點擊edit information后將出現(xiàn)如下界面:從左邊起第1項為編輯個人基本信息(base information),第2項為編輯個人學校信息(school information),第3項為編輯個人登錄密碼(password),各項信息編輯完畢后務(wù)必點擊save鍵保存。2)class該項菜單有3項子菜單,分別是class table,my teacher,choose class。第一項可以查看自己的所有當前課程信息,第二項可以查看自己的老師,第三項可以選修課程。3)score該項有一項子菜

11、單,學生點擊后可查看自己所有科目的分數(shù)。4)help點擊該項會出現(xiàn)一個矩形框,幫助信息將會從矩形框底部緩慢向上浮現(xiàn),此時鼠標將暫時停止響應,直到幫助信息輸出完畢。5)about點擊該項會出現(xiàn)一個矩形框,字符信息將會從矩形框底部緩慢向上浮現(xiàn),此時鼠標將暫時停止響應,直到字符信息輸出完畢。注:當前界面支持鼠標右鍵,點擊后彈出快捷菜單,功能上面已提到。管理員界面及教師界面和學生界面類似,管理員擁有發(fā)布課表,新建院系的權(quán)限,且其發(fā)布的課程和院系會同步更新至文件中。教師擁有登分權(quán)限,他可以找到自己學生的所有課程,并選擇自己所教授的課程登記分數(shù)。保存在學生相應學生文件中內(nèi)。三、程序流程 1.程序扼要流程

12、程序扼要流程圖2.學生用戶類型流程 學生用戶流程圖3.教師用戶類型流程 教師用戶流程圖4.管理員類型流程 . 管理員類型流程圖四、系統(tǒng)模塊分析 1.整體模塊關(guān)系 整個程序由菜單、文件和鏈表模塊組成模塊關(guān)系圖 2.菜單模塊 (1)本模塊功能對用戶操作作出響應,返回用戶輸入信息,打印邏輯層結(jié)果至屏幕。如下圖: 菜單作用示意圖(2)模塊內(nèi)部設(shè)計 程序運行時,將建立一個界面對象鏈表,將所有當前界面上處于激活狀態(tài)的窗口對象加入該連表。同時由一事件檢測函數(shù)不斷檢測用戶的鼠標和鍵盤事件,一旦發(fā)生,則將該事件的信息讀入一msg結(jié)構(gòu)體并傳入事件處理函數(shù)。事件處理函數(shù)將對當前鏈表逐一檢測直到有節(jié)點能對該事件作出響

13、應,或者所有節(jié)點對此都無響應,則進入下一事件循環(huán)。窗口對象響應事件時除了自身響應外,還將判斷是否擊發(fā)與自身關(guān)聯(lián)的窗口處理函數(shù),若擊發(fā),則返回自己的窗口id至一窗口處理函數(shù)分發(fā)函數(shù)(eventpro)中,該函數(shù)將根據(jù)獲得的窗口id調(diào)用對應的窗口函數(shù)以完成響應。 由此可見,事實上window process distribution function就是界面模塊與邏輯層的接口,通過它實現(xiàn)與下層的交流。 界面模塊內(nèi)部關(guān)系圖窗口鏈表運行示意圖(3)本模塊重要結(jié)構(gòu)體設(shè)計1)window 結(jié)構(gòu)體負責所有界面對象的繪制,包括下拉菜單,按鈕和文本輸入框。擁有共同的的窗口響應函數(shù)和獨立的窗口處理函數(shù),后者通過窗

14、口id相互關(guān)聯(lián)。#define title_length 50#define textdialog 0#define button 1#define down_menu_header 2#define down_menu_body 3#define down_text_dialog 4#define warning_window 5#define right_button_menu 6 #define choose_circle 7#define password_dialog 8 #define no_window_pro_stop_check -1#define no_window_pro

15、_continue_check -2#define no_window_action_continue_check -3#define menu_restore_background -4#define dialog_move_cursor -5#define max_dialog_show_length 50#define max_input_length 31#define backspace 8#define enter 13#define bk_color blue#define button_color 24#define button_color_light 7#define bu

16、tton_color_dark 8#define button_length 50#define button_height 25#define down_menu_body_length 200#define down_menu_body_height 25#define text_dialog_length 250typedef struct tagwindowstposition top;/菜單定點坐標/窗口拖動時,記錄與鼠標當前位置的相對坐標stposition mousepositionwhenleftkit;/窗口長度int nlength;/窗口高度int nheight; /記

17、錄該窗口是否有父窗口int nhavefather ; /若該窗口擁有父窗口,該項記錄父窗口idint nfatherid; /光標閃爍中,記錄累計次數(shù),以獲得延時功能unsigned long int nlaytime;/*identify this windows id in this system*/unsigned int nmenuid;/*identify the kind of the window object*/int nkind; /是否繪出窗口int ndraw; /窗口是否在鼠標的點擊下開始移動int nstartmove; /窗口標題char actitletitle

18、_length;/*when window object is a text dialog, keep the string inputed in this character array*/char acinputtextdialogmax_input_length;/*when window object is a text dialog,keep the string length inputed in this character array*/int ntextlength;/*identify the window is or not active*/int nactive; /按

19、紐是否被按下int npress; /是否獲得用戶輸入文本int ngetinputtext; /下拉框是否處于下拉狀態(tài)int nmenudown; /該窗口是否需要加入當前事件檢測int ncheckevent; /保存需要保存背景的窗口的背景void far *pimage; /指向下一窗口節(jié)點指針struct tagwindow*pnextwindow; /指向上一窗口借點指針struct tagwindow*plastwindow;/*draw the window object*/void (*pfdrawwindow)(struct tagwindow*); /函數(shù)指針, 內(nèi)部事件

20、響應函數(shù)int(*pfeventselfaction)(structtagwindow*,struct tagmessage*,struct tagmouse*); /函數(shù)指針,判斷鼠標是否在當前窗口上int ( *pfismouseinside)(struct tagwindow*,struct tagmessage*); /函數(shù)指針,恢復當前窗口背景void (*pfputimage)(struct tagwindow* ); stwindow;2)坐標結(jié)構(gòu)體記錄屏幕坐標 /*坐標結(jié)構(gòu)體*/ typedef struct tagpositionint nx;int ny;stpositio

21、n;3)message 結(jié)構(gòu)體事件檢測函數(shù)檢測到事件發(fā)生后就將事件填充入該結(jié)構(gòu)體并向下傳遞。typedef struct tagmessage /當前鼠標的坐標stposition mouse_position; /判斷鼠標鍵擊int nbutton; /判斷鍵盤鍵擊int nkbhit; /若有鍵盤事件,該值保存輸入的字符ascii碼int nkeyinput;/*store the key value*/ /判斷鼠標是否移動int nmousemove; /是否重新檢測當前事件int nbacktoheader ; / 指向當前學生用戶 struct tagstudent * pstcur

22、rstudent ; /指向當前教師用戶 struct tagteacher* pstcurrteacher ; /指向當前管理員 struct tagmanger* pstcurrmanger ; /指向某個系別 struct tagdepartment * pstdepartment ;stmessage;(4)本模塊重要函數(shù)設(shè)計 #define no_window_pro_stop_check -1#define no_window_pro_continue_check -2#define no_window_action_continue_check -3#define menu_re

23、store_background -4#define dialog_move_cursor -51)窗口事件內(nèi)部響應函數(shù)隸屬于窗口對象,對能夠作出響應的事件作出窗口響應int eventselfaction(struct tagwindow*pstcurrwindow,struct tagmessage*pstmsg,struct tagmouse*pstmouse) switch (pstcurrwindow-nkind) /判斷窗口類型,轉(zhuǎn)入相應的處理函數(shù)case textdialog : /文本輸入框和密碼輸入框case password_dialog : textdialogevent

24、selfaction(pstcurrwindow,pstmsg,pstmouse);break;case button: /普通按鈕if(tru= buttoneventselfaction(pstcurrwindow,pstmsg,pstmouse)return pstcurrwindow-nmenuid;break; /下拉框頭部case down_menu_header:if(true=downmenuheaderselfaction(pstcurrwindow,pstmsg,pstmouse)return pstcurrwindow-nmenuid;break; /下拉框體case d

25、own_menu_body:if(true=downmenubodyselfaction(pstcurrwindow,pstmsg,pstmouse)return pstcurrwindow-nmenuid;break; /下拉文本框case down_text_dialog:if(true=downtextdialogselfaction(pstcurrwindow,pstmsg,pstmouse)return pstcurrwindow-nmenuid;break; /警告框case warning_window:if(true=warningwindowselfaction(pstcur

26、rwindow,pstmsg,pstmouse)return pstcurrwindow-nmenuid;break; /右鍵快捷菜單case right_button_menu:if(true=rightbuttonmenuselfaction(pstcurrwindow,pstmsg,pstmouse)return pstcurrwindow-nmenuid;break; /雙選框case choose_circle:if(true=choosecircleselfaction(pstcurrwindow,pstmsg,pstmouse)return pstcurrwindow-nmenu

27、id;break;return false;2)外部事件處理函數(shù)獲得msg并逐一檢測,檢測到對應節(jié)點后將調(diào)用該節(jié)點的selfeventaction函數(shù),根據(jù)返回結(jié)果判斷是否需要調(diào)用windowpro 函數(shù)。int eventpro(struct tagwindow*pstmenuheader, struct tagmessage*pstmsg,struct tagmouse*pstmouse)stwindow* pstwindownode=pstmenuheader-pnextwindow;while (null != pstwindownode ) /*if this node should

28、 be checked , call its self function first*/if(true = pstwindownode-ncheckevent)if (pstwindownode-pfeventselfaction(pstwindownode,pstmsg,pstmouse) 0) /*if the return value of the self action function is bigger than zero ,implying that this windows process function should be called*/windowstupro( pst

29、windownode,pstmsg,pstmouse);windowmanpro( pstwindownode,pstmsg,pstmouse);windowteapro( pstwindownode,pstmsg,pstmouse);/*if this value is true ,back the check pointer tolist header to recheck the event */if (true = pstmsg-nbacktoheader)pstwindownode=pstmenuheader-pnextwindow;pstmsg-nbacktoheader = fa

30、lse ;windowloginpro( pstwindownode,pstmsg,pstmouse); /*check next node*/if (null != pstwindownode) pstwindownode = pstwindownode-pnextwindow ;return true;2.鏈表模塊 在最初階段,我們程序的整個包括菜單、學生、教師等信息都是在程序開始運行時讀入鏈表再對其進行各種操作的,雖然方便,但是這樣很塊就出現(xiàn)了問題:內(nèi)存不夠。而且這種方案也不符合現(xiàn)實情況,對于一個信息管理系統(tǒng)系統(tǒng),其管理的是大量的信息,不可能依賴將各種文件讀入內(nèi)存的方法來進行管理,所以我

31、們轉(zhuǎn)為直接對文件進行操作,雖然復雜性增加,但是更加符合實際情況,改革時,我們保留原來的借口不變,只是在下層改變信息獲取和修改方法,從而做到了對上層的細節(jié)隱藏,這樣也很方便程序的改進,是模塊化的典型優(yōu)勢。最終整個鏈表模塊只在菜單系統(tǒng)中應用,通過一雙向鏈表來對各菜單節(jié)點進行操作,其原理在菜單模塊中已有詳細圖解,此不贅述。3.文件模塊 為了實現(xiàn)大規(guī)模的信息管理,整個系統(tǒng)幾乎都是直接對文件進行查找,修改,刪除等操作。(1)文件模塊組成1) student.dat 教師信息存儲文件 2) teacher.dat 課表存儲文件 3) class.dat 系別存儲文件 4)department.dat 系統(tǒng)

32、管理員信息存儲文件 5) manger.dat(2)模塊內(nèi)部機制1)savexxtofile 事實上該函數(shù)已經(jīng)暗含了修改功能,當將某結(jié)構(gòu)體寫入文件時,其將先查找文件中是否已有結(jié)構(gòu)體,若有則將文件指針定位到該處將該結(jié)構(gòu)體重寫一遍,否則將新結(jié)構(gòu)體添加到文件末尾。保存文件原理圖2)getxxfromyyfile讀取文件原理圖3)文件內(nèi)部組成 文件內(nèi)部組成圖每個文件開始初記錄該文件保存的項目數(shù),文件指針通過讀取該數(shù)據(jù),可以很方便的將其自身定位到所需要之處。五核心算法分析1.事件的觸發(fā)算法因為我們的程序是基于窗口事件檢測而產(chǎn)生相應反饋的,因此若想添加某項功能,只需把與這項功能對應的窗結(jié)構(gòu)體加入當前事件檢

33、測鏈表,再加上對應的自反應函數(shù)和窗口處理函數(shù)即可,若該功能無需激發(fā)窗口處理函數(shù),則無需添加。這樣看來,各個在同一層次的功能之間實現(xiàn)方法則完全相同。例如登錄系統(tǒng)中的輸入框,我們先把它加入當前事件監(jiān)測鏈表,用如下函數(shù):struct tagwindow* getnewwindow(int nx,int ny,int nlength,int nheight, int nkind,unsigned long int nmenuid,char* pactitle) /*allocate memory to this window*/ struct tagwindow* pstcurrwindow;if(p

34、stcurrwindow=(struct tagwindow*)malloc(1*sizeof(struct tagwindow)=null)printf(no enough memory);exit(1);/*init the varible in the window*/pstcurrwindow-top.nx = nx;pstcurrwindow-top.ny= ny;pstcurrwindow-mousepositionwhenleftkit.nx=0; pstcurrwindow-mousepositionwhenleftkit.ny=0;pstcurrwindow-nactive

35、= false;pstcurrwindow-nfatherid = 0;pstcurrwindow-nhavefather = false;pstcurrwindow-nheight=nheight;pstcurrwindow-nlength=nlength;pstcurrwindow-nmenuid=nmenuid;pstcurrwindow-npress = false ; pstcurrwindow-nkind=nkind;pstcurrwindow-ngetinputtext = false;pstcurrwindow-ntextlength = 0 ;pstcurrwindow-nl

36、aytime = 0;pstcurrwindow-nmenudown = false;pstcurrwindow-nstartmove = false;pstcurrwindow-ndraw = false;pstcurrwindow-pimage = null;pstcurrwindow-ncheckevent = true;strcpy(pstcurrwindow-actitle,pactitle);pstcurrwindow-pfdrawwindow=drawwindow; pstcurrwindow-pfismouseinside=ismouseinside;pstcurrwindow

37、-pfeventselfaction=eventselfaction; pstcurrwindow-pfputimage = putimage; return pstcurrwindow;函數(shù)在初始化窗口時pstcurrwindow-pfeventselfaction=eventselfaction;這樣事件檢測函數(shù)就會知道當前鼠標位置在窗體內(nèi)時激發(fā)該窗體自反應函數(shù)。而具體調(diào)用何種函數(shù)則是根據(jù)窗體的nkind來判斷的。若調(diào)用自反應函數(shù)后返回值為false,則不激發(fā)窗口處理函數(shù),若為true則激發(fā)。具體激發(fā)那個函數(shù)則有siwtch語句來判定(若該窗體有父窗口則調(diào)用其父窗口處理函數(shù))。下圖表示注冊

38、界面中department下拉文本框的處理過程。下拉文本框的處理過程2.信息的保存及判定當對話框為文本框或下拉框時,用戶輸入的信息只保存在屬于自己的窗口結(jié)構(gòu)體中,而要想集中保存或判定則要借助另外一個窗體,我們把他們叫做okbotton,其窗口處理函數(shù)將通過如下函數(shù)找到要保存的信息所屬于的窗口節(jié)點,并對節(jié)點中的信息進行判定或保存。stwindow*findnodebyid(stwindow*pstcurrwindow,unsigned long int unmeneid )stwindow*pstmenuheader = getmenuheader(pstcurrwindow);while (n

39、ull != pstmenuheader )if ( unmeneid = pstmenuheader-nmenuid)return pstmenuheader;pstmenuheader = pstmenuheader-pnextwindow;return null;下圖表示在登陸界面中信息的判定過程:登陸界面中信息的判定過程3.鼠標右鍵彈出快捷菜單關(guān)于鼠標右鍵的問題我們提出了幾種方案,最終敲定了以下方案,其實是對第一點深度理解后的運用。我們把鼠標右鍵也對應一個窗體,不過這個窗體是虛擬的,并不把它畫出來,而且其大小跟電腦全屏幕接近,且把它的等級定位主菜單等級,自反應函數(shù)只是返回一個true,

40、從而可以直接激發(fā)窗口處理函數(shù)。 以下為學生界面中該窗體節(jié)點的定義,自反應函數(shù)以及窗口處理函數(shù):stwindow*pstrightmenu116=getnewwindow(483,22,116,25,right_button_menu,student_rightbutton_menu,about); /內(nèi)部反應函數(shù),由于該窗口本身是虛擬的,故僅返回tre 以激發(fā)對應外部/事件處理函數(shù)int rightbuttonmenuselfaction(struct tagwindow*pstcurrwindow, struct tagmessage*pstmsg,struct tagmouse*pstmo

41、use) return true ; /外部事件處理函數(shù)int winprofunc116(struct tagwindow*pstcurrwindow,struct tagmessage*pstmsg,struct tagmouse*pstmouse)六程序制作過程難點分析 1.內(nèi)存問題內(nèi)存不夠的問題可以說是貫穿的整個課程設(shè)計,其中最大的一次滑鐵盧是我們原想在用戶登錄之后,把與他相同類型的用戶信息全部存入一個鏈表,在用戶退出程序時在釋放該鏈表。當我們用這種思想編寫,只有管理員能成功登錄,老師和學生登陸后程序會立刻跳出。最后我們意識到是內(nèi)存不夠的問題,便馬上調(diào)整了思路,改成從與當前用戶同類型的

42、文件里直接讀取和寫入信息,這就涉及到了對文件的精確操作,我們最終克服了困難。還有一個有趣的事情是對malloc函數(shù)的理解問題,就是我們發(fā)現(xiàn)malloc能成功分配的內(nèi)存與其理論值有很大的出入,最后我們了解到那些庫函數(shù)只不過是一些你我一樣的程序員編寫的,所以說不可能你要多大的內(nèi)存他就會提供,例外由于我們用的編譯器的局限性,進一步限制了我們可分配的內(nèi)存。 2.登分問題表面看只是登分的問題,隱藏在其背后的卻是信息查找的紊亂問題。之前,如果我們想通過老師來查找自己的學生,就必須先找到當前學生文件中所有學生的department,然后一個個與自己的department比較,進而找到自己的學生,這就必須繞兩

43、個圈子。當老師想登分是,就必訓繞三個圈子,這樣既麻煩有容易出錯。這就造成了我們的程序好久都沒有進展,最后我們想到可以把教師和學生的課程保存至其結(jié)構(gòu)體中,這樣,一個學生的結(jié)構(gòu)體就比原來增加了7倍,但我們做多至保留一個學生或老師的結(jié)構(gòu)體在message結(jié)構(gòu)體中,內(nèi)存事實足夠的。所以現(xiàn)在查找信息就變得清洗和簡單了。七.不足之處八.編程分工 鄒天明 整體設(shè)計 、代碼編寫 戴潛 頁面設(shè)計、 功能點實現(xiàn) 、代碼編寫九程序設(shè)計心得1.戴潛 通過這13周的c語言課程設(shè)計,我們學到了很多東西,對c語言也有了更深入的了解。在對整個程序架構(gòu)之前,為了使整個程序有更好的擴展性,我們拋棄了傳統(tǒng)的方法,而創(chuàng)造性地采用了類

44、似于windows的事件響應機制,這對我們來說是一次嘗試,也是一個挑戰(zhàn),所幸的是最后我們成功了。 我們的課題是學生信息管理系統(tǒng),它涉及到圖形繪制,文件,鏈表方面的知識,但在上學期c語言的學習中,我們對這些東西還不熟悉,所以只能邊學習邊編程。這正好增強了我們獨立學習,解決問題的能力。由于我們是團隊合作,任務(wù)也輕松了很多,也經(jīng)常相互交流,這樣也增強了我們的團隊精神。 在實際編程的過程中,我們也深深體會到什么叫做眼高手低,體會到了為了一個小小的bug而徹夜不眠的情形,體會到了解決問題后油然而生的自豪感和自信心,也體會到了在dos環(huán)境下繪圖的不易。種種體會,只有在我們?nèi)硇耐度氲匠绦蛟O(shè)計中來才能體會到

45、。 當然,在這里要感謝不辭辛苦地為我們答疑解難的所有老師和助教們,你們總會用豐富的經(jīng)驗和精煉的語言讓我們醍醐灌頂,幫助我們更徹底地了解c語言的重點難點,沒有你們的幫助,我們c語言程序設(shè)計的道路也會走的更加艱難。 程序?qū)懲曛?,發(fā)現(xiàn)代碼已經(jīng)有7000來行了,這在程序設(shè)計之初,我們簡直不能想象,而仔細想想,這一過程卻進行的那么自然,程序的整體架構(gòu)很好,擴展性也很強,在為程序添加功能時,我們不必縫縫補補,直接在相應接口中添加即可,所以程序設(shè)計后期,我們的工作也相對較為輕松。結(jié)束了近2個月來的課程設(shè)計,我們感到松了口氣,當我們回想著這一路走來經(jīng)歷的挫折和快樂時,感到自己的大學生活更充實了,現(xiàn)在我們所得

46、的,也必會對我們的整個人生產(chǎn)生積極影響。2.鄒天明 九月份看到這個題目的時候,也正是生活一片混亂的時候,各種糾結(jié),而無暇顧及課程設(shè)計的問題。于是一直遲遲沒有開始寫,直到10月中旬才決定要動手了。不過在此前,其實已經(jīng)想了很多關(guān)于程序的實現(xiàn)機制,一開始就覺得要是用這種類似與消息機制的原理,不過當時并沒想太多,直覺一片迷茫,困難重重。 從最開始的菜單鏈表建立,到鼠標實現(xiàn),到調(diào)用事件函數(shù),到各種信息結(jié)構(gòu)體鏈表的操作以及后來為了解決內(nèi)存瓶頸不得不又重寫了所有的信息操作,由鏈表改為直接對文件操作。一路好像走過了好多折騰,糾結(jié),直到前幾天終于一切ok的那一刻,都有點不相信,真的所有想要實現(xiàn)的都已運行在眼前。

47、 有時候總是為一個小小的功能而費盡心思,為了實現(xiàn)窗口的拖動,明明覺得邏輯上沒有錯誤,但是每次動幾下后,程序就會卡死。記得那天趕早就爬起來和同學調(diào)試了一早,才發(fā)現(xiàn)是指針的多次釋放問題。為了實現(xiàn)下拉文本框,開始有許多想法,但是每次都不成功,直到后來想到可以設(shè)計父窗口id來實現(xiàn),當窗口最終下來的那一刻,那快樂無所可比。 近兩個月的時間,開心的不開心的好像多多少少都刻上了課設(shè)的影子,第一次寫了個這么長的程序,有時覺得自己神經(jīng),可是好像某種蘊含的快樂讓自己欲罷不能。也許是某種癡迷,又或是某種逃避。 無論怎樣,就這樣和老三一起一行一行的寫完了這樣最終的288頁,每一行每一句代碼都還留有手指的余溫,每一條指

48、令都在鍵擊的愉悅或者煩躁中堅決的執(zhí)行。 有時覺得代碼就像一個世界,一個受你控制卻又不受約束的世界。總是在深夜的時候,靜靜的陶醉在其中,用自己的思想,用一個一個函數(shù),就像惟命是從的仆人,就像聽從詔令的士兵,為你沖鋒沙場,為你一點一點化開那些久遠的記憶。 程序總有終結(jié)點,即使死循環(huán)也會在某年某月斷死在某點,而時間永恒。十參考資料王士元. c高級實用程序設(shè)計. 北京: 清華大學出版社. 1996周純杰,劉正林等. 標準c語言程序及應用. 武漢: 華中科技大學出版社. 2005c游戲編程從入門到精通 北京:希望電子出版社十一程序源代碼class.h /*copyright (c) 2010, zoutianming&daiqian. all rights reserved.-class.hmodule name: file & list_classdate created: 2010-10-22author: zoutianming&daiqiandescription: class file and list opeartion . -modification histo

溫馨提示

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

最新文檔

評論

0/150

提交評論