1. 使用c語言編寫一個項目都有什麼思路呀
要看平台呀,但是一般情況下,有兩種選擇,一是阻塞式,二是非同步式的,阻塞式的就不用多說了,非同步式程序:
主函數-》初始化-》建立不要的子線程用來管理以後的子線程,繪圖,更新時間等等,然後在主函數中設置無限循環檢查有沒有消息送到程序中,有就按照適合的演算法處理它,沒有就繼續循環。
這是框架思路,當然更細的感覺是自己一點點用腳(手指)上的泡換來的,很難用言語表達,自己嘗試著製作一個軟體級別的程序,成功了馬上就會有感覺的。
2. 什麼是C語言程序設計
什麼是C語言?C語言的簡介。
C語言是一種計算機程序設計語言,它既具有高級語言的特點,又具有匯編語言的特點。
它可以作為工作系統設計語言,編寫系統應用程序,也可以作為應用程序設計語言,編寫不依賴計算機硬體的應用程序。
因此,它的應用范圍廣泛,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,具體應用比如單片機以及嵌入式系統開發。
語言特點:C是中級語言/C是結構式語言/C語言功能齊全/C語言適用范圍大/簡潔緊湊、靈活方便/運算符豐富/數據類型豐富/C是結構式語言/語法限制不太嚴格,程序設計自由度大/適用范圍大,可移植性好。
3. C語言編寫酒店預訂管理系統的好處
C語言編寫酒店預訂管理系統的好處如下:
1.C語言時具有結構化的控制語句,可以用於實現函數的邏輯控制,方便麵向過程的程序設計。
2.C語言豐富的數據類型,不僅包含有傳統的字元型、整型、浮點型、數組類型等數據類型,還具有其他編程語言所不具備的數據類型,其中以指針類型數據使用最為靈活,可以通過編程對各種數據結構進行計算。對應於酒店各部分管理數據的眾多項目也沒有問題。
管理系統是為達到組織目標,針對管理對象,由具有特定管理職能和內在聯系的各種管理機構、管理制度、管理過程、管理方法所構成的完整的組織管理體系。在企業中,這個總系統可分為計劃經營,生產技術、勞動人事、財務成本和生活服務等子系統。它們之間,既有區別,又有聯系。子系統的目標要服從企業管理系統的總目標。各個子系統的作用不是平列的,其中有一個子系統對實現總目標居中心地位,起主導作用。把企業管理看作一個系統,就能夠採取系統分析的方法,綜合研究企業的各項專業管理,把生產經營活動的內部條件和外部環境、定量分析和定性分析有機地結合起來,選擇最優方案,提高經濟效益,促進生產發展。
4. 四個人用C語言做一個小項目該如何分工呢比如做一個圖書館管理系統
傳統意義上的項目管理軟體更多的是管理項目的資源、任務、進度、質量,而忽略了項目管理的最終目標——項目成本控制。諾明軟體為例,通過項目管理軟體,可全面核算各類項目成本,其中包括人工、費用、材料、設備、管理分攤、外包等項目成本的精細化管理,幫助財務人員輕松完成項目成本核算過程,同時幫助項目經理實時了解項目實際產生的各項成本。
5. 怎樣提升自己單片機C語言編程能力啊求高手指點迷津!我硬體也懂一點 但我想朝編程方面發展 跪求高手指教
到樓主描述的這種程度,比較實際的只有兩種方法:一是實踐,實際做一個較大的項目,二是多看看網上的一些好的範例,哪怕是你做過的項目,重點不是看其所實現的功能,而是看其源程序的特點和結構!個別的可以關注一下演算法。還有一種方法,學一些軟體專業的必修基礎課,了解軟體編程的思維模式,這可能要搭些功夫,而且影響是潛移默化的,如果不是搞純軟體的話,個人觀點可以不學。
C語言編程能力並不完全體現在代碼的編寫效率和執行效率高。注意:是不完全,這方面的提升與個人的邏輯思維能力和其它知識水平有關。舉個例子:假如讓你編制一個函數實現求arctan反三角函數的值,你會怎麼做?如果你不知道採用級數展開的方法就無從下手。其實這考驗的是你的數學水平。所以這方面的提高是綜合性的,無法具體而談。
可以提升的我認為體現在如下幾個方面,這幾方面做好了,同樣也可以說具備相當的編程能力了。
1、軟體版本管理:任何軟體,每次修改發布後必須更新軟體版本號,這點工作後尤其關鍵,我見過這方面不認真的,別多了,3、4個版本後就焦頭爛額。
2、源程序中多些注釋:比如函數的功能描述、入口參數說明、返回值說明、調用的要求、完成日期等。另外,關鍵演算法的說明也應該注釋。常言道:好記憶不如爛筆頭,不能太過相信自己的智商。
3、工程化管理源程序:比如對一些常數、介面地址、數據類型定義(typedef)、數據結構定義、自定義的函數聲明等,應寫入單獨建立.H文件,然後在其它.C文件中包含。.C文件,如果軟體大的話也盡量的按照功能分別建立,然後在工程中包含。
4、有時,一個軟體會針對不同型號的設備,此時應採用#ifdef等編譯控制語句加以區分;而且,為方便調試,有時需要對一些狀態或變數賦與初值,而正式版本中不能要,也可以採用這種方法,便於管理,不易出錯。這部分內容應放在前面所說的.H文件中。
5、盡量多使用函數,這樣模塊化強,也能通過函數名看出函數功能,易於代碼閱讀。最簡單的例子就是初學者常用的Delay()。不過也別太過了,A=B+C就沒必要了。
6、對一些常數、地址,最好使用#define通過英文字元來代替,將其放在.H文件中,這樣萬一有變化,只需改一處即可,方便,又不會遺漏。比如定時器重裝值:
#define C_TH0_50MS (65536-50000)/256
如果需要改晶振,只需改此處即可。
以上注重的是整個軟體方面,下面說一些具體需要注意的,不成系統,也沒整理過,想到那說到哪吧。基本上是些規范,規范同樣代表著水平:
1、多分枝邏輯判斷類語句:應養成將所有判斷情況都寫出來、不用的注掉的習慣,這類語句包括if、switch,舉例
if(i==4)
{....}
//else if i>4
//else i<4
其中else的兩部份不用,那也寫出來,注掉。這樣幫助你保證程序的嚴密型,也有助於問題排查
2、常數、變數、函數、埠等的命名:(不要出現全局變數名與局部變數名相同的情況,雖然在C里允許這樣做)我個人採用如下規則
全局變數:類型+具有實際意義的片語或拼音,其中片語或拼音中每個字首字母應大寫。
例如: iSecondCount:一個int類型的秒計數變數
局部變數:全小寫字元,循環計數變數可以採用諸如i、j、k、n之類的無意義字元。最好不用
a、b、c之類的16進制數所使用的字元。
埠:全大寫,並使用具有實際意義的片語或拼音,使用_作為分割符。如KEY_COM
常數:前面加「C_」,後面每個單詞之間最好也加「_」,如上例中的C_TH0_50MS
函數:類似於全局變數,只是前面不加類型說明符。如Timer0、Delay、DelayMs。
3、源程序中的注釋符盡量不使用/* */,而使用//,這樣如果要臨時注掉大塊程序時,使用一次/* */就可以了,否則可能需要修改多處,麻煩。
4、格式上,注意縮進,尤其是多級判斷。而且執行體既便只有一句,有些地方也盡量不要忽略大括弧,舉例:
if(a>4)
{
a++;
}
else
{
a=0;
}
5、..............還有很多,一下想不起來。你可以自己體會,自己制定。
能力的體現方式有很多,比如說求職是否能如願。看人看細節,如果編程時養成了上述的習慣,不管你的實際水平如何,都說明了你的處事態度,在大家的智商水平差不多的前提下,無論於公於私,如果我是老闆的話會選擇你,放心的把任務交給你去做。
你先試試吧,說起來容易,做起來難,我自己的規則,我的執行度也就達到70%水平吧。
6. 關於C語言
一、C語言的起源
C 語言是1972年由美國的Dennis Ritchie設計發明的, 並首次在UNIX操作系統
的 DEC PDP-11 計算機上使用。 它由早期的編程語言 BCPL( Basic Combind
Programming Language) 發展演變而來。在1970年, AT&T 貝爾實驗室的 Ken
Thompson根據BCPL語言設計出較先進的並取名為 B的語言, 最後導了C 語言的問世。
隨著微型計算機的日益普及, 出現了許多C 語言版本。由於沒有統一的標准,
使得這些C 語言之間出現了一些不一致的地方。為了改變這種情況, 美國國家標准
研究所(ANSI)為C 語言制定了一套ANSI標准, 成為現行的C語言標准。
二、C 語言的特點
C 語言發展如此迅速, 而且成為最受歡迎的語言之一, 主要因為它具有強大的
功能。許多著名的系統軟體, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 語言編寫的。
用C 語言加上一些匯編語言子程序, 就更能顯示C 語言的優勢了, 象PC- DOS 、
WORDSTAR等就是用這種方法編寫的。歸納起來C 語言具有下列特點:
1. C是中級語言
它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以象
匯編語言一樣對位、位元組和地址進行操作, 而這三者是計算機最基本的工作單元。
2. C是結構式語言
結構式語言的顯著特點是代碼及數據的分隔化, 即程序的各個部分除了必要的
信息交流外彼此獨立。這種結構化方式可使程序層次清晰, 便於使用、維護以及調
試。C 語言是以函數形式提供給用戶的, 這些函數可方便的調用, 並具有多種循
環、條件語句控製程序流向, 從而使程序完全結構化。
3. C語言功能齊全
C 語言具有各種各樣的數據類型, 並引入了指針概念, 可使程序效率更高。另
外C 語言也具有強大的圖形功能, 支持多種顯示器和驅動器。而且計算功能、邏輯
判斷功能也比較強大, 可以實現決策目的。
4. C語言適用范圍大
C 語言還有一個突出的優點就是適合於多種操作系統, 如DOS、UNIX,也適用於
多種機型。
三、 Turbo C 概述
1 Turbo C 的產生與發展
Turbo C 是美國Borland 公司的產品,Borland公司是一家專門從事軟體開發、
研製的大公司。該公司相繼推出了一套 Turbo系列軟體, 如Turbo BASIC, Turbo
Pascal, Turbo Prolog, 這些軟體很受用戶歡迎。該公司在1987年首次推出Turbo
C 1.0 產品, 其中使用了全然一新的集成開發環境, 即使用了一系列下拉式菜單,
將文本編輯、程序編譯、連接以及程序運行一體化, 大大方便了程序的開發。1988
年, Borland 公司又推出Turbo C1.5版本, 增加了圖形庫和文本窗口函數庫等, 而
Turbo C 2.0 則是該公司1989年出版的。Turbo C2.0在原來集成開發環境的基礎上
增加了查錯功能, 並可以在Tiny模式下直接生成.COM (數據、代碼、堆棧處在同一
64K 內存中) 文件。還可對數學協處理器 (支持8087/80287/80387等)進行模擬。
Borland 公司後來又推出了面向對象的程序軟體包Turbo C+ + , 它繼承發展
Turbo C 2.0 的集成開發環境, 並包含了面向對象的基本思想和設計方法。
1991年為了適用Microsoft 公司的Windows 3.0 版本, Borland 公司又將Turbo
C++ 作了更新, 即Turbo C 的新一代產品Borlandc C++也已經問世了。
2 Turbo C 2.0基本配置要求
Turbo C 2.0可運行於IBM-PC系列微機, 包括XT, AT及IBM 兼容機。 此時要求
DOS 2.0或更高版本支持, 並至少需要448K的RAM, 可在任何彩、單色80列監視器上
運行。支持數學協處理器晶元, 也可進行浮點模擬, 這將加快程序的執行。
3 Turbo C 2.0內容簡介
Turbo C 2.0有六張低密軟盤(或兩張高密軟盤)。下面對Turbo C 2.0的主要文
件作一簡單介紹:
INSTALL.EXE 安裝程序文件
TC.EXE 集成編譯
TCINST.EXE 集成開發環境的配置設置程序
TCHELP.TCH 幫助文件
THELP.COM 讀取TCHELP.TCH的駐留程序
README 關於Turbo C的信息文件
TCCONFIG.EXE 配置文件轉換程序
MAKE.EXE 項目管理工具
TCC.EXE 命令行編譯
TLINK.EXE Turbo C系列連接器
TLIB.EXE Turbo C系列庫管理工具
C0?.OBJ 不同模式啟動代碼
C?.LIB 不同模式運行庫
GRAPHICS.LIB 圖形庫
EMU.LIB 8087模擬庫
FP87.LIB 8087庫
*.H Turbo C頭文件
*.BGI 不同顯示器圖形驅動程序
*.C Turbo C例行程序(源文件)
其中: 上面的?分別為:
T Tiny(微型模式)
S Small(小模式)
C Compact(緊湊模式)
M Medium(中型模式)
L Large(大模式)
H Huge(巨大模式)
四、 Turbo C 2.0的安裝和啟動
Turbo C 2.0的安裝非常簡單, 只要將1#盤插入A驅動器中, 在DOS的"A>" 下鍵
入:
A>INSTALL
即可, 此時屏幕上顯示三種選擇:
1. 在硬碟上創造一個新目錄來安裝整個Turbo C 2.0系統。
2. 對Turbo C 1.5更新版本。
這樣的安裝將保留原來對選擇項、顏色和編輯功能鍵的設置。
3. 為只有兩個軟盤而無硬碟的系統安裝Turbo C 2.0。
這里假定按第一種選擇進行安裝, 只要在安裝過程中按對盤號的提示, 順序插
入各個軟盤, 就可以順利地進行安裝, 安裝完畢將在C盤根目錄下建立一個TC 子目
錄, TC下還建立了兩個了目錄LIB和INCLUDE, LIB子目錄中存放庫文件, INCLUDE
子目錄中存放所有頭文件。
運行Turbo C 2.0時, 只要在TC 子目錄下鍵入TC並回車即可進入Turbo C 2. 0
集成開發環境。
五、 Turbo C 2.0集成開發環境的使用
進入Turbo C 2.0集成開發環境中後, 屏幕上顯示:
——————————————————————————————
File Edit Run Compile Project Options Debug Break/watch
┌————————————Edit——————————————┐
│ Line 1 Col 1 Insert Indent Tab File Unindent c:NONAME.C│
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│—————————Message——————————————— │
│ │
│ │
└————————————————————————————┘
F1-Help F5-Zoom F6-Switch F7-Trace F8-Step F9-Make F10-Menu
———————————————————————————————
其中頂上一行為Turbo C 2.0 主菜單, 中間窗口為編輯區, 接下來是信息窗
口, 最底下一行為參考行。這四個窗口構成了Turbo C 2.0的主屏幕, 以後的編程、
編譯、調試以及運行都將在這個主屏幕中進行。下面詳細介紹主菜單的內容。
1 主菜單
主菜單 在Turbo C 2.0主屏幕頂上一行, 顯示下列內容:
File Edit Run Compile Project Options Debug Break/watch
除Edit外, 其它各項均有子菜單, 只要用Alt加上某項中第一個字母(即大寫字
母), 就可進入該項的子菜單中。
(1)、File(文件)菜單
按Alt+F可進入File菜單, 該菜單包括以下內容:
.Load(載入)
裝入一個文件, 可用類似DOS的通配符(如*.C)來進行列表選擇。也可裝入其它
擴展名的文件, 只要給出文件名(或只給路徑)即可。該項的熱鍵為F3, 即只要在主
菜單中按F3即可進入該項, 而不需要先進入File菜單再選此項。
.Pick(選擇)
將最近裝入編輯窗口的8個文件列成一個表讓用戶選擇, 選擇後將該程序裝入
編輯區, 並將游標置在上次修改過的地方。其熱健為Alt-F3。
.New(新文件)
說明文件是新的, 預設文件名為NONAME.C, 存檔時可改名。
.Save(存檔)
將編輯區中的文件存檔, 若文件名是NONAME.C時, 將詢問是否更改文件名, 其
熱鍵為F2。
.Write to(存檔)
可由用戶給出文件名將編輯區中的文件存檔, 若該文件已存在, 則詢問要不要
覆蓋。
.Directory(目錄)
顯示目錄及目錄中的文件, 並可由用戶選擇。
.Change dir(改變目錄)
顯示當前目錄, 用戶可以改變顯示的目錄。
.Os shell(暫時退出)
暫時退出Turbo C 2.0到DOS提示符下, 此時可以運行DOS 命令, 若想回到
Turbo C 2.0中, 只要在DOS狀態下鍵入EXIT即可。
.Quit(退出)
退出Turbo C 2.0, 返回到DOS操作系統中, 其熱鍵為Alt+X。
說明:
以上各項可用游標鍵移動色棒進行選擇, 回車則執行。也可用每一項的第一個
大寫字母直接選擇。若要退到主菜單或從它的下一級菜單列表框退回均可用Esc鍵,
Turbo C 2.0所有菜單均採用這種方法進行操作, 以下不再說明。
(2)、Edit(編輯)菜單
按Alt+E可進入編輯菜單, 若再回車, 則游標出現在編輯窗口, 此時用戶可以
進行文本編輯。
編輯方法基本與wordstar相同, 可用F1鍵獲得有關編輯方法的幫助信息。
與編輯有關的功能鍵如下:
F1 獲得Turbo C 2.0編輯命令的幫助信息
F5 擴大編輯窗口到整個屏幕
F6 在編輯窗口與信息窗口之間進行切換
F10 從編輯窗口轉到主菜單
編輯命令簡介:
PageUp 向前翻頁
PageDn 向後翻頁
Home 將游標移到所在行的開始
End 將游標移到所在行的結尾
Ctrl+Y 刪除游標所在的一行
Ctrl+T 刪除游標所在處的一個詞
Ctrl+KB 設置塊開始
Ctrl+KK 設置塊結尾
Ctrl+KV 塊移動
Ctrl+KC 塊拷貝
Ctrl+KY 塊刪除
Ctrl+KR 讀文件
Ctrl+KW 存文件
Ctrl+KP 塊文件列印
Ctrl+F1 如果游標所在處為Turbo C 2.0庫函數, 則獲得有關該函數的幫助
信息
Ctrl+Q[ 查找Turbo C 2.0雙界符的後匹配符
Ctrl+Q] 查找Turbo C 2.0雙界符的前匹配符
說明:
a. Turbo C 2.0的雙界符包括以下幾種符號:
花括符 {和}
尖括符 <和>
圓括符 (和)
方括符 [和]
注釋符 /*和*/
雙引號 "
單引號 '
b. Turbo C 2.0在編輯文件時還有一種功能, 就是能夠自動縮進, 即游標定位
和上一個非空字元對齊。在編輯窗口中, Ctrl+OL為自動縮進開關的控制鍵。
(3)Run(運行)菜單
按Alt+R可進入Run菜單, 該菜單有以下各項:
.Run(運行程序)
運行由Project/Project name項指定的文件名或當前編輯區的文件。如果對上
次編譯後的源代碼未做過修改, 則直接運行到下一個斷點(沒有斷點則運行到結束)。
否則先進行編譯、連接後才運行, 其熱鍵為Ctrl+F9。
.Program reset(程序重啟)
中止當前的調試, 釋放分給程序的空間, 其熱鍵為Ctrl+F2。
.Go to cursor(運行到游標處)
調試程序時使用, 選擇該項可使程序運行到游標所在行。游標所在行必須為一
條可執行語句, 否則提示錯誤。其熱鍵為F4。
.Trace into(跟蹤進入)
在執行一條調用其它用戶定義的子函數時, 若用Trace into項, 則執行長條將
跟蹤到該子函數內部去執行, 其熱鍵為F7。
.Step over(單步執行)
執行當前函數的下一條語句, 即使用戶函數調用, 執行長條也不會跟蹤進函數
內部, 其熱鍵為F8。
.User screen(用戶屏幕)
顯示程序運行時在屏幕上顯示的結果。其熱鍵為Alt+F5。
(4)、Compile(編譯)菜單
按Alt+C可進入Compile菜單, 該菜單有以下幾個內容:
.Compile to OBJ(編譯生成目標碼)
將一個C源文件編譯生成.OBJ目標文件, 同時顯示生成的文件名。其熱鍵為
Alt+F9。
.Make EXE file(生成執行文件)
此命令生成一個.EXE的文件, 並顯示生成的.EXE文件名。其中.EXE文件名是下
面幾項之一。
a. 由Project/Project name說明的項目文件名。
b. 若沒有項目文件名, 則由Primary C file說明的源文件。
c. 若以上兩項都沒有文件名, 則為當前窗口的文件名。
.Link EXE file(連接生成執行文件)
把當前.OBJ文件及庫文件連接在一起生成.EXE文件。
.Build all(建立所有文件)
重新編譯項目里的所有文件, 並進行裝配生成.EXE文件。該命令不作過時檢查
(上面的幾條命令要作過時檢查, 即如果目前項目里源文件的日期和時間與目標文
件相同或更早, 則拒絕對源文件進行編譯)。
.Primary C file(主C文件)
當在該項中指定了主文件後, 在以後的編譯中, 如沒有項目文件名則編譯此項
中規定的主C文件, 如果編譯中有錯誤, 則將此文件調入編輯窗口, 不管目前窗口
中是不是主C文件。
.Get info(獲得有關當前路徑、源文件名、源文件位元組大小、編譯中的錯誤數
目、可用空間等信息。
(5)、Project(項目)菜單
按Alt+P可進入Project菜單, 該菜單包括以下內容:
.Project name(項目名)
項目名具有.PRJ的擴展名, 其中包括將要編譯、連接的文件名。例如有一個程
序由file1.c, file2.c, file3.c組成, 要將這3個文件編譯裝配成一個file.exe的
執行文件, 可以先建立一個file.prj的項目文件, 其內容如下:
file1.c
file2.c
file3.c
此時將file.prj放入Project name項中, 以後進行編譯時將自動對項目文件中
規定的三個源文件分別進行編譯。然後連接成file.exe文件。
如果其中有些文件已經編譯成.OBJ文件, 而又沒有修改過, 可直接寫上.OBJ擴
展名。此時將不再編譯而只進行連接。
例如: file1.obj
file2.c
file3.c
將不對file1.c進行編譯, 而直接連接。
說明:
當項目文件中的每個文件無擴展名時, 均按源文件對待, 另外, 其中的文件也
可以是庫文件, 但必須寫上擴展名.LIB。
.Break make on(中止編譯)
由用戶選擇是否在有Warining(警告)、Errors(錯誤)、Fatal Errors( 致命錯
誤)時或Link(連接)之前退出Make編譯。
.Auto dependencies(自動依賴)
當開關置為on, 編譯時將檢查源文件與對應的.OBJ文件日期和時間, 否則不進
行檢查。
.Clear project(清除項目文件)
清除Project/Project name中的項目文件名。
.Remove messages(刪除信息)
把錯誤信息從信息窗口中清除掉。
(6)、Options(選擇菜單)
按Alt+O可進入Options菜單, 該菜單對初學者來說要謹慎使用。
.Compiler(編譯器)
本項選擇又有許多子菜單, 可以讓用戶選擇硬體配置、存儲模型、調試技術、
代碼優化、對話信息控制和宏定義。這些子菜單如下:
Model
共有Tiny, small, medium, compact, large, huge 六種不同模式可由同戶選
擇。
Define
打開一個宏定義框, 同戶可輸入宏定義。多重定義可同分號, 賦值可用等號。
Code generation
它又有許多任選項, 這些任選項告訴編譯器產生什麼樣的目標代碼。
Calling convention 可選擇C或Pascal方式傳遞參數。
Instruction set 可選擇8088/8086或80186/80286指令系列。
Floating point 可選擇模擬浮點、數學協處理器浮點或無浮點運算。
Default char type 規定char的類型。
Alignonent 規定地址對准原則。
Merge plicate strings 作優化用, 將重復的字元串合並在一起。
Standard stack frame 產生一個標準的棧結構。
Test stack overflow 產生一段程序運行時檢測堆棧溢出的代碼。
Line number 在.OBJ文件中放進行號以供調試時用。
OBJ debug information 在.OBJ文件中產生調試信息。
Optimization
Optimize for 選擇是對程序小型化還是對程序速度進行優
化處理。
Use register variable 用來選擇是否允許使用寄存器變數。
Register optimization 盡可能使用寄存器變數以減少過多的取數操
作。
Jump optimization 通過去除多餘的跳轉和調整循環與開關語句
的辦法, 壓縮代碼。
Source
Indentifier length 說明標識符有效字元的個數, 默認為32個。
Nested comments 是否允許嵌套注釋。
ANSI keywords only 是只允許ANSI關鍵字還是也允許Turbo C
2.0關鍵字
Error
Error stop after 多少個錯誤時停止編譯, 默認為25個。
Warning stop after 多少個警告錯誤時停止編譯, 默認為100個。
Display warning
Portability warning 移植性警告錯誤。
ANSI Violations 侵犯了ANSI關鍵字的警告錯誤。
Common error 常見的警告錯誤。
Less common error 少見的警告錯誤。
Names 用於改變段(segment)、 組( group) 和類
(class)的名字, 默認值為CODE,DATA,BSS。
.Linker(連接器)
本菜單設置有關連接的選擇項, 它有以下內容:
Map file menu 選擇是否產生.MAP文件。
Initialize segments 是否在連接時初始化沒有初始化的段。
Devault libraries 是否在連接其它編譯程序產生的目標文件時去尋
找其預設庫。
Graphics library 是否連接graphics庫中的函數。
Warn plicate symbols 當有重復符號時產生警告信息。
Stack warinig 是否讓連接程序產生No stack的警告信息。
Case-sensitive link 是否區分大、小寫字。
.Environment(環境)
本菜單規定是否對某些文件自動存檔及製表鍵和屏幕大小的設置
Message tracking
Current file 跟蹤在編輯窗口中的文件錯誤。
All files 跟蹤所有文件錯誤。
Off 不跟蹤。
Keep message 編譯前是否清除Message窗口中的信息。
Config auto save 選on時, 在Run, Shell或退出集成開發環境之前,
如果Turbo C 2.0的配置被改過, 則所做的改動
將存入配置文件中。選off時不存。
Edit auto save 是否在Run或Shell之前, 自動存儲編輯的源文件。
Backup file 是否在源文件存檔時產生後備文件(.BAK文件)。
Tab size 設置製表鍵大小, 默認為8。
Zoomed windows 將現行活動窗口放大到整個屏幕, 其熱鍵為F5。
Screen size 設置屏幕文本大小。
.Directories(路徑)
規定編譯、連接所需文件的路徑, 有下列各項:
Include directories 包含文件的路徑, 多個子目錄用";"分開。
Library directories 庫文件路徑, 多個子目錄用";"分開。
Output directoried 輸出文件(.OBJ, .EXE, .MAP文件)的目錄。
Turbo C directoried Turbo C 所在的目錄。
Pick file name 定義載入的pick文件名, 如不定義則從current
pick file中取。
.Arguments(命令行參數)
允許用戶使用命令行參數。
.Save options(存儲配置)
保存所有選擇的編譯、連接、調試和項目到配置文件中, 預設的配置文件為
TCCONFIG.TC。
.Retrive options
裝入一個配置文件到TC中, TC將使用該文件的選擇項。
(7)、Debug(調試)菜單
按Alt+D可選擇Debug菜單, 該菜單主要用於查錯, 它包括以下內容:
Evaluate
Expression 要計算結果的表達式。
Result 顯示表達式的計算結果。
New value 賦給新值。
Call stack 該項不可接觸。而在Turbo C debuger 時用於檢
查堆棧情況。
Find function 在運行Turbo C debugger時用於顯示規定的函數。
Refresh display 如果編輯窗口偶然被用戶窗口重寫了可用此恢復
編輯窗口的內容。
(8)、Break/watch(斷點及監視表達式)
按Alt+B可進入Break/watch菜單, 該菜單有以下內容:
Add watch 向監視窗口插入一監視表達式。
Delete watch 從監視窗口中刪除當前的監視表達式。
Edit watch 在監視窗口中編輯一個監視表達式。
Remove all watches 從監視窗口中刪除所有的監視表達式。
Toggle breakpoint 對游標所在的行設置或清除斷點。
Clear all breakpoints 清除所有斷點。
View next breakpoint 將游標移動到下一個斷點處。
六 Turbo C 2.0的配置文件
所謂配置文件是包含Turbo C 2.0有關信息的文件, 其中存有編譯、連接的選
擇和路徑等信息。
可以用下述方法建立Turbo C 2.0的配置:
1. 建立用戶自命名的配置文件
可以從Options菜單中選擇Options/Save options命令, 將當前集成開發環境
的所有配置存入一個由用戶命名的配置文件中。下次啟動TC時只要在DOS下鍵入:
tc/c<用戶命名的配置文件名>
就會按這個配置文件中的內容作為Turbo C 2.0的選擇。
2. 若設置Options/Environment/Config auto save 為on, 則退出集成開發環
境時, 當前的設置會自動存放到Turbo C 2.0配置文件TCCONFIG.TC中。Turbo C 在
啟動時會自動尋找這個配置文件。
3. 用TCINST設置Turbo C的有關配置, 並將結果存入TC.EXE中。Turbo C 在啟
動時, 若沒有找到配置文件, 則取TC.EXE中的預設值。
7. 學生檔案管理系統c語言用什麼軟體
學生檔宏游案管理系統c語言用VC++6.0。C語言項目學生檔案管理系統,本系統好銀使用的開發工具是VC++6.0。C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的友絕宴機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言,盡管C語言提供了許多低級處理的功能,但仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。
8. 《C語言程序設計》項目設計
這種東西很多了,隨便搜索一大堆:這是個學生成績的!
#include <iostream.h>
#include <iomanip.h>
#include <fstream>
#include <vector>
#include <malloc.h>
#include <stdlib.h>
#include <string>
#include <process.h>
#include <stdio.h>
//#define NULL 0
int const Q=20;
#define LEN sizeof(struct student)
using namespace std;
int n=0; //定義一個全局變數統計學生人數
//——--------->定義一個學生考試信息的結構體
struct student
{
char name[Q]; //用來存放姓名的
char sex[Q]; //用來存放性別的
long int id; //用來存放准考證號的
int score[4]; //用來存放分數的
int total; //用來存放總分數的
struct student *next;
};
//student向量容器
vector <student> stu;
//-------------->學生類
class Information
{
public:
Information() ; //構造函數.
~Information() ; //析構函數.
student *creat();//建立鏈表函數。
void output(student *head);
int count(student *head);//定義函數count()統計考生總數
student *insert(student*head);//指針函數*insert()用來添加考生信息.
student *cancel(student *head,long int num);//指針函數*cancel()用來刪除考生信息.
student *find(student *head,long int num); //指針函數*find()用來查找考生信息.
void inorder(student *head);//定義inorder()函數將考生的總分從大到小排列並輸出
void average( student *head);//求學生成績的平均分的函數
void save(student *head);//保存函數
student *Read();//讀取函數
private:
student *p1,*p2,*p3,*head,st;
};
Information::Information()
{
cout<<" ******************************************************************************\n";
cout<<" ------------------------<<歡迎您使用學生成績管理系統>>------------------------\n";
cout<<" ******************************************************************************\n\n";
}
Information::~Information()
{
cout<<" ******************************************************************************\n";
cout<<" ------------------------<<謝謝您使用學生成績管理系統>>------------------------\n";
cout<<" ******************************************************************************\n";
}
student *Information::creat(void)
{//定義一個指向struct student的結構體指針函數*creat()用來增加考生信息.
char ch[Q];n=0; //用來存放姓名的
p1=p2=(student *)malloc(LEN);//調用malloc()函數用來開辟一個新的存儲單元
cout<<" -------------<<請建立學生考試信息表,在姓名處鍵以 ! 結束輸入。>>--------------"<<endl;
cout<<" 姓名:";
cin>>ch;
head=NULL; //給指針head賦初值
while (strcmp(ch,"!")!=0)
{//調用字元比較函數strcmp()用來判斷是否繼續輸入
char str[10];
int flag=0;
p1=(student *)malloc(LEN);//調用malloc()函數用來開辟一個新的存儲單元
strcpy(p1->name,ch); //將循環結構前面輸入的姓名復制到結構體名為p1的數組name中
cout<<" 性別:";
cin>>p1->sex;
cout<<" 准考證號(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"對不起,請正確輸入!!!\n";
else
{
p1->id=atol(str); flag=1;
}
}while(flag==0);
flag=0;
cout<<" 計算機組成原理成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{
p1->score[0]=atoi(str); flag=1;
}
}while(flag==0);
flag=0;
cout<<" 概率統計成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{ p1->score[1]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" 英語成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{ p1->score[2]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" C++成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{ p1->score[3]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];//計算總分
if(n==0)head=p1;//如果是輸入第一組學生考試信息就將指針p1賦給指針head
else p2->next=p1;//否則將p1賦給p2所指結構體的next指針
p2=p1;//將指針p1賦給指針p2
n++; //將n的值加1
cout<<" 姓名:";
cin>>ch;//將輸入的姓名存放到字元數組ch中
}
p2->next=NULL;//將p2所指結構體的next指針重新賦空值
return (head);//將輸入的第一組學生考試信息返回
}
//--------------->定義output()函數將考生的信息從頭指針所指內容開始輸出
void Information::output(student *head)
{
if(head==NULL) cout<<" 這是一個空表,請先輸入考生成績.\n";
else{
cout<<"-------------------------------------------------------------------------------\n";
cout<<" *學生考試成績信息表*\n";
cout<<"-------------------------------------------------------------------------------\n";
cout<<"准考證號 姓 名 性別 計算機組成原理 概率統計 英語 C++ 平均分 總分\n";
cout<<"-------------------------------------------------------------------------------\n";
p1=head;//將頭指針賦給p
do
{
cout<<setw(8)<<p1->id
<<setw(9)<<p1->name
<<setw(8)<<p1->sex
<<setw(13)<<p1->score[0]
<<setw(16)<<p1->score[1]
<<setw(10)<<p1->score[2]
<<setw(9)<<p1->score[3]
<<setw(6)<<p1->total/4.0
<<setw(11)<<p1->total<<endl;
cout<<"-------------------------------------------------------------------------------\n";
p1=p1->next;//將下一組考生信息的next指針賦給p
}while(p1!=NULL);//若指針p非空則繼續,目的是把所有的考生信息都傳給指針p然後輸出.
}
}
//------------>統計學生人數的函數
int Information::count(struct student *head)//定義函數count()統計考生總數
{
if(head==NULL)
return(0);//若指針head為空返回值為0
else return(1+count(head->next));//函數的遞歸調用
}
//----------->插入學生的成績的函數
student *Information::insert( student *head)
//插入新結點定義一個指向struct student的結構體指針函數*insert()用來添加考生信息.
{
char str[10];
int flag=0;
cout<<"\t----------------<<請輸入新增學生成績信息>>----------------\n"<<endl;
p1=(student *)malloc(LEN); //使p1指向插入的新結點
cout<<" 姓名:";
cin>>p1->name; //將輸入的姓名存放到結構體名為p1的數組name中
cout<<" 性別:";
cin>>p1->sex;
cout<<" 准考證號(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"對不起,請請正確輸入!!!\n";
else
{p1->id=atol(str); flag=1; }
}while(flag==0);
flag=0;
cout<<" 計算機組成原理成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{ p1->score[0]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" 概率統計成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{ p1->score[1]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" 英語成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{ p1->score[2]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
cout<<" C++成績:";
do{
cin>>str;
if(atoi(str)>100 || atoi(str)<1)
cout<<"對不起,請輸入1-100之間的數字!!\n";
else
{ p1->score[3]=atoi(str); flag=1;}
}while(flag==0);
flag=0;
p1->total=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];//計算總分
p2=head;//將頭指針賦給p2
if(head==NULL) //若沒調用次函數以前的頭指針head為空
{
head=p1;p1->next=NULL;
}//則將p1賦給頭指針head並將p1所指結構體成員指針next賦空值
else
{
while((p1->id>p2->id)&&(p2->next!=NULL))
{
p3=p2;//p3指向原p2指向的結點
p2=p2->next;
}//p2後移一個結點
if(p1->id<=p2->id)
{
if(head==p2)
{
p1->next=head;
head=p1;
} //插入到第一個結點之前
else
{
p3->next=p1;
p1->next=p2;
} //插入到p3所指結點之後
}
else
{
p2->next=p1;
p1->next=NULL;
} //插入到尾結點之後
}
n++;//將學生人數加1
cout<<"\t你輸入的學生信息已經成功插入"<<endl;
return (head);
}
//------------>刪除函數
student *Information::cancel(student *head,long int num)//定義一個指向struct student的結構體指針函數*delete()用來刪除考生信息.
{
if(head==NULL)//若調用次函數以前的頭指針head為空
{
return(head);
}
else
{
p1=head;//否則將頭指針賦給p1
while(num!=p1->id&&p1->next!=NULL)//尋找要刪除的結點當p1所指的學生准考證號不是輸入的學生准考證號並且p1所指的next指針不為空
{
p2=p1;
p1=p1->next;
}//p2指向原p1指向的結點p1後移一個結點
if(num==p1->id)//如果輸入的學生准考證號是p1所指的學生准考證號//結點找到後刪除
{
if(p1==head) head=p1->next;//如果head指針和p1指針相等則將下一個結點賦給指針head
else
p2->next=p1->next;//否則將p1所指結點賦給p2所指結點將要刪除的學生信息跳過去
cout<<" 刪除准考證號為"<<num<<"的學生\n";
n--;//將學生人數減1
}
return(head);//將頭指針返回
}
}
//------------>查找函數
student *Information::find(student *head,long int num)
//定義一個指向struct student的結構體指針函數*find()用來查找考生信息.
{
if(head==NULL)//若調用次函數以前的頭指針head為空
{
cout<<" 這是一個空表,請先輸入考生成績.\n";
return(head);
}
else
{
p1=head;//否則將頭指針賦給p1
while(num!=p1->id&&p1->next!=NULL)
//尋找結點當p1所指的學生准考證號不是輸入的學生准考證號並且p1所指的next指針不為空
{
p1=p1->next;
}//p2指向原p1指向的結點p1後移一個結點
if(num==p1->id)//如果要查找的學生准考證號是p1所指的學生准考證號
{
cout<<"------------------------------------------------------------------------------\n";
cout<<"准考證號 姓名 性別 計算機組成原理 概率統計 英語 C++ 平均分 總分 \n";
cout<<"------------------------------------------------------------------------------\n";
cout<<setw(8)<<p1->id
<<setw(9)<<p1->name
<<setw(8)<<p1->sex
<<setw(13)<<p1->score[0]
<<setw(16)<<p1->score[1]
<<setw(10)<<p1->score[2]
<<setw(9)<<p1->score[3]
<<setw(6)<<p1->total/4.0
<<setw(11)<<p1->total<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
else
cout<<" 沒找到准考證號為"<<num<<"的學生.\n"; //結點沒找到
return(head);
}
}
//------------定義inorder()函數將考生的總分從大到小排列並輸出
void Information::inorder(student *head)
{
int i,k,m=0,j;
student *p[Q];//定義一個指向struct student的結構體指針數組p
if(head!=NULL)//如果頭指針是空則繼續
{ m=count(head);
cout<<"------------------------------------------------------------------------------\n";
cout<<"學生考試成績統計表\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<"准考證號 姓 名 性別 計算機組成原理 概率統計 英語 C++ 平均分 總分 名次\n";
cout<<"------------------------------------------------------------------------------\n";
p1=head;
for(k=0;k<m;k++)
{
p[k]=p1;
p1=p1->next;
}
for(k=0;k<m-1;k++) //選擇排序法
for(j=k+1;j<m;j++)
if(p[k]->total<p[j]->total)
{
p2=p[k];
p[k]=p[j];
p[j]=p2;
} //從大到小排列的指針
for(i=0;i<m;i++)
{
cout<<setw(8)<<p1->id
<<setw(9)<<p1->name
<<setw(8)<<p1->sex
<<setw(13)<<p1->score[0]
<<setw(16)<<p1->score[1]
<<setw(10)<<p1->score[2]
<<setw(9)<<p1->score[3]
<<setw(6)<<p1->total/4.0
<<setw(11)<<p1->total<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
}
}
//------------>求各科平均分成績的函數
void Information::average(student *head)
{
int k,m;
float arg1=0,arg2=0,arg3=0,arg4=0;
if(head==NULL)//如果頭指針是空則繼續
{
cout<<" 這是一個空表,請先輸入考生成績.\n";
}
else
{
m=count(head);
p1=head;
for(k=0;k<m;k++)
{
arg1+=p1->score[0];
arg2+=p1->score[1];
arg3+=p1->score[2];
arg4+=p1->score[3];
p1=p1->next;
}
arg1/=m;arg2/=m;arg3/=m;arg4/=m;
cout<<"全班單科成績平均分\n";
cout<<"------------------------------------------------------------------------------\n";
cout<<" 計算機組成原理平均分:"<<setw(7)<<arg1
<<" 概率統計平均分:"<<setw(7)<<arg2
<<" 英語平均分:"<<setw(7)<<arg3
<<" C++平均分:"<<setw(7)<<arg4<<endl;
cout<<"------------------------------------------------------------------------------\n";
}
}
//------------------->保存函數.
void Information::save(student *head)
{
ofstream out("data.txt",ios::out);
out<<count(head)<<endl;
while(head!=NULL)
{ out<<head->name<<"\t"
<<head->id<<"\t"<<"\t"
<<head->sex<<"\t"
<<head->score[0]<<"\t"
<<head->score[1]<<"\t"
<<head->score[2]<<"\t"
<<head->score[3]<<"\t"
<<head->total<<endl;
head=head->next;
}
}
//———————————>讀取函數的實現
student *Information::Read()
{ int i=0;
p1=p2=( student *)malloc(LEN);
head=NULL;
ifstream in("data.txt",ios::out);
in>>i;
if(i==0){cout<<" data.txt 文件中的數據為空,請先輸入數據。"<<endl; return 0;}
else {
cout<<" …………………………………………………………………………………………"<<endl;
for(;i>0;i--)
{ p1=(student *)malloc(LEN);
cin>>st.name>>st.id>>st.sex
>>st.score[0]>>st.score[1]>>st.score[2]>>st.score[3]
>>st.total;
strcpy(p1->name,st.name);
p1->id=st.id;
strcpy(p1->sex,st.sex);
p1->score[0]=st.score[0];
p1->score[1]=st.score[1];
p1->score[2]=st.score[2];
p1->score[3]=st.score[3];
p1->total=st.total;
if(n==0)head=p1;//如果是輸入第一組學生考試信息就將指針p1賦給指針head
else p2->next=p1;//否則將p1賦給p2所指結構體的next指針
p2=p1;//將指針p1賦給指針p2
n++; //將n的值加1
//顯示讀入數據
cout<<" "<<p1->name<<"\t"
<<p1->id<<"\t"<<"\t"
<<p1->sex<<"\t"
<<p1->score[0]<<"\t"
<<p1->score[1]<<"\t"
<<p1->score[2]<<"\t"
<<p1->score[3]<<"\t"
<<p1->total<<endl;
cout<<" …………………………………………………………………………………………"<<endl;
//
}
cout<<" 數據已經成功讀取完畢。"<<endl;
p2->next=NULL;
return (head);
}
}
//------------------------------>主函數.
int main(void)
{
Information person;
student *head=NULL;
char str[10];
int flag=0;
int choice;
long int i;
head=person.Read();
do{
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃ 學生成績管理系統主菜單界面 ┃";
cout<<"┃ 讀取數據請輸入數字零 ┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃ ①.輸入學生成績 ┃";
cout<<"┃ ②.顯示學生成績 ┃";
cout<<"┃ ③.排序統計成績 ┃";
cout<<"┃ ④.查找學生成績 ┃";
cout<<"┃ ⑤.增加學生成績 ┃";
cout<<"┃ ⑥.刪除學生成績 ┃";
cout<<"┃ ⑦.保存退出系統 ┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<<"請輸入您的選擇(1--7):( )\b\b";
cin>>str;
if(atoi(str)>7 || atoi(str)<1)
cout<<"對不起,請輸入1-7這幾個數字!!\n";
else
{
choice=atoi(str);
switch(choice)
{
case 1:
head=person.creat();
break;
case 2:
person.output(head);
break;
case 3:
person.inorder(head);
person.average(head);
cout<<" 參加考試的學生人數為:"<<person.count(head)<<"人\n";
break;
case 4:
cout<<" 請輸入要查找的准考證號(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"對不起,請輸入正確輸入!!!\n";
else
{i=atol(str); flag=1; }
}while(flag==0);
flag=0;
person.find(head,i);
break;
case 5:
head=person.insert(head);
person.output(head);
break;
case 6:
cout<<" 請輸入要刪除的准考證號(8位):";
do{
cin>>str;
if(atol(str)>99999999 || atol(str)<1)
cout<<"對不起,請輸入正確輸入!!!h\n";
else
{i=atol(str); flag=1; }
}while(flag==0);
flag=0;
head=person.cancel(head,i);
person.output(head);
break;
case 7:
person.save(head);
cout<<"文件已保存!可以安全退出!!!"<<endl;
break;
default :cout<<" 對不起,您的輸入有誤,請重新輸入。\n";
break;
}
}
}while(choice!=7);
return 0;
}
9. 學工程管理專業的C語言重要嗎
真心不重要,不要盲目考證,C語言對於工程管理專業是雞肋,真正重要的跟計算機相關的是CAD和PPT,要是還有興趣的話把PS也學學好,已經很不錯了,我沒看見哪個地產企業或者建築公司一定要計算機二級的證書,當然多一個證書也無所謂~~~(以上的前提是你的工作不是搞研究而是實際做項目,如果你是學術派,在這樣一個信息化的時代,虛擬施工等等與計算機聯系的科技顯得越來越重要了,掌握編程語言也是一個必要的基礎能力)
10. c語言課程設計學分管理程序
程序設計基礎實訓
項目名稱:
學生學分管理
系 別: 計算機工程系
專 業: 計算機網路技術
班 級: 0922211
學生姓名:
指導教師: 韋立蓉
北 京 信 息 職 業 技 術 學 院
2010年 1 月 日
一、項目背景介紹
(概要介紹此項目設計的意義和毀閉要含磨求)
本程序為學生學分管理系統。本程序根據現實中的問題通過c語言形式編程。本程序要求能夠登記學分,顯示學分查詢學分,修改學分,刪除學分,統計學分。
二、程序功能描述:
(描述基本程序中每個函數的功能,給處各函數流程圖)
1、
登記單流程圖
2、
顯示學分流程圖
3、
查詢學分流程圖
4、
修改信息流程圖
5、
刪除信息流程圖
6、
統計信息流程圖
三、設計方案介紹
(基本思想函數調用的思路介紹)
1、主流程圖
2、界面設計
(界面設計,函數的定義,功能設計、,羅列出所有需要解決的問題
函數調用問題,循環問題,查找問題,修改問題,查詢問題,刪除問題,比較問題。
3、變數定義
序號 變數名 變數性質(局部/全局) 功能 作用范圍
1 typedef 全局 定義結構體類型 整體
2 Int 全局 定義五門課類型 整體
... Char 全局 定義學號班級姓名類型 整體
5、函數調用的類型
四、測試與分析
(簡要介紹測試的作用及意義)
測試可以知道所編寫的程序是否可行,通過實際的測試可以找出程序是否符合現實。通過測試和反復修改可以使程序更加人性化。
(一)測試列表
(以表格的形式給出,不少於10個)
測試數據或執行操作 執行結果 是否正確 測試人簽名
調用主菜單 顯示了主菜單 正確
選擇主菜單里的1 請輸入學生學生信息纖老裂…. 正確
輸出 有重復有亂碼 否
查詢 無 否
修改 按學號修改……. 是
按學號查詢 顯示了該信息 是
按班級查詢 只顯示里一名同學的信息 否
按學好刪除 刪除成功 是
須補考基礎課的 所有學生信息都顯示 否
可升學學生 顯示了該顯示的信息 是
(二)測試結果分析
(根據以下表格,如實填寫並簽名)
bug個數 錯誤類型 錯誤原因分析 是否修改 設計者簽名
1 與count聲名中的類型不匹配 少了void count() 是
2 錯誤 jia.c 19: 表達式語法錯在 main 函數中 Scanf中少了&s 是
4 錯誤 jia.c 31: do語句中必須有while關鍵字在 main 函數中 沒寫while 是
5 錯誤 jia.c 30: 未定義的符號's'在 main 函數中 上面沒int I; 是
6 錯誤 1.c 335: 表達式語法錯在 count 函數中 Switch() 括弧里沒有變數 是
7
五、實訓總結
(總結實訓過程中的所使用的知識和已實現的功能,總結自己掌握理論知識和動手能力的程度,提出自己的不足之處及改進措施)
通過這一周的實訓。我們充分運用了所學的東西編出了解決實際問題的程序。我們運用了函數的調用,循環,定義,比較,查找,刪除等知識。通過實際動手,我更加深入的了解了課本上的知識。同時提高了我的動手能力。
實訓中我找到了我許多的不足,以前我遇到不董的就會直接去問別人,不獨自思考。試訓中我學會了獨自思考和團隊合作。雖然我在編程當中遇到許多問題,但經過獨自思考和學習解決了問題。最後編出了管理程序。
C語言學生學分管理程序代碼
typedef struct student
{ char num[11],name[7],class[10];
int jichu,renwen,xuanxiu,zhuanye,shiyan;
}STU;
STU st[37];
static int n;
void menu();
void input();
void print();
void query();
void modi();
void del();
void count();
main()
{ int s;
do{
menu();
printf("\n\t\t\t\t 請選擇:");
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:input();break;
case 2:print();break;
case 3:query();break;
case 4:modi();break;
case 5:del();break;
case 6:count();break;
default:printf("選擇無效!");
}
}while(s!=0);
getch();
}
void menu()
{ clrscr();
printf("\t\t\t****************************\n");
printf("\t\t\t********歡迎您的使用********\n");
printf("\t\t\t******學生學分管理程序******\n");
printf("\t\t\t*** 1-登記學生學分 ***\n");
printf("\t\t\t*** 2-顯示學生學分 ***\n");
printf("\t\t\t*** 3-查詢學生學分 ***\n");
printf("\t\t\t*** 4-修改學生學分 ***\n");
printf("\t\t\t*** 5-刪除學生學分 ***\n");
printf("\t\t\t*** 6-統計學生學分 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t****************************\n");
}
void input()
{ do
{ printf("請輸入學生信息:學號 姓名 班級 基礎課 專業課 選修課 人文課 實驗課\n");
scanf("%s%s%s%d%d%d%d%d",st[n].num,st[n].name,st[n].class,&st[n].jichu,&st[n].zhuanye,&st[n].xuanxiu,&st[n].renwen,&st[n].shiyan);
n++;
printf("是否繼續輸入?(n-退出,任意鍵繼續):");
}while(getche()!='n');
}
void print()
{ int i;
printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
for(i=0;i<n;i++)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}
void menu1()
{ clrscr();
printf("\t\t\t*****************************\n");
printf("\t\t\t***********查詢模塊**********\n");
printf("\t\t\t*** 1-按學號查詢 ***\n");
printf("\t\t\t*** 2-按姓名查詢 ***\n");
printf("\t\t\t*** 3-按班級查詢 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");
}
void query1()
{ char sn[11];
int i;
printf("請輸入要查詢的學號:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].num)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\按任意鍵繼續");
break;
}
else printf("\n對不起!沒有該學號,任意鍵繼續");
getch();
}
void query2()
{ char sn[7];
int i;
printf("請輸入要查詢的姓名:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].name)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\按任意鍵繼續");
break;
}else printf("\n對不起!沒有該姓名,任意鍵繼續");
getch();
}
void query3()
{ char sn[10];
int i;
printf("請輸入要查詢的班級:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].class)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\按任意鍵繼續");
break;
}
else printf("\n對不起!沒有該班,任意鍵繼續");
getch();
}
void query()
{ int s;
do{
menu1();
printf("\n\t\t\t\t 請選擇:");
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:query1();break;
case 2:query2();break;
case 3:query3();break;
default:printf("選擇無效!");
}
}while(s!=0);
getch();
}
void menu2()
{ clrscr();
printf("\t\t\t*****************************\n");
printf("\t\t\t***********修改模塊**********\n");
printf("\t\t\t*** 1-按學號修改 ***\n");
printf("\t\t\t*** 2-按姓名修改 ***\n");
printf("\t\t\t*** 3-按班級修改 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");
}
void modi1()
{ char sn[11];
int i;
printf("請輸入要修改學分學生的學號:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].num)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
{printf("請輸入學生學分信息:學號 姓名 班級 基礎課 專業課 選修課 人文課 實驗課\n");
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);
printf("是否繼續輸入?(n-退出,任意鍵繼續):");
}while(getche()!='n');
break;
}
getch();
}
void modi2()
{ char sn[7];
int i;
printf("請輸入要修改學分學生的姓名:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].name)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
{printf("請輸入學生學分信息:學號 姓名 班級 基礎課 專業課 選修課 人文課 實驗課\n");
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);
printf("是否繼續輸入?(n-退出,任意鍵繼續):");
}while(getche()!='n');
break;
}
getch();
}
void modi3()
{ char sn[10];
int i;
printf("請輸入要修改學分學生的班級:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].class)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
{printf("請輸入學生學分信息:學號 姓名 班級 基礎課 專業課 選修課 人文課 實驗課\n");
scanf("%s%s%s%d%d%d%d%d",st[i].num,st[i].name,st[i].class,&st[i].jichu,&st[i].zhuanye,&st[i].xuanxiu,&st[i].renwen,&st[i].shiyan);
printf("是否繼續輸入?(n-退出,任意鍵繼續):");
} while(getche()!='n');
break;
}
getch();
}
void modi()
{ int s;
do{
menu2();
printf("\n\t\t\t\t 請選擇:");
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:modi1();break;
case 2:modi2();break;
case 3:modi3();break;
default:printf("選擇無效!");
}
}while(s!=0);
getch();
}
void menu3()
{ clrscr();
printf("\t\t\t*****************************\n");
printf("\t\t\t***********刪除模塊**********\n");
printf("\t\t\t*** 1-按學號刪除 ***\n");
printf("\t\t\t*** 2-按姓名刪除 ***\n");
printf("\t\t\t*** 3-按班級刪除 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");
}
void del1()
{ char sn[11];
int i,j;
printf("請輸入要刪除學分學生的學號:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].num)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否刪除(任意鍵確認,n\取消)");
if(getche()!='n');
{if(i!=n-1);
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n--;
printf("\n該記錄已刪除");
getch();
break ;
}
}
else printf("\n對不起!沒有該學號,任意鍵繼續");
}
void del2()
{ char sn[7];
int i,j;
printf("請輸入要刪除學分學生的姓名:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].name)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否刪除(任意鍵確認,n\取消)");
if(getche()!='n');
{if(i!=n-1);
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n--;
printf("\n該記錄已刪除");
getch();
break ;
}
}
else printf("\n對不起!沒有該學號,任意鍵繼續");
}
void del3()
{ char sn[10];
int i,j;
printf("請輸入要刪除學分學生的班級:");
scanf("%s",sn);
for(i=0;i<n;i++)
if(strcmp(sn,st[i].class)==0)
{printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
printf("\n是否刪除(任意鍵確認,n\取消)");
if(getche()!='n');
{if(i!=n-1);
for(j=i;j<n-1;j++)
st[j]=st[j+1];
n--;
printf("\n該記錄已刪除");
getch();
break ;
}
}
else printf("\n對不起!沒有該學號,任意鍵繼續");
}
void del()
{ int s;
do{
menu3();
printf("\n\t\t\t\t 請選擇:");
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:del1();break;
case 2:del2();break;
case 3:del3();break;
default:printf("選擇無效!");
}
}while(s!=0);
getch();
}
void menu4()
{ clrscr();
printf("\t\t\t*****************************\n");
printf("\t\t\t***********統計模塊**********\n");
printf("\t\t\t*** 1- 可升學的學生 ***\n");
printf("\t\t\t*** 2-需補考基礎課的 ***\n");
printf("\t\t\t*** 3-需補考專業課的 ***\n");
printf("\t\t\t*** 4-需補考選修課的 ***\n");
printf("\t\t\t*** 5-需補考人文課的 ***\n");
printf("\t\t\t*** 6-需補考實驗課的 ***\n");
printf("\t\t\t*** 0-退出 ***\n");
printf("\t\t\t*****************************\n");
}
void count1()
{ int i;
printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}
void count2()
{ int i;
printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
for(i=0;i<n;i++)
if(st[i].jichu<60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}void count3()
{ int i;
printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye<60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}
void count4()
{ int i;
printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu<60&st[i].renwen>=60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}
void count5()
{ int i;
printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen<60&st[i].shiyan>=60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}
void count6()
{ int i;
printf("\n序號\t學號\t 姓名\t班級\t基礎課\t專業課\t選修課\t人文課\t實驗課\n");
for(i=0;i<n;i++)
if(st[i].jichu>=60&st[i].zhuanye>=60&st[i].xuanxiu>=60&st[i].renwen>=60&st[i].shiyan<60)
printf("%2d %7s %7s %5s %4d\t%4d\t%4d\t%4d\t%4d\n",i+1,st[i].num,st[i].name,st[i].class,st[i].jichu,st[i].zhuanye,st[i].xuanxiu,st[i].renwen,st[i].shiyan);
getch();
}
void count()
{ int s;
do{
menu4();
printf("\n\t\t\t\t 請選擇:");
scanf("%d",&s);
switch(s)
{ case 0:break;
case 1:count1();break;
case 2:count2();break;
case 3:count3();break;
case 4:count4();break;
case 5:count5();break;
case 6:count6();break;
default:printf("選擇無效!");
}
}while(s!=0);
getch();
}