1-25,通讯录管理系统(一)

来源:互联网 发布:公知污名化 编辑:程序博客网 时间:2024/05/10 12:54

以前只写了简单的链表操作和文件读写,

今天开始写管理系统,才发现有很多细节的地方需要学习。

比如头结点的问题。一个头结点会影响整个程序的输入输出添加删除,必须再三注意。

今天只写了简单的框架,然后简单的几个功能,完善得自我感觉还行

贴下代码,记录一下

/*(1)任务描述.
 查看自己的手机,设计一个手机通讯录管理程序.通讯录中可存储若干个人的联系号码.
 (2)功能要求
 1.根据自己的手机情况,设计通讯录文件结构.
 2.完成通讯录信息的添加,且按联系人姓名字母顺序排列通讯录信息.当发生同名时,提示是否替换,如果是,则直接覆盖以前信息,如果不是,返回添加状态等待修改.
 3.提供通讯录按姓名查询功能.
 4.提供按群组查询联系电话的功能.
 5.提供逐个翻看通讯录查询电话功能.
 6.提供逐个\全部删除电话号码功能.
 7.当通讯录存在,每次进入程序,模拟手机开机,读出已有的通讯录信息.
 (3)设计提示\
 由于计算机屏幕显示行数有限,显示整个通讯录时,提供翻页功能,每页显示10个联系号码.*/

#include <stdio.h>
#include<string.h>
#include<windows.h>


typedef struct people
{
 char name[20];
 char tel[20];
 char qunzu[20];
 struct people *next;

}peo;



struct peo * creat()
{
 int sel, flag=1;
 int n=0;
 peo *head=NULL,*p=NULL;
 head=(peo*)malloc(sizeof(peo));
 head->next=NULL;
 while(flag==1)
 {
  
  n++;
  p=(peo*)malloc(sizeof(peo));
  printf("请输入联系人姓名\n");
  fflush(stdin);
  gets(p->name);
  printf("请输入联系人电话\n");
  fflush(stdin);
  gets(p->tel);
  printf("请选择联系人分组:1-家人,2-同学,3-同事,4-其他\n");
  fflush(stdin);
  Flag:scanf("%d",&sel);
  switch(sel)
  {
  case 1:strcpy(p->qunzu,"家人");break;
  case 2:strcpy(p->qunzu,"同学");break;
  case 3:strcpy(p->qunzu,"同事");break;
  case 4:strcpy(p->qunzu,"其他");break;
  default:printf("选择错误,请重新选择\n");goto Flag;
  }

  p->next=head->next;
  head->next=p;
  printf("是否继续加入联系人:1-是,0-否\n");
  fflush(stdin);
  scanf("%d",&flag);
  if(flag==0)
  { 
   printf("已成功添加%d位联系人,任意键进去通讯录主菜单\n",n);
   scanf("%d",&n);
      system("cls");
   break;
  }

 }

 return head;
}

peo zengjia(peo *head)
{
 
 peo *p=NULL;
 int sel,flag;
 int n=0;

 while(flag)
 { 
  n++;
  p=(peo*)malloc(sizeof(peo));
  p->next=NULL;
  printf("请输入联系人姓名\n");
  fflush(stdin);
  gets(p->name);
  printf("请输入联系人电话\n");
  fflush(stdin);
  gets(p->tel);
  printf("请选择联系人分组:1-家人,2-同学,3-同事,4-其他\n");
  fflush(stdin);
  Flag:scanf("%d",&sel);
  switch(sel)
  {
  case 1:strcpy(p->qunzu,"家人");break;
  case 2:strcpy(p->qunzu,"同学");break;
  case 3:strcpy(p->qunzu,"同事");break;
  case 4:strcpy(p->qunzu,"其他");break;
  default:printf("选择错误,请重新选择\n");goto Flag;
  }

  p->next=head->next;
  head->next=p;
  printf("是否继续加入联系人:1-是,0-否\n");
  fflush(stdin);
  scanf("%d",&flag);
  if(flag==0)
  {
   printf("已成功添加%d位联系人\n\n任意键返回上一层\n",n);
   scanf("%d",&n);
      system("cls");
  }
 }
}

 
 


peo * shanchu(peo * head)
{
 char name[20];
 peo *p1,*p2;
 p1=head;
 printf("请输入联系人姓名\n");
 fflush(stdin);
 gets(name);
 while(strcmp(name,p1->name)!=0&&p1->next!=NULL)
 {
  p2=p1;
  p1=p1->next;
 }
 if(strcmp(name,p1->name)==0)
 {
  if(p1==head)head=p1->next;
  else p2->next=p1->next; 
  printf("删除成功!\n");
 }
 else printf("未找到该联系人\n");

 return head;
}


void save(peo *head)
{
 FILE *fp;
 peo *p;
 fp=fopen("tongxl.dat","w");
 p=head->next;
 while (p!=NULL)
 {
 fwrite((void*)p,sizeof(peo),1,fp);
 p=p->next;
 }
 fclose(fp);
}

peo * load()
{
 FILE *fp;
 peo *p,*head;
 fp=fopen("tongxl.dat","r");
 head=(peo*)malloc(sizeof(peo));
 head->next=NULL;

 while(!feof(fp))
 {
  p=(peo*)malloc(sizeof(peo));
  fread(p,sizeof(peo),1,fp);
  p->next=head->next;
  head->next=p;
 }
 return head->next;
 fclose(fp);

 
}


void chaxun()
{

}


void xiugai()
{}



void xianshi(peo *head)
{
 peo *p;
 int flag=1;
 if(head!=NULL)
 {
  p=head->next;
  printf("姓名----------电话----------组群\n");
  while(p!=NULL)
  {
   printf("%-14s",p->name);
   printf("%-14s",p->tel);
   printf("%-14s",p->qunzu);
   printf("\n");
   p=p->next;
  }
 }
  else
   printf("通讯录为空\n");
    printf("任意键返回上一层\n");
  fflush(stdin);
  scanf("%d",&flag);
  if(flag)
      system("cls");
}


void main()
{
 
 char ch;
 FILE *fp=NULL;
 peo *head;
 head=NULL;
 
 if((fp=fopen("tongxl.dat","r"))==NULL)
 {
  printf("\n欢迎首次使用本通讯录\n");
  head=creat();
  save(head);
 }
 else
 head=load();
 
 do{
  printf("\n\t\t|-------------欢迎您使用通讯录管理系统-----------|");
     printf("\n\t\t|       1-添加联系人 2-显示联系人                |");
     printf("\n\t\t|       3-删除联系人 4-查询联系人                |");
     printf("\n\t\t|       5-修改联系人 0-保存退出                  |");
     printf("\n\t\t|------------------------------------------------|");
     printf("\n\t\t请选择您所需要的功能:");
  fflush(stdin);
  ch=getchar();
 

  switch(ch)
  {
  case '1':system("cls"); printf("====添加联系人====\n");
   zengjia(head);save(head);break;
  
  case '2': system("cls");printf("====显示联系人====\n");
   
   xianshi(head);break;
  case '3':system("cls"); printf("====删除联系人====\n");
   shanchu(head);save(head);break;
  case '4': system("cls");printf("====查询联系人====\n");
   chaxun();break;
  case '5':system("cls");printf("====修改联系人====\n");
    xiugai();break;
  default:printf("输入错误\n");break;
     
  }
 }while(ch!='0');


}


0 0
原创粉丝点击