C語言實(shí)現(xiàn)電話簿管理系統(tǒng)
更新時(shí)間:2019年12月18日 11:54:55 作者:城秀
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)電話簿管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C語言電話簿管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
/*大二實(shí)踐周所作,
時(shí)間:2017.9,11
電話簿管理系統(tǒng)
*/
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define NULL 0
typedef struct lianxiren{
char job[30];
char number[20];
char name[10];
char email[30];
struct lianxiren*next;
}lianxiren;
#define LEN sizeof(lianxiren)
lianxiren* creat_list()
{
lianxiren *head,*p1,*p2;
char name[10];int n=0;
head=NULL;
p1=(lianxiren *)malloc(LEN);
p2=p1;
printf("請(qǐng)輸入姓名(姓名為0時(shí)停止創(chuàng)建):");
gets(name);
if(strcmp(name,"0")==0)return 0;
else {
strcpy(p1->name,name);
printf("請(qǐng)輸入電話號(hào)碼:");gets(p1->number);
printf("請(qǐng)輸入工作單位:");gets(p1->job);
printf("請(qǐng)輸入E-mail:");gets(p1->email);
}
while(1)
{
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
printf("請(qǐng)輸入姓名(姓名為0時(shí)停止創(chuàng)建):");
gets(name);
if(strcmp(name,"0")==0)break;
else{
p1=(lianxiren*)malloc(LEN);
strcpy(p1->name,name);
printf("請(qǐng)輸入電話號(hào)碼:");gets(p1->number);
printf("請(qǐng)輸入工作單位:");gets(p1->job);
printf("請(qǐng)輸入E-mail:");gets(p1->email);}
}p2->next=NULL;
return head;
}//鏈表創(chuàng)建函數(shù)
lianxiren* shifang_list(lianxiren*head)
{
lianxiren*p1;
for(;head!=NULL;)
{
p1=head;
head=head->next;
free(p1);
}
return head;
}//釋放鏈表函數(shù)
void print_list(lianxiren*head)
{
void caidan();
int n=0;
printf("現(xiàn)在通訊錄中有如下成員:");
while(head!=NULL)
{
printf("\n名字:");puts(head->name);
printf("\n電話號(hào)碼:");puts(head->number);
printf("\n工作單位:");puts(head->job);
printf("\nE-mail:");puts(head->email);
putchar('\n');
head=head->next;n++;
if(n%8==0){
printf("按回車鍵顯示下一頁");
getchar();
system("cls");
caidan();
}
}
printf("總共%d個(gè)聯(lián)系人\n",n);
}//打印鏈表函數(shù)
int length(lianxiren*head)
{
int n = 0;
lianxiren *p;
p = head;
while(p != NULL)
{
p = p->next;
n++;
}
return n;
}
void paixu1(lianxiren*head)
{
void caidan();
int n=length(head);
int i,j;
lianxiren temp,*p;
p=head;
lianxiren a[100];
for(i=1;i<=n;i++)
{
strcpy(a[i].name,p->name);
strcpy(a[i].number,p->number);
strcpy(a[i].job,p->job);
strcpy(a[i].email,p->email);
p=p->next;
}
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{if(strcmp(a[j].number,a[j+1].number)>0)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("現(xiàn)在通訊錄中有如下成員:");
for(i=1;i<=n;i++)
{
printf("\n名字:");puts(a[i].name);
printf("\n電話號(hào)碼:");puts(a[i].number);
printf("\n工作單位:");puts(a[i].job);
printf("\nE-mail:");puts(a[i].email);
putchar('\n');
if(i%8==0){
printf("按回車鍵顯示下一頁");
getchar();
system("cls");
caidan();
}
}
printf("總共%d個(gè)聯(lián)系人\n",n);
}
void paixu2(lianxiren*head)
{
void caidan();
int n=length(head);int i,j;
lianxiren temp,*p;
p=head;
lianxiren a[100];
for(i=1;i<=n;i++)
{
strcpy(a[i].name,p->name);
strcpy(a[i].number,p->number);
strcpy(a[i].job,p->job);
strcpy(a[i].email,p->email);
p=p->next;
}
for(i=1;i<=n-1;i++)
{
for(j=1;j<=n-i;j++)
{if(strcmp(a[j].name,a[j+1].name)>0)
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("現(xiàn)在通訊錄中有如下成員:");
for(i=1;i<=n;i++)
{
printf("\n名字:");puts(a[i].name);
printf("\n電話號(hào)碼:");puts(a[i].number);
printf("\n工作單位:");puts(a[i].job);
printf("\nE-mail:");puts(a[i].email);
putchar('\n');
if(i%8==0){
printf("按回車鍵顯示下一頁");
getchar();
system("cls");
caidan();
}
}
printf("總共%d個(gè)聯(lián)系人\n",n);
}
void paixu_list(lianxiren*head)
{
void caidan();
if(head==NULL)
{printf("電話簿為空,請(qǐng)重新創(chuàng)建!");
return;
}
char a;
printf("1,按電話號(hào)碼升序排序\n2,按姓名字母升序排序\n");
printf("請(qǐng)選擇一種排序方法:");
a=getchar();
getchar();
switch(a){
case'1':paixu1(head);break;
case'2':paixu2(head);break;
default:printf("輸入有誤!\n");break;
}
}
void chazhao1(lianxiren*head)
{if(head==NULL)
{
printf("電話簿為空,請(qǐng)重新創(chuàng)建");
return;
}
char name[10];
printf("請(qǐng)輸入名字:");gets(name);
while(strcmp(name,head->name)!=0)
{head=head->next;
if(head==NULL){printf("電話簿未有此聯(lián)系人\n");
return;}
}
printf("%s的電話號(hào)碼為:",name);
puts(head->number);
printf("\n工作單位:");puts(head->job);
printf("\nE-mail:");puts(head->email);
}//通過名字查找
void chazhao2(lianxiren*head)
{if(head==NULL)
{
printf("電話簿為空,請(qǐng)重新創(chuàng)建");
return;
}
char number[20];
printf("請(qǐng)輸入電話號(hào)碼:");gets(number);
while(strcmp(number,head->number)!=0)
{head=head->next;
if(head==NULL){printf("電話簿未有此聯(lián)系人\n");
return;}
}
printf("%s的主人為:",number);
puts(head->name);
printf("\n工作單位:");puts(head->job);
printf("\nE-mail:");puts(head->email);
}//通過電話號(hào)碼查找
void chazhao(lianxiren*head)
{
int n;
printf(" 1,通過名字查找\n 2,通過電話號(hào)碼查找\n 3,退出\n請(qǐng)選擇你需要的服務(wù):");
scanf("%d",&n);
getchar();
while(1)
{
switch(n){
case 1:{chazhao1(head);printf("請(qǐng)選擇服務(wù)項(xiàng):");scanf("%d",&n);getchar();}break;
case 2:{chazhao2(head);printf("請(qǐng)選擇服務(wù)項(xiàng):");scanf("%d",&n);getchar();}break;
case 3:return;break;
default:{printf("輸入不正確!");printf("請(qǐng)選擇服務(wù)項(xiàng):");scanf("%d",&n);getchar();}break;
}}
}//查找聯(lián)系人
void add_list(lianxiren*head)
{
lianxiren*p1,*p2,*h;
char name[10];
printf("請(qǐng)輸入名字(名字為0時(shí)停止)");
gets(name);
if(strcmp(name,"0")!=0)
{
p1=(lianxiren*)malloc(LEN);
strcpy(p1->name,name);
printf("請(qǐng)輸入電話號(hào)碼:");gets(p1->number);
printf("請(qǐng)輸入工作單位:");gets(p1->job);
printf("請(qǐng)輸入E-mail:");gets(p1->email);
}
else return;
h=p1;
while(1)
{
p2=p1;
printf("請(qǐng)輸入名字(名字為0時(shí)停止)");
gets(name);
if(strcmp(name,"0")==0)break;
else{
p1=(lianxiren*)malloc(LEN);
strcpy(p1->name,name);
printf("請(qǐng)輸入電話號(hào)碼:");gets(p1->number);
printf("請(qǐng)輸入工作單位:");gets(p1->job);
printf("請(qǐng)輸入E-mail:");gets(p1->email);
p2->next=p1;
}
}
p1=head->next;
head->next=h;
p2->next=p1;
}//添加鏈表函數(shù)
lianxiren*xiugai_list(lianxiren*head)
{
char a[20];
printf("請(qǐng)輸入聯(lián)系人名字或電話:");
gets(a);
if(head==NULL)
{
printf("電話簿為空,請(qǐng)重新創(chuàng)建");
return head;
}
lianxiren*p=head;
while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0)
{
p=p->next;
if(p==NULL){printf("電話簿未有此聯(lián)系人\n");
return head;}
}
printf("查找到了!");
printf("\n名字:");puts(p->name);
printf("\n電話號(hào)碼:");puts(p->number);
printf("\n工作單位:");puts(p->job);
printf("\nE-mail:");puts(p->email);
putchar('\n');
int n;
while(1)
{printf("請(qǐng)選擇操作項(xiàng)(1,名字2,電話號(hào)碼3,工作單位4,E-mail 5,退出):");
scanf("%d",&n);
getchar();
switch(n)
{
case 1:{printf("請(qǐng)輸入名字:");gets(p->name);}break;
case 2:{printf("請(qǐng)輸入電話號(hào)碼:");gets(p->number);}break;
case 3:{printf("請(qǐng)輸入工作單位:");gets(p->job);}break;
case 4:{printf("請(qǐng)輸入E-mail:");gets(p->email);}break;
case 5:return head;break;
default:printf("輸入錯(cuò)誤!");break;
}
}
}//修改鏈表函數(shù)
lianxiren*delete_list(lianxiren*head)
{
char a[20];
printf("請(qǐng)輸入聯(lián)系人名字或電話:");
gets(a);
if(head==NULL)
{
printf("電話簿為空,請(qǐng)重新創(chuàng)建");
return head;
}
lianxiren*p=head,*p1;
while(strcmp(a,p->name)!=0&&strcmp(a,p->number)!=0)
{
p1=p;
p=p->next;
if(p==NULL){printf("電話簿未有此聯(lián)系人\n");
return head;}
}
printf("查找到了!");
printf("\n名字:");puts(p->name);
printf("\n電話號(hào)碼:");puts(p->number);
printf("\n工作單位:");puts(p->job);
printf("\nE-mail:");puts(p->email);
putchar('\n');
char n;
printf("是否刪除該聯(lián)系人(Y/N)");
n=getchar();
switch(n)
{
case 'y':
case 'Y':{if(p==head){head=p->next;free(p);}else{p1->next=p->next;free(p);}printf("成功刪除!");}break;
case 'N':
case 'n':printf("取消刪除!");break;
default:printf("輸入錯(cuò)誤!");break;
}
return head;
}//刪除鏈表函數(shù)
void save_list(lianxiren*head)
{FILE *fp;
if((fp=fopen("dianhuabu.dat","wb"))==NULL) {
printf("File cannot be opened\n");
exit(0);}
if(head==NULL)
{
printf("通訊錄為空\n");
return;
}
lianxiren*p1=head;
while(p1!=NULL)
{
if(fwrite(p1,LEN,1,fp)!=1){
printf("cannot open file\n");
return;}
p1=p1->next;
}
printf("保存完畢!\n");
fclose(fp);
}//文件寫入函數(shù)
lianxiren*load_list(lianxiren*head)
{FILE *fp;
if((fp=fopen("dianhuabu.dat","rb"))==NULL) {
printf("電話簿為空,請(qǐng)重新創(chuàng)建\n");
exit(0);}
lianxiren*p1,*p2;
p1=(lianxiren*)malloc(LEN);
if(fread(p1,LEN,1,fp)==0)
{printf("電話簿為空,請(qǐng)重新創(chuàng)建");
return head;
}
head=p1;
p2=p1;
p1=(lianxiren*)malloc(LEN);
while(fread(p1,LEN,1,fp))
{
p2->next=p1;
p2=p1;
p1=(lianxiren*)malloc(LEN);
}
p2->next=NULL;
free(p1);
return(head);
fclose(fp);
}//文件讀取函數(shù)
int kouling()
{
char s[20];
printf("請(qǐng)輸入口令:");
int n=0;
while(n<3)
{scanf("%s",s);
getchar();
if(strcmp(s,"20160390527")==0)
return 0;
else{n++;
if(n==3){
printf("抱歉,輸入錯(cuò)誤\n");
return 1;}
printf("口令錯(cuò)誤,請(qǐng)重新輸入\n");
}
}return 1;
}//口令驗(yàn)證,密碼為:20160390527
void caidan()
{
printf(" 歡迎進(jìn)入電話簿系統(tǒng) \n");
printf("********************************************\n");
printf(" 1、創(chuàng)建電話簿(會(huì)將原有電話簿覆蓋)\n");
printf(" 2、查找聯(lián)系人 \n");
printf(" 3、添加聯(lián)系人 \n");
printf(" 4、修改聯(lián)系人 \n");
printf(" 5、刪除聯(lián)系人 \n");
printf(" 6、查看電話簿(排序) \n");
printf(" 7、退出系統(tǒng) \n");
printf("********************************************\n");
}//菜單界面
void main()
{
if(kouling()) return;//口令驗(yàn)證
system("cls");
caidan();//進(jìn)入菜單界面
printf(" 請(qǐng)選擇你所需要的服務(wù):");
int n;scanf("%d",&n);
getchar();
lianxiren*head;
while(1){
system("cls");
caidan();
switch(n){
case 1:{
head=creat_list();
system("cls");
caidan();
print_list(head);
save_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服務(wù),請(qǐng)重新輸入:");
scanf("%d",&n);
getchar();}break;//創(chuàng)建電話簿(創(chuàng)建鏈表、寫入文件,釋放鏈表)
case 2:{
head=load_list(head);
chazhao(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服務(wù),請(qǐng)重新輸入:");
scanf("%d",&n);
getchar();}break;//查找聯(lián)系人(讀入文件、查找函數(shù)、釋放鏈表)
case 3:{
head=load_list(head);
add_list(head);
system("cls");
caidan();
print_list(head);
save_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服務(wù),請(qǐng)重新輸入:");
scanf("%d",&n);
getchar();}break;//添加聯(lián)系人(讀入文件、添加鏈表、寫入文件、釋放鏈表)
case 4:{
head=load_list(head);
head=xiugai_list(head);
save_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服務(wù),請(qǐng)重新輸入:");
scanf("%d",&n);
getchar();}break;//修改聯(lián)系人(讀入文件,修改鏈表、寫入文件、釋放鏈表)
case 5:{
head=load_list(head);
head=delete_list(head);
save_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服務(wù),請(qǐng)重新輸入:");
scanf("%d",&n);
getchar();}break;//刪除聯(lián)系人(讀入文件,刪除鏈表、寫入文件、釋放鏈表)
case 6:{
head=load_list(head);
paixu_list(head);
shifang_list(head);
printf("********************************************\n");
printf("\n如需要其他服務(wù),請(qǐng)重新輸入:");
scanf("%d",&n);
getchar();}break;//查看電話簿(讀入文件,排序鏈表、釋放鏈表)
case 7:{
system("cls");
return;}break;//退出
default:{
printf("\n輸入有誤,請(qǐng)重新輸入:");
scanf("%d",&n);
getchar();}break;
}}
}
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++入門(命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù),auto,范圍for)
這篇文章主要介紹了C++入門(命名空間,缺省參數(shù),函數(shù)重載,引用,內(nèi)聯(lián)函數(shù),auto,范圍for),這些基礎(chǔ)知識(shí)是學(xué)習(xí)C++最最基礎(chǔ)需要掌握的知識(shí)點(diǎn),需要的朋友可以參考下2021-05-05
String底層函數(shù)的實(shí)現(xiàn)方式詳解
這篇文章主要介紹了String底層函數(shù)的實(shí)現(xiàn)方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
C語言實(shí)現(xiàn)文件內(nèi)容的加密與解密
文件內(nèi)容需要加密與解密功能的原因主要有兩個(gè)方面:保護(hù)數(shù)據(jù)安全和確保數(shù)據(jù)完整性,所以接下來小編就給大家介紹一下如何通過C語言實(shí)現(xiàn)文件內(nèi)容加密與解密,需要的朋友可以參考下2023-08-08

