第一篇:學(xué)生通訊錄管理系統(tǒng)(C語言課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
C語言課程設(shè)計(jì)
姓名:劉顯安 學(xué)號(hào):09041131 班級(jí):090411 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)院:信息工程學(xué)院 設(shè)計(jì)題目:學(xué)生通訊錄管理系統(tǒng)
指導(dǎo)教師:宋文琳 提交時(shí)間:2010年9月4日
第1頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
課程題目:學(xué)生通訊錄管理系統(tǒng)
要求:學(xué)生通訊錄信息包括:學(xué)號(hào)、姓名、班機(jī)、聯(lián)系電話、E-mail、宿舍等 主要功能:1、2、3、4、5、通訊錄信息錄入功能 通訊錄信息刪除功能 通訊錄信息瀏覽功能 通訊錄信息查詢功能 按學(xué)號(hào)排序功能
一、總體設(shè)計(jì)
首先,整個(gè)系統(tǒng)必須有一個(gè)主函數(shù),為了盡量提高程序的易修改性,且不至于相互干擾,將每一個(gè)功能分成不同的模塊,用不同的函數(shù)來實(shí)現(xiàn),例如在我寫的這個(gè)程序中,一共用了11個(gè)函數(shù),分別是:
主菜單函數(shù)menu()、關(guān)于函數(shù)gaunyu()、幫助函數(shù)help()、輸出單個(gè)學(xué)生信息函數(shù)shuchu()、輸入函數(shù)shuru()、輸出所有學(xué)生信息函數(shù)findall()、按姓名查找函數(shù)findname()、按學(xué)號(hào)查找函數(shù)findnum()、刪除函數(shù)shanchu()、排序函數(shù)paixu()、主函數(shù)main(),這樣在整個(gè)程序的設(shè)計(jì)過程中也就一目了然,寫起來也相對(duì)輕松了不少。
這個(gè)程序我只是總體上參考了一下網(wǎng)上程序的架構(gòu),具體的各個(gè)函數(shù)是參照課本上《鏈表》那一章的內(nèi)容的,比如結(jié)構(gòu)體的建立、查找和排序等功能,這些書上都有類似的,其中排序功能雖沒有原版的,第2頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
但是在第六章中有一個(gè)用冒泡法排序的例題,我就是仿照這個(gè)模式來對(duì)結(jié)構(gòu)體進(jìn)行排序的,總之整個(gè)程序中蘊(yùn)含了我很多的汗水。
二、具體設(shè)計(jì)
關(guān)于這個(gè)程序的具體設(shè)計(jì),也不是一兩句話就能說完的,所以我也不想再在這里贅述了,因?yàn)槌绦蚶锒伎梢钥吹牡?,幾乎每個(gè)函數(shù)都傾注了我的大量汗水,我在這上面花了不少的時(shí)間,不過從中也收獲了很多,因?yàn)椴煌5匦薷牟煌5恼{(diào)試,總之還是直接看源程序吧,因?yàn)橐矝]必要在這里重復(fù)地說廢話。
三、源代碼
以下是整個(gè)程序的源代碼,其中我的主菜單函數(shù)是很美觀的,但由于這里字體和板式的限制,不能很好的顯現(xiàn),可以看我下面程序運(yùn)行的截圖就知道了?!?#include
struct student{
第3頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
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(“******** 計(jì) ********”);
第4頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
puts(“******* *******”);puts(“****** 算 ******”);puts(“***** 0 1=錄入學(xué)生通訊錄信息 *****”);puts(“**** 9 機(jī) ****”);puts(“*** ***”);puts(“** 科 **”);puts(“*
*”);puts(“** 1 學(xué) **”);puts(“*** ***”);puts(“**** 與 ****”);puts(“***** *****”);0 4
劉 2=
顯
安 6=
第5頁(共25頁)
列出所有學(xué)生通訊錄 3=按姓名查詢信息 4=按學(xué)號(hào)查詢信息
5=刪除學(xué)生信息 按學(xué)號(hào)將通訊錄排序
7=關(guān)于
8=幫助
0=退出
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
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返回主菜單請(qǐng)按【9】”);if(getche()=='9')menu();}
struct student *shuru(void)/*輸入函數(shù)*/
第6頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
{ system(“cls”);struct student *s1,*s2;n=1;int num;puts(“請(qǐng)輸入學(xué)生個(gè)數(shù)(提示:個(gè)數(shù)不能輸入0?。骸?;scanf(“%d”,&num);s1=s2=(struct student *)malloc(sizeof(struct student));puts(“*************************************************”);puts(“請(qǐng)輸入學(xué)號(hào):”);scanf(“%ld”,&s1->num);puts(“請(qǐng)輸入學(xué)生姓名:”);scanf(“%s”,s1->name);puts(“請(qǐng)輸入班級(jí):”);scanf(“%d”,&s1->banji);puts(“請(qǐng)輸入電話號(hào)碼:”);scanf(“%s”,s1->tel);puts(“請(qǐng)輸入電子郵件:”);scanf(“%s”,s1->Email);puts(“請(qǐng)輸入學(xué)生宿舍號(hào):”);scanf(“%d”,&s1->sushe);stu=s1;
第7頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
while(n
第8頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
s2=s1;s2->next=NULL;return(stu);//system(“cls”);}
void shuchu(struct student *s){ /*輸出單個(gè)學(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個(gè)學(xué)生信息,分別是:n”,n);//else
第9頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
printf(“n現(xiàn)在有%d個(gè)學(xué)生信息,分別是:n”,n);puts(“________________________________________________________________________”);puts(“* 學(xué)號(hào) 姓名 班級(jí) 電話 電子郵件 宿舍 *”);s=stu;while(s!=NULL){ shuchu(s);s=s->next;} puts(“________________________________________________________________________”);puts(“返回主菜單請(qǐng)按【9】”);if(getche()=='9')menu();}
void findname(){ /*按姓名查找函數(shù)*/ system(“cls”);struct student *s;char name[20];printf(“n請(qǐng)輸入你要查詢的學(xué)生姓名:n”);
第10頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
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é)號(hào)
姓名
電子郵件 宿舍 *”);shuchu(s);} end:;puts(“返回主菜單請(qǐng)按【9】”);if(getche()=='9')menu();}
第11頁(共25頁)
班級(jí)
電話
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
void findnum()/*按學(xué)號(hào)查找函數(shù)*/ { system(“cls”);struct student *s;puts(“請(qǐng)輸入你要查詢的學(xué)生學(xué)號(hào):”);long i;scanf(“%ld”,&i);s=stu;
while(s->num!=i){ s=s->next;} if(s==NULL){puts(“查無此學(xué)生學(xué)號(hào)!”);goto end;} else { puts(“該學(xué)生的信息為:”);puts(“* 學(xué)號(hào) 姓名 班級(jí) 郵件 宿舍 *”);shuchu(s);
第12頁(共25頁)
子電話 電C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
} end:;puts(“返回主菜單請(qǐng)按【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é)生信息,還刪個(gè)屁啊,刪刪刪!”);goto end;} puts(“請(qǐng)輸入你要?jiǎng)h除的學(xué)生學(xué)號(hào):”);scanf(“%ld”,&num);s1=stu;puts(“警告:你確定要?jiǎng)h除這個(gè)學(xué)生的信息嗎(Y/N)?”);scanf(“%s”,&s);
第13頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
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é)號(hào)
姓名
班級(jí)
電話 電子郵件 宿舍 *”);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è)計(jì)報(bào)告——?jiǎng)@安
puts(“返回主菜單請(qǐng)按【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è)計(jì)報(bào)告——?jiǎng)@安
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é)號(hào)順序排序完畢!重新排序如下:”);
puts(“****************************************************************************”);puts(“* 學(xué)號(hào) 姓名 班級(jí) 電話 電子郵件 宿舍 *”);
while(p!=NULL)
第16頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
{ 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(“返回主菜單請(qǐng)按【9】”);if(getche()=='9')menu();}
void help()/*幫助函數(shù)*/ { system(“cls”);puts(“n1、請(qǐng)按提示操作,第一次進(jìn)入本系統(tǒng)時(shí)請(qǐng)按“1”錄入學(xué)生信息,”);puts(“ 否則有可能造成程序運(yùn)行錯(cuò)誤!”);puts(“
2、添加、修改功能本系統(tǒng)暫不提供,還有待以后完善,謝謝
第17頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
合作!”);puts(“
3、請(qǐng)注意查看“Num Lock”是否打開,如果沒有打開,則按數(shù)字n 鍵可能導(dǎo)致程序錯(cuò)誤!”);puts(“
4、版權(quán)所有,翻版必究!請(qǐng)按“7”鍵查看關(guān)于?!?;puts(“n返回主菜單請(qǐng)按【9】”);if(getche()=='9')menu();}
void main()/*主函數(shù)*/ { char a;menu();puts(“n您為首次使用本系統(tǒng),強(qiáng)烈建議您按1開始錄入學(xué)生信息,”);puts(“否則有可能導(dǎo)致程序運(yùn)行錯(cuò)誤!您可以按8查看幫助.”);a=getche();while(a){ puts(“");switch(a){case'0':goto end;break;case '1': puts(”n好了,您可以開始向本系統(tǒng)錄入學(xué)生通訊錄信息了:
第18頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
“);stu=shuru();system(”cls“);menu();puts(”n學(xué)生信息錄入完畢,請(qǐng)輸入你的選擇(0~6):n“);
break;case '2':findall();puts(”n請(qǐng)輸入你的選擇(0~6):“);break;case '3':findname();puts(”n請(qǐng)輸入你的選擇(0~6):“);break;case '4':findnum();puts(”n請(qǐng)輸入你的選擇(0~6):“);break;case '5':stu=shanchu(stu);puts(”n請(qǐng)輸入你的選擇(0~6):“);break;case '6':paixu();puts(”n請(qǐng)輸入你的選擇(0~6):“);break;case '7':guanyu();puts(”n請(qǐng)輸入你的選擇(0~6):“);break;case '8':help();puts(”n請(qǐng)輸入你的選擇(0~6):“);break;default:puts(”輸錯(cuò)了!笨蛋!快點(diǎn)按數(shù)字1鍵錄入學(xué)生信息吧!“);break;} a=getche();} end:;puts(”謝謝您使用本系統(tǒng),歡迎再次使用!");
第19頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
} —————————————————————————
四、調(diào)試
主要是通過截圖來顯示運(yùn)行過程 以下是程序運(yùn)行的主界面:
按1后,開始錄入信息,程序會(huì)提示你輸入學(xué)生個(gè)數(shù)(例如本例中輸入4個(gè)),當(dāng)輸完4個(gè)學(xué)生的信息時(shí),程序會(huì)提示你已輸入完畢:
第20頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
學(xué)生信息錄入完畢,提示輸入(0到6)進(jìn)行選擇:
第21頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
這時(shí)我選擇按2輸出所有學(xué)生信息,按9返回:
按3按姓名查詢信息:
按4按學(xué)號(hào)查詢信息:
第22頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
按5刪除學(xué)生信息,這是按學(xué)號(hào)刪除學(xué)生信息,本例中,刪除學(xué)號(hào)為41212的學(xué)生信息:
刪除成功后,系統(tǒng)自動(dòng)將剩下的學(xué)生信息列出:
按6按學(xué)號(hào)從小到大進(jìn)行排序,可以發(fā)現(xiàn),排序成功:
第23頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
按8查看幫助函數(shù):
呵呵,這是我設(shè)置的關(guān)于函數(shù),滿足一下敝人的虛榮心嘛^_^,版權(quán)所有,翻版必究哦!
最后按0退出系統(tǒng):
第24頁(共25頁)
C語言課程設(shè)計(jì)報(bào)告——?jiǎng)@安
呵呵,怎么樣?我寫的程序還行吧。嘿嘿……
三、總結(jié)
這個(gè)程序我只是總體上參考了一下網(wǎng)上程序的架構(gòu),具體的各個(gè)函數(shù)是參照課本上《鏈表》那一章的內(nèi)容的,比如結(jié)構(gòu)體的建立、查找和排序等功能,這些書上都有類似的,其中排序功能雖沒有原版的,但是在第六章中有一個(gè)用冒泡法排序的例題,我就是仿照這個(gè)模式來對(duì)結(jié)構(gòu)體進(jìn)行排序的,總之整個(gè)程序中蘊(yùn)含了我很多的汗水。
第25頁(共25頁)
第二篇:C語言課程設(shè)計(jì)學(xué)生通訊錄管理系統(tǒng)設(shè)計(jì)
C語言課程設(shè)計(jì)學(xué)生通訊錄管理系統(tǒng)設(shè)計(jì)
一、題目內(nèi)容的描述
學(xué)生通訊錄管理系統(tǒng)設(shè)計(jì)
設(shè)計(jì)一個(gè)學(xué)生通信錄,學(xué)生通迅錄數(shù)據(jù)信息構(gòu)成內(nèi)容可自行設(shè)計(jì)(如:姓名、家庭地址、郵政編碼、電話號(hào)碼等等),通信錄數(shù)據(jù)類型定義為結(jié)構(gòu)體類型。由鍵盤輸入數(shù)據(jù)(最好要考慮輸入數(shù)據(jù)輸入的格式及輸入數(shù)據(jù)的有效性),然后進(jìn)行以下的功能實(shí)現(xiàn)。程序要求主函數(shù)是一個(gè)功能選擇菜單,其它各功能都用各自的函數(shù)實(shí)現(xiàn)。
功能要求如下:
1、能建立、修改和增刪學(xué)生通訊錄
2、能夠按多種方式進(jìn)行查詢,例如按姓名、按電話號(hào)碼等。
3、通訊錄的數(shù)據(jù)保存在文件中,運(yùn)行程序時(shí)將通訊錄數(shù)據(jù)從文件讀取到內(nèi)存中。對(duì)通訊錄進(jìn)行增加、刪除、修改學(xué)生數(shù)據(jù)后,提供功能菜單,可以將內(nèi)存中修改過的通訊錄重新保存至文件。
二、應(yīng)用程序功能的詳細(xì)說明
1、應(yīng)用程序?qū)崿F(xiàn)了可視化的系統(tǒng)操作界面。
2、對(duì)學(xué)生通訊錄形成了系統(tǒng)化的管理,操作簡便明了。
3、程序具有系統(tǒng)幫助,添加、顯示、查詢、刷新、刪除、排序、保存、修改、讀取學(xué)生通訊錄的功能。各項(xiàng)功能均可按照文字提示操作,淺顯易懂。
4、系統(tǒng)的各個(gè)功能模塊都用函數(shù)的形式來實(shí)現(xiàn)(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。
5.可以將信息保存在文件(“student.txt“)中,亦可將信息從文件中讀取出來,靈活方便。
三、主要模塊的算法描述
學(xué)生通訊錄管理系統(tǒng)
刷新學(xué)生信息readfile()
查詢學(xué)生信息seek()
增加學(xué)生信息insert()
顯示學(xué)生信息display()
退出系統(tǒng)
修改學(xué)生信息modify()
刪除學(xué)生信息del()
保存當(dāng)前學(xué)生信息save()
匯總當(dāng)前學(xué)生數(shù)目number()
系統(tǒng)幫助help()
查詢學(xué)生信息
按姓名查詢
退出
按學(xué)號(hào)查詢
開始
以可讀寫的方式打開一個(gè)數(shù)據(jù)文件
將此文件的內(nèi)容讀出,并存入一個(gè)新的結(jié)構(gòu)體類型的數(shù)組中。
調(diào)用menu()菜單函數(shù)
進(jìn)入while()主循環(huán)
輸入1-8中的一數(shù)值,選擇相應(yīng)操作。
輸入是否為0
判斷鍵值,調(diào)用相應(yīng)函數(shù),完成相應(yīng)功能。
是否已對(duì)修改存盤
調(diào)用函數(shù)save()函數(shù),進(jìn)行寫數(shù)據(jù)文件操作
結(jié)束
模塊一:頭文件,變量定義,函數(shù)的聲明
對(duì)系統(tǒng)所使用的變量進(jìn)行定義,對(duì)函數(shù)進(jìn)行聲明。
模塊二:錄入學(xué)生信息
聲明函數(shù)void
readfile(),說明一個(gè)文件指針FILE
*fp打開文
件“student.txt“。
模塊三:學(xué)生信息的查找
聲明void
seek()為查找函數(shù),通過switch(item)設(shè)定用學(xué)號(hào)查找,用姓名查找兩個(gè)分支。
模塊四:學(xué)生信息的修改
聲明void
modify()為學(xué)生信息修改函數(shù),通過switch(item)設(shè)定
所要修改的項(xiàng)目。
模塊五:刷新學(xué)生信息
聲明void
sort()將錄入學(xué)生系按升序排列,用的是“冒泡排序法”
實(shí)現(xiàn)排序。
模塊六:增加學(xué)生信息
聲明void
insert()插入學(xué)生信息,先通過判斷學(xué)生是否存在,若
否則繼續(xù)輸入,若是則跳出,重新循環(huán)。
模塊七:刪除學(xué)生信息
聲明void
del()實(shí)現(xiàn)學(xué)生信息刪除,通過學(xué)號(hào)對(duì)比確定要?jiǎng)h除的信
息,然后用后一個(gè)替換掉。
模塊八:顯示學(xué)生信息
通過display()函數(shù)輸出學(xué)生信息。
模塊九:保存信息
通過fp=fopen(“student.txt“,“w“);寫入信息。
模塊十:匯總學(xué)生數(shù)目
通過number()函數(shù)將已有男女生及總學(xué)生數(shù)目匯總出來。
模塊十一:系統(tǒng)幫助
通過help()函數(shù)幫助操作。
模塊十二:界面菜單
通過switch(num)調(diào)用以上各函數(shù),實(shí)現(xiàn)功能。
1、程序采用模塊化設(shè)計(jì),各模塊獨(dú)立,可分塊調(diào)試,個(gè)模塊由主函數(shù)控制調(diào)用。
2、其中主要模塊(readfile()、seek()、modify())都是利用數(shù)組,指針來實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。
3、數(shù)據(jù)庫設(shè)計(jì)的任務(wù)是確定系統(tǒng)所需要的數(shù)據(jù)庫。數(shù)據(jù)庫是表的集合,通常一個(gè)系統(tǒng)只需一個(gè)數(shù)據(jù)庫。設(shè)計(jì)人
是根據(jù)需求分析,確定數(shù)據(jù)庫所包含的表及字段、表間的關(guān)系,然后具體確定表的結(jié)構(gòu),包括字段名、字段類型及寬度,需要的索引等。根據(jù)對(duì)需求得到的數(shù)據(jù)結(jié)構(gòu)進(jìn)行分析,按數(shù)據(jù)輸入輸出的要求,確定表和表間的關(guān)系,進(jìn)行驗(yàn)證、調(diào)整、修改、完善,使其能夠?qū)崿F(xiàn)用戶對(duì)數(shù)據(jù)和功能的要求。通訊信息表包括以下字段:學(xué)號(hào),姓名,年齡,性別,出生年月,地址,電話,E-mail。學(xué)號(hào)為主索引。
四、結(jié)束語
我設(shè)計(jì)的程序總體功能大都能夠運(yùn)行順利,但有許多地方比較復(fù)雜,需要進(jìn)一步修改,進(jìn)行簡化。通過這次課程設(shè)計(jì)的鍛煉,我收獲很多,具體歸納為以下幾點(diǎn):
1、首先,也是最重要的一點(diǎn),學(xué)會(huì)如何將一個(gè)復(fù)雜的問題簡化,將一個(gè)較大的問題分成幾個(gè)小問題,再一一解決這些小問題。在設(shè)計(jì)一個(gè)程序之前,要學(xué)會(huì)對(duì)程序功能進(jìn)行規(guī)劃,將其分為幾個(gè)不同的功能模塊,要思路清晰,簡單易用;
2、學(xué)會(huì)靈活運(yùn)用已有的知識(shí),同時(shí)適當(dāng)?shù)耐卣挂恍┲R(shí);比如,這次設(shè)計(jì)過程中,有一些函數(shù)以前就很少用到,甚至沒有見過,但對(duì)程序的設(shè)計(jì)及用戶界面的改善帶來方便;
3、解決問題時(shí),要盡可能考慮全面。每一個(gè)細(xì)節(jié)都很重要,既要避免功能的重復(fù),也要避免功能疏漏的地方!
4、在這次課程設(shè)計(jì)過程中,參考了許多資料,發(fā)現(xiàn)C語言真的很有意思!比如我看到一個(gè)關(guān)于用C語言編寫的小程序:五子棋、俄羅斯方塊、推箱子等,等這次課程結(jié)束后,我就想利用C語言編寫這些小游戲。曾經(jīng)認(rèn)為C是個(gè)挺枯燥的課程,現(xiàn)在發(fā)現(xiàn)這不僅僅是個(gè)簡單的課程,而是個(gè)很實(shí)用的計(jì)算機(jī)工具!
五、程序源代碼清單
#include
#include
#include
#define
BUFLEN
#define
LEN
#define
N
struct
record
{
char
code[LEN+1];
char
name[LEN+1];
int
age;
char
sex[3];
char
time[LEN+1];
char
add[30];
char
tel[LEN+1];
char
mail[30];
}stu[N];
int
k=1,n,m;
void
readfile();
void
seek();
void
modify();
void
insert();
void
del();
void
display();
void
save();
void
number();
void
menu();
int
main()
{
while(k)
menu();
system(“pause“);
return
0;
}
void
readfile()//刷新學(xué)生信息
{
char
*p=“student.txt“;
FILE
*fp;
int
i=0;
if
((fp=fopen(“student.txt“,“r“))==NULL)
{
printf(“Open
file
%s
error!
Strike
any
key
to
exit!“,p);
system(“pause“);
exit(0);
}
while(fscanf(fp,“%s
%s%d%s
%s
%s
%s
%s“,stu[i].code,stu[i].name,&stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf(“錄入完畢!\n“);
}
void
seek()//查詢學(xué)生信息
......void
modify()//修改學(xué)生信息
......void
sort()//對(duì)學(xué)生信息按學(xué)號(hào)排序
{
int
i,j,*p,*q,s;
char
temp[10];
for(i=0;i { for(j=n-1;j>i;j--) if(strcmp(stu[j-1].code,stu[j].code)>0) { strcpy(temp,stu[j-1].code); strcpy(stu[j-1].code,stu[j].code); strcpy(stu[j].code,temp); strcpy(temp,stu[j-1].name); strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j].name,temp); strcpy(temp,stu[j-1].sex); strcpy(stu[j-1].sex,stu[j].sex); strcpy(stu[j].sex,temp); strcpy(temp,stu[j-1].time); strcpy(stu[j-1].time,stu[j].time); strcpy(stu[j].time,temp); strcpy(temp,stu[j-1].add); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j].add,temp); strcpy(temp,stu[j-1].tel); strcpy(stu[j-1].tel,stu[j].tel); strcpy(stu[j].tel,temp); strcpy(temp,stu[j-1].mail); strcpy(stu[j-1].mail,stu[j].mail); strcpy(stu[j].mail,temp); p=&stu[j-1].age; q=&stu[j].age; s=*q; *q=*p; *p=s; } } } void insert()//增加學(xué)生信息 ......void display()//顯示當(dāng)前學(xué)生信息 { int i; printf(“所有學(xué)生的信息為:\n“); printf(“學(xué)生學(xué)號(hào),學(xué)生姓名,年齡,性別,出生年月,地址,電話,E-mail\n“); printf(“--------------------------------------------------------------------\n“); for(i=0;i { printf(“%6s,%7s,%5d,%5s,%9s,%8s,%10s,%14s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } } void save()//保存當(dāng)前學(xué)生信息 { int i; FILE *fp; fp=fopen(“student.txt“,“w“); for(i=0;i { fprintf(fp,“%s,%s,%d,%s,%s,%s,%s,%s\n“,stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } fclose(fp); } void number()//匯總學(xué)生數(shù)目 { int i,girl,boy=0; for(i=0;i if(strcmp(stu[i].sex,“1“)==0) {boy++;} girl=n-boy; printf(“男生人數(shù)是:%d\n女生的人數(shù)是:%d\n“,boy,girl); printf(“總的學(xué)生人數(shù)為:%d“,n); } void help()//系統(tǒng)幫助 { printf(“輸入性別時(shí)男為1,女為2“); printf(“\n3.增加學(xué)生信息后,切記保存按7;\n“); printf(“\n4.謝謝您的使用!\n“); } void menu()//可視化的系統(tǒng)操作界面 { int num; printf(“ \n\n 學(xué)生通訊錄管理系統(tǒng) \n\n“); printf(“ *********************系統(tǒng)功能菜單************************ \n“); printf(“ -------------------------------- ------------------------------- \n“); printf(“ 1.刷新學(xué)生信息 2.查詢學(xué)生信息 \n“); printf(“ ********************************************* \n“); printf(“ 3.修改學(xué)生信息 4.增加學(xué)生信息 \n“); printf(“ ********************************************* \n“); printf(“ 5.按學(xué)號(hào)刪除信息 6.顯示當(dāng)前信息 \n“); printf(“ ********************************************* \n“); printf(“ 7.保存當(dāng)前學(xué)生信息 8.匯總學(xué)生數(shù)目 \n“); printf(“ ********************************************* \n“); printf(“ 9.系統(tǒng)幫助 10.退出系統(tǒng) \n“); printf(“ --------------------------------- ------------------------------ \n“); printf(“ ************************************************************ \n“); printf(“請(qǐng)選擇菜單編號(hào):“); scanf(“%d“,&num); switch(num) { case 1:readfile();break; case 2:seek();break; case 3:modify();break; case 4:insert();break; case 5:del();break; case 6:display();break; case 7:save();break; case 8:number();break; case 9:help();break; case 10:k=0;break; default:printf(“請(qǐng)?jiān)?-10之間選擇\n“); } } 課程設(shè)計(jì)報(bào)告 課程設(shè)計(jì)題目: 通訊錄管理 學(xué)生姓名: 專 業(yè): 班 級(jí): 指導(dǎo)教師: 2009年6月16日 實(shí)驗(yàn)題目: 《通訊錄管理》 實(shí)驗(yàn)時(shí)間、地點(diǎn): 2009-6-8到2009-6-12日 信工樓307 實(shí)驗(yàn)?zāi)康模?/p> 本次課程設(shè)計(jì)的主要目的是綜合運(yùn)用所學(xué)的C語言知識(shí)解決一個(gè)比較實(shí)際的簡單問題,側(cè)重對(duì)數(shù)組、函數(shù)、指針、結(jié)構(gòu)體和文件等相關(guān)內(nèi)容的綜合應(yīng)用,使同學(xué)們能進(jìn)一步熟悉掌握C語言的基本語法,進(jìn)一步提升自己的編程能力并逐步培養(yǎng)編程思維,進(jìn)而不斷提高同學(xué)們解決問題的能力,并為以后的語言學(xué)習(xí)打下良好的基礎(chǔ)。 實(shí)驗(yàn)要求: 1.獨(dú)立完成; 2.此次課程設(shè)計(jì)在規(guī)定的時(shí)間必須在實(shí)驗(yàn)室完成,不得以任何理由在其他地點(diǎn)進(jìn)行; 3.每個(gè)人需按照選題規(guī)則確定好自己的題目(注意不是多人完成一題,每人獨(dú)立完成一題),不得以任何理由選擇其他的題目,當(dāng)然在完成自己的題目之后根據(jù)個(gè)人興趣可以繼續(xù)選做其他的題目; 4.課程設(shè)計(jì)完成后嚴(yán)格按照?qǐng)?bào)告格式撰寫課程設(shè)計(jì)報(bào)告,并于結(jié)束后的第三天上交到學(xué)習(xí)委員統(tǒng)一交給老師; 5.課程設(shè)計(jì)的成績由兩部分組成:程序檢查成績(40%,每個(gè)功能占程序分的20%)+報(bào)告檢查成績(40%)+平時(shí)考核(20%) 6.每個(gè)程序?qū)崿F(xiàn)方式可以自選,可以采用文件、鏈表、數(shù)組或其任意組合完成。 實(shí)現(xiàn)思路: 通訊錄信息包括:學(xué)號(hào),姓名,班級(jí),聯(lián)系電話,E-MAIL,宿舍等 主要功能: (1)建立、修改和增刪學(xué)生通訊錄(2)能夠按多種方式進(jìn)行查詢 按姓名查詢、按學(xué)號(hào)查詢 按宿舍查詢 (3)要求:以菜單方式操作,界面友好,易于操作 流程圖: 增加 1↓ ↓ 保存 查詢 ↓ a↓ b↓ c↓ 按姓名查詢 按學(xué)號(hào)查詢 按宿舍查詢 2→刪除 4→保存 5↓ 5↓ 退出 退出 實(shí)現(xiàn)過程: 3#include printf(“ 學(xué)生通訊錄 08041238”);printf(“n----------------------------n”);printf(“ 1.Add”);printf(“ 2.Delete”);printf(“ 3.Search”);printf(“ 4.Save”);printf(“ 5.Exit”);printf(“n----------------------------n”);} void Data_Menu1(){ printf(“n”);printf(“ a.Name”);printf(“nb.Xuehao”);printf(“nc.sushe”);} void Data_Load(){ int j;long k;fp=fopen(“members.txt”,“rt”);if(fp!=NULL){ for(i=1;i<50;i++){ j=fgetc(fp);if(j==EOF){ return;} k=i-1;fseek(fp,k*sizeof(struct member),SEEK_SET);fread(&members[i],sizeof(struct member),1,fp);} }else{ fp=fopen(“members.txt”,“a”);i=1;} } void Data_Add(int j){ printf(“n”);members[j].number=j;printf(“ntNo:%d”,j);printf(“ntName:”);scanf(“%s”,members[j].name);printf(“tTelephone:”);scanf(“%s”,members[j].telephone);printf(“tXuehao:”);scanf(“%s”,members[j].xuehao);printf(“tSushe:”);scanf(“%s”,members[j].sushe);printf(“tEmail:”);scanf(“%s”,members[j].email);} void Data_Show(int j){ printf(“ntNo:%d”,members[j].number);printf(“ntName:%s”,members[j].name);printf(“ntTelephone:%s”,members[j].telephone);printf(“ntXuehao:%s”,members[j].xuehao);printf(“ntSushe:%s”,members[j].sushe);printf(“ntEmail:%s”,members[j].email);} void Data_Save(){ int j;fp=fopen(“members.txt”,“a”);for(j=1;j<=i;j++){ fwrite(&members[j],sizeof(struct member),1,fp);} } main(){ char *search_name;char *search_xuehao;char *search_sushe;int j,k;Data_Load();i--;do{ Data_Menu();printf(“ Please Choose:”);ch=getche();switch(ch){ case '1': while(i<50){ i++;Data_Add(i);break;} if(i==50){ printf(“ntMessage is Filled!n”);} break;case '2': if(i<1){ printf(“ntNo Recordsn”);break;} printf(“ntDelete No:”);scanf(“%d”,&k);for(j=k;j break;case '4': Data_Save();printf(“ Date is Saved!n”);fclose(fp);break;case '5': printf(“nt”);printf(“ Do You Want To Save Message(y/n)”);if(getche()=='y'){ Data_Save();} fclose(fp);exit(0);break;default: break;} }while(1);} 實(shí)驗(yàn)總結(jié): 經(jīng)過幾天的努力,終于做出來了,在這過程中自己逐漸提高了對(duì)數(shù)組、函數(shù)、指針、結(jié)構(gòu)體和文件等相關(guān)內(nèi)容的綜合應(yīng)用,并且進(jìn)一步熟悉掌握C語言的基本語法,提升了自己的編程能力,并逐步培養(yǎng)編程思維,進(jìn)而不斷提高自己解決問題的能力。 心得體會(huì): 實(shí)驗(yàn)雖然做成功了,但在此次試驗(yàn)過程中,自己也體會(huì)到一些東西: 第一:要細(xì)心對(duì)待程序的每一個(gè)環(huán)節(jié),否則得話將會(huì)給自己編程帶來很大的困擾.第二:要多動(dòng)手去操作,只有這樣才能真正使自己的能力得到真正的提高。 第三:課外要多看以些書,光憑課本上的知識(shí)是不夠的,要自己自覺地去學(xué)習(xí)新的知識(shí)。 #include intfind_record(int flag);intdelete_record(int flag);voidpaixu_record(int flag);intsave_record(int flag);void main(){ for(;;){ switch(menu_select()) { case 1: printf(“ ***********************************************n”);printf(“ ************** 通訊錄的建立 ***************n”);printf(“ ***********************************************n”);flag=create_record();break;case 2: printf(“ ***********************************************n”);printf(“ ************** 通訊錄信息的添加 *****************n”);printf(“ ***********************************************n”);flag=add_record(flag);break;case 3: printf(“ ******************************n”);printf(“ ******* 通訊錄信息查詢 *******n”);printf(“ ******************************n”);find_record(flag); break;case 4: printf(“ ***********************************n”);printf(“ **********通訊信息的刪除***********n”);printf(“ ***********************************n”);delete_record(flag);break;case 5: printf(“ ***********************************n”);printf(“ **********通訊錄的存儲(chǔ)(D:)*********n”);printf(“ ***********************************n”);save_record(flag);break;case 6: printf(“ ***********************************n”);printf(“ **********通訊者的排序*********n”);printf(“ ***********************************n”);paixu_record(flag);break;case 0: printf(“t 謝謝您的使用!n”);break; default : break;} } } intmenu_select(){ int i;printf(“ ******************** n”);printf(“ Welcome! n ”);printf(“ Form kuangminn”);printf(“ ******************** n”);printf(“ n”);printf(“ n”);printf(“ n”);printf(“ 通訊錄管理系統(tǒng) n”);printf(“ n”);printf(“ ======================n”);printf(“ 1.通訊錄的建立n”);printf(“ 2.通訊者的添加n”);printf(“ 3.通訊錄的查詢n”);printf(“ 4.通訊者的刪除n”);printf(“ 5.通訊錄的存儲(chǔ)n”);printf(“ 6.通訊者的排序n”);printf(“ 0.退出通訊錄管理系統(tǒng)n”);printf(“ ======================n”);printf(“ 請(qǐng)選擇操作0-5 nn”);for(;;){ scanf(“%d”,&i);if(i<0||i>6)printf(“t對(duì)不起,您的輸入錯(cuò)誤n”);else break;} return i;} intcreate_record(){inti,j;for(i=0;;) { printf(“ 學(xué)號(hào)(12)姓名(10)出生年月(10)家庭住址(30)郵編(10)電話(15)n”);printf(“-------------n”);scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);i++;printf(“ 想繼續(xù)創(chuàng)建嗎?(1.是/0.不):”);scanf(“%d”,&j);if(!j) return i;else printf(“恭喜你,創(chuàng)建成功!請(qǐng)繼續(xù)創(chuàng)建!n”); } return i;} intadd_record(int flag){ int i=flag,j;for(i;;) { printf(“ 學(xué)號(hào)(12)姓名(10)出生年月(10)家庭住址(30)郵編(10)電話(15)n”);printf(“-------------n”); scanf(“%s%s%s%s%s%s”,data[i].num,data[i].name,data[i].birthday,data[i].post, data[i].phone);i++;printf(“ 想繼續(xù)添加嗎?(1.是/0.不):”);scanf(“%d”,&j);if(!j)return i;else printf(“恭喜你,添加成功!請(qǐng)繼續(xù)添加!n”); } return(i);} intfind_record(){ int i;char number[6];char named[10];intxz;printf(“--------------------n”);printf(“ 1.按學(xué)號(hào)查詢n”);printf(“ 2.按姓名查詢n”);printf(“--------------------n”);printf(“ 請(qǐng)選擇 : n”); scanf(“%d”,&xz);if(xz==1){ printf(“ 請(qǐng)輸入要查找的學(xué)號(hào): ”);scanf(“%s”,number);for(i=0;i if(strcmp(data[i].num,number)==0) { printf(“ ** 學(xué)號(hào)姓名出生年月家庭住址郵編電話**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;} } else if(xz=2){ printf(“請(qǐng)輸入要查找的姓名: ”);scanf(“%s”,named);for(i=0;i { printf(“ ** 學(xué)號(hào)姓名出生年月家庭住址郵編電話**n”);printf(“------------------------------n”);printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”);return 0;else {printf(“對(duì)不起,沒有你要找的人!n”);return 0;} } else {printf(“對(duì)不起,沒有你要找的人!n”);return 0;} } } intdelete_record(int flag) { inti,j;intdeletemark=0;char number[20];printf(“ttt請(qǐng)輸入要?jiǎng)h除學(xué)號(hào):n”);scanf(“%s”,number);for(i=0;i { if(strcmp(data[i].num, number)==0) { printf(“ttt以下是您要?jiǎng)h除的用戶紀(jì)錄:n”);printf(“ ** 學(xué)號(hào)姓名出生年月家庭住址郵編電話**n”);printf(“------------------------------n”); printf(“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday,data[i].post,data[i].phone);printf(“------------------------------n”); printf(“ttt是否刪除?(y/n)”);if(getch()=='y' || getch()=='Y') { for(j=i;j } else return; } continue; } if(deletemark==0) { printf(“ttt沒有該用戶的紀(jì)錄”); return; } return; } voidpaixu_record(int flag){inti,j;struct record tmp; printf(“ 1.按姓名排序n”);printf(“ 2.按學(xué)號(hào)排序n”);scanf(“%d”,&i);if(i==1){for(i=1;i { if(strcmp(data[i].name, data [i-1].name)<0) { tmp= data[i]; j=i-1;do { data [j+1]= data [j];j--;}while((strcmp(tmp.name, data [j].name)<0&&j>=0));data [j+1]=tmp; } } printf(“ttt排序成功!”);} if(i==2){for(j=0;j {tmp=data[i];data[i]=data[i+1];data[i+1]=tmp;} } } intsave_record(int flag){ FILE*fp;int i;if((fp=fopen(“D:data.txt”,“w+”))==NULL) {printf(“無法打開文件!”);exit(0);} for(i=0;i {fprintf(fp,“%s,%s,%s,%s,%s,%sn”,data[i].num,data[i].name,data[i].birthday, data[i].post, data[i].phone);printf(“n”);} fclose(fp);return 0;} #include “stdio.h” #include “stdlib.h” #include “string.h” #include “conio.h” #include “stdlib.h” #define null 0 struct record { char name[20];char phone[20];char adress[40];char postcode[10];char e_mail[30];}student[500];struct LinkList { struct record US;struct LinkList *next;}a;struct LinkList *head=null;int num=0;FILE *fp;int menu_select();int adduser();int list();int search();int display();int add();int listbyname();int dele();int save();int exit(); void main(){ system(“cls”);for(;;){ switch(menu_select()){ case 0:adduser();break;case 1:list();break;case 2:search();break;case 3:add();break;case 4:dele();break;case 5:save();break;case 6:exit(0);} } } menu_select(){ char s[80];int a;printf(“*_* press any key enter menu!*_* n”);getch();system(“cls”);printf(“tt********************MENU*********************nn”);printf(“tt 0.輸入記錄n”);printf(“tt 1.顯示記錄 n”);printf(“tt 2.按姓名查找n”);printf(“tt 3.插入記錄 n”);printf(“tt 4.刪除記錄n”);printf(“tt 5.記錄保存文件n”);printf(“tt 6.Quitn”);printf(“tt***********************************************n”);do{ printf(“n Enter you choice(0~11):”);scanf(“%s”,s);a=atoi(s);} while(a<0||a>11);return a;} adduser(){ printf(“ntt**************** 請(qǐng)輸入用戶信息 ****************n”);printf(“ntt輸入姓名:”);scanf(“%s”,&student[num].name);printf(“ntt輸入電話號(hào)碼:”);scanf(“%s”,&student[num].phone);printf(“ntt輸入地址:”);scanf(“%s”,&student[num].adress);printf(“ntt輸入郵編:”);scanf(“%s”,&student[num].postcode);printf(“ntt輸入e-mail:”);scanf(“%s”,&student[num].e_mail);num++;printf(“ntt是否繼續(xù)添加?(Y/N):”);if(getch()=='y')adduser();return(0);} list(){ int i;system(“cls”);if(num!=0){ printf(“ntt*************** 以下為通訊錄所有信息************”);for(i=0;i printf(“ntt姓名: %s”,student[i].name);printf(“ntt電話: %s”,student[i].phone);printf(“ntt地址: %s”,student[i].adress);printf(“ntt郵編: %s”,student[i].postcode);printf(“ntte-mail:%s”,student[i].e_mail);printf(“tt”);if(i+1 add(){ int i;if((fp=fopen(“student.bin”,“wb”))==NULL){ printf(“ntt文件打開失敗”);} for(i=0;i save(){ int j;FILE*fp;fp=fopen(“student.txt”,“w”);if(fp==NULL)printf(“can't open the file.”);if(num!=0){ for(j=0;j fwrite(student,sizeof(student),1,fp);} } printf(“保存成功!”);fclose(fp);return(0);}第三篇:C語言課程設(shè)計(jì)-通訊錄管理
第四篇:C語言-通訊錄管理系統(tǒng)
第五篇:C語言程序設(shè)計(jì)學(xué)生通訊錄管理系統(tǒng)