當前位置:編程學習大全網 - 遊戲軟體 - 通訊錄設計

通訊錄設計

/*用C語言編寫具有數據插入、修改、刪除、顯示和查詢功能的電話薄管理程序

1、數據包括:人名、工作單位、電話號碼和E-mail地址。

2、可對記錄中的姓名和電話號碼進行修改。

3、可增加或刪除記錄。

4、可顯示所有保存的記錄。

5、可按人名或電話號碼進行查詢。

另:采用結構體數組和文件系統實現。結構體包括人名、工作單位、電話號碼和E-mail

絕對原創,2010年7月12日晚剛寫完測試通過的,純C語言! */

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define szSTR 64

#define fileDB "c:\\contact.txt"

struct CONTACT {

char name[szSTR];/*姓名*/

char unit[szSTR];/*工作單位*/

char tele[szSTR];/*電話*/

char mail[szSTR];/*mail*/

};

typedef struct CONTACT CON;

#define BNAME 1

#define BUNIT 2

#define BTELE 4

#define BMAIL 8

#define BFULL 0xFF

int OPER[5] = {BFULL, BNAME, BUNIT, BTELE, BMAIL};

void input(CON * s, int mask)

{

if(mask & BNAME) { printf("請輸入學生姓名:"); scanf("%s", s->name); }

if(mask & BUNIT) { printf("請輸入工作單位:"); scanf("%s", s->unit); }

if(mask & BTELE) { printf("請輸入聯系電話:"); scanf("%s", s->tele); }

if(mask & BMAIL) { printf("請輸入電子郵件:"); scanf("%s", s->mail); }

}/*end input*/

void show (int id, CON * s)

{

if(!s) return ;

if(id)

printf("%d\t%s\t%s\t%s\t%s\n",

id, s->name , s->unit , s->tele , s->mail );

else

printf("姓名%s工作單位%s電話%s電郵%s\n",

s->name , s->unit , s->tele , s->mail );

/*end if*/

}/*end show*/

void regist(void)

{

CON s; FILE * f = 0;

input(&s, BFULL);

f = fopen(fileDB, "ab");

fwrite(&s,sizeof(s),1,f);

fclose(f);

printf("資料已保存!\n");

}/*end regist*/

int browse(char * key, fpos_t * p, CON * s)

{

FILE * f =0; int i = 0, r = 0; CON t;

char * a = 0, * b = 0; fpos_t q;

if(!s) return 0;

f = fopen(fileDB, "rb");

if(!f) {

printf("數據庫暫無記錄\n");

return 0;

}/*end if*/

printf("編號\t姓名\t單位\t電話\t電郵\n");

printf("------------------------------------------------\n");

while(!feof(f)) {

fgetpos(f, &q);

r = fread(&t, sizeof(t), 1, f);

if(r<1)break;

if(t.name[0]==0) continue;

if(key) {

a = strstr(t.name , key);

b = strstr(t.tele , key);

if(a == 0 && b == 0) continue;

}/*end if*/

if(p) *p = q;

if(s) memcpy(s, &t, sizeof(t));

i++;

show(i, &t);

}/*end while*/

fclose(f);

printf("------------------------------------------------\n");

return i;

}/*end browse*/

fpos_t query(CON * s)

{

char key[szSTR]=""; fpos_t p = 0; int r = 0;

printf("請輸入姓名或者電話號碼:");

scanf("%s", key);

r = browse(key, &p, s);

return r?p:-1;

}/*end query*/

void clear(void)

{

FILE * f = 0; CON s;

fpos_t p = query(&s);

if(p<0) return;

f = fopen(fileDB, "rb+");

fsetpos(f, &p);

memset(&s, 0, sizeof(s));

fwrite(&s, sizeof(s),1, f);

fclose(f);

printf("記錄已刪除!\n");

}/*end clear*/

void modify(void)

{

FILE * f = 0; CON s; int cmd = 0;

fpos_t p = query(&s);

if(p<0) return;

f = fopen(fileDB, "rb+");

fsetpos(f, &p);

for(;;) {

show(0, &s);

printf("請選擇:1-姓名;2-工作單位;3-電話;4-電郵;5-保存並退出;6-放棄修改並退出\n");

scanf("%d", &cmd);

switch(cmd) {

case 1:

case 2:

case 3:

case 4:

input(&s, OPER[cmd]);

break;

case 5:

fsetpos(f, &p);

fwrite(&s, sizeof(s), 1, f);

case 6:

fclose(f);

return;

default:

printf("錯誤的操作,請重新輸入。\n");

}/*end case*/

}/*mext*/

}/*end clear*/

int main(void)

{

int cmd = 0; CON s;

for(;;) {

printf("歡迎使用通信簿!請選擇:1-添加;2-查詢;3-刪除;4-修改;5-全部輸出;0-退出\n");

scanf("%d", &cmd);

switch(cmd) {

case 0: return 0;

case 1: regist(); break;

case 2: query(&s); break;

case 3: clear(); break;

case 4: modify(); break;

case 5: browse(0, 0, &s); break;

}//end case

}

return 0;

}

  • 上一篇:註冊域名使用萬網和Godaddy什麽區別
  • 下一篇:雲交雨合的成語典故
  • copyright 2024編程學習大全網