第一篇:2014_12_C語(yǔ)言課程設(shè)計(jì)內(nèi)容和要求
《C語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)
----內(nèi)容及要求
1、課程設(shè)計(jì)的目的
課程設(shè)計(jì)是C語(yǔ)言教學(xué)中一個(gè)重要的實(shí)踐環(huán)節(jié)。通過課程設(shè)計(jì)的綜合訓(xùn)練,培養(yǎng)學(xué)生實(shí)際分析問題、編程和動(dòng)手能力,提高學(xué)生利用C語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力,使學(xué)生掌握面向過程語(yǔ)言的結(jié)構(gòu)化程序設(shè)計(jì)方法及解決實(shí)際問題的能力,培養(yǎng)學(xué)生的創(chuàng)新意識(shí),并為學(xué)生今后學(xué)習(xí)面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言打下基礎(chǔ)。在本課程設(shè)計(jì)的過程中,讓學(xué)生系統(tǒng)地、綜合地根據(jù)所學(xué)習(xí)的C語(yǔ)言相關(guān)知識(shí),編寫一個(gè)功能完善、實(shí)用性強(qiáng),知識(shí)點(diǎn)覆蓋面廣的應(yīng)用程序,讓學(xué)生進(jìn)一步熟悉C語(yǔ)言中標(biāo)準(zhǔn)函數(shù)的使用,用戶定義函數(shù)及語(yǔ)句的編寫及使用方法,進(jìn)一步熟悉指針、鏈表、文件的使用方法。并借此過程讓學(xué)生進(jìn)一步掌握有關(guān)C語(yǔ)言程序調(diào)試的方法與技巧,形成一定的C語(yǔ)言編寫能力。
2、課程設(shè)計(jì)的基本要求
(1)要求學(xué)生熟練掌握C語(yǔ)言的基本概念、基本數(shù)據(jù)類型、基本語(yǔ)句、函數(shù)、指針、結(jié)構(gòu)體類型、鏈表的處理及其靈活應(yīng)用,掌握C語(yǔ)言中文件的操作和使用方法;
(2)理清系統(tǒng)的總體框架,合理地劃分系統(tǒng)的功能模塊;(3)要求使用結(jié)構(gòu)化程序設(shè)計(jì)方法和模塊化思想編程;
(4)各模塊單獨(dú)編寫程序代碼,分別測(cè)試,最后整合各個(gè)模塊的功能進(jìn)行聯(lián)合調(diào)試。各組中的同學(xué)之間開展討論和協(xié)作、合理分工,認(rèn)真完成課題;(5)必須實(shí)現(xiàn)系統(tǒng)的基本功能,完成課程設(shè)計(jì)規(guī)定的基本內(nèi)容,達(dá)到基本要求;(6)可以自行對(duì)所給課題進(jìn)行功能上的擴(kuò)充或增加(7)在源程序中合理使用注釋,使程序容易閱讀和理解;(8)程序界面要求友好、直觀、易操作;
(9)按時(shí)提交課程設(shè)計(jì)報(bào)告,報(bào)告內(nèi)容具體要求見下文。
3、分組安排
以班級(jí)為單位,分組進(jìn)行課程設(shè)計(jì)。原則上,每3人一組合作完成一個(gè)課程設(shè)計(jì),每個(gè)人的任務(wù)不同。也可以一人單獨(dú)完成一個(gè)課題(五個(gè)功能模塊以上)。
各班自行組織分組,確定分組名單。每組抽簽從老師所給的參考課題中選擇課題,也可自擬課題,但選擇自擬課題的分組之間的課題不能完全相同。
揚(yáng)州大學(xué)信息工程學(xué)院
課程設(shè)計(jì)報(bào)告
課程名稱 《C語(yǔ)言程序設(shè)計(jì)》 設(shè)計(jì)題目 學(xué)生姓名 班 級(jí) 學(xué) 號(hào) 指導(dǎo)老師
2014年12月
七、參考文獻(xiàn)
列出主要的參考書、網(wǎng)址等。
八、附錄
源程序清單,對(duì)代碼中重要的地方用注釋進(jìn)行解釋和說(shuō)明
6、課程設(shè)計(jì)驗(yàn)收及考核評(píng)估要求
結(jié)合學(xué)生的動(dòng)手能力、獨(dú)立分析解決問題的能力和創(chuàng)新精神、課程設(shè)計(jì)報(bào)告和課程設(shè)計(jì)答辯考核的情況綜合考評(píng),考核成績(jī)分優(yōu)、良、中、及格和不及格五等。具體成績(jī)?cè)u(píng)定參考:
? 學(xué)習(xí)態(tài)度(10%)? 選題(20%)– 題目難度 – 創(chuàng)新性
? 課程設(shè)計(jì)報(bào)告(30%)? 設(shè)計(jì)(40%)– 正確性 – 界面 – 算法思想 – 測(cè)試數(shù)據(jù)
考核時(shí)具體要求: 1)運(yùn)行所設(shè)計(jì)的系統(tǒng);
2)回答老師提出的有關(guān)問題;
3)提交課程設(shè)計(jì)報(bào)告;
4)以班級(jí)為單位提交電子版本材料(所有同學(xué)提交一個(gè)名為“學(xué)號(hào)”+“姓名”的文件夾,包含以下內(nèi)容:源程序、可執(zhí)行程序、課程設(shè)計(jì)報(bào)告電子版本、使用手冊(cè));
5)所完成課題內(nèi)容有創(chuàng)新的酌情加分。
7、課程設(shè)計(jì)的題目參考
課題可從以下題目中選擇,或者自擬,但自擬的課題各分組間不能完全相同。
題目一:學(xué)生成績(jī)管理系統(tǒng)Ⅰ
設(shè)計(jì)和實(shí)現(xiàn)一個(gè)“學(xué)生成績(jī)管理系統(tǒng)”,滿足以下要求: 1.系統(tǒng)以菜單方式工作;
2.使用鏈表或結(jié)構(gòu)數(shù)組對(duì)學(xué)生成績(jī)進(jìn)行管理和維護(hù); 3.使用二進(jìn)制文件在磁盤上保存學(xué)生記錄信息;
4.鏈表中各結(jié)點(diǎn)或結(jié)構(gòu)數(shù)組中各元素包括“學(xué)號(hào)、姓名、語(yǔ)文、數(shù)學(xué)、外語(yǔ)、平均分”基本字段; 5.實(shí)現(xiàn)如下基本功能:
(1)查看所有學(xué)生信息
(2)查找學(xué)生(查找指定學(xué)號(hào)的學(xué)生,顯示該學(xué)生的學(xué)號(hào)、姓名、所有課程成績(jī))
(3)刪除學(xué)生(刪除指定學(xué)號(hào)的學(xué)生)(4)排序(按學(xué)號(hào)由小到大排序)
(5)添加學(xué)生記錄(新增學(xué)生記錄,將其添加到鏈表或結(jié)構(gòu)數(shù)組中)(6)插入學(xué)生記錄(在鏈表或結(jié)構(gòu)數(shù)組已按學(xué)號(hào)有序的提下,將學(xué)生記錄插其中合適的位置)
(7)計(jì)算平均分(計(jì)算每位學(xué)生每門課程的平均分)
(8)將學(xué)生記錄保存到文件(將鏈表或結(jié)構(gòu)數(shù)組中的數(shù)據(jù)以文件的形式存盤)
(9)從文件中讀出學(xué)生記錄(將已經(jīng)存盤的文件讀入內(nèi)存,進(jìn)行管理)
題目三:學(xué)生成績(jī)記錄薄
設(shè)計(jì)和實(shí)現(xiàn)一個(gè)“學(xué)生成績(jī)記錄薄”,滿足以下要求: 1.系統(tǒng)以菜單方式工作;
2.使用鏈表或結(jié)構(gòu)數(shù)組對(duì)不同班級(jí)的學(xué)生成績(jī)信息進(jìn)行管理和維護(hù); 3.使用二進(jìn)制文件在磁盤上保存學(xué)生記錄信息;
4.鏈表中各結(jié)點(diǎn)或結(jié)構(gòu)數(shù)組中各元素包括“學(xué)號(hào)、班級(jí)、姓名、語(yǔ)文、數(shù)學(xué)、外語(yǔ)、計(jì)算機(jī)、總分”字段; 5.實(shí)現(xiàn)如下基本功能:
(1)列出指定班級(jí)的所有學(xué)生的成績(jī)單
(2)錄入學(xué)生記錄(新增學(xué)生的信息,將它添加到鏈表中)
(3)查找學(xué)生(查找指定學(xué)號(hào)的學(xué)生,顯示該學(xué)生的學(xué)號(hào)、班級(jí)、姓名、所有課程成績(jī))
(4)刪除學(xué)生(刪除指定學(xué)號(hào)的學(xué)生)
(5)計(jì)算總分和平均分(計(jì)算每位學(xué)生四門課程的總分)(5)排序(對(duì)指定班級(jí)的所有學(xué)生按總分由高到低的方式排序并輸出)(6)計(jì)算指定班級(jí)各門課程的平均分(計(jì)算并輸出某班級(jí)學(xué)生每門課程的平均分)
(7)查詢所有存在不及格課程的學(xué)生,并輸出這些學(xué)生信息;(8)將學(xué)生記錄保存到文件存盤(將鏈表或結(jié)構(gòu)數(shù)組的數(shù)據(jù)以文件的形式存盤)
(9)從文件中讀入學(xué)生記錄(將原來(lái)已經(jīng)存盤的文件讀入內(nèi)存,進(jìn)行管理)
題目五:圖書信息管理系統(tǒng)
設(shè)計(jì)和實(shí)現(xiàn)一個(gè)“圖書信息管理系統(tǒng)”,滿足以下要求: 1.系統(tǒng)以菜單方式工作;
2.使用鏈表或結(jié)構(gòu)數(shù)組對(duì)圖書信息進(jìn)行管理和維護(hù); 3.使用二進(jìn)制文件在磁盤上保存圖書記錄信息;
4.鏈表中各結(jié)點(diǎn)或結(jié)構(gòu)數(shù)組中各元素包括“圖書編號(hào)、書名、作者、出版社、出版時(shí)間、價(jià)格”基本字段; 5.實(shí)現(xiàn)如下基本功能:
(1)圖書信息錄入功能
(2)圖書信息瀏覽功能(輸出所有的圖書信息)
(3)圖書信息排序(按圖書編號(hào)由大到小的順序排列)(4)圖書信息查詢(按圖書編號(hào)和作者兩種方式查詢圖書信息)(5)圖書信息統(tǒng)計(jì)(按出版社統(tǒng)計(jì)滿足條件的圖書數(shù)目,并顯示圖書信息)
(6)圖書刪除(刪除指定編號(hào)的圖書)
(7)圖書修改(修改指定編號(hào)的圖書的基本信息)
(8)將圖書信息保存到文件存盤(將鏈表或結(jié)構(gòu)數(shù)組的數(shù)據(jù)以文件的形式存盤)
(9)從文件中讀入圖書信息(將原來(lái)已經(jīng)存盤的文件讀入內(nèi)存,進(jìn)行管理)
1題目七:DVD影片管理系統(tǒng)
設(shè)計(jì)和實(shí)現(xiàn)一個(gè)“DVD影片管理系統(tǒng)”,并滿足以下要求: 1.系統(tǒng)以菜單方式工作;
2.使用鏈表或結(jié)構(gòu)數(shù)組對(duì)DVD影片信息進(jìn)行管理和維護(hù); 3.使用二進(jìn)制文件在磁盤上保存通信錄信息;
4.鏈表中各結(jié)點(diǎn)或結(jié)構(gòu)數(shù)組中各元素包括的DVD影片信息:DVD影片編號(hào)、DVD影片名稱、地區(qū)類型(如港臺(tái)、大陸、歐美、韓國(guó)、日本等)、內(nèi)容類型(如戰(zhàn)爭(zhēng)、喜劇、言情、動(dòng)漫等等)、價(jià)格、出版日期 5.實(shí)現(xiàn)如下基本功能:
(1)新增DVD影片
(2)DVD影片瀏覽(輸出所有的DVD影片信息)(3)DVD影片刪除(刪除指定編號(hào)的影片)(4)DVD影片修改(修改指定編號(hào)的影片信息)(5)DVD影片排序(根據(jù)影片編號(hào)進(jìn)行排序)
(6)DVD影片查詢統(tǒng)計(jì)(提供按地區(qū)類型、內(nèi)容類型兩種方式對(duì)影片進(jìn)行統(tǒng)計(jì)查詢功能)
(7)將DVD影片數(shù)據(jù)保存到文件存盤(將鏈表或結(jié)構(gòu)數(shù)組中的數(shù)據(jù)以文件的形式存盤)
(8)從文件中讀入DVD影片數(shù)據(jù)(將已存盤的文件讀入內(nèi)存,進(jìn)行管理)
第二篇:C語(yǔ)言課程設(shè)計(jì)要求及參考題目
《程序設(shè)計(jì)課程設(shè)計(jì)》要求及參考題目
一、目的:
本次課程設(shè)計(jì)是《程序設(shè)計(jì)基礎(chǔ)》課程的綜合實(shí)驗(yàn),作為課堂教學(xué)和課內(nèi)正常上機(jī)實(shí)驗(yàn)的補(bǔ)充。
通過對(duì)《程序設(shè)計(jì)基礎(chǔ)》課程的學(xué)習(xí),學(xué)生已初步掌握C語(yǔ)言的基本概念、結(jié)構(gòu)化程序設(shè)計(jì)的基本方法,但是實(shí)際編程和上機(jī)調(diào)試程序的能力還遠(yuǎn)遠(yuǎn)不足。通過《程序設(shè)計(jì)課程設(shè)計(jì)》,加強(qiáng)學(xué)生自主學(xué)習(xí)、收集資料和動(dòng)手編程的能力,為后續(xù)專業(yè)課程打好基礎(chǔ)。
二、實(shí)驗(yàn)安排:
? 課程設(shè)計(jì)內(nèi)容和要求的安排與講解在課內(nèi)時(shí)間進(jìn)行。
? 上機(jī)機(jī)時(shí)安排:共一周,除周三下午外,每天全天在機(jī)房上機(jī),不足部分自行安排。
三、課程設(shè)計(jì)說(shuō)明:
? 本次課程設(shè)計(jì)平臺(tái)使用
? 每人一題。
? 本次課程設(shè)計(jì)要求每個(gè)程序要調(diào)試通過;課程設(shè)計(jì)結(jié)束后,每人提交課程設(shè)計(jì)成果如下:
? 程序一套,要求演示,演示時(shí)采用答辯形式,同學(xué)邊演示
邊講解編程思路。
? 課程設(shè)計(jì)報(bào)告一份,報(bào)告中可不包括源代碼。
? 源代碼以提交的源代碼要求加注釋。(以
附件的形式提交至wtwbylw@163.com,每人一個(gè)文件夾,文件夾命名方式為:班級(jí)_學(xué)號(hào)_姓名,以班級(jí)為單位打包發(fā)
送至郵箱)
四、評(píng)分標(biāo)準(zhǔn)
? 根據(jù)平時(shí)上機(jī)考勤;注重平時(shí)上機(jī)情況,教師要不定期檢查學(xué)
生進(jìn)度,學(xué)生不得以自己有私人電腦為借口而不來(lái)上機(jī)。
? 根據(jù)程序運(yùn)行結(jié)果;
? 根據(jù)《程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告》,學(xué)生能對(duì)教師的提問熟練地解
釋清楚。
五、參考題目
要求:
1.編寫程序,實(shí)現(xiàn)某信息處理的過程。數(shù)據(jù)在程序中用數(shù)組、結(jié)構(gòu)體或共用體中的至少一種形式表示。程序從鍵盤或文件輸入,將處理結(jié)果存儲(chǔ)在文件中。
2.題目要有實(shí)際應(yīng)用背景,例如:簡(jiǎn)單計(jì)算器,字符串比較函數(shù)。
3.編寫的代碼要有一定規(guī)模,至少200行,完成至少3項(xiàng)子功能(函數(shù))。
4.周一上午確定題目,題目定后,不得隨意修改。
選題一:學(xué)生信息管理系統(tǒng)設(shè)計(jì)
學(xué)生信息包括:學(xué)號(hào),姓名,年齡,性別,出生年月,地址,電話,E-mail等。試設(shè)計(jì)一學(xué)生信息管理系統(tǒng),使之能提供以下功能:
(1)學(xué)生信息錄入功能(學(xué)生信息用文件保存)---輸入
(2)學(xué)生信息瀏覽功能---輸出
(3)查詢、排序功能---算法
1)按學(xué)號(hào)查詢
2)按姓名查詢
(4)學(xué)生信息的刪除與修改
選題二:通信錄
編寫一個(gè)通信錄管理程序,要求通信錄中包括姓名,通信地址,郵政編碼和聯(lián)系電話。功能:
(1)顯示通信錄的所有信息。
(2)程序中可以對(duì)通信錄進(jìn)行添加
(3)可以刪除已有的信息
(4)根據(jù)姓名或者聯(lián)系電話(2個(gè)都能實(shí)現(xiàn)),可以查找該條記錄。
選題三:學(xué)生成績(jī)記錄簿設(shè)計(jì)
編制一個(gè)C語(yǔ)言成績(jī)記錄簿,每個(gè)學(xué)生信息包括:學(xué)號(hào)、姓名、C語(yǔ)言成績(jī)。具體功能:
(1)創(chuàng)建一個(gè)文本文件用來(lái)記錄學(xué)生信息,輸入至少30名學(xué)生的信息,保存在文本文件中;
(2)將文本文件中的數(shù)據(jù)讀出,按學(xué)號(hào)或姓名查詢成績(jī);
(3)能添加成績(jī)記錄;
(4)能修改指定姓名或?qū)W號(hào)的學(xué)生的成績(jī);
(5)顯示輸出60分以下、60~79、80~89、90分以上各分?jǐn)?shù)段的學(xué)生信息,顯示及格率和平均分,顯示最高分和最低分,顯示所有學(xué)生的排名(不能改變學(xué)生的學(xué)號(hào)順序);
(6)以上信息能保存在原文本文件中。
選題四:學(xué)生選修課程系統(tǒng)設(shè)計(jì)
假定有n門課程,每門課程有:課程編號(hào),課程名稱,課程性質(zhì)(公共課、必修課、選修課),總學(xué)時(shí),授課學(xué)時(shí),實(shí)驗(yàn)或上機(jī)學(xué)時(shí),學(xué)分,開課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課。試設(shè)計(jì)一選修課程系統(tǒng),使之能提供以下功能:
1、系統(tǒng)以菜單方式工作
2、課程信息錄入功能(課程信息用文件保存)--輸入
3、課程信息瀏覽功能--輸出
4、課程信息查詢功能--算法
查詢方式
按學(xué)分查詢
按課程性質(zhì)查詢
5、學(xué)生選修課程(可選項(xiàng))
選題五:職工工作量統(tǒng)計(jì)系統(tǒng)設(shè)計(jì)
編寫一個(gè)程序,該程序能輸入職工工號(hào)和完成的產(chǎn)品數(shù)量,程序允許同一職工有多次輸入,由程序?qū)ζ渫瓿傻漠a(chǎn)品數(shù)量實(shí)現(xiàn)累計(jì)。程序按完成數(shù)量對(duì)他們排序,并確定他們的名次。按完成的產(chǎn)品數(shù)量由多到少的順序,輸出名次、同一名次的職工人數(shù)及他們的工號(hào)(工號(hào)由小到大順序輸出)。要求程序用有序鏈表存儲(chǔ)數(shù)據(jù)信息。
選題六:?jiǎn)雾?xiàng)選擇題標(biāo)準(zhǔn)化考試系統(tǒng)設(shè)計(jì)
一、功能要求:
1、用文件保存試題庫(kù)。(每個(gè)試題包括題干、4個(gè)備選答案、標(biāo)準(zhǔn)答案)
2、試題錄入:可隨時(shí)增加試題到試題庫(kù)中
3、試題抽?。好看螐脑囶}庫(kù)中可以隨機(jī)抽出N道題(N由鍵盤輸入)
4、答題:用戶可實(shí)現(xiàn)輸入自己的答案
5、自動(dòng)判卷:系統(tǒng)可根據(jù)用戶答案與標(biāo)準(zhǔn)答案的對(duì)比實(shí)現(xiàn)判卷并給出成績(jī)。
選題七:職工信息管理系統(tǒng)設(shè)計(jì)
職工信息包括職工號(hào)、姓名、性別、年齡、學(xué)歷、工資、住址、電話等(職工號(hào)不重復(fù))。
試設(shè)計(jì)一職工信息管理系統(tǒng),使之能提供以下功能:
1、職工信息錄入功能(職工信息用文件保存)--輸入
2、職工信息瀏覽功能--輸出
3、職工信息查詢功能--算法
查詢方式
按學(xué)歷查詢等
按職工號(hào)查詢等
4、職工信息刪除、修改功能(可選項(xiàng))
選題八:機(jī)房收費(fèi)管理系統(tǒng)
(1)輸入功能:輸入若干名學(xué)生的學(xué)號(hào)、班級(jí)、姓名、開始上機(jī)時(shí)間和結(jié)束上機(jī)時(shí)間。
(2)計(jì)算功能:計(jì)算每個(gè)學(xué)生的上機(jī)費(fèi)用(計(jì)算公式:上機(jī)費(fèi)用=(結(jié)束上機(jī)時(shí)間-開始上機(jī)時(shí)間)*收費(fèi)標(biāo)準(zhǔn),(以分鐘為單位))
(3)修改功能:修改學(xué)生上機(jī)的個(gè)人檔案(如:增添或刪除)
(4)查詢功能:按條件(班級(jí)、學(xué)號(hào)、姓名)查詢學(xué)生上機(jī)信息,并能顯示查詢學(xué)生的相應(yīng)全部檔案。
選題九:校際運(yùn)動(dòng)會(huì)管理系統(tǒng)
初始化輸入:N-參賽學(xué)??倲?shù),M-男子競(jìng)賽項(xiàng)目數(shù),W-女子競(jìng)賽項(xiàng)目數(shù)
各項(xiàng)目名次取法有如下幾種:
取前5名:第1名得分7,第2名得分5,第3名得分3,第4名得分2,第5名得分1;
取前3名:第1名得分5,第2名得分3,第3名得分2;
用戶自定義:各名次權(quán)值由用戶指定。
2.由程序提醒用戶填寫比賽結(jié)果,輸入各項(xiàng)目獲獎(jiǎng)運(yùn)動(dòng)員的信息。
3.所有信息記錄完畢后,用戶可以查詢各個(gè)學(xué)校的比賽成績(jī),生成團(tuán)體總分報(bào)表,查看參賽學(xué)校信息和比賽項(xiàng)目信息等。
第三篇:C語(yǔ)言課程設(shè)計(jì)
C語(yǔ)言課程設(shè)計(jì)
飛機(jī)空戰(zhàn)小游戲
一、實(shí)驗(yàn)環(huán)境
運(yùn)行系統(tǒng) WINDOWSXP 編程工具C++6.0 地點(diǎn) 程序設(shè)計(jì)與仿真實(shí)驗(yàn)室
桌號(hào)19電腦IP地址221.12.10.218
二、實(shí)驗(yàn)?zāi)康暮鸵?實(shí)驗(yàn)?zāi)康模?/p>
(1)使學(xué)生進(jìn)一步理解和掌握課堂上所學(xué)各種基本抽象數(shù)據(jù)類型的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)和操作算法。
(2)使學(xué)生進(jìn)一步掌握程序設(shè)計(jì)、編寫、調(diào)試能力。(3)使學(xué)生了解軟件開發(fā)的基本步驟和內(nèi)容。
實(shí)驗(yàn)要求::飛機(jī)空戰(zhàn)小游戲。功能要求:
1)有主菜單界面,能讓用戶選擇開始、退出、難度等級(jí)、查看用戶積分功能;
2)飛機(jī)能通過A、S、D、W或上下左右鍵控制移動(dòng)方向,使用空格鍵發(fā)射子彈;
3)屏幕隨機(jī)出現(xiàn)從上到下的敵方子彈; 4)當(dāng)打中敵方子彈時(shí),積分加1;
5)當(dāng)敵方子彈打正飛機(jī)時(shí),游戲結(jié)束,并提示用戶是否保存記錄(記錄包括用戶名及積分值),保存后退回到主菜單;
6)當(dāng)選擇主菜單中的“查看用戶積分”選項(xiàng)時(shí),進(jìn)入第二級(jí)菜單,用戶可查看全部用戶積分記錄,也可僅查看積分最高者,也可根據(jù)用戶輸入的用戶名查看;(此處要求使用到鏈表,用于臨時(shí)存儲(chǔ)用戶積分?jǐn)?shù)據(jù));(對(duì)鏈表的查找操作)
7)所有用戶積分信息使用文件進(jìn)行永久性保存; 8)用戶選擇“難度等級(jí)”,可設(shè)定游戲不同難度,難度越高,出現(xiàn)敵方子彈數(shù)目及間隔將增加。
三、實(shí)驗(yàn)內(nèi)容和結(jié)果
系統(tǒng)總體設(shè)計(jì):編寫出c語(yǔ)言代碼,運(yùn)行程序,并調(diào)試程序,最終實(shí)現(xiàn)游戲的功能。本程序主要包含游戲控制函數(shù)、設(shè)置是否繼續(xù)游戲函數(shù)、輸出函數(shù)、子彈移動(dòng)函數(shù)、敵機(jī)移動(dòng)函數(shù)、設(shè)置函數(shù)、菜單函數(shù)等7個(gè)主要函數(shù),包含了不同的功能,對(duì)原來(lái)的程序作出了很大的改進(jìn),用到的主要語(yǔ)句有if語(yǔ)句,for語(yǔ)句、while語(yǔ)句、printf語(yǔ)句、switch語(yǔ)句等等,添加了顏色函數(shù)。
系統(tǒng)模塊設(shè)計(jì):包含游戲控制函數(shù)、設(shè)置是否繼續(xù)游戲函數(shù)、輸出函數(shù)、子彈移動(dòng)函數(shù)、敵機(jī)移動(dòng)函數(shù)、設(shè)置函數(shù)、菜單函數(shù)等7個(gè)主要函數(shù),其中是否繼續(xù)游戲函數(shù),菜單函數(shù)主要運(yùn)用了SWITCH語(yǔ)句和If語(yǔ)句,子彈移動(dòng)函數(shù),敵機(jī)移動(dòng)函數(shù)通過數(shù)組內(nèi)各數(shù)值的變化來(lái)完成,設(shè)置函數(shù)主要用PRINTF和SCANF語(yǔ)句進(jìn)行各項(xiàng)數(shù)值的設(shè)置,游戲控制函數(shù)使用if函數(shù),kbhit()函數(shù),switch函數(shù)組合控制數(shù)組中飛機(jī)進(jìn)行的移動(dòng)和圖案的變換。最后用打印數(shù)組的方式打印出數(shù)組變換。最后運(yùn)用SWITCH函數(shù)進(jìn)行各項(xiàng)菜單內(nèi)容的操作。
實(shí)驗(yàn)的測(cè)試和結(jié)果:
四、實(shí)驗(yàn)中的問題及心得
通過本次試驗(yàn),使我對(duì)c語(yǔ)言有了更深一層次的了解,對(duì)for語(yǔ)句、while語(yǔ)句、printf語(yǔ)句、switch語(yǔ)句、顏色函數(shù)等等的了解及使用更加詳細(xì)了一些,明白了這些語(yǔ)句的用法,明確了c語(yǔ)言的使用環(huán)境,功能。同時(shí)我了解到了一些方法來(lái)實(shí)現(xiàn)一些C語(yǔ)言作為一個(gè)基礎(chǔ)性編程語(yǔ)言是我們?cè)谝院缶幊讨胁豢苫蛉钡恼Z(yǔ)言,使用率肯定會(huì)進(jìn)一步增高。掌握了c語(yǔ)言就相當(dāng)于掌握了一門技術(shù),同時(shí)c語(yǔ)言相對(duì)而言簡(jiǎn)單一些,更容易理解。自己雖然對(duì)這個(gè)小游戲進(jìn)行一部分的改造,但是我也感覺這只是其中的很很小的一部分,肯定會(huì)有更加強(qiáng)大的功能等待著我們?nèi)ジ纳啤?/p>
同時(shí),我也發(fā)現(xiàn)了自己很多的不足,需要進(jìn)一步加強(qiáng)這一方面的學(xué)習(xí),在數(shù)據(jù)結(jié)構(gòu)鏈表的使用上還很欠缺,無(wú)法使用鏈表進(jìn)行數(shù)據(jù)的讀取和輸入,還有在兩個(gè)程序的連接上還有困難,對(duì)于頭文件的理解不到位,鏈表的結(jié)構(gòu),定義,使用指針的方式??這些都需要提高。這些技能的欠缺導(dǎo)致了在 這個(gè)小游戲中無(wú)法順利完成有關(guān)用戶名和記錄的一些要求。??
附錄:程序清單
#include
void movebul(int [][N]);//子彈移動(dòng)函數(shù) void movepla(int [][N]);//敵機(jī)移動(dòng)函數(shù) void setting(void);//設(shè)置函數(shù) void menu();//菜單 int scr[50][N]={0},pl=9,width=15,speed=16,density=40,score=0,death=0,length=18,y=0,x=5,z=15,life=1,max=0;//全局變量:界面、我機(jī)初始位、界面寬度、敵機(jī)速度、敵機(jī)密度、得分、死亡,子彈,飛機(jī),敵機(jī)初始圖案,生命
char name[N];char first[N];void main(){ menu();getch();}
void print(int a[][N])//輸出函數(shù) { int i,j;system(“cls”);for(i=0;i a[i][width-1]=4; for(j=0;j { if(a[i][j]==0)printf(“ ”); if((a[i][j]==1)&&(x<15))printf(“%c”,x);//輸出我機(jī)的符號(hào) if((a[i][j]==2)&&(z<35))printf(“%c”,z);//子彈 if((a[i][j]==3)&&(y<4))printf(“%c”,y+1);//輸出敵機(jī)符號(hào) if(i==1&&j==width-1)printf(“總積分:%d”,score);//顯示得分 if(i==2&&j==width-1)printf(“已經(jīng)死亡了%d 次,剩余 %d 條命”,death,life-death);//右上角顯示死亡次數(shù) if(i==3&&j==width-1)printf(“普通按鍵:AD控制左右飛行”); if(i==4&&j==width-1)printf(“ W 發(fā)射子彈”);if(i==5&&j==width-1)printf(“特殊按鍵:+-號(hào)加減敵機(jī)速度”);if(i==6&&j==width-1)printf(“ /*號(hào)單列敵機(jī)密度減小增大(均有限制)”); if(i==7&&j==width-1)printf(“VIP按鍵:X鍵變化飛機(jī)圖案,Y鍵變化敵機(jī)圖案”); if(i==8&&j==width-1)printf(“tZ鍵變化子彈圖案,P鍵增加生命(均有限制)”); if(i==9&&j==width-1)printf(“注意:向下移動(dòng)后按其他方向鍵飛機(jī)顯現(xiàn)”); } printf(“n”);} } void movebul(int a[][N]){ int i,j;for(i=0;i { if(i==0&&a[i][j]==2) a[i][j]=0; if(a[i][j]==2) { if(a[i-1][j]==3)//加分 { score+=1; printf(“7”); } a[i][j]=0,a[i-1][j]=2; } } } void movepla(int a[][N]){ int i,j;for(i=length-1;i>=0;i--)//從最后一行往上是為了避免把敵機(jī)直接沖出數(shù)組。 for(j=0;j if(i==length-1&&a[i][j]==3) a[i][j]=0;//消除敵機(jī),在最低層 if(a[i][j]==3)a[i][j]=0,a[i+1][j]=3;//敵機(jī)移動(dòng) } if(a[length-2][pl]==3&&a[length-1][pl]==1)death++;//死亡 } void continuegame()//繼續(xù)游戲 { printf(“用戶%s”,name);printf(“你的得分是%dn”,score);if(score==0)printf(“tttt 恭喜你刷新了最低記錄na”,score);if((score>0)&&(score<20)) printf(“tttt 回家再練 練吧na”,score);if(score>19) printf(“tttt 你真厲害 na”,score);printf(“游戲結(jié)束n”);printf(“按y鍵繼續(xù)游戲,空格鍵退出游戲(y/n)?n”);printf(“ttt”);switch(getch())//是否要繼續(xù)游戲 { case 'y': case 'Y':system(“cls”),death=0,score=0,life=1,x=5,y=0,z=15;menu();break;} } void setting(void)//設(shè)置函數(shù) { system(“cls”);//清屏 printf(“n 輸入游戲界面的大?。J(rèn)3):1-10 ”);scanf(“%d”,&width);width=(width+1)*5;printf(“n 請(qǐng)輸入敵機(jī)密度大?。J(rèn)3):1-5 ”);scanf(“%d”,&density);density=(7-density)*10;printf(“n 輸入敵機(jī)的飛行速度大?。J(rèn)3):1-10 ”);scanf(“%d”,&speed);speed=(11-speed)*2;printf(“n 輸入我機(jī)的生命(默認(rèn)1):1-100 ”);scanf(“%d”,&life);printf(“n 輸入飛機(jī)的圖案(默認(rèn)1):1-2 ”);scanf(“%d”,&x);x=x+4;printf(“n 輸入子彈的圖案(默認(rèn)1):1-10 ”);scanf(“%d”,&z);z=z+14;printf(“n 輸入敵機(jī)的圖案(默認(rèn)1):1-3 ”);scanf(“%d”,&y);y=y-1;} void run(){ int i=0,j=0,k=0,b=0;printf(“請(qǐng)輸入用戶名:”);scanf(“%s”,name);printf(“您的用戶名是:%s”,name);if(getch()==27)setting();printf(“游戲說(shuō)明:按AWSD控制我機(jī)左右飛行,空格鍵發(fā)射子彈n特殊按鍵:-號(hào)敵機(jī)減速,+號(hào)敵機(jī)加速n特殊按鍵:/號(hào)單列敵機(jī)密度減小,*號(hào)單列敵機(jī)密度增大n”);printf(“VIP按鍵:X鍵變化飛機(jī)圖案,Y鍵變化敵機(jī)圖案ntZ鍵變化子彈圖案,P鍵增加生命n”);printf(“任意鍵開始游戲,esc鍵進(jìn)入游戲設(shè)置n”);printf(“游戲時(shí)也可更改游戲設(shè)置任意鍵開始nn”);system(“color a”);//設(shè)置背景顏色 if(getch()==27)setting();scr[length-1][pl]=1;//我方飛機(jī)初始位置 scr[0][5]=3;while(death { if(kbhit()) switch(getch())//控制設(shè)置按鍵 { case 'a': case 'A':if(pl>0) scr[length-1][pl]=0,scr[length-1][--pl]=1;break; case 'd': case 'D':if(pl scr[length-1][pl]=0,scr[length-1][++pl]=1;break;case 'W': case 'w':if(length>10) { scr[length-1][pl]=0,scr[length-2][pl]=1; length=length-1; };break; case '+':if(speed>2) { speed=speed-2; };break; case '-':speed=speed+1;break;case '*':if(density>5) { density=density-5; };break; case '/':density=density+10;break; case 'l':if(width<40) { width=width+2; };break; case 's':if(length<30) { scr[length-1][pl]=0; length=length+1; scr[length-1][pl]='5'; };break; case ' ':scr[length-2][pl]=2;break; case 'y':y=(y+1)%4;break; case 'x':x=(x)%2+5;break; case 'z':if(z<25) { z=z+1; } else z=15;break; case 'p':life=life+1;break;} if(++j%density==0)//控制生產(chǎn)敵機(jī)的速度 { j=0; srand(time(NULL));//產(chǎn)生隨機(jī)數(shù) scr[0][rand()%width]=3; scr[rand()%3][rand()%(width+2)]=3; scr[rand()%2][rand()%(width+1)]=3; scr[rand()%4][rand()%(width+4)]=3;//生成隨機(jī)敵方飛機(jī) } if(++i%speed==0)//控制敵機(jī)移動(dòng)速度,相對(duì)于子彈移動(dòng)速度 movepla(scr);//飛機(jī)移動(dòng) movebul(scr);//子彈移動(dòng) print(scr);//繪制游戲畫面 } if(score>=max){ max=score; for(i=0;i { name[i]=first[i]; } } if(score score=score;} continuegame();getch();} void menu(){ printf(“n1:游戲設(shè)置n2:游戲說(shuō)明n3:開始游戲n4:查看用戶信息n5:退出游戲n”); switch(getch()){ case '1': setting();menu();break; case '2':printf(“游戲說(shuō)明:按AWSD控制我機(jī)左右飛行,空格鍵發(fā)射子彈n特殊按鍵:-號(hào)敵機(jī)減速,+號(hào)敵機(jī)加速n特殊按鍵:/號(hào)單列敵機(jī)密度減小,*號(hào)單列敵機(jī)密度增大n”);printf(“VIP按鍵:X鍵變化飛機(jī)圖案,Y鍵變化敵機(jī)圖案ntZ鍵變化子彈圖案,P鍵增加生命n”);printf(“ 任意鍵開始游戲,esc鍵進(jìn)入游戲設(shè)置n”);printf(“ 游戲時(shí)也可更改游戲設(shè)置”);menu();break; case '3':run();menu();break; case '4':seerecord();menu();break; case '5':exit(0);break;default:menu();break;} } seerecord(){ printf(“最高紀(jì)錄為%s,%d”,first[N],max);} C語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì) 設(shè)計(jì)題目:專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):2010級(jí)計(jì)算機(jī)二班組長(zhǎng)姓名:馬得才【P101712944】成員姓名:孫麗欣【P101712927】 趙廣峰【P101712926】 遲成凱【P101712928】 冶成意【P101712930】 2010年5月20日 題目: 指導(dǎo)教師:普措才仁 一、案例需求 二、案例分析 三、案例設(shè)計(jì) 四、案例實(shí)現(xiàn) 五、參考文獻(xiàn) #include int num1; char name1[20]; int score; int nelepeo;//課程已選人數(shù) int Melepeo;//課程人數(shù)上限 struct couse * next;}; int student(); //學(xué)生登陸 int teacher(); //教師登陸 struct student//學(xué)生信息結(jié)構(gòu)體 { int num2; char name2[20]; int nelenum[50];//已選課程編號(hào) int nelen;//已選課程數(shù)量 struct student * next;}; void Ms(){ for(kk1=0;kk1<1100;kk1++) for(kk2=0;kk2<1200;kk2++) for(kk3=0;kk3<1200;kk3++);} void keyboardc()//錄入課程子函數(shù)(從鍵盤錄入){ void intoc();struct couse *p1,*p2;N1=0;p1=p2=(struct couse*)malloc(sizeof(struct couse));printf(“n課程編號(hào):”);fflush(stdin);scanf(“%d”,&p1->num1);printf(“n課程名稱:”);scanf(“%s”,p1->name1);printf(“n學(xué)分:”);scanf(“%d”,&p1->score);printf(“n課程人數(shù)上限:”);scanf(“%d” ,&p1->Melepeo);printf(“ntttt輸入成功!”);p1->nelepeo=0;head1=NULL;while(p1->num1!=0){ N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse *)malloc(sizeof(struct couse)); printf(“n-----------------------------”); printf(“n課程編號(hào):(輸入0結(jié)束)”);scanf(“%d”,&p1->num1);printf(“n課程名稱:”);scanf(“%s”,p1->name1);printf(“n學(xué)分:”);scanf(“%d”,&p1->score);printf(“n課程人數(shù)上限:”);scanf(“%d” ,&p1->Melepeo); p1->nelepeo=0; printf(“ntttt輸入成功!”);} p2->next=NULL;intoc();} void filec()//錄入鍵盤子函數(shù)(從文件錄入){ void intoc(); FILE * fp; char filepath[20]; struct couse *p1,*p2; N1=0; printf(“輸入要讀入的文件路徑:”); getchar(); gets(filepath); if((fp=fopen(filepath,“r”))==NULL) { printf(“找不到%s文件!n”,filepath); exit(0); } p1=p2=(struct couse*)malloc(sizeof(struct couse)); fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); head1=NULL; while(!feof(fp)) { N1=N1+1; if(N1==1)head1=p1; else p2->next=p1; p2=p1; p1=(struct couse *)malloc(sizeof(struct couse)); fscanf(fp,“%d%s%d%d%d”,&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo); } p2->next=NULL; intoc();} void inputc()//錄入課程主函數(shù) { int i; printf(“ttt錄入課程信息n”); printf(“n1.從鍵盤錄入n”); printf(“2.從文件錄入n”); printf(“3.返回主菜單n”); printf(“請(qǐng)選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):keyboardc();break; case(2):filec();break; case(3):system(“cls”);return;break; //return } } void insertc(struct couse *incouse)//課程管理子函數(shù)(增加課程){ void intoc(); struct couse *p0,*p1,*p2; p1=head1; p0=incouse; if(head1==NULL) { head1=p0; p0->next=NULL; } else { while((p0->num1 > p1->num1)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num1 <= p1->num1) { if(head1==p1)head1=p0; else p2->next=p0; p0->next=p1; } else { p1->next=p0; p0->next=NULL; } } N1=N1+1; intoc();} void delc(int num1)//課程管理子函數(shù)(刪除課程){ void intoc(); struct couse *p1,*p2; if(head1==NULL) { printf(“n沒有課程,無(wú)法刪除!n”); goto end; } p1=head1; while(num1!=p1->num1 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num1==p1->num1) { if(p1==head1)head1=p1->next; else p2->next=p1->next; printf(“已刪除該編號(hào)課程!n”); N1=N1-1; } else printf(“無(wú)該編號(hào)的課程!n”); end:; intoc();} void managementc()//課程管理主函數(shù) { struct couse * incouse; struct couse *p1; int i,num1; printf(“ttt課程管理n”); printf(“1.新增課程n”); printf(“2.刪除課程n”); printf(“3.返回主菜單n”); printf(“請(qǐng)選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1): { incouse=(struct couse *)malloc(sizeof(struct couse)); printf(“n課程編號(hào):”); fflush(stdin); scanf(“%d”,&p1->num1); printf(“n課程名稱:”); scanf(“%s”,p1->name1); printf(“n學(xué)分:”); scanf(“%d”,&p1->score); printf(“n課程人數(shù)上限:”); scanf(“%d” ,&p1->Melepeo); printf(“ntttt輸入成功!”); incouse->nelepeo=0; insertc(incouse); break; } case(2): { printf(“請(qǐng)輸入要?jiǎng)h除課程的編號(hào):n”); scanf(“%d”,&num1); delc(num1); break; } case(3):system(“cls”);return;break; } } void keyboards()//錄入學(xué)生信息子函數(shù)(從鍵盤錄入){ void intos(); int i; struct student *p1,*p2; N2=0; p1=p2=(struct student *)malloc(sizeof(struct student)); printf(“n學(xué)生學(xué)號(hào):”); scanf(“%d”,&p1->num2); printf(“n學(xué)生姓名:”); scanf(“%s”,p1->name2); p1->nelen=0; for(i=0;i<50;i++)p1->nelenum[i]=0; head3=NULL; while(p1->num2!=0) { N2=N2+1; if(N2==1)head3=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(sizeof(struct student)); //return printf(“n學(xué)生學(xué)號(hào):(輸入0結(jié)束?。?; scanf(“%d”,&p1->num2); printf(“n學(xué)生姓名:”); scanf(“%s”,p1->name2); p1->nelen=0; for(i=0;i<50;i++)p1->nelenum[i]=0; } p2->next=NULL; intos();return;} void files()//錄入學(xué)生信息子函數(shù)(從文件錄入){ int i=0; FILE * fp; char filepath[20]; struct student *p1,*p2; N2=0; printf(“輸入要讀入的文件路徑:”); getchar(); gets(filepath); if((fp=fopen(filepath,“r”))==NULL) { printf(“找不到%s文件!n”,filepath); exit(0); } p1=p2=(struct student*)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); head3=NULL; while(!feof(fp)) { i=0; N2=N2+1; if(N2==1)head3=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); } p2->next=NULL;} void inputs()//錄入學(xué)生信息主函數(shù) { int i; printf(“nttt錄入學(xué)生信息n”); printf(“n1.從鍵盤錄入n”); printf(“2.從文件錄入n”); printf(“3.返回主菜單n”); printf(“請(qǐng)選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):keyboards();break; case(2):files();break; case(3):system(“cls”);return;break; } return 0;} void inserts(struct student * incouse)//學(xué)生信息管理子函數(shù)(填加學(xué)生信息){ void intos(); struct student *p0,*p1,*p2; p1=head3; p0=incouse; if(head3==NULL) { head3=p0; p0->next=NULL; } else { while((p0->num2 > p1->num2)&&(p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num2 <= p1->num2) { if(head3==p1)head3=p0; else p2->next=p0; p0->next=p1; } else { //return p1->next=p0; p0->next=NULL; } } N2=N2+1; intos();} void dels(int num2)//學(xué)生信息管理子函數(shù)(刪除學(xué)生信息){ void intos(); struct student *p1,*p2; if(head3==NULL) { printf(“n沒有該學(xué)生信息,無(wú)法刪除!n”); goto end; } p1=head3; while(num2!=p1->num2 && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num2==p1->num2) { if(p1==head3)head3=p1->next; else p2->next=p1->next; printf(“已刪除該學(xué)生信息!n”); N2=N2-1; } else printf(“無(wú)該學(xué)號(hào)的學(xué)生!n”); intos(); end:;} void managements()//學(xué)生信息管理主函數(shù) { struct student * incouse; int i,num2; printf(“ttt學(xué)生信息管理n”); printf(“1.新增學(xué)生信息n”); printf(“2.刪除學(xué)生信息n”); printf(“3.返回主菜單n”); printf(“請(qǐng)選擇(1~3):n”); scanf(“%d”,&i); switch(i) { case(1): { incouse=(struct student *)malloc(sizeof(struct student)); incouse->nelen=0; incouse->nelenum[0]=0; printf(“學(xué)生學(xué)號(hào)t學(xué)生姓名n”); scanf(“%d%s”,&incouse->num2,incouse->name2); inserts(incouse); break; } case(2): { printf(“請(qǐng)輸入要?jiǎng)h除學(xué)生的學(xué)號(hào):n”); scanf(“%d”,&num2); dels(num2); break; } case(3):system(“cls”);return;break; //return } } void elect(struct student * s)//選課 { void intos(); struct couse * p; int num1,i; printf(“請(qǐng)輸入要選課的編號(hào):n”); scanf(“%d”,&num1); for(i=0;s->nelenum[i]!=0;i++); s->nelenum[i]=num1; (s->nelen)++; p=head1; while(p->num1!=num1)p=p->next; (p->nelepeo)++; intos();} void cheak()//學(xué)生選課子函數(shù)(查詢可選課程){ char e; struct couse * c; struct student * s; int num2,i,j=0,t=0; printf(“請(qǐng)輸入你的學(xué)號(hào):”); scanf(“%d”,&num2); s=head3; while((s->num2!=num2)&&(s->next!=NULL))s=s->next; if(s->num2!=num2) { printf(“不存在你的信息,請(qǐng)進(jìn)入主菜單錄入你的信息!n”); goto end; } c=head1; printf(“你的可選課程編號(hào):n”); while(c!=NULL) { for(t=0,i=0;s->nelenum[i]!=0;i++) { if(c->num1==s->nelenum[i])t=1; } if(t==0 &&(c->nelepeo!=c->Melepeo)) { printf(“%dn”,c->num1); j++; } c=c->next; } if(j==0) { printf(“你已選完所有課程,無(wú)法再多選!n”); goto end; } printf(“選課(y/n)?:n”); getchar(); e=getchar(); i=0; while((e=='y')||(e=='Y')) { elect(s); printf(“繼續(xù)選課(y/n)?:n”); getchar(); e=getchar(); } end:;} void back(struct student * p)//退課 { void intos(); struct couse * p1; int num1,i,j; printf(“請(qǐng)輸入你要退掉的課程編號(hào):n”); scanf(“%d”,&num1); p1=head1; while(p1->num1!=num1)p1=p1->next; for(i=0;p->nelenum[i]!=num1;i++); for(j=i;p->nelenum[j]!=0;j++)p->nelenum[j]=p->nelenum[j+1]; p->nelenum[--j]=0; (p1->nelepeo)--; printf(“退課成功!n”); intos();} void hcheak()//學(xué)生選課子函數(shù)(查詢已選課程){ char c; struct couse * p0; struct student * p; int num2,i,f=0; printf(“請(qǐng)輸入學(xué)號(hào):n”); scanf(“%d”,&num2); p=head3; while(p->num2!=num2 && p!=NULL)p=p->next; if(p==NULL) { printf(“不存在你的信息,請(qǐng)回主菜單錄入信息:n”); goto end; } printf(“已選課程編號(hào):n”); if(p->nelenum[0]==0) { printf(“你還沒選課!n”); goto end; } for(i=0;p->nelenum[i]!=0;i++) { printf(“%dn”,p->nelenum[i]); p0=head1; while(p0->num1!=p->nelenum[i])p0=p0->next; f=f+p0->score; } printf(“總學(xué)分:%dn”,f); printf(“是否進(jìn)行退課(y/n)?”); getchar(); c=getchar(); while((c=='y')||(c=='Y')) { back(p); printf(“繼續(xù)退課(y/n)?”); getchar(); c=getchar(); (p->nelen)--; } end:;} void elective()//學(xué)生選課主函數(shù) { int i; printf(“ttt學(xué)生選課n”); printf(“1.查詢可選課程n”); printf(“2.查詢已選課程n”); printf(“3.返回主菜單n”); printf(“請(qǐng)輸入(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):cheak();break; case(2):hcheak();break; case(3): system(“cls”);return;break; // return } } void listc()//輸出課程信息 { struct couse * p; p=head1; printf(“課程編號(hào) 課程名稱 學(xué)分 課程已選人數(shù) 課程人數(shù)上限n”); while(p!=NULL) { printf(“%-8d%10s%6d%8d%12dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; } } void lists()//輸出學(xué)生信息 { struct student * p; p=head3; printf(“學(xué)生學(xué)號(hào) 學(xué)生姓名 已選課程數(shù)量n”); while(p!=NULL) { printf(“%-4d %10s %6dn”,p->num2,p->name2,p->nelen); p=p->next; } } void intoc()//存儲(chǔ)課程信息 { FILE * fp; struct couse * p; char filepath[30]; if((fp=fopen(“課程信息.dat”,“a+”))==NULL) { printf(“n保存失敗!”); exit(0); } p=head1; while(p!=NULL) { fprintf(fp,“%d %s %d %d %dn”,p->num1,p->name1,p->score,p->nelepeo,p->Melepeo); p=p->next; } fclose(fp); printf(“課程信息已保存成功!n”);} void intos()//存儲(chǔ)學(xué)生信息 { int i; FILE * fp; struct student * p; char filepath[30]; if((fp=fopen(“學(xué)生信息.dat”,“a+”))==NULL) { printf(“n保存失敗!”); exit(0); } p=head3; while(p!=NULL) { fwrite(p,sizeof(struct student),1,fp); p=p->next; } fclose(fp); printf(“學(xué)生信息已保存成功!n”); printf(“ntttt選擇菜單:”); printf(“ntttt1.繼續(xù)添加ntttt2.返回主菜單:”); printf(“請(qǐng)選擇:”); scanf(“%d”,&i); switch(i) { case 1:inputs();break; case 2:teacher();break; default:printf(“n輸入有誤!n”);} } void store()//信息主函數(shù) { int i; printf(“tt系統(tǒng)信息查看及存儲(chǔ)n”); printf(“1.查看課程信息n”); printf(“2.查看學(xué)生信息n”); printf(“3.返回主菜單n”); printf(“請(qǐng)輸入(1~3):n”); scanf(“%d”,&i); switch(i) { case(1):listc();break; case(2):lists();break; case(3):system(“cls”);return;break; } } int main()//主函數(shù) //retuen { int i; FILE *fp; printf(“nttt歡迎使用學(xué)生選課系統(tǒng)!n”); printf(“n請(qǐng)選擇菜單:”); printf(“ntttt1.教師登陸ntttt2.學(xué)生登陸n”); printf(“請(qǐng)選擇:”); scanf(“%d”,&i); switch(i) { case 1:teacher();break; case 2:student();break; default:printf(“輸入有誤!”); } } int student() { int i; printf(“ntttt1.學(xué)生選課n”); printf(“ntttt2.系統(tǒng)信息查看及存儲(chǔ)n”); printf(“ntttt3.退出系統(tǒng)n”); printf(“請(qǐng)選擇:”); scanf(“%d”,&i); switch(i) { case 1: { system(“cls”); elective(); break; } case 2: { system(“cls”); store(); break; } default:printf(“輸入有誤!”); } } int teacher() { FILE *fp; int i; printf(“菜單:n”); printf(“1.錄入課程信息n”); printf(“2.課程管理n”); printf(“3.錄入學(xué)生信息n”); printf(“4.學(xué)生信息管理n”); printf(“5.系統(tǒng)信息查看n”); printf(“6.退出系統(tǒng)n”); if((fp=fopen(“課程信息.dat”,“rb”))==NULL) { printf(“n打開系統(tǒng)文件失??! n”); //fp=fopen(“信息.dat”,“rb”)); // } // if(feof(fp)) // { printf(“n還未添加課程信息,請(qǐng)?zhí)砑诱n程信息!n”); inputc(); } while(!feof(fp)) { emp1=(struct couse*)malloc(sizeof(struct couse)); if(emp1==NULL) { printf(“n分配內(nèi)存失敗!n”); return; } fread(emp1,sizeof(struct couse),1,fp); if(feof(fp))break; if(head1==NULL) { head1=emp1; head2=emp1; } else{ head2->next=emp1; head2=emp1; } head2->next=NULL; } fclose(fp); fp==NULL; if((fp=fopen(“學(xué)生信息.dat”,“rb”))==NULL) printf(“n打開系統(tǒng)文件失??!n”); // //if(feof(fp)==1) // { printf(“還未添加學(xué)生信息,請(qǐng)?zhí)砑訉W(xué)生信息!”); inputs(); while(!feof(fp)) { emp1=(struct student*)malloc(sizeof(struct student)); if(emp2==NULL) { printf(“n分配內(nèi)存失??!n”); return; } fread(emp2,sizeof(struct student),1,fp); if(feof(fp))break; if(head3==NULL) { head3=emp2; head4=emp2; } else{ head4->next=emp2; head4=emp2; } head4->next=NULL; } fclose(fp); fp==NULL; printf(“n請(qǐng)輸入菜單選項(xiàng)(1~6):n”); scanf(“%d”,&i); switch(i) { case(1): { system(“cls”); inputc(); break; } case(2): { system(“cls”); managementc(); break; } case(3): { system(“cls”); inputs(); break; } case(4): { system(“cls”); managements(); break; } case(5): { system(“cls”); store(); break; } case(6): { system(“cls”); printf(“感謝使用本系統(tǒng)!nn再見!n”); } } return 1; }第四篇:C語(yǔ)言課程設(shè)計(jì)范文
第五篇:C語(yǔ)言課程設(shè)計(jì)