人妻无码αv中文字幕久久琪琪布|99999国产精品欧美久久久久|国产精品久久久久久久久久久搜索|精品国产香蕉伊思人在线又爽又黄|国语av狠狠色丁香婷婷综合激情|精品老妇人一区二区三区在线视频|99精品国产高清一区二区三区香蕉

軟件開發(fā)流程圖示例關(guān)于班級管理(班級管理系統(tǒng)用例圖)

軟件開發(fā) 3486
今天給各位分享軟件開發(fā)流程圖示例關(guān)于班級管理的知識,其中也會對班級管理系統(tǒng)用例圖進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!本文目錄一覽: 1、軟件開發(fā)流程

今天給各位分享軟件開發(fā)流程圖示例關(guān)于班級管理的知識,其中也會對班級管理系統(tǒng)用例圖進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!

本文目錄一覽:

軟件開發(fā)流程

一個軟件從開始到最后一共需要以下幾個流程:

1、計劃

2、分析

3、設(shè)計

4、編碼

5、測試

6、維護(hù)

1、計劃

對所要解決的問題進(jìn)行總體定義,包括了解用戶的要求及現(xiàn)實環(huán)境,從技術(shù)、經(jīng)濟(jì)和社會因素等3個方面研究并論證本軟件項目的可行性,編寫可行性研究報告,探討解決問題的方案,并對可供使用的資源(如計算機(jī)硬件、系統(tǒng)軟件、人力等)成本,可取得的效益和開發(fā)進(jìn)度作出估計,制訂完成開發(fā)任務(wù)的實施計劃。

2、分析

軟件需求分析就是對開發(fā)什么樣的軟件的一個系統(tǒng)的分析與設(shè)想。它是一個對用戶的需求進(jìn)行去粗取精、去偽存真、正確理解,然后把它用軟件工程開發(fā)語言(形式功能規(guī)約,即需求規(guī)格說明書)表達(dá)出來的過程。本階段的基本任務(wù)是和用戶一起確定要解決的問題,建立軟件的邏輯模型,編寫需求規(guī)格說明書文檔并最終得到用戶的認(rèn)可。需求分析的主要方法有結(jié)構(gòu)化分析方法、數(shù)據(jù)流程圖和數(shù)據(jù)字典等方法。本階段的工作是根據(jù)需求說明書的要求,設(shè)計建立相應(yīng)的軟件系統(tǒng)的體系結(jié)構(gòu),并將整個系統(tǒng)分解成若干個子系統(tǒng)或模塊,定義子系統(tǒng)或模塊間的接口關(guān)系,對各子系統(tǒng)進(jìn)行具體設(shè)計定義,編寫軟件概要設(shè)計和詳細(xì)設(shè)計說明書,數(shù)據(jù)庫或數(shù)據(jù)結(jié)構(gòu)設(shè)計說明書,組裝測試計劃。在任何軟件或系統(tǒng)開發(fā)的初始階段必須先完全掌握用戶需求,以期能將緊隨的系統(tǒng)開發(fā)過程中哪些功能應(yīng)該落實、采取何種規(guī)格以及設(shè)定哪些限制優(yōu)先加以定位。系統(tǒng)工程師最終將據(jù)此完成設(shè)計方案,在此基礎(chǔ)上對隨后的程序開發(fā)、系統(tǒng)功能和性能的描述及限制作出定義。

3、設(shè)計

軟件設(shè)計可以分為概要設(shè)計和詳細(xì)設(shè)計兩個階段。實際上軟件設(shè)計的主要任務(wù)就是將軟件分解成模塊是指能實現(xiàn)某個功能的數(shù)據(jù)和程序說明、可執(zhí)行程序的程序單元??梢允且粋€函數(shù)、過程、子程序、一段帶有程序說明的獨立的程序和數(shù)據(jù),也可以是可組合、可分解和可更換的功能單元。模塊,然后進(jìn)行模塊設(shè)計。概要設(shè)計就是結(jié)構(gòu)設(shè)計,其主要目標(biāo)就是給出軟件的模塊結(jié)構(gòu),用軟件結(jié)構(gòu)圖表示。詳細(xì)設(shè)計的首要任務(wù)就是設(shè)計模塊的程序流程、算法和數(shù)據(jù)結(jié)構(gòu),次要任務(wù)就是設(shè)計數(shù)據(jù)庫,常用方法還是結(jié)構(gòu)化程序設(shè)計方法。

4、編碼

軟件編碼是指把軟件設(shè)計轉(zhuǎn)換成計算機(jī)可以接受的程序,即寫成以某一程序設(shè)計語言表示的“源程序清單”。充分了解軟件開發(fā)語言、工具的特性和編程風(fēng)格,有助于開發(fā)工具的選擇以及保證軟件產(chǎn)品的開發(fā)質(zhì)量。

當(dāng)前軟件開發(fā)中除在專用場合,已經(jīng)很少使用二十世紀(jì)80年代的高級語言了,取而代之的是面向?qū)ο蟮拈_發(fā)語言。而且面向?qū)ο蟮拈_發(fā)語言和開發(fā)環(huán)境大都合為一體,大大提高了開發(fā)的速度。

5、測試

