第一篇:c++大作業(yè) 學(xué)生成績(jī)管理系統(tǒng) 學(xué)生實(shí)驗(yàn)報(bào)告 樣本[最終版]
學(xué)生實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)課名稱: C++程序設(shè)計(jì)
實(shí)驗(yàn)項(xiàng)目名稱:綜合大作業(yè)——學(xué)生成績(jī)管理系統(tǒng) 專業(yè)名稱:
班
學(xué)級(jí):號(hào):
學(xué)生姓名:
同組成員:
教師姓名:
日
題目:學(xué)生成績(jī)管理系統(tǒng)一、實(shí)驗(yàn)?zāi)康模?/p>
(1)對(duì)C++語法、基礎(chǔ)知識(shí)和編程技巧進(jìn)行綜合運(yùn)用,編寫具有一定綜合應(yīng)用價(jià)值的稍大一些的程序。培養(yǎng)學(xué)生分析和解決實(shí)際問題的能力。
(2)熟悉掌握C++的語法和面向?qū)ο蟪绦蛟O(shè)計(jì)方法。進(jìn)一步理解和運(yùn)用結(jié)構(gòu)化和面向?qū)ο蟪淘O(shè)計(jì)想結(jié)合的思想和方法
(3)培養(yǎng)學(xué)生的邏輯思維能力,編程能力和程序調(diào)試能力以及工程項(xiàng)目分析和管理能力。
(4)學(xué)會(huì)利用流程圖或N-S圖表示算法;
(5)掌握書寫程設(shè)計(jì)開發(fā)文檔的能力(書寫課程設(shè)計(jì)報(bào)告);
二、設(shè)計(jì)任務(wù)與要求:
(1)要求利用面向?qū)ο蟮姆椒ㄒ约癈++的編程思想來完成系統(tǒng)的設(shè)計(jì)。
(2)在系統(tǒng)的設(shè)計(jì)中,能夠運(yùn)用面向?qū)ο蟮臋C(jī)制(繼承、派生)來實(shí)現(xiàn)系統(tǒng)功能,并且要建立清晰的類層次關(guān)系。
(3)主函數(shù)中提供菜單選項(xiàng),并給出足夠的選擇信息以及提示信息。界面友好(良好的人機(jī)交互),加必要的注釋;
(4)程序具有一定的健壯性,不會(huì)因?yàn)橛脩舻妮斎脲e(cuò)誤引起程序運(yùn)行錯(cuò)誤而中斷執(zhí)行。
三、系統(tǒng)需求分析:
(1)需求分析
建立成績(jī)管理系統(tǒng),包含了學(xué)生的全部信息,包括學(xué)號(hào),姓名,出生日期,年齡(通過計(jì)算得出),各科成績(jī)等。然后對(duì)其相關(guān)操作。
(2)系統(tǒng)功能分析
信息錄入、信息顯示、信息查詢、信息刪除、信息修改、信息保存。
(3)系統(tǒng)功能模塊
a、主程序模塊
本程序各個(gè)模塊功能均用函數(shù)實(shí)現(xiàn),主程序主要用來實(shí)現(xiàn)數(shù)據(jù)的初始化,定義變量,調(diào)用函數(shù)等,實(shí)現(xiàn)對(duì)程序的整體控制。
b、登錄密碼模塊
本模塊用于管理登錄,只保存了兩個(gè)管理員,并且輸入錯(cuò)誤,會(huì)提示錯(cuò)誤原因,管理員不存在或者密碼錯(cuò)誤,同時(shí)有輸入上限,三次輸入錯(cuò)誤即退出系統(tǒng)。
c、信息錄入模塊
錄入學(xué)生成績(jī)信息(包括學(xué)生學(xué)號(hào)、姓名、出生日期、年齡、各門課程的成績(jī)等),將信息記錄到當(dāng)前*End中,然后End指向新的內(nèi)存。
d、信息顯示模塊
顯示錄入的所有信息,使用for循環(huán),起始條件Head->Next,終止于End。
e、信息查詢模塊
輸入學(xué)號(hào)或名字,查詢學(xué)生各門課程的成績(jī)及總成績(jī),輸入姓名查詢,將查詢到指針保存到指針數(shù)組中,同時(shí)使用i記錄保存指針的數(shù)目,然后將End賦給指針數(shù)組作為結(jié)束條件;輸入學(xué)號(hào)查詢,成功則返回上一個(gè)指針,不成功就返回空。
f、信息刪除模塊
兩種方式,通過姓名,調(diào)用FindItem(char * name,student *a[])并返回i,i=0不存在,i=1直接刪除,i>1顯示所有相同姓名的信息供用戶選擇刪除,通過學(xué)號(hào)(唯一性)直接刪除該學(xué)生的成績(jī)信息;
g、信息修改模塊
同刪除模塊類似,首先查詢,出現(xiàn)重名選擇修改。
h、信息排序模塊
根據(jù)總成績(jī)高低排序,交換兩個(gè)數(shù)據(jù)域完成排序,用for循環(huán)完成所有的信息排序。h、信息保存模塊
退出時(shí),將學(xué)生的學(xué)號(hào)、姓名及各門課程的成績(jī)等信息保存于外部存儲(chǔ)器的sort.txt文件中。
(4)模塊功能框架圖
四、系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
1、基類class Student用來封裝學(xué)生的所有信息,以及基本操作即讀寫數(shù)據(jù)。
2、派生類class Studentmessage繼承了Student的所有功能,同時(shí)增加了增加信息,顯示,修改等功能,實(shí)現(xiàn)對(duì)信息的所有操作。
3、main()用來實(shí)現(xiàn)對(duì)程序的整體控制;code()用于保護(hù)信息安全性,限制登錄。
4、定義文件輸入流對(duì)象in和輸出流對(duì)象out,實(shí)現(xiàn)對(duì)外部文件的操作,使得數(shù)據(jù)得
以保存。
5、Student * Next用于實(shí)現(xiàn)鏈表的操作,保存下一個(gè)對(duì)象的地址。
五、調(diào)試過程:測(cè)試數(shù)據(jù)及結(jié)果
1、新建
2、查找
3、修改
4、刪除
六、系統(tǒng)有待改進(jìn)的地方
七、設(shè)計(jì)心得與體會(huì)
八、參考資料
八、系統(tǒng)有待改進(jìn)的地方
九、設(shè)計(jì)心得與體會(huì)
此次c++課程設(shè)計(jì),在指導(dǎo)教師的精心教導(dǎo)下,我們學(xué)會(huì)了如何用C++編寫一個(gè)簡(jiǎn)單的應(yīng)用程序。首先要對(duì)程序的設(shè)計(jì)要求有一個(gè)比較明確的認(rèn)識(shí),然后系統(tǒng)分析與系統(tǒng)設(shè)計(jì),最后是代碼設(shè)計(jì)與調(diào)試。程序?qū)崿F(xiàn)上,設(shè)計(jì)了簡(jiǎn)單的查詢界面,將各個(gè)功能集中出來按照程序編寫原則,便于查詢。
根據(jù)C++課程所學(xué)的概念、理論和方法,按照C++程序設(shè)計(jì)的基本步驟,設(shè)計(jì)出一個(gè)適當(dāng)規(guī)模的程序;進(jìn)一步加深對(duì)C++語言的理解和掌握。理論聯(lián)系實(shí)際,加深和鞏固所學(xué)的理論知識(shí),提高實(shí)踐能力和計(jì)算機(jī)的綜合運(yùn)用能力。我們編寫程序的過程是辛苦與快樂的,程序的編寫原則很重要,只要我們?cè)诰幊蹋捅仨毑粩喔倪M(jìn),才能更好提高編程能力。
十、參考資料
《C++primer》(美)普拉塔(Prata,S.)著 人民郵電出版社 《數(shù)據(jù)結(jié)構(gòu)》嚴(yán)蔚敏 著清華大學(xué)出版社
第二篇:學(xué)生成績(jī)管理系統(tǒng)實(shí)驗(yàn)報(bào)告
中南大學(xué)
二○一三~二○一四學(xué)年第二學(xué)期 信息科學(xué)與工程學(xué)院
C++課程設(shè)計(jì)報(bào)告
課程名稱: C++課程設(shè)計(jì)班級(jí): 通信工程1304班學(xué)號(hào):0905130417姓名:毛騰指導(dǎo)教師:
二○一四年七月
目錄
一. 需求分析
二.三.
四.五.六.
程序結(jié)構(gòu)
算法分析運(yùn)行結(jié)果
學(xué)之心得
程序源碼
一. 需求分析
(一)小型學(xué)生成績(jī)管理系統(tǒng)
1、需要處理的基礎(chǔ)數(shù)據(jù)
? 學(xué)生基本信息:如班級(jí)、學(xué)號(hào)、姓名、性別、年齡、宿舍號(hào)碼、電話號(hào)
碼等。
? 學(xué)生選修課程的基本信息:課程編號(hào)、課程名稱、考試成績(jī)、平時(shí)成績(jī)、綜合成績(jī)、學(xué)分、重修否等。
2、系統(tǒng)的基本功能
? 數(shù)據(jù)的錄入:如錄入學(xué)生的基本信息,以及該學(xué)生選修課程的基本信息; ? 數(shù)據(jù)的修改:如修改指定學(xué)號(hào)、或者指定姓名的學(xué)生信息,或者修改其
選修課程信息;
? 數(shù)據(jù)的插入:插入某個(gè)學(xué)生信息;
? 數(shù)據(jù)的查詢:如按學(xué)號(hào)查詢、按姓名查詢等;
? 數(shù)據(jù)的刪除:如刪除指定學(xué)號(hào)、或者指定姓名的學(xué)生及其選修課程信息; ?平均成績(jī)的計(jì)算:計(jì)算每個(gè)學(xué)生各門功課的平均成績(jī),并按平均成績(jī)從
高到低的次序輸出學(xué)生信息;
? 列出不及格學(xué)生清單(學(xué)號(hào)、姓名、不及格的課程和成績(jī))。? 考慮用文件把數(shù)據(jù)保存起來(可選)。
二.程序結(jié)構(gòu)
(1)程序框圖
第三篇:長(zhǎng)安大學(xué)C++設(shè)計(jì) 學(xué)生成績(jī)管理系統(tǒng)實(shí)驗(yàn)報(bào)告
C++程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告
院系:電子與控制工程學(xué)院 交通信息與控制工程系 學(xué)號(hào):2011320101 姓名:XXX
2012年11月20
日
學(xué)生信息管理系統(tǒng)一、問題描述和需求分析;
編寫一個(gè)學(xué)生信息管理系統(tǒng),要求如下:
①對(duì)某個(gè)班級(jí)的學(xué)生的5門課程的學(xué)習(xí)成績(jī)進(jìn)行管理,用菜單選擇操作方式完成下列基本功能: ★登記學(xué)生成績(jī); ★查詢學(xué)生成績(jī); ★插入學(xué)生成績(jī); ★刪除學(xué)生成績(jī)。
②用菜單選擇方式完成下列擴(kuò)充功能: ★每門課程的平均成績(jī);
★輸出每門課程成績(jī)優(yōu)秀的學(xué)生名單及成績(jī);
★輸出只要有一門課程不及格的學(xué)生名單及其每門成績(jī); ★對(duì)5門課程中可以指定某一門課程進(jìn)行排序。
二、概要設(shè)計(jì);
1)主要變量:
1)intnum;
/*學(xué)號(hào)*/; char name[20];/*姓名*/; 2)char sex[2];
/ *性別*/; 3)int score[3];
/*成績(jī)*/; 4)int sum;
/*總成績(jī)*/;
5)int n;
/*聲明一個(gè)全局變量*/;
6)struct student *next
/*聲明一個(gè)結(jié)構(gòu)體指針*/;(2)自定義函數(shù):
1)Student *cin(void);
/*學(xué)生信息成績(jī)錄入函數(shù)*/ 2)Student *sort_1(Student *head,int);/*聲明按學(xué)號(hào)排序函數(shù)*/ 3)void sort_2(Student *head);/*聲明按總分排序函數(shù)*/ 4)void print(Student *head);/*聲明顯示函數(shù)*/ 5)Student *sort_all(Student *head);/*聲明排序函數(shù)*/ 6)void find(Student *head);/*聲明查詢函數(shù)*/
2)
a)模塊的功能及程序說明;
整個(gè)系統(tǒng)除了主函數(shù)外,另外還有10個(gè)函數(shù),實(shí)現(xiàn)八大功能:輸入功能、顯示功能、查找功能、排序功能、插入功能、保存功能、讀取功能。各個(gè)函數(shù)的詳細(xì)設(shè)計(jì)說明分別如下:
1、主函數(shù) main()利用無限次循環(huán)for(;;)和swithch()實(shí)現(xiàn)各函數(shù)的調(diào)用,系統(tǒng)根據(jù)輸入的數(shù)字選項(xiàng)來調(diào)用相應(yīng)的函數(shù)。
2、初始化函數(shù)STUDENT *init()這是一個(gè)無參函數(shù),里面只有一個(gè)語句,它的作用是使鏈表初始化,使head的值為NULL。比如:沒有這個(gè)函數(shù)的話,在你沒有輸入任何數(shù)據(jù)的情況下,去執(zhí)行顯示功能的時(shí)候會(huì)顯示一些亂碼!
3、菜單選擇函數(shù)intmenu_select();這是一個(gè)無參函數(shù),主要實(shí)現(xiàn)“功能選擇”的界面,在這個(gè)界面里有顯示系統(tǒng)的九大功能,根據(jù)每個(gè)功能前面的序號(hào)進(jìn)行選擇,中間還顯示系統(tǒng)當(dāng)前的時(shí)間。等執(zhí)行完每一個(gè)函數(shù)功能后,按任一鍵回到主界面也要通過這個(gè)函數(shù)來實(shí)現(xiàn)!
4、輸入記錄函數(shù) STUDENT *create()這是一個(gè)無參函數(shù),用來執(zhí)行第學(xué)生成績(jī)記錄的輸入,當(dāng)學(xué)生為0時(shí)停止輸入,函數(shù)結(jié)束后,帶回一個(gè)指向鏈表頭的指針head。
算法:先聲明一個(gè)首節(jié)點(diǎn)head,并將head->next設(shè)為NULL。每輸入一個(gè)數(shù)據(jù)就聲明一個(gè)新節(jié)點(diǎn)p,把p->next設(shè)為NULL,并且鏈接到之前列表的尾端。
5、顯示記錄函數(shù) void print(STUDENT *head)這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,負(fù)責(zé)對(duì)全部學(xué)生成績(jī)記錄的輸出,不足之處就是不能對(duì)學(xué)生成績(jī)進(jìn)行分頁顯示。
算法:先將p結(jié)點(diǎn)的指針指向第一個(gè)結(jié)點(diǎn),將p結(jié)點(diǎn)(即第一個(gè)結(jié)點(diǎn))的數(shù)據(jù)輸出。然后再將p結(jié)點(diǎn)的指針指向p指針的的指針(即下一結(jié)點(diǎn)),將p結(jié)點(diǎn)(即第一結(jié)點(diǎn))的數(shù)據(jù)輸出。重復(fù)執(zhí)行此步聚直到p指針指向NULL為止。
6、查找記錄函數(shù) void search(STUDENT *head)這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,實(shí)現(xiàn)按學(xué)號(hào)對(duì)某個(gè)學(xué)生進(jìn)行查找,并顯示所查找到的記錄。
算法:采用線性查找法往下一個(gè)節(jié)點(diǎn)查找。輸入所要查找的學(xué)生的學(xué)號(hào)s,設(shè)一個(gè)指針變量p,先指向第一個(gè)結(jié)點(diǎn),當(dāng)strcmp(p->name,s)&& p!= NULL時(shí),使p后移一個(gè)結(jié)點(diǎn),如果p!=NULL,輸出p所指的結(jié)點(diǎn)。
7、刪除記錄函數(shù) STUDENT *delete(STUDENT *head)這是一個(gè)有參函數(shù),形參為“鏈表頭的指針”,先輸入要?jiǎng)h除的學(xué)生記錄的學(xué)號(hào),找到后顯示該學(xué)生信息,等確認(rèn)后便可按“Y”進(jìn)行刪除。算法:從p指向的第一個(gè)結(jié)點(diǎn)開始,檢查該結(jié)點(diǎn)中的num值是否等于輸入的要求刪除的那個(gè)學(xué)號(hào)。如果相等就將該結(jié)點(diǎn)刪除,如不相等,就將p后移一個(gè)結(jié)點(diǎn),再如此進(jìn)行下去,直到遇到表尾為止。
8、排序函數(shù) STUDENT *sort(STUDENT *head)這是一個(gè)有參函數(shù),形參為“鏈表頭的指針”,按學(xué)生成績(jī)的平均分高低進(jìn)行排序,還可以顯示名次。
9、插入函數(shù) STUDENT *insert(STUDENT *head,STUDENT *new)這是一個(gè)有參函數(shù),形參有兩個(gè),一個(gè)是“鏈表頭的指針”,一個(gè)是“待插入指針”,按照原來成績(jī)平均分的高低進(jìn)行插入,插入后會(huì)重新進(jìn)行排序,并返
回。
算法:先將學(xué)生的成績(jī)按平均分由高分到低分進(jìn)行排序,再插入一個(gè)新生的結(jié)點(diǎn),要求按平均分的高低順序插入。先用指針變量p0指向待插入的結(jié)點(diǎn),p1指向第一個(gè)結(jié)點(diǎn)。如果p0->average
average,則待插入的結(jié)點(diǎn)不應(yīng)插在p1所指的結(jié)點(diǎn)之前。此時(shí)將p1后移,并使p2指向剛才p1所指的結(jié)點(diǎn)。重復(fù)以上的步驟,直到p0->average>=p1->average為止。這時(shí)將p0指向的結(jié)點(diǎn)插到p1所指結(jié)點(diǎn)之前。但是如果p1所指的已是表尾結(jié)點(diǎn),則p1就不應(yīng)后移了。如果p0->average比所有結(jié)點(diǎn)的average都小,則應(yīng)將p0所指的結(jié)點(diǎn)插到鏈表末尾。如果插入的位置既不在第一個(gè)結(jié)點(diǎn)之前,又不在表尾結(jié)點(diǎn)之后,則將p0的值賦給p2->,使p2->next指向待插入的結(jié)點(diǎn),然后將p1的值賦給p0->next,使得p0->next指向p1指向的變量。如果插入位置為第一個(gè)結(jié)點(diǎn)之前,則將p0賦給head,將p1賦給p0->next。如果要插到表尾之后,應(yīng)將p0賦給p1->next,NULL賦給p0->next。最后再調(diào)用排序的函數(shù),將學(xué)生成績(jī)重新排序.10、保存數(shù)據(jù)到文件函數(shù) void save(STUDENT *head)這是一個(gè)不返回值的有參函數(shù),形參為“鏈表頭的指針”,可以把學(xué)生記錄保存在電腦上由自己任意命名的二進(jìn)制文件。a)核心算法流程圖;
b)核心源程序模塊;
核心源程序?yàn)轵?qū)動(dòng)整個(gè)程序運(yùn)行的最重要的模塊,通過核心源程序?qū)?)中的主要模塊進(jìn)行組織與構(gòu)成,依次執(zhí)行上述的十個(gè)模塊中的程序,使程序能夠正常運(yùn)行。總體功能要求:
(1)鏈表的建立,每個(gè)節(jié)點(diǎn)包括:學(xué)號(hào)、姓名、性別、語文、數(shù)學(xué)、英語、總分。
(2)節(jié)點(diǎn)的插入,按學(xué)號(hào)的順序插入。
(3)刪除鏈表中的節(jié)點(diǎn),按學(xué)號(hào)或者姓名。
(4)鏈表的輸出。按學(xué)號(hào)排序、按總分排序功能模塊圖、流程圖(要求有總體的功能模塊圖、各部分流程圖):
核心源程序位于main函數(shù)中,先對(duì)系統(tǒng)進(jìn)行初始化,之后進(jìn)入模式選擇界面,選擇模式并進(jìn)行相應(yīng)的操作,返回值 模式選擇界面,直到錄入完成,進(jìn)行查詢計(jì)算,查詢結(jié)束 可以選擇刪改,最后退出程序。
四.調(diào)試分析
(1)作為一個(gè)學(xué)生成績(jī)管理系統(tǒng),用戶可以首先使用管理員模式初始化該系統(tǒng),并產(chǎn)生一個(gè)開始的學(xué)生成績(jī)系統(tǒng),初始化時(shí)可輸入學(xué)生姓名、學(xué)生學(xué)號(hào)、學(xué)生各科成績(jī)等信息。初始化完成之后,用戶可選擇使用管理員模式進(jìn)入系統(tǒng)修改學(xué)生信息,也可以選擇使用用戶模式進(jìn)入系統(tǒng),對(duì)學(xué)生成績(jī)進(jìn)行各項(xiàng)查詢,其中有成績(jī)最高分查詢,還可以按照不
同的要求進(jìn)行排序,有按照學(xué)號(hào),按照分?jǐn)?shù)高低等;同時(shí)可以生成學(xué)生成績(jī)表,更加直觀的對(duì)比查詢學(xué)生各項(xiàng)成績(jī),最后還可以刪除或者添加學(xué)生成績(jī)及各項(xiàng)信息,避免開始的錄入錯(cuò)誤。
(2)通過對(duì)該課題的程序設(shè)計(jì),我認(rèn)識(shí)到了C語言作為一種程序機(jī)械語言的靈活性。C語言不僅僅是C++以及其他程序語言的基礎(chǔ),也可以做出許多復(fù)雜的程序,學(xué)好C語言是很有好處的。
五.測(cè)試結(jié)果;
1.初次進(jìn)入系統(tǒng),進(jìn)行學(xué)生成績(jī)系統(tǒng)的初始化:
可以根據(jù)學(xué)生人數(shù)的多少輸入若干學(xué)生的各項(xiàng)信息和成績(jī)信息,當(dāng)要結(jié)束時(shí),可以輸入0結(jié)束學(xué)生信息的錄入。
2.可以選擇按照學(xué)生的總分進(jìn)行排序,并清楚的顯示其排序結(jié)果。
3.接下來可以進(jìn)行學(xué)生成績(jī)統(tǒng)計(jì)排序。
4.在學(xué)生成績(jī)管理系統(tǒng)中,可以根據(jù)初始化的數(shù)據(jù),對(duì)學(xué)生計(jì)算學(xué)生均分以及求出單科最高分的同學(xué)。
六.設(shè)計(jì)體會(huì);
此次C語言程序設(shè)計(jì)實(shí)踐,本人實(shí)在是獲益不淺!C語言是上個(gè)學(xué)期開的課程,所以這個(gè)學(xué)期并沒怎么看過,當(dāng)要開始設(shè)計(jì)的時(shí)候,還真不知從哪下手!結(jié)果,第一次的上機(jī),我只坐了一個(gè)下午,什么也沒干!回去以后,我想,這樣不行,這樣下去還得了!我就重新學(xué)了一遍我們上個(gè)學(xué)期的教材,發(fā)覺自已有許多都遺忘了!特別是有文件的操作,幾乎是一遍空白!幾乎花了我百分之九十的時(shí)間,而且還是在一些在其他同學(xué)的幫助下和在上網(wǎng)查看了大量的資料之后才做出來!最后,想說兩句,這次設(shè)計(jì),讓我重新掌握了C語言,而且還得到了用C語言解決實(shí)際問題的寶貴經(jīng)驗(yàn)!
通過對(duì)該課題的程序設(shè)計(jì),我認(rèn)識(shí)到了C語言作為一種程序機(jī)械語言的靈活性。C語言不僅僅是C++以及其他程序語言的基礎(chǔ),也可以做出許多復(fù)雜的程序。在試驗(yàn)當(dāng)中,通過對(duì)許多不甚了解的語言規(guī)則的上網(wǎng)查閱,豐富了我自己對(duì)C語言的知識(shí)與認(rèn)識(shí)。也了解了許多C語言程序設(shè)計(jì)的基本思路,開闊了自己的視野,也鞏固了上學(xué)期對(duì)于C語言的學(xué)習(xí)。
七、附錄
源程序代碼:
#include
head=(Student *)malloc(LEN);p2=head;printf(“n請(qǐng)輸入第%d名學(xué)生的學(xué)號(hào),學(xué)號(hào)為0表示結(jié)束輸入:”,n+1);scanf(“%d”,&flag);while(getchar()!='n');for(;flag;)/*輸入每個(gè)學(xué)生的信息*/ { n++;p1=(Student *)malloc(LEN);p1->num=flag;printf(“請(qǐng)輸入第%d名學(xué)生的姓名:”,n);/*輸入姓名*/ scanf(“%s”,p1->name);printf(“請(qǐng)輸入第%d學(xué)生的性別:”,n);/*輸入性別*/ scanf(“%s”,p1->sex);printf(“請(qǐng)輸入第%d名學(xué)生的語文成績(jī):”,n);/*輸入語文成績(jī)*/ scanf(“%d”,&p1->score[0]);printf(“請(qǐng)輸入第%d名學(xué)生的數(shù)學(xué)成績(jī):”,n);/*輸入數(shù)學(xué)成績(jī)*/ scanf(“%d”,&p1->score[1]);printf(“請(qǐng)輸入第%d名學(xué)生的英語成績(jī):”,n);/*輸入英語成績(jī)*/ scanf(“%d”,&p1->score[2]);p1->sum=p1->score[0]+p1->score[1]+p1->score[2];p2->next=p1;p2=p1;printf(“n請(qǐng)輸入第%d名學(xué)生的學(xué)號(hào),沒有此學(xué)生則輸入0表示結(jié)束:”,n+1);scanf(“%d”,&flag);} p2->next=NULL;printf(“nn”);return head;} Student *sort_all(Student *head)/*定義排序函數(shù)*/ { int choose;for(;;){ printf(“ntt# # # # # 學(xué)生成績(jī)統(tǒng)計(jì)排序 # # # #n”);printf(“tt#t1.按學(xué)生學(xué)號(hào)排序t #n”);printf(“tt#t2.按學(xué)生總分排序t #n”);printf(“tt#t7.單科高分及均分t #n”);printf(“tt#t8.顯示當(dāng)前學(xué)生成績(jī)t #n”);printf(“tt#t0.返回上一級(jí)菜單t #n”);printf(“請(qǐng)輸入你要執(zhí)行的操作:”);scanf(“%d”,&choose);while(getchar()!='n');11
switch(choose){ case 1: case 2: case 3: case 4: case 5: case 6:head=sort_1(head,choose);break;case 7:print(head);sort_2(head);break;case 8:print(head);break;case 0:return head;default: printf(“nn您的輸入有誤!請(qǐng)重新輸入:nn”);break;} } } Student *sort_1(Student *head,int choose)/*定義按學(xué)號(hào)排序函數(shù)*/ { Student *p1,*p2=head->next,*pm,*px;Student mid;if(!p2)return head;for(p1=p2;p1->next!=NULL;p1=p1->next){ pm=p1;for(p2=p1->next;p2!=NULL;p2=p2->next)switch(choose){ case 1:if(pm->num>p2->num)pm=p2;break;case 2:if(pm->sum
sum)pm=p2;break;case 3:if(pm->score[0]
score[0])pm=p2;break;case 4:if(pm->score[1]
score[1])pm=p2;break;case 5:if(pm->score[2]
score[2])pm=p2;break;} if(pm!=p1){ mid=*pm;*pm=*p1;*p1=mid;px=pm->next;pm->next=p1->next;p1->next=px;} } printf(“n排序后的成績(jī)表為:n”);print(head);12
return head;} void sort_2(Student *head)/*定義按總分排序函數(shù)*/ { Student *p=head->next;int max_1,max_2,max_3,min_1,min_2,min_3;intmax_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0;float aver_1,aver_2,aver_3,aver_sum;if(!p)return;max_1=min_1=p->score[0];max_2=min_2=p->score[1];max_3=min_3=p->score[2];max_sum=min_sum=p->sum;for(;p;p=p->next){ if(max_1
score[0])max_1=p->score[0];else if(min_1>p->score[0])min_1=p->score[0];if(max_2
score[1])max_2=p->score[1];else if(min_2>p->score[1])min_2=p->score[1];if(max_3
score[2])max_3=p->score[2];else if(min_3>p->score[2])min_3=p->score[2];if(max_sum
sum)max_sum=p->sum;else if(min_sum>p->sum)min_sum=p->sum;sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];} aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_sum=aver_1+aver_2+aver_3;printf(“總共%d名學(xué)生,具體數(shù)據(jù)為:n”,n);printf(“總分最高分為%d,最低分位%d,平均分為%.2fn”, max_sum,min_sum,aver_sum);} void find(Student *head)/*定義查詢函數(shù)*/ { Student *p;intchoose,fnum;char tem[20];if(n==0){printf(“n當(dāng)前系統(tǒng)沒有任何學(xué)生數(shù)據(jù)!n ”);return;} for(;;){ printf(“n請(qǐng)輸入您要查詢學(xué)生的方式:nn”);printf(“
1、按學(xué)號(hào)查詢;
2、按姓名查詢;0、我不查詢了。nn”);printf(“請(qǐng)選擇:”);scanf(“%d”,&choose);while(getchar()!='n');13
if(choose==1){ printf(“n請(qǐng)輸入你要查詢的學(xué)生的學(xué)號(hào),輸入0退出學(xué)號(hào)查詢:”);scanf(“%d”,&fnum);for(;fnum;){ for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);if(!p){ printf(“nn找不到你要查詢的學(xué)號(hào),請(qǐng)重新輸入,輸入0表示結(jié)束:”);scanf(“%d”,&fnum);} else if(p->num==fnum){ printf(“n學(xué)號(hào)為%d學(xué)生的數(shù)據(jù)為:n”,p->num);printf(“學(xué)號(hào)t姓名t性別t 語文成績(jī) 數(shù)學(xué)成績(jī) 英語成績(jī) 總分n”);/*輸出所有的學(xué)生信息*/ printf(“%dt%st%st %d %d %d %dn”,p->num, p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->sum);printf(“nn請(qǐng)輸入你還要查詢的學(xué)生的學(xué)號(hào),輸入0表示不按學(xué)號(hào)查詢了:”);scanf(“%d”,&fnum);} } } else if(choose==2){ printf(“n請(qǐng)輸入你要查詢的學(xué)生的姓名,輸入0退出姓名查詢:”);scanf(“%s”,tem);for(;strcmp(tem,“0”);){ for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);if(!p){ printf(“nn找不到你要查詢的姓名,請(qǐng)重新輸入,輸入0表示結(jié)束:”);scanf(“%s”,tem);} else if(!strcmp(p->name,tem)){ printf(“n姓名為%s學(xué)生的數(shù)據(jù)為:n”,p->name);printf(“學(xué)號(hào)t姓名t性別t 語文成績(jī) 數(shù)學(xué)成績(jī) 英語成績(jī) 總分n”);printf(“%dt%st%st %d %d %d %dn”,p->num,p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->sum);printf(“nn請(qǐng)輸入你還要查詢的學(xué)生的姓名,輸入0表示不按姓名查詢了:”);14
scanf(“%s”,tem);} } } else if(choose==0){printf(“n你選擇了不查詢!n”);break;} else {printf(“n你以其他方式選擇了不查詢!n”);break;} } } Student *add_new(Student *head)/*定義插入函數(shù)*/ { Student *p;int flag;printf(“nn請(qǐng)輸入你要新加入學(xué)生的學(xué)號(hào),學(xué)號(hào)為0表示結(jié)束輸入:”);scanf(“%d”,&flag);while(getchar()!='n');for(;flag;){ p=(Student *)malloc(LEN);p->num=flag;printf(“請(qǐng)輸入新加入學(xué)生的姓名:”,n);/*輸入姓名*/ scanf(“%s”,p->name);printf(“請(qǐng)輸入新加入學(xué)生的性別:”);/*輸入性別*/ scanf(“%s”,p->sex);printf(“請(qǐng)輸入新加入學(xué)生的語文成績(jī):”,n);/*輸入語文成績(jī)*/ scanf(“%d”,&p->score[0]);printf(“請(qǐng)輸入新加入學(xué)生的數(shù)學(xué)成績(jī):”,n);/*輸入數(shù)學(xué)成績(jī)*/ scanf(“%d”,&p->score[1]);printf(“請(qǐng)輸入新加入學(xué)生的英語成績(jī):”,n);/*輸入英語成績(jī)*/ scanf(“%d”,&p->score[2]);p->sum=p->score[0]+p->score[1]+p->score[2];p->next=head->next;head->next=p;n++;printf(“n請(qǐng)輸入還要加入學(xué)生的學(xué)號(hào),沒有此學(xué)生則輸入0表示結(jié)束:”);scanf(“%d”,&flag);} head=sort_1(head,1);printf(“加入后的成績(jī)表為:n”);print(head);return head;} void print(Student *head){ Student *p=head->next;15
if(!p){printf(“nn此系統(tǒng)目前沒有任何學(xué)生數(shù)據(jù)!nnn”);return;} printf(“此系統(tǒng)目前共計(jì)學(xué)生%d名:n”,n);printf(“**************************學(xué)生成績(jī)統(tǒng)計(jì)一覽************************ *****n”);printf(“學(xué)號(hào)t姓名t性別t 語文成績(jī) 數(shù)學(xué)成績(jī) 英語成績(jī) 總分n”);for(;p;p=p->next)printf(“%dt%st%st
%d
%d
%d
%dn”, p->num,p->name,p->sex ,p->score[0],p->score[1],p->score[2],p->sum=p->score[0]+p->score[1]+p->score[2]);} struct student *del(struct student *head,longnum)/*定義刪除學(xué)生信息函數(shù)*/ {struct student *p1,*p2;if(head==NULL){printf(“nlist null!n”);return head;} p1=head;while(num!=p1->num&& p1->next!=NULL){p2=p1;p1=p1->next;} if(num==p1->num){if(p1==head)head=p1->next;else p2->next=p1->next;printf(“delete:%ldn”,num);n=n-1;} elseprintf(“%ld not deen found!n”,num);return(head);} int main()/*主函數(shù)即用戶的操作界面*/ { Student *head;intchoose,i,num;/*聲明局部變量*/ head=(Student *)malloc(LEN);head->next=NULL;for(;;){ printf(“ntt* * * * * 學(xué)生成績(jī)管理系統(tǒng) * * * *n”);/*學(xué)生成績(jī)管理系統(tǒng)*/ printf(“tt*t1.學(xué)生數(shù)據(jù)鍵盤錄入t *n”);/*.學(xué)生數(shù)據(jù)鍵盤錄入*/ printf(“tt*t2.學(xué)生數(shù)據(jù)統(tǒng)計(jì)排序t *n”);/*學(xué)生數(shù)據(jù)統(tǒng)計(jì)排序*/ printf(“tt*t3.查詢學(xué)生數(shù)據(jù)tt *n”);/*.查詢學(xué)生數(shù)據(jù)*/ printf(“tt*t4.插入學(xué)生數(shù)據(jù)tt *n”);/*插入學(xué)生數(shù)據(jù)*/ printf(“tt*t5.顯示當(dāng)前成績(jī)表t *n”);/*顯示當(dāng)前成績(jī)表*/ printf(“tt*t6.刪除學(xué)生數(shù)據(jù)tt *n”);/*刪除學(xué)生數(shù)據(jù)*/ printf(“tt*t0.退出成績(jī)管理系統(tǒng)t *n”);/*退出成績(jī)管理系統(tǒng)*/ printf(“n請(qǐng)輸入你要執(zhí)行的操作:”);/*請(qǐng)輸入你要執(zhí)行的操作*/ scanf(“%d”,&choose);while(getchar()!='n');16
switch(choose){ case 1:printf(“ntttt**************注意**************”);printf(“nn 此選項(xiàng)將會(huì)建立新的學(xué)生數(shù)據(jù)系統(tǒng) ,原來的數(shù)據(jù)將不再存在,你確信要?jiǎng)h除原來的數(shù)據(jù)并建立新的數(shù)據(jù)系統(tǒng)么?nn”);printf(“
1、建立新的數(shù)據(jù)系統(tǒng);0、放棄建立新的數(shù)據(jù)系統(tǒng)。nn”);printf(“請(qǐng)選擇:”);scanf(“%d”,&i);if(i==1){head=cin();print(head);break;} else if(i==0){ printf(“n你選擇了放棄建立新的數(shù)據(jù)系統(tǒng)!n”);break;} else { printf(“n你做出別的選擇,當(dāng)作放棄建立!n”);break;} case 2:head=sort_all(head);break;/*調(diào)用排序函數(shù)*/ case 3:find(head);break;/*調(diào)用查詢函數(shù)*/ case 4:head=add_new(head);/*調(diào)用插入函數(shù)*/ case 5:print(head);break;/*調(diào)用顯示函數(shù)*/ case 6:printf(“請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):”);scanf(“%d”,&num);del(head,num);/*調(diào)用刪除函數(shù)*/ case 0:system(“pause”);return 0;/*退出系統(tǒng)*/ default: printf(“nn您的輸入有誤!請(qǐng)重新輸入:nn”);break;} } }
第四篇:C++課程設(shè)計(jì)學(xué)生成績(jī)管理分析系統(tǒng)
五、解決方案 C++程序設(shè)計(jì)實(shí)踐教學(xué)環(huán)節(jié)任務(wù)書
1.分析程序的功能要求,劃分程序功能模塊。
2.畫出系統(tǒng)流程圖。
一、題目: 學(xué)生成績(jī)管理分析系統(tǒng) 3.代碼的編寫。定義類和各個(gè)功能函數(shù)。
4.程序的功能調(diào)試。
二、目的與要求 5.完成系統(tǒng)總結(jié)報(bào)告以及使用說明書。
1.目的:
六、進(jìn)度安排
1)鞏固C++基礎(chǔ)知識(shí);此次課程設(shè)計(jì)時(shí)間為一周或兩周,分四個(gè)階段完成:
2)能夠運(yùn)用面向?qū)ο蠓椒ㄟM(jìn)行類的設(shè)計(jì); 1.分析設(shè)計(jì)階段。指導(dǎo)教師應(yīng)積極引導(dǎo)學(xué)生自主學(xué)習(xí)和鉆研問題,明確設(shè)計(jì)要
3)鍛煉學(xué)生編程能力,解決實(shí)際問題的能力。求,找出實(shí)現(xiàn)方法,按照需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)這幾個(gè)步驟進(jìn)行。2.編碼調(diào)試階段:根據(jù)設(shè)計(jì)分析方案設(shè)計(jì)類并編寫代碼,然后調(diào)試該代碼,實(shí)
2.要求現(xiàn)課題要求的功能。3.總結(jié)報(bào)告階段:總結(jié)設(shè)計(jì)工作,寫出課程設(shè)計(jì)說明書,要求學(xué)生寫出需求分析、基本要求: 總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試的步驟和內(nèi)容。
1)按照軟件開發(fā)流程進(jìn)行開發(fā) 4.考核階段。
2)類的設(shè)計(jì)合理;包括類的繼承多態(tài)等;
3)模塊劃分清晰合理;
七、撰寫課程設(shè)計(jì)報(bào)告或課程設(shè)計(jì)總結(jié)
4)實(shí)用性好。課程設(shè)計(jì)報(bào)告要求: 創(chuàng)新要求:
在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì),比如系統(tǒng)用戶功能控制,對(duì)管理員級(jí)和一總結(jié)報(bào)告包括需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼(詳細(xì)寫出編程步驟)、測(cè)試的步般級(jí)別的用戶系統(tǒng)功能操作不同。驟和內(nèi)容、課程設(shè)計(jì)總結(jié)、參考資料等,不符合以上要求者,則本次設(shè)計(jì)以不及格記。
三、信息描述
八、參考資料1.《C++程序設(shè)計(jì)》.鄭莉.清華大學(xué)出版社 有關(guān)該系統(tǒng)基本信息的描述,如:學(xué)號(hào)、姓名、系別、班級(jí)和所選科目及各科成績(jī)2.《C++編程思想》.Bruce Eckel [劉宗田].機(jī)械工業(yè)出版社等。3.《C++ Primer》中文版.Lippman[潘愛民].中國(guó)電力出版社出版4.《Effective C++中文版》Scott Meyers[侯捷].華中科技大學(xué)出版社
四、功能描述
1.學(xué)生基本信息及成績(jī)所選科目成績(jī)的錄入修改和刪除。
2.基本信息的查詢(分系、班級(jí);分科目)。
3.對(duì)每系或每班各科成績(jī)進(jìn)行分析(即求單科平均成績(jī)、及格率和優(yōu)秀率);
4.對(duì)所開課程的成績(jī)分析(求其平均成績(jī),最高分和最低分);
5.對(duì)學(xué)生考試成績(jī)進(jìn)行排名(單科按系別或班級(jí)進(jìn)行排名,對(duì)每一個(gè)班級(jí),同一
學(xué)期學(xué)生總體成績(jī)進(jìn)行排名,并顯示各科成績(jī)信息)
第五篇:學(xué)生信息及成績(jī)管理系統(tǒng)作業(yè)
學(xué)生信息及成績(jī)管理系統(tǒng)(至少10人)
學(xué)生信息包括職學(xué)號(hào)、姓名、性別、年齡、課程(五門課程)基本信息等(學(xué)號(hào)不重復(fù))。
試設(shè)計(jì)一學(xué)生成績(jī)管理系統(tǒng),使之能提供以下功能:
? 學(xué)生信息錄入功能(學(xué)生信息用文件保存)
? 學(xué)生信息瀏覽功能
? 學(xué)生總成績(jī)的統(tǒng)計(jì)功能
? 學(xué)生每門課程的成績(jī)?yōu)g覽
課程的基本構(gòu)成如下:
考試: 數(shù)學(xué)分析高等代數(shù)英語概率統(tǒng)計(jì)
考查: 體育(優(yōu) 良 中 及 差 五檔,對(duì)應(yīng)分?jǐn)?shù)90 80 70 60 50)