A. 高分求一簡單的c語言編程的通訊錄
你這玩意可不簡單,費了我不少功夫。TC3.0下編譯通過。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define MaxLenthOfAddBook 50 //通訊錄允許的最大條數
void DeleteRecord(void);
void AddItem(void);
void SearchRecord(void);
void ModifiyItem(void);
void PrintItemByIndex(unsigned int iIndex);
void DisplayAllItems(void);
typedef struct strAddBook
{
unsigned char Flag; //記錄狀態信息
unsigned char Name[20];
unsigned char Add[20];
unsigned char ZipCode[6]; //郵編
unsigned char Email[20];
unsigned char qq[12];
unsigned char MobilePhone[20];
}defAddBook;
typedef enum strItem{
Index,
Name,
Add,
ZipCode,
Email,
qq,
MobilePhone,
}defItem; //通訊錄項目
unsigned int FindItem(defItem iType);
defAddBook MyAddBook[MaxLenthOfAddBook]; //定義通訊錄數組
unsigned char RunFlag;
///
///延時
void delay(unsigned long iValue)
{
unsigned int i;
while(iValue--)
{
for(i=0;i<30000;i++);
}
}
void main(void)
{
unsigned char ch;
RunFlag = 1;
while (RunFlag)
{
//getchar();
clrscr(); //清屏
printf("Address book\r\n");
printf("\
Select a task:\r\n\
[F] Display all record\r\n\
[A] Add a record to list\r\n\
[S] Search in list\r\n\
[D] Del a record form list\r\n\
[M] Modify a item\r\n\
[E] Exit\r\n");
printf("Please enter your choice:");
ch = 0;
ch = getche(); //取出輸入的值
if('a' <= ch && ch <= 'z') ch -= 32; //大小寫轉換
switch (ch)
{
case 'F':
DisplayAllItems();
break;
case 'A':
AddItem();
break;
case 'S':
SearchRecord();
break;
case 'D':
DeleteRecord();
break;
case 'M':
ModifiyItem();
break;
case 'E':
RunFlag = 0;
goto QuitLable;
break;
default:
clrscr();
printf("Unrecognized choice\r\n");
break;
}
}
QuitLable:
clrscr();
printf("Exit Address Book.");
getchar();
}
///
///顯示所有記錄
void DisplayAllItems(void)
{
unsigned int i;
clrscr();
for(i=0;i<MaxLenthOfAddBook;i++)
{
PrintItemByIndex(i);
//printf("\r\n");
}
printf("This is the end\r\n");
delay(100);
getch();
}
///
///顯示記錄
void PrintItemByIndex(unsigned int iIndex)
{
unsigned int i;
if(iIndex >= MaxLenthOfAddBook){ //索引不能超出數組最大長度
printf("Index is out of range.\r\n");
getchar();
return;
}
if(MyAddBook[iIndex].Flag > 0){ //如果不為空
printf("Index : %d\r\n",iIndex); //列印序號
printf("Name : %s\r\n",MyAddBook[iIndex].Name); //名字
printf("ADDRESS : %s\r\n",MyAddBook[iIndex].Add); //....
printf("ZipCode : %s\r\n",MyAddBook[iIndex].ZipCode);
printf("Email : %s\r\n",MyAddBook[iIndex].Email);
printf("QQ Number : %s\r\n",MyAddBook[iIndex].qq);
printf("Mobile Phone : %s\r\n",MyAddBook[iIndex].MobilePhone);
}
//printf("Print over\r\n");
}
///
///增加記錄
void AddItem(void)
{
int i, EmptyFlag = 0;
clrscr();
printf("Add a item to list.\r\n");
for (i = 0;i < MaxLenthOfAddBook;i++) //尋找空的記錄
{
if (MyAddBook[i].Flag > 0) continue; //如不為空則不執行以下幾句
MyAddBook[i].Flag = 1; //標注該記錄被使用
EmptyFlag = 1;
printf("Item %d is empty.\r\n", i);
break; //退出循環
}
if (EmptyFlag == 0)
{
printf("The list is full.\r\nPress enter to continue..."); //記錄滿了
getchar();
return ;
}
printf("Please enter name:\r\n");
scanf("%s", MyAddBook[i].Name);
printf("Please enter Add:\r\n");
scanf("%s", MyAddBook[i].Add);
printf("Please enter ZipCode:\r\n");
scanf("%s", MyAddBook[i].ZipCode);
printf("Please enter Email:\r\n");
scanf("%s", MyAddBook[i].Email);
printf("Please enter qq:\r\n");
scanf("%s", MyAddBook[i].qq);
printf("Please enter MobilePhone:\r\n");
scanf("%s", MyAddBook[i].MobilePhone);
printf("Finished,please press enter.\r\n");
PrintItemByIndex(i);
delay(100);
getch();
}
///
///查詢
void SearchRecord(void)
{
unsigned char choice;
unsigned int Temp;
defItem ch;
clrscr(); //清屏
printf("Search item.\r\n");
printf("\
[1] By Index\r\n\
[2] By Name\r\n\
[3] By Address\r\n\
[4] By ZipCode\r\n\
[5] By Email\r\n\
[6] By QQ Number\r\n\
[7] By Mobile Phone Number\r\n");
printf("Please select a choice:");
choice = getch();
clrscr();
if (choice < '1' || choice > '7')
{ //如果選擇超出范圍則
printf("Error choice.\r\nPress Enter to continue...");
getchar(); //等待按鍵
return ; //退出函數
}
ch = choice - '1';
switch (ch) //根據選擇操作
{
case Index:
printf("Please input the index:");
scanf("%d",&Temp);
PrintItemByIndex(Temp);
delay(100);
getch();
break;
case Name:
case Add:
case ZipCode:
case Email:
case qq:
case MobilePhone:
Temp = FindItem(ch);
if(Temp < MaxLenthOfAddBook){
PrintItemByIndex(Temp); //如果返回值正確就列印
}else{
printf("No such record.\r\n");
}
delay(100);
getch();
break;
default: break;
}
}
///
///查找項,返回序列號
unsigned int FindItem(defItem iType)
{
unsigned int i;
int rtn; //返回值
unsigned char strTemp[20]; //存儲字元串的臨時變數
printf("Please input the parameter:");
scanf("%s",strTemp); //輸入需要查找的參數
for(i = 0;i<MaxLenthOfAddBook;i++)
{
if(MyAddBook[i].Flag == 0) continue; //如果記錄為空則不執行下列語句
switch(iType)
{
case Name:
rtn = strcmp(strTemp,MyAddBook[i].Name); //比較兩個字元串
break;
case Add:
rtn = strcmp(strTemp,MyAddBook[i].Add); //比較兩個字元串
break;
case ZipCode:
rtn = strcmp(strTemp,MyAddBook[i].ZipCode); //比較兩個字元串
break;
case Email:
rtn = strcmp(strTemp,MyAddBook[i].Email); //比較兩個字元串
break;
case qq:
rtn = strcmp(strTemp,MyAddBook[i].qq); //比較兩個字元串
break;
case MobilePhone:
rtn = strcmp(strTemp,MyAddBook[i].MobilePhone); //比較兩個字元串
break;
}
if(rtn == 0) return i; //字串相同則返回i
}
return MaxLenthOfAddBook; //找不到返回最大值
}
///
///刪除
void DeleteRecord(void)
{
int iIndex = 0;
clrscr();
printf("Delete a record form address book.\r\n");
printf("Please input the index:");
scanf("%d",&iIndex);
clrscr();
if(iIndex < MaxLenthOfAddBook){
MyAddBook[iIndex].Flag = 0; //標識為空
printf("Delete OK.\r\n");
}else{
printf("Index is out of range.\r\n");
}
printf("Press anykey to continue...");
getch();
}
///
///修改記錄
void ModifiyItem(void)
{
unsigned int index,choice;
clrscr();
printf("Please input the index:");
scanf("%d",&index); //輸入序號
if(index < MaxLenthOfAddBook){
printf("Modifiy item.\r\n");
printf("\
[1] Modifiy Name\r\n\
[2] Modifiy Address\r\n\
[3] Modifiy ZipCode\r\n\
[4] Modifiy Email\r\n\
[5] Modifiy QQ Number\r\n\
[6] Modifiy Mobile Phone Number\r\n");
choice = getch();
clrscr();
if (choice < '1' || choice > '6')
{ //如果選擇超出范圍則
printf("Error choice.\r\nPress Enter to continue...");
delay(100);
getch(); //等待按鍵
return ; //退出函數
}
switch (choice - '0') //根據選擇操作
{
case 1:
printf("Please enter name:\r\n");
scanf("%s", MyAddBook[index].Name);
break;
case 2:
printf("Please enter Add:\r\n");
scanf("%s", MyAddBook[index].Add);
break;
case 3:
printf("Please enter ZipCode:\r\n");
scanf("%s", MyAddBook[index].ZipCode);
break;
case 4:
printf("Please enter Email:\r\n");
scanf("%s", MyAddBook[index].Email);
break;
case 5:
printf("Please enter qq:\r\n");
scanf("%s", MyAddBook[index].qq);
break;
case 6:
printf("Please enter MobilePhone:\r\n");
scanf("%s", MyAddBook[index].MobilePhone);
break;
default: break;
}
}else{
printf("Index is out of range.\r\n");
delay(100);
getchar();
return;
}
printf("Finished,please press enter.\r\n");
delay(100);
getch();
}
B. 通訊錄管理 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;
}
}
C. c語言手機通訊錄程序啊~小弟初來,分數不高,望各位高手給指點指點吧!!!
這也要求貌似太多了
我這剛做了個簡單的一點的通訊錄
希望對LZ又點幫助
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
typedef struct//表示數據類型,可類比int
{
char name[15];
char city[15];
char telenub[15];//固定電話號碼
char email[20];
char qq[13];
char youbian[10];//表示郵編
}DataType;
FILE *fp;
typedef struct node{//結類型定義
DataType data;//節點數據域
struct node * next;//節點指針域
}ListNode;
typedef ListNode * LinkList;
LinkList head;
ListNode *p;
//函數說明
void myprint();
LinkList CreateList();
void InsertNode(LinkList head,ListNode *p);
ListNode * ListFind(LinkList head);
void DelNode(LinkList head);
void PrintList(LinkList head);
//用尾插法建立通訊錄鏈表函數
LinkList CreateList()
{
LinkList head=(ListNode *)malloc(sizeof(ListNode));//申請頭結點 分配存儲空間
ListNode *p,*rear;
int flag=0;//結束標志置0
rear=head;//尾指針初始指向頭結點
if((fp=fopen("record.txt","w+"))==NULL) //打開文件,並判斷打開是否正常
{
printf("打開文件失敗!!\n");//沒打開
exit(0); //退出
}
fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n","姓名","城市","電話","郵箱","QQ","郵編" );
while(flag==0)
{
p=(ListNode *)malloc(sizeof(ListNode));//申請新結點
printf(" 姓名 地址(城市) 電話 郵箱 QQ 郵編 \n");
scanf("%s%s%s%s%s%s",p->data.name ,p->data.city ,p->data.telenub ,p->data.email,p->data.qq,p->data.youbian );
fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n",p->data.name ,p->data.city ,p->data.telenub ,p->data.email,p->data.qq,p->data.youbian );
// fclose(fp);
rear->next=p;//新結點連接到尾結點之後
rear=p;//尾指針指向新結點
printf("是否結束建表?(1/0):");
scanf("%d",&flag);//讀入一個標志數據
}
rear->next=NULL;//終端結點指針域置空
return head;//返回鏈表頭指針
}
//在通訊錄鏈表head中插入節點
void InsertNode(LinkList head,ListNode *p)
{
ListNode *p1,*p2;
p1=head;
p2=p1->next;
while(p2!=NULL&&strcmp(p2->data.name,p->data.name)<0)
{
p1=p2;//p1指向剛訪問過的結點
p2=p2->next;//p2指向表的下一個結點
}
p1->next=p;//插入p所指向的的結點
p->next=p2;//連接表中剩餘部分
}
//有序通訊錄鏈上的查找
ListNode *ListFind(LinkList head)
{
ListNode *p;
char telenub[13];
char name[15];
int temp;
printf("請選擇按姓名或電話查詢(1/2):\n");
p=head->next;//假定通訊錄表帶頭結點
scanf("%d",&temp);
if(temp==1)
{
printf("請輸入要查找者的姓名");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!=0)
p=p->next;
if(p==NULL||strcmp(p->data.name,name)>0)
p=NULL;//沒有查到要查找的姓名
}
else
if(temp==2){
printf("請輸入要查找的電話號碼:\n");
scanf("%s",telenub);
while(p&&strcmp(p->data.telenub,telenub)<0)
p=p->next;
if(p==NULL||strcmp(p->data.telenub,telenub)>0)
p=NULL;
}
return p;
}
//通訊錄鏈表上結點的刪除
//先調用查詢函數,查詢到要刪除的結點,刪除結點即可。
void DelNode(LinkList head)
{
char temp;
ListNode *p,*q;
p=ListFind(head);//調用查找函數
if(p==NULL)
{
printf("沒有查到要刪除的通訊者!\n");
return;
}
printf("真的要刪除改結點嗎?(y/n):\n");
scanf("%s",&temp);
if(temp=='y'||temp=='Y')
{
q=head;
while(q!=NULL && q->next!=p)//此循環的含義是將q的指針域賦給p
q=q->next;
q->next=p->next;//刪除結點 這里為什麼不能用p=p->next
free(p);//釋放被刪除的節點空間
printf("通訊者已被刪除!\n");
}
}
//通訊錄鏈表的輸出函數
void PrintList(LinkList head)
{
ListNode *p;
p=head->next;//因為鏈表帶頭結點,使p指向鏈表開始結點
printf(" 姓名 地址 電話 郵 箱 QQ 郵編 \n");
printf("-------------------------------------------------------------------------\n");
/*if((fp=fopen("d://record.txt","r+"))==NULL) //打開文件,並判斷打開是否正常
{
printf("打開文件失敗!!\n");//沒打開
exit(0); //退出
}
while(feof(fp)==0)
{
fscanf(fp,"%15s%20s%15s%30s%10s%10s",p->data.telenub, p->data.name ,p->data.city ,p->data.email,p->data.qq,p->data.youbian);
printf("%15s,%20s,%15s,%30s,%10s,%10s",p->data.telenub, p->data.name ,p->data.city ,p->data.email,p->data.qq,p->data.youbian);
}
fclose(fp);*/
while(p!=NULL)
{
printf("%10s%10s%13s%15s%13s%12s\n",p->data.name,p->data.city,p->data.telenub,p->data.email,p->data.qq,p->data.youbian);
printf("-------------------------------------------------------------------------\n");
p=p->next;//後移一個結點
}
}
void myprint() /* 顯示菜單界面 */
{
printf("\n\n");
printf(" |--------------------------------|\n");
printf(" |★☆歡迎進入通訊錄管路系統☆★ |\n");
printf(" |--------------------------------|\n");
printf(" | 請輸入選項編號(0-5): |\n");
printf(" |--------------------------------|\n");
printf(" | 1--創建通訊錄鏈表 |\n");
printf(" | 2--好友結點的添加 |\n");
printf(" | 3--好友結點的查詢 |\n");
printf(" | 4--好友結點的刪除 |——————\n");
printf(" | 5--輸出通訊錄鏈表 |08信工一班 |\n");
printf(" | 0--退出 | 譚鵬 |\n");
printf(" |--------------------------------|——————\n");
printf("\n\n\n");
}
void main()
{
char choose,yes_no;
do
{
myprint(); /* 顯示主菜單 */
printf("\t");
choose=getch();
switch(choose)
{
case '1':printf("********************************************************************\n");
printf("\t\t* 通 訊 錄 鏈 表 的 建 立 *\n ");
printf("\t********************************************************************\n");
head=CreateList(); break; /* 創建 */
case '2':
printf("****************************************************************\n");
printf("\t\t* 通 訊 錄 鏈 表 的 添 加 *\n ");
printf("\t ****************************************************************\n");
printf("\t姓名 地址 電話 郵 箱 QQ 郵編 \n");
printf("\t*******************************************************************\n");
p=(ListNode *)malloc(sizeof(ListNode));//申請新結點
scanf("%s%s%s%s%s%s",p->data.name ,p->data.city ,p->data.telenub ,p->data.email,p->data.qq,p->data.youbian );
if((fp=fopen("tianjia.txt","w+"))==NULL) //打開文件,並判斷打開是否正常
{
printf("打開文件失敗!!\n");//沒打開
exit(0); //退出
}
fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n","姓名","城市","電話","郵箱","QQ","郵編" );
InsertNode(head,p);
fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n",p->data.name ,p->data.city ,p->data.telenub ,p->data.email,p->data.qq,p->data.youbian );
fclose(fp);
printf("\t\t\t結點添加完畢!");
break; /* 添加 */
case '3':
printf("************************************************************\n");
printf("\t* 好 友 信 息 的 查 詢 *\n ");
p=ListFind(head);
if(p!=NULL){
printf(" 姓名 地址 電話 郵 箱 QQ 郵編 \n");
printf("*************************************************************************\n");
printf("%10s%10s%13s%15s%13s%10s\n",p->data.name,p->data.city,p->data.telenub,p->data.email,p->data.qq,p->data.youbian);
printf("*************************************************************************\n");
}
else
printf("沒有查到要查詢的好友!");
break; /* 查詢 */
case '4':
printf("************************************************************\n");
printf("* 好 友 信 息 的 刪 除 *\n ");
printf("************************************************************\n");
DelNode(head);//刪除結點
break; /* 刪除 */
case '5':
printf("************************************************************\n");
printf("\t\t* 顯 示 所 有 好 友 信 息 *\n ");
printf("\t ************************************************************\n");
PrintList(head); break; /* 顯示 */
case '0': break;
default:printf("\n %c為非法選項!\n",choose);
}
if(choose=='0')
break;
printf("\n 按Y鍵回主目錄:\n\n\n");
do
{
yes_no=getch();
}while(yes_no!='Y'&&yes_no!='y');
}while(yes_no!='Y'||yes_no!='y');
}
D. c語言通訊錄
關於這道題的基本思路,我可以告訴你:
通訊錄一般由如下幾個信息組成:姓名、性別、通訊地址、電話號碼、郵編等組成。
如果想編寫一個20個人的通訊錄程序,那麼就可以定義一個大小為 20 的結構數組。C 語言詳細代碼如下:
#include <stdio.h>
#define ADDRESS_LEN 100 /* 通訊地址長度宏定義,可以根據需要進行修改 */
#define PHONENUM_LEN 20 /* 電話號碼長度宏定義,可以自行修改 */
#define NUMBER 20 /* 20 個人的通訊錄,可以自行修改 */
struct address /* 定義一個通訊錄的結構數組 */
{
char name[20] ; /* 姓名 */
char sex[5] ; /* 性別 */
char address[ADDRESS_LEN] ; /* 通訊地址 */
char telepone_num[PHONENUM_LEN] ; /* 電話號碼 */
char zip[10 ] ; /* 郵政編碼 */
} ;
void main( )
{
int i = 0 ;
struct address my_address[NUMBER] ;
for( i = 0 ; i < NUMBER ; i ++ )
{
gets(my_address[i].name) ;
gets(my_address[i].sex) ;
gets(my_address[i].address);
gets(my_address[i].telephone_num);
gets(my_address[i].zip);
}
for( i = 0 ; i < NUMBER ; i ++ )
printf("%s\t%s\t%s\t%s\t%s\n", my_address[i].name,my_address[i].sex,my_address[i].address,my_address[i].telephone_num,my_address[i].zip);
}
你可以將該程序輸入到電腦中,上機編譯、鏈接、並運行試一試。
E. c語言編程通訊錄管理系統
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define header1 "|---------------------電話簿-----------------------|\n"
#define header2 "| num | name | phonenum | address |\n"
#define header3 "|-------|----------|---------------|---------------|\n"
#define end "|----------------------結束------------------------|"
#define N 100
typedef struct tele
{
int num;
char name[10];
char phonenum[15];
char address[20];
}
telebook;
void menu()
{
system("cls");
system("color 1F");
printf("\n\n\n"); /*輸出主菜單*/
printf("\t\t|* **** 歡迎進入電話薄管理系統! **** *|\n");
printf("\t\t|********************menu********************|\n");
printf("\t\t| |\n");
printf("\t\t| 1 增加 2 讀取 |\n");
printf("\t\t| |\n");
printf("\t\t| 3 查找 4 修改 |\n");
printf("\t\t| |\n");
printf("\t\t| 5 刪除 6 排序 |\n");
printf("\t\t| |\n");
printf("\t\t| 0 退出 |\n");
printf("\t\t|********************************************|\n");
}
void printheader() /*輸出菜單頭*/
{
printf(header1);
printf(header2);
printf(header3);
}
int add(telebook temp[])
{
int i;int m=0;
FILE *fp;
system("cls");
if((fp=fopen("D:\\rex.txt","ab+"))==NULL)
{
printf("打開文件有誤!");
exit(0);
}
printf("每次輸入一百個人的信息!\n");
printf("如果輸入0推出輸入!\n");
for(i=m;i<(100+m);i++)
{
printf("num:");
scanf("%d",&temp[i].num);
if(temp[i].num==0)
break;
printf("name:");
scanf("%s",&temp[i].name);
printf("phonenum:");
scanf("%s",&temp[i].phonenum);
printf("address:");
scanf("%s",&temp[i].address);
fwrite(&temp[i],sizeof(struct tele),1,fp);
}
m+=100;
fclose(fp);
system("cls");
return 0;
}
int read(telebook temp[])
{
int count,i;
FILE *fp;
system("cls");
if((fp=fopen("D:\\rex.txt","ab+"))==NULL)
{
printf("打開文件有誤!");
exit(0);
}
printheader();
for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*讀取文件內信息的個數。*/
if(count==0)
printf("\n\n\n\t\t文件內沒有信息!\n\n\n");
for(i=0;i<count;i++) /*讀取文件內的信息*/
printf("|%-7d|%-10s|%-15s|%-15s|\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].address);
printf(end);
fclose(fp);
return 0;
}
int find1(telebook temp[]) /*電話號碼查詢*/
{
int i,count,t=0 ;char n[20];
FILE *fp;
system("cls");
read(temp);
printf("\n");
if((fp=fopen("D:\\rex.txt","ab+"))==NULL)
{
printf("打開文件有誤!");
exit(0);
}
printf("輸入要查找的號碼:");
scanf("%s",n);
printf("\n\n");
printheader();
getchar();
for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*讀取文件內信息的個數。*/
for(i=0;i<count;i++)
{
if(strcmp(temp[i].phonenum,n)==0)
{
t=1;
printf("|%-7d|%-10s|%-15s|%-15s|\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].address);
/*輸出查詢到的信息*/
}
}
if(t==0)
{
printf("\a\n\n\t\t沒有要查找的信息..........!\n\n\n");
printf(end);
return 0;
}
printf(end);
fclose(fp);
return 0;
}
int find2(telebook temp[]) /*姓名查詢*/
{
int i,count ,t=0;
char a[20];
FILE *fp;
system("cls");
read(temp);
printf("\n");
if((fp=fopen("D:\\rex.txt","ab+"))==NULL)
{
printf("打開文件有誤!");
exit(0);
}
printf("輸入要查找的名字:");
scanf("%s",a);
getchar();
printf("\n\n");
printheader();
for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*讀取文件內信息的個數。*/
for(i=0;i<count;i++)
{
if(strcmp(temp[i].name,a)==0)
{
t=1;
printf("|%-7d|%-10s|%-15s|%-15s|\n",temp[i].num,temp[i].name,temp[i].phonenum,temp[i].address);
/*輸出查詢到的信息*/
}
}
if(t==0)
{
printf("\a\n\n\t\t沒有要查找的信息..............!\n\n\n");
printf(end);
return 0;
}
printf(end);
fclose(fp);
return 0;
}
void find()
{
int n;
telebook message1[20];
system("cls");
system("color 4F");
printf("\n");
while(1)
{ /*輸出查找函數主菜單*/
printf("\n\n\n\n");
printf(" |-------查找功能------|\n");
printf(" | |\n");
printf(" | 1 按電話號碼查找 |\n");
printf(" | |\n");
printf(" | 2 按姓名查找 |\n");
printf(" | |\n");
printf(" | 0 退出 |\n");
printf(" | |\n");
printf(" |---------結束--------|\n");
printf("輸入您的查找方式:");
scanf("%d",&n);
switch(n)
{
case 1:find1(message1);break;
case 2:find2(message1);break;
case 0:return;break;
}
getchar();
system("cls");
}
}
int change(telebook temp[])
{
int i,count,t=0;
FILE *fp;
struct tele ne[10];
system("cls");
read(temp);
printf("\n");
printf("按序號修改\n");
if((fp=fopen("D:\\rex.txt","ab+"))==NULL)
{
printf("打開文件有誤!");
exit(0);
}
printf("輸入新內容:\n");
printf("num:");
scanf("%d",&ne[0].num);
printf("name:");
scanf("%s",&ne[0].name);
printf("phonenum:");
scanf("%s",&ne[0].phonenum);
printf("address:");
scanf("%s",&ne[0].address);
for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*讀取文件內信息的個數。*/
fclose(fp);
for(i=0;i<count;i++) /*查找與新信息相同的信息*/
{
if(temp[i].num==ne[0].num) /*用新信息替換*/
{
t=1;
temp[i].num=ne[0].num;
strcpy(temp[i].name,ne[0].name);
strcpy(temp[i].phonenum,ne[0].phonenum);
strcpy(temp[i].address,ne[0].address);
getchar();
printf("\n\n\t\t\t修改成功..........!");
}
}
if(t==0)
{
getchar();
printf("\n\n\t\t\t沒有要修改的信息.........!");
return 0;
}
fp=fopen("D:\\rex.txt","wb+");
for(i=0;i<count;i++)
fwrite(&temp[i],sizeof(struct tele),1,fp);
fclose(fp);
return 0;
}
int del(telebook temp[])
{
int i,j,count,t=0;char name1[20];
FILE *fp;
system("cls");
read(temp);
printf("\n");
if((fp=fopen("D:\\rex.txt","ab+"))==NULL)
{
printf("打開文件有誤!");
exit(0);
}
printf("輸入要刪除的人名:");
scanf("%s",name1);
for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*讀取文件內信息的個數。*/
fclose(fp);
for(i=0;i<count;i++) /*查找要刪除的信息*/
{
if(strcmp(temp[i].name,name1)==0)
{
for(j=i;j<count;j++)
{ /*刪除找到的信息*/
t=1;
temp[j].num=temp[j+1].num;
strcpy(temp[j].name,temp[j+1].name);
strcpy(temp[j].phonenum,temp[j+1].phonenum);
strcpy(temp[j].address,temp[j+1].address);
}
count--;
printf("\n\n\n\t\t\t刪除成功..................!");
}
}
if(t==0)
{
getchar();
printf("\a\n\n\n\t\t\t沒有要刪除的信息..................!");
return 0;
}
getchar();
fp=fopen("D:\\rex.txt","wb+");
for(i=0;i<count;i++)
fwrite(&temp[i],sizeof(struct tele),1,fp);
fclose(fp);
return 0;
}
int paixu(telebook temp[])
{
int i,j,count;
telebook tmp;
FILE *fp;
system("cls");
read(temp);
printf("\n");
fp=fopen("D:\\rex.txt","ab+");
for(count=0;fread(&temp[count],sizeof(struct tele),1,fp)==1;count++);/*讀取文件內信息的個數。*/
fclose(fp);
for(i=0;i<count-1;i++) /*對文件內的信息的序號進行排序*/
{
for(j=count-2;j>=i;j--)
if(temp[j+1].num<temp[j].num)
{
tmp=temp[j+1];
temp[j+1]=temp[j];
temp[j]=tmp;
}
}
fp=fopen("D:\\rex.txt","wb+");
for(i=0;i<count;i++)
fwrite(&temp[i],sizeof(struct tele),1,fp);
fclose(fp);
read(temp);
return 0;
}
void main()
{
telebook message[N];
int n;
while(1)
{
menu();
printf("輸入您的選擇:");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:add(message);break;
case 2:read(message);break;
case 3:find();break;
case 4:change(message);break;
case 5:del(message);break;
case 6:paixu(message);break;
case 0:exit(0);break;
}
getchar();
}
printf("press enter continue...............");
}
F. c語言 通訊錄管理系統
閑來沒事,給樓主編了個。
現在cpp文件相同目錄下創建一個名為 txl文件夾,用來存儲信息。
裡面再創建5個txt文件,名分別為family,workmate,classmate,friends,other
然後運行試下吧
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
char name[20];
char phone[15];
char email[40];
char work[40];
char addr[40];
// int fenlei;
}msg;
msg input_msg()
{
msg temp;
printf("name:");
scanf("%s",temp.name);
printf("phone:");
scanf("%s",temp.phone);
printf("email:");
scanf("%s",temp.email);
printf("work:");
scanf("%s",temp.work);
printf("addr:");
scanf("%s",temp.addr);
// while(!(temp.fenlei>=1||temp.fenlei<=5))
// {
//printf("fenlei(input a int,1-family,2-workmate,3-classmate,4-friends,5-other):");
// scanf("%d",&temp.fenlei);
//}
return temp;
}
void add()
{
FILE *write;
msg cur=input_msg();
int fenlei;
printf("輸入分類(這個人放哪個分類)(input a int,1-family,2-workmate,3-classmate,4-friends,5-other):");
scanf("%d",&fenlei);
switch(fenlei)
{
case 1:write=fopen("txl/family.txt","a");break;
case 2:write=fopen("txl/workmate.txt","a");break;
case 3:write=fopen("txl/classmate.txt","a");break;
case 4:write=fopen("txl/friends.txt","a");break;
case 5:write=fopen("txl/other.txt","a");break;
}
if(!write)
printf("file open failed\n");
fprintf(write,"%20s%15s%40s%40s%40s",cur.name,cur.phone,cur.email,cur.work,cur.addr);
fclose(write);
}
int delet()
{
char name[20];
int fenlei;
msg cur;
msg* all;
int file_len=0;
int check;
FILE* read;
FILE* write;
int i,j;
printf("輸入分類(這個人在哪個分類):");
scanf("%d",&fenlei);
printf("input the name you want to delete:");
scanf("%s",name);
switch(fenlei)
{
case 1:read=fopen("txl/family.txt","r");break;
case 2:read=fopen("txl/workmate.txt","r");break;
case 3:read=fopen("txl/classmate.txt","r");break;
case 4:read=fopen("txl/friends.txt","r");break;
case 5:read=fopen("txl/other.txt","r");break;
}
if(!read)
printf("file open failed\n");
while(!feof(read))
{
fscanf(read,"%s%s%s%s%s",cur.name,cur.phone,cur.email,cur.work,cur.addr);
file_len++;
}
check=file_len;
//file_len--;
all=(msg*)malloc(file_len*sizeof(msg));
rewind(read);
for(i=0;i<file_len;i++)
{
fscanf(read,"%s%s%s%s%s",all[i].name,all[i].phone,all[i].email,all[i].work,all[i].addr);
}
fclose(read);
for(i=0;i<file_len;i++)
{
if(!strcmp(all[i].name,name))
{
for(j=i;j<file_len-1;j++)
all[j]=all[j+1];
file_len--;
break;
}
}
if(check==file_len)
{
printf("this man is not exit\n");
return 0;
}
switch(fenlei)
{
case 1:write=fopen("txl/family.txt","w");break;
case 2:write=fopen("txl/workmate.txt","w");break;
case 3:write=fopen("txl/classmate.txt","w");break;
case 4:write=fopen("txl/friends.txt","w");break;
case 5:write=fopen("txl/other.txt","w");break;
}
if(!write)
printf("file open failed2\n");
for(i=0;i<file_len;i++)
{
fprintf(write,"%20s%15s%40s%40s%40s",all[i].name,all[i].phone,all[i].email,all[i].work,all[i].addr);
}
fclose(write);
return 1;
}
int change()
{
char name[20];
int fenlei;
msg cur;
msg* all;
int file_len=0;
int check=0;
FILE* read;
FILE* write;
int i,j;
printf("輸入分類(這個人在哪個分類):");
scanf("%d",&fenlei);
printf("input the name you want to change:");
scanf("%s",name);
switch(fenlei)
{
case 1:read=fopen("txl/family.txt","r");break;
case 2:read=fopen("txl/workmate.txt","r");break;
case 3:read=fopen("txl/classmate.txt","r");break;
case 4:read=fopen("txl/friends.txt","r");break;
case 5:read=fopen("txl/other.txt","r");break;
}
if(!read)
printf("file open failed\n");
while(!feof(read))
{
fscanf(read,"%s%s%s%s%s",cur.name,cur.phone,cur.email,cur.work,cur.addr);
file_len++;
}
all=(msg*)malloc(file_len*sizeof(msg));
rewind(read);
for(i=0;i<file_len;i++)
{
fscanf(read,"%s%s%s%s%s",all[i].name,all[i].phone,all[i].email,all[i].work,all[i].addr);
}
fclose(read);
for(i=0;i<file_len;i++)
{
if(!strcmp(all[i].name,name))
{
check=1;
break;
}
}
if(check==0)
{
printf("the man is not exit\n");
return 0;
}
cur=input_msg();
all[i]=cur;
switch(fenlei)
{
case 1:write=fopen("txl/family.txt","w");break;
case 2:write=fopen("txl/workmate.txt","w");break;
case 3:write=fopen("txl/classmate.txt","w");break;
case 4:write=fopen("txl/friends.txt","w");break;
case 5:write=fopen("txl/other.txt","w");break;
}
if(!write)
printf("file open failed2\n");
for(i=0;i<file_len;i++)
{
fprintf(write,"%20s%15s%40s%40s%40s",all[i].name,all[i].phone,all[i].email,all[i].work,all[i].addr);
}
fclose(write);
return 1;
}
void lookfor()
{
char name[20];
int fenlei;
msg cur;
msg* all;
int file_len=0;
int check=0;
FILE* read;
//FILE* write;
int i;
int way;
printf("輸入分類(這個人在哪個分類):");
scanf("%d",&fenlei);
//printf("input the name you want to change:");
//scanf("%s",name);
switch(fenlei)
{
case 1:read=fopen("txl/family.txt","r");break;
case 2:read=fopen("txl/workmate.txt","r");break;
case 3:read=fopen("txl/classmate.txt","r");break;
case 4:read=fopen("txl/friends.txt","r");break;
case 5:read=fopen("txl/other.txt","r");break;
}
if(!read)
printf("file open failed\n");
while(!feof(read))
{
fscanf(read,"%s%s%s%s%s",cur.name,cur.phone,cur.email,cur.work,cur.addr);
file_len++;
}
all=(msg*)malloc(file_len*sizeof(msg));
rewind(read);
for(i=0;i<file_len;i++)
{
fscanf(read,"%s%s%s%s%s",all[i].name,all[i].phone,all[i].email,all[i].work,all[i].addr);
}
fclose(read);
printf("輸入查詢方式(1,name 2,phone):");
scanf("%d",&way);
if(way==1)
{
printf("輸入你想查詢的姓名:");
scanf("%s",name);
for(i=0;i<file_len;i++)
{
if(!strcmp(all[i].name,name))
{
check=1;
break;
}
}
if(check==0)
{
printf("the man is not exit\n");
}
else
{
printf("------------------found-----------------------\n");
printf("%s\n",all[i].name);
printf("%s\n",all[i].phone);
printf("%s\n",all[i].email);
printf("%s\n",all[i].work);
printf("%s\n",all[i].addr);
printf("-----------------------------------------------\n");
}
}
if(way==2)
{
printf("輸入你想查詢的電話號碼:");
scanf("%s",name);
for(i=0;i<file_len;i++)
{
if(!strcmp(all[i].phone,name))
{
check=1;
break;
}
}
if(check==0)
{
printf("the man is not exit\n");
}
else
{
printf("------------------found-----------------------\n");
printf("%s\n",all[i].name);
printf("%s\n",all[i].phone);
printf("%s\n",all[i].email);
printf("%s\n",all[i].work);
printf("%s\n",all[i].addr);
printf("-----------------------------------------------\n");
}
}
}
void main()
{
int cmd;
printf("輸入命令:\n1,增加記錄\n2,刪除記錄\n3,修改記錄\n4,查詢記錄\n0,退出\n");
scanf("%d",&cmd);
while(cmd!=0)
{
switch(cmd)
{
case 1:add();break;
case 2:delet();break;
case 3:change();break;
case 4:lookfor();break;
default:printf("bad cammond\n");break;
}
printf("輸入命令:\n1,增加記錄\n2,刪除記錄\n3,修改記錄\n4,查詢記錄\n0,退出\n");
scanf("%d",&cmd);
}
}
G. c語言手機通訊錄 重謝
#include<stdio.h> struct Class { char *cname; //名字 char *cphon; //電話號碼 char *cuphon; //單位電話 char *cmphon; //手機號碼 char *cqq; //qq號碼 char *cbday; //生日日期 struct Class *node; //其餘的自己可以加***** }; typedef struct Class Students; //通訊錄結構 typedef Students *Ps; Ps TcraseClsSt(Ps lina); // 催的操作Ps CraseClsSt(Ps lina,char *cname,char *cphon,char *cuphon,char *cmphon,char *cqq,char *cbday); //存過程void OutSmary(Ps lina); //輸出結果 void main() { Ps lina=NULL; lina=TcraseClsSt(lina); if(lina!=NULL) //如果lina為NULL是錯誤內存非配失敗 { OutSmary(lina); } else printf("Error"); getch(); } Ps TcraseClsSt(Ps lina) { int Cmd=0; char cname[100]; char cphon[100]; char cuphon[100]; char cmphon[100]; char cqq[100]; char cbday[100]; do { printf("Please enter a name:"); scanf("%s",cname); //提示並輸入數據 printf("Enter the phone number:"); scanf("%s",cphon); printf("Enter the unit telephone:"); scanf("%s",cuphon); printf("Enter phone number:"); scanf("%s",cmphon); printf("Enter the number qq:"); scanf("%s",cqq); printf("Enter your date of birth:"); scanf("%s",cbday); lina=CraseClsSt(lina,cname,cphon,cuphon,cmphon,cqq,cbday);//把數據存入鏈表 printf("Enter -1 to exit any exit:"); scanf("%d",&Cmd); } while(Cmd!=-1&&lina!=NULL); return lina; } Ps CraseClsSt(Ps lina,char *cname,char *cphon,char *cuphon,char *cmphon,char *cqq,char *cbday) //鏈表存入函數 { Ps merory; Ps linb; merory=(Ps)malloc(sizeof(Students)); if(!merory) { return NULL; //merory為NULL是返回零 NULL } merory->node=NULL; strcpy(merory->cname,cname); //用字元創拷貝函數 段錯午 在turbo c 編譯器可以通過 gcc可以用別的方法處理 strcpy(merory->cphon,cphon); strcpy(merory->cuphon,cuphon); strcpy(merory->cmphon,cmphon); strcpy(merory->cqq,cqq); strcpy(merory->cbday,cbday); if(lina==NULL) return merory; linb=lina; while(linb->node!=NULL) linb=linb->node; linb->node=merory; return lina; } void OutSmary(Ps lina) //鏈表輸出函數 { while(lina!=NULL) { printf("name:%s,Phone:%s,Unit Number:%s,Phone number:%s,qq No:%s,Date of Birth:%s\n", lina->cname,lina->cphon,lina->cuphon,lina->cmphon,lina->cqq,lina->cbday); lina=lina->node; } }
H. 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;
}
I. C語言程序設計:通訊錄程序設計
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "stdio.h"
#include "dos.h"
FILE *fp;
int i; //i是全局變數 可代替length
struct address
{ char postnum[10];
char a[40]; //家庭地址
};
struct birthday
{ int year;
int month;
int day;
};
struct ffriend
{ int num; //序號
char name[20];
char sex;
char telephone[13];
struct birthday birthday;
struct address address;
}
friends[50];
void Load()
{
int j;
long k;
fp=fopen("friend.txt","a+"); //打開文件friend.txt
if(fp!=NULL)
{
for(i=1;i<50;i++)
{
j=fgetc(fp);
if(j==EOF) //判斷是否到了文件尾
return;
k=i-1;
fseek(fp,k*sizeof(struct ffriend),SEEK_SET);
fread(&friends[i],sizeof(struct ffriend),1,fp); //從文件中讀取一條記錄
}
}
else
{
fp=fopen("friend.txt","w");
i=1;
}
}
void Show(int j)
{
// friends[j].num=i;
printf("\n\n\t編號-Nnumber: %3d",friends[j].num);
printf("\n\t姓名-Name:%-20s",friends[j].name);
printf("\n\t性別-Sex:%c",friends[j].sex);
printf("\n\t聯系電話-Telephone:%-13s",friends[j].telephone);
printf("\n\t出生日期-Birthday:%4d-%2d-%3d",friends[j].birthday.year,friends[j].birthday.month,friends[j].birthday.day);
printf("\n\t郵編-Postnum:%-10s",friends[j].address.postnum);
printf("\n\t通信地址-address:%-40s",friends[j].address.a);
}
void Append(int j)
{
fflush(stdin); //區內清除文件緩沖區,文件以寫方式打開時將緩沖容寫入文件
//stdin是一個標准FILE*(文件型指針)指向通常是用鍵盤的輸入的輸入流
friends[j].num=j;
printf("\n\t\t\t序號-Number:%d",j);
printf("\n\t\t\t姓名-Name:");
scanf("%s",friends[j].name);
fflush(stdin); //為什麼沒有fflush(stdin); 的效果會自動跳過呢?
printf("\t\t\t性別-Sex(m/w):"); //為什麼輸入漢字男女也會自動跳過聯系電話呢
scanf("%c",&friends[j].sex);
printf("\t\t\t聯系電話-telephone:");
scanf("%s",friends[j].telephone);
printf("\t出生日期-birthday");
printf("\n\t\t\t年份-year:");
scanf("%d",&friends[j].birthday.year);
printf("\t\t\t月份-month:");
scanf("%d",&friends[j].birthday.month);
printf("\t\t\t日-day:");
scanf("%d",&friends[j].birthday.day);
printf("\t\t\t郵編-Postnumber:");
scanf("%s",friends[j].address.postnum);
printf("\t\t\t通信地址-Address:");
scanf("%s",friends[j].address.a);
getchar();
}
void Delete()
{
int k;
printf("\n\tDelete 序號-Number:");
scanf("%d",&k);
if(k<=i)
{
for(int j=k;j<i+1;j++) /*插入位置後的元素順序後移*/
{
strcpy(friends[j].name,friends[j+1].name); /*交換元素內容*/
friends[j].sex=friends[j+1].sex;
strcpy(friends[j].telephone,friends[j+1].telephone);
friends[j].birthday.year=friends[j+1].birthday.year;
friends[j].birthday.month=friends[j+1].birthday.month;
friends[j].birthday.day=friends[j+1].birthday.day;
strcpy(friends[j].address.postnum,friends[j+1].address.postnum);
strcpy(friends[j].address.a,friends[j+1].address.a);
}
i--;
}
else
{
printf("輸入的序號太大!");
}
}
void Modify(int j)
{
Append(j);
}
void Save()
{
int j;
fp=fopen("friend.txt","w");
for(j=1;j<=i;j++)
{
fwrite(&friends[j],sizeof(struct ffriend),1,fp);
}
fclose(fp);
}
void main()
{
int j;
char grade;
char searchname[10];
Load();
i--;
do
{
printf("\t\t\t\t簡易通訊錄\n\n");
printf("功能選擇(Function choose)\n");
printf("\1A.讀取(Read)\n");
printf("\2B.增添(Append)\n");
printf("\6C.插入(Insert)\n");
printf("\5D.刪除(Delete)\n");
printf("\5E.查詢(Search)\n");
printf("\6F.修改(Modify)\n");
printf("\2G.保存(Save)\n");
printf("\1H.退出(Quit)\n");
printf("請選擇(Choice)\n注:輸入A~H的大寫字母\n");
scanf("%c",&grade);
switch(grade)
//加個大寫和小寫 都可以啊
{
case 'A': j=1; //顯示功能
while(getchar()!=0x1b&&j<=i) //增添按Esc鍵退出
{
Show(j++);
printf("\n請按回車鍵繼續!");
}
if(j-1<1)
{
printf("\n\t空文檔,無任何記錄-Empty Note\n");
printf("\n請按回車鍵繼續!");
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'B': //增加功能
while(i<=50) //增加按ESC鍵退出的功能
{
i++;
Append(i);
printf("\t是否繼續增加?y/n");
//修改 加上else if 其他就跳出或強制列印出出錯
char a=getchar();
if(a=='n'||a=='N')
break;
}
if(i==51)
printf("\n\t文檔已滿,無法增加記錄-note full");
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
getchar();
break;
case 'C':
int k;
printf("\n\t輸入要插入的位置:");
scanf("%d",&k);
j=i+1;
friends[j].num=j;
for(j;j>k;j--) //插入功能
{
strcpy(friends[j].name,friends[j-1].name); //數據後移
friends[j].sex=friends[j-1].sex;
strcpy(friends[j].telephone,friends[j-1].telephone);
friends[j].birthday.year=friends[j-1].birthday.year;
friends[j].birthday.month=friends[j-1].birthday.month;
friends[j].birthday.day=friends[j-1].birthday.day;
strcpy(friends[j].address.postnum,friends[j-1].address.postnum);
strcpy(friends[j].address.a,friends[j-1].address.a);
}
Append(k);
i++;
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'D': //刪除功能 //增添隨意刪除多條記錄的功能
Delete();
if(i<1)
printf("\n沒有記錄-No records\n");
printf("\n請按回車鍵繼續!");
getchar();
getchar();
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'E': //查詢功能
printf("\n\t請輸入要查詢記錄的相關姓名:"); //增添查詢按列號的
scanf("%s",searchname);
for(j=1;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0) //比較字元串
{
Show(j);
break;
}
}
if(i<1)
{
printf("\n 沒有您所查詢的記錄-No records");
printf("\n 請按回車鍵繼續!");
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
getchar();
break;
case 'F': //修改功能 / /增添按序列號查詢
printf("\n\t請輸入要修改記錄的相關姓名:");
gets(searchname);
scanf("%s",searchname);
for(j=1;j<=i;j++)
{
if(strcmp(searchname,friends[j].name)==0) //比較字元串
{
Modify(j);
// getchar(); //加個輸出確定修改嗎
}
}
if(i<1) //修改功能
{ printf("\n 沒有您所要修改的記錄-No records");
printf("\n 請按回車鍵繼續!");
getchar();
getchar();
}
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'G':
Save(); //存檔功能
getchar();
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
break;
case 'H': //退出功能
char x;
printf("是否保存?yes/no\n");
scanf("%s",&x);
//getchar();
// getchar();
if(x=='y')
{
Save();
exit(0);
}
else
exit(0);
default:
printf("\n\t輸入有誤,請輸入正確的序列號!");
printf("\n請按回車鍵繼續!");
getchar();
printf("\n\t\t\t\t\t\t\t此次操作結束");
printf("\n\t------------------------------------------------------------\t\t\n");
}
}while(1);
}