軟件測試的目的是以較小的代價發(fā)現(xiàn)盡可能多的錯誤。要實現(xiàn)這個目標(biāo)的關(guān)鍵在于設(shè)計一套出色的測試用例(測試數(shù)據(jù)與功能和預(yù)期的輸出結(jié)果組成了測試用例)。如何才能設(shè)計出一套出色的測試用例,關(guān)鍵在于理解測試方法。不同的測試方法有不同的測試用例設(shè)計方法。兩種常用的測試方法是白盒法測試對象是源程序,依據(jù)的是程序內(nèi)部的的邏輯結(jié)構(gòu)來發(fā)現(xiàn)軟件的編程錯誤、結(jié)構(gòu)錯誤和數(shù)據(jù)錯誤。結(jié)構(gòu)錯誤包括邏輯、數(shù)據(jù)流、初始化等錯誤。用例設(shè)計的關(guān)鍵是以較少的用例覆蓋盡可能多的內(nèi)部程序邏輯結(jié)果。白盒法和黑盒法依據(jù)的是軟件的功能或軟件行為描述,發(fā)現(xiàn)軟件的接口、功能和結(jié)構(gòu)錯誤。其中接口錯誤包括內(nèi)部/外部接口、資源管理、集成化以及系統(tǒng)錯誤。黑盒法用例設(shè)計的關(guān)鍵同樣也是以較少的用例覆蓋模塊輸出和輸入接口。

6、維護(hù)

維護(hù)是指在已完成對軟件的研制(分析、設(shè)計、編碼和測試)工作并交付使用以后,對軟件產(chǎn)品所進(jìn)行的一些軟件工程的活動。即根據(jù)軟件運行的情況,對軟件進(jìn)行適當(dāng)修改,以適應(yīng)新的要求,以及糾正運行中發(fā)現(xiàn)的錯誤。編寫軟件問題報告、軟件修改報告。

一個中等規(guī)模的軟件,如果研制階段需要一年至二年的時間,在它投入使用以后,其運行或工作時間可能持續(xù)五年至十年。那么它的維護(hù)階段也是運行的這五年至十年期間。在這段時間,人們幾乎需要著手解決研制階段所遇到的各種問題,同時還要解決某些維護(hù)工作本身特有的問題。做好軟件維護(hù)工作,不僅能排除障礙,使軟件能正常工作,而且還可以使它擴(kuò)展功能,提高性能,為用戶帶來明顯的經(jīng)濟(jì)效益。然而遺憾的是,對軟件維護(hù)工作的重視往往遠(yuǎn)不如對軟件研制工作的重視。而事實上,和軟件研制工作相比,軟件維護(hù)的工作量和成本都要大得多。

在實際開發(fā)過程中,軟件開發(fā)并不是從第一步進(jìn)行到最后一步,而是在任何階段,在進(jìn)入下一階段前一般都有一步或幾步的回溯。在測試過程中的問題可能要求修改設(shè)計,用戶可能會提出一些需要來修改需求說明書等。

C語言程序設(shè)計 班級學(xué)生成績管理系統(tǒng)

設(shè)計課題一:班級成績管理系統(tǒng)

一、 問題描述:

對一個有N個學(xué)生的班級,每個學(xué)生有M門課程。該系統(tǒng)實現(xiàn)對班級成績的錄入、顯示、修改、排序、保存等操作的管理。

二、功能要求:

1、本系統(tǒng)采用一個結(jié)構(gòu)體數(shù)組,每個數(shù)據(jù)的結(jié)構(gòu)應(yīng)當(dāng)包括:學(xué)號、姓名、M門課程名稱。

2、本系統(tǒng)顯示這樣的菜單:

請選擇系統(tǒng)功能項:

a、 成績錄入

b、 成績顯示

c、 成績保存

d、 成績排序

e、 成績修改(要求先輸入密碼)

f、 成績統(tǒng)計

(1) 顯示每門課程成績最高的學(xué)生的基本信息

(2) 顯示每門課程的平均成績

(3) 顯示超過某門課程平均成績的學(xué)生人數(shù)

g、 退出系統(tǒng)

3、執(zhí)行一個具體的功能之后,程序?qū)⒅匦嘛@示菜單。

4、將學(xué)生成績保存到文件中。

三、算法提示:

1、數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體類型數(shù)組。

2、數(shù)據(jù)庫結(jié)構(gòu):下表構(gòu)成該系統(tǒng)的基本數(shù)據(jù)庫。

姓名 學(xué)號 課程名稱1 課程名稱2 ●●●●●●

char Char float float

四、測試數(shù)據(jù):

學(xué)生人數(shù)N=10

課程門數(shù)M=4

課程名:數(shù)學(xué)、語文、英語、政治

五、其它

對該系統(tǒng)有興趣的同學(xué)可以在實現(xiàn)上述基本功能后,完善系統(tǒng)的其它功能。

問題補(bǔ)充:

今天誰能給我答案?。。。。。。。〖奔保。。。。。?!

提問者: 342123465 - 一級

最佳答案

C語言課程設(shè)計報告—班級成績管理系統(tǒng)

需要分析:

學(xué)生成績管理系統(tǒng)有13種功能。把這13個功能做成13個子函數(shù)。在主函當(dāng)數(shù)中設(shè)計一個菜單對這13個子數(shù)進(jìn)行管理。來實現(xiàn)對整個系統(tǒng)的操作。

根據(jù)課題的要求。每一個學(xué)生的包括姓名(char)、學(xué)號(char)、M門課程的成績(float).再加上系統(tǒng)功能上的要求每一學(xué)生的信息還要總分和名次等。所以自然的想到要用結(jié)構(gòu)體來定義每一個學(xué)生的信息結(jié)構(gòu)。然后用鏈表把它們組成一個有序的整體。用對鏈表的操作來實現(xiàn)對所有學(xué)生信息的統(tǒng)一管理(成績顯示、成績排序、成績修改等)。最后為了以后按照處理后的順序保存到文件中。

. 各函數(shù)的功能:

概要設(shè)計:

程序的模塊組成:

主 函 數(shù): int main()

新建函數(shù):STUDENT *init()

輸入函數(shù) :STUDENT *create()

顯示函數(shù): void print(STUDENT *head)

刪除函數(shù): STUDENT *delete(STUDENT *head)

按名字尋找函數(shù): void lookup(STUDENT *head)

保存函數(shù): void save(STUDENT *head)

