第一篇:C語言程序設(shè)計學(xué)生通訊錄管理系統(tǒng)
#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**************** 請輸入用戶信息 ****************n”);printf(“ntt輸入姓名:”);scanf(“%s”,&student[num].name);printf(“ntt輸入電話號碼:”);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);} “學(xué)生通訊信息記錄系統(tǒng)”的設(shè)計與實現(xiàn) 一、設(shè)計要求 1.問題的描述 “學(xué)生通訊信息記錄系統(tǒng)”是為了實現(xiàn)快速的對學(xué)生信息進行錄入、刪除、查找、顯示。各個功能靠函數(shù)實現(xiàn)。2.需求分析 (1)應(yīng)該包括以下功能:輸入信息、顯示信息、查找以姓名作為關(guān)鍵字、刪除信息(2)作為一個完整的系統(tǒng),應(yīng)具有友好的界面和較強的容錯能力 二、概要設(shè)計 1.主界面設(shè)計 2.儲存結(jié)構(gòu)設(shè)計 本系統(tǒng)主要采用鏈表類型來表示儲存“學(xué)生信息記錄系統(tǒng)”中的信息。程序中定義了address結(jié)構(gòu)。其中,包括學(xué)生的姓名、宿舍信息和學(xué)號。3.系統(tǒng)功能的設(shè)計 1)輸入信息——enter();2)顯示信息———display();3)查找以姓名作為關(guān)鍵字 ———search();4)刪除信息———delete(); 三、模塊設(shè)計 1.模塊設(shè)計 本成績包含兩個模塊:主程序模塊和鏈表操作模塊。2.系統(tǒng)的程序及功能設(shè)計 (1)插入學(xué)生信息 void enter() /*輸入函數(shù),本函數(shù)循環(huán)輸入資料,當(dāng)輸入姓名為空時退出*/ { struct address *info; /*定義當(dāng)前結(jié)點*/ for(;;){ info=(struct address *)malloc(sizeof(struct address)); /*為當(dāng)前結(jié)點分配空間*/ if(!info) { printf(“n Out of memory”); exit(0); /*如果分配空間失敗,退出程序*/ } printf(“輸入空姓名結(jié)束:n”); inputs(“請輸入 姓名:”,info->name,10); if(!info->name[0]) break; /*如果輸入姓名為空,結(jié)束循環(huán)*/ inputs(“請輸入 院系:”,info->street,50); inputs(“請輸入宿舍樓:”,info->city,15); inputs(“請輸入宿舍號:”,info->state,15); inputs(“請輸入 學(xué)號:”,info->eip,7); insert(info,&start,&last); /*調(diào)用結(jié)點插入函數(shù)*/ } } 五、測試分析 1.輸入學(xué)生信息 4.刪除信息 5.退出 struct address *start; /*首結(jié)點*/ struct address *last; /*尾結(jié)點*/ struct address *find(char *); /*聲明查找函數(shù)*/ void enter(); /*函數(shù)聲明*/ void search();void save(); void load();void list();void ddelete(struct address **start,struct address **last);void insert(struct address *i,struct address **start,struct address **last);void inputs(char *,char *,int);void display(struct address *);int menu_select(void); void main(){ int c; printf(“n 歡迎使用學(xué)生通訊錄系統(tǒng)”); printf(“nn”); printf(“t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 1.輸入信息 * 2.刪除信息 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃* * *┃n”); printf(“t┃* 3.顯示信息 * 4.查找 *┃n”); printf(“t┃* * *┃n”); printf(“t┃************************************************************┃n”); printf(“t┃ 5.退出 ┃ n”); printf(“t┃************************************************************┃n”); exit(0); /*如果分配空間失敗,退出程序*/ } printf(“輸入空姓名結(jié)束:n”); inputs(“請輸入 姓名:”,info->name,10); if(!info->name[0])break; /*如果輸入姓名為空,結(jié)束循環(huán)*/ inputs(“請輸入 院系:”,info->street,50); inputs(“請輸入宿舍樓:”,info->city,15); inputs(“請輸入宿舍號:”,info->state,15); inputs(“請輸入 學(xué)號:”,info->eip,7); insert(info,&start,&last); /*調(diào)用結(jié)點插入函數(shù)*/ } void inputs(char *prompt,char *s,int count) /*輸入函數(shù),有越界檢測功能*/ { char p[255]; do } i->next=NULL; i->prior=NULL; *last=i; *start=i; return; } else { (*last)->next=i; i->prior=*last;i->next=NULL; *last=(*last)->next; } } void ddelete(struct address **start,struct address **last) /*刪除函數(shù)*/ { struct address *info; char s[80]; inputs(“請輸入 姓名:”,s,10); /*輸入欲刪除結(jié)點的name域內(nèi)容*/ info=find(s); if(info) { printf(“Deleting......n”);if(*start==info) 點的下驅(qū)作為新的首結(jié)點(入口)*/ { *start=info->next; if(*start)(*start)->prior=NULL; else *last=NULL; } else 結(jié)點*/ { info->prior->next=info->next; info=info->next; } printf(“未找到相關(guān)信息.n”); return NULL;} /*輸出整個鏈表*/ void list(void){ struct address *info; info=start; if(info==NULL)printf(“當(dāng)前記錄為空!”);else printf(“姓名t院系t宿舍樓t宿舍號t學(xué)號tn”); while(info) { };display(info);if(info->next==NULL){break;} info=info->next; printf(“nn”);} /*查找函數(shù)*/ /*輸入欲查找的姓名*/ /*如果沒找到,顯示Not found*/ /*如果找到,顯示該結(jié)點資料*/ 七、用戶使用手冊 (1)本程序的執(zhí)行文件為“學(xué)生通訊錄管理系統(tǒng).exe”。 (2)進入本系統(tǒng)之后,隨即顯示系統(tǒng)住菜單界面。用戶可以在該界面下根據(jù)提示輸入并按回車鍵確定,執(zhí)行相應(yīng)的菜單命令。 (3)本系統(tǒng)可以對學(xué)生信息進行錄入和刪除。 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 課題:學(xué)生成績管理系統(tǒng) 姓名:孫軒宇 學(xué)號:E01014316 專業(yè):計算機科技 院系:計科院 2010.10.8 班級:10 #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(“ **********通訊錄的存儲(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.通訊錄的存儲n”);printf(“ 6.通訊者的排序n”);printf(“ 0.退出通訊錄管理系統(tǒng)n”);printf(“ ======================n”);printf(“ 請選擇操作0-5 nn”);for(;;){ scanf(“%d”,&i);if(i<0||i>6)printf(“t對不起,您的輸入錯誤n”);else break;} return i;} intcreate_record(){inti,j;for(i=0;;) { printf(“ 學(xué)號(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)建成功!請繼續(xù)創(chuàng)建!n”); } return i;} intadd_record(int flag){ int i=flag,j;for(i;;) { printf(“ 學(xué)號(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(“恭喜你,添加成功!請繼續(xù)添加!n”); } return(i);} intfind_record(){ int i;char number[6];char named[10];intxz;printf(“--------------------n”);printf(“ 1.按學(xué)號查詢n”);printf(“ 2.按姓名查詢n”);printf(“--------------------n”);printf(“ 請選擇 : n”); scanf(“%d”,&xz);if(xz==1){ printf(“ 請輸入要查找的學(xué)號: ”);scanf(“%s”,number);for(i=0;i if(strcmp(data[i].num,number)==0) { printf(“ ** 學(xué)號姓名出生年月家庭住址郵編電話**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(“請輸入要查找的姓名: ”);scanf(“%s”,named);for(i=0;i { printf(“ ** 學(xué)號姓名出生年月家庭住址郵編電話**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(“對不起,沒有你要找的人!n”);return 0;} } else {printf(“對不起,沒有你要找的人!n”);return 0;} } } intdelete_record(int flag) { inti,j;intdeletemark=0;char number[20];printf(“ttt請輸入要刪除學(xué)號:n”);scanf(“%s”,number);for(i=0;i { if(strcmp(data[i].num, number)==0) { printf(“ttt以下是您要刪除的用戶紀(jì)錄:n”);printf(“ ** 學(xué)號姓名出生年月家庭住址郵編電話**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é)號排序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;} C語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)設(shè)計 一、題目內(nèi)容的描述 學(xué)生通訊錄管理系統(tǒng)設(shè)計 設(shè)計一個學(xué)生通信錄,學(xué)生通迅錄數(shù)據(jù)信息構(gòu)成內(nèi)容可自行設(shè)計(如:姓名、家庭地址、郵政編碼、電話號碼等等),通信錄數(shù)據(jù)類型定義為結(jié)構(gòu)體類型。由鍵盤輸入數(shù)據(jù)(最好要考慮輸入數(shù)據(jù)輸入的格式及輸入數(shù)據(jù)的有效性),然后進行以下的功能實現(xiàn)。程序要求主函數(shù)是一個功能選擇菜單,其它各功能都用各自的函數(shù)實現(xiàn)。 功能要求如下: 1、能建立、修改和增刪學(xué)生通訊錄 2、能夠按多種方式進行查詢,例如按姓名、按電話號碼等。 3、通訊錄的數(shù)據(jù)保存在文件中,運行程序時將通訊錄數(shù)據(jù)從文件讀取到內(nèi)存中。對通訊錄進行增加、刪除、修改學(xué)生數(shù)據(jù)后,提供功能菜單,可以將內(nèi)存中修改過的通訊錄重新保存至文件。 二、應(yīng)用程序功能的詳細(xì)說明 1、應(yīng)用程序?qū)崿F(xiàn)了可視化的系統(tǒng)操作界面。 2、對學(xué)生通訊錄形成了系統(tǒng)化的管理,操作簡便明了。 3、程序具有系統(tǒng)幫助,添加、顯示、查詢、刷新、刪除、排序、保存、修改、讀取學(xué)生通訊錄的功能。各項功能均可按照文字提示操作,淺顯易懂。 4、系統(tǒng)的各個功能模塊都用函數(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é)號查詢 開始 以可讀寫的方式打開一個數(shù)據(jù)文件 將此文件的內(nèi)容讀出,并存入一個新的結(jié)構(gòu)體類型的數(shù)組中。 調(diào)用menu()菜單函數(shù) 進入while()主循環(huán) 輸入1-8中的一數(shù)值,選擇相應(yīng)操作。 輸入是否為0 判斷鍵值,調(diào)用相應(yīng)函數(shù),完成相應(yīng)功能。 是否已對修改存盤 調(diào)用函數(shù)save()函數(shù),進行寫數(shù)據(jù)文件操作 結(jié)束 模塊一:頭文件,變量定義,函數(shù)的聲明 對系統(tǒng)所使用的變量進行定義,對函數(shù)進行聲明。 模塊二:錄入學(xué)生信息 聲明函數(shù)void readfile(),說明一個文件指針FILE *fp打開文 件“student.txt“。 模塊三:學(xué)生信息的查找 聲明void seek()為查找函數(shù),通過switch(item)設(shè)定用學(xué)號查找,用姓名查找兩個分支。 模塊四:學(xué)生信息的修改 聲明void modify()為學(xué)生信息修改函數(shù),通過switch(item)設(shè)定 所要修改的項目。 模塊五:刷新學(xué)生信息 聲明void sort()將錄入學(xué)生系按升序排列,用的是“冒泡排序法” 實現(xiàn)排序。 模塊六:增加學(xué)生信息 聲明void insert()插入學(xué)生信息,先通過判斷學(xué)生是否存在,若 否則繼續(xù)輸入,若是則跳出,重新循環(huán)。 模塊七:刪除學(xué)生信息 聲明void del()實現(xiàn)學(xué)生信息刪除,通過學(xué)號對比確定要刪除的信 息,然后用后一個替換掉。 模塊八:顯示學(xué)生信息 通過display()函數(shù)輸出學(xué)生信息。 模塊九:保存信息 通過fp=fopen(“student.txt“,“w“);寫入信息。 模塊十:匯總學(xué)生數(shù)目 通過number()函數(shù)將已有男女生及總學(xué)生數(shù)目匯總出來。 模塊十一:系統(tǒng)幫助 通過help()函數(shù)幫助操作。 模塊十二:界面菜單 通過switch(num)調(diào)用以上各函數(shù),實現(xiàn)功能。 1、程序采用模塊化設(shè)計,各模塊獨立,可分塊調(diào)試,個模塊由主函數(shù)控制調(diào)用。 2、其中主要模塊(readfile()、seek()、modify())都是利用數(shù)組,指針來實現(xiàn)數(shù)據(jù)結(jié)構(gòu)設(shè)計。 3、數(shù)據(jù)庫設(shè)計的任務(wù)是確定系統(tǒng)所需要的數(shù)據(jù)庫。數(shù)據(jù)庫是表的集合,通常一個系統(tǒng)只需一個數(shù)據(jù)庫。設(shè)計人 是根據(jù)需求分析,確定數(shù)據(jù)庫所包含的表及字段、表間的關(guān)系,然后具體確定表的結(jié)構(gòu),包括字段名、字段類型及寬度,需要的索引等。根據(jù)對需求得到的數(shù)據(jù)結(jié)構(gòu)進行分析,按數(shù)據(jù)輸入輸出的要求,確定表和表間的關(guān)系,進行驗證、調(diào)整、修改、完善,使其能夠?qū)崿F(xiàn)用戶對數(shù)據(jù)和功能的要求。通訊信息表包括以下字段:學(xué)號,姓名,年齡,性別,出生年月,地址,電話,E-mail。學(xué)號為主索引。 四、結(jié)束語 我設(shè)計的程序總體功能大都能夠運行順利,但有許多地方比較復(fù)雜,需要進一步修改,進行簡化。通過這次課程設(shè)計的鍛煉,我收獲很多,具體歸納為以下幾點: 1、首先,也是最重要的一點,學(xué)會如何將一個復(fù)雜的問題簡化,將一個較大的問題分成幾個小問題,再一一解決這些小問題。在設(shè)計一個程序之前,要學(xué)會對程序功能進行規(guī)劃,將其分為幾個不同的功能模塊,要思路清晰,簡單易用; 2、學(xué)會靈活運用已有的知識,同時適當(dāng)?shù)耐卣挂恍┲R;比如,這次設(shè)計過程中,有一些函數(shù)以前就很少用到,甚至沒有見過,但對程序的設(shè)計及用戶界面的改善帶來方便; 3、解決問題時,要盡可能考慮全面。每一個細(xì)節(jié)都很重要,既要避免功能的重復(fù),也要避免功能疏漏的地方! 4、在這次課程設(shè)計過程中,參考了許多資料,發(fā)現(xiàn)C語言真的很有意思!比如我看到一個關(guān)于用C語言編寫的小程序:五子棋、俄羅斯方塊、推箱子等,等這次課程結(jié)束后,我就想利用C語言編寫這些小游戲。曾經(jīng)認(rèn)為C是個挺枯燥的課程,現(xiàn)在發(fā)現(xiàn)這不僅僅是個簡單的課程,而是個很實用的計算機工具! 五、程序源代碼清單 #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()//對學(xué)生信息按學(xué)號排序 { 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é)號,學(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(“輸入性別時男為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é)號刪除信息 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(“請選擇菜單編號:“); 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(“請在1-10之間選擇\n“); } } #include struct message //定義結(jié)構(gòu)體 { char name[15]; char number[15]; char phone[15]; char qq[13]; char addr[25]; struct message *next; //指向下一數(shù)據(jù) }; int n; void creat() //建立電話簿 { int num;char choice[5]={'2'}; FILE *fp; struct message *head; struct message *p,*q; n = 0; p = q =(struct message *)malloc(LEN); fp=fopen(“通訊錄1.txt”,“wb”); system(“cls”); printf(“n請輸入姓名:”); scanf(“%s”,p->name); printf(“n請輸入電話號碼:”); scanf(“%s”,p->phone); printf(“n請輸入學(xué)號:”); scanf(“%s”,p->number); printf(“n請輸入QQ:”); scanf(“%s”,p->qq); printf(“n請輸入住址:”); scanf(“%s”,p->addr); fwrite(p,LEN,1,fp); fclose(fp); head = 0; num = 1; while(num!=0) { n = n+1; if(n==1)head = p; else q->next = p; q = p; p =(struct message *)malloc(LEN); //分配存儲區(qū) while(choice[0]!='1' && choice[0]!='0') //判斷是否繼續(xù) { printf(“n1 繼續(xù)輸入n 0 返回n”); printf(“請選擇操作:”); scanf(“%s”,choice); } switch(choice[0]) { case '1': { fp=fopen(“通訊錄1.txt”,“rb”); system(“cls”); printf(“n請輸入姓名:”); scanf(“%s”,p->name); printf(“n請輸入電話號碼:”); scanf(“%s”,p->phone); printf(“n請輸入學(xué)號:”); scanf(“%s”,p->number); printf(“n請輸入QQ:”); scanf(“%s”,p->qq); printf(“n請輸入住址:”); scanf(“%s”,p->addr); fwrite(p,LEN,1,fp); fclose(fp); choice[0] = '2'; } continue; case '0': num = 0; system(“cls”); } } q->next = 0;} void add() //添加通訊錄 { int num;char choice[5]={'2'}; FILE *fp; struct message *head; struct message *p,*q; n = 0; p = q =(struct message *)malloc(LEN); fp=fopen(“通訊錄1.txt”,“ab”); system(“cls”); printf(“n請輸入姓名:”); scanf(“%s”,p->name); printf(“n請輸入電話號碼:”); scanf(“%s”,p->phone); printf(“n請輸入學(xué)號:”); scanf(“%s”,p->number); printf(“n請輸入QQ:”); scanf(“%s”,p->qq); printf(“n請輸入住址:”); scanf(“%s”,p->addr); fwrite(p,LEN,1,fp); fclose(fp); head = 0; num = 1; while(num!=0) { n = n+1; if(n==1)head = p; else q->next = p; q = p; p =(struct message *)malloc(LEN); while(choice[0]!='1' && choice[0]!='0') 否繼續(xù) { printf(“n1 繼續(xù)輸入n 0 返回n”); printf(“請選擇操作:”); scanf(“%s”,choice); } //分配空間 //輸入內(nèi)容 //分配空間 //判斷是 switch(choice[0]) { case '1': { fp=fopen(“通訊錄1.txt”,“rb”); system(“cls”); printf(“n請輸入姓名:”); scanf(“%s”,p->name); printf(“n請輸入電話號碼:”); scanf(“%s”,p->phone); printf(“n請輸入學(xué)號:”); scanf(“%s”,p->number); printf(“n請輸入QQ:”); scanf(“%s”,p->qq); printf(“n請輸入住址:”); scanf(“%s”,p->addr); fwrite(p,LEN,1,fp); fclose(fp); choice[0] = '2'; } continue; case '0': num = 0; system(“cls”); } } q->next = 0;} void findname(struct message * fphead) { struct message *p; int a = 0; char findname[20]; system(“cls”); printf(“請輸入要查找的姓名:n”); scanf(“%s”,findname); for(p=fphead->next;p!=NULL;p=p->next) { if(strcmp(p->name,findname)==0) { //按姓名查找 printf(“姓名 電話號碼 學(xué)號 QQ 住址n”); printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr); a = 1; } } if(a!= 1) printf(“無此通訊錄!n”); } void findphone(struct message * fphead) //按電話查找 { struct message *p; int a = 0; char findphone[15]; system(“cls”); printf(“請輸入要查找的電話:n”); scanf(“%s”,findphone); for(p=fphead->next;p!=NULL;p=p->next) { if(strcmp(p->phone,findphone)==0) { printf(“姓名 電話號碼 學(xué)號 住址n”); printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr); a = 1; } } if(a!= 1) printf(“無此通訊錄!n”); } void findnumber(struct message * fphead) //按學(xué)號查找 { struct message *p; int a = 0; char findnumber[15]; system(“cls”); QQ printf(“請鍵入要查找的學(xué)生學(xué)號:n”); scanf(“%s”,findnumber); for(p=fphead->next;p!=NULL;p=p->next) { if(strcmp(p->number,findnumber)==0) { printf(“姓名 電話號碼 學(xué)號 QQ 住址n”); printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr); a = 1; } } if(a!= 1) printf(“無此通訊錄!n”); } void modify(struct message * fphead) //修改記錄 { FILE *fp; struct message *p,*q; int a = 0; char findname[15]; system(“cls”); printf(“請鍵入要查找的姓名:n”); scanf(“%s”,findname); for(p=fphead->next;p!=NULL;p=p->next) { if(strcmp(p->name,findname)==0) { printf(“姓名 電話號碼 學(xué)號 QQ 住址n”); printf(“%-15s %-15s %-15s %-13s %-25snnnn”,p->name,p->phone,p->number,p->qq,p->addr); printf(“n請鍵入新姓名:”); scanf(“%s”,p->name); printf(“n請鍵入新電話號碼:”); scanf(“%s”,p->phone); printf(“n請鍵入新學(xué)號:”); scanf(“%s”,p->number); printf(“n請鍵入新QQ:”); scanf(“%s”,p->qq); printf(“n請鍵入新住址:”); scanf(“%s”,p->addr); fp = fopen(“通訊錄2.txt”,“wb”); q = fphead->next; //P為鏈表頭指針 while(q!=0) { fwrite(q,LEN,1,fp); if(q->next!=0) q = q->next; else q = 0; } fclose(fp); unlink(“通訊錄1.txt”); //用新文件覆蓋原文件 rename(“通訊錄2.txt”, “通訊錄1.txt”); printf(“修改成功!”); a = 1; } } if(a!= 1) printf(“無此通訊錄!n”); } void del(struct message * fphead) //刪除記錄 { FILE *fp,*fq; struct message *p,*q,*r; char sname[15]; p = q =(struct message *)malloc(LEN); p = fphead; system(“cls”); fp = fopen(“通訊錄1.txt”,“rb”); fq = fopen(“通訊錄2.txt”,“wb”); printf(“請輸入欲刪除記錄的姓名:”); scanf(“%s”,sname); while(strcmp(p->name,sname)!=0 && p->next!=0)//查找節(jié)點并刪除該節(jié)點 { q = p; p = p->next; } if(strcmp(p->name,sname)==0) { if(p==fphead) fphead = p->next; else { q->next = p->next; } r = fphead->next; //r為鏈表頭指針 while(r!=0) { fwrite(r,LEN,1,fq); if(r->next!=0) r = r->next; else r = 0; } printf(“刪除成功!”); } else { printf(“無此通訊錄!”); } fclose(fp); fclose(fq); unlink(“通訊錄1.txt”); //用新文件覆蓋原文件 rename(“通訊錄2.txt”, “通訊錄1.txt”); } struct message * open(void) //打開文件,載入鏈表 { FILE *fp; struct message *p=NULL,*q=NULL,*temp=NULL,*fphead=NULL; fp=fopen(“通訊錄1.txt”,“rb”); fphead=(struct message *)malloc(LEN); //分配空間 temp = q = fphead; while(!feof(fp)) //循環(huán)讀取,載入鏈表 { p=(struct message *)malloc(LEN); temp=q; q->next=p; q=p; fread(p,LEN,1,fp); } temp->next=NULL; fclose(fp); return(fphead); //返回鏈表頭指針 } void print() //顯示通訊錄 { struct message *p; FILE *fp; system(“cls”); if((fp=fopen(“通訊錄1.txt”,“rb”))!=NULL) { printf(“姓名 電話號碼 學(xué)號 住址n”); p =(struct message *)malloc(LEN); //分配空間 while(!feof(fp)) { fread(p,LEN,1,fp); printf(“%-15s %-15s %-15s %-13s %-25sn”,p->name,p->phone,p->number,p->qq,p->addr); } fclose(fp); } else { printf(“未建立通訊錄!”); } } void main() //主函數(shù) { FILE * fp; struct message * fphead; int begin = 1,f; char choice[5]; QQ while(begin == 1) { printf(“tt>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”); printf(“tttt歡迎使用學(xué)生通訊錄n”); printf(“tt<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< printf(“ttt*主窗口菜單*nn”); printf(“ttt1:顯示通訊錄中所有記錄;nn”); printf(“ttt2:建立新通訊錄;nn”); printf(“ttt3:添加新記錄;nn”); printf(“ttt4:查詢通訊錄中的記錄;nn”); printf(“ttt5:修改通訊錄中的記錄;nn”); printf(“ttt6:刪除通訊錄中的記錄;nn”); printf(“ttt0:退出通訊錄nn”); printf(“請選擇操作:”); scanf(“%s”,choice); switch(choice[0]) { case '1': { print(); printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); } continue; case '2': { creat(); } continue; case '3': { add(); } continue; case '4': { if((fp = fopen(“通訊錄1.txt”,“rb”))!= NULL) { fclose(fp); system(“cls”); printf(“1按姓名查詢;n2按電話查詢;n3按學(xué)號查詢;n”); printf(“請輸入查詢方式:”); scanf(“%d”,&f); if(f==1) { fphead = open(); findname(fphead); } if(f==2) { fphead = open(); findphone(fphead); } else if(f==3) { fphead = open(); findnumber(fphead); } } else { system(“cls”); printf(“未建立通訊錄!”); } printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); } continue; case '5': { if((fp = fopen(“通訊錄1.txt”,“rb”))!= NULL) { fclose(fp); fphead = open(); modify(fphead); } else { system(“cls”); printf(“未建立通訊錄!”); } printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); }continue; case '6': { if((fp = fopen(“通訊錄1.txt”,“rb”))!= NULL) { fclose(fp); fphead = open(); del(fphead); } else { system(“cls”); printf(“未建立通訊錄!”); } printf(“按任意鍵返回主菜單!n”); getch(); system(“cls”); } continue; case '0': exit(0); default: { system(“cls”); printf(“輸入錯誤,按任意鍵返回主菜單!n”); getch(); system(“cls”); } } } system(“pause”);}第二篇:學(xué)生通訊錄管理系統(tǒng)
第三篇:C語言-通訊錄管理系統(tǒng)
第四篇:C語言課程設(shè)計學(xué)生通訊錄管理系統(tǒng)設(shè)計
第五篇:C語言大作業(yè)——學(xué)生通訊錄管理系統(tǒng)