當前位置:首頁 » 編程語言 » c語言建立員工通訊錄
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言建立員工通訊錄

發布時間: 2022-04-14 17:12:16

① 用c語言做通訊錄

這看你是怎樣定義的了。如果你50個同學是用結構體來定義的話就比較容易實現。用二維數組的話,就比較麻煩。
查找名字可以用strcmp(輸入的名字,編好的名字)==0如果相等,就等於查找到你輸入的名字了。記錄它的下標,再輸出它的聯系方式。
下面是一個比較完整的通訊錄代碼,你參考一下啦。(看到專家兩個字,我真沒資格去回答你了,汗)

/*10.3.2源程序*/
/******頭文件(.h)***********/
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*標准庫函數*/
#include "string.h"/*字元串函數*/
#include "ctype.h" /*字元操作函數*/
#define M 50 /*定義常數表示記錄數*/
typedef struct /*定義數據結構*/
{
char name[20]; /*姓名*/
char units[30]; /*單位*/
char tele[10]; /*電話*/
}ADDRESS;
/******以下是函數原型*******/
int enter(ADDRESS t[]); /*輸入記錄*/
void list(ADDRESS t[],int n); /*顯示記錄*/
void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/
int delete(ADDRESS t[],int n); /*刪除記錄*/
int add(ADDRESS t[],int n); /*插入記錄*/
void save(ADDRESS t[],int n); /*記錄保存為文件*/
int load(ADDRESS t[]); /*從文件中讀記錄*/
void display(ADDRESS t[]); /*按序號查找顯示記錄*/
void sort(ADDRESS t[],int n); /*按姓名排序*/
void qseek(ADDRESS t[],int n); /*快速查找記錄*/
void (); /*文件復制*/
void print(ADDRESS temp); /*顯示單條記錄*/
int find(ADDRESS t[],int n,char *s) ; /*查找函數*/
int menu_select(); /*主菜單函數*/
/******主函數開始*******/
main()
{
int i;
ADDRESS adr[M]; /*定義結構體數組*/
int length; /*保存記錄長度*/
clrscr(); /*清屏*/
for(;;)/*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{
case 0:length=enter(adr);break;/*輸入記錄*/
case 1:list(adr,length);break; /*顯示全部記錄*/
case 2:search(adr,length);break; /*查找記錄*/
case 3:length=delete(adr,length);break; /*刪除記錄*/
case 4:length=add(adr,length); break; /*插入記錄*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*讀文件*/
case 7:display(adr);break; /*按序號顯示記錄*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找記錄*/
case 10:();break; /*復制文件*/
case 11:exit(0); /*如返回值為11則程序結束*/
}
}
}
/*菜單函數,函數返回值為整數,代表所選的菜單項*/
menu_select()
{
char s[80];
int c;
gotoxy(1,25);/*將游標定為在第25行,第1列*/
printf("press any key enter menu......\n");/*提示壓任意鍵繼續*/
getch(); /*讀入任意字元*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf(" 0. Enter record\n");
printf(" 1. List the file\n");
printf(" 2. Search record on name\n");
printf(" 3. Delete a record\n");
printf(" 4. add record \n");
printf(" 5. Save the file\n");
printf(" 6. Load the file\n");
printf(" 7. display record on order\n");
printf(" 8. sort to make new file\n");
printf(" 9. Quick seek record\n");
printf(" 10. the file to new file\n");
printf(" 11. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0~11):"); /*提示輸入選項*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整型數*/
}while(c11); /*選擇項不在0~11之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
/***輸入記錄,形參為結構體數組,函數值返回類型為整型表示記錄長度*/
int enter(ADDRESS t[])
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*輸入記錄數*/
printf("please input record \n"); /*提示輸入記錄*/
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*輸入記錄*/
printf("----------------------------------------------\n");
}
return n; /*返回記錄條數*/
}
/*顯示記錄,參數為記錄數組和記錄條數*/
void list(ADDRESS t[],int n)
{
int i;
clrscr();
printf("\n\n*******************ADDRESS******************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);
if((i+1)%10==0) /*判斷輸出是否達到10條記錄*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*壓任意鍵繼續*/
}
printf("************************end*******************\n");
}
/*查找記錄*/
void search(ADDRESS t[],int n)
{
char s[20]; /*保存待查找姓名字元串*/
int i; /*保存查找到結點的序號*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*輸入待查找姓名*/
i=find(t,n,s); /*調用find函數,得到一個整數*/
if(i>n-1) /*如果整數i值大於n-1,說明沒找到*/
printf("not found\n");
else
print(t[i]); /*找到,調用顯示函數顯示記錄*/
}
/*顯示指定的一條記錄*/
void print(ADDRESS temp)
{
clrscr();
printf("\n\n********************************************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);
printf("**********************end***********************\n");
}
/*查找函數,參數為記錄數組和記錄條數以及姓名s */
int find(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*從第一條記錄開始,直到最後一條*/
{
if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/
return i; /*相等,則返回該記錄的下標號,程序提前結結束*/
}
return i; /*返回i值*/
}
/*刪除函數,參數為記錄數組和記錄條數*/
int delete(ADDRESS t[],int n)
{
char s[20]; /*要刪除記錄的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",s);/*輸入姓名*/
i=find(t,n,s); /*調用find函數*/
if(i>n-1) /*如果i>n-1超過了數組的長度*/
printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/
else
{
print(t[i]); /*調用輸出函數顯示該條記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認是否要刪除*/
scanf("%d",&ch); /*輸入一個整數0或1*/
if(ch==1) /*如果確認刪除整數為1*/
{
for(j=i+1;j<n;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); /*將後一條記錄的電話拷貝到前一條*/
}
n--; /*記錄數減1*/
}
}
return n; /*返回記錄數*/
}
/*插入記錄函數,參數為結構體數組和記錄數*/
int add(ADDRESS t[],int n)/*插入函數,參數為結構體數組和記錄數*/
{
ADDRESS temp; /*新插入記錄信息*/
int i,j;
char s[20]; /*確定插入在哪個記錄之前*/
printf("please input record\n");
printf("************************************************\n");
printf("name unit telephone\n");
printf("--------------------------------------------------\n");
scanf("%s%s%s",temp.name,temp.units,temp.tele); /*輸入插入信息*/
printf("------------------------------------------------\n");
printf("please input locate name \n");
scanf("%s",s); /*輸入插入位置的姓名*/
i=find(t,n,s); /*調用find,確定插入位置*/
for(j=n-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*/
return n; /*返回記錄數*/
}
/*保存函數,參數為結構體數組和記錄數*/
void save(ADDRESS t[],int n)
{
int i;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,並判斷打開是否正常*/
{
printf("can not open file\n");/*沒打開*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*輸出提示信息*/
fprintf(fp,"%d",n); /*將記錄數寫入文件*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式寫入記錄*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
}
fclose(fp);/*關閉文件*/
printf("****save success***\n"); /*顯示保存成功*/
}
/*讀入函數,參數為結構體數組*/
int load(ADDRESS t[])
{
int i,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/
{
printf("can not open file\n"); /*不能打開*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*讀入記錄數*/
for(i=0;i<n;i++)
fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式讀入記錄*/
fclose(fp); /*關閉文件*/
printf("You have success read data from file!!!\n"); /*顯示保存成功*/
return n; /*返回記錄數*/
}
/*按序號顯示記錄函數*/
void display(ADDRESS t[])
{
int id,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/
{
printf("can not open file\n"); /*不能打開文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*顯示信息*/
scanf("%d",&id); /*輸入序號*/
fscanf(fp,"%d",&n); /*從文件讀入記錄數*/
if(id>=0&&id<n) /*判斷序號是否在記錄范圍內*/
{
fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動文件指針到該記錄位置*/
print(t[id]); /*調用輸出函數顯示該記錄*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/
fclose(fp); /*關閉文件*/
}
/*排序函數,參數為結構體數組和記錄數*/
void sort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*臨時變數做交換數據用*/
for(i=0;i<n;i++)
{
flag=0; /*設標志判斷是否發生過交換*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/
{
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("sort sucess!!!\n"); /*顯示排序成功*/
}
/*快速查找,參數為結構體數組和記錄數*/
void qseek(ADDRESS t[],int n)
{
char s[20];
int l,r,m;
printf("\nPlease sort before qseek!\n"); /*提示確認在查找之前,記錄是否已排序*/
printf("please enter name for qseek\n"); /*提示輸入*/
scanf("%s",s); /*輸入待查找的姓名*/
l=0;r=n-1; /*設置左邊界與右邊界的初值*/
while(l<=r) /*當左邊界<=右邊界時*/
{
m=(l+r)/2; /*計算中間位置*/
if(strcmp(t[m].name,s)==0) /*與中間結點姓名欄位做比較判是否相等*/
{
print(t[m]); /*如果相等,則調用print函數顯示記錄信息*/
return ; /*返回*/
}
if(strcmp(t[m].name,s)<0) /*如果中間結點小*/
l=m+1; /*修改左邊界*/
else
r=m-1; /*否則,中間結點大,修改右邊界*/
}
if(l>r) /*如果左邊界大於右邊界時*/
printf("not found\n"); /*顯示沒找到*/
}
/*復制文件*/
void ()
{
char outfile[20]; /*目標文件名*/
int i,n;
ADDRESS temp[M]; /*定義臨時變數*/
FILE *sfp,*tfp; /*定義指向文件的指針*/
clrscr();/*清屏*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*讀出文件記錄數*/
fprintf(tfp,"%d",n);/*寫入目標文件數*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,
temp[i].tele); /*讀入記錄*/
fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,
temp[i].units,temp[i].tele); /*寫入記錄*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示復製成功*/
}

好好參考一下啦,可能有些函數你還沒學到,找找書就行了。

② C語言製作簡單的通訊錄

主要是鏈表的操作,直接定義個結構體和指針的運用。

③ c語言編程 建立一通訊錄,輸入姓名,電號碼,住址等信息,然後對通信...

#include<stdio.h>
#include<string.h>
struct person
{
char name[8];
char tel[15];
char addr[50];
};
char filename[20];
FILE *fp;
void creat();
void output();
void search();
void append();
void modify();
void deleted();
int main()
{
int m;
creat();
while(1)
{
printf("\n\n添加,請按1");
printf("\n查找,請按2");
printf("\n修改,請按3");
printf("\n刪除,請按4");
printf("\n輸出,請按5");
printf("\n退出,請按0\n");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1: append();
break;
case 2: search();
break;
case 3: modify();
break;
case 4: deleted();
break;
case 5: output();
break;
case 0: break;
}
printf("\n\n操作完畢,請再次選擇!");
}
else
printf("\n\n選擇錯誤,請再次選擇!");
}
return 0;}

void creat()
{
struct person one;
long s1;
printf("\n請輸入通訊簿名:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n不能建立通訊簿!");

}
fprintf(fp,"%-10s%-20s%-50s\n","姓名","電話號碼","住址");
printf("\n請輸入姓名、電話號碼及住址(以0結束)\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))
{
scanf("%s%s",one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
scanf("%s",one.name);
}
fclose(fp);
}
void output()
{
struct person one;
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打開通訊簿!");

}
printf("\n\n%20s\n","通 訊 簿");
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
}
fclose(fp);
}
void append()
{
struct person one;
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打開通訊簿!");

}
printf("\n請輸入添加的姓名、電話號碼及住址\n");
scanf("%s%s%s",one.name,one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
fclose(fp);
}
void search()
{
int k=0;
char namekey[8];
struct person one;
printf("\n請輸入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打開通訊簿!");

}
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
printf("\n\n已查到,記錄為:");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
k=1;
}
}
if(!k)
printf("\n\n對不起,通訊簿中沒有此人的記錄。");
fclose(fp);
}
void modify()
{
int m,k=0;
long offset;
char namekey[8];
struct person one;
printf("\n請輸入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打開通訊簿!");

}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,記錄為:");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n請輸入新姓名、電話號碼及住址:");
scanf("%s%s%s",one.name,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
}
else
printf("\n對不起,通訊簿中沒有此人的記錄。");
fclose(fp);
}
void deleted()
{
int m,k=0,flag;
long offset1,offset2;
char namekey[8], valid[4];
struct person one;
printf("\n請輸入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打開通訊簿!");

}
while(!feof(fp))
{
offset1=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,記錄為");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n確實要刪除,按1;不刪除,按0:");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-10s%-20s%-50s\n","","","");
}
}
else
printf("\n對不起,通訊簿中沒有此人的記錄。");
fclose(fp);
}
在vc6.0 上可以使用,希望對你有用

