C语言:通讯录以及学生管理系统(录入信息、排序功能、查询信息、插入信息、删除信息、修改信息、查看信息)适合初学者阅读(无指针)

创建一个最多包含50人的通讯录(包含姓名、性别、年龄、电话),实现以下功能:

  1. 录入信息:能够实现通讯数据的录入;
  2. 排序功能:能够按照年龄从小到大进行排序;
  3. 查询信息:根据输入的姓名查找并输出其相关全部信息;
  4. 插入信息:插入某人的信息,插入后仍然保持通讯录排好的顺序;
  5. 删除信息:输入某人的姓名,可以从通讯录中删除该人;
  6. 修改信息:可以修改某人的特定信息,如电话;
  7. 查看信息:查看整个通讯录的信息。

实验目的及其要求:

  1. 掌握结构体变量的概念与应用;
  2. 熟悉结构体在内存中的存储方式;
  3. 掌握结构体变量作为函数参数与返回值的程序设计方法;
  4. 熟悉结构体数组的运用。

头文件

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

全局变量定义
int n=50;

函数体声明
void menu();
struct student input();
void enter(struct student stu[]);
void sort(struct student stu[]);
void search(struct student stu[]);
void insert(struct student stu[]);
void delete1(struct student stu[]);
void revise(struct student stu[]);
void display(struct student stu[]);

结构体定义 

struct student
{
    char name[100];
    int gender;
    int age;
    char telephone[100];
}stu[100];

主函数

int main()
{
    while(1)
    {
        int ch;
        menu();
        printf("Please Input your choice:");
        scanf("%d",&ch);
        switch(ch)
        {
            case 1:enter(stu);break;
            case 2:sort(stu);break;
            case 3:search(stu);break;
            case 4:insert(stu);break;
            case 5:delete1(stu);break;
            case 6:revise(stu);break;
            case 7:display(stu);break;
            case 0:return 0; 
        }
    }
}

菜单函数

void menu() 
{
    printf(" ______________________________________________________________________\n");
    printf("|**********************┍ -----------------------┑ *********************|\n");
    printf("|**********************   欢迎使用通信管理系统    *********************|\n");
    printf("|**********************┕------------------------┙ *********************|\n");
    printf("|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx菜单xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|\n");
    printf("|======================================================================|\n");
    printf("|.......      1.录入信息         ......         2.排序功能      .......|\n");
    printf("|.......      3.查询信息         ......         4.插入信息      .......|\n");
    printf("|.......      5.删除信息         ......         6.修改信息      .......|\n");
    printf("|.......      7.查看信息         ......         0.退出系统      .......|\n");
    printf("|______________________________________________________________________|\n");
}

输入信息函数

struct student input()
{
    struct student stu;
    printf("input name\n");
    gets(stu.name);
    printf("input gender 1 or 0\n");
    scanf("%d",&stu.gender);
    printf("input age\n");
    scanf("%d",&stu.age);    
    getchar();
    printf("input telephone\n");
    gets(stu.telephone);
    return stu;
}

1、录入:通讯录使用前的信息录用函数

void enter(struct student stu[])
{
    int i;
    getchar();
    for(i=0;i<n;i++)
    {
        stu[i]=input();
        if(i<n)
            printf("\n\nnext student\n\n\n");
    }
    printf("录入成功!!!!\n\n");
}

2、排:按照年龄从小到大进行排序

void sort(struct student stu[])
{
    int i,j;
    struct student t={0};
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(stu[i].age>stu[j].age)
            {
                t=stu[i];
                stu[i]=stu[j];
                stu[j]=t;
            }
        }
    }
    printf("排序成功!!!!\n\n");
}

3、查:根据输入的姓名查找并输出其相关全部信息

void search(struct student stu[])
{
    int i,k,flag=0;
    char name1[100];
    getchar();
    printf("input search's name\n");
    gets(name1);
    for(i=0;i<n;i++)
    {
        if(strcmp(stu[i].name,name1)==0)
        {
            k=i;
            flag=1; 
            break;
        }
    }
    if(flag==1)
    {
        printf("name    gender    age    telephone\n");
        printf("%-8s",stu[i].name);
        printf("%-10d",stu[i].gender);
        printf("%-7d",stu[i].age);
        printf("%-15s",stu[i].telephone);
        printf("\n");
        printf("查询成功!!!!\n\n");
    }
    else
        printf("未查询到该联系人的信息\n");
}

4、增:插入某人的信息,插入后仍然保持通讯录排好的顺序

void insert(struct student stu[])
{
    int i;
    printf("putchar message\n");
    getchar();
    stu[n]=input();
    printf("插入成功!!!!\n\n");
    n+=1;
    sort(stu);
}

5、删:输入某人的姓名,可以从通讯录中删除该人

void delete1(struct student stu[]) 
{
    int i,k,j,flag=0;
    char name1[100];
    getchar();
    printf("input delete1's name\n");
    gets(name1);
    for(i=0;i<n;i++)
    {
        if(strcmp(stu[i].name,name1)==0)
        {
            k=i;
            flag=1;
            break;
        }
    }
    if(flag==1)
    {
        for(j=k;j<n-1;j++)
        {
            stu[j]=stu[j+1];
        }
        n-=1;
        printf("删除成功!!!!\n\n");
    }
    else
        printf("删除失败!!!!\n\n");
}

6、改:可以修改某人的特定信息,如电话。

void revise(struct student stu[])
{
    int i,x,k,flag=0;
    char name1[100];
    getchar();
    printf("input revise's name\n");
    gets(name1); 
    for(i=0;i<n;i++)
    {
        if(strcmp(stu[i].name,name1)==0)
        {
            k=i;
            flag=1;
            break;
        }
    }
    if(flag==1)
    {
        printf("putchar revise message\n");
        printf("1、name 2、gender 3、age 4、telephone\n");
        scanf("\n%d",&x);
        switch(x)
        {
            case 1:
            {
                printf("Please input new name:\n");
                scanf("%s",&stu[k].name);
                break;
            }
            case 2:
            {
                printf("Please input new gender:\n");
                scanf("%d",&stu[k].gender);
                break;
            }
            case 3:
            {
                printf("Please input new age:\n");
                scanf("%d",&stu[k].age);
                break;
            }        
            case 4:
            {
                printf("Please input new telephone:\n");
                scanf("%s",&stu[k].telephone);
                break;
            }
        }
        printf("修改成功!!!!\n\n");
    }
    else
        printf("输入有误!!!!\n\n");
}

7、看:查看学生管理系统信息

void display(struct student stu[])
{
    int i;
    printf("name    gender    age    telephone\n");
    for(i=0;i<n;i++)
    {
        printf("%-8s",stu[i].name);
        printf("%-10d",stu[i].gender);
        printf("%-7d",stu[i].age);
        printf("%-15s",stu[i].telephone);
        printf("\n");
    }
    printf("查看完毕!!!!\n\n");
}

写的期间出现的BUG及技巧:

1、利用结构体变量作为函数的参数和返回值;

2、scanf函数缓冲区,利用getchar()或者scanf()内写上’\n'去吸收‘\n';(鸣谢xiaowu..投食的知识点)

3、利用if语句、开关变量来判断是否功能实现,避免进入死循环;

4、结构体变量定义长度,避免输出时出现乱码;

5、利用strcmp函数比较输入的信息和结构体数组信息,以此判断是否进入相应功能;

菜单设计来源于 KIN布,如有侵权,联系删除。

上一篇:Kubernetes——K8s 核心概念和集群架构组件


下一篇:WINCC中使用Opcascade