?? 通訊錄.cpp
字號:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN sizeof(struct addbook)
#define MAX 100
void InitDialBook(void);
void UserInterface(void);/*菜單函數*/
void Load(void);
void Add(void);
void Find(void);
void Modify(void);
void Delete(void);
void ShowAll(void);
void Save(void);
struct addbook{
int record;
char name[15];
char sex[4];
char age[4];
char addr[20];
char phone[15];
char qq[15];
char meg[40]; /*個性簽名*/
struct addbook *link;
};
FILE *fp;
struct addbook *p,*p1,*head,*s,*t;
main()
{
int flag;
int choice;
if((fp = fopen("zzxx.txt","rb"))==NULL)
{ clrscr();
printf("\n\n\t\t\t文件不存在!\n");
if((fp = fopen("zzxx.txt","wb"))==NULL)
{
printf("文件打開錯誤!\n");
getch();
exit(0);
}
}
if(fgetc(fp)==-1)
{
printf("\n\t\t通訊錄里沒有信息,現在您必須添加信息.\n");
InitDialBook();
printf("\n\t\t\t添加成功!\n");
printf("\n\t\t您若想添加更多人的信息需請重新打開程序\n");
getch();
exit(0);
}
rewind(fp); /* 重建文件指針 */
Load();
fclose(fp);
/* printf("\n這是文件里第%d位成員.\n",p->record); */
flag = 1;
while(flag)
{
UserInterface();
printf("請輸入您的選擇:(0-5):");
scanf("%d",&choice);
getchar();
if(choice>=0&&choice<6)
{
switch(choice)
{
case 1:
Add();break;
case 2:
Find();break;
case 3:
ShowAll();break;
case 4:
Delete();break;
case 5:
Modify();break;
case 0:
flag = 0;
clrscr();
printf("\n\n\n\t\t\t謝謝使用本通訊錄系統!!!");
printf("\n\n\t\t如果你在使用過程中有什么要求或建議請連系:");
printf("\n\n\t\t\tzzxx2001@126.com或QQ:279252614");
getch();
break;
}
}
else{
printf("輸入錯誤,請重新選擇!\n");
}
}
fp = fopen("zzxx.txt","wb");
Save();
fclose(fp); clrscr();
printf("\n\n\n\t\t\t按任意鍵退出!\n");
getch();
return 0;
}
void InitDialBook(void)/*初始化文件函數*/
{
p->record = 1;
printf("\n\n\t\t請輸入姓名:");
gets(p->name);
printf("\n\t\t請輸入性別:");
gets(p->sex);
printf("\n\t\t請輸入年齡:");
gets(p->age);
printf("\n\t\t請輸入地址:");
gets(p->addr);
printf("\n\t\t請輸入電話:");
gets(p->phone);
printf("\n\t\t請輸入QQ號碼:");
gets(p->qq);
printf("\n\t\t請輸入個性簽名:");
gets(p->meg);
p->link = NULL;
head = p;
fwrite(p,LEN,1,fp);
fclose(fp);
}
void UserInterface(void)/*菜單*/
{ clrscr();
printf("\n\t\t********************************************\n");
printf("\t\t\t歡迎使用通訊錄管理系統");
printf("\n\t\t********************************************\n");
printf("\n\n\t\t\t******請選擇你的操作******\n");
printf("\t\t\t +-------------------------------+");
printf("\t\t\t\t\t\t | 1 增加個人信息 |\n");
printf("\t\t\t | 2 查找信息(包含刪除\修改信息) |\n");
printf("\t\t\t | 3 顯示所有信息 |\n");
printf("\t\t\t | 4 刪除信息 |\n");
printf("\t\t\t | 5 修改信息 |\n");
printf("\t\t\t | 0 退出和保存 |\n");
printf("\t\t\t +-------------------------------+\n");
printf("\n\n\t注意!!輸入數字(電話號碼或QQ)要在英文狀態下,中文狀態無法輸入!!\n\n");
}
void Load(void)/*讀文件*/
{
fread(head,LEN,1,fp);
p = head;
while(p->link!=NULL){
p1 = (struct addbook*)malloc(LEN);
p1 = p->link;
fread(p1,LEN,1,fp);
p = p->link;
}
}
void Add(void)/*輸入函數*/
{
p1 = (struct addbook*)malloc(LEN);
p1->record = p->record + 1; clrscr();
printf("\n\n\t\t\t-------------------------------------------\n");
printf("\t\t\t\t\t請輸入信息\n");
printf("\t\t\t-------------------------------------------\n");
printf("\n\t\t\t這是第%d位成員",p->record+1);
printf("\n\t\t\t請輸入姓名:");
gets(p1->name);
printf("\n\t\t\t請輸入性別:");
gets(p1->sex);
printf("\n\t\t\t請輸入年齡:");
gets(p1->age);
printf("\n\t\t\t請輸入地址:");
gets(p1->addr);
printf("\n\t\t\t請輸入電話:");
gets(p1->phone);
printf("\n\t\t\t請輸入QQ號碼:");
gets(p1->qq);
printf("\n\t\t\t請輸入個性簽名:");
gets(p1->meg);
p1->link = NULL;
p->link = p1;
p = p1;
}
void ShowAll(void)/*顯示所有函數*/
{
s = head;
clrscr();
printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" \t序號 姓名 性別 年齡 地址 電話 QQ號碼 個性簽名");
printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
do{
printf("\t %-6d%-10s%-8s%-7s%-10s%-10s%-s%-s\n",s->record,s->name,s->sex,
s->age,s->addr,s->phone,s->qq,s->meg);
s = s->link;
}while(s!=NULL);
printf("\n\n\n\t\t\t按任意鍵退出!");
getch();
return;
}
void Find(void)/*查找函數*/
{
char c;
struct addbook who;
s = head;
clrscr();
printf("\n\t\t請輸入要查找人的姓名:");
gets(who.name);
while((s->link!=NULL)&&(strcmp(s->name,who.name)))
{
s = s->link;
}
if((s->link==NULL)&&(strcmp(s->name,who.name)))
{
printf("\"%s\" 不存在!\n",who.name);
printf("請查對一下姓名再查找.\n");
getch();
return;
}
clrscr();
printf("\n\t\t\t\要查找的資料如下所示:\n");
printf("\n******************************************************\n");
printf("\t 序號 姓名 性別 年齡 地址 電話 QQ號碼 個性簽名");
printf("\n******************************************************\n");
printf("\t %-6d%-10s%-8s%-7s%-8s%-10s%-s%-s\n",s->record,s->name,s->sex,s->age,s->age,
s->addr,s->phone,s->qq,s->meg);
printf("\n\t\t刪除(d)\修改(m)\瀏覽一下(s)\n");
printf("\n\t請輸入您的選擇(d/m/s):");
scanf("%c",&c);
switch(c)
{
case 'D':
case 'd':Delete();break;
case 'M':
case 'm':Modify();break;
}
}
void Modify(void)
{ getchar();
printf("\n\t\t請輸入新的姓名:");
gets(s->name);
printf("\n\t\t請輸入新的性別:");
gets(s->sex);
printf("\n\t\t請輸入新的年齡:");
gets(s->age);
printf("\n\t\t請輸入新的地址:");
gets(s->addr);
printf("\n\t\t請輸入新的電話:");
gets(s->phone);
printf("\n\t\t請輸入新的QQ號碼:");
gets(s->qq);
printf("\n\t\t請輸入新的個性簽名:");
gets(s->meg);
printf("\n\t\t修改成功!\n");
getch();
}
void Delete(void)/*刪除函數*/
{
int find_prev;
int find_record;
char del;
char del_member_name[15];
struct addbook *p_del_prev;
strcpy(del_member_name,s->name);
getchar();
printf("確定要刪除%s嗎(Y/N)?",del_member_name);
scanf("%c",&del);
if(del=='n'||del=='N')
{
return;
}
find_prev = s->record - 1;
find_record = 1;
p_del_prev = head;
while((p_del_prev->link!=NULL)&&(find_record<find_prev))
{
p_del_prev = p_del_prev->link;
find_record++;
}
/* 如果刪除第一位成員 */
if(s->record==1)
{
if(s->link!=NULL)
{
head = head->link;
s = head;
while(s!=NULL)
{
s->record = s->record - 1;
s = s->link;
}
printf("%d,%s",p->record,p->name);
}
else if(s->link==NULL){ /* 如果第一位成員是最后一位 */
p = NULL;
head = p;
if(remove("zzxx.txt")==0){
printf("您已經刪除了最后一位成員,通訊錄已經清空!\n");
printf("所以,您必須重新建立通訊錄!\n");
printf("重新打開程序去建立.\n");
}
printf("\n\n\t\t按任意鍵退出.\n");
getch();
exit(0);
}
}
/* 如果刪除最后一位成員 */
else if(s->record==p->record){
p_del_prev->link = NULL;
s->link = NULL;
p = p_del_prev;
}
else{
p_del_prev->link = s->link;
s->link = NULL;
while(p_del_prev->link!=NULL)
{
p_del_prev = p_del_prev->link;
p_del_prev->record = p_del_prev->record -1;
}
printf("%d\n%d\n",p->record,p->link);
}
printf("成員 \"%s\" 已經被刪除.\n ",del_member_name);
getch();
}
void Save(void)/*保存文件*/
{
s = head;
do{
fwrite(s,LEN,1,fp);
s = s->link;
}while(s!=NULL);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -