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