當前位置:編程學習大全網 - 編程語言 - C語言程序設計:通訊錄程序設計

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);

}

  • 上一篇:如何更新Sql Server裏的CLR程序集
  • 下一篇:hl系統線割錐度,比如我的工件厚系30,但我要留6MM刀口,並且要上小下大,刀口在上工件面,參數怎樣輸?
  • copyright 2024編程學習大全網