按總分排序函數(shù): STUDENT *sort(STUDENT *head)

計算總分和均分函數(shù): void computer(STUDENT *h)

修改函數(shù): STUDENT *Modify(STUDENT *head,STUDENT *new)

按學(xué)號排序函數(shù): STUDENT *index(STUDENT *h)

菜單函數(shù):int menu_select()

各個函數(shù)的主要功能:

輸入函數(shù): 隨時輸入數(shù)據(jù)。

菜單函數(shù):顯示系統(tǒng)主菜單。

顯示函數(shù): 顯示所有學(xué)生的信息。

尋找函數(shù): 方便學(xué)生查找自己的成績。

刪除函數(shù): 刪除某學(xué)生的信息。

排序函數(shù): 按總成績排序。

按學(xué)號排序函數(shù): 按學(xué)號排序。

插入函數(shù): 可以插入新的信息。

保存函數(shù): 保存好學(xué)生成績,以免丟失。

統(tǒng)計函數(shù):

l 顯示每門課程成績最高的學(xué)生的基本信息。

l 顯示每門課程的平均成績。

l 顯示超過某門課程平均成績的學(xué)生人數(shù)。

課題的功能模塊的劃分:

開始

菜單界面

功能選擇

初始化函數(shù)

輸入學(xué)生信息

刪除學(xué)生信息

顯示學(xué)生信息

查找學(xué)生信息

按成績排序

保存到文件

從文件讀數(shù)據(jù)

插入學(xué)生成績

分類合計

退出系統(tǒng)

結(jié)束

詳細(xì)設(shè)計: 整個系統(tǒng)除了主函數(shù)外,另外還有14個函數(shù),實現(xiàn)八大功能:輸入功能、顯示功能、查找功能、排序功能、插入功能、保存功能、讀取功能。各個函數(shù)的詳細(xì)設(shè)計說明分別如下:

主函數(shù) main()

利用無限次循環(huán)for(;;)和swithch()實現(xiàn)各函數(shù)的調(diào)用,系統(tǒng)根據(jù)輸入的數(shù)字選項來調(diào)用相應(yīng)的函數(shù)。

菜單選擇函數(shù) int menu_select()

這是一個無參函數(shù),主要實現(xiàn)“功能選擇”的界面,在這個界面里有顯示系統(tǒng)的九大功能,根據(jù)每個功能前面的序號進(jìn)行選擇。等執(zhí)行完每一個函數(shù)功能后,返回菜單。

代碼設(shè)計: 初始化函數(shù) STUDENT *init()

這是一個無參函數(shù),里面只有兩個語句,它的作用是使鏈表初始化,使head的值為NULL和一個清屏語句。比如:沒有這個函數(shù)的話,在你沒有輸入任何數(shù)據(jù)的情況下,去執(zhí)行顯示功能的時候會顯示一些亂碼!

輸入記錄函數(shù) STUDENT *create() 這是一個無參函數(shù),用來執(zhí)行學(xué)生成績記錄的輸入,當(dāng)學(xué)生為@時停止輸入,函數(shù)結(jié)束后,帶回一個鏈表頭的指針指向一下個學(xué)生的信息插在表頭。

N-S流程圖如下:

head=NULL無條件循環(huán)

指針p指向新開辟的單元

指針p是否為空

是 否

輸入學(xué)號p-num

輸出 p-num是否為@

內(nèi)存 是 否

溢出 輸入姓名p-name

停止 for(i=0;i3;i++)

輸入 輸入成績

返回 p-sum=s;

菜單 p-average=(float)s/3;

顯示記錄函數(shù) void print(STUDENT *head)

這是一個不返回值的有參函數(shù),形參為“鏈表頭的指針”,負(fù)責(zé)對全部學(xué)生成績記錄的輸出,不足之處就是不能對學(xué)生成績進(jìn)行分頁顯示。

算法:先將p結(jié)點的指針指向第一個結(jié)點,將p結(jié)點(即第一個結(jié)點)的數(shù)據(jù)輸出。然后再將p結(jié)點的指針指向p指針的的指針(即下一結(jié)點),將p結(jié)點(即第一結(jié)點)的數(shù)據(jù)輸出。重復(fù)執(zhí)行此步聚直到p指針指向NULL為止。

N-S流程圖如下:

p=head,使指向第一個結(jié)點

輸出p所指向的結(jié)點

p指向一下個結(jié)點

當(dāng)p指的不是表尾

程序調(diào)試:

由于本課題中的許多知識點都沒有學(xué)過都要靠自己到課外的資料中去查找。在用的時候難免出現(xiàn)這樣那樣的錯誤。如開始設(shè)計出來的菜單不是預(yù)想的那樣,而是總個窗中出現(xiàn)混亂。解決的這個問題的辦法是調(diào)整。最后還是老師幫我?guī)臀覀冋业搅藛栴}的所在——for 循環(huán)的次超過了鏈表中結(jié)點的數(shù)量。再就是自定義函數(shù)時由于課本的概念不清楚,多寫了空格鍵,以至函數(shù)調(diào)用不出來。又如:在設(shè)計修改學(xué)生信息時的密密碼時。當(dāng)用戶發(fā)現(xiàn)輸入密碼錯誤按了退格鍵后,因為“*”并沒有消去。導(dǎo)致用戶再次按退格鍵,又出現(xiàn)前面的情況。最終導(dǎo)致輸入密碼錯誤。所以用了兩次退格鍵:

在對鏈表操作時,要特別鏈表指針的移動(p=p-next)和鏈表尾的判斷 (p= =NULL)。沒有指針的移動,就很容易出現(xiàn)死循環(huán)。而在運行過程中不能控制。所以你就會認(rèn)為是死機(jī)。如果沒有鏈表尾的判斷。就會在運行過程出現(xiàn)想不到的錯誤。如:在顯示鏈表信息時,后面就會出現(xiàn)亂碼。

