計算機技術(shù)基礎(chǔ)(C語言) 課程設(shè)計指導書.doc_第1頁
計算機技術(shù)基礎(chǔ)(C語言) 課程設(shè)計指導書.doc_第2頁
計算機技術(shù)基礎(chǔ)(C語言) 課程設(shè)計指導書.doc_第3頁
計算機技術(shù)基礎(chǔ)(C語言) 課程設(shè)計指導書.doc_第4頁
計算機技術(shù)基礎(chǔ)(C語言) 課程設(shè)計指導書.doc_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

計算機技術(shù)基礎(chǔ)(C語言)課程設(shè)計指導書目錄前言2設(shè)計一3設(shè)計二12設(shè)計三19設(shè)計四20設(shè)計五21設(shè)計六22設(shè)計七23設(shè)計八24設(shè)計九25設(shè)計十26設(shè)計十一27設(shè)計十二28報告樣文29C語言圖形函數(shù)38 前言課程設(shè)計是課程教學中的一項重要內(nèi)容,是完成教學計劃達到教學目標的重要環(huán)節(jié),是教學計劃中綜合性較強的實踐教學環(huán)節(jié),它對幫助學生全面牢固地掌握課堂教學內(nèi)容、培養(yǎng)學生的實踐和實際動手能力、提高學生全面素質(zhì)具有很重要。本實驗指導書的主旨是:輔助非計算機專業(yè)的學生進行計算機技術(shù)基礎(chǔ)課程設(shè)計。本課程的課程設(shè)計實際是非計算機應(yīng)用專業(yè)學生學習完計算機技術(shù)基礎(chǔ)課程后,進行的一次全面的綜合訓練,其目的在于加深對計算機程序設(shè)計思路和基本知識的理解,掌握運用軟件開發(fā)的基本方法。按課程設(shè)計指導書提供的課題,學生可以根據(jù)自己的情況和實驗的基本需求獨立完成設(shè)計,標有“可選”的部分可根據(jù)設(shè)計時間的安排及工作量的大小適當選擇。也可選用其他課題或組成設(shè)計小組,分模塊進行,共同協(xié)作完成一個課題的設(shè)計任務(wù)。要求書寫詳細的設(shè)計說明書,對復(fù)雜的代碼段和程序段,應(yīng)畫出程序流程圖。設(shè)計完成后,必須提交設(shè)計報告,軟件數(shù)據(jù)盤。由指導教師按優(yōu)秀、良好、中等、及格和不及格五級分制評定成績。成績不及格者不能獲得學分,其余可獲得1.5學分。嚴禁相互抄襲。設(shè)計一 電子通訊錄一、【實驗?zāi)康摹颗囵B(yǎng)學生綜合利用C語言進行程序設(shè)計的能力,主要是培養(yǎng)學生利用系統(tǒng)提供的標準函數(shù)進行創(chuàng)新設(shè)計。二、【實驗條件】在安裝Windows2000、DOS和TC環(huán)境的微機機房進行。三、【實驗內(nèi)容】1. add添加好友信息2. revice修改好友信息 3. delete刪除一個好友信息 4.name 按名字查找一個好友信息 5.birthday按生日查找一個好友信息電子通訊錄功能如下:Functionchoose1.Read2.Append3.Delete4.Search5.Saveandexit6.Quit說明:上圖是電子通訊錄的主菜單,利用它,將能夠輕松地錄入一個朋友的電話號碼,通訊地址和出生日期,而且它還提供了檢索和刪除功能。在后面還將提供按生日先后排序的功能,這些都有助于該通訊錄的管理。四、【實驗準備】指導教師由任課教師或本專業(yè)教師和工程技術(shù)人員擔任。指導教師在課程設(shè)計開始前一個月下發(fā)課程設(shè)計指導書,學生根據(jù)個人情況選定自己的課題。選定題目后查找資料、準備設(shè)計材料。五、【設(shè)計思想:】1用順序表設(shè)計電子通訊錄的結(jié)構(gòu)為了表示較為復(fù)雜的數(shù)據(jù)內(nèi)容,一般用結(jié)構(gòu)這種數(shù)據(jù)類型,第一步就是在結(jié)構(gòu)中定義所需要的各項信息。一般的通訊錄都包括姓名,性別,出生年月,通訊地址和聯(lián)系電話這幾項,而在這幾項中,出生年月又包括年份,月份和日期三項,通訊地址包括郵編和家庭地址二項,我們把這些聯(lián)系較為緊密的內(nèi)容又用單獨的結(jié)構(gòu)表示,這樣就產(chǎn)生了電子通訊錄的基本結(jié)構(gòu):structaddr/*通訊地址結(jié)構(gòu)定義*/charpost_num10;/*郵編*/charaddr40;/*家庭地址*/;structbirth/*出生年月結(jié)構(gòu)定義*/intyear;/*年份*/intmonth;/*月份*/intday;/*日期*/;structfriend/*電子通訊錄結(jié)構(gòu)定義*/intnumber;/*序號*/charname20/*姓名*/charsex;/*性別*/structbirthbirth;/*出生年月*/structaddraddr;/*通信地址*/chartelephone13;/*聯(lián)系電話*/;定義的主結(jié)構(gòu)friend包含了前述的五項內(nèi)容name,sex,和telephone分別代表了姓名,性別和聯(lián)系電話。為了讓結(jié)構(gòu)中的各項組分更加清晰,定義了二個小結(jié)構(gòu)birth和addr分別代表出生年月和通訊地址,因此實際上friend包含了8項內(nèi)容。有了結(jié)構(gòu)定義后,我們可以很輕松地構(gòu)造出電子通訊錄的主體:stryctfriendfriends50;采用一維數(shù)組friends50,正是用到了順序表這種最簡單的數(shù)據(jù)結(jié)構(gòu)來表示問題。2.增添電子通訊錄中的內(nèi)容對于電子通訊錄這樣一張順序表來說,內(nèi)容的錄入是必不可少的操作。由于采用的是順序存儲結(jié)構(gòu)。這項工作很簡單,只需要在把輸入的信息按順序放在空的friends數(shù)組元素中即可。函數(shù)Data_Input完成了信息的錄入工作:voidData_input(intj)friendsj.number=j;printf(nnntNo%drecord,j);printf(nntName:);/*讀入姓名*/scanf(%s,);printf(ntSex(m/f):);/*讀入姓別*/scanf(%c,&friendsj.sex);printf(ntbirthday:);/*讀入出生年月*/printf(nttyear:);scanf(%d,&friendsj.birth.year);printf(nttmonth);scanf(%d,&friendsj.birth.month);printf(nttday);scanf(%d,&friendsj.birth.day);printf(ntPostnumber:);/*讀入郵編*/scanf(%s,friendsj.addr.post_num);printf(ntAddress:);/*讀入家庭地址*/scanf(%s,friendsj.addr.addr);printf(nttelephone:);/*讀入聯(lián)系電話*/scanf(%s,friendsj.telephone);錄入完畢后典型的一份信息如下所示:NO:1Name:張三Sex:mBirthday(y/m/d):1980512Postnum:100034Address:BeijingUniversityTele:(010)620052003.電子通訊錄記錄的維護(插入與刪除)在實際使用中,數(shù)據(jù)資料輸入后,還需要不斷的更新和維護操作,最常見的是數(shù)據(jù)的插入與刪除。作為順序表來說,如何在插入與刪除數(shù)據(jù)資料后仍然能保持原有數(shù)據(jù)之間的關(guān)系,是需要考慮的關(guān)鍵問題。電子通訊錄的插入算法如下:printf(ntInsertNo:);/*錄入插入位置*/scanf(%d,&k);for(j=i+1;jk;j-)/*插入位置后的元素順序后移*/strcpy(,);/*交換元素內(nèi)容*/friendsj.sex=friendsj+1.sex;friendsj.birth.year=friendsj-1.birth.year;friendsj.birth.month=friendsj-1.birth.month;friendsj.birth.day=friendsj-1.birth.day;strcpy(friendsj.addr.post_num,friendsj-1.addr.post_num);strcpy(friendsj.addr.addr,friendsj-1.addr.addr);strcpy(friendsj.telephone,friendsj-1.telephone);Data_Input(k);/*插入位置上填入待插入元素*/i+;/*總元素個數(shù)增1*/刪除算法如下:printf(ntDeleteNo:);/*讀入刪除位置*/scanf(%d,&k);for(j=k;ji;j+)/*刪除位置前的元素順序前移*/strcpy(,frindsj+1.name);friendsj.sex=frindsj+1.sex;friendsj.birth.year=friendsj+1.birth.year;friendsj.birth.month=friendsj+1.birth.month;frindsj.birth.day=friendsj+1.birth.day;strcpy(friendsj.addr.post_num,friendsj+1.addr.post_num);strcpy(friendsj.addr.addr,friendsj+1.addr.addr);strcpy(friendsj.telephone,friendsj+1.telephone);i-;/*元素總數(shù)減1*/函數(shù)search的代碼如下:search()printf(ntPleaseinputname:);/*提示輸入要查詢的姓名*/gets(search_name);for(j=1;j1)/*查詢失敗,給出提示信息*/printf(ntNosuchrecords);文件存盤代碼如下FILE*fp;voidData_Save()intj;fp=fopen(friend.txt,w);/*c以可寫方式打開或創(chuàng)建文件friend.txt*/for(j=1;j=i;j+)fwrite(&friendsj,sizeof(structfriend),1,fp);fclose(fp);處理有關(guān)的文件操作,最容易忽視的就是關(guān)閉文件的操作.如果不及時關(guān)閉,容易造成文件內(nèi)容的丟失,或者占用大量的內(nèi)存,導至程序的執(zhí)行速度下降。從文件friend.txt讀取記錄的代碼如下:voidData_Load()intj;longk;fp=fopen(friend.txt,r+t);/*打開文件friend.txt*/if(fp!=NULL)for(i=1;i50;i+)if(j=fgetc(fp)=EOF)/*判斷是否到了文件尾*/return;k=i-1;fseek(fp,k*sizeof(structfriend),SEEK_SET);fread(&friendsi,sizeof(structfriend),1,fp);/*從文件中讀一條記錄*/else/*如果文件不存在*/fp=fopen(friend.txt,w);i=1;六、【總體設(shè)計】在前面五個步聚的基礎(chǔ)上開始進行程序主函數(shù)的設(shè)計。主函數(shù)首先調(diào)用初始化函數(shù)Data_Load從已有文件friend.txt讀取記錄,如果是第一次使用,那么該文件不存在就創(chuàng)建一個新文件,接下來程序進入一個無限循環(huán),首先用一系列printf語句打印出各功能的選擇菜單,并提示按下數(shù)字鍵調(diào)用相應(yīng)的功能。這里使用了switch分支結(jié)構(gòu)來處理按鍵消息,這是一種典型的用法,當選擇了quit菜單后,程序給出是否存盤的提示。/*-全部源代碼如下-*/#include#include#include#include#includestructaddr/*通訊地址結(jié)構(gòu)定義*/charpost_num10;/*郵編*/charaddr40;/*家庭地址*/;structbirth/*出生年月結(jié)構(gòu)定義*/intyear;/*年份*/intmonth;/*月份*/intday;/*日期*/;structfriend1/*電子通訊錄結(jié)構(gòu)定義*/intnumber;/*序號*/charname20;/*姓名*/charsex;/*性別*/structbirthbirth;/*出生年月*/structaddraddr;/*通信地址*/chartelephone13;/*聯(lián)系電話*/friends50;FILE*fp;inti;voidData_Load()intj;longk;fp=fopen(friend.txt,r+t);/*打開文件friend.txt*/if(fp!=NULL)for(i=1;i50;i+)j=fgetc(fp);if(j=EOF)/*判斷是否到了文件尾*/return;k=i-1;fseek(fp,k*sizeof(structfriend1),SEEK_SET);fread(&friendsi,sizeof(structfriend1),1,fp);/*從文件中讀取一條記錄*/elsefp=fopen(friend.txt,w);i=1;voidData_Show(intj)/*打印記錄的詳細資料*/printf(nntNo:%3dn,friendsj.number);printf(ntBirthday(y/m/d):%4d%2d%2d,friendsj.birth.year,friendsj.birth.month,friendsj.birth.day);printf(ntPostnum:%-10s,friendsj.addr.post_num);printf(ntaddress:%-40s,friendsj.addr.addr);printf(ntTele%-13s,friendsj.telephone);voidData_Input(intj)/*記錄插入函數(shù)*/fflush(stdin);friendsj.number=j;printf(nnntNo%drecord,j);printf(nntName:);/*讀入姓名*/scanf(%s,); fflush(stdin);printf(ntSex(m/f):);/*讀入性別*/scanf(%c,&friendsj.sex);printf(nt-birthday-);/*讀入出生年月*/printf(ntyear:);scanf(%d,&friendsj.birth.year);printf(nttmonth:);scanf(%d,&friendsj.birth.month);printf(nttday:);scanf(%d,&friendsj.birth.day);printf(ntPost_number:);/*讀入郵編*/scanf(%s,friendsj.addr.post_num);printf(ntAddress:);/*讀入家庭地址*/scanf(%s,friendsj.addr.addr);printf(nttelephone:);/*讀入聯(lián)系電話*/scanf(%s,friendsj.telephone);voidData_Save()intj;fp=fopen(friend.txt,w);for(j=1;j=i;j+)fwrite(&friendsj,sizeof(structfriend1),1,fp);voidmain()intj,k;charch;char*search_name;clrscr();Data_Load();i-;doprintf(nnntFunctionchoose:); printf(nt1.Read); printf(nt2.Append); printf(nt3.Delete); printf(nt4.Search); printf(nt5.Insert); printf(nt6.SaveandExit); printf(nt7.Quit); printf(nn); printf(tChoice:); ch=getche(); switch(ch) case1:j=1;/*顯示通訊錄中的所有記錄*/while(getch()!=0x1b&ji)printf(ntEndofe_noten); break;case2:/*增加通訊錄中的記錄*/while(getch()!=0x1b&i50)i+;Data_Input(i);if(i=50)printf(nte_noteisfilledn);break;case3:/*刪除通訊錄中的記錄*/if(i1)printf(ntNorecordsn);break;printf(ntDeleteNo:);/*讀入刪除位置*/scanf(%d,&k);for(j=k;ji;j+)/*刪除位置前的元素順序前移*/strcpy(,friendsj+1.name);friendsj.sex=friendsj=1.sex;friendsj.birth.year=friendsj+1.birth.year;friendsj.birth.month=friendsj+1.birth.month;friendsj.birth.day=friendsj+1.birth.day;strcpy(friendsj.addr.post_num,friendsj+1.addr.post_num);strcpy(friendsj.addr.addr,friendsj+1.addr.addr);strcpy(friendsj.telephone,friendsj+1.telephone);i-;/*元素總數(shù)減1*/break;case4:/*通訊錄查詢功能*/printf(ntPleaseinputname:);gets(search_name);for(j=1;j1)/*查詢失敗*/printf(ntNosuchrecords);break;case5:printf(ntInsertNo:);/*錄入插入位置*/scanf(%d,&k);for(j=i+1;jnext=NULL; rear-next=p; rear=p; 其中rear即為尾指針,而指針p指向新增的節(jié)點。算法的流程和上述完全一樣。錄入留言記錄的函數(shù)代碼如下所示:void Data_Input(struct record *p) struct data *d; struct time *t; front+; getdate(t); /*取系統(tǒng)時間*/ p-t_time.ti_hour=ti_hour; p-t_time.ti_min=ti_min; p-time.ti_sec=ti_sec; printf(nnnDate:%4d %2d %2d,p-t_date.da_year,p-t_date.da_mon,p-t_date.da_day); printf(nTime: %2d: %2d: %2d,p-t_time.ti_hour,p-t_time.ti_min,p-t_time.ti_sec); printf(nntPlease input record:); gets(p-event); /*輸入留言內(nèi)容*/ p-next=NULL; 上述函數(shù)中,采用了getdate()和gettime()兩個函數(shù)用來獲取系統(tǒng)的日期和時間。這兩個函數(shù)只返回指向當前日期和時間的兩個指針,還需要將值立即賦給留言記錄中的結(jié)構(gòu)成員。3、出隊操作-留言記錄的刪除 和入隊操作相反的是出隊操作,即在隊頭將記錄刪除,這也是符合“先進先出”的原則的。 由于設(shè)置了頭節(jié)點,因此出隊操作顯得非常簡單。只需要修改頭節(jié)點的指針域,讓其指向第二個節(jié)點即可。而第一個節(jié)點則將其釋放掉。其余節(jié)點,包括尾指針都不必做任何修改操作。 例如一個隊列原本由頭節(jié)點、節(jié)點1和節(jié)點2相鏈而成,執(zhí)行出隊操作時,相當于將頭節(jié)點和節(jié)點1、節(jié)點1和節(jié)點2之間的兩條鏈斷開,而用斷鏈將頭節(jié)點和節(jié)點2鏈上,多出來的節(jié)點1將其釋放掉。 典型的出隊操作算法如下:void queue_delete(struct element head) struct element *temp; temp=head.next-next; head.next=temp; 在執(zhí)行出隊操作時,一定要記住需要將出隊的節(jié)點釋放。由于采用鏈式存儲,事先無法估計需要多大的存銷售市場空間,也不必去估計。每次新增一個節(jié)點時,都是調(diào)用內(nèi)存分配函數(shù)為新節(jié)點申請一塊內(nèi)存,如下所示: p=malloc(sizeof(struct record)函數(shù)malloc開辟了一塊大小為record 結(jié)構(gòu)元素的內(nèi)存區(qū)域,把掻向該區(qū)域的指針賦給指針p,這塊內(nèi)存單元的所有權(quán)就從系統(tǒng)轉(zhuǎn)移到了指針p。當p指向的數(shù)據(jù)元素被刪除(出隊)時,一定要用如下方式將內(nèi)存單 所有權(quán)還給系統(tǒng): free(p); 函數(shù)free()的作用和malloc()剛好相反,它將指定的內(nèi)存單元還給了系統(tǒng)。因為系統(tǒng)的內(nèi)存單元是有限的,如果不及時釋放占用的內(nèi)存,會造成內(nèi)存資源耗盡或由于內(nèi)存的減少導致程序執(zhí)行速度下降。4、記錄的存取的讀取void Data_Save(struct record *p) /*記錄文件的存取*/ int j; fp=fopen(tele_rec.txt,w); /*以可寫方式打開記錄文件*/ while(p!=NULL) /*若未到隊尾,徨將記錄存儲到文件中*/ fwrite(p.sizeof(struct record),1,fp); p=p-next; fclose(fp); /*關(guān)閉指定的文件*/struct event *Data_Load() /*從記錄文件中讀取記錄*/ long k; struct record *p,*q; p=event_head.next; fp=fopen(tele_rec.txt,r+t); /*以讀方式打開記錄文件*/ if(fp!=NULL) while(!feof(fp) /*依次讀取記錄并執(zhí)行入隊操作*/ fread(q,sizeof(struct record),1,fp); p-next=q; /*這里p為尾指針,q為指向新節(jié)點的指針*/ p=q; p-next=NULL; event_end=p; else fp=fopen(tele_rec.txt,w); /*若文件不存在,創(chuàng)建指定文件名的新文件*/ event_head.next=NULL; event_end=event_head.next; 六、【總體設(shè)計】在前面五個步聚的基礎(chǔ)上開始進行程序主函數(shù)的設(shè)計。主函數(shù)首先調(diào)用初始化函數(shù)/*-留言簿代碼如下-*/#include#include#includestruct record struct date t_date; /*定義留言日期*/ struct time t_time; /*定義留言時間*/ char event100; /*定義電話內(nèi)容*/ struct record *next; /*指向下一個節(jié)點的指針*/event_head;struct record *event_end;int front;FILE *fp;void Data_Save(struct record *p) /*記錄文件的存儲*/ int j; fp=fopen(tele_rec.txt,w); /*以可寫方式打開記錄文件*/ while(p!=NULL) /*若未到隊尾,循環(huán)將記錄存儲到文件中*/ fwrite(p,sizeof(struct record),1,fp); p=p-next; fclose(fp); /*關(guān)閉指定的記錄文件*/struct event *Data_Load() /*從記錄文件中讀取記錄*/ long k; struct record *p,*q; p=event_head.next; fp=fopen(tele_rec.txt,r+t); /*以讀方式打開文件*/ if(fp!=NULL) while(!feof(fp) /*依次讀入記錄并執(zhí)行入隊操作*/ fread(q,sizeof(struct record),1,fp); p-next=q; /*這里p為尾指針,q為指向新節(jié)點的指針*/ p=q; p-next=NULL; event_end=p; else fp=fopen(tele_rec.txt,w); /*若該文件不存在,創(chuàng)建指定文件名的新文件*/ event_head.next=NULL; event_end=event_head.next; void Data_Input(struct record *p) struct data *d; struct time *t; front+; getdate(d);/*取系統(tǒng)日期*/p-t_date.da_year=d-da_year;p-t_date.da_mon=d-da_mon;p-t_date.da_day=d-da_day; gettime(t); /*取系統(tǒng)時間*/ p-t_time.ti_hour=t-ti_hour; p-t_time.ti_min=t-ti_min; p-time.ti_sec=t-ti_sec; printf(nnnDate:%4d %2d %2d,p-t_date.da_year,p-t_date.da_mon,p-t_date.da_day); printf(nTime: %2d: %2d: %2d,p-t_time.ti_hour,p-t_time.ti_min,p-t_time.ti_sec); printf(nntPlease input record:); gets(p-even

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論