④ C語言編寫通訊錄

#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>//包含system函數頭文件
#defineLENsizeof(structstudent)
structstudent
{
charnum[20];//ID號碼
charname[100];//用戶姓名
charphone[20];//電話號碼
charhome[100];//通訊地址
charbirthday[20];//出生日期
structstudent*next;
};
voidface(void)//功能選擇面板
{
printf("********************************************************************");
printf(" ☆★☆★☆★~_~~_~~_~☆★☆★☆★ ");
printf(" ☆★歡迎使用阿冬子通訊錄☆★");
printf(" ☆★選擇你需要操作的功能:☆★(現無記錄,建議先填加記錄)★☆ ");
printf(" ");
printf(" 1.【增加通訊錄信息〗 ");
printf(" 2.〖顯示通訊錄中所有記錄】 ");
printf(" 3.【刪除需要刪除的信息〗 ");
printf(" 4.〖以名字查詢所需的信息】 ");
printf(" 5.【保存通訊錄中的所有記錄到指定文件中〗 ");
printf(" 6.〖退出不保存!!】 ");
printf(" ");
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★");
printf(" ******************************************************************** ");
}
voidprint(structstudent*head)
{
structstudent*p;
p=head;
system("CLS");//調用DOS命令CLS能夠清屏
printf("************************************************************* ");
printf("====================→用戶信息記錄表←=================== ");
printf("************************************************************* ");
if(head!=NULL)
do
{
printf("聯系人ID號碼:%s ",p->num);
printf("聯系人姓名:%s ",p->name);
printf("聯系人電話號碼:%s ",p->phone);
printf("學生地址:%s ",p->home);
printf("聯系人出生日期:%s ",p->birthday);
printf("******************************************************** ");
p=p->next;
}while(p!=NULL);
else
{
printf("對不起!!沒有任何聯系人記錄!! ");
printf("============================================================= ");
}
}
//增添電子通訊錄中的內容,即創建連表過程
structstudent*append(structstudent*head)
{
structstudent*p0=NULL,*p1,*p2;//p0為要插入的新節點
p1=head;
p2=head;
system("CLS");
printf(" *********************************************************** ");
printf(" 你能在此目錄下創建並添加聯系人信息");
printf(" *********************************************************** ");
p0=(structstudent*)malloc(LEN);
printf("請輸入聯系人ID號碼:");
gets(p0->num);
printf("請輸入聯系人姓名:");
gets(p0->name);
printf("請輸入聯系人電話號碼:");
gets(p0->phone);
printf("請輸入聯系人地址:");
gets(p0->home);
printf("請輸入聯系人出生日期:");
gets(p0->birthday);
//對插入的節點排序,按姓名的拼音順序
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((strcmp(p0->name,p1->name)>0)&&(p1->next!=NULL))
{p2=p1;p1=p1->next;}
if((strcmp(p0->name,p1->name))<=0)
{
if(head==p1)
head=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{p1->next=p0;p0->next=NULL;}

printf("恭喜你!!成功添加了聯系人信息!!");
printf(" ************************************************************ ");
printf(" ");

}
return(head);

}