一個系統(tǒng)的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎么用你設(shè)計的這個系統(tǒng)。在設(shè)計的調(diào)試過程中也無法順利的完成調(diào)試工作。有了一個清晰簡單的菜單和一些提示信息這后,調(diào)試過程完成的非常順利。

予我耐心解答的老師和同學(xué),是他們?yōu)槲倚〕绦虻某晒ζ鸬搅岁P(guān)鍵性的作用,那么多個日夜,如此多的困難,同學(xué)們勤懇塌實,從開始到結(jié)束,沒有顯出一點倦意,始終熱情高漲,我感謝這種氛圍,感謝學(xué)校提供的良好條件。

回顧起此次課程設(shè)計,至今我仍感慨頗多,的確,從拿到題目到完成整個編程,從理論到實踐,在整整半個學(xué)期的日子里,可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體……通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。

本次課程設(shè)計結(jié)束了,對于我的影響很大。我通過這次實踐學(xué)到了許多知識。學(xué)到了設(shè)計一個簡單的系統(tǒng)。要注意哪些方面。也使我知道自己哪些方面做得還不夠。

但我出總結(jié)出了一點點的經(jīng)驗如下:

1、要對系統(tǒng)的功能和要求做出詳細(xì)的分析,并合理分解任務(wù)。

2、把分解出來的子任務(wù),做給一個相對獨立的模塊。

3、在設(shè)計一個模塊之前,要簡單構(gòu)想一下總界面的顯視情況。

4、針對構(gòu)想出來的界面進(jìn)行程序的編寫。

最后,感謝老師您對我的指導(dǎo)和從百忙中抽空看我的設(shè)計,謝謝!

附件:

源程序:

#include "stdio.h" /*I/O函數(shù)*/

#include "stdlib.h" /*其它說明*/

#include "string.h" /*字符串函數(shù)*/

#include "conio.h" /*屏幕操作函數(shù)*/

#include "mem.h" /*內(nèi)存操作函數(shù)*/

#include "ctype.h" /*字符操作函數(shù)*/

#include "alloc.h" /*動態(tài)地址分配函數(shù)*/

#include "dos.h"

#define N 4 /*定義常數(shù)*/

typedef struct z1 /*定義數(shù)據(jù)結(jié)構(gòu)*/

{

char no[12];

char name[20];

int score[N];

float sum;

float average;

int order;

struct z1 *next;

}STUDENT;

/*以下是函數(shù)原型*/

STUDENT *init(); /*初始化函數(shù)*/

STUDENT *create(); /*創(chuàng)建鏈表*/

STUDENT *delete(STUDENT *h); /*刪除記錄*/

void print(STUDENT *h); /* 顯示所有記錄*/

void lookup(STUDENT *h); /*查找*/

void save(STUDENT *h); /*保存*/

STUDENT *load(); /*讀入記錄*/

void computer(STUDENT *h); /*計算總分和均分*/

STUDENT *Modify(STUDENT *h); /*修改記錄*/

void append(); /*追加記錄*/

STUDENT *sort(STUDENT *h); /*按總分排序*/

STUDENT *index(STUDENT *h); /*按學(xué)號排序*/

int menu_select(); /*菜單函數(shù)*/

/******主函數(shù)開始*******/

main()

{

int i;

STUDENT *head; /*鏈表定義頭指針*/

printf("\n\n\n\n\n\n\n\n\n");

printf(" * * ******* * ***** ***** * * ******* \n");

printf(" * * * * * * * ** * * * \n");

printf(" * * * * ******* * * * * * *** * ******* \n" );

printf(" * * * * * * * * * * * * * \n");

printf(" * * ******* ******* ***** * *** * * * ******* \n");

printf("\n");

printf("\n");

printf("\n");

sleep(2);

head=init(); /*初始化鏈表*/

clrscr(); /*清屏*/

for(;;) /*無限循環(huán)*/

{

switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的條件*/

{ /*值不同,執(zhí)行的函數(shù)不同,break 不能省略*/

case 0:head=init();break; /*執(zhí)行初始化*/

case 1:head=create();break; /*創(chuàng)建鏈表*/

case 2:print(head);break; /*顯示全部記錄*/

case 3:head=delete(head);break; /*刪除記錄*/

case 4:lookup(head);break; /*按名字查找記錄*/

case 5:save(head);break; /*保存文件*/

case 6:head=load(); break; /*讀文件*/

case 7:computer(head);break; /*計算總分和均分*/

case 8:head=Modify(head); break; /*修改記錄,一般會插在表尾*/

case 9:head=sort(head);break; /*按部分排序*/

case 10:append();break; /*追加記錄*/

case 11:head=index(head);break; /*按學(xué)號排序*/

case 12: exit(0); /*如菜單返回值為12程序結(jié)束*/

}

}

}

/*菜單函數(shù),返回值為整數(shù)*/

menu_select()

