zoukankan      html  css  js  c++  java
  • c语言实现通讯录管理系统(用链表实现)

    题目:

           通讯录(通过链表实现)

           设计并实现一个简易的通讯录软件,管理个人通讯记录。一条通讯记录可包括:姓名、工作单位、手机、住宅电话、E-Mail、家庭住址等(可自行增删,但不可过少)。该系统应实现以下基本功能:

         (1)增加新的通讯记录。

        (2)删除已有的通讯记录。

        (3)修改已有的通讯记录。

        (4)浏览全部或指定(如指定姓名、工作单位等)的通讯记录。

        (5)合理组织排列各项功能,界面可使用键盘操作。

        (6)以文件的形式存储数据。

    说明:

          大一时的c语言课设,用链表实现一个通讯录管理系统,为了美观好看,花了很多时间调整齐度,记录一下大一时的作业。其主要功能是对通讯录可输入,显示,插入,删除,最难是可保存,这个学文件的时候不怎么会。内容我自己弄了7个,名字,性别,工作单位,手机,住宅电话,E-Mail,家庭住址(其他太多其实都是一样的,就懒得加了)。主要运用到对指针中的链表的功能和使用要比较扎实,分部列写就可以了。

    实现图片:

    附上代码:

      1 #include <stdio.h>
      2 #include <string.h>
      3 #include <stdlib.h>
      4 typedef struct student
      5 {
      6     char name[20];//名字
      7     char wm[20];//性别
      8     char work[100];//工作单位
      9     char stel[20];//手机
     10     char htel[20];//住宅号码
     11     char mail[20];//E-Mail
     12     char home[100];//家庭住址
     13     struct student *next;
     14 }stu;
     15 stu *head;//头指针
     16 void screen()//主菜单
     17 {
     18     printf("
    =======================================================
    ");
     19     printf("              欢迎来到通讯录管理系统
    
    ");
     20     printf("            1.输入数据         2.显示数据
    ");
     21     printf("            3.插入数据         4.删除数据
    ");
     22     printf("            5.查看数据         6.修改数据
    ");
     23     printf("            7.保存数据         8.返回主菜单
    ");
     24     printf("
    ~~~~~~输~~~~~~入~~~~~~9~~~~~~退~~~~~~出~~~~~~程~~~~~~序
    ");
     25 }
     26 void input()//输入数据
     27 {
     28     int ans;//判断是否继续输入
     29     stu *p1,*p2;
     30     p1=(stu *)malloc(sizeof(stu));//申请内存来用
     31     if(p1!=NULL)
     32     {
     33         printf("========输入数据========
    ");
     34         head=p1;
     35         while(1)
     36         {
     37             printf("名字:");
     38             scanf("%s",&p1->name);
     39             printf("性别:");
     40             scanf("%s",&p1->wm);
     41             printf("工作单位:");
     42             scanf("%s",&p1->work);
     43             printf("手机:");
     44             scanf("%s",&p1->stel);
     45             printf("住宅号码:");
     46             scanf("%s",&p1->htel);
     47             printf("E-Mail:");
     48             scanf("%s",&p1->mail);
     49             printf("家庭地址:");
     50             scanf("%s",&p1->home);
     51             printf("===================================
    ");
     52             p2=p1;
     53             p1=(stu *)malloc(sizeof(stu));//申请下一个要用的空间
     54             if(p1!=NULL)
     55                 p2->next=p1;
     56             printf("请选择是否继续输入:1.继续  2.退出
    请选择:");//用户选择
     57             scanf("%d",&ans);
     58             if(ans==1)//继续
     59                 continue;
     60             else//退出
     61             {
     62                 printf("========输入完毕========
    ");
     63                 p2->next=NULL;
     64                 free(p1);//将申请的的无用内存释放
     65                 break;
     66             }
     67         }
     68     }
     69 }
     70 void look(stu *p1)//显示数据
     71 {
     72     printf("========显示数据========
    ");
     73     while(p1!=NULL)
     74     {
     75         printf("名字:%s
    ",p1->name);
     76         printf("性别:%s	",p1->wm);
     77         printf("工作单位:%s	",p1->work);
     78         printf("手机:%s	",p1->stel);
     79         printf("住宅号码:%s	",p1->htel);
     80         printf("E-Mail:%s	",p1->mail);
     81         printf("家庭住址:%s
    ",p1->home);
     82         printf("=====================================
    ");
     83         p1=p1->next;
     84     }
     85     printf("========显示完毕========
    ");
     86 }
     87 void insert()//插入数据
     88 {
     89     int ans;//选择插入位置
     90     char name[20];//插入者的名字
     91     printf("========插入数据========
    ");
     92     stu *p1,*p2,*p3;
     93     p1=head;
     94     p3=(stu *)malloc(sizeof(stu));//申请内存
     95     p3->next=NULL;
     96     printf("请输入插入者的数据:
    ");
     97     printf("名字:");
     98     scanf("%s",&p3->name);
     99     printf("性别:");
    100     scanf("%s",&p3->wm);
    101     printf("工作单位:");
    102     scanf("%s",&p3->work);
    103     printf("手机:");
    104     scanf("%s",&p3->stel);
    105     printf("住宅号码:");
    106     scanf("%s",&p3->htel);
    107     printf("E-Mail:");
    108     scanf("%s",&p3->mail);
    109     printf("家庭地址:");
    110     scanf("%s",&p3->home);
    111     printf("请选择插入位置:1.首位置插入  2.尾部插入  3.插到某人前面
    请选择:");
    112     scanf("%d",&ans);
    113     switch(ans)
    114     {
    115     case 1://放到头指针
    116         p3->next=p1;
    117         head=p3;
    118         break;
    119     case 2://放到尾部
    120         while(p1->next!=NULL)
    121             p1=p1->next;
    122         p1->next=p3;
    123         break;
    124     case 3://放到某人前面
    125         printf("请输入插到谁前面名字:");
    126         scanf("%s",name);
    127         while(strcmp(name,p1->name)!=0)
    128         {
    129             p2=p1;
    130             p1=p1->next;
    131         }
    132         p2->next=p3;
    133         p3->next=p1;
    134         break;
    135     }
    136     printf("========插入成功========
    ");
    137 }
    138 void deleted()//删除数据
    139 {
    140     stu *p1,*p2;
    141     char name[20];//删除者名字
    142     printf("========删除数据========
    ");
    143     printf("请输入要删除者的名字:");
    144     scanf("%s",name);
    145     p1=head;
    146     if(head==NULL)//通讯录已经没数据了
    147     {
    148         printf("通讯录里什么也没有了。
    ");
    149         printf("========删除失败========
    ");
    150         return;
    151     }
    152     if(!strcmp(name,p1->name))//头指针就是要删除的,为什么要单独拿出来,就是为了可以在删除后改变头指针
    153     {
    154         head=p1->next;
    155         printf("========删除成功========
    ");
    156         return;
    157     }
    158     while(p1!=NULL&&strcmp(name,p1->name))
    159     {
    160         p2=p1;
    161         p1=p1->next;
    162     }
    163     if(p1==NULL)//查找完了,没找到
    164     {
    165         printf("查无此人!!!!
    ");
    166         printf("========删除失败========
    ");
    167         return;
    168     }
    169     if(p1->next!=NULL)//找到了,不是最后一个
    170     {
    171         p1=p1->next;
    172         p2->next=p1;
    173         printf("========删除成功========
    ");
    174     }
    175     else//是最后一个
    176     {
    177         p2->next=NULL;
    178         printf("========删除成功========
    ");
    179     }
    180 }
    181 void find(stu *p1)//查找数据
    182 {
    183     char name[20];//查找的名字
    184     printf("========查看数据========
    ");
    185     printf("请输入要查看人的名字:");
    186     scanf("%s",name);
    187     while(p1!=NULL)
    188     {
    189         if(!strcmp(name,p1->name))//找到了输出
    190         {
    191             printf("你要查找人的数据:
    ");
    192             printf("名字:%s
    ",p1->name);
    193             printf("性别:%s	",p1->wm);
    194             printf("工作单位:%s	",p1->work);
    195             printf("手机:%s	",p1->stel);
    196             printf("住宅号码:%s	",p1->htel);
    197             printf("E-Mail:%s	",p1->mail);
    198             printf("家庭住址:%s
    ",p1->home);
    199             break;
    200         }
    201         p1=p1->next;
    202     }
    203     if(p1==NULL)//找完了,没找到
    204         printf("您要查找的人不存在
    ");
    205     printf("========结束查找========
    ");
    206 }
    207 void update(stu *p1)//修改数据
    208 {
    209     int n;//选择的修改内容
    210     char name[20];//要修改人的名字
    211     printf("========修改数据========
    ");
    212     printf("请输入要修改人的姓名:");
    213     scanf("%s",name);
    214     while(p1!=NULL)
    215     {
    216         if(!strcmp(name,p1->name))//找到了
    217         {
    218             printf("要修改人的数据为:
    ");
    219             printf("名字:%s
    ",p1->name);
    220             printf("性别:%s	",p1->wm);
    221             printf("工作单位:%s	",p1->work);
    222             printf("手机:%s	",p1->stel);
    223             printf("住宅号码:%s	",p1->htel);
    224             printf("E-Mail:%s	",p1->mail);
    225             printf("家庭住址:%s
    ",p1->home);
    226             printf("请选择要修改的信息:");
    227             printf("	1.名字	2.性别	3.工作单位	4.手机	5.住宅号码	6.E-Mail	7.家庭住址
    
    您的选择是(1~7):");
    228             scanf("%d",&n);
    229             switch(n)
    230             {
    231                 case 1:
    232                     printf("名字:");
    233                     scanf("%s",&p1->name);
    234                     break;
    235                 case 2:
    236                     printf("性别:");
    237                     scanf("%s",&p1->wm);
    238                     break;
    239                 case 3:
    240                     printf("工作单位:");
    241                     scanf("%s",&p1->work);
    242                     break;
    243                 case 4:
    244                     printf("手机:");
    245                     scanf("%s",&p1->stel);
    246                     break;
    247                 case 5:
    248                     printf("住宅号码:");
    249                     scanf("%s",&p1->htel);
    250                     break;
    251                 case 6:
    252                     printf("E-Mail:");
    253                     scanf("%s",&p1->mail);
    254                     break;
    255                 case 7:
    256                     printf("家庭住址:");
    257                     scanf("%s",&p1->home);
    258                     break;
    259             }
    260             printf("========修改成功========
    ");
    261             break;
    262         }
    263         p1=p1->next;
    264     }
    265     if(p1==NULL)//找完了,没有找到
    266     {
    267         printf("没有找到该人信息
    ");
    268         printf("========修改失败========
    ");
    269     }
    270 }
    271 void save(stu *p1)//保存数据
    272 {
    273     printf("========保存数据========
    ");
    274     FILE *fp;
    275     char file[15];
    276     printf("请输入文件名:");
    277     scanf("%s",file);
    278     if((fp=fopen(file,"w"))==NULL)//打开文件,若没有此文件可以新建立
    279     {
    280         printf("cannot open this file
    ");//无法建立新文件
    281         exit(0);//正常运行程序并退出程序
    282     }
    283     fprintf(fp,"名字	性别	工作单位	手机	住宅号码	E-Mail	家庭住址
    ");
    284     while(p1!=NULL)
    285     {
    286         fprintf(fp,"%s	",p1->name);
    287         fprintf(fp,"%s	",p1->wm);
    288         fprintf(fp,"%s	",p1->work);
    289         fprintf(fp,"%s	",p1->stel);
    290         fprintf(fp,"%s	",p1->htel);
    291         fprintf(fp,"%s	",p1->mail);
    292         fprintf(fp,"%s
    ",p1->home);
    293         p1=p1->next;
    294     }
    295     printf("========保存成功========
    ");
    296     fclose(fp);//关闭文件,这个要记得
    297 }
    298 int main(void)
    299 {
    300     int n;
    301     screen();
    302     while(1)
    303     {
    304         printf("请输入你的选择(1~9):");
    305         scanf("%d",&n);
    306         if(n<1||n>9)
    307         {
    308             printf("输入有误!");
    309             continue;
    310         }
    311         switch(n)
    312         {
    313         case 1:
    314             input();
    315             break;
    316         case 2:
    317             look(head);
    318             break;
    319         case 3:
    320             insert();
    321             break;
    322         case 4:
    323             deleted();
    324             break;
    325         case 5:
    326             find(head);
    327             break;
    328         case 6:
    329             update(head);
    330             break;
    331         case 7:
    332             save(head);
    333             break;
    334         case 8:
    335             screen();
    336             break;
    337         case 9:
    338             printf("===============欢迎你再次使用通讯录系统===============
    ");
    339             exit(1);//退出系统
    340             break;
    341         }
    342     }
    343 }

    ———————————————————————————————————————————————————————————————————————

    付出

    凌晨四点的太阳:

    Kobe:Do you know what Los Angeles looks like at four in the morning?

    “I don't know. What do you think of Los Angeles at four every morning.”

    Kobe:Full of stars, few lights, few pedestrians.

  • 相关阅读:
    关于excel导入、导出(POI)
    关于上传图片和显示
    关于sql连接查询(内联、左联、右联、全联)
    关于面试问题
    关于excel导出
    响应式布局和自适应布局的不同
    关于时间范围查询
    HDU 6166 Senior Pan(二进制分组+最短路)
    HUAS 2017暑假第六周比赛-题解
    AtCoder Regular Contest 081
  • 原文地址:https://www.cnblogs.com/zhaohongjie/p/12751232.html
Copyright © 2011-2022 走看看