C语言 用顺序表实现电话本的功能


简介:

  • 顺序表实现电话本的功能(C语言)
  • 电话本具有如下4个功能:
    1.创建一个电话本,电话本里面包含名字和电话号码
    2.在指定位置插入一个名字和电话号码
    3.在指定位置删除一个名字和电话号码
    4.打印电话本

//其中那个color函数是我为了美观加上去的,如果感觉不需要的话可以将代码中所有有关color的都删掉即可


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <windows.h>
using namespace std;
const int N = 1000+10;
int n;
struct Node
{
    char name[100];
    char number[20];  
};
typedef struct 
{
    struct Node* mylist;
    int len;
    int listsize;
}sqlist;

void Init(sqlist &s1);
void Creat(sqlist &s1);
void Delet(sqlist &s1);
void Add(sqlist &s1);
void Print(sqlist &s1);
void color(const unsigned short  color1);

int main()
{
    sqlist s1;
    Init(s1);
    color(10);
    printf("\n\n\n\n        --------------- WSM's phonetxt-------------------\n\n");
    printf("             |You could chose these ops:            |\n");
    printf("             |   1.Creat the phonetxt               |\n");
    printf("             |   2.Delet the member in the phonetxt |\n");
    printf("             |   3.Add the member in the phonetxt   |\n");
    printf("             |   4.Print the phonetxt               |\n");
    color(14);
    printf("\n\n\n\n     Now,you can enter an optiton:");

    int op;
    while(scanf("%d",&op)!=EOF)
    {
        if(op==1) Creat(s1);
        else if(op==2) Delet(s1);
        else if(op==3) Add(s1);
        else if(op==4) Print(s1);
        else 
        {
            color(4);
            printf("     You input is invalid,reinput please:)\n");
            color(14);
        }
        printf("\n     Now,you can enter an optiton:");
    }
    return 0;
}

void Init(sqlist &s1)
{
    s1.mylist = (Node *)malloc(100*sizeof(Node));
    s1.len = 0;
    s1.listsize = 100;
    return;
}
void Creat(sqlist &s1)
{
    s1.len = 0;
    cout<<"     how many numbers do you want to built:";
    scanf("%d",&n);
    cout<<"     please input their informations:"<<endl;
    for(int i=1;i<=n;i++)
    {
         printf("       input the %d person name:",i);
         scanf(" %s",s1.mylist[i-1].name);
         printf("       input the %d person phonenumber:",i);
         scanf(" %s",s1.mylist[i-1].number);
         s1.len++;
    }
    color(9);
    cout<<"     well done,the phonetxt has been created!!!"<<endl;
    color(14);
    return;
}

void Delet(sqlist &s1)
{
    cout<<"     please enter the number you want to delet:";
    heredelet:
    int x;
    scanf("%d",&x);
    if( x<1 || x>s1.len) 
    {
        color(4);
        cout<<"     sorry,your input is invalid,please input again:";
        color(14);
    goto heredelet;
    }

    struct Node *p,*q;
    p = &(s1.mylist[x-1]);
    q = s1.mylist + s1.len -1;
    for(++p;p<=q;++p) *(p-1) = *p;
    --s1.len;

    color(9);
    cout<<"     well done,the member has been deleted!!!"<<endl;
    color(14);
    return;
}
void Add(sqlist &s1)
{
    cout<<"     please enter the number you want to add:";
    hereadd:
    int x;
    scanf("%d",&x);
    if( x<1 || x>s1.len+1) 
    {
        color(4);
        cout<<"     sorry,your input is invalid,please input again:";
        color(14);
        goto hereadd;
    }

    struct Node cur;
    printf("       input the person name:");
    scanf(" %s",cur.name);
    printf("       input the person phonenumber:");
    scanf(" %s",cur.number);

    struct Node *p,*q;
    q = &(s1.mylist[x-1]);
    for(p=&(s1.mylist[s1.len-1]);p>=q;--p) *(p+1) = *p;
    *q = cur;
    ++s1.len;

    color(9);
    cout<<"     well done,the member has been added!!!"<<endl;
    color(14);
    return;
}
void Print(sqlist &s1)
{
    color(8);
    printf("        Name------phonenumber\n");

    struct Node *q = s1.mylist;
    for(q;q<s1.mylist+s1.len;q++)
    {
        printf("           %s       %s\n",q->name,q->number);
    }
    color(14);
    color(9);
    cout<<"     well done,the phonetxt is above!!!"<<endl;
    color(14);
    return;
}

void color(const unsigned short color1)
{        
    if(color1>=0&&color1<=15)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color1);
    else
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值