{

char *menu[]={"***************MENU***************", /*定義菜單字符串?dāng)?shù)組*/

" 00. init list", /*初始化*/

" 01. Enter list", /*輸入記錄*/

" 02. print list ", /*顯示單鏈表中所有記錄*/

" 03. Delete a record from list", /*從表中刪除記錄*/

" 04. Search record on name", /*按照姓名查找記錄*/

" 05. Save the file", /*將單鏈表中記錄保存到文件中*/

" 06. Load the file", /*從文件中讀入記錄*/

" 07. compute the score", /*計算所有學(xué)生的總分和均分*/

" 08. Modify an information ", /*修改某學(xué)號的信息*/

" 09. sort to make new file", /*排序*/

" 10. append record to file", /*追加記錄到文件中*/

" 11. index on nomber", /*按學(xué)號排序*/

" 12. Quit"}; /*退出*/

char s[3]; /*以字符形式保存選擇號*/

int c,i; /*定義整形變量*/

gotoxy(1,1); /*移動光標(biāo)*/

textcolor(YELLOW); /*設(shè)置文本顯示顏色為黃色*/

textbackground(BLUE); /*設(shè)置背景顏色為藍(lán)色*/

gotoxy(10,2); /*移動光標(biāo)*/

putch(0xc9); /*輸出左上角邊框┏*/

for(i=1;i44;i++)

putch(0xcd); /*輸出上邊框水平線*/

putch(0xbb); /*輸出右上角邊框 ┓*/

for(i=3;i20;i++)

{

gotoxy(10,i);putch(0xba); /*輸出左垂直線*/

gotoxy(54,i);putch(0xba); /*輸出右垂直線*/

}

gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/

for(i=1;i44;i++)

putch(0xcd); /*輸出下邊框水平線*/

putch(0xbc); /*輸出右下角邊框┛*/

window(11,3,53,19); /* 制作顯示菜單的窗口,大小根據(jù)菜單條數(shù)設(shè)計*/

clrscr(); /*清屏*/

for(i=0;i16;i++) /*輸出主菜單數(shù)組*/

{

gotoxy(10,i+1);

cprintf("%s",menu[i]);

}

textbackground(BLACK); /*設(shè)置背景顏色為黑色*/

window(1,1,80,25); /*恢復(fù)原窗口大小*/

gotoxy(10,21); /*移動光標(biāo)*/

do{printf("\n make by wenwei");

printf("\n Enter you choice(0~13):"); /*在菜單窗口外顯示提示信息*/

scanf("%s",s); /*輸入選擇項*/

c=atoi(s); /*將輸入的字符串轉(zhuǎn)化為整形數(shù)*/

}while(c0||c14); /*選擇項不在0~14之間重輸*/

return c; /*返回選擇項,主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/

}

STUDENT *init()

{ clrscr();

return NULL;

}

/*創(chuàng)建鏈表*/

STUDENT *create()

{

int i; int s;

STUDENT *h=NULL,*info; /* STUDENT指向結(jié)構(gòu)體的指針*/

clrscr();

for(;;)

{

info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/

if(!info) /*如果指針info為空*/

{

printf("\nout of memory"); /*輸出內(nèi)存溢出*/

return NULL; /*返回空指針*/

}

inputs("enter no:",info-no,11); /*輸入學(xué)號并校驗*/

if(info-no[0]=='@') { clrscr();break; } /*如果學(xué)號首字符為@則結(jié)束輸入,清屏后返回*/

inputs("enter name:",info-name,15); /*輸入姓名,并進(jìn)行校驗*/

printf("please input %d score \n",N); /*提示開始輸入成績*/

s=0; /*計算每個學(xué)生的總分,初值為0*/

for(i=0;iN;i++) /*N門課程循環(huán)N次*/

{

do{

printf("score%d:",i+1); /*提示輸入第幾門課程*/

scanf("%d",info-score[i]); /*輸入成績*/

if(info-score[i]100||info-score[i]0) /*確保成績在0~100之間*/

printf("bad data,repeat input\n"); /*出錯提示信息*/

}while(info-score[i]100||info-score[i]0);

s=s+info-score[i]; /*累加各門課程成績*/

}

info-sum=s; /*將總分保存*/

info-average=(float)s/N; /*求出平均值*/

info-order=0; /*未排序前此值為0*/

info-next=h; /*將頭結(jié)點做為新輸入結(jié)點的后繼結(jié)點*/

h=info; /*新輸入結(jié)點為新的頭結(jié)點*/

clrscr();

}

return(h); /*返回頭指針*/

}

/*輸入字符串,并進(jìn)行長度驗證*/

inputs(char *prompt, char *s, int count)

{

char p[255];

do{

printf(prompt); /*顯示提示信息*/

scanf("%s",p); /*輸入字符串*/

if(strlen(p)count)printf("\n too long! \n"); /*進(jìn)行長度校驗,超過count值重輸入*/

}while(strlen(p)count);

strcpy(s,p); /*將輸入的字符串拷貝到字符串s中*/

}

/*輸出鏈表中結(jié)點信息*/

void print(STUDENT *h)

{

int i=0; /* 統(tǒng)計記錄條數(shù)*/

STUDENT *p; /*移動指針*/

clrscr(); /*清屏*/

p=h; /*初值為頭指針*/

printf("\n\n\n*********************************STUDENT************************************\n");

printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");

while(p!=NULL) /*只要p不是尾結(jié)點,就輸出記錄*/

{

i++;

printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p-no,p-name,p-score[0],p-score[1],p-score[2],p-score[3],p-sum,p-average,p-order);

p=p-next;

}

printf("***********************************end**************************************\n");

getch(); /*輸入任一鍵返回主菜單*/

clrscr(); /*清屏*/

}

/*刪除記錄*/

STUDENT *delete(STUDENT *h)