//電子通訊錄的維護(刪除),通過輸入聯系人ID號碼刪除聯系人數據
structstudent*del(structstudent*head)
{
structstudent*p1,*p2;
charnum[12];
system("CLS");
printf(" ************************************************************ ");
printf("=================→用戶信息記錄刪除功能←=============== ");
printf("************************************************************ ");
printf("輸入要刪除的聯系人ID號碼:");
gets(num);
p1=head;
if(head==NULL)
{
printf("很抱歉!!沒有任何聯系人紀錄!! ");
printf(" ******************************************************* ");
return(head);
}
while(p1!=NULL)
{
if(strcmp(p1->num,num)==0)
{
if(p1==head)
head=p1->next;
elsep2->next=p1->next;
free(p1);
printf("刪除記錄成功!! ");
return(head);
}
p2=p1;
p1=p1->next;
}
printf("對不起!!沒有要刪除的聯系人紀錄!! ");
return(head);
}

//電子通訊錄的查找,關鍵字為用戶姓名;
voidsearch(structstudent*head)
{
structstudent*p1,*p2;
charname[20];
p1=head;
p2=p1;
system("CLS");
printf(" ************************************************************** ");
printf("================→用戶信息記錄查詢功能←================== ");
printf("************************************************************** ");
printf("輸入要查找聯系人的姓名:");
gets(name);
while(p1!=NULL)
{
if(strcmp(p1->name,name)==0)
{
printf("聯系人ID號碼:");
puts(p1->num);
printf("聯系人姓名:");
puts(p1->name);
printf("聯系人電話號碼:");
puts(p1->phone);
printf("聯系人地址:");
puts(p1->home);
printf("聯系人出生日期:");
puts(p1->birthday);
printf(" ============================================================= ");
break;
}
p2=p1;
p1=p1->next;
}
if(p1==NULL)
printf("對不起!!沒有該聯系人的紀錄!! ");

}
//電子通訊錄的記錄存檔操作,使用文件指針;
voidsave(structstudent*head)
{
FILE*fp,*fp1;
structstudent*p;
p=head;
fp=fopen("record.txt","w");
fp1=fopen("record1.txt","w");
fprintf(fp1,"===============→用戶信息記錄表←================= ");

while(p!=NULL)
{
//首先把數據保存在record.txt中,這是提供給load函數用的數據
//fprintf(fp,"%s%s%s%s%s%s",p->num,p->name,p->phone,p->email,p->home,p->birthday);
//然後把數據保存在record1.txt中,這是能提供直接查詢看的,有比較友好的畫面
fprintf(fp1,"==================================================== ");
fprintf(fp1,"聯系人ID號碼:%s ",p->num);
fprintf(fp1,"聯系人姓名:%s ",p->name);
fprintf(fp1,"聯系人電話:%s ",p->phone);
fprintf(fp1,"聯系人家庭地址:%s ",p->home);
fprintf(fp1,"聯系人出生日期:%s ",p->birthday);
p=p->next;
}
fprintf(fp1,"************************************************************* ");
fclose(fp1);
fclose(fp);
printf(" 恭喜你!!成功儲存,你能在record1.txt找到相應紀錄 ");
printf("************************************************************** ");
printf("PRESSANYKEYTOEXIT. ");
getchar();
exit(1);
}
//電子通訊錄的記錄讀盤操作,使用文件指針;
structstudent*load(void)
{
FILE*fp;
structstudent*head=NULL,*p1=NULL,*p2=NULL;
charc;
inti;
fp=fopen("record.txt","r");
for(i=1;(c=fgetc(fp))!=-1;i++)
{
p1=(structstudent*)malloc(LEN);
//fscanf(fp,"%s%s%s%s%s%s",p1->num,p1->name,p1->phone,p1->email,p1->home,p1->birthday);
if(i==1)
{head=p1;p2=p1;}
else
{p2->next=p1;p2=p1;}
}
if(p1==NULL)
{fclose(fp);return(head);}
p2->next=NULL;
fclose(fp);
return(head);
}

main()
{
FILE*fp1,*fp2;
intc;//功能選擇需要的號碼
system("cls");
system("color2f");
system("cls");
structstudent*head=NULL;
if((fp1=fopen("record.txt","r"))==NULL)
{
fp2=fopen("record.txt","w");//如果不存在record.txt就創建一個
fclose(fp2);
}
head=load();
while(1)
{
face();
printf("選擇你需要操作的功能號碼:");
scanf("%d",&c);
getchar();
switch(c)
{
case1:head=append(head);break;
case2:print(head);break;
case3:head=del(head);break;
case4:search(head);break;
case5:save(head);break;
case6:exit(0);break;
default:printf("Entererror!! ");
}
//printf("***************** ");
printf("◇◆請按ENTER返回功能操作菜單◇◆ ");
//printf("***************** ");
getchar();
system("CLS");

}

}

⑤ c語言編寫通信錄

/*編程建立一通訊簿,存放有姓名、電話號碼、住址,然後對通信簿進行查找、添加、修改及刪除。*/
#include<stdio.h>
struct person
{
char name[8];
char tel[15];
char addr[50];
};
char filename[20];
FILE *fp;
void creat();
void output();
void search();
void append();
void modify();
void delete();
main()
{
int m;

creat();
while(1)
{
printf("\n\n添加,請按1");
printf("\n查找,請按2");
printf("\n修改,請按3");
printf("\n刪除,請按4");
printf("\n輸出,請按5");
printf("\n退出,請按0\n");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1: append();
break;
case 2: search();
break;
case 3: modify();
break;
case 4: delete();
break;
case 5: output();
break;
case 0: exit();
}
printf("\n\n操作完畢,請再次選擇!");
}
else
printf("\n\n選擇錯誤,請再次選擇!");
}
}
void creat()
{
struct person one;
long s1;
printf("\n請輸入通訊簿名:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n不能建立通訊簿!");
exit();
}
fprintf(fp,"%-10s%-20s%-50s\n","姓名","電話號碼","住址");
printf("\n請輸入姓名、電話號碼及住址(以0結束)\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))
{
scanf("%s%s",one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
scanf("%s",one.name);
}
fclose(fp);
}
void output()
{
struct person one;
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打開通訊簿!");
exit();
}
printf("\n\n%20s\n","通 訊 簿");
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
}
fclose(fp);
}
void append()
{
struct person one;
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打開通訊簿!");
exit();
}
printf("\n請輸入添加的姓名、電話號碼及住址\n");
scanf("%s%s%s",one.name,one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
fclose(fp);
}
void search()
{
int k=0;
char namekey[8];
struct person one;
printf("\n請輸入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打開通訊簿!");
exit();
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
printf("\n\n已查到,記錄為:");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
k=1;
}
}
if(!k)
printf("\n\n對不起,通訊簿中沒有此人的記錄。");
fclose(fp);
}
void modify()
{
int m,k=0;
long offset;
char namekey[8];
struct person one;
printf("\n請輸入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打開通訊簿!");
exit();
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,記錄為:");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n請輸入新姓名、電話號碼及住址:");
scanf("%s%s%s",one.name,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
}
else
printf("\n對不起,通訊簿中沒有此人的記錄。");
fclose(fp);
}
void delete()
{
int m,k=0,flag;
long offset1,offset2;
char namekey[8], valid[4];
struct person one;
printf("\n請輸入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打開通訊簿!");
exit();
}
while(!feof(fp))
{
offset1=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,記錄為");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n確實要刪除,按1;不刪除,按0:");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-10s%-20s%-50s\n","","","");
}
}
else
printf("\n對不起,通訊簿中沒有此人的記錄。");
fclose(fp);
}

