第一篇:C語言課程設(shè)計學(xué)生選課系統(tǒng)
題目
一、學(xué)生選課管理系統(tǒng)
第一部分:課程設(shè)計名稱、目的、要求
第二部分:程序總體設(shè)計思路
第三部分:程序功能劃分、圖示及流程圖
第四部分:程序設(shè)計數(shù)據(jù)、運行結(jié)果
第五部分:程序的優(yōu)缺點
第六部分:心得體會
第七部分:附錄(源程序)
第八部分:附錄(參考文獻(xiàn))
目錄
..............................................................................第一部分:課程設(shè)計名稱、目的、要求
名稱:學(xué)生選修課程系統(tǒng)設(shè)計
目的:運用C語言提高解決實際問題的能力 實驗環(huán)境:Microsoft Visual C++ 6.0 內(nèi)容:
假定有n門課程,每門課程有課程編號,課程名稱,課程性質(zhì),總學(xué)時,授課學(xué)時,實驗或上機學(xué)時,學(xué)分,開課學(xué)期等信息,學(xué)生可按要求(如總學(xué)分不得少于60)自由選課?!竟δ堋?/p>
系統(tǒng)以菜單方式工作?
課程信息錄入功能(課程信息用文件保存)--輸入? 課程信息瀏覽功能--輸出?
查詢功能:(至少一種查詢方式)--算法? 按學(xué)分查詢? 按課程性質(zhì)查詢? 學(xué)生選修課程(可選項)?
第二部分:程序總體設(shè)計思路
由于C語言是面對過程的語言,故我的設(shè)計思路是根據(jù)目標(biāo)程序運行的過程來編寫的。
具體的設(shè)計思路如下:
程序的要求是設(shè)計學(xué)生選修課管理系統(tǒng),對選修課程能夠進(jìn)行錄入和修改操作等,要求有菜單界面和退出功能。首先,考慮到程序的數(shù)據(jù)輸入,可以設(shè)置一個管理員登陸選項,通過該選項進(jìn)入管理員界面,進(jìn)行選修課的錄入和修改操作,最后將錄入的課程保存到相應(yīng)的文件中。然后定義各種函數(shù)的功能包括查看,查詢,刪除等。另一個為學(xué)生登陸界面,該界面學(xué)生可以進(jìn)行課程選擇和瀏覽查詢等操作。在進(jìn)行該操作之前需要對管理員保存的文件進(jìn)行讀取,然后對其中的內(nèi)容進(jìn)行查詢等,在學(xué)生選好課程以后,可以將其選好的課程保存于相應(yīng)的文件中,以便下次進(jìn)行修改。通過函數(shù)的層層調(diào)用來實現(xiàn)程序的邏輯結(jié)構(gòu)。中間通過文件的打開和關(guān)閉實現(xiàn)對文件內(nèi)部所包含的數(shù)據(jù)的操作。
整個程序的設(shè)計思路到此結(jié)束。
第三部分:程序功能劃分、圖示及流程圖
【功能模塊劃分及其流程圖】
本程序功能模塊根據(jù)程序設(shè)計的需求,綜合程序的實用性、人性化、智能化的考慮,將程序劃分為6個部分分別編寫,程序主體功能將由這9個部分來完成。這9個部分依次是:
1.登錄界面函數(shù);void login()2.學(xué)生登錄界面據(jù)函數(shù):void stu_login()3.管理員登錄界面函數(shù):void man_login()4.退出界面函數(shù):void bye_sys()
5.課程選擇函數(shù):void c_select()6.課程瀏覽函數(shù):void c_view()7.課程查詢函數(shù):void c_search()8.課程增加函數(shù):void c_add()9.課程刪除函數(shù):void c_delete()10.菜單函數(shù):void index()11.主函數(shù)部分; main()
總體設(shè)計:
學(xué)生選課系統(tǒng)管理員登錄學(xué)生登錄新增課程刪除課程課程瀏覽查詢課程學(xué)生選課課程瀏覽課程查詢c_add函數(shù)c_delete函數(shù)c_view函數(shù)c_search函數(shù)c_select函數(shù)c_view函數(shù)c_search函數(shù)
系統(tǒng)功能模塊圖
部分函數(shù)流程圖:
1、課程選擇函數(shù):
開始輸入要選擇的課程的編號j=0;j
2、課程查詢函數(shù)
開始輸入要查詢的課程的編號j=0;j 3、課程增加函數(shù) 開始輸入要增加的課程的編號j=0;j 4、課程刪除函數(shù) 開始輸入要刪除的課程的編號nj=0;j 本程序是一款應(yīng)用軟件,故數(shù)據(jù)設(shè)計、程序運行結(jié)果應(yīng)在程序的 運用中得以體現(xiàn),現(xiàn)在通過一個程序的運用事例來對程序運行結(jié)果進(jìn)行演示與實現(xiàn)。【軟件運用舉例】 1、程序開始界面如下: 選擇某個選項,如進(jìn)行管理員登錄,進(jìn)行課程的增加 進(jìn)入管理員界面: 2、再選擇所要進(jìn)行的操作,如進(jìn)行課程增加,結(jié)果如下: 下面可以進(jìn)行繼續(xù)增加課程或者退出: 3、選擇課程瀏覽,可以分頁查看相應(yīng)的課程信息: 第一頁: 第二頁: 4、課程查詢 查找結(jié)果: 4、管理員課程刪除操作: 刪除后可以進(jìn)行瀏覽,觀察刪除后的結(jié)果: 可見刪除后只有一條記錄。刪除操作完成正確。下面進(jìn)行學(xué)生操作的使用方法: 1、學(xué)生登陸界面: 2、選擇學(xué)生選課選項: 3、學(xué)生登陸也可進(jìn)行課程瀏覽和查詢函數(shù),其結(jié)果與管理員登陸相同,不再演示。 第五部分:程序的優(yōu)缺點 【程序的優(yōu)點】 算法是程序的靈魂,程序的優(yōu)點首先表現(xiàn)在算法上的優(yōu)點,其次才是功能上的。 [算法上的優(yōu)點]主要體現(xiàn)在以下三點: 1.程序采用main主函數(shù)方式設(shè)計,程序的主體的功能大都由該功能 完成。程序如此設(shè)計有利于程序的進(jìn)一步改進(jìn)及有助于程序執(zhí)行效率的提高。 2.程序?qū)ξ募?shù)據(jù)的讀寫采用了fread和fwrite塊讀寫函數(shù),能夠?qū)⑽募械臄?shù)據(jù)完全讀出,然后賦到定義的數(shù)組中,再在相應(yīng)的數(shù)組中進(jìn)行一系列操作,最終再寫入文件。 3.插入操作在本程序中將課程信息直接插入數(shù)組最后一個節(jié)點,從而減少了數(shù)據(jù)的相互移動,節(jié)省了時間。 [功能上的優(yōu)點] 主要體現(xiàn)在以下兩點: 1. 簡潔明了的程序菜單。程序主要采用了層次不同的菜單,相互獨立又相互聯(lián)系,巧妙相接,符合用戶的使用習(xí)慣與思維。2. 人性化的程序提示語言,程序提示語言較人性化,不僅大多為祈使語句、疑問句,而且提示明確,具有較強的明確的指導(dǎo)作用。程序提示不僅層次分明,提示方式多樣,而且提示信息井然有序,更加有利于用戶順利、準(zhǔn)確地看懂程序并進(jìn)行操作。 【程序的缺點】 主要表現(xiàn)在以下兩點: 1、本程序沒有進(jìn)行相應(yīng)的密碼操作,所以對于使用者來說可能存在比較大的不保密性。需要改善。 2、本程序沒有使用文本讀寫函數(shù)fscanf和fprintf,所以的到的課程文件和選課文件都是二進(jìn)制形式。 第六部分:心得體會 選課系統(tǒng)程序比起通訊錄程序來講好寫一些,由于本程序用到了數(shù)組,對于數(shù)組的操作掌握的比較熟練,所以在編寫程序的時候困難沒有那么多。 本程序在編寫的過程中用到了許多通訊錄中的模塊化設(shè)計和函數(shù)互相調(diào)用的思想,使得編寫比較方便和好用。 通過該系統(tǒng)的課程設(shè)計分析,我掌握了模塊化設(shè)計的方法,理解和運用了結(jié)構(gòu)化程序設(shè)計的思想和方法,掌握和提高了運用C語言進(jìn)行程序設(shè)計的能力。 程序設(shè)計的過程,實際上是確定解決問題的詳細(xì)步驟,而這個步驟通常叫做流程,在程序設(shè)計過程中理清楚整個問題的流程很重要,然后采取逐步細(xì)化的方法實現(xiàn)整個程序。 對于一個較大的應(yīng)用程序,一般不可能一次就設(shè)計出一個很完善的系統(tǒng)。通常要先設(shè)計滿足基本要求的系統(tǒng),然后再測試或者在使用的過程中不斷完善,慢慢地做成一個功能很完善選修課程管理系統(tǒng)。所以在進(jìn)行調(diào)試的時候需要對許多變量理解和掌握其變化規(guī)律等,這對于我更好的掌握visual C中調(diào)試的工具有很大的幫助。 總之經(jīng)過這次課程設(shè)計,我對c語言的使用和理解都有了很大的加深,對于編程的思想也有了很多新的理解和感受。 第七部分:附錄 一、參考文獻(xiàn): 1、李麗娟主編,C語言程序設(shè)計教程(第二版),人民郵電出版社 2、嚴(yán)蔚敏主編,數(shù)據(jù)結(jié)構(gòu)(C語言),清華大學(xué)出版社 3、崔單主編,C語言程序設(shè)計案例精粹,電子工業(yè)出版社 4、譚浩強主編,程序設(shè)計(第三版),清華大學(xué)出版社 二、源程序 #include“stdio.h” #include“stdlib.h” #include“windows.h” #include“string.h” void index();//首頁 void login();void bye_sys();//退出界面 void stu_login();//學(xué)生登錄菜單 void c_select();void c_view();//課程瀏覽 void c_add();//增加課程 void c_delete();void c_searchs();//學(xué)生查詢函數(shù) void c_searchm();//管理員查詢函數(shù) void c_viewm();//管理員瀏覽函數(shù) void c_views();//學(xué)生瀏覽函數(shù) struct course//定義課程結(jié)構(gòu)體 { int c_num; char c_name[20]; int c_score; int c_nelepeo;//課程已選人數(shù) int c_melepeo;//課程人數(shù)上限 };struct student { char s_number[10]; char s_password[10];};struct manager { char m_name[10];char m_password[10];}; void index()//首頁 { char input; printf(“nnttt*****************************n”); printf(“ttt 湖南大學(xué)學(xué)生選課系統(tǒng)n”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt*****************************nnn”); printf(“ttt**********設(shè)計者:劉曉斌******nnn”); input=getchar(); system(“cls”);} void login()//登陸界面 { void stu_login(); void man_login(); void bye_sys(); int input; do { system(“cls”); printf(“nnnt1.學(xué)生登錄n”); printf(“t2.管理員登陸n”); printf(“t3.退出本系統(tǒng)n”); printf(“t請選擇服務(wù)類別:”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3)//輸入數(shù)不等于選項的時候打印畫面 { printf(“nt輸入出錯!請重新選擇~n”); printf(“nt按任意鍵返回選擇頁面~nt”); getchar();getchar(); system(“cls”); } if(input==3)//如果輸入3退出系統(tǒng) { bye_sys(); } }while(input!=1&&input!=2&&input!=3); switch(input) { case 1:stu_login();break; case 2:man_login();break; } } void bye_sys()//退出界面 { exit(0);} void man_login(){ void c_add(); void c_delete(); void c_view(); void c_searchm(); int in; do { system(“cls”); printf(“nnt1.新增課程n”); printf(“t2.刪除課程n”); printf(“t3.課程瀏覽n”); printf(“t4.課程查詢n”); printf(“t5.退出n”); printf(“nnt請選擇服務(wù)種類:”); scanf(“%d”,&in); if(in!=1&&in!=2&&in!=3&&in!=4&&in!=5) { printf(“nt沒有這項服務(wù)t按任意重新選擇”); getchar();getchar(); } }while(in!=1&&in!=2&&in!=3&&in!=4&&in!=5); switch(in) { case 1:c_add();break; case 2:c_delete();break; case 3:c_viewm();break; case 4:c_searchm();break; case 5:login();break; } } void stu_login()//學(xué)生登錄菜單 { void c_select(); void c_view(); void c_searchs(); void login(); int input; do { system(“cls”); printf(“nnnt--學(xué)生登陸--”); printf(“nnt1.學(xué)生選課n”); printf(“t2.課程瀏覽n”); printf(“t3.課程查詢n”); printf(“t4.退出n”); scanf(“%d”,&input); if(input!=1&&input!=2&&input!=3&&input!=4) { printf(“nt沒有這項服務(wù)~n”); printf(“t按任意鍵重新選擇”); getchar(); getchar(); } }while(input!=1&&input!=2&&input!=3&&input!=4); switch(input) { case 1:c_select();break; case 2:c_views();break; case 3:c_searchs();break; case 4:login();break; } } void c_select(){ int n,in,i=0,j;int flag=0; FILE *fp; FILE *fp1; char input; struct course courses[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判斷是否存在課程 { printf(“nnnt課程不存在nn”); printf(“t<按任意鍵返回管理菜單>nt”); input=getchar(); input=getchar(); stu_login();//進(jìn)入學(xué)生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 } printf(“nntt請輸入你要選課程的編號:”); scanf(“%d”,&n); if((fp1=fopen(“courseselect.dat”,“rb”))==NULL) { fp1=fopen(“courseselect.dat”,“wb”); } else { fclose(fp1); fp1=fopen(“courseselect.dat”,“ab”); } for(j=0;j if(courses[j].c_num==n) flag++; if(flag==0) { printf(“nntt不存在對應(yīng)課程n”); printf(“nntt繼續(xù)選課請按1,退出請按2:n”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default: printf(“輸入錯誤,將返回登錄界面!n”); login();break; } } else { fwrite(&courses[j],sizeof(struct course),1,fp1); fclose(fp1); printf(“nntt選課成功t請選擇:”); printf(“nntt1.繼續(xù)選課”); printf(“nntt2.退出,返回登錄界面!”); scanf(“%d”,&in); switch(in) { case 1:c_select();break; case 2:stu_login();break; default:break; } } } void c_viewm()//課程瀏覽 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判斷是否存在課程 { system(“cls”); printf(“nnnt課程不存在nn”); printf(“t<按任意鍵返回管理菜單>nt”); getchar();getchar(); stu_login();//進(jìn)入學(xué)生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 do { system(“cls”); if(i==1) { printf(“nnnttt沒有記錄!n”); getchar();getchar(); man_login(); } else { printf(“nt------共有%d條記錄-------”,i-1); printf(“nnt課程編號: %dn”,courseview[n].c_num); printf(“nnt課程名字: %sn”,courseview[n].c_name); printf(“nnt課程學(xué)分: %dn”,courseview[n].c_score); printf(“nnt課程已選人數(shù): %dn”,courseview[n].c_nelepeo); printf(“nnt課程人數(shù)上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一頁t2.下一頁t3.回目錄”); printf(“n請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到達(dá)首頁 t按任意鍵返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到達(dá)尾頁t按人意見返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{man_login();break;} default: { printf(“nt操作錯誤t按任意鍵返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_views()//課程瀏覽 { void stu_login(); void c_view(); int inp,i=0,n=0; FILE *fp; char input; struct course courseview[10]; if((fp=fopen(“course.dat”,“rb”))==NULL)//判斷是否存在課程 { system(“cls”); printf(“nnnt課程不存在nn”); printf(“t<按任意鍵返回管理菜單>nt”); getchar();getchar(); stu_login();//進(jìn)入學(xué)生登陸菜單 } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&courseview[i],sizeof(struct course),1,fp); i=i+1; } while(!feof(fp)); fclose(fp);//文件讀完后關(guān)閉 do { system(“cls”); if(i==1) { printf(“nnnttt沒有記錄!n”); getchar();getchar(); stu_login(); } else { printf(“nt------共有%d條記錄-------”,i-1); printf(“nnt課程編號: %dn”,courseview[n].c_num); printf(“nnt課程名字: %sn”,courseview[n].c_name); printf(“nnt課程學(xué)分: %dn”,courseview[n].c_score); printf(“nnt課程已選人數(shù): %dn”,courseview[n].c_nelepeo); printf(“nnt課程人數(shù)上限: %dn”,courseview[n].c_melepeo); printf(“nnt1.上一頁t2.下一頁t3.回目錄”); printf(“n請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1: { if(n==0) { printf(“nt已到達(dá)首頁 t按任意鍵返回”); input=getchar(); input=getchar(); } else { n=n-1; } break; } case 2: { if(n==i-2) { printf(“nt已到達(dá)尾頁t按人意見返回”); input=getchar(); input=getchar(); } else { n=n+1; } break; } case 3:{stu_login();break;} default: { printf(“nt操作錯誤t按任意鍵返回”); getchar();getchar(); break; } } } }while(inp!=3); } } void c_searchs(){ void stu_login(); void c_searchs(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判斷課程信息是否存在 { system(“cls”); printf(“nnt課程不存在t按任意鍵返回”); getchar();getchar(); stu_login(); } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt請輸入你要查詢的課程編號:”); scanf(“%d”,&id); do//檢查輸入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt課程編號:%dn”,coursesear[k].c_num); printf(“nnt課程名字:%sn”,coursesear[k].c_name); printf(“nnt課程學(xué)分:%dn”,coursesear[k].c_score); printf(“nnt課程已選人數(shù):%dn”,coursesear[k].c_nelepeo); printf(“nnt課程人數(shù)上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt沒有這項服務(wù)t請按任意鍵重新輸入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在對應(yīng)記錄n”); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchs(); case 2:stu_login(); default: { printf(“nt沒有這項服務(wù)t請按任意鍵重新輸入”); getchar();getchar(); } } } }while(inp!=1); } void c_searchm(){ void stu_login(); void c_searchm(); int id,i=0,j,inp,k; int flag=0; FILE *fp; struct course coursesear[10]; if((fp=fopen(“course.dat”,“rb”))==NULL) //判斷課程信息是否存在 { system(“cls”); printf(“nnt課程不存在t按任意鍵返回”); getchar();getchar(); stu_login(); } else//存在的話循環(huán)讀取文件中的信息直到文件指針到文件尾部 { do { fread(&coursesear[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } system(“cls”); printf(“nnttt請輸入你要查詢的課程編號:”); scanf(“%d”,&id); do//檢查輸入是否符合要求 { for(j=0;j { if(id==coursesear[j].c_num) { flag++; k=j; } } if(flag==1) { system(“cls”); printf(“nnt課程編號:%dn”,coursesear[k].c_num); printf(“nnt課程名字:%sn”,coursesear[k].c_name); printf(“nnt課程學(xué)分:%dn”,coursesear[k].c_score); printf(“nnt課程已選人數(shù):%dn”,coursesear[k].c_nelepeo); printf(“nnt課程人數(shù)上限:%dn”,coursesear[k].c_melepeo); getchar();getchar(); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt沒有這項服務(wù)t請按任意鍵重新輸入”); getchar();getchar(); } } } else { system(“cls”); printf(“nnt不存在對應(yīng)記錄n”); printf(“nnt1.回目錄繼續(xù)查詢t2.退出查詢系統(tǒng)n”); printf(“請選擇:”); scanf(“%d”,&inp); switch(inp) { case 1:c_searchm(); case 2:man_login(); default: { printf(“nt沒有這項服務(wù)t請按任意鍵重新輸入”); getchar();getchar(); } } } }while(inp!=1);} void c_add()//增加課程 { void c_add(); void man_login(); int i=0,j,inp; FILE *fp; struct course course_new; struct course courses[10]; system(“cls”); printf(“nntt請輸入課程信息”); printf(“nntt1.課程編號:”); scanf(“%d”,&course_new.c_num); printf(“nntt2.課程名字:”); scanf(“%s”,course_new.c_name); printf(“nntt3.課程學(xué)分:”); scanf(“%d”,&course_new.c_score); printf(“nntt4.課程已選人數(shù):”); scanf(“%d”,&course_new.c_nelepeo); printf(“nntt5.課程人數(shù)上限:”); scanf(“%d”,&course_new.c_melepeo); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); for(j=0;j<=i-1;j++) if(course_new.c_num==courses[j].c_num) { system(“cls”); printf(“nnttt對不起,這個編號已經(jīng)使用過nntt按任意鍵返回管理菜單”); getchar();getchar(); man_login(); break; } } if((fp=fopen(“course.dat”,“rb”))==NULL) { fp=fopen(“course.dat”,“wb”); } else { fclose(fp); fp=fopen(“course.dat”,“ab”); } fwrite(&course_new,sizeof(struct course),1,fp); fclose(fp); printf(“nntt信息輸入完畢t按任意鍵繼續(xù)”); getchar();getchar(); do { system(“cls”); printf(“nntt1.繼續(xù)輸入”); printf(“nntt2.返回管理菜單”); printf(“nntt請選擇”); scanf(“%d”,&inp); if(inp!=1&&inp!=2) { printf(“輸入不符合要求t按任意鍵重新選擇”); getchar();getchar(); } }while(inp!=1&&inp!=2); switch(inp) { case 1:c_add();break; case 2:man_login();break; } } void c_delete()//查詢后刪除 { FILE *fp; int i=0,j,n,k,flag=0; struct course courses[10]; void c_delete(); void man_login(); printf(“nntt請輸入你要刪除的課程編號:”); scanf(“%d”,&n); if((fp=fopen(“course.dat”,“rb”))!=NULL) { do { fread(&courses[i],sizeof(struct course),1,fp); i=i+1; }while(!feof(fp)); fclose(fp); } else { printf(“nntt不存在任何課程t按任意鍵返回”); getchar();getchar(); man_login(); } for(j=0;j { if(courses[j].c_num==n) { flag=1; fp=fopen(“course.dat”,“wb”); for(k=0;k fwrite(&courses[k],sizeof(struct course),1,fp); fclose(fp); fp=fopen(“course.dat”,“ab”); for(k=j+1;k { fwrite(&courses[k],sizeof(struct course),1,fp); } printf(“nntt記錄已刪除!t按任意鍵返回ntt”); getchar();getchar(); man_login(); fclose(fp); } } if(flag==0) { printf(“nntt不存在對應(yīng)的課程t按任意鍵返回”); getchar();getchar(); man_login(); } // printf(“nntt記錄已刪除!t按任意鍵返回ntt”); } int main(){ index();login();return 0;} 1、課程設(shè)計的目的、任務(wù) 《匯編語言》課程設(shè)計對于鞏固匯編語言理論知識,加強學(xué)生的實際動手能力和提高學(xué)生綜合素質(zhì)十分必要。課程設(shè)計的目的主要是通過程序設(shè)計方法和技能的基本訓(xùn)練,鞏固在課堂上學(xué)到的有關(guān)程序設(shè)計的基本知識和基本方法,通過實際動手能力的培養(yǎng),進(jìn)一步熟悉匯編語言的結(jié)構(gòu)和使用方法,達(dá)到能獨立閱讀、編制和調(diào)試一定規(guī)模的匯編語言程序的水平。 2、軟件需求分析和設(shè)計 2.1學(xué)生成績管理系統(tǒng)是對學(xué)生成績的管理,其中包括以下幾個模塊:(1).插入一個數(shù)據(jù)(插入學(xué)生學(xué)號以及語數(shù)外三個成績)。(2)修改一個數(shù)據(jù)。(3)刪除學(xué)生成績數(shù)據(jù)。(4)查找學(xué)生成績。(5)查看學(xué)生成績的排名(6)查看學(xué)生成績分布(7)按esc鍵退出系統(tǒng) 2.2學(xué)生成績管理系統(tǒng)應(yīng)該包含以下信息:學(xué)號,語文成績,英語成績,數(shù)學(xué)成績。因此,系統(tǒng)應(yīng)該提供以下功能:(1)輸出顯示菜單。(2)輸入學(xué)生的成績(3)修改學(xué)生成績(4)刪除學(xué)生成績(5)查詢學(xué)生成績(6)顯示學(xué)生成績排名(7)顯示成績分布統(tǒng)計(8)按esc鍵退出系統(tǒng) 2.3依據(jù)程序的功能需求,該系統(tǒng)的功能結(jié)構(gòu)圖如下 系統(tǒng)功能結(jié)構(gòu)圖 2.4 程序流程圖: 主程序流程圖 查找學(xué)生成績 插入學(xué)生學(xué)號及成績 修改學(xué)生的成績 顯示各個學(xué)科各分?jǐn)?shù)段的人數(shù) 3、程序?qū)崿F(xiàn)說明 3.1學(xué)生管理系統(tǒng)中各子程序如下: (1).輸入全部學(xué)生學(xué)號以及語文,英語,數(shù)學(xué)三科的成績。子程序名:insert 子程序描述:該子程序為輸入字程序。系統(tǒng)在開始的時候是沒有數(shù)據(jù)的,通過該子程序可以初始化系統(tǒng),將學(xué)生的學(xué)號及成績輸入系統(tǒng)。 代碼: insert proc near;定義進(jìn)程子程序:插入學(xué)生,學(xué)號及 成績 call input;調(diào)用input add n,1 ret insert endp (2).修改輸入的成績。子程序名:modify 子程序描述:通過子程序修改學(xué)生的成績 代碼: modify proc near;定義進(jìn)程子程序:修改學(xué)生學(xué)號,成績 md1:output mess1;輸出mess1 shuru;調(diào)用宏shuru:二位數(shù)據(jù)輸入 mov bl,n mov bh,0 mov al,dl mov si,0 md: cmp al,xh[si];先查找輸入的學(xué)生是否存在 je qq1_1;查到的話,就跳轉(zhuǎn)到qq1_1輸入修改的值,也就是重新輸入。;結(jié)果相等則跳轉(zhuǎn)到qq1_1 add si,1 cmp si,bx jbe md;小于等于則跳轉(zhuǎn)到md output mess;輸出mess jmp md1;不相等繼續(xù)輸入學(xué)號 qq1_1:;轉(zhuǎn)入修改的值重新輸入。mov di,si output mess2 output mess4 mov si,0 mov cx,3 qq3_1:shuruu;cmp dx,78h; jbe qq2_1;output ts3;jmp qq1_1;qq2_1:mov buf[si],dl output bg;add si,1 loop qq3_1 mov al,buf[0];mov chi[di],al mov al,buf[1] 分別輸入語文,英語,數(shù)學(xué)成績,并將其放 在緩沖區(qū)buf中 比較輸入的成績是否大于120,如果大于120的 話,那么重 新輸入成績 小于等于則轉(zhuǎn)移到qq2_1 輸出ts3 跳轉(zhuǎn)到qq1_1 輸出空格 將存入buf中的成績,分別賦值給存放對應(yīng)科 目的成績的數(shù)組 mov eng[di],al mov al,buf[2] mov mat[di],al ret modify endp (3).刪除學(xué)生的成績。子程序名:delete 子程序描述:通過子程序刪除學(xué)生的成績 代碼: de proc near;刪除某個學(xué)生的記錄 sc1:output mess1 shuru;調(diào)用宏shuru,接受輸入的學(xué)號 mov bl,n mov bh,0 mov al,dl mov si,0 sc: cmp al,xh[si];查詢輸入學(xué)號的學(xué)生信息是否存在,不存在的話,重新輸入學(xué)號 je sc2;相等則轉(zhuǎn)移到sc2 add si,1 cmp si,bx jbe sc;小于等于則轉(zhuǎn)移到sc output mess;輸出mess jmp sc1 sc2: sub bx,si cmp bx,0 je sc3;相等則轉(zhuǎn)移到sc3 mov cx,bx sc4:mov dl,chi[si+1] mov chi[si],dl mov dl,eng[si+1] mov eng[si],dl mov dl,mat[si+1] mov mat[si],dl mov dl,xh[si+1] mov xh[si],dl add si,1 loop sc4;loop循環(huán)指令,執(zhí)行操作(cx)<--(cx)-1.若 cx!=0,跳轉(zhuǎn)到標(biāo)號sc處循環(huán)執(zhí)行;cx=0,則推出 循環(huán),執(zhí)行l(wèi)oop的下一條指令 sub n,1 sc3: ret de endp (3).查詢學(xué)生的成績。子程序名:find 子程序描述:通過子程序查詢學(xué)生的成績 代碼: find proc near;定義進(jìn)程子程序:查找學(xué)生成績 call sum;求學(xué)生的總成績 call ping;求學(xué)生的平均成績 bj1:output mess1;輸出mess1 shuru;二位數(shù)數(shù)據(jù)輸入 mov bl,n mov bh,0 mov al,dl mov si,0 bj: cmp al,xh[si];將輸入的學(xué)號與輸入的學(xué)號相比,je i;存在的話,將此學(xué)生的成績輸出。je表示結(jié)果相 等則轉(zhuǎn)移。add si,1 cmp si,bx jbe bj;output mess jmp bj1 i: output strr2 shuzi xh[si];shuzi output bg;mov al,chi[si] cbw;shuzii ax;shuzii output bg;mov al,eng[si] cbw;shuzii ax;shuzii output bg mov al,mat[si] cbw shuzii ax output bg; mov al,pj[si] cbw 小于等于則轉(zhuǎn)移到bj 為二位數(shù)據(jù)輸出 輸出空格 將字節(jié)變?yōu)樽?/p> 為三位數(shù)據(jù)輸出。輸出空格 將字節(jié)變?yōu)樽?/p> 為三位數(shù)據(jù)輸出 輸出空格的字符串,用于與標(biāo)題欄對齊 shuzii ax output bg mov ax,si mov bl,2 mul bl mov bx,ax shuzii zc[bx];shuzii為三位數(shù)據(jù)輸出 output bg;輸出空格的字符串,用于與標(biāo)題欄對齊 shuzi mc[si];shuzi為二位數(shù)據(jù)輸出 ret find endp (4).顯示學(xué)生的成績排名。子程序名:show 子程序描述:通過子程序顯示學(xué)生的成績排名 代碼: show proc near;定義進(jìn)程子程序:顯示結(jié)果排名 call sum;調(diào)用宏sum call ping;調(diào)用宏ping call rank;調(diào)用宏rank call shuchu;調(diào)用宏shuchu ret show endp 3.2程序運行抓圖: 主菜單 修改學(xué)生成績 刪除學(xué)生成績 顯示各個學(xué)科各分?jǐn)?shù)段的人數(shù) 4、程序總結(jié) 通過兩個星期的學(xué)習(xí),努力,終于完成了報告。系統(tǒng)可以很好的運行。這兩個多星期的時間,幾乎每天不是在敲代碼,就是在看代碼,查書,上網(wǎng)。系統(tǒng)中用到了很多最近才學(xué)習(xí)的知識,比如宏,子程序。這些都使得代碼的運行效率提高了,代碼行數(shù)減少了。系統(tǒng)還用到了bios的清屏功能。這些功能如果不是做課程設(shè)計,我想我很難會接觸到這些知識。 由于自己對知識掌握的不是很牢固,其中也會碰到一些困難。每當(dāng)遇到問題的時候,我會先上網(wǎng)去查找,看看有沒有人提過這方面的問題?;ヂ?lián)網(wǎng)是強大的,大部分的問題通過網(wǎng)絡(luò)都可以解決。部分找不到的問題,我就去請教班里學(xué)得好的同學(xué)。他們對知識的掌握遠(yuǎn)超過我。這樣下來,很多問題都迎刃而解了。 課程設(shè)計是一個很好的掌握書本上知識的過程。平時上課之后,自己都不會想著去敲一些代碼聯(lián)系聯(lián)系。通過做課程設(shè)計,將理論與實踐結(jié)合了起來,對知識的理解更加深入了。 2007-2008學(xué)年第二學(xué)期 《C語言程序設(shè)計》 課程設(shè)計報告 系 部: 三 系 專業(yè)班級: 電子資訊工程(2)班 學(xué) 號: 070306210 姓 名: 冀 鵬 超 設(shè)計題目: 同學(xué)通訊錄設(shè)計 起訖日期: 2008.6.16 至 2008.6.29 指導(dǎo)老師: 徐 化 祥 2008 年 6 月 宿遷學(xué)院課程設(shè)計報告 課程設(shè)計(論文)內(nèi)容要求: 1.本課程設(shè)計的目的 (1)熟練掌握C語言的基本知識和技能;(2)掌握程序設(shè)計的一些經(jīng)典算法和基本方法;(3)了解數(shù)組、指針和結(jié)構(gòu)體的應(yīng)用; (4)利用所學(xué)的基本知識和技能,解決日常生活中經(jīng)常面臨的問題;(5)培養(yǎng)分析、解決問題的能力;提高學(xué)生的科技論文寫作能力。 2.課程設(shè)計的任務(wù)及要求 1)課程設(shè)計題目:同學(xué)通訊錄設(shè)計 2)基本要求: (1)設(shè)計一個菜單將在實現(xiàn)的功能顯示出來,并有選擇提示; (2)通訊簿應(yīng)包含姓名、性別、電話號碼、QQ號碼、Email、班級、宿舍等基本信息;(3)能夠查詢?nèi)砍蓡T清單; (4)能夠按號碼或姓名查詢某一個成員的信息;(5)能夠增加、修改某一個成員的信息; (6)要求有錯誤提示功能,例如性別只能輸入F,M,輸入錯誤提示重新輸入。 3)創(chuàng)新要求: (1)加入刪除功能,實現(xiàn)對指定成員信息的刪除操作; (2)信息的輸入輸出可以用文件的存取和顯示的方式,建立文件,直接存取默認(rèn)檔或指定文件。 4)課程設(shè)計報告編寫要求 (1)要按照課程設(shè)計模板的規(guī)格書寫課程設(shè)計報告;(2)報告包括目錄、正文、心得體會、參考文獻(xiàn)等; (3)課程設(shè)計論文用A4紙統(tǒng)一打印,裝訂按學(xué)校的統(tǒng)一要求完成。 5)參考數(shù)據(jù): (1)譚浩強.C程序設(shè)計(第三版).北京:清華大學(xué)出版社,2005.7(2)張強華.C語言程序設(shè)計.北京:人民郵電出版社,2001.8(3)http://004km.cn/ 6)提交內(nèi)容: 6.18 209實驗室 編程設(shè)計與調(diào)試 6.186.28 209實驗室 提交所有數(shù)據(jù) 6.282345int i,j;/*下面的循環(huán)是對初始值的處理*/ for(i=0;i strcpy(stu[i].sex,”“);stu[i].age=0;strcpy(stu[i].tel,”“);strcpy(stu[i].major,”“);strcpy(stu[i].classes,”“);strcpy(stu[i].room,”“);strcpy(stu[i].qq,”“);strcpy(stu[i].email,”“);strcpy(stu[i].others,”“);} 宿遷學(xué)院課程設(shè)計報告 int print1(){ int n;printf(”tttt<<通訊錄>>n“);printf(”**************************************************************n“);printf(”t歡迎使用本通訊錄應(yīng)用程序,愿您從中找到所需要的信息。n“);printf(”制作人:冀鵬超 & 李長明t學(xué)號:070306210 & 070306211t班級:07電子信息(2)班n“);printf(”**************************************************************n“);printf(”n“);printf(”ttt1.瀏覽通訊簿n“);printf(”ttt2.輸入同學(xué)信息n“);printf(”ttt3.查詢同學(xué)信息n“);printf(”ttt4.刪除同學(xué)信息n“);printf(”ttt5.增加同學(xué)信息n“);printf(”ttt6.修改同學(xué)信息n“);printf(”ttt7.退出通訊簿n“);printf(”n請輸入您的選擇(1-7):“);scanf(”%d“,&n);return n;} void menu(struct txl stu[]){ int i,j,flag=1;char str[15];for(;flag==1;){ switch(print1()) 電話{ :case 1: for(i=0;stu[i].age!=0;i++){ printf(”姓名: %sn性別:%sn年齡:%dn%sn 班 級 : %sn 宿 舍 : %sn 專 業(yè) : %snQQ號:%snEmail: %sn“,stu[i].name,stu[i].sex,stu[i].age,stu[i].tel,stu[i].classes,stu[i].room,stu[i].major,stu[i].qq,stu[i].email); } printf(”其它信息:%sn“,stu[i].others);if(i==0)printf(”目前通訊簿為空,請先輸入信息n“); 宿遷學(xué)院課程設(shè)計報告 ,stu[i].room,stu[i].major,stu[i].qq,stu[i].email); } if(i==N)printf(”t通訊簿中沒有你要找的同學(xué)!n“);break; printf(”其它信息:%sn“,stu[i].others);break;} case 4: printf(”現(xiàn)在你將進(jìn)行刪除操作!請輸入要刪除的同學(xué)的名字,按Enter結(jié)束.n“); scanf(”%s“,str);for(i=0;i if(strcmp(stu[i].name,str)==0){ printf(”姓名: %sn性別:%sn年班級:%sn 宿舍:%sn 專業(yè):%snQQ齡:%dn電話:%sn號:%snEmail: %sn“,stu[i].name,stu[i].sex,stu[i].age,stu[i].tel,stu[i].classes,stu[i].room,stu[i].major,stu[i].qq,stu[i].email); printf(”該同學(xué)將被刪除n“); } 宿遷學(xué)院課程設(shè)計報告 scanf(”%s“,stu[i].name);printf(”輸入同學(xué)的性別: “);scanf(”%s“,stu[i].sex);printf(”輸入同學(xué)的年齡: “);scanf(”%d“,stu[i].age);printf(”輸入同學(xué)的電話: “);scanf(”%s“,stu[i].tel);printf(”輸入同學(xué)的班級: “);scanf(”%s“,stu[i].classes);printf(”輸入同學(xué)的宿舍: “);scanf(”%s“,stu[i].room);printf(”輸入同學(xué)的專業(yè): “);scanf(”%s“,stu[i].major);printf(”輸入同學(xué)的QQ號: “);scanf(”%s“,stu[i].qq);printf(”輸入同學(xué)的Email: “);scanf(”%s“,stu[i].email);printf(”輸入同學(xué)的其它信息: “);scanf(”%s“,stu[i].others);} } break;case 7: flag=0;break;default: printf(”你的輸入有錯誤,請重新輸入!n");} } } void main(){ struct txl stu[N]; } init(stu);menu(stu); 宿遷學(xué)院課程設(shè)計報告 四、測試結(jié)果 1.通訊錄菜單如下圖所示: 2.輸入“1”,進(jìn)行“瀏覽通訊錄操作: 3.輸入“2”,進(jìn)行“輸入同學(xué)信息”的操作: 宿遷學(xué)院課程設(shè)計報告 8.輸入“7”,進(jìn)行“退出通訊簿”操作: 宿遷學(xué)院課程設(shè)計報告 五、設(shè)計心得 自從記事以來就聽過了計算機這個高科技,現(xiàn)在終于實現(xiàn)了自己的一個小小愿望——成為了計算機系的一名學(xué)生,這學(xué)期我們學(xué)的C語言,以前就聽過這個名字,打開書一看簡直一竅不通,學(xué)好這門科簡直就是一個挑戰(zhàn),課前課后都要把書啃一遍,要不然上課就跟不上,終于學(xué)期快結(jié)束了,我們有一個課程設(shè)計,在兩個星期內(nèi),完成一個復(fù)雜的程序,我們的題目是做一個通訊簿。 通過為期一周的C課程設(shè)計實驗課使我了解到了一個程序開發(fā)的過程,雖然規(guī)模不大,但為我以后的編程學(xué)習(xí)打下了基礎(chǔ)。在編程的過程中,我體會到了學(xué)習(xí)編程的辛苦,為了一個算法的實現(xiàn)而思考,為了一個小小的編譯錯誤而花時間去尋找,這需要很大的毅力和耐心,而且要有良好的思維,這才使得我完成這個任務(wù),也使我感到一分喜悅,畢竟自己完成了一個有模有樣的程序。于此,我也發(fā)現(xiàn)自己的一些不足,良好的編程習(xí)慣的養(yǎng)成,堅定的毅力和耐心仍是我要加強的,同別人的交流也是必須的,這樣才能不斷使我進(jìn)步。在這次設(shè)計中,我遇到了很多困難,但我沒有向困難低頭,通過查詢數(shù)據(jù),虛心向同學(xué)、老師請教,才一一得到了解決。我發(fā)現(xiàn)平時學(xué)的太少了,在今后我首先要把老師在課堂講的弄懂,弄透,在此基礎(chǔ)上利用課余時間多看課外書籍,拓寬知識面。在設(shè)計過程中,合作精神必不可少。單憑一個人的力量是不能完成的,畢竟一個人學(xué)的很有限。每個人掌握的不同。我相信:態(tài)度決定一切,只有努力才有收獲。 總的來說,這次程序設(shè)計讓我獲益匪淺,對C語言也有了進(jìn)一步的認(rèn)識:C語言功能高、表達(dá)能力強、使用靈活方便、目標(biāo)程序效率高。 C語言是在國內(nèi)外廣泛使用的一種計算機語言,我相信除了以上優(yōu)點之外還有許多,希望能在以后的學(xué)習(xí)中有更深入的認(rèn)識。 很感謝這次的課程設(shè)計,它使我更加深刻地體會到多看專業(yè)書的重要性,只有掌握了一定量的專業(yè)知識才能得心應(yīng)手地解決諸多問題;另外,做任何事都要有耐心,不要一遇到困難就退縮;在學(xué)習(xí)和工作中要時刻謹(jǐn)記“團結(jié)”二字,它好比通向成功的鋪路石,不可或缺。 人生的道路是曲折的,但正是因為曲折人生才光彩奪目,在人生的路上,總遇到重重困難,但正是因為困難我們才變的更堅強。今后的路還很長,面對困難,讓我們用行動去俘虜它吧! 宿遷學(xué)院課程設(shè)計報告 六、參考文獻(xiàn) [1] 譚浩強.C++程序設(shè)計.北京:清華大學(xué)出版社,2004 [2] http://004km.cn/ [4] http://004km.cn/ [5] 劉振安.C程序設(shè)計課程設(shè)計.北京:機械工業(yè)出版社,2004 [6] 張強華.C語言程序設(shè)計.北京:人民郵電出版社,2001.8 617- “選課注冊管理系統(tǒng)”課程設(shè)計指導(dǎo)書 課題名稱:選課注冊管理系統(tǒng) 設(shè)計目標(biāo):按照軟件工程的規(guī)范,以SQL Server或Oracle為后臺數(shù)據(jù)庫,以Visual C++、Delphi等為前端開發(fā)工具,模擬高等學(xué)校的選課情況,設(shè)計并實現(xiàn)一個學(xué)生選課注冊管理系統(tǒng)。 需求描述: 1.系統(tǒng)用戶 本系統(tǒng)的用戶是學(xué)校的學(xué)生、教師和管理員。學(xué)生使用本系統(tǒng)查詢新學(xué)期將開設(shè)的課程和授課教師的情況,選擇自己要學(xué)習(xí)的課程,并進(jìn)行登記注冊。教師使用本系統(tǒng)查詢新學(xué)期將開設(shè)的課程、參加聽課的學(xué)生情況。教學(xué)管理員使用本系統(tǒng)進(jìn)行教學(xué)管理,包括課程管理和新學(xué)期的課程選課注冊管理。 2.系統(tǒng)功能 本系統(tǒng)負(fù)責(zé)新學(xué)期的課程選課注冊工作;應(yīng)提供的服務(wù)功能如下: (1)錄入與生成新學(xué)期課程表:教學(xué)管理員在新學(xué)期開始前錄入新學(xué)期課程,打印將開設(shè)的課程目錄表,供師生參考選擇。若某課程的實際選課學(xué)生少于10人,則停開該課程,把該課程從課程目錄表中刪除;若某課程的選課學(xué)生多于30人,則停止選課。 (2)學(xué)生選課注冊:新學(xué)期開始前一周為選課注冊時間,在此期間學(xué)生可以選 課注冊,并且允許改變或取消注冊申請。 (3)查詢:可以查詢課程信息、學(xué)生選課信息和學(xué)生、教師信息。 (4)選課注冊信息的統(tǒng)計與報表生成:教學(xué)管理員對學(xué)生的選課注冊信息進(jìn)行 統(tǒng)計(按課程、按學(xué)生、按班級)。 3.系統(tǒng)結(jié)構(gòu) 假定在學(xué)校的計算中心有功能強大的工作站機器,在各系、各部門、圖書館、學(xué)生宿舍都有臺式PC機,學(xué)校的全部計算機已經(jīng)聯(lián)網(wǎng)。本系統(tǒng)將采用客戶機/服務(wù)器結(jié)構(gòu)建立,應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器設(shè)置在學(xué)校計算中心的工作站。學(xué)生、教師和教學(xué)管理員可以在各系、各部門、圖書館、學(xué)生宿舍的臺式PC機上使用本系統(tǒng)。結(jié)果形式: 提交課程設(shè)計報告、源程序和可演示的軟件 課程設(shè)計報告要求:詳見課程設(shè)計模板 課程設(shè)計參考思路: (1)熟悉數(shù)據(jù)庫和開發(fā)工具,掌握開發(fā)工具與本地數(shù)據(jù)庫的連接方法。 (2)理解系統(tǒng)的信息需求,進(jìn)行合理的數(shù)據(jù)庫設(shè)計,建立各數(shù)據(jù)庫表。 (3)理解系統(tǒng)的功能需求,設(shè)計應(yīng)用軟件。結(jié)合Delphi 或VC++進(jìn)行系統(tǒng)界面(窗 體、菜單以及相應(yīng)控制按鈕)的設(shè)計、連接與操縱數(shù)據(jù)庫方案的設(shè)計,編寫程序。 (4)系統(tǒng)運行、調(diào)試并完善。 (5)撰寫設(shè)計報告。 C語言課程設(shè)計報告——劉顯安 C語言課程設(shè)計 姓名:劉顯安 學(xué)號:09041131 班級:090411 專業(yè):計算機科學(xué)與技術(shù) 學(xué)院:信息工程學(xué)院 設(shè)計題目:學(xué)生通訊錄管理系統(tǒng) 指導(dǎo)教師:宋文琳 提交時間:2010年9月4日 第1頁(共25頁) C語言課程設(shè)計報告——劉顯安 課程題目:學(xué)生通訊錄管理系統(tǒng) 要求:學(xué)生通訊錄信息包括:學(xué)號、姓名、班機、聯(lián)系電話、E-mail、宿舍等 主要功能:1、2、3、4、5、通訊錄信息錄入功能 通訊錄信息刪除功能 通訊錄信息瀏覽功能 通訊錄信息查詢功能 按學(xué)號排序功能 一、總體設(shè)計 首先,整個系統(tǒng)必須有一個主函數(shù),為了盡量提高程序的易修改性,且不至于相互干擾,將每一個功能分成不同的模塊,用不同的函數(shù)來實現(xiàn),例如在我寫的這個程序中,一共用了11個函數(shù),分別是: 主菜單函數(shù)menu()、關(guān)于函數(shù)gaunyu()、幫助函數(shù)help()、輸出單個學(xué)生信息函數(shù)shuchu()、輸入函數(shù)shuru()、輸出所有學(xué)生信息函數(shù)findall()、按姓名查找函數(shù)findname()、按學(xué)號查找函數(shù)findnum()、刪除函數(shù)shanchu()、排序函數(shù)paixu()、主函數(shù)main(),這樣在整個程序的設(shè)計過程中也就一目了然,寫起來也相對輕松了不少。 這個程序我只是總體上參考了一下網(wǎng)上程序的架構(gòu),具體的各個函數(shù)是參照課本上《鏈表》那一章的內(nèi)容的,比如結(jié)構(gòu)體的建立、查找和排序等功能,這些書上都有類似的,其中排序功能雖沒有原版的,第2頁(共25頁) C語言課程設(shè)計報告——劉顯安 但是在第六章中有一個用冒泡法排序的例題,我就是仿照這個模式來對結(jié)構(gòu)體進(jìn)行排序的,總之整個程序中蘊含了我很多的汗水。 二、具體設(shè)計 關(guān)于這個程序的具體設(shè)計,也不是一兩句話就能說完的,所以我也不想再在這里贅述了,因為程序里都可以看的到,幾乎每個函數(shù)都傾注了我的大量汗水,我在這上面花了不少的時間,不過從中也收獲了很多,因為不停地修改不停的調(diào)試,總之還是直接看源程序吧,因為也沒必要在這里重復(fù)地說廢話。 三、源代碼 以下是整個程序的源代碼,其中我的主菜單函數(shù)是很美觀的,但由于這里字體和板式的限制,不能很好的顯現(xiàn),可以看我下面程序運行的截圖就知道了?!?#include struct student{ 第3頁(共25頁) C語言課程設(shè)計報告——劉顯安 long num;char name[20];int banji;char tel[11];char Email[20];int sushe;struct student *next;}; struct student *stu;int n; void menu(void){ /*主菜單函數(shù)*/ system(“cls”);puts(“****************************************************************************”);puts(“** ^_^學(xué)生通訊錄管理系統(tǒng)^_^ **”);puts(“****************************************************************************”);puts(“******** 計 ********”); 第4頁(共25頁) C語言課程設(shè)計報告——劉顯安 puts(“******* *******”);puts(“****** 算 ******”);puts(“***** 0 1=錄入學(xué)生通訊錄信息 *****”);puts(“**** 9 機 ****”);puts(“*** ***”);puts(“** 科 **”);puts(“* *”);puts(“** 1 學(xué) **”);puts(“*** ***”);puts(“**** 與 ****”);puts(“***** *****”);0 4 劉 2= 顯 安 6= 第5頁(共25頁) 列出所有學(xué)生通訊錄 3=按姓名查詢信息 4=按學(xué)號查詢信息 5=刪除學(xué)生信息 按學(xué)號將通訊錄排序 7=關(guān)于 8=幫助 0=退出 C語言課程設(shè)計報告——劉顯安 puts(“****** 技 ******”);puts(“******* *******”);puts(“******** 術(shù) ********”);puts(“****************************************************************************”);} void guanyu()/*關(guān)于函數(shù)*/ { system(“cls”);puts(“n ************************** ”);puts(“ *** 版權(quán)所有,翻版必究!***”);puts(“**** copyright◎劉顯安!****”);puts(“ *** 2009~2010 ***”);puts(“ **************************”);puts(“n返回主菜單請按【9】”);if(getche()=='9')menu();} struct student *shuru(void)/*輸入函數(shù)*/ 第6頁(共25頁) C語言課程設(shè)計報告——劉顯安 { system(“cls”);struct student *s1,*s2;n=1;int num;puts(“請輸入學(xué)生個數(shù)(提示:個數(shù)不能輸入0!):”);scanf(“%d”,&num);s1=s2=(struct student *)malloc(sizeof(struct student));puts(“*************************************************”);puts(“請輸入學(xué)號:”);scanf(“%ld”,&s1->num);puts(“請輸入學(xué)生姓名:”);scanf(“%s”,s1->name);puts(“請輸入班級:”);scanf(“%d”,&s1->banji);puts(“請輸入電話號碼:”);scanf(“%s”,s1->tel);puts(“請輸入電子郵件:”);scanf(“%s”,s1->Email);puts(“請輸入學(xué)生宿舍號:”);scanf(“%d”,&s1->sushe);stu=s1; 第7頁(共25頁) C語言課程設(shè)計報告——劉顯安 while(n 第8頁(共25頁) C語言課程設(shè)計報告——劉顯安 s2=s1;s2->next=NULL;return(stu);//system(“cls”);} void shuchu(struct student *s){ /*輸出單個學(xué)生信息*/ printf(“* %-8ld”,s->num);printf(“%-15s”,s->name);printf(“%-8d”,s->banji);printf(“%-15s”,s->tel);printf(“%-15s”,s->Email);printf(“%-5d *n”,s->sushe);} void findall()/*輸出所有學(xué)生信息*/ { system(“cls”);struct student *s;//if(n=2)//printf(“n現(xiàn)在有%d個學(xué)生信息,分別是:n”,n);//else 第9頁(共25頁) C語言課程設(shè)計報告——劉顯安 printf(“n現(xiàn)在有%d個學(xué)生信息,分別是:n”,n);puts(“________________________________________________________________________”);puts(“* 學(xué)號 姓名 班級 電話 電子郵件 宿舍 *”);s=stu;while(s!=NULL){ shuchu(s);s=s->next;} puts(“________________________________________________________________________”);puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} void findname(){ /*按姓名查找函數(shù)*/ system(“cls”);struct student *s;char name[20];printf(“n請輸入你要查詢的學(xué)生姓名:n”); 第10頁(共25頁) C語言課程設(shè)計報告——劉顯安 scanf(“%s”,name);s=stu;while(strcmp(s->name,name)!=0){ s=s->next;} if(s==NULL){ puts(“查無此學(xué)生姓名!”);goto end;} else { puts(“該學(xué)生的信息為:”);puts(“* 學(xué)號 姓名 電子郵件 宿舍 *”);shuchu(s);} end:;puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} 第11頁(共25頁) 班級 電話 C語言課程設(shè)計報告——劉顯安 void findnum()/*按學(xué)號查找函數(shù)*/ { system(“cls”);struct student *s;puts(“請輸入你要查詢的學(xué)生學(xué)號:”);long i;scanf(“%ld”,&i);s=stu; while(s->num!=i){ s=s->next;} if(s==NULL){puts(“查無此學(xué)生學(xué)號!”);goto end;} else { puts(“該學(xué)生的信息為:”);puts(“* 學(xué)號 姓名 班級 郵件 宿舍 *”);shuchu(s); 第12頁(共25頁) 子電話 電C語言課程設(shè)計報告——劉顯安 } end:;puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} struct student *shanchu(struct student*stu)/*刪除函數(shù)*/ { system(“cls”);long num;char s;struct student *s1,*s2;if(stu==NULL){ puts(“傻冒!沒有任何學(xué)生信息,還刪個屁啊,刪刪刪!”);goto end;} puts(“請輸入你要刪除的學(xué)生學(xué)號:”);scanf(“%ld”,&num);s1=stu;puts(“警告:你確定要刪除這個學(xué)生的信息嗎(Y/N)?”);scanf(“%s”,&s); 第13頁(共25頁) C語言課程設(shè)計報告——劉顯安 if((s=='Y')||(s=='y')){ while((num!=s1->num)&&(s1->next!=NULL)){s2=s1;s1=s1->next;} if(num==s1->num){ puts(“該學(xué)生的信息為:”);puts(“* 學(xué)號 姓名 班級 電話 電子郵件 宿舍 *”);shuchu(s1);if(s1==stu)stu=s1->next;else s2->next=s1->next;puts(“注意喲,該學(xué)生的信息已經(jīng)刪除了!剩下的學(xué)生通訊錄信息如下:”);n=n-1;} } findall();return(stu);end:; 第14頁(共25頁) C語言課程設(shè)計報告——劉顯安 puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} void paixu(){ /*排序函數(shù)*/ struct student *p, *p1,*p2;int i,j;int temp;char b[20];if(stu==NULL){printf(“n學(xué)生信息不存在n”);goto end;} for(i=0;i {temp=p1->num;p1->num=p2->num;p2->num=temp; strcpy(b,p1->name);strcpy(p1->name,p2->name);strcpy(p2->nam 第15頁(共25頁) C語言課程設(shè)計報告——劉顯安 e,b); temp=p1->banji;p1->banji=p2->banji;p2->banji=temp; strcpy(b,p1->tel);strcpy(p1->tel,p2->tel);strcpy(p2->tel,b); strcpy(b,p1->Email);strcpy(p1->Email,p2->Email);strcpy(p2->Email,b);temp=p1->sushe;p1->sushe=p2->sushe;p2->sushe=temp; } p1=p1->next;} } p=stu;puts(“已按學(xué)生學(xué)號順序排序完畢!重新排序如下:”); puts(“****************************************************************************”);puts(“* 學(xué)號 姓名 班級 電話 電子郵件 宿舍 *”); while(p!=NULL) 第16頁(共25頁) C語言課程設(shè)計報告——劉顯安 { printf(“* %-8ld”,p->num);printf(“%-15s”,p->name);printf(“%-8d”,p->banji);printf(“%-15s”,p->tel);printf(“%-15s”,p->Email);printf(“%-5d *n”,p->sushe);p=p->next;} end:;puts(“返回主菜單請按【9】”);if(getche()=='9')menu();} void help()/*幫助函數(shù)*/ { system(“cls”);puts(“n1、請按提示操作,第一次進(jìn)入本系統(tǒng)時請按“1”錄入學(xué)生信息,”);puts(“ 否則有可能造成程序運行錯誤!”);puts(“ 2、添加、修改功能本系統(tǒng)暫不提供,還有待以后完善,謝謝 第17頁(共25頁) C語言課程設(shè)計報告——劉顯安 合作!”);puts(“ 3、請注意查看“Num Lock”是否打開,如果沒有打開,則按數(shù)字n 鍵可能導(dǎo)致程序錯誤!”);puts(“ 4、版權(quán)所有,翻版必究!請按“7”鍵查看關(guān)于?!?;puts(“n返回主菜單請按【9】”);if(getche()=='9')menu();} void main()/*主函數(shù)*/ { char a;menu();puts(“n您為首次使用本系統(tǒng),強烈建議您按1開始錄入學(xué)生信息,”);puts(“否則有可能導(dǎo)致程序運行錯誤!您可以按8查看幫助.”);a=getche();while(a){ puts(“");switch(a){case'0':goto end;break;case '1': puts(”n好了,您可以開始向本系統(tǒng)錄入學(xué)生通訊錄信息了: 第18頁(共25頁) C語言課程設(shè)計報告——劉顯安 “);stu=shuru();system(”cls“);menu();puts(”n學(xué)生信息錄入完畢,請輸入你的選擇(0~6):n“); break;case '2':findall();puts(”n請輸入你的選擇(0~6):“);break;case '3':findname();puts(”n請輸入你的選擇(0~6):“);break;case '4':findnum();puts(”n請輸入你的選擇(0~6):“);break;case '5':stu=shanchu(stu);puts(”n請輸入你的選擇(0~6):“);break;case '6':paixu();puts(”n請輸入你的選擇(0~6):“);break;case '7':guanyu();puts(”n請輸入你的選擇(0~6):“);break;case '8':help();puts(”n請輸入你的選擇(0~6):“);break;default:puts(”輸錯了!笨蛋!快點按數(shù)字1鍵錄入學(xué)生信息吧!“);break;} a=getche();} end:;puts(”謝謝您使用本系統(tǒng),歡迎再次使用!"); 第19頁(共25頁) C語言課程設(shè)計報告——劉顯安 } ————————————————————————— 四、調(diào)試 主要是通過截圖來顯示運行過程 以下是程序運行的主界面: 按1后,開始錄入信息,程序會提示你輸入學(xué)生個數(shù)(例如本例中輸入4個),當(dāng)輸完4個學(xué)生的信息時,程序會提示你已輸入完畢: 第20頁(共25頁) C語言課程設(shè)計報告——劉顯安 學(xué)生信息錄入完畢,提示輸入(0到6)進(jìn)行選擇: 第21頁(共25頁) C語言課程設(shè)計報告——劉顯安 這時我選擇按2輸出所有學(xué)生信息,按9返回: 按3按姓名查詢信息: 按4按學(xué)號查詢信息: 第22頁(共25頁) C語言課程設(shè)計報告——劉顯安 按5刪除學(xué)生信息,這是按學(xué)號刪除學(xué)生信息,本例中,刪除學(xué)號為41212的學(xué)生信息: 刪除成功后,系統(tǒng)自動將剩下的學(xué)生信息列出: 按6按學(xué)號從小到大進(jìn)行排序,可以發(fā)現(xiàn),排序成功: 第23頁(共25頁) C語言課程設(shè)計報告——劉顯安 按8查看幫助函數(shù): 呵呵,這是我設(shè)置的關(guān)于函數(shù),滿足一下敝人的虛榮心嘛^_^,版權(quán)所有,翻版必究哦! 最后按0退出系統(tǒng): 第24頁(共25頁) C語言課程設(shè)計報告——劉顯安 呵呵,怎么樣?我寫的程序還行吧。嘿嘿…… 三、總結(jié) 這個程序我只是總體上參考了一下網(wǎng)上程序的架構(gòu),具體的各個函數(shù)是參照課本上《鏈表》那一章的內(nèi)容的,比如結(jié)構(gòu)體的建立、查找和排序等功能,這些書上都有類似的,其中排序功能雖沒有原版的,但是在第六章中有一個用冒泡法排序的例題,我就是仿照這個模式來對結(jié)構(gòu)體進(jìn)行排序的,總之整個程序中蘊含了我很多的汗水。 第25頁(共25頁)第二篇:語言課程設(shè)計-學(xué)生成績管理系統(tǒng)
第三篇:C語言課程設(shè)計任務(wù)書-學(xué)生通訊系統(tǒng)(范文模版)
第四篇:課程設(shè)計--選課注冊管理系統(tǒng)(小編推薦)
第五篇:學(xué)生通訊錄管理系統(tǒng)(C語言課程設(shè)計實驗報告)