{

STUDENT *p,*q; /*p為查找到要刪除的結(jié)點指針,q為其前驅(qū)指針*/

char s[12]; /*存放學(xué)號*/

char *pass="wenwei28";

char a[20],b=NULL;

int i=0;

clrscr();

printf("Input your password:");

while((i20)(b!='\r'))

{ b=getch(); /*無回顯輸入*/

if(b==8)

{ if(i0)

{a[--i]=NULL;

putchar(8); /*退格鍵*/

putchar(' '); /*以空格代替*/

putchar(8);

}

else putchar(7); /*沒有任何字符的退格,響鈴警告*/

}

else if(b!='\r')

{ a[i++]=b; /*只要不是退格和回車就接受*/

putchar('*');

}

else

{a[i]=NULL; break; /*密碼輸入完了,記得加個NULL到后面*/

}

}

if(strcmp(a,pass)!=0)

{clrscr();

printf("Password is mistake Tow seconds to return!");

sleep(2);clrscr();return h;

}

else {printf("Password is OK! Welcome to come!"); sleep(3);

}

clrscr(); /*清屏*/

printf("please deleted no\n"); /*顯示提示信息*/

scanf("%s",s); /*輸入要刪除記錄的學(xué)號*/

q=p=h; /*給q和p賦初值頭指針*/

while(strcmp(p-no,s)p!=NULL) /*當(dāng)記錄的學(xué)號不是要找的,或指針不為空時*/

{

q=p; /*將p指針值賦給q作為p的前驅(qū)指針*/

p=p-next; /*將p指針指向下一條記錄*/

}

if(p==NULL) /*如果p為空,說明鏈表中沒有該結(jié)點*/

{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}

else /*p不為空,顯示找到的記錄信息*/

{

printf("*********************************have found********************************\n");

printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");

printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p-no,

p-name,p-score[0],p-score[1],p-score[ q=p; /*保存當(dāng)前結(jié)點的指針,作為下一結(jié)點的前驅(qū)*/

p=p-next; /*指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/

}

q-next=NULL; /*最后一個結(jié)點的后繼指針為空*/

fclose(fp); /*關(guān)閉文件*/

printf("---You have success read data from file!!!---\n");

getch(); /*按任意鍵返回主菜單*/

clrscr();

return h; /*返回頭指針*/

}

/*成績統(tǒng)計*/

void computer(STUDENT *h)

{

STUDENT *p,*t,*q; /*定義移動指針*/

float saverage[N]={0}; /*均分初值為0*/

int i;

clrscr();

for (i=0;iN;i++)

{ int n=0,j=0; /*保存記錄條數(shù)初值為0*/

long s=0; /*總分初值為0*/

p=h; /*從頭指針開始*/

while(p!=NULL) /*當(dāng)p不為空時處理*/

{

s+=p-score[i]; /*累加總分*/

j++; /*統(tǒng)計記錄條數(shù)*/

p=p-next; /*指針后移*/

h; /*返回頭指針

}

關(guān)于班級管理的流程圖

(1)任命班長

(2)授予班長挑選副班長以及其他班委員的權(quán)力,

(3)授予班委任命、管理小組長的權(quán)力

(4)授予小組長管理組員的權(quán)力

結(jié)束!

C語言程序設(shè)計:班級電話本管理程序

/* 電話簿程序 */

/******頭文件(.h)***********/

#include "stdio.h" /*I/O函數(shù)*/

#include "stdlib.h" /*標(biāo)準(zhǔn)庫函數(shù)*/

#include "string.h"/*字符串函數(shù)*/

#include "ctype.h" /*字符操作函數(shù)*/

#define M 50 /*定義常數(shù)表示記錄數(shù)*/

struct unit/*定義數(shù)據(jù)結(jié)構(gòu)*/

{

char name[20]; /*姓名*/

char units[30]; /*單位*/

char tele[10]; /*電話*/

};

typedef struct unit ADDRESS;

/******以下是函數(shù)原型*******/

int enter(ADDRESS t[]); /*輸入記錄*/

void list(ADDRESS t[],int n); /*顯示記錄*/

void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/

int delete(ADDRESS t[],int n); /*刪除記錄*/

int add(ADDRESS t[],int n); /*插入記錄*/

void save(ADDRESS t[],int n); /*記錄保存為文件*/

int load(ADDRESS t[]); /*從文件中讀記錄*/

void display(ADDRESS t[]); /*按序號查找顯示記錄*/

void sort(ADDRESS t[],int n); /*按姓名排序*/

void qseek(ADDRESS t[],int n); /*快速查找記錄*/

void copy(); /*文件復(fù)制*/

void print(ADDRESS temp); /*顯示單條記錄*/

int find(ADDRESS t[],int n,char *s) ; /*查找函數(shù)*/

int menu_select(); /*主菜單函數(shù)*/

/******主函數(shù)開始*******/

main()

{

int i;

ADDRESS adr[M]; /*定義結(jié)構(gòu)體數(shù)組*/

int length; /*保存記錄長度*/

clrscr(); /*清屏*/

for(;;)/*無限循環(huán)*/

{

switch(menu_select()) /*調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的條件*/

{

case 0:length=enter(adr);break;/*輸入記錄*/

case 1:list(adr,length);break; /*顯示全部記錄*/

case 2:search(adr,length);break; /*查找記錄*/

case 3:length=delete(adr,length);break; /*刪除記錄*/

case 4:length=add(adr,length); break; /*插入記錄*/

case 5:save(adr,length);break; /*保存文件*/

case 6:length=load(adr); break; /*讀文件*/

case 7:display(adr);break; /*按序號顯示記錄*/

case 8:sort(adr,length);break; /*按姓名排序*/

case 9:qseek(adr,length);break; /*快速查找記錄*/

case 10:copy();break; /*復(fù)制文件*/

case 11:exit(0); /*如返回值為11則程序結(jié)束*/

}

}

}

/*菜單函數(shù),函數(shù)返回值為整數(shù),代表所選的菜單項*/

menu_select()

{

char s[80];

int c;

gotoxy(1,25);/*將光標(biāo)定為在第25行,第1列*/

printf("press any key enter menu......\n");/*提示壓任意鍵繼續(xù)*/

getch(); /*讀入任意字符*/

clrscr(); /*清屏*/

gotoxy(1,1);

printf("********************MENU*********************\n\n");

printf(" 0. Enter record\n");

printf(" 1. List the file\n");

printf(" 2. Search record on name\n");

printf(" 3. Delete a record\n");

printf(" 4. add record \n");

printf(" 5. Save the file\n");

printf(" 6. Load the file\n");

printf(" 7. display record on order\n");

printf(" 8. sort to make new file\n");

printf(" 9. Quick seek record\n");

printf(" 10. copy the file to new file\n");

printf(" 11. Quit\n");

printf("***********************************************\n");

do{

printf("\n Enter you choice(0~11):"); /*提示輸入選項*/

scanf("%s",s); /*輸入選擇項*/

c=atoi(s); /*將輸入的字符串轉(zhuǎn)化為整型數(shù)*/

}while(c0||c11); /*選擇項不在0~11之間重輸*/

return c; /*返回選擇項,主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/

}

/***輸入記錄,形參為結(jié)構(gòu)體數(shù)組,函數(shù)值返回類型為整型表示記錄長度*/

int enter(ADDRESS t[])

{

int i,n;

char *s;

clrscr(); /*清屏*/

printf("\nplease input num \n"); /*提示信息*/

scanf("%d",n); /*輸入記錄數(shù)*/

printf("please input record \n"); /*提示輸入記錄*/

printf("name unit telephone\n");

printf("------------------------------------------------\n");

for(i=0;in;i++)

{

scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*輸入記錄*/

printf("----------------------------------------------\n");

}

return n; /*返回記錄條數(shù)*/

}

/*顯示記錄,參數(shù)為記錄數(shù)組和記錄條數(shù)*/

void list(ADDRESS t[],int n)

{

int i;

clrscr();

printf("\n\n*******************ADDRESS******************\n");

printf("name unit telephone\n");

printf("------------------------------------------------\n");

for(i=0;in;i++)

printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);

if((i+1)%10==0) /*判斷輸出是否達(dá)到10條記錄*/

{

printf("Press any key continue...\n"); /*提示信息*/

getch(); /*壓任意鍵繼續(xù)*/

}

printf("************************end*******************\n");

}

/*查找記錄*/

void search(ADDRESS t[],int n)

{

char s[20]; /*保存待查找姓名字符串*/

int i; /*保存查找到結(jié)點的序號*/

clrscr(); /*清屏*/

printf("please search name\n");

scanf("%s",s); /*輸入待查找姓名*/

i=find(t,n,s); /*調(diào)用find函數(shù),得到一個整數(shù)*/

if(in-1) /*如果整數(shù)i值大于n-1,說明沒找到*/

printf("not found\n");

else

print(t[i]); /*找到,調(diào)用顯示函數(shù)顯示記錄*/

}

/*顯示指定的一條記錄*/

void print(ADDRESS temp)

{

clrscr();

printf("\n\n********************************************\n");

printf("name unit telephone\n");

printf("------------------------------------------------\n");

printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);

printf("**********************end***********************\n");

}

/*查找函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)以及姓名s */

int find(ADDRESS t[],int n,char *s)

{

int i;

for(i=0;in;i++)/*從第一條記錄開始,直到最后一條*/

{

if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/

return i; /*相等,則返回該記錄的下標(biāo)號,程序提前結(jié)結(jié)束*/

}

return i; /*返回i值*/

}

/*刪除函數(shù),參數(shù)為記錄數(shù)組和記錄條數(shù)*/

int delete(ADDRESS t[],int n)

{

char s[20]; /*要刪除記錄的姓名*/

int ch=0;

int i,j;

printf("please deleted name\n"); /*提示信息*/

scanf("%s",s);/*輸入姓名*/

i=find(t,n,s); /*調(diào)用find函數(shù)*/

if(in-1) /*如果in-1超過了數(shù)組的長度*/

printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/

else

{

print(t[i]); /*調(diào)用輸出函數(shù)顯示該條記錄信息*/

printf("Are you sure delete it(1/0)\n"); /*確認(rèn)是否要刪除*/

scanf("%d",ch); /*輸入一個整數(shù)0或1*/

if(ch==1) /*如果確認(rèn)刪除整數(shù)為1*/

{

for(j=i+1;jn;j++) /*刪除該記錄,實際后續(xù)記錄前移*/

{

strcpy(t[j-1].name,t[j].name); /*將后一條記錄的姓名拷貝到前一條*/

strcpy(t[j-1].units,t[j].units); /*將后一條記錄的單位拷貝到前一條*/

strcpy(t[j-1].tele,t[j].tele); /*將后一條記錄的電話拷貝到前一條*/

}

n--; /*記錄數(shù)減1*/

}

}

return n; /*返回記錄數(shù)*/

}

/*插入記錄函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

int add(ADDRESS t[],int n)/*插入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

{

ADDRESS temp; /*新插入記錄信息*/

int i,j;

char s[20]; /*確定插入在哪個記錄之前*/

printf("please input record\n");

printf("************************************************\n");

printf("name unit telephone\n");

printf("--------------------------------------------------\n");

scanf("%s%s%s",temp.name,temp.units,temp.tele); /*輸入插入信息*/

printf("------------------------------------------------\n");

printf("please input locate name \n");

scanf("%s",s); /*輸入插入位置的姓名*/

i=find(t,n,s); /*調(diào)用find,確定插入位置*/

for(j=n-1;j=i;j--) /*從最后一個結(jié)點開始向后移動一條*/

{

strcpy(t[j+1].name,t[j].name); /*當(dāng)前記錄的姓名拷貝到后一條*/

strcpy(t[j+1].units,t[j].units); /*當(dāng)前記錄的單位拷貝到后一條*/

strcpy(t[j+1].tele,t[j].tele); /*當(dāng)前記錄的電話拷貝到后一條*/

}

strcpy(t[i].name,temp.name); /*將新插入記錄的姓名拷貝到第i個位置*/

strcpy(t[i].units,temp.units); /*將新插入記錄的單位拷貝到第i個位置*/

strcpy(t[i].tele,temp.tele); /*將新插入記錄的電話拷貝到第i個位置*/

n++; /*記錄數(shù)加1*/

return n; /*返回記錄數(shù)*/

}

/*保存函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

void save(ADDRESS t[],int n)

{

int i;

FILE *fp; /*指向文件的指針*/

if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,并判斷打開是否正常*/

{

printf("can not open file\n");/*沒打開*/

exit(1); /*退出*/

}

printf("\nSaving file\n"); /*輸出提示信息*/

fprintf(fp,"%d",n); /*將記錄數(shù)寫入文件*/

fprintf(fp,"\r\n"); /*將換行符號寫入文件*/

for(i=0;in;i++)

{

fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式寫入記錄*/

fprintf(fp,"\r\n"); /*將換行符號寫入文件*/

}

fclose(fp);/*關(guān)閉文件*/

printf("****save success***\n"); /*顯示保存成功*/

}

/*讀入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組*/

int load(ADDRESS t[])

{

int i,n;

FILE *fp; /*指向文件的指針*/

if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/

{

printf("can not open file\n"); /*不能打開*/

exit(1); /*退出*/

}

fscanf(fp,"%d",n); /*讀入記錄數(shù)*/

for(i=0;in;i++)

fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式讀入記錄*/

fclose(fp); /*關(guān)閉文件*/

printf("You have success read data from file!!!\n"); /*顯示保存成功*/

return n; /*返回記錄數(shù)*/

}

/*按序號顯示記錄函數(shù)*/

void display(ADDRESS t[])

{

int id,n;

FILE *fp; /*指向文件的指針*/

if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/

{

printf("can not open file\n"); /*不能打開文件*/

exit(1); /*退出*/

}

printf("Enter order number...\n"); /*顯示信息*/

scanf("%d",id); /*輸入序號*/

fscanf(fp,"%d",n); /*從文件讀入記錄數(shù)*/

if(id=0idn) /*判斷序號是否在記錄范圍內(nèi)*/

{

fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動文件指針到該記錄位置*/

print(t[id]); /*調(diào)用輸出函數(shù)顯示該記錄*/

printf("\r\n");

}

else

printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/

fclose(fp); /*關(guān)閉文件*/

}

/*排序函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

void sort(ADDRESS t[],int n)

{

int i,j,flag;

ADDRESS temp; /*臨時變量做交換數(shù)據(jù)用*/

for(i=0;in;i++)

{

flag=0; /*設(shè)標(biāo)志判斷是否發(fā)生過交換*/

for(j=0;jn-1;j++)

if((strcmp(t[j].name,t[j+1].name))0) /*比較大小*/

{

flag=1;

strcpy(temp.name,t[j].name); /*交換記錄*/

strcpy(temp.units,t[j].units);

strcpy(temp.tele,t[j].tele);

strcpy(t[j].name,t[j+1].name);

strcpy(t[j].units,t[j+1].units);

strcpy(t[j].tele,t[j+1].tele);

strcpy(t[j+1].name,temp.name);

strcpy(t[j+1].units,temp.units);

strcpy(t[j+1].tele,temp.tele);

}

if(flag==0)break; /*如果標(biāo)志為0,說明沒有發(fā)生過交換循環(huán)結(jié)束*/

}

printf("sort sucess!!!\n"); /*顯示排序成功*/

}

/*快速查找,參數(shù)為結(jié)構(gòu)體數(shù)組和記錄數(shù)*/

void qseek(ADDRESS t[],int n)

{

char s[20];

int l,r,m;

printf("\nPlease sort before qseek!\n"); /*提示確認(rèn)在查找之前,記錄是否已排序*/

printf("please enter name for qseek\n"); /*提示輸入*/

scanf("%s",s); /*輸入待查找的姓名*/

l=0;r=n-1; /*設(shè)置左邊界與右邊界的初值*/

while(l=r) /*當(dāng)左邊界=右邊界時*/

{

m=(l+r)/2; /*計算中間位置*/

if(strcmp(t[m].name,s)==0) /*與中間結(jié)點姓名字段做比較判是否相等*/

{

print(t[m]); /*如果相等,則調(diào)用print函數(shù)顯示記錄信息*/

return ; /*返回*/

}

if(strcmp(t[m].name,s)0) /*如果中間結(jié)點小*/

l=m+1; /*修改左邊界*/

else

r=m-1; /*否則,中間結(jié)點大,修改右邊界*/

}

if(lr) /*如果左邊界大于右邊界時*/

printf("not found\n"); /*顯示沒找到*/

}

/*復(fù)制文件*/

void copy()

{

char outfile[20]; /*目標(biāo)文件名*/

int i,n;

ADDRESS temp[M]; /*定義臨時變量*/

FILE *sfp,*tfp; /*定義指向文件的指針*/

clrscr();/*清屏*/

if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/

{

printf("can not open file\n"); /*顯示不能打開文件信息*/

exit(1); /*退出*/

}

printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/

scanf("%s",outfile); /*輸入目標(biāo)文件名*/

if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標(biāo)文件*/

{

printf("can not open file\n"); /*顯示不能打開文件信息*/

exit(1); /*退出*/

}

fscanf(sfp,"%d",n); /*讀出文件記錄數(shù)*/

fprintf(tfp,"%d",n);/*寫入目標(biāo)文件數(shù)*/

fprintf(tfp,"\r\n"); /*寫入換行符*/

for(i=0;in;i++)

{

fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,

temp[i].tele); /*讀入記錄*/

fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,

temp[i].units,temp[i].tele); /*寫入記錄*/

fprintf(tfp,"\r\n"); /*寫入換行符*/

}

fclose(sfp); /*關(guān)閉源文件*/

fclose(tfp); /*關(guān)閉目標(biāo)文件*/

printf("you have success copy file!!!\n"); /*顯示復(fù)制成功*/

}

關(guān)于軟件開發(fā)流程圖示例關(guān)于班級管理和班級管理系統(tǒng)用例圖的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

掃碼二維碼