第一篇:C語言課程設計(優質作業含運行截圖)
大連交通大學 軟件學院
C語言課程設計報告
SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING
C語言課程設計報告
Experiment Designing reporter
課程名稱 : C語言課程設計
英文名稱 : C Program Experiment Designing
專 業 :工商管理類+軟件工程095
學 號 :09********
姓 名 :@噠winci
指導教師 :陳**
日 期 : 2010年 7月12日至2010年7月22日
大連交通大學軟件學院
大連交通大學 軟件學院
C語言課程設計報告
SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING
《C語言課程設計》報告
C Program Experiment Designing
課程編號:01200308005
學時: 40學時 適用專業:軟件工程專業 授課單位:軟件學院
一、C語言課程設計目的及要求
目的:
根據課堂講授內容,學生做相應的自主練習,消化課堂所講解的內容;通過調試典型例題或習題積累調試C程序的經驗;通過完成輔導教材中的編程題,逐漸培養學生的編程能力、用計算機解決實際問題的能力。
要求:
1. 熟悉Turbo C 的編程環境、主要菜單功能。
2. 通過上機驗證運算符、表達式、運算規則、函數使用。3. 熟練使用C語言的典型語句編寫簡單程序。4. 調試典型例題或習題。5. 提高上機編程能力
二、實驗類型
設計類型
三、實驗學時
40學時
四、實驗設備
微型計算機、WINDOWS98以上版本的操作系統、Turbo C2.0 軟件一套
五、C語言課程參考教材:
1.C語言程序設計 清華大學出版社 馬靖善主編
2.譚浩強.C語言程序設計(第三版).北京:高等教育出版社,2002 大連交通大學 軟件學院
C語言課程設計報告
SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING
課程設計(報告)任務書
任務及要求:
1.設計(研究)內容和要求 研究內容:
(1).歌星大賽打分系統(2).五個國家名排序(3).謎語博士的難題(4).哪個大夫哪天值班(5).分辨黑與白(6)學生成績查詢系統 任務和要求:
(1).學習C語言基礎知識,掌握C語言編程和程序調試的基本技能。(2).對指導教師下達的題目進行系統分析。(3).根據分析結果完成系統設計。
(4).編程:在計算機上實現題目的代碼實現。(5).完成對該系統的測試和調試。(6).提交課程設計報告。(7).指標: 要求完成課程設計報告3千字以上(約二、三十頁).完成若干綜合性程序設計題目,每個綜合設計題目的語句行數的和在300行語句以上.2.原始依據
了解C語言的基礎知識,有一定的語言編程基礎,能夠熟練運用C語言進行程序設計。通過用C語言完成的題目,提高用C語言解決實際問題的能力。3.參考文獻
[1] 黃明等.C語言程序設計輔導教材.大連理工大學出版社,2006 [2] 馬靖善等.C語言程序設計.清華大學出版社,2005
大連交通大學 軟件學院
C語言課程設計報告
SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING
[3] 譚浩強.C語言程序設計(第二版).北京:高等教育出版社,2002
2010年7月20日 大連交通大學 軟件學院
C語言課程設計報告
SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING
目錄
錯誤!未定義書簽。歌星大賽打分系統
1.1 功能說明............................................................................錯誤!未定義書簽。1.2 設計說明............................................................................錯誤!未定義書簽。1.3 程序運行截圖....................................................................錯誤!未定義書簽。1.4源程序代碼.........................................................................錯誤!未定義書簽。2五個國家名排序............................................................................錯誤!未定義書簽。
2.1 功能說明............................................................................錯誤!未定義書簽。2.2 設計說明............................................................................錯誤!未定義書簽。2.3 程序運行截圖....................................................................錯誤!未定義書簽。2.4 源程序代碼........................................................................錯誤!未定義書簽。3謎語博士的難題............................................................................錯誤!未定義書簽。
3.1 功能說明............................................................................錯誤!未定義書簽。3.2 設計說明............................................................................錯誤!未定義書簽。3.3 程序運行截圖....................................................................錯誤!未定義書簽。3.4 源程序代碼........................................................................錯誤!未定義書簽。4哪個大夫哪天值班........................................................................錯誤!未定義書簽。
4.1 功能說明............................................................................錯誤!未定義書簽。4.2 設計說明………………………………………………………………………...4.3 程序運行截圖....................................................................錯誤!未定義書簽。4.4 源程序代碼........................................................................錯誤!未定義書簽。5分辨黑與白....................................................................................錯誤!未定義書簽。
5.1 功能說明............................................................................錯誤!未定義書簽。5.2 設計說明............................................................................錯誤!未定義書簽。5.3 程序運行截圖....................................................................錯誤!未定義書簽。5.4 源程序代碼........................................................................錯誤!未定義書簽。6學生成績查詢系統
6.1 功能說明............................................................................錯誤!未定義書簽。6.2 設計說明............................................................................錯誤!未定義書簽。6.3 程序運行截圖....................................................................錯誤!未定義書簽。6.4 源程序代碼........................................................................錯誤!未定義書簽。
大連交通大學 軟件學院
C語言課程設計報告
SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING 歌星大賽打分系統
1.1功能說明
在歌星大獎賽中,有10個評委為參賽的選手打分,分數為1-100分。選手最后得分為:去掉一個最高分和一個最低分后其余8個分數的平均值。編寫程序實現。
1.2 設計說明
從鍵盤上輸入評委的打分,用for循環結構求出分數中的最大值max、最小值min以及所有分數的和sum,最后輸出sum-max-min的值
1.3 程序運行截圖
1.4 源程序代碼
#include
大連交通大學 軟件學院
C語言課程設計報告
SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING
sum=0;/*將求累加和變量的初值置為0*/ for(i=1;i<=10;i++){ printf(“Input number %d=”,i);scanf(“%d”,&integer);/*輸入評委的評分*/ sum+=integer;/*計算總分*/ if(integer>max)max=integer;/*通過比較篩選出其中的最高分*/ if(integer 2.1 功能說明 輸入5個國名并按字母順序排列后輸出。 2.2 設計說明 主函數void main(): 從鍵盤上輸入各個國家的名字數組cs[5],然后用字符串運算符strcpy將數組cs[5]copy到st[20],再比較兩數組對應各元素,輸出 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING 2.3 程序運行截圖 2.4 源程序代碼 #include char st[20],cs[5][20]; int i,j,p; printf(“input country's name:n”); for(i=0;i<5;i++) gets(cs[i]); printf(“n”); for(i=0;i<5;i++) { p=i;strcpy(st,cs[i]); for(j=i+1;j<5;j++) if(strcmp(cs[j],st)<0)p=j; if(p!=i) { strcpy(st,cs[i]); strcpy(cs[i],cs[p]); strcpy(cs[p],st); } puts(cs[i]); } printf(“n”); getch();} 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING 謎語博士的難題 3.1功能說明 兩面族是荒島上的一個新民族,他們的特點是說話真一句假一句且真假交替。如果第一句為真,則第二句是假的;如果第一句為假的,則第二句就是真的,但是第一句是真是假沒有規律。 迷語博士遇到三個人,知道他們分別來自三個不同的民族:誠實族、說謊族和兩面族。三人并肩站在博士前面。 博士問左邊的人:“中間的人是什么族的?”,左邊的人回答:“誠實族的”。 博士問中間的人:“你是什么族的?”,中間的人回答:“兩面族的”。 博士問右邊的人:“中間的人究竟是什么族的?”,右邊的人回答:“說謊族的”。 判斷這三個人都是哪個民族的。 3.2設計說明 變量A=1表示:左邊的人是誠實族的(用C語言表示為A); 變量B=1表示:中間的人是誠實族的(用C語言表示為B); 變量C=1表示:右邊的人是誠實族的(用C語言表示為C); 變量AA=1表示:左邊的人是兩面族的(用C語言表示為AA); 變量BB=1表示:中間的人是兩面族的(用C語言表示為BB); 變量CC=1表示:右邊的人是兩面族的(用C語言表示為CC); 則左邊的人是說謊族可以表示為:A!=1且AA!=1(不是誠實族和兩面族的人)用C語言表示為:!A&&!AA 中間的人是說謊族可以表示為:B!=1且BB!=1 用C語言表示為:!B&&!BB 右邊的人是說謊族可以表示為:C!=0且CC!=1 用C語言表示為:!C&&!CC 根據題目中“三人來自三個民族”的條件,可以列出: a+aa!=2&&b+bb!=2&&c+cc!=2 且 a+b+c==1&&aa+bb+cc==1 根據左邊人的回答可以推出:若他們是誠實族,則中間的人也是誠實族;若他不是誠實族,則中間的人也不是誠實族。以上條件可以表示為: c&&!b&&!bb||(!c&&!cc)&&(b||bb)||!c&&cc 將全部邏輯條件聯合在一起,利用窮舉的方法求解,凡是使上述條件同時成立的變量取值就是題目的答案。 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING 3.3程序運行截圖 3.4源程序代碼 #include 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING 哪個大夫哪天值班 4.1功能說明 醫院有A、B、C、D、E、F、G七位大夫,在一星期內(星期一至星期天)每人要輪流值班一天。現在已知: A大夫比C大夫晚一天值班; D大夫比E大夫晚二天值班; B大夫比G大夫早三天值班; F大夫的值班日在B和C大夫的中間,且是星期四; 確定每天究竟是哪位大夫值班。 4.2設計說明 由題目可推出如下已知條件: F是星期四值班; B值班的日期在星期一至星期三,且三天后是G值班; C值班的日期在星期五至星期六,且一天后是A值班; E兩天后是D值班;E值班的日期只能在星期一至星期三; 在編程時用數組元素的下標1到7表示星期一到星期天,用數組元素的值分別表示A-F七位大夫。 4.3程序運行截圖 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING 4.4源程序代碼 #include #include int a[8]; char *day[]={“",”MONDAY“,”TUESDAY“,”WED“,”THUSDAY“,”FRIDAY“,”SATDAY“,”SUNDAY“};main() { int i,j,t; a[4]=6; for(i=1;i<=3;i++) { a[i]=2; if(!a[i+3])a[i+3]=7; else{ a[i]=0;continue;} for(t=1;t<=3;t++) { if(!a[t])a[t]=5; else continue; if(!a[t+2])a[t+2]=4; else{ a[t]=0;continue;} for(j=5;j<7;j++) { if(!a[j])a[j]=3; else continue; if(!a[j+1])a[j+1]=1; else{ a[j]=0;continue;} for(i=1;i<=7;i++) printf(”Doctor %d is on duty %s.n“,1+a[i]-1,day[i]); } } } getch();} 分辨黑與白 5.1功能說明 有A、B、C、D、E五人,每人額頭上都帖了一張黑或白的紙。五人對坐,每人都可以看到其它人額頭上的紙的顏色。五人相互觀察后,A說:“我看見有三人額頭上帖的是白紙,一人額頭上帖的是黑紙。” 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING B說:“我看見其它四人額頭上帖的都是黑紙。” C說:“我看見一人額頭上帖的是白紙,其它三人額頭上帖的是黑紙。” D說:“我看見四人額頭上帖的都是白紙。” E什么也沒說。 現在已知額頭上帖黑紙的人說的都是謊話,額頭帖白紙的人說的都是實話。判斷五人誰的額頭是帖白紙,誰的額頭是帖黑紙。 5.2設計說明 假如變量A、B、C、D、E表示每個人額頭上所帖紙的顏色,0 代表是黑色,1 代表是白色。根據題目中A、B、C、D四人所說的話可以總結出下列關系: A說: a&&b+c+d+e==3||!a&&b+c+d+e!=3 B說: b&&a+c+d+e==0||!b&&a+c+d+e!=0 C說: c&&a+b+d+e==1||!c&&a+b+d+e!=1 D說: d&&a+b+c+e==4||!d&&a+b+c+e!=4 窮舉每個人額頭所帖紙的顏色的所有可能的情況,代入上述表達式中進行推理運算,使上述表達式為“真”的情況就是正確的結果。 5.3程序運行截圖 5.4源程序代碼 #include 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING for(b=0;b<=1;b++)/*窮舉五個人額頭帖紙的全部可能*/ for(c=0;c<=1;c++)for(d=0;d<=1;d++)for(e=0;e<=1;e++)if((a&&b+c+d+e==3||!a&&b+c+d+e!=3)&&(b&&a+c+d+e==0||!b&&a+c+d+e!=0)&&(c&&a+b+d+e==1||!c&&a+b+d+e!=1)&&(d&&a+b+c+e==4||!d&&a+b+c+e!=4)){ printf(”A is pasted a piece of %s paper on his forehead.n“, a?”white“:”black“);printf(”B is pasted a piece of %s paper on his forehead.n“, b?”white“:”black“);printf(”C is pasted a piece of %s paper on his forehead.n“, c?”white“:”black“);printf(”D is pasted a piece of %s paper on his forehead.n“, d?”white“:”black“);printf(”E is pasted a piece of %s paper on his forehead.n“, e?”white“:”black“); } getch();} 學生成績查詢系統 6.1功能說明 查詢修改統計成績。 6.2設計說明 子函數: int SelectMainMenu()顯示并選擇主菜單。返回:被選擇的菜單項 void Show()成績查詢模塊 void Modify() 成績修改模塊 void Stat() 成績統計模塊 void StatAve(float *AveWuLi,float *AveShuXue,float *AveYingYu,float 統計平均分 int FindStudent(int num) 根據學號查找某一學生 void SetAllTotle() 計算所有學生總分 void SetTotle(int No) 計算第No個學生總分 *AveKuaiJi) 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING void ShowAllStudent() 顯示所有成績 void ShowTitle() 顯示表頭信息 void ShowStudent(int No) 顯示第No個的學生信息 主函數void main(): 運用switch語句,調用各個子函數完成學生成績的管理 6.3程序運行截圖 6.4源程序代碼 #include int num; char name[15]; char sex; float WuLi; float ShuXue; float YingYu; float KuaiJi; float totle;};/*定義6個學生的信息:*/ #define STU_NUMBER 6 /*宏定義學生數為6*/ struct student Stu[STU_NUMBER]={{101,”yuchen“,'F', 98,85,96,89,0},15 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING {102,”xiaotong“, 'F', 99,91,90,93,0},{103,”likanglong“,'M', 76,83,74,82,0},{104,”yinger“,'F', 88,76,89,77,0},{105,”fengjiao“, 'F', 97,100,94,96,0},{106,”sunyao“,'M', 87,89,66,84,0} };int SelectMainMenu();/*顯示并選擇主菜單。返回:被選擇的菜單項*/ /*所有的函數聲明:*/ void Show();/*成績查詢模塊*/ void Modify();/*成績修改模塊*/ void Stat();/*成績統計模塊*/ void StatAve(float *AveWuLi,float *AveShuXue,float *AveYingYu,float *AveKuaiJi);/*統計平均分*/ int FindStudent(int num);/*根據學號查找某一學生*/ void SetAllTotle();/*計算所有學生總分*/ void SetTotle(int No);/*計算第No個學生總分*/ void ShowAllStudent();/*顯示所有成績*/ void ShowTitle();/*顯示表頭信息*/ void ShowStudent(int No);/*顯示第No個的學生信息*/ void main(){ int isend=0,password=0;/*程序結束標志量,0表示不結束,1表示結束*/ SetAllTotle();/*計算所有學生總分*/ while(password!=666) {printf(”qing shu ru mi ma:n“); scanf(”%d“,&password); } while(1) { switch(SelectMainMenu())/*顯示并選擇主菜單*/ { case 1: /*成績查詢*/ Show(); /*調用成績查詢函數*/ break; case 2: /*成績修改*/ Modify();/*調用成績修改函數*/ break; case 3: /*成績統計*/ Stat(); /*調用成績統計函數*/ break; case 4: /*退出系統*/ printf(”nxie xie nin de shi yong,zai jian!nn“); isend = 1;/*設置程序結束標志*/ break; } if(isend)break;/*程序結束*/ 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING } } int SelectMainMenu()/*顯示并選擇主菜單。返回:被選擇的菜單項*/ { int menu_no=0; do /*顯示并選擇菜單*/ { printf(”=================================n“); printf(” printf(” zuo zhe:li yi mann“); printf(”=================================n“); printf(” zhu cai dan:n“); printf(” 1cheng ji xiu gain“); printf(” 3tui chu xi tongn“); printf(” qing xuan ze(1-4):“); scanf(”%d“,&menu_no); }while(menu_no<1 && menu_no>4); /*直到選擇出正確的序號*/ return menu_no;} void Show()/*成績查詢模塊*/ { int n,i; while(1) { printf(”n====cheng ji cha xun====n“); printf(”qing shu ru xue hao(shu ru 0 tui chu cheng ji cha xun,shu ru 1 cha xun quan bu):“); scanf(”%d“,&n); if(n==0)break;/*退出成績查詢模塊*/ if(n==1)ShowAllStudent();/*顯示所有成績*/ else if((i=FindStudent(n))>=0)/*找到學號為n的學生*/ { ShowTitle();/*顯示表頭信息*/ ShowStudent(i);/*顯示該學生信息*/ } else printf(”----zhao bu dao gai xue hao----n“); } } void Modify()/*成績修改模塊*/ { int n,i,a; while(1) { printf(”n====cheng ji xiu gai====n“); printf(”qing shu ru xue hao(shu ru 0 tui chu cheng ji xiu gai):“); 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING scanf(”%d“,&n); if(n==0)break;/*退出成績修改模塊*/ if((i=FindStudent(n))>=0)/*找到學號為n的學生*/ { ShowTitle();/*顯示表頭信息*/ ShowStudent(i);/*顯示該學生信息*/ printf(”qing shu ru yao xiu gai de cheng ji:n“);printf(”1 WuLin“);printf(”2 ShuXuen“);printf(”3 YingYun“);printf(”4 KuaiJin“);scanf(”%d“, &a);switch(a){case 1:printf(”qing shu ru WuLi cheng ji:n“); scanf(”%f“, &Stu[i].WuLi);break;case 2:printf(”qing shu ru ShuXue cheng ji:n“); scanf(”%f“, &Stu[i].ShuXue);break;case 3:printf(”qing shu ru YingYu cheng ji:n“); scanf(”%f“, &Stu[i].YingYu);break;case 4:printf(”qing shu ru KuaiJi cheng ji:n“); scanf(”%f“, &Stu[i].KuaiJi);break; default:printf(”shu ru cuo wu“); } SetTotle(i);/*計算該學生總分*/ printf(”----xiu gai cheng gong----n“); } else printf(”----zhao bu dao gai xue hao----n“); } } void Stat()/*成績統計模塊*/ { float AveWuLi, AveShuXue, AveYingYu, AveKuaiJi; StatAve(&AveWuLi, &AveShuXue, &AveYingYu, &AveKuaiJi);/*統計四門課的班級平均分*/ printf(”n====cheng ji tong ji====n“); printf(”xue sheng ren shu:%dn“, STU_NUMBER); printf(”WuLi ping jun fen:%6.2fn“, AveWuLi); printf(”ShuXue ping jun fen:%6.2fn“, AveShuXue); printf(”YingYu ping jun fen:%6.2fn“, AveYingYu); printf(”KuaiJi ping jun fen:%6.2fn“, AveKuaiJi);} /*統計四門課的班級平均分,用指針參數返回*/ void StatAve(float *AveWuLi, float *AveShuXue, float *AveYingYu, float *AveKuaiJi){ 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING int i; float sumWuLi=0, sumShuXue=0, sumYingYu=0, sumKuaiJi=0; for(i=0;i { sumWuLi += Stu[i].WuLi; sumShuXue += Stu[i].ShuXue; sumYingYu += Stu[i].YingYu; sumKuaiJi += Stu[i].KuaiJi; } *AveWuLi = sumWuLi / STU_NUMBER; *AveShuXue = sumShuXue / STU_NUMBER; *AveYingYu = sumYingYu / STU_NUMBER; *AveKuaiJi = sumKuaiJi / STU_NUMBER;} /*根據學號查找某一學生。返回:-1沒找到,>=0該學生所在數組的下標*/ int FindStudent(int num){ int i; for(i=0;i if(Stu[i].num==num)break; if(i else return-1;/*沒找到*/ } void SetAllTotle()/*計算所有學生總分*/ { int i; for(i=0;i SetTotle(i);} void SetTotle(int No)/*計算第No個學生總分*/ { Stu[No].totle = Stu[No].WuLi + Stu[No].ShuXue + Stu[No].YingYu +Stu[No].KuaiJi;} void ShowAllStudent()/*顯示所有成績*/ { int i; ShowTitle(); for(i=0;i ShowStudent(i);} void ShowTitle()/*顯示表頭信息*/ { printf(”n%12s%12s%12s%10s%10s%10s%10sn“,”xue hao“, ”xing ming“, ”xing bie“,”WuLi“,”ShuXue“,”YingYu“,”KuaiJi“,”Zong Fen“);} 大連交通大學 軟件學院 C語言課程設計報告 SOFTWARE INSTITUTEOF DALIAN JIAOTONG UNIVERSITY EXPERIMENT DESIGNING void ShowStudent(int No)/*顯示第No個的學生信息*/ { printf(”%12d%12s%12c%10g%10g%10g%10gn",Stu[No].num, Stu[No].name, Stu[No].sex, Stu[No].WuLi,Stu[No].ShuXue, Stu[No].YingYu, Stu[No].KuaiJi,Stu[No].totle);} 課程設計 設計一個學生成績管理系統,該系統記錄了全班同學語文數學英語3門課程的成績,并對成績進行管理。主要功能如下: 1)具備對成績的管理功能(添加、刪除、排序) 2)具備對課程成績的統計功能(最高分,最低分,平均分,及格率等) 3)具備按學號、姓名、或課程名查詢成績的功能。 4)具備將學生成績寫入文件,并從文件讀入學生成績的功能 備注:成績記錄以下信息:班級,學號,姓名,課程成績(百分制)。可以用能表示學生成績的結構體數組存儲數據。 設計要求 1.分析課程設計題目的要求 2.寫出詳細設計說明 3.編寫程序代碼,調試程序使其能正確運行 4.設計完成的軟件要便于操作和使用 5.設計完成后提交課程設計報告,課程設計報告內容包括:課程設計目的、設計任務與要求、設計說明書、設計成果和設計心得五個部分。 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語言課程設計
第四篇:C語言課程設計范文
第五篇:C語言課程設計