⑥ C語言程序設計 建立通信錄

#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*其它說明*/
#include "string.h" /*字元串函數*/
#include "conio.h" /*屏幕操作函數*/
#include "mem.h" /*內存操作函數*/
#include "ctype.h" /*字元操作函數*/
#include "alloc.h" /*動態地址分配函數*/
#define N 3 /*定義常數*/
typedef struct z1 /*定義數據結構*/
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函數原型*/
STUDENT *init(); /*初始化函數*/
STUDENT *create(); /*創建鏈表*/
STUDENT *delete(STUDENT *h); /*刪除記錄*/
void print(STUDENT *h); /* 顯示所有記錄*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*讀入記錄*/
void computer(STUDENT *h); /*計算總分和均分*/
STUDENT *insert(STUDENT *h); /*插入記錄*/
void append(); /*追加記錄*/
void (); /*復制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分類合計*/
int menu_select(); /*菜單函數*/
/******主函數開始*******/
main()
{
int i;
STUDENT *head; /*鏈表定義頭指針*/
head=init(); /*初始化鏈表*/
clrscr(); /*清屏*/
for(;;) /*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{ /*值不同,執行的函數不同,break 不能省略*/
case 0:head=init();break; /*執行初始化*/
case 1:head=create();break; /*創建鏈表*/
case 2:head=delete(head);break; /*刪除記錄*/
case 3:print(head);break; /*顯示全部記錄*/
case 4:search(head);break; /*查找記錄*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*讀文件*/
case 7:computer(head);break; /*計算總分和均分*/
case 8:head=insert(head); break; /*插入記錄*/
case 9:();break; /*復制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加記錄*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分類合計*/
case 14:exit(0); /*如菜單返回值為14程序結束*/
}
}
}
/*菜單函數,返回值為整數*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/
" 0. init list", /*初始化*/
" 1. Enter list", /*輸入記錄*/
" 2. Delete a record from list", /*從表中刪除記錄*/
" 3. print list ", /*顯示單鏈表中所有記錄*/
" 4. Search record on name", /*按照姓名查找記錄*/
" 5. Save the file", /*將單鏈表中記錄保存到文件中*/
" 6. Load the file", /*從文件中讀入記錄*/
" 7. compute the score", /*計算所有學生的總分和均分*/
" 8. insert record to list ", /*插入記錄到表中*/
" 9. the file to new file", /*復制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加記錄到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分類合計*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字元形式保存選擇號*/
int c,i; /*定義整形變數*/
gotoxy(1,25); /*移動游標*/
printf("press any key enter menu......\n"); /*壓任一鍵進入主菜單*/
getch(); /*輸入任一鍵*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
gotoxy(10,2); /*移動游標*/
putch(0xc9); /*輸出左上角邊框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出上邊框水平線*/
putch(0xbb); /*輸出右上角邊框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*輸出左垂直線*/
gotoxy(54,i);putch(0xba);
} /*輸出右垂直線*/
gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出下邊框水平線*/
putch(0xbc); /*輸出右下角邊框┛*/
window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*輸出主菜單數組*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*設置背景顏色為黑色*/
window(1,1,80,25); /*恢復原窗口大小*/
gotoxy(10,21); /*移動游標*/
do{
printf("\n Enter you choice(0~14):"); /*在菜單窗口外顯示提示信息*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整形數*/
}while(c<0||c>14); /*選擇項不在0~14之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
STUDENT *init()
{
return NULL;
}

/*創建鏈表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號並校驗*/
if(info->no[0]=='@') break; /*如果學號首字元為@則結束輸入*/
inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/
printf("please input %d score \n",N); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0) /*確保成績在0~100之間*/
printf("bad data,repeat input\n"); /*出錯提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各門課程成績*/
}
info->sum=s; /*將總分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值為0*/
info->next=h; /*將頭結點做為新輸入結點的後繼結點*/
h=info; /*新輸入結點為新的頭結點*/
}
return(h); /*返回頭指針*/
}
/*輸入字元串,並進行長度驗證*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*允鞠提示信息*/
scanf("%s",p); /*輸入字元串*/
if(strlen(p)>count)printf("\n too long! \n"); /*進行長度校驗,超過count值重輸入*/
}while(strlen(p)>count);
strcpy(s,p); /*將輸入的字元串拷貝到字元串s中*/
}
/*輸出鏈表中結點信息*/
void print(STUDENT *h)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr(); /*清屏*/
p=h; /*初值為頭指針*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}

/*刪除記錄*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/
char s[11]; /*存放學號*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*顯示提示信息*/
scanf("%s",s); /*輸入要刪除記錄的學號*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
q=p; /*將p指針值賦給q作為p的前驅指針*/
p=p->next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/
printf("\nlist no %s student\n",s);
else /*p不為空,顯示找到的記錄信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*壓任一鍵後,開始刪除*/
if(p==h) /*如果p==h,說明被刪結點是頭結點*/
h=p->next; /*修改頭指針指向下一條記錄*/
else
q->next=p->next; /*不是頭指針,將p的後繼結點作為q的後繼結點*/
free(p); /*釋放p所指結點空間*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示刪除後不要忘記保存文件*/
}
return(h); /*返回頭指針*/
}
/*查找記錄*/
void search(STUDENT/*當記錄的姓名不是要找的,或指針不為空時*/
{ p=p->next; /*移動指針,指向下一結點*/
if(p==NULL) /*如果指針為空*/
printf("\nlist no %s student\n",s); /*顯示沒有該學生*/
else /*顯示找到的記錄信息*/
{
printf (*h)
{
STUDENT *p; /* 移動指針*/
char s[15]; /*存放姓名的字元數組*/
clrscr(); /*清屏幕*/
printf("please enter name for search\n");
scanf("%s",s); /*輸入姓名*/
p=h; /*將頭指針賦給p*/
while(strcmp(p->name,s)&&p!=NULL) ("\n\n*****************************havefound***************************\n");
printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("********************************end*******************************\n");
}
}
}
/*插入記錄*/
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驅,info指新插入記錄*/
char s[11]; /*保存插入點位置的學號*/
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s); /*輸入插入點學號*/
printf("\nplease new record\n"); /*提示輸入記錄信息*/
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*如沒有申請到,內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號*/
inputs("enter name:",info->name,15); /*輸入姓名*/
printf("please input %d score \n",N); /*提示輸入分數*/
s1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次輸入成績*/
{
do{ /*對數據進行驗證,保證在0~100之間*/

printf("score%d:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i]; /*計算總分*/
}
info->sum=s1; /*將總分存入新記錄中*/
info->average=(float)s1/N; /*計算均分*/
info->order=0; /*名次賦值0*/
info->next=NULL; /*設後繼指針為空*/
p=h; /*將指針賦值給p*/
q=h; /*將指針賦值給q*/
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/
{
q=p; /*保存指針p,作為下一個p的前驅*/
p=p->next; /*將指針p後移*/
}
if(p==NULL) /*如果p指針為空,說明沒有指定結點*/
if(p==h) /*同時p等於h,說明鏈表為空*/
h=info; /*新記錄則為頭結點*/
else
q->next=info; /*p為空,但p不等於h,將新結點插在表尾*/
else
if(p==h) /*p不為空,則找到了指定結點*/
{
info->next=p; /*如果p等於h,則新結點插入在第一個結點之前*/
h=info; /*新結點為新的頭結點*/
}
else
{
info->next=p; /*不是頭結點,則是中間某個位置,新結點的後繼為p*/
q->next=info; /*新結點作為q的後繼結點*/
}
printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存檔*/
return(h); /*返回頭指針*/
}
/*保存數據到文件*/
void save(STUDENT *h)
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10]; /*保存輸出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*為輸出打開一個二進制文件,如沒有則建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打開文件,提示正在保存*/
p=h; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("-----save success!!-----\n"); /*顯示保存成功*/
}
/* 從文件讀數據*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打開一個二進制文件,為讀方式*/
{
printf("can not open file\n"); /*如不能打開,則結束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!p)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h; /*返回空頭指針*/
}
h=p; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break; /*如果沒讀到數據,跳出循環*/
p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*為下一個結點申請空間*/
if(!p->next)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h;
}
q=p; /*保存當前結點的指針,作為下一結點的前驅*/
p=p->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
q->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp); /*關閉文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回頭指針*/
}
/*追加記錄到文件*/
void append()

