通讯录

通讯录

/*
计一个班级同学的通讯录,要求如下:
  通讯录中每个同学的信息包含以下内容:学号(id)、姓名(name)、电话号码(tel)。如果需要更多其他信息,请自行添加。
  程序主菜单包含以下几个功能:
(1) 添加记录:通过键盘输入信息,添加一条通讯录记录。
(2) 删除记录:通过键盘输入学号,删除该学号的记录。
(3) 输出记录:输出通讯录全部记录。
(4) 按姓名查找:通过键盘输入姓名,输出该同学的所有信息。
(5) 保存记录:把通讯录中所有的记录保存到文件中。
(6) 清空记录:删除通讯录中的全部记录,并删除文件。
(7) 退出

提示:
  1.程序启动时应判断是否存在记录文件,如果存在,则读取每条记录到链表中。
  2.用户选择并完成主菜单某功能后,除了退出程序,应该返回主菜单。
3.添加一条记录时,插入到链表的尾部。
4.查找、删除记录时,如果该记录不存在,则应该输出不存在的提示。
5.添加记录、删除记录时不需要写文件。
6.保存记录时,用覆盖写文件的方法。(或者先删除原文件,再保存全部记录信息)
7.各个功能模块写成函数,由主函数调用。
*/

//    Oct.16.2016


#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
#include <conio.h>
#include <iostream>
using namespace std;


typedef int ElemType;


typedef struct LNode{
ElemType id;
char name[20];
ElemType tel;
struct LNode *next;
}LinkList;


LinkList *L;






void enter();


/*void InitList(LinkList * &L){
system("cls"); 
L = new LinkList;
L->next=NULL;
cout<<endl<<endl<<endl<<"初始化完毕!"<<endl;
printf("\n\n按任意键返回.\n");
getch();
enter();
}*/


void Checkfile(LinkList *&L){                   //check the file
system("cls");
L = new LinkList;
int f=0;
int i,t;
char n[20];
LinkList *p=L ; 
FILE *fp = fopen("data.txt","r");
if(fp==NULL){
cout<<"打开文件失败"<<endl;
return ;
}
while(fscanf(fp,"%d%s%d",&i,n,&t)!=EOF){
LinkList *q = new LinkList;
q->id=i;
strcpy(q->name,n);
q->tel=t;
p->next = q;
p=q;
f=1;
}
if(f==0){
cout<<"文件为空"<<endl; 
}
else
cout<<"读取完毕"<<endl; 
p->next =NULL;
fclose(fp);


printf("\n\n按任意键返回.\n");
getch();
enter();
}


void CreateListR(LinkList *&L){      //add the data 
system("cls");
LinkList *s,*r;
int i,n,id1,p;
char na[20];
//L = new LinkList;
//L->next =NULL; 
r = L;

cout<<"输入学生人数:  "; 
cin>>n; 
cout<<endl;
for(i=0;i<n;i++){
s = new LinkList;

cout<<endl;
cout<<"学生学号:\t"; 
cin>>id1;
s->id=id1;
cout<<endl;
cout<<"学生名字:\t"; 
scanf("%s",na);
strcpy(s->name,na);
cout<<endl;
cout<<"学生电话:\t";
cin>>p;
s->tel=p;

r->next = s;
r = s;
}
r->next =NULL;
cout<<endl<<endl<<endl<<"全部添加完毕!"<<endl; 
printf("\n\n按任意键返回.\n");
getch();
enter();
}


