




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
河南城建學(xué)院《C語言程序設(shè)計》課程設(shè)計報告適用專業(yè)工程管理專業(yè)課程名稱C語言程序設(shè)計指導(dǎo)教師趙軍民、魏新紅、張芳芳設(shè)計人:051409112王田2010年6月一、設(shè)計目的和要求 1.通過課程設(shè)計全面掌握《C語言程序設(shè)計》關(guān)鍵知識點,掌握C語言中數(shù)組、指針、結(jié)構(gòu)體、文件等方面的基本知識。
2.通過課程設(shè)計了解并掌握C語言程序設(shè)計的方法,熟悉C程序設(shè)計的開發(fā)環(huán)境及C程序的調(diào)試過程。
3.培養(yǎng)查閱參考資料、手冊的自學(xué)能力,通過獨立思考深入鉆研有關(guān)問題,學(xué)會自己分析、解決問題的方法。二、內(nèi)容與設(shè)計思想1、系統(tǒng)功能描述(1)編譯時,主菜單為如下:輸入記錄輸入記錄
顯示記錄
2、
按姓名查找
3、
按電話號碼查找
4、
插入記錄
5、
按姓名排序
6、
刪除記錄
7、
記錄保存文件
8、Quit(2)各項功能:0、輸入記錄:將所要記錄的人的信息輸入。1、顯示記錄:將所輸入的記錄一一顯示。2、按姓名查找:從所記錄中輸入姓名查找其信息。3、按電話號碼查找:輸入學(xué)生的號碼查找其信息。4、插入記錄:在所記錄中插入需要記錄的人的信息。5、按姓名排序:對已有的記錄按姓名第一個字母的ASCII碼大小排列,并一一顯示。6、刪除記錄:從記錄中刪除某學(xué)生的信息。7、記錄保存文件:對輸入的學(xué)生的信息進行保存。8、退出程序。2、總體設(shè)計思想運用所學(xué)知識編寫一個簡單的學(xué)生通訊錄管理系統(tǒng)的程序,使它具有以下的功能:輸入學(xué)生的學(xué)號,姓名,班級,電話號碼,地址,顯示學(xué)生記錄,增加學(xué)生記錄,按照學(xué)生姓名進行排序,刪除學(xué)生記錄,查找學(xué)生記錄,保存學(xué)生記錄。其主要結(jié)構(gòu)用如下圖示表示:三、程序具體分析及操作時問題。1、程序具體分析。(1)文件名的使用:include稱為文件包含命令,被包含的文件通常是由系統(tǒng)提供的,其擴展名為.h.stdio為standardinputoutput的縮寫,意為“標(biāo)準(zhǔn)輸入輸出”.代碼中只要有用到printf
scanf等函數(shù),頭文件就要寫#include<stdio.h>這個在代碼中必不可少的,因為編寫代碼就是為了輸出結(jié)果
;用到像getch()這種鍵盤輸入函數(shù)的話,就需要用到#include<conio.h>;用到系統(tǒng)標(biāo)準(zhǔn)輸出函數(shù)的話,就用到#include<stdlib.h>;用到字符數(shù)組就要用#inciude<string.h>。(2)指針使用:如FILE*fp、定義1個文件型指針變量,指針變量名字分別叫fp,定義后fp是指向FILE類型結(jié)構(gòu)體的指針。可以使他指向某個文件的結(jié)構(gòu)體變量,從而通過該結(jié)構(gòu)體變量中的文件信息能夠訪問該文件。指針是地址變量:它的值有兩種:其一是地址,其二是內(nèi)容。不同的表達(dá)方式可以取不同的值。指針是可以運算的,它的運算法則與變量是一致的。(3)結(jié)構(gòu)體:如structLinkList定義結(jié)構(gòu)體為LinkList。當(dāng)結(jié)構(gòu)體成員為指針的時候,每當(dāng)給這個成員賦值之前必須先為這個結(jié)構(gòu)體成員分配一個內(nèi)存空間。(4)字符數(shù)組的比較:如strcmp(student[i].name,name)==0,strcmp(student[i].phone,phone)==0,strcmp(student[i].phone,phone)==NULL都是用來比較輸入的與原有的,當(dāng)相等時即為0.(5)實現(xiàn)文件的打開和輸入:除有scanf和printf以外還涉及到其他的,如fp=fopen("student.bin","wb"))==NULL用fopen()函數(shù)來實現(xiàn)打開文件;fwrite(&student[i],sizeof(structrecord),1,fp)!=1fwrite用于二進制的文件輸入輸出也用于讀寫記錄這里的記錄是指一串固定長度的字節(jié)。(6)C語言中的一些結(jié)構(gòu)。如for(j=i;j<num-1;j++)對for語句正確分析,實現(xiàn)自增自減,并執(zhí)行下一語句,實現(xiàn)變量的循環(huán);switch(menu_select()){case0:adduser();break;case1:list();break;case2:search();break;case3:display();break;case4:add();break;case5:listbyname();break;case6:dele();break;case7:save();break;case8:exit(0);}用來實現(xiàn)多分支選擇語句;if語句的嵌套及與else連用;do….while的使用如do{printf("\nEnteryouchoice(0~8):");scanf("%s",s);a=atoi(s);}while(a<0||a>8);returna;2.操作時問題分析編好后進行運行時,有一些遺漏問題,如大括號的使用是否對起;語句的使用是否錯誤;對一個變量是否定義;輸出是否有遺漏;數(shù)據(jù)的使用是否符合規(guī)定,定義是否正確等。對于調(diào)試,要看程序是否運行且達(dá)到預(yù)期效果,按照思路能夠正確的使用。開始時在姓名輸入上出了問題,但是是小問題,修改一下便可實現(xiàn)姓名、學(xué)號、班級、電話號碼、地址的正常輸出。四、個人任務(wù)得到正確的程序后,并對其進行調(diào)試、測試成功后,進行分組任務(wù),而我得到的任務(wù)如下程序及解釋:list()/*顯示記錄中的信息*/{inti;/*定義整形變量i*/system("cls");/*清屏*/if(num!=0)/*如果信息記錄不為0*/{printf("\n\t\t***************以下為通訊錄所有信息************");for(i=0;i<num;i++)/*將記錄中信息一一輸出*/{printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t電話:%s",student[i].phone);printf("\n\t\t地址:%s",student[i].adress);printf("\n\t\t班級:%s",student[i].classnumber);printf("\n\t\t學(xué)號:%s",student[i].number);printf("\t\t");if(i+1<num){printf("\n\t\t__________________________");/*輸出間隔符*/system("pause");/*從程序中調(diào)用pause命令*/}}printf("\n\t\t************************************************");}elseprintf("\n\t\t通訊錄中無任何紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單:");getch();return(0);/*返回0*/}search()/*尋找信息*/{intmark=0;inti;inta=0;printf("\n\t\t*****************按姓名查找*******************");charname[20];/*定義名字為20個字符*/printf("\n\t\t請輸入姓名:");scanf("%s",name);for(i=a;i<num;i++)/*數(shù)量實現(xiàn)自加*/{if(strcmp(student[i].name,name)==0)/*與記錄中名字一一比較*/{printf("\n\t\t*************以下是您查找的用戶信息***********");printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t電話:%s",student[i].phone);printf("\n\t\t地址:%s",student[i].adress);printf("\n\t\t學(xué)號:%s",student[i].number);printf("\n\t\t************************************************");mark++;if((i+1)<num){printf("\n\t\t是否繼續(xù)查找相同名字的用戶信息:(y/n)");if(getch()=='y')/*輸入y*/{a=i;continue;/*終止此程序*/}elsereturn(0);}else{printf("\n\t\t按任意鍵返回主菜單");getch();return(0);}}}if(mark!=0)/*{printf("\n\t\t沒有相同姓名的用戶紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單");getch();return(0);}else{printf("\n\t\t沒有相同姓名的用戶紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單");getch();return(0);}}五、心得體會這次的課程設(shè)計實驗是對我們進入大學(xué)以來學(xué)習(xí)C語言結(jié)果的一次大考驗。自己動手,發(fā)現(xiàn)問題和解決問題。并發(fā)現(xiàn)了許多自己的不足,平時沒掌握的知識在實踐中暴漏,經(jīng)過不斷的思考,查閱書籍和上網(wǎng)查資料及上機運行,解決了大部分問題,還稍微有些小問題。但是,我相信在今的學(xué)習(xí)中,一定能把它解決好。當(dāng)今計算機應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握程序開發(fā)技術(shù)是十分重要的,而C語言又是最常見,功能最強大的一種高級語言,因此做好C語言課程設(shè)計是十分必要的。我不僅鞏固《C語言程序設(shè)計》課程學(xué)習(xí)的內(nèi)容,掌握設(shè)計的基本方法,強化上機動手能力,還進一步掌握以下了知識:數(shù)據(jù)類型、分支控制、循環(huán)控制、函數(shù)的定義及調(diào)用、結(jié)構(gòu)體及數(shù)組、指針、文件操作、編譯預(yù)處理等;通過課程設(shè)計,掌握了程序的局部測試、調(diào)試方法,建立程序系統(tǒng)調(diào)試、測試的基本概念和思想,學(xué)會較大程序的系統(tǒng)測試和調(diào)試方法。當(dāng)我選擇學(xué)生通訊錄管理系統(tǒng)時,首先系統(tǒng)分析主要思路及框架,與同學(xué)討論,聯(lián)系所學(xué)知識,盡管一些文件要同組幫助找,也還有一些循環(huán)語句要具體分析,了解其運行路線,尤其是for,while,if等的使用。我知道書上和老師講的有限,故上網(wǎng)搜也是一種利用資源的表現(xiàn)。在編程中,特別是結(jié)構(gòu)體,指針的部分,幾乎是一片空白。不過經(jīng)過幾天的努力,大體上把課本上的知識點看了一遍,知識點也都基本是撐握了,所以下一步就是開始正式的編程序了。當(dāng)讀懂了C語言編程的基本過程和方法。經(jīng)過一波三折,終于開始正式編程。團隊精神不可少,分工合作也是必須的,身為組長就要以身作則,帶領(lǐng)好小組,做好各項工作。在開始,對本組人員進行整理,分析其特點,再分配任務(wù),然后進行綜合應(yīng)用,最后對所需資料及要編的程序進行整理得出最后程序。通過這次課程設(shè)計使我們懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在課程設(shè)計過程中,收獲知識,提高能力的同時,我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過程中,我一定會把課程設(shè)計的精神帶到生活中,是生活也更加好。六、源代碼為:#include"stdio.h"#include"stdlib.h"#include"string.h"#include"conio.h"#include"stdlib.h"#definenull0structrecord{charname[20];charphone[20];charadress[40];charclassnumber[10];charnumber[30];}student[500];structLinkList{structrecordUS;structLinkList*next;}a;structLinkList*head=null;intnum=0;FILE*fp;intmenu_select();intadduser();intlist();intsearch();intdisplay();intadd();intlistbyname();intdele();intsave();intexit();voidmain(){system("cls");for(;;){switch(menu_select()){case0:adduser();break;case1:list();break;case2:search();break;case3:display();break;case4:add();break;case5:listbyname();break;case6:dele();break;case7:save();break;case8:exit(0);}}}menu_select(){chars[80];inta;printf("*_*pressanykeyentermenu!*_*\n");getch();system("cls");printf("\t\t********************MENU*********************\n\n");printf("\t\t0.輸入記錄\n");printf("\t\t1.顯示記錄\n");printf("\t\t2.按姓名查找\n");printf("\t\t3.按電話號碼查找\n");printf("\t\t4.插入記錄\n");printf("\t\t5.按姓名排序\n");printf("\t\t6.刪除記錄\n");printf("\t\t7.記錄保存文件\n");printf("\t\t8.Quit\n");printf("\t\t***********************************************\n");do{printf("\nEnteryouchoice(0~8):");scanf("%s",s);a=atoi(s);}while(a<0||a>8);returna;}adduser(){printf("\n\t\t****************請輸入用戶信息****************\n");printf("\n\t\t輸入姓名:");scanf("%s",&student[num].name);printf("\n\t\t輸入電話號碼:");scanf("%s",&student[num].phone);printf("\n\t\t輸入地址:");scanf("%s",&student[num].adress);printf("\n\t\t輸入班級:");scanf("%s",&student[num].classnumber);printf("\n\t\t輸入學(xué)號:");scanf("%s",&student[num].number);num++;printf("\n\t\t是否繼續(xù)添加?(Y/N):");if(getch()=='y')adduser();return(0);}list(){inti;system("cls");if(num!=0){printf("\n\t\t***************以下為通訊錄所有信息************");for(i=0;i<num;i++){printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t電話:%s",student[i].phone);printf("\n\t\t地址:%s",student[i].adress);printf("\n\t\t班級:%s",student[i].classnumber);printf("\n\t\t學(xué)號:%s",student[i].number);printf("\t\t");if(i+1<num){printf("\n\t\t__________________________");system("pause");}}printf("\n\t\t************************************************");}elseprintf("\n\t\t通訊錄中無任何紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單:");getch();return(0);}search(){intmark=0;inti;inta=0;printf("\n\t\t*****************按姓名查找*******************");charname[20];printf("\n\t\t請輸入姓名:");scanf("%s",name);for(i=a;i<num;i++){if(strcmp(student[i].name,name)==0){printf("\n\t\t*************以下是您查找的用戶信息***********");printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t電話:%s",student[i].phone);printf("\n\t\t地址:%s",student[i].adress);printf("\n\t\t學(xué)號:%s",student[i].number);printf("\n\t\t************************************************");mark++;if((i+1)<num){printf("\n\t\t是否繼續(xù)查找相同名字的用戶信息:(y/n)");if(getch()=='y'){a=i;continue;}elsereturn(0);}else{printf("\n\t\t按任意鍵返回主菜單");getch();return(0);}}}if(mark!=0){printf("\n\t\t沒有相同姓名的用戶紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單");getch();return(0);}else{printf("\n\t\t沒有相同姓名的用戶紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單");getch();return(0);}}display(){intmark=0;inti;inta=0;printf("\n\t\t******************按電話查找******************");charphone[10];printf("\n\t\t請輸入電話號碼:");scanf("%s",phone);for(i=0;i<num;i++){if(strcmp(student[i].phone,phone)==0){printf("\n\t\t**************以下是您查找的用戶信息**********");printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t電話:%s",student[i].phone);printf("\n\t\t地址:%s",student[i].adress);printf("\n\t\t學(xué)號:%s",student[i].number);printf("\n\t\t************************************************");printf("\n\t\t按任意鍵返回主菜單:");mark++;getch();return(0);}}if(mark==0){printf("\n\t\t沒有改用戶的信息");printf("\n\t\t按任意鍵返回主菜單");getch();return(0);}return(0);}add(){inti;if((fp=fopen("student.bin","wb"))==NULL){printf("\n\t\t文件打開失敗");}for(i=0;i<num;i++){if(fwrite(&student[i],sizeof(structrecord),1,fp)!=1){printf("\n\t\t寫入文件錯誤!\n");}printf("\n\t\t****************請輸入用戶信息****************\n");printf("\n\t\t輸入姓名:");scanf("%s",&student[num].name);printf("\n\t\t輸入電話號碼:");scanf("%s",&student[num].phone);printf("\n\t\t輸入地址:");scanf("%s",&student[num].adress);printf("\n\t\t輸入班級:");scanf("%s",&student[num].classnumber);printf("\n\t\t輸入學(xué)號:");scanf("%s",&student[num].number);num++;printf("\n\t\t是否繼續(xù)添加?(Y/N):");if(getch()=='y')adduser();return(0);}fclose(fp);printf("\n\t\t通訊錄文件已保存");printf("\n\t\t按任意鍵退出程序\n\t\t");exit(0);return(0);}voiddeletebyphone(){inti,j;intdeletemark=0;charphone[20];printf("\n\t\t請輸入要刪除用戶電話號碼:");scanf("%s",phone);if(num==0){printf("\n\t\t對不起,文件中無任何紀(jì)錄");printf("\n\t\t按任意鍵返回主菜單");getch();return;}for(i=0;i<num;i++){if(strcmp(student[i].phone,phone)==NULL){printf("\n\t\t以下是您要刪除的用戶紀(jì)錄:");printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t電話:%s",student[i].phone);printf("\n\t\t地址:%s",student[i].adress);printf("\n\t\t學(xué)號:%s",student[i].number);printf("\n\t\t是否刪除?(y/n)");if(getch()=='y'){for(j=i;j<num-1;j++)student[j]=student[j+1];num--;deletemark++;printf("\n\t\t刪除成功");printf("\n\t\t是否繼續(xù)刪除?(y/n)");if(getch()=='y')deletebyphone();return;}elsereturn;}continue;}if(deletemark==0){printf("\n\t\t沒有該用戶的紀(jì)錄");printf("\n\t\t是否繼續(xù)刪除?(y/n)");if(getch()=='y')deletebyphone();return;}}voiddeletebyname(){inta=0;intfindmark=0;intj;intdeletemark=0;inti;charname[20];printf("\n\t\t請輸入要刪除用戶姓名:");scanf("%s",name);for(i=a;i<num;i++){if(strcmp(student[i].name,name)==NULL){printf("\n\t\t以下是您要刪除的用戶紀(jì)錄:");findmark++;printf("\n\t\t________________________________");printf("\n\t\t姓名:%s",student[i].name);printf("\n\t\t電話:%s",student[i].phone);printf("\n\t\t地址:%s",student[i].adress);printf("\n\t\t學(xué)號:%s",student[i].number);printf("\n\t\t________________________________");printf("\n\t\t是否刪除?(y/n)");if(getch()=='y'){for(j=i;j<num-1;j++)student[j]=student[j+1];num--;deletemark++;printf("\n\t\t刪除成功");if((i+1)<num){printf("\n\t\t是否繼續(xù)刪除相同姓名的用戶信息?(y/n)");if(
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 書籍設(shè)備采購合同范本
- 課程建設(shè)研究課題申報書
- 企業(yè)廠區(qū)租賃合同范本
- 小學(xué)數(shù)學(xué)思維課題申報書
- 共建工廠合作合同范例
- 勞動合同范本 計時
- 農(nóng)機隊耕種合同范本
- 印譜制作合同范例
- 體育產(chǎn)業(yè)趨勢分析與未來市場展望
- 合同鋪租合同范例
- (2024年)神經(jīng)內(nèi)科科室應(yīng)急全新預(yù)案x
- 《起重機械安全評估規(guī)范》編制說明(征求意見稿)
- 廣州小學(xué)英語單詞分類識記表-注音版
- 人教版PEP五年級數(shù)學(xué)下冊教案(全冊 完整)
- 窗簾工程方案
- 2024年醫(yī)學(xué)高級職稱-全科醫(yī)學(xué)(醫(yī)學(xué)高級)筆試歷年真題薈萃含答案
- 2024年蘭州市高三診斷考試(一診)地理試卷(含答案)
- 國防動員建設(shè)總體規(guī)劃方案
- 教案檢查總結(jié)及整改措施
- 商品流通學(xué)課件
- 第2課《美麗的“缺牙巴”》課件
評論
0/150
提交評論