{
FILE *fp; /*定義指向文件的指針*/
STUDENT *info; /*新記錄指針*/
int s1,i;
char infile[10]; /*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*沒有申請到,內存溢出本函數結束*/
return ;
}
inputs("enter no:",info->no,11); /*調用inputs輸入學號*/
inputs("enter name:",info->name,15); /*調用inputs輸入姓名*/
printf("please input %d score \n",N); /*提示輸入成績*/
s1=0;
for(i=0;i<N;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0); /*成績數據驗證*/
s1=s1+info->score[i]; /*求總分*/
}
info->sum=s1; /*保存總分*/
info->average=(float)s1/N; /*求均分*/
info->order=0; /*名次初始值為0*/
info->next=NULL; /*將新記錄後繼指針賦值為空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"ab"))==NULL) /*向二進制文件尾增加數據方式打開文件*/
{
printf("can not open file\n"); /*顯示不能打開*/
exit(1); /*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*寫文件操作*/
{
printf("-----file write error!-----\n");
return; /*返回*/
}
printf("-----append sucess!!----\n");
fclose(fp); /*關閉文件*/
}
/*文件拷貝*/
void ()
{
char outfile[10],infile[10];
FILE *sfp,*tfp; /*源和目標文件指針*/
STUDENT *p=NULL; /*移動指針*/
clrscr(); /*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile); /*輸入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL) /*二進制讀方式打開源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示輸入目標文件名*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*二進制寫方式打開目標文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp)) /*讀文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*塊讀*/
fwrite(p,sizeof(STUDENT),1,tfp); /*塊寫*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示成功拷貝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0; /*保存名次*/
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(t->sum<p->sum&&p!=NULL) /*作總分比較*/
{
q=p; /*待排序點值小,則新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值大,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/

}
}
p=h; /*已排好序的頭指針賦給p,准備填寫名次*/
while(p!=NULL) /*當p不為空時,進行下列操作*/
{
i++; /*結點序號*/
p->order=i; /*將名次賦值*/
p=p->next; /*指針後移*/
}
printf("sort sucess!!!\n"); /*排序成功*/
return h; /*返回頭指針*/
}
/*計算總分和均值*/
void computer(STUDENT *h)
{
STUDENT *p; /*定義移動指針*/
int i=0; /*保存記錄條數初值為0*/
long s=0; /*總分初值為0*/
float average=0; /*均分初值為0*/
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時處理*/
{
s+=p->sum; /*累加總分*/
i++; /*統計記錄條數*/
p=p->next; /*指針後移*/
}
average=(float)s/i;/* 求均分,均分為浮點數,總分為整數,所以做類型轉換*/
printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(strcmp(t->no,p->no)>0&&p!=NULL) /*作學號比較*/
{
q=p; /*待排序點值大,應往後插,所以新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值小,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
printf("index sucess!!!\n"); /*索引排序成功*/
return h; /*返回頭指針*/
}
/*分類合計*/
void total(STUDENT *h)
{
STUDENT *p,*q; /*定義臨時指針變數*/
char sno[9],qno[9],*ptr; /*保存班級號的*/
float s1,ave; /*保存總分和均分*/
int i; /*保存班級人數*/
clrscr(); /*清屏*/
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時做下面的處理*/
{
memcpy(sno,p->no,8); /*從學號中取出班級號*/
sno[8]='\0'; /*做字元串結束標記*/
q=p->next; /*將指針指向待比較的記錄*/
s1=p->sum; /*當前班級的總分初值為該班級的第一條記錄總分*/
ave=p->average; /*當前班級的均分初值為該班級的第一條記錄均分*/
i=1; /*統計當前班級人數*/
while(q!=NULL) /*內循環開始*/
{
memcpy(qno,q->no,8); /*讀取班級號*/
qno[8]='\0'; /*做字元串結束標記*/
if(strcmp(qno,sno)==0) /*比較班級號*/
{
s1+=q->sum; /*累加總分*/
ave+=q->average; /*累加均分*/
i++; /*累加班級人數*/
q=q->next; /*指針指向下一條記錄*/
}
else
break; /*不是一個班級的結束本次內循環*/
}
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break; /*如果當前指針為空,外循環結束,程序結束*/
else
p=q; /*否則,將當前記錄作為新的班級的第一條記錄開始新的比較*/
}
printf("---------------------------------------------\n");
}

⑦ C語言課程設計之公司員工信息管理系統怎麼做

1、員工信息管理系統是事業單位科學、全面、高效進行人事管理的系統,參考大量中國人力資源管理理論,根植於國內管理的實際情況,實用而科學。內容包括機構的建立和維護,人員信息的錄入和輸出,工資的調整和發放以及各類報表的繪制和輸出等功能。在操作上集輸入、維護、查詢、統計、列印、輸出等處理為一體,簡便靈活,自動化功能強大。


2、常式:

#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<string.h>
#defineN100
structemployee
{
intnum;
charname[10];
charsex;
intage;
charxueli[30];
intwage;
charaddr[30];
longinttel;
}em[100];/*定義一個結構體*/
voidmenu();
voidinput();
voidsave(int);
voiddisplay();
voiddel();
voidadd();
voidsearch();
voidsearch_num();
voidsearch_xueli();
voidsearch_tel();
voidmodify();/*定義各函數*/
voidmenu()/*菜單函數*/
{
printf("☆☆☆計算機科學與技術學系☆☆☆ ");
printf(" ");
printf("∮08802班關麗霞∮ ");
printf(" ");
printf("******************職工信息管理**************** ");
printf("1.錄入職工信息");
printf("2.瀏覽職工信息 ");
printf("3.查詢職工信息");
printf("4.刪除職工信息 ");
printf("5.添加職工信息");
printf("6.修改職工信息 ");
printf("7.退出 ");
printf("********************謝謝使用****************** ");
printf(" ");
printf(" ");

}
voidmain()
{
menu();/*調用菜單函數*/
intn,flag;
chara;
do
{
printf("請選擇你需要操作的步驟(1--7): ");
scanf("%d",&n);
if(n>=1&&n<=7)
{
flag=1;
break;
}
else
{
flag=0;
printf("您輸入有誤,請重新選擇!");
}
}
while(flag==0);
while(flag==1)
{
switch(n)
{
case1:printf("◆◆◆輸入職工信息◆◆◆ ");printf(" ");input();break;
case2:printf("◆◆◆瀏覽職工信息◆◆◆ ");printf(" ");display();break;
case3:printf("◆◆◆按職工號查詢職工信息◆◆◆ ");printf(" ");search();break;
case4:printf("◆◆◆刪除職工信息◆◆◆ ");printf(" ");del();break;
case5:printf("◆◆◆添加職工信息◆◆◆ ");printf(" ");add();break;
case6:printf("◆◆◆修改職工信息◆◆◆ ");printf(" ");modify();break;
case7:exit(0);break;
default:break;
}
getchar();
printf(" ");
printf("是否繼續進行(yorn): ");
scanf("%c",&a);
if(a=='y')
{
flag=1;
system("cls");/*清屏*/
menu();/*調用菜單函數*/
printf("請再次選擇你需要操作的步驟(1--6): ");
scanf("%d",&n);
printf(" ");
}

else
exit(0);
}

}
voidinput()/*錄入函數*/
{
inti,m;
printf("請輸入需要創建信息的職工人數(1--100): ");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("職工號:");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d",em[i].num);
printf(" ");
printf("請輸入姓名:");
scanf("%s",em[i].name);
getchar();
printf("請輸入性別(f--女m--男):");
scanf("%c",&em[i].sex);
printf("請輸入年齡:");
scanf("%d",&em[i].age);
printf("請輸入學歷:");
scanf("%s",em[i].xueli);
printf("請輸入工資:");
scanf("%d",&em[i].wage);
printf("請輸入住址:");
scanf("%s",em[i].addr);
printf("請輸入電話:");
scanf("%d",&em[i].tel);
printf(" ");

}
printf(" 創建完畢! ");
save(m);
}
voidsave(intm)/*保存文件函數*/
{
inti;
FILE*fp;
if((fp=fopen("employee_list","wb"))==NULL)/*創建文件並判斷是否能打開*/
{
printf("cannotopenfile ");
exit(0);
}
for(i=0;i<m;i++)/*將內存中職工的信息輸出到磁碟文件中去*/
if(fwrite(&em[i],sizeof(structemployee),1,fp)!=1)
printf("filewriteerror ");
fclose(fp);
}
intload()/*導入函數*/
{
FILE*fp;
inti=0;
if((fp=fopen("employee_list","rb"))==NULL)
{
printf("cannotopenfile ");
exit(0);
}
else
{
do
{
fread(&em[i],sizeof(structemployee),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
voiddisplay()/*瀏覽函數*/
{
inti;
intm=load();
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
for(i=0;i<m;i++)/*m為輸入部分的職工人數*/
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
}
voiddel()/*刪除函數*/
{

intm=load();
inti,j,n,t,flag;
charname[20];
printf(" 原來的職工信息: ");
display();/*調用瀏覽函數*/
printf(" ");
printf("請輸入要刪除的職工的姓名: ");
scanf("%s",name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(em[i].name,name)==0)
{
printf(" 已找到此人,原始記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
printf(" 確實要刪除此人信息請按1,不刪除請按0 ");
scanf("%d",&n);
if(n==1)/*如果刪除,則其他的信息都往上移一行*/
{
for(j=i;j<m-1;j++)
{
strcpy(em[j].name,em[j+1].name);
em[j].num=em[j+1].num;
em[j].sex=em[j+1].sex;
em[j].age=em[j+1].age;
strcpy(em[j].xueli,em[j+1].xueli);
em[j].wage=em[j+1].wage;
strcpy(em[j].addr,em[j+1].addr);
em[j].tel=em[j+1].tel;
}
flag=0;
}
}
}
if(!flag)
m=m-1;
else
printf(" 對不起,查無此人! ");
printf(" 瀏覽刪除後的所有職工信息: ");
save(m);/*調用保存函數*/
display();/*調用瀏覽函數*/
printf(" 繼續刪除請按1,不再刪除請按0 ");
scanf("%d",&t);
switch(t)
{
case1:del();break;
case0:break;
default:break;
}
}
voidadd()/*添加函數*/
{
FILE*fp;
intn;
intcount=0;
inti;
intm=load();
printf(" 原來的職工信息: ");
display();/*調用瀏覽函數*/
printf(" ");
fp=fopen("emploee_list","a");
printf("請輸入想增加的職工數: ");
scanf("%d",&n);
for(i=m;i<(m+n);i++)
{
printf(" 請輸入新增加職工的信息: ");
printf("請輸入職工號:");
srand((int)time(0));
em[i].num=rand()%10000+20000000;
if(em[i].num!=em[i-1].num)
printf("%8d",em[i].num);
printf(" ");
printf("請輸入姓名:");
scanf("%s",em[i].name);
getchar();
printf("請輸入性別(f--女m--男):");
scanf("%c",&em[i].sex);
printf("請輸入年齡:");
scanf("%d",&em[i].age);
printf("請輸入學歷:");
scanf("%s",em[i].xueli);
printf("請輸入工資:");
scanf("%d",&em[i].wage);
printf("請輸入住址:");
scanf("%s",em[i].addr);
printf("請輸入電話:");
scanf("%d",&em[i].tel);
printf(" ");
count=count+1;
printf("已增加的人數: ");
printf("%d ",count);
}
printf(" 添加完畢! ");
m=m+count;
printf(" 瀏覽增加後的所有職工信息: ");
printf(" ");
save(m);
display();
fclose(fp);
}
voidsearch()/*查詢函數*/
{
intt,flag;
do
{
printf(" 按職工號查詢請按1;按學歷查詢請按2;按電話號碼查詢請按3,進入主函數按4 ");
scanf("%d",&t);
if(t>=1&&t<=4)
{
flag=1;
break;
}
else
{
flag=0;
printf("您輸入有誤,請重新選擇!");
}
}
while(flag==0);
while(flag==1)
{
switch(t)
{
case1:printf("按職工號查詢 ");search_num();break;
case2:printf("按學歷查詢 ");search_xueli();break;
case3:printf("按電話號碼查詢 ");search_tel();break;
case4:main();break;
default:break;
}

}
}
voidsearch_num()
{
intnum;
inti,t;
intm=load();
printf("請輸入要查找的職工號(20001111---20009999): ");
scanf("%d",&num);
for(i=0;i<m;i++)
if(num==em[i].num)
{
printf(" 已找到此人,其記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf(" 對不起,查無此人 ");
printf(" ");
printf("返回查詢函數請按1,繼續查詢職工號請按2 ");
scanf("%d",&t);
switch(t)
{
case1:search();break;
case2:break;
default:break;
}
}
voidsearch_xueli()
{
charxueli[30];
inti,t;
intm=load();
printf("請輸入要查找的學歷: ");
scanf("%s",xueli);
for(i=0;i<m;i++)
if(strcmp(em[i].xueli,xueli)==0)
{
printf(" 已找到,其記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);

}
if(i==m)
printf(" 對不起,查無此人 ");
printf(" ");
printf("返回查詢函數請按1,繼續查詢學歷請按2 ");
scanf("%d",&t);
switch(t)
{
case1:search();break;
case2:break;
default:break;
}

}
voidsearch_tel()
{
longinttel;
inti,t;
intm=load();
printf("請輸入要查找的電話號碼: ");
scanf("%ld",&tel);
for(i=0;i<m;i++)
if(tel==em[i].tel)
{
printf(" 已找到此人,其記錄為: ");
printf(" 職工號 姓名 性別 年齡 學歷 工資 住址 電話 ");
printf(" %d %s %c %d %s %d %s %ld ",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].addr,em[i].tel);
break;
}
if(i==m)
printf(" 對不起,查無此人 ");
printf(" ");
printf("返回查詢函數請按1,繼續查詢電話號碼請按2 ");
scanf("%d",&t);
switch(t)
{
case1:search();break;
case2:break;
default:break;
}

}

⑧ 如何用C語言做通訊錄

剽竊代碼即可。。


已經按照你的要求做了一個,VC6上運行確認了:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstructPersonalInfo
{
charname[50];
charaddress[30];
chartelno[30];
charpostcode[30];
structPersonalInfo*next;
}INFO;
INFO*head;
voidInitiate();
voidMenu();
voidCreate();//的功能是:創建新的通訊錄。
voidAdd();//在通訊錄的末尾,寫入新的信息,並返回選單
voidFind();//查找記錄
voidAlter();//修改記錄如果未找到要修改的人,則提示通訊錄中沒有此人的信息,並返回選單。
voidDelete();//刪除某人的信息,如果未找到要刪的人,提示通訊錄中沒有此人的信息,並返回選單。
voidList();//的功能是:顯示通訊錄中的所有記錄。
//初始化
voidInitiate()
{
if((head=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
head->next=NULL;
}
//顯示菜單
voidMenu()
{
printf("**************歡迎使用通訊錄系統**************");
printf(" ");
printf(" ");
printf("1.創建通訊錄。 ");
printf("2.插入信息。 ");
printf("3.查詢記錄 ");
printf("4.修改記錄 ");
printf("5.刪除記錄! ");
printf("6.顯示所有記錄 ");
printf("0.退出通訊錄 ");
printf("請輸入0~6 ");
}
//創建通訊錄
voidCreate()
{
INFO*p1[100],*p2;
intm,i;
printf("請輸入創建個數:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1[i]=(INFO*)malloc(sizeof(INFO));
printf("請輸入第%d條信息! ",i);
printf("姓名: ");
scanf("%s",&p1[i]->name);
printf("地址: ");
scanf("%s",&p1[i]->address);
printf("電話: ");
scanf("%s",&p1[i]->telno);
printf("郵編: ");
scanf("%s",&p1[i]->postcode);
p1[i]->next=NULL;
if(head->next==NULL)
head->next=p1[i];
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);//找到結點尾
p2->next=p1[i];
}
}
printf("信息已添加! ");
return;//保存到鏈表
}
//添加通訊錄信息
voidAdd()
{
INFO*p,*q;
if((q=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
printf("請輸入要添加的信息! ");
printf("姓名: ");//添加信息
scanf("%s",&q->name);
printf("性別: ");
scanf("%s",q->address);
printf("電話: ");
scanf("%s",q->telno);
printf("城市: ");
scanf("%s",q->postcode);
for(p=head;p->next!=NULL;p=p->next);
p->next=q;
q->next=NULL;
printf("此信息已添加!");
return;
}
//查找通訊錄信息
voidFind()
{
INFO*p;
charname[50];
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要查找的姓名: ");
scanf("%s",&name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
{
printf("姓名 地址 郵編 電話 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
elseif(p->next==NULL)
printf("無此信息! ");
}
}
//修改通訊錄信息
voidAlter()
{
charname[50];//先查找後刪除
INFO*p,*p1;
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要修改的姓名: ");
scanf("%s",name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
break;
elseif(p->next==NULL)
{
printf("無此信息! ");
return;
}
}
p1=(INFO*)malloc(sizeof(INFO));
printf("姓名: ");//添加信息
scanf("%s",p1->name);
strcpy(p->name,p1->name);
printf("性別: ");
scanf("%s",p1->address);
strcpy(p->address,p1->address);
printf("電話: ");
scanf("%s",p1->telno);
strcpy(p->telno,p1->telno);
printf("城市: ");
scanf("%s",p1->postcode);
strcpy(p->postcode,p1->postcode);
printf("此信息已修改! ");
//顯示修改的信息
printf("姓名 地址 郵編 電話 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
free(p1);
}
//刪除通訊錄信息
voidDelete()
{
charname[50];//先查找後刪除
INFO*p=head->next,*p1=head->next,*p2;
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要刪除的姓名: ");
scanf("%s",name);
while((strcmp(p->name,name)!=0)&&p->next!=NULL)
{
p1=p;
p=p->next;
}
if(strcmp(name,p->name)==0)//輸出刪除信息
{
if(p==head->next&&p->next!=NULL)
head->next=p->next;
elseif(p==head->next&&p->next==NULL)
{
head->next=p->next;
printf("信息已刪除,先此通訊錄為空!! ");
return;
}
else
p1->next=p->next;
}
else
{
printf("此信息不存在!!! ");
return;
}
printf("此信息已刪除!");
printf("姓名 地址 郵編 電話 ");
for(p2=head->next;p2!=NULL;p2=p2->next)
printf("%s %s %s %s ",p2->name,p2->address,p2->postcode,p2->telno);
}
//顯示所有記錄
voidList()
{
INFO*p;
if(head->next==NULL)
{
printf("此通訊錄中無記錄! ");
return;
}
printf("姓名 地址 郵編 電話 ");
for(p=head->next;p!=NULL;p=p->next)
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
voidmain()
{
intchoice;
charyes_no;

system("colora");
Initiate();
do
{
Menu();
printf("請選擇0-6的數字 ");
scanf("%d",&choice);
printf(" ");
switch(choice)
{
case1:Create();
break;
case2:Add();
break;
case3:Find();
break;
case4:Alter();
break;
case5:Delete();
break;
case6:List();
break;
case0:
printf("************感謝您的使用************ ");
exit(0);
break;
default:
printf("輸入有誤!請重新輸入 ");
break;
}
printf("是否繼續YorN? ");
do
{
scanf("%c",&yes_no);
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='Y'||yes_no=='y');
}

⑨ 用C語言製作通訊錄

這看你是怎樣定義的了。如果你50個同學是用結構體來定義的話就比較容易實現。用二維數組的話,就比較麻煩。
查找名字可以用strcmp(輸入的名字,編好的名字)==0如果相等,就等於查找到你輸入的名字了。記錄它的下標,再輸出它的聯系方式。
下面是一個比較完整的通訊錄代碼,你參考一下啦。(看到專家兩個字,我真沒資格去回答你了,汗)

/*10.3.2源程序*/
/******頭文件(.h)***********/
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*標准庫函數*/
#include "string.h"/*字元串函數*/
#include "ctype.h" /*字元操作函數*/
#define M 50 /*定義常數表示記錄數*/
typedef struct /*定義數據結構*/
{
char name[20]; /*姓名*/
char units[30]; /*單位*/
char tele[10]; /*電話*/
}ADDRESS;
/******以下是函數原型*******/
int enter(ADDRESS t[]); /*輸入記錄*/
void list(ADDRESS t[],int n); /*顯示記錄*/
void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/
int delete(ADDRESS t[],int n); /*刪除記錄*/
int add(ADDRESS t[],int n); /*插入記錄*/
void save(ADDRESS t[],int n); /*記錄保存為文件*/
int load(ADDRESS t[]); /*從文件中讀記錄*/
void display(ADDRESS t[]); /*按序號查找顯示記錄*/
void sort(ADDRESS t[],int n); /*按姓名排序*/
void qseek(ADDRESS t[],int n); /*快速查找記錄*/
void (); /*文件復制*/
void print(ADDRESS temp); /*顯示單條記錄*/
int find(ADDRESS t[],int n,char *s) ; /*查找函數*/
int menu_select(); /*主菜單函數*/
/******主函數開始*******/
main()
{
int i;
ADDRESS adr[M]; /*定義結構體數組*/
int length; /*保存記錄長度*/
clrscr(); /*清屏*/
for(;;)/*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{
case 0:length=enter(adr);break;/*輸入記錄*/
case 1:list(adr,length);break; /*顯示全部記錄*/
case 2:search(adr,length);break; /*查找記錄*/
case 3:length=delete(adr,length);break; /*刪除記錄*/
case 4:length=add(adr,length); break; /*插入記錄*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*讀文件*/
case 7:display(adr);break; /*按序號顯示記錄*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找記錄*/
case 10:();break; /*復制文件*/
case 11:exit(0); /*如返回值為11則程序結束*/
}
}
}
/*菜單函數,函數返回值為整數,代表所選的菜單項*/
menu_select()
{
char s[80];
int c;
gotoxy(1,25);/*將游標定為在第25行,第1列*/
printf("press any key enter menu......\n");/*提示壓任意鍵繼續*/
getch(); /*讀入任意字元*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf(" 0. Enter record\n");
printf(" 1. List the file\n");
printf(" 2. Search record on name\n");
printf(" 3. Delete a record\n");
printf(" 4. add record \n");
printf(" 5. Save the file\n");
printf(" 6. Load the file\n");
printf(" 7. display record on order\n");
printf(" 8. sort to make new file\n");
printf(" 9. Quick seek record\n");
printf(" 10. the file to new file\n");
printf(" 11. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0~11):"); /*提示輸入選項*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整型數*/
}while(c<0||c>11); /*選擇項不在0~11之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
/***輸入記錄,形參為結構體數組,函數值返回類型為整型表示記錄長度*/
int enter(ADDRESS t[])
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*輸入記錄數*/
printf("please input record \n"); /*提示輸入記錄*/
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*輸入記錄*/
printf("----------------------------------------------\n");
}
return n; /*返回記錄條數*/
}
/*顯示記錄,參數為記錄數組和記錄條數*/
void list(ADDRESS t[],int n)
{
int i;
clrscr();
printf("\n\n*******************ADDRESS******************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);
if((i+1)%10==0) /*判斷輸出是否達到10條記錄*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*壓任意鍵繼續*/
}
printf("************************end*******************\n");
}
/*查找記錄*/
void search(ADDRESS t[],int n)
{
char s[20]; /*保存待查找姓名字元串*/
int i; /*保存查找到結點的序號*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*輸入待查找姓名*/
i=find(t,n,s); /*調用find函數,得到一個整數*/
if(i>n-1) /*如果整數i值大於n-1,說明沒找到*/
printf("not found\n");
else
print(t[i]); /*找到,調用顯示函數顯示記錄*/
}
/*顯示指定的一條記錄*/
void print(ADDRESS temp)
{
clrscr();
printf("\n\n********************************************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);
printf("**********************end***********************\n");
}
/*查找函數,參數為記錄數組和記錄條數以及姓名s */
int find(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*從第一條記錄開始,直到最後一條*/
{
if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/
return i; /*相等,則返回該記錄的下標號,程序提前結結束*/
}
return i; /*返回i值*/
}
/*刪除函數,參數為記錄數組和記錄條數*/
int delete(ADDRESS t[],int n)
{
char s[20]; /*要刪除記錄的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",s);/*輸入姓名*/
i=find(t,n,s); /*調用find函數*/
if(i>n-1) /*如果i>n-1超過了數組的長度*/
printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/
else
{
print(t[i]); /*調用輸出函數顯示該條記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認是否要刪除*/
scanf("%d",&ch); /*輸入一個整數0或1*/
if(ch==1) /*如果確認刪除整數為1*/
{
for(j=i+1;j<n;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); /*將後一條記錄的電話拷貝到前一條*/
}
n--; /*記錄數減1*/
}
}
return n; /*返回記錄數*/
}
/*插入記錄函數,參數為結構體數組和記錄數*/
int add(ADDRESS t[],int n)/*插入函數,參數為結構體數組和記錄數*/
{
ADDRESS temp; /*新插入記錄信息*/
int i,j;
char s[20]; /*確定插入在哪個記錄之前*/
printf("please input record\n");
printf("************************************************\n");
printf("name unit telephone\n");
printf("--------------------------------------------------\n");
scanf("%s%s%s",temp.name,temp.units,temp.tele); /*輸入插入信息*/
printf("------------------------------------------------\n");
printf("please input locate name \n");
scanf("%s",s); /*輸入插入位置的姓名*/
i=find(t,n,s); /*調用find,確定插入位置*/
for(j=n-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*/
return n; /*返回記錄數*/
}
/*保存函數,參數為結構體數組和記錄數*/
void save(ADDRESS t[],int n)
{
int i;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,並判斷打開是否正常*/
{
printf("can not open file\n");/*沒打開*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*輸出提示信息*/
fprintf(fp,"%d",n); /*將記錄數寫入文件*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式寫入記錄*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
}
fclose(fp);/*關閉文件*/
printf("****save success***\n"); /*顯示保存成功*/
}
/*讀入函數,參數為結構體數組*/
int load(ADDRESS t[])
{
int i,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/
{
printf("can not open file\n"); /*不能打開*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*讀入記錄數*/
for(i=0;i<n;i++)
fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式讀入記錄*/
fclose(fp); /*關閉文件*/
printf("You have success read data from file!!!\n"); /*顯示保存成功*/
return n; /*返回記錄數*/
}
/*按序號顯示記錄函數*/
void display(ADDRESS t[])
{
int id,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/
{
printf("can not open file\n"); /*不能打開文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*顯示信息*/
scanf("%d",&id); /*輸入序號*/
fscanf(fp,"%d",&n); /*從文件讀入記錄數*/
if(id>=0&&id<n) /*判斷序號是否在記錄范圍內*/
{
fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動文件指針到該記錄位置*/
print(t[id]); /*調用輸出函數顯示該記錄*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/
fclose(fp); /*關閉文件*/
}
/*排序函數,參數為結構體數組和記錄數*/
void sort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*臨時變數做交換數據用*/
for(i=0;i<n;i++)
{
flag=0; /*設標志判斷是否發生過交換*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/
{
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("sort sucess!!!\n"); /*顯示排序成功*/
}
/*快速查找,參數為結構體數組和記錄數*/
void qseek(ADDRESS t[],int n)
{
char s[20];
int l,r,m;
printf("\nPlease sort before qseek!\n"); /*提示確認在查找之前,記錄是否已排序*/
printf("please enter name for qseek\n"); /*提示輸入*/
scanf("%s",s); /*輸入待查找的姓名*/
l=0;r=n-1; /*設置左邊界與右邊界的初值*/
while(l<=r) /*當左邊界<=右邊界時*/
{
m=(l+r)/2; /*計算中間位置*/
if(strcmp(t[m].name,s)==0) /*與中間結點姓名欄位做比較判是否相等*/
{
print(t[m]); /*如果相等,則調用print函數顯示記錄信息*/
return ; /*返回*/
}
if(strcmp(t[m].name,s)<0) /*如果中間結點小*/
l=m+1; /*修改左邊界*/
else
r=m-1; /*否則,中間結點大,修改右邊界*/
}
if(l>r) /*如果左邊界大於右邊界時*/
printf("not found\n"); /*顯示沒找到*/
}
/*復制文件*/
void ()
{
char outfile[20]; /*目標文件名*/
int i,n;
ADDRESS temp[M]; /*定義臨時變數*/
FILE *sfp,*tfp; /*定義指向文件的指針*/
clrscr();/*清屏*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*讀出文件記錄數*/
fprintf(tfp,"%d",n);/*寫入目標文件數*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,
temp[i].tele); /*讀入記錄*/
fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,
temp[i].units,temp[i].tele); /*寫入記錄*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示復製成功*/
}

好好參考一下啦,可能有些函數你還沒學到,找找書就行了。