bool ListDelete(LinkList * &L){        //datele the data 
system("cls");
int id1;
cout<<"输入你要删除的学生的学号:\t";
cin>>id1;
LNode *p = L->next ,*pre = L, *q;
while(p!=NULL){
if(p==NULL)
cout<<"未找到该学生"<<endl; 
else{
if(p->id==id1){
q=p;
p=p->next;
pre->next=p;
delete q;
cout<<endl<<endl<<"删除成功"<<endl;
break;
}
else{
pre = p;
p = p->next;
}
}
}
cout<<endl<<endl<<endl<<"操作完毕!"<<endl; 
printf("\n\n按任意键返回.\n");
getch();
enter();

  
void DispList(LinkList * &L){         //display the data 
system("cls"); 
int f=0;
LinkList *p = L->next;
while(p!=NULL){
cout<<"学生学号:\t"<<p->id<<"\t";
cout<<"学生姓名:\t"<<p->name<<"\t";
cout<<"学生手机:\t"<<p->tel<<endl; 
p=p->next;
f=1;
}
if(f==1)
cout<<endl<<endl<<endl<<"全部显示完毕!"<<endl;
else cout<<endl<<endl<<"通讯录无数据"<<endl; 
printf("\n\n按任意键返回.\n");
getch();
enter();
}


void FindList(LinkList *&L){                 //find the data 
system("cls");
char n[20];
cout<<"输入你要寻找的学生的姓名:\t";
scanf("%s",n);
LinkList *p = L->next;
while(p!=NULL&& strcmp(p->name,n)!=0) {
p = p->next;
}
if(p==NULL)
cout<<endl<<endl<<"没有找到该学生";
else{
cout<<endl<<endl<<"学生学号:\t"<<p->id<<"\t";
cout<<"学生姓名: \t"<<p->name<<"\t";
cout<<"学生手机:\t"<<p->tel<<endl;
cout<<endl<<"查找成功"<<endl; 

cout<<endl<<endl<<endl<<"操作完毕!"<<endl; 
printf("\n\n按任意键返回.\n");
getch();
enter();



void SaveList(LinkList *&L){            //save the data to "data.txt" 
system("cls");
LinkList *p = L->next;
FILE *fp = fopen("data.txt","w");
if(fp==NULL)
cout<<endl<<"打开文件失败"<<endl;
while(p){
fprintf(fp,"%d\t%s\t%d\n",p->id,p->name,p->tel);
p=p->next;
}
cout<<endl<<"保存完毕"<<endl;
fclose(fp);
printf("\n\n按任意键返回.\n");
getch();
enter();
}


void end(){                                                 //exit the system
system("cls");
printf("\n\n欢迎使用通讯录系统!谢谢!\n\n\n");
exit(0);
}
 
void DestroyList(LinkList * &L){                           //Destroy the LinkList and file
system("cls"); 
LinkList *pre = L , *p = L->next;
while(p!=NULL){
delete pre;
pre = p;
p = pre -> next;
}
delete pre;
cout<<"销毁完毕"<<endl;
if(remove("data.txt") == 0)  
       cout<<"data.txt 文件已被删除"<<endl;  
    else  
       perror("remove");
getch();
end();
}




void enter(){                                                                  //主菜单界面
int choice, w;
system("cls");
printf("\n\n\t\t\t        通讯录管理系统");                                //选择界面
printf("\n\n\n\t\t     **************************************\n");
printf("\n\t\t     *  1.检查                    2.添加  *\n");
printf("\n\t\t     *  3.删除                    4.输出  *\n");
printf("\n\t\t     *  5.查找                    6.保存  *\n");
printf("\n\t\t     *  7.清空                    0.退出  *\n");
printf("\n\t\t     **************************************\n");
printf("\n\t\t   输入相应执行功能的序号:");
scanf("%d", &choice);
switch (choice){                                    //选择操作
case 1:Checkfile(L);break;
case 2:CreateListR(L); break;
case 3:ListDelete(L); break;
case 4:DispList(L); break;
case 5:FindList(L); break;
case 6:SaveList(L); break;
case 7:DestroyList(L); break;
case 0:end(); break;
default:w = 1;                                      //其他情况
}
if (w == 1){                                        //其他情况,重新输入
printf("\n输入有误,请按任意键重新选择。\n");
getch();
enter();                                        //重新打开选择界面
}
}








int main(){                                    
system("color 3f");
int i;
int n = 0;
printf("\n\n\n\n\t\t     **************************************\n");
printf("\n\n\t\t\t     欢迎来到通讯录管理系统\n");
printf("\n\n\n\t\t\t      按任意键进入通讯录!\n\n");
getch();
enter();
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【ACGO】我不会C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值