通訊錄c課程設計報告
1. c語言課程設計—學生通訊錄管理系統設計 設計一個學生通信錄,學生通
/*10.3.2源程序*//******頭文件(.h)***********/#include"stdio.h"/*I/O函數*/#include"stdlib.h"/*標准庫函數*/#include"string.h"/*字元串函數*/#include"ctype.h"/*字元操作函數*/#defineM50/*定義常數表示記錄數*/typedefstruct/*定義數據結構*/{charname[20];/*姓名*/charunits[30];/*單位*/chartele[10];/*電話*/}ADDRESS;/******以下是函數原型*******/intenter(ADDRESSt[]);/*輸入記錄*/voidlist(ADDRESSt[],intn);/*顯示記錄*/voidsearch(ADDRESSt[],intn);/*按姓名查找顯示記錄*/intdelete(ADDRESSt[],intn);/*刪除記錄*/intadd(ADDRESSt[],intn);/*插入記錄*/voidsave(ADDRESSt[],intn);/*記錄保存為文件*/intload(ADDRESSt[]);/*從文件中讀記錄*/voiddisplay(ADDRESSt[]);/*按序號查找顯示記錄*/voidsort(ADDRESSt[],intn);/*按姓名排序*/voidqseek(ADDRESSt[],intn);/*快速查找記錄*/void();/*文件復制*/voidprint(ADDRESStemp);/*顯示單條記錄*/intfind(ADDRESSt[],intn,char*s);/*查找函數*/intmenu_select();/*主菜單函數*//******主函數開始*******/main(){inti;ADDRESSadr[M];/*定義結構體數組*/intlength;/*保存記錄長度*/clrscr();/*清屏*/for(;;)/*無限循環*/{switch(menu_select())/*調用主菜單函數,返回值整數作開關語句的條件*/{case0:length=enter(adr);break;/*輸入記錄*/case1:list(adr,length);break;/*顯示全部記錄*/case2:search(adr,length);break;/*查找記錄*/case3:length=delete(adr,length);break;/*刪除記錄*/case4:length=add(adr,length);break;/*插入記錄*/case5:save(adr,length);break;/*保存文件*/case6:length=load(adr);break;/*讀文件*/case7:display(adr);break;/*按序號顯示記錄*/case8:sort(adr,length);break;/*按姓名排序*/case9:qseek(adr,length);break;/*快速查找記錄*/case10:();break;/*復制文件*/case11:exit(0);/*如返回值為11則程序結束*/}}}/*菜單函數,函數返回值為整數,代表所選的菜單項*/menu_select(){chars[80];intc;gotoxy(1,25);/*將游標定為在第25行,第1列*/printf("pressanykeyentermenu\n");/*提示壓任意鍵繼續*/getch();/*讀入任意字元*/clrscr();/*清屏*/gotoxy(1,1);printf("********************MENU*********************\n\n");printf("0.Enterrecord\n");printf("1.Listthefile\n");printf("2.Searchrecordonname\n");printf("3.Deletearecord\n");printf("4.addrecord\n");printf("5.Savethefile\n");printf("6.Loadthefile\n");printf("7.displayrecordonorder\n");printf("8.sorttomakenewfile\n");printf("9.Quickseekrecord\n");printf("10.thefiletonewfile\n");printf("11.Quit\n");printf("***********************************************\n");do{printf("\nEnteryouchoice(0~11):");/*提示輸入選項*/scanf("%s",s);/*輸入選擇項*/c=atoi(s);/*將輸入的字元串轉化為整型數*/}while(c11);/*選擇項不在0~11之間重輸*/returnc;/*返回選擇項,主程序根據該數調用相應的函數*/}/***輸入記錄,形參為結構體數組,函數值返回類型為整型表示記錄長度*/intenter(ADDRESSt[]){inti,n;char*s;clrscr();/*清屏*/printf("\npleaseinputnum\n");/*提示信息*/scanf("%d",&n);/*輸入記錄數*/printf("pleaseinputrecord\n");/*提示輸入記錄*/printf("nameunittelephone\n");printf("------------------------------------------------\n");for(i=0;in-1)/*如果整數i值大於n-1,說明沒找到*/printf("notfound\n");elseprint(t[i]);/*找到,調用顯示函數顯示記錄*/}/*顯示指定的一條記錄*/voidprint(ADDRESStemp){clrscr();printf("\n\n********************************************\n");printf("nameunittelephone\n");printf("------------------------------------------------\n");printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);printf("**********************end***********************\n");}/*查找函數,參數為記錄數組和記錄條數以及姓名s*/intfind(ADDRESSt[],intn,char*s){inti;for(i=0;in-1)/*如果i>n-1超過了數組的長度*/printf("nofoundnotdeleted\n");/*顯示沒找到要刪除的記錄*/else{print(t[i]);/*調用輸出函數顯示該條記錄信息*/printf("Areyousuredeleteit(1/0)\n");/*確認是否要刪除*/scanf("%d",&ch);/*輸入一個整數0或1*/if(ch==1)/*如果確認刪除整數為1*/{for(j=i+1;j=i;j--)/*從最後一個結點開始向後移動一條*/{strcpy(t[j+1].name,t[j].name);/*當前記錄的姓名拷貝到後一條*/strcpy(t[j+1].units,t[j].units);/*當前記錄的單位拷貝到後一條*/strcpy(t[j+1].tele,t[j].tele);/*當前記錄的電話拷貝到後一條*/}strcpy(t[i].name,temp.name);/*將新插入記錄的姓名拷貝到第i個位置*/strcpy(t[i].units,temp.units);/*將新插入記錄的單位拷貝到第i個位置*/strcpy(t[i].tele,temp.tele);/*將新插入記錄的電話拷貝到第i個位置*/n++;/*記錄數加1*/returnn;/*返回記錄數*/}/*保存函數,參數為結構體數組和記錄數*/voidsave(ADDRESSt[],intn){inti;FILE*fp;/*指向文件的指針*/if((fp=fopen("record.txt","wb"))==NULL)/*打開文件,並判斷打開是否正常*/{printf("cannotopenfile\n");/*沒打開*/exit(1);/*退出*/}printf("\nSavingfile\n");/*輸出提示信息*/fprintf(fp,"%d",n);/*將記錄數寫入文件*/fprintf(fp,"\r\n");/*將換行符號寫入文件*/for(i=0;i=0&&id0)/*比較大小*/{flag=1;strcpy(temp.name,t[j].name);/*交換記錄*/strcpy(temp.units,t[j].units);strcpy(temp.tele,t[j].tele);strcpy(t[j].name,t[j+1].name);strcpy(t[j].units,t[j+1].units);strcpy(t[j].tele,t[j+1].tele);strcpy(t[j+1].name,temp.name);strcpy(t[j+1].units,temp.units);strcpy(t[j+1].tele,temp.tele);}if(flag==0)break;/*如果標志為0,說明沒有發生過交換循環結束*/}printf("sortsucess!!!\n");/*顯示排序成功*/}/*快速查找,參數為結構體數組和記錄數*/voidqseek(ADDRESSt[],intn){chars[20];intl,r,m;printf("\nPleasesortbeforeqseek!\n");/*提示確認在查找之前,記錄是否已排序*/printf("pleaseenternameforqseek\n");/*提示輸入*/scanf("%s",s);/*輸入待查找的姓名*/l=0;r=n-1;/*設置左邊界與右邊界的初值*/while(lr)/*如果左邊界大於右邊界時*/printf("notfound\n");/*顯示沒找到*/}/*復制文件*/void(){charoutfile[20];/*目標文件名*/inti,n;ADDRESStemp[M];/*定義臨時變數*/FILE*sfp,*tfp;/*定義指向文件的指針*/clrscr();/*清屏*/if((sfp=fopen("record.txt","rb"))==NULL)/*打開記錄文件*/{printf("cannotopenfile\n");/*顯示不能打開文件信息*/exit(1);/*退出*/}printf("Enteroutfilename,forexamplec:\\f1\\te.txt:\n");/*提示信息*/scanf("%s",outfile);/*輸入目標文件名*/if((tfp=fopen(outfile,"wb"))==NULL)/*打開目標文件*/{printf("cannotopenfile\n");/*顯示不能打開文件信息*/exit(1);/*退出*/}fscanf(sfp,"%d",&n);/*讀出文件記錄數*/fprintf(tfp,"%d",n);/*寫入目標文件數*/fprintf(tfp,"\r\n");/*寫入換行符*/for(i=0;i
2. C語言課程設計-通訊錄
我曾經寫過一個,用4a紙列印大約12頁,就是三個類,一個主函數,通訊錄的成員一個類管理,每個通訊錄相關項一個類管理,還有些雜項也用上一個類管理,主函數里只要簡單地調用,協調就好了。
3. 急求一份C語言課程設計報告,通訊錄管理系統,急急急急!!!!
C語言課程設計報告:http://wenku..com/view/d5723f36eefdc8d376ee325f.html
C語言通訊錄管理系統:http://wenku..com/view/13c5f96a1eb91a37f1115c8b.html
4. 誰有C語言課程設計,通訊錄的設計報告,要帶流程圖的
明天交,你今天才來找設計報告啊。。。祝你好運了。。幫不了你
5. 通訊錄管理 C語言課程設計
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct record
{
char id[10];
char name[20];
char phone[20];
char adress[40];
char postcode[10];
char e_mail[30];
}student[500];
int num=0;//外部變數num為文件中的紀錄數
FILE *fp;
void mainmenu();//主菜單
void newrecord();//新添紀錄
void searchmenu();//查詢菜單
void searchbyid();//按學號查詢
void searchbyname();//按姓名查詢
void searchbyphone();//按電話查詢
void deletemenu();//刪除菜單
void deleteall();//刪除所有
void deleteone();//刪除單個
void showall();//顯示所有
void readfromfile();//讀取文件
void writetofile();//寫入文件
void deletebyid();//按學號刪除
void deletebyname();//按姓名刪除
void listbyid();//按學號排序
void listbyname();//按姓名排序
void listmenu();//排序菜單
void main()
{
readfromfile();
while (1)
{
mainmenu();
}
}
void readfromfile()//從文件導入
{
if((fp=fopen("student.bin","rb"))==NULL)
{
printf("\n\t\t通訊錄文件不存在");
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t建立失敗");
exit(0);
}
else
{
printf("\n\t\t通訊錄文件已建立");
printf("\n\t\t按任意鍵進入主菜單");
getch();
return;
}
exit(0);
}
fseek(fp,0,2); /*文件位置指針移動到文件末尾*/
if (ftell(fp)>0) /*文件不為空*/
{
rewind(fp); /*文件位置指針移動到文件開始位置*/
for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);
printf("\n\t\t文件導入成功");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
printf("\n\t\t文件導入成功");
printf("\n\t\t通訊錄文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
void mainmenu()//主菜單
{
char choic;
system("cls");
printf("\n\t\t******************** 主菜單 ********************");
printf("\n\t\t*********** 1-新添紀錄 2-查詢菜單 ************");
printf("\n\t\t*********** 3-刪除菜單 4-記錄排序 ************");
printf("\n\t\t*********** 5-保存退出 6-不保存退出***********");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':newrecord();break;
case '2':searchmenu();break;
case '3':deletemenu();break;
case '4':listmenu();break;
case '5':writetofile();break;
case '6':exit(0);
default:mainmenu();
}
}
void searchmenu()//查詢菜單
{
char choic;
system("cls");
printf("\n\t\t******************* 查詢菜單 *******************");
printf("\n\t\t********** 1-顯示所有 2-按學號查詢 ************");
printf("\n\t\t********** 3-按姓名查詢4-按電話查詢 ************");
printf("\n\t\t********** 5-返回主菜單 ************");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':showall();break;
case '2':searchbyid();break;
case '3':searchbyname();break;
case '4':searchbyphone();break;
case '5':mainmenu();break;
}
}
void deletemenu()//刪除菜單
{
char choic;
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 刪除菜單 *******************");
printf("\n\t\t*********** 1-刪除所有 2-刪除單個 ***********");
printf("\n\t\t*********** 3-返回主菜單 ***********");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':deleteall();break;
case '2':deleteone();break;
case '3':mainmenu();break;
default:mainmenu();break;
}
}
void deleteall()//刪除所有
{
printf("\n\t\t確認刪除?(y/n)");
if (getch()=='y')
{
fclose(fp);
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t不能打開文件,刪除失敗");
readfromfile();
}
num=0;
printf("\n\t\t紀錄已刪除,按任意鍵返回主菜單");
getch();
return;
}
else
return;
}
void deletebyname()//按姓名刪除
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[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以下是您要刪除的學生紀錄:");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t學號: %s",student[i].id);
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\te-mail:%s",student[i].e_mail);
printf("\n\t\t________________________________");
printf("\n\t\t是否刪除?(y/n)");
if (getch()=='y')
{
for (j=i;j<num-1;j++) /*紀錄移動,從stud數組中刪除之*/
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t刪除成功");
if((i+1)<num)
{
printf("\n\t\t是否繼續刪除相同姓名的同學信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf("\n\t\t是否繼續刪除相同姓名的同學信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{
printf("\n\t\t沒有該同學的紀錄");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
return;
}
else if (findmark!=0)
{
printf("\n\t\t沒有重名信息");
printf("\n\t\t沒有該同學的紀錄");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
return;
}
}
void deletebyid()//按學號刪除
{
int i,j;
int deletemark=0;
char id[20];
printf("\n\t\t請輸入要刪除學生學號:");
scanf("%s",id);
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].id,id)==NULL)
{
printf("\n\t\t以下是您要刪除的學生紀錄:");
printf("\n\t\t學號: %s",student[i].id);
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\te-mail:%s",student[i].e_mail);
printf("\n\t\t是否刪除?(y/n)");
if (getch()=='y')
{
for (j=i;j<num-1;j++) /*紀錄移動,從stud數組中刪除之*/
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t刪除成功");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t沒有該同學的紀錄");
printf("\n\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyid();
return;
}
}
void newrecord()//添加紀錄
{
printf("\n\t\t**************** 請輸入學生信息 ****************\n");
printf("\n\t\t輸入學號:");
scanf("%s",&student[num].id);
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].postcode);
printf("\n\t\t輸入e-mail:");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否繼續添加?(Y/N):");
if (getch()=='y')
newrecord();
return;
}
void showall()//顯示所有
{
int i;
system("cls");
if(num!=0)
{
printf("\n\t\t*************** 以下為通訊錄所有信息************");
for (i=0;i<num;i++)
{
printf("\n\t\t學號: %s",student[i].id);
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].postcode);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\t\t");
if (i+1<num)
{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通訊錄中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單:");
getch();
return;
}
//按電話查詢
void searchbyphone()
{
int mark=0;
int i;
int a=0;
printf("\n\t\t****************** 按電話查找 ******************");
char phone[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].id);
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\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t沒有改學生的信息");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
void searchbyname()//按姓名查詢
{
int mark=0;
int i;
int a=0;
printf("\n\t\t***************** 按姓名查找 *******************");
char name[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].id);
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\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************");
mark++;
if ((i+1)<num)
{
printf("\n\t\t是否繼續查找相同名字的學生信息:(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
else
return;
}
else
{
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
}
if(mark!=0)
{
printf("\n\t\t沒有相同姓名的學生紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
else
{
printf("\n\t\t沒有相同姓名的學生紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
void searchbyid()//按學號查詢
{
int mark=0;
int i;
int a=0;
printf("\n\t\t****************** 按學號查找 ******************\n");
char id[10];
printf("\n\t\t請輸入學號:");
scanf("%s",id);
for(i=0;i<num;i++)
{
if (strcmp(student[i].id,id)==0)
{
printf("\n\t\t************** 以下是您查找的學生信息 **********");
printf("\n\t\t學號: %s",student[i].id);
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\te-mail:%s",student[i].e_mail);
printf("\n\t\t************************************************");
printf("\n\t\t按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t沒有改學生的信息");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
}
void writetofile()//寫入文件
{
int i;
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t文件打開失敗");
}
for (i=0;i<num;i++)
{
if (fwrite(&student[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t寫入文件錯誤!\n");
}
}
fclose(fp);
printf("\n\t\t通訊錄文件已保存");
printf("\n\t\t按任意鍵退出程序\n\t\t");
exit(0);
}
void deleteone()//刪除單個
{
char choic;
printf("\n\t\t1-按學號刪除 2-按姓名刪除");
printf("\n\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':deletebyid();break;
case '2':deletebyname();break;
}
}
void listbyname()//按姓名排序
{
int i,j;
struct record tmp;
for (i=1;i<num;i++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.name,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否顯示?(y/n)");
if (getch()=='y')
showall();
return;
}
void listbyid()//按學號排序
{
int i,j;
struct record tmp;
for (i=1;i<num;i++)
{
if(strcmp(student[i].id,student[i-1].id)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.id,student[j].id)<0)&&j>=0);
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否顯示?(y/n)");
if (getch()=='y')
showall();
return;
}
void listmenu()//排序菜單
{
char choic;
if(num==0)
{
printf("\n\t\t對不起,文件中無任何紀錄");
printf("\n\t\t按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 排序菜單 *******************");
printf("\n\t\t********** 1-按學號排序 2-按姓名排序 **********");
printf("\n\t\t********** 3-返回主菜單 **********");
printf("\n\t\t************************************************");
printf("\n\t\t請選擇:");
choic=getch();
switch(choic)
{
case '1':listbyid();break;
case '2':listbyname();break;
case '3':mainmenu();break;
default:mainmenu();break;
}
}
6. 用C語言做通訊錄可課程設計.
由於一些問題的緣故
我已把答案發到你的郵箱
你自己去看看
看行不行
7. c語言課程設計報告通訊錄
就放大師傅的說法都是法國
8. 求一份數據結構課程設計的報告 內容是用c語言編寫的通訊錄(用數據結構演算法來做)。通訊錄需要寫出思路
數據結構課程設計的報告簡單的,我和你交流下.
9. 誰有通訊錄管理系統的課程設計報告啊 謝謝了~~~
//chuangyong 頭文件模塊 chuangyong.h
const int MaxLen=200; //最多可存放200個聯系人信息
char fName[20]="tel.dat";//磁碟文件:通信錄文件名
int Len; //全局變數,通信錄中當前聯系人總數
//1. 通訊錄數據結構設計
typedef struct Telephone
{
char name[20]; //姓名
int group;//群組:1.朋友 2.同事 3.家人 4.其他
char home[15];//住宅電話
char mobile[15];//手機
char email[20];//Email
char add[20];//地址
char memo[20];//備注
}Tel;
//指針數組結構,排序時用
typedef struct index
{
int len; //數組長度
Tel *tel[MaxLen]; //指針數組,
}Index;
//顯示模塊 xuanshi.cpp
void List(Tel tel[],Index lianxren); //按lianxren中指針數組的排序方式顯示所有聯系人。
void dayingbiaotou(void); //列印表頭
void dayingbiaowei(void);//列印表尾
void PrintOne(Tel r,int i); //僅列印一個聯系人r的信息,序號為i
void Print(Tel r); //列印表頭及一個聯系人的信息
void huanyin();//歡迎界面
int Menu(void); //主菜單,顯示第一級菜單:查看通信錄(1)、更新通信錄(2)、備份通信錄(3)、退出(0)。
int Menu2(void); //更新通信錄子菜單,顯示:新增聯系人(21)、編輯聯系人(22)、刪除聯系人(23)、返回主菜單(20)。
//文件處理模塊 wenjiancl.cpp
void New(Tel tel[],Index *lianxren); //新增聯系人。加到數組中第一個空著的位置。之後需要重新排序
void Edit(Tel tel[],Index *lianxren); //編輯聯系人。需要重新排序
void Delete(Tel tel[],Index *lianxren); // 刪除聯系人。邏輯刪除,僅將姓名賦空串。刪除後需要重新排序
void Input(Tel *r,Tel tel[],int menu); //輸入一個聯系人的信息,由menu識別:是新增(11)還是修改(13)
int chongcha(char *name,Tel tel[],char *orignal);//查重。在新增聯或編輯系人前,檢查是否有重名的情況。
int Select(); //選擇聯系人序號,避免出錯
int Load(Tel tel[],Index *lianxren); //讀取。將通信錄文件fName讀入內存。排序
int Save(Tel tel[]); //保存。將通信錄以fName(全局變數)為名保存到磁碟。此時做物理刪除:姓名為空串的聯系人表示已刪除,不存入通信錄文件。
int Copy(void); //備份通信錄。復制通信錄文件。
void pingypaix(Tel tel[],Index *lianxren); //按音序排序。
void xuanzpaixi(Index *p); //對指針數組選擇排序
//主文件模塊 zhuwenjian.cpp
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include "chuangyong.h"
#include "xuanshi.cpp"
#include "wenjiancl.cpp"
int main()
{
huanyin();
int select=0;
Tel tel[MaxLen]; //最多存放200個聯系人
Index lianxren;//按音序排序的指針數組
Load(tel,&lianxren); //從通信錄文件讀取信息
//循環顯示菜單,供用戶選擇
do{
if(select<10 || select==20)//選的是主菜單項<10,或由子菜單返回20。接著顯示主菜單
select=Menu();
else if(select>20 && select<30)//選的是子菜單2的項,繼續顯示子菜單2
select=Menu2();
switch(select)
{
case 1://按音序查看通信錄
List(tel,lianxren);
printf("\n\n\t按任意鍵繼續... ...");
getch(); //等待用戶看清屏幕,conio.h
break;
case 21: //新增聯系人
New(tel,&lianxren);
break;
case 22: //編輯聯系人
Edit(tel,&lianxren);
break;
case 23: //刪除聯系人
Delete(tel,&lianxren);
break;
case 20: //返回主菜單
break;
case 3: //備份通信錄
system("cls"); //沒有子菜單,先清除上一級菜單,stdlib.h
Save(tel); //用戶可能更新過,先保存當前tel到通信錄文件
Copy();
break;
case 0: //退出程序
break;
}
}while(select!=0);
Save(tel); //退出系統前,將內存數據存入通信錄文件
return 0;
}
//xuanshi.cpp 菜單模塊。與程序其他模塊獨立。通過返回的菜單代碼與操作對應
// 歡迎部分
void huanyin()
{
char A[100]={"歡迎使用本通訊錄 本程序由 飛堯 編寫 o(∩_∩)o...!回車進入!"};
int i,j,k;
for(i=0;i<6;i++)
{
printf("\n");
}
puts(" ******************************************************\n");
printf("\t\t");
for(i=0;A[i]!='\0';i++)
{
if(i==49)printf("\n\n\t\t\t");
printf("%c",A[i]);
for(j=0;j<10000;j++)
for(k=0;k<2000;k++)
;
}
puts("\n\n\n\t\t\t 07計科C班 王崇堯");
puts("\n ******************************************************\a");
getch();
}
//主菜單,顯示第一級菜單:查看通信錄(1)、更新通信錄(2)、備份通信錄(3)、退出(0)。
int Menu(void)
{
int i;
char menu;
do{
system("cls"); //清屏,stdlib.h
for(i=0;i<6;i++)
{
printf("\n");
}
puts("\n **********主菜單*********");
puts(" * *");
puts(" * 1. 查看通信錄 *");
puts(" * 2. 更新通信錄 *");
puts(" * 3. 備份通信錄 *");
puts(" * 0. 退出程序 *");
puts(" * *");
puts(" *************************\n");
printf("\t 請選擇:");
menu = getche();
switch( menu )
{
case '0':
puts("\n\n\t退出程序!");
menu=menu-'0';
break; // 跳出循環
case '1':
case '3':
menu=menu-'0';
break;
case '2':
menu=Menu2();
break;
default:
puts("\n\n\t選擇錯誤!");
menu='9';
}
}while(menu=='9');//要返回菜單代碼,'0'、'1'、20,21,22,23、'3'都是有效值
return menu;
}
//更新通信錄子菜單,顯示:新增聯系人(21)、編輯聯系人(22)、刪除聯系人(23)、返回(20)。
int Menu2()
{
char menu;
int i;
do{
system("cls"); //清屏,stdlib.h
for(i=0;i<6;i++)
{
printf("\n");
}
puts("\n ********更新通信錄*******");
puts(" * *");
puts(" * 1. 新增聯系人 *");
puts(" * 2. 編輯聯系人 *");
puts(" * 3. 刪除聯系人 *");
puts(" * 0. 返回主菜單 *");
puts(" * *");
puts(" *************************\n");
printf("\t 請選擇:");
menu = getche(); //輸入一個字元,不回顯,不需要敲入回車,conio.h
switch( menu )
{
case '0':
puts("\n\n\t返回主菜單!");
break;// 跳出循環
case '1':
case '2':
case '3':
break;
default:
puts("\n\n\t選擇錯誤!");
menu='9';
}
}while(menu=='9'); //要返回菜單代碼,'0'、'1'、'2'、'3'都是有效值
return 20+menu-'0';
}
//瀏覽部分
void List(Tel tel[],Index lianxren) //按lianxren的排序方式顯示所有結點。
{
int i; //i:數組下標
if(Len==0)
{
printf("\n\t沒有聯系人");
return ;
}
dayingbiaotou();
for(i=0; i<Len; i++) //按音序遍歷所有聯系人,序號為i+1
PrintOne( *(lianxren.tel[i]), i+1);
dayingbiaowei();
}
void dayingbiaotou(void) //列印表頭
{
printf("\n\n\t通信錄 * 聯系人");
printf("\n\t----------------------------------------------------------------------");
printf("\n\t%-10s%-6s%-10s%-10s", "姓名", "群組", "住宅電話", "手機");
printf("%-10s%-10s%-10s", "Email", "地址", "備注");
printf("\n\t----------------------------------------------------------------------");
}
void dayingbiaowei(void)//列印表尾
{
printf("\n\t----------------------------------------------------------------------\n");
}
void PrintOne(Tel r,int i) //僅列印一個聯系人r的信息,序號為i
{
if(i!=0) //聯系人前加序號
printf("\n%6d\t%-10s",i,r.name);
else //聯系人前不加序號
printf("\n\t%-10s",r.name);
//群組:1.朋友 2.同事 3.家人 4.其他
switch(r.group)
{
case 1:
printf("%-6s","朋友");
break;
case 2:
printf("%-6s","同事");
break;
case 3:
printf("%-6s","家人");
break;
default:
printf("%-6s","其他");
}
printf("%-10s%-10s%-10s", r.home , r.mobile , r.email);
printf("%-10s%-10s",r.add , r.memo );
}
void Print(Tel r) //列印表頭及一個聯系人的信息
{
dayingbiaotou();
PrintOne(r,0);//只列印一人,不輸出序號(第二個參數為0)
dayingbiaowei();
}
//文件處理模塊 wenjiancl.cpp
//文件處理部分
int Load(Tel tel[],Index *lianxren) //讀取。將通信錄文件fName讀入內存。排序
{
FILE *fin;
int i=0;
fin=fopen(fName,"rb");
if(!fin)
{
printf("\n\t通信錄不存在,請先新增聯系人!\n\n按任意鍵繼續... ...");
getch();
return 0;
}
while(1)
{
fread(&tel[i],sizeof(Tel),1,fin);
if(feof(fin))
break;
i++;
}
fclose(fin);
Len=i;//更新通信錄總人數
pingypaix(tel,lianxren); //按音序排序
return i;
}
int Save(Tel tel[]) //保存。將通信錄以fName(全局變數)為名保存到磁碟。此時做物理刪除:姓名為空串的聯系人表示已刪除,不存入通信錄文件。
{
FILE* fout;
int i,j;//i:tel數組的下標,j:通信錄中實際人數計數(不含tel中name為空的元素)
fout=fopen(fName,"wb");
if(!fout)
{
printf("\n\t不能正確保存通信錄!按任意鍵繼續... ...");
getch();
return 0;
}
//i為tel數組下標,j為實際人數計數(tel數組中有已邏輯刪除的聯系人,姓名為空串)
for(i=0,j=0; j<Len; )
{
//找到一個有效的聯系人,排出邏輯刪除者(姓名為空串)
while( strcmp(tel[i].name,"") == 0 )
i++;
fwrite(&tel[i],sizeof(Tel),1,fout);
i++;
j++;
}
fclose(fout);
return j;
}
int Copy(void) //備份通信錄。復制通信錄文件。
{
FILE *fout,*fin;
Tel *p=(Tel*)malloc(sizeof(Tel)); //存放從通信錄讀入的臨時數據
char name[20];
fin=fopen(fName,"rb");
if(!fin)
{
printf("\n\t沒有聯系人!");
return 0;
}
do{
printf("\n\t請輸入備份文件名:");
scanf("%s",name);
strcat(name,".bak");
fout=fopen(name,"wb");
if(!fout)
printf("\t無效文件名或路徑!\n");
}while(!fout);
while(1)
{
fread(p,sizeof(Tel),1,fin);
if(feof(fin))
break;
fwrite(p,sizeof(Tel),1,fout);
}
printf("\n\t備份成功!");
free(p);
return 1;
}
//基本操作部分
void New(Tel tel[],Index *lianxren) //新增聯系人。加到數組中第一個空著的位置。之後需要重新排序
{
int t=0; //找到tel中第一個空的位置,存放新輸入的聯系人
if(Len>=MaxLen)
{
printf("\n\n\t通信錄已滿!");
return ;
}
//找到tel中第一個空的位置t
while( strcmp(tel[t].name,"")!=0 )
t++;
Input(&tel[t],tel,21);//新增聯系人(21),輸入聯系人信息
Len++; //聯系人增1
pingypaix(tel,lianxren);//重新排序
}
void Edit(Tel tel[],Index *lianxren) //編輯聯系人。需要重新排序
{
int i;
List(tel,*lianxren);//按音序排序的順序修改
if(Len==0) return ;
i=Select();
Print( *(lianxren->tel[i]) ); //顯示用戶選中的聯系人i
Input( lianxren->tel[i] ,tel,23); //編輯(23)時輸入聯系人信息
pingypaix(tel,lianxren); //重新排序
}
void Delete(Tel tel[],Index *lianxren) // 刪除聯系人。邏輯刪除,僅將姓名賦空串。刪除後需要重新排序
{
int i;
char select; //用戶選擇:是否繼續輸入除姓名以外的信息
List(tel,*lianxren);//按音序排序的順序刪除
if(Len==0) return ;
i=Select();
Print( *(lianxren->tel[i]) );//顯示用戶選中的聯系人i
printf("\n\t確定要刪除此人?(y/n)");
select=getche();
if(select=='Y' || select=='y')
{
strcpy(lianxren->tel[i]->name,"");//刪除聯系人信息(邏輯刪除):將姓名賦空串,表示無人
Len--; //聯系人減1
pingypaix(tel,lianxren);//重新排序
}
}
void Input(Tel *r,Tel tel[],int menu) //輸入一個聯系人的信息,由們menu識別:是新增(11)還是修改(13)
{
int select;
char name[20],orignal[20];
if(menu==21)//新增,原來沒名字
strcpy(orignal,"");
else //編輯,原來有名字
strcpy(orignal,r->name );
printf("\n\n\t請輸入聯系人姓名:");
do{
scanf("%s", name);
}while(chongcha(name,tel,orignal)); //重名檢查。修改時,可以與原來的姓名相同
strcpy(r->name,name);
printf("\t是否繼續輸入(y/n)?");
select=getche();
if(select=='y' || select=='Y')
{
//群組
printf("\n\t群組(1.朋友 2.同事 3.家人 4.其他),請輸入序號:");
scanf("%d",& (r->group));
while( r->group<1 ||r->group>4)
{
printf("\n\t輸入錯誤!請重新輸入群組序號(1.朋友 2.同事 3.家人 4.其他):");
scanf("%d",& (r->group));
}
printf("\t住宅電話:");
scanf("%s",r->home );
printf("\t手機:");
scanf("%s",r->mobile );
printf("\tEmail:");
scanf("%s",r->email );
printf("\t地址:");
scanf("%s",r->add);
printf("\t備註:");
scanf("%s",r->memo );
}
else if(menu==21) //新增聯系人(menu=21)時,用戶未輸入,設置預設值
{
r->group=4; //預設群組:其他
strcpy(r->home , "");
strcpy(r->mobile , "");
strcpy(r->email , "");
strcpy(r->add , "");
strcpy(r->memo , "");
}
}
int chongcha(char *name,Tel tel[],char *original)//查重。在新增或編輯聯系人前,檢查是否有重名的情況。
{
int i,j; //i:數組下標 j: 除姓名為空串以外的實際人數
int p=0; //重名標志:1 重名,0沒有重名
if(strcmp(name,original)!=0)//name不是原來的名字,
for(i=0,j=0; j<Len; ) //遍歷所有聯系人
{
//找到一個有效的聯系人,排出邏輯刪除者(姓名為空串)
while( strcmp(tel[i].name,"") == 0 )
i++;
if( strcmp(name,tel[i].name)==0 ) //name不是原來的名字,但與通信錄中名字重復
{
p=1;
printf("\n\t重名!請重新輸入:");
break;
}
i++;
j++;
}
return p;
}
int Select() //選擇聯系人序號,避免出錯
{
int i=0;
int c; //c: scanf()輸入的返回值,輸入成功,返回1;否則,返回0
printf("\n\t請按序號選擇聯系人:");
c=scanf("%d",&i);
while(i<1 || i>Len)
{
printf("\n\t輸入錯誤!請按序號選擇聯系人:");
if(c==0) fflush(stdin); //輸入不成功,清空與輸入流stdin有關的輸入緩沖區的內容,stdio.h
c=scanf("%d",&i);
}
return i-1;
}
//排序部分
void pingypaix(Tel tel[],Index *lianxren) //按音序排序。
{
int i,j; //i:數組下標 j: 除姓名為空串以外的實際人數
if( Len==0 )
return ;
//初始化排序指針數組
lianxren->len=0;
for(i=0,j=0; j<Len; )
{
//找到一個有效的聯系人,排出邏輯刪除者(姓名為空串)
while( strcmp(tel[i].name,"") == 0 )
i++;
lianxren->tel[j]=&tel[i];
j++;
i++;
lianxren->len++;
}
//選擇排序
xuanzpaixi( lianxren );
}
void xuanzpaixi(Index *p) //對指針數組選擇排序
{
int i,j,n=p->len;
int min;
Tel *temp;
if( n==0 ) return ;//沒有聯系人,不需要排序
//選擇排序
for(i=0; i<n-1; i++)
{
//找最小元素
min=i;
for(j=i+1; j<n; j++)
{
if(strcmp( p->tel[j]->name , p->tel[min]->name )<0)
min=j;
}
//交換 最小元素min,當前無序序列第一個元素i
if(min!=i)
{
temp=p->tel[i];
p->tel[i]=p->tel[min];
p->tel[min]=temp;
}
}//end of for i
}
10. C語言課程設計:通訊錄管理系統
/*
* main_tongxunlu.c
*
* Created on: 2011-6-21
* Author: zhanglujin
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct record
{
char name[20]; //姓名
char phone[12]; //電話
char adress[50]; //地址
char postcode[8]; //郵政編碼
char e_mail[20]; //電子郵件。
}student[100]; //假設最大數為100.
//定義全局變數num,表示已經輸入的人數 。
int num; //這里使用數組解決通訊錄的問題,實際上使用鏈表更好。
int menu_select()
{
char s[80];
int a;/*定義整形變數*/
system("cls");
printf("\t\t***********歡迎進入通訊管理界面********\n\n");
printf("\t\t\t0. 輸入記錄\n");
printf("\t\t\t1. 顯示記錄\n");
printf("\t\t\t2. 按姓名查找\n");
printf("\t\t\t3. 按電話號碼查找\n");
printf("\t\t\t4. 插入記錄 \n");
printf("\t\t\t5. 按姓名排序\n");
printf("\t\t\t6. 刪除記錄\n");
printf("\t\t\t7. Quit\n");
printf("\t\t***********************************************\n\n");
do{
printf("Enter you choice(0~7):");
scanf("%s",s);
a=atoi(s);
}
while (a<0 || a>7);
return a;
}
int adser()
{
printf("\t\t\t**************** 請輸入用戶信息 ****************\n");
printf("\t\t\t輸入姓名:\n");
scanf("%s",student[num].name);
printf("\t\t\t輸入電話號碼:\n");
scanf("%s",student[num].phone);
printf("\t\t\t輸入地址:\n");
scanf("%s",student[num].adress);
printf("\t\t\t輸入郵編:\n");
scanf("%s",student[num].postcode);
printf("\t\t\t輸入e-mail:\n");
scanf("%s",student[num].e_mail);
num++;
printf("\t\t\t是否繼續添加?(Y/N):\n");
if(getch()=='y' || getch()=='Y')
adser();
return(0);
}
void list()
{
int i;
system("cls");
if(num!=0)
{
printf("\t\t\t*************** 以下為通訊錄所有信息************\n");
for (i=0;i<num;i++)
{
printf("\t\t\t姓名:%s\n",student[i].name);
printf("\t\t\t電話:%s\n",student[i].phone);
printf("\t\t\t地址:%s\n",student[i].adress);
printf("\t\t\t郵編:%s\n",student[i].postcode);
printf("\t\t\te-mail:%s\n",student[i].e_mail);
if(i+1<num)
{
system("pause");
}
}
printf("\t\t\t************************************************\n");
}
else
printf("\t\t\t通訊錄中無任何紀錄\n");
printf("\t\t\t按任意鍵返回主菜單:\n");
getch(); //這里是無回顯的輸入字元,你輸入的字元不會顯示在屏幕上。
return;
}
int searchbyname()
{
int mark=0;
int i;
printf("\t\t\t***************** 按姓名查找 *******************\n");
char name[20];
printf("\t\t\t請輸入姓名:\n");
scanf("%s",name);
for(i=0;i<num;i++)
{
if (strcmp(student[i].name,name)==0)
{
printf("\t\t\t************* 以下是您查找的用戶信息 ***********\n");
printf("\t\t\t姓名: %s",student[i].name);
printf("\t\t\t電話: %s",student[i].phone);
printf("\t\t\t地址: %s",student[i].adress);
printf("\t\t\te-mail:%s",student[i].e_mail);
printf("\t\t\t************************************************\n");
mark++;
if((i+1)<num)
{
printf("\t\t\t是否繼續查找相同名字的用戶信息:(y/n)\n");
if(getch()=='y' || getch()=='Y')
{
continue;
}
else
return(0);
}
else
{
printf("\t\t\t按任意鍵返回主菜單");
getch();
return(0);
}
}
}
if(mark == 0)
{
printf("\t\t\t沒有相同姓名的用戶紀錄\n");
printf("\t\t\t按任意鍵返回主菜單\n");
getch();
return(0);
}
return 0;
}
int searchbyphone()
{
int mark=0;
int i;
printf("\t\t\t****************** 按電話查找 ******************\n");
char phone[10];
printf("\t\t\t請輸入電話號碼:\n");
scanf("%s",phone);
for(i=0;i<num;i++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\t\t\t************** 以下是您查找的用戶信息 **********\n");
printf("\t\t\t姓名: %s",student[i].name);
printf("\t\t\t電話: %s",student[i].phone);
printf("\t\t\t地址: %s",student[i].adress);
printf("\t\t\te-mail:%s",student[i].e_mail);
printf("\t\t\t************************************************\n");
printf("\t\t\t按任意鍵返回主菜單\n");
mark++;
getch();
return(0);
}
}
if (mark==0)
{
printf("\t\t\t沒有改用戶的信息\n");
printf("\t\t\t按任意鍵返回主菜單\n");
getch();
return(0);
}
return(0);
}
void deletebyphone()
{
int i,j;
int deletemark=0;
char phone[20];
printf("\t\t\t請輸入要刪除用戶電話號碼:\n");
scanf("%s",phone);
if(num==0)
{
printf("\t\t\t對不起,文件中無任何紀錄\n");
printf("\t\t\t按任意鍵返回主菜單\n");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\t\t\t以下是您要刪除的用戶紀錄:\n");
printf("\t\t\t姓名: %s",student[i].name);
printf("\t\t\t電話: %s",student[i].phone);
printf("\t\t\t地址: %s",student[i].adress);
printf("\t\t\te-mail:%s",student[i].e_mail);
printf("\t\t\t是否刪除?(y/n)");
if (getch()=='y' || getch()=='Y')
{
for (j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
printf("\t\t\t刪除成功");
printf("\t\t\t是否繼續刪除?(y/n)");
if (getch()=='y' || getch()=='Y')
deletebyphone();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\t\t\t沒有該用戶的紀錄");
printf("\t\t\t是否繼續刪除?(y/n)");
if(getch()=='y' || getch()=='Y')
deletebyphone();
return;
}
return;
}
void deletebyname()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("\t\t\t請輸入要刪除用戶姓名:\n");
scanf("%s",name);
for (i=a;i<num;i++)
{
if(strcmp(student[i].name,name)==0)
{
printf("\t\t\t以下是您要刪除的用戶紀錄:");
findmark++;
printf("\t\t\t________________________________");
printf("\t\t\t姓名: %s",student[i].name);
printf("\t\t\t電話: %s",student[i].phone);
printf("\t\t\t地址: %s",student[i].adress);
printf("\t\t\te-mail:%s",student[i].e_mail);
printf("\t\t\t________________________________");
printf("\t\t\t是否刪除?(y/n)");
if (getch()=='y' || getch() == 'Y')
{
for(j=i;j<num-1;j++)
student[j]=student[j+1];
num--;
deletemark++;
printf("\t\t\t刪除成功");
if((i+1)<num)
{
printf("\t\t\t是否繼續刪除相同姓名的用戶信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("\t\t\t是否繼續刪除?(y/n)");
if (getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf("\t\t\t是否繼續刪除相同姓名的用戶信息?(y/n)");
if (getch()=='y' || getch() == 'Y')
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{
printf("\t\t\t沒有該用戶的紀錄");
printf("\t\t\t是否繼續刪除?(y/n)");
if(getch()=='y' || getch() == 'Y')
deletebyphone();
return;
}
else if (findmark!=0)
{
printf("\t\t\t沒有重名信息");
printf("\t\t\t沒有該用戶的紀錄");
printf("\t\t\t是否繼續刪除?(y/n)");
if(getch()=='y' || getch() == 'Y')
deletebyphone();
return;
}
}
int dele()
{
char choic;
printf("\t\t\t1-按電話號碼刪除 2-按姓名刪除");
printf("\t\t\t請選擇:");
choic=getch();
switch (choic)
{
case '1':deletebyphone();break;
case '2':deletebyname();break;
}
return(0);
}
int sortbyname() //按姓名進行排序
{
int i,j;
struct record tmp;
for (i=1;i<num;i++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.name,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
printf("\t\t\t排序成功,是否顯示?(y/n)");
if (getch()=='y')
list();
return(0);
}
int main()
{
printf("\t\t************************************************\n");
printf("\t\t********welcome to TONGXUNLU *******************\n");
printf("\t\t###########code by XXXXX ###################\n");
printf("\t\t*************************************************\n");
printf("按任意鍵進入主菜單\n");
getch();
int selectnum;
while(1)
{
selectnum = menu_select();
switch(selectnum)
{
case 0:
{
adser();
break;
}
case 1:
{
list();
break;
}
case 2:
{
searchbyname();
break;
}
case 3:
{
searchbyphone();
break;
}
case 4:
{
adser(); //這里插入,應該能指定位置,不過意義不大,所以和添加記錄一樣了。
break;
}
case 5:
{
sortbyname();
break;
}
case 6:
{
dele();
break;
}
case 7:
{
printf("BYE BYE!\n");
system("pause");
getchar();
exit(0);
}
}
}
getchar();
return 0;
}