【结课小作业】C语言:通讯录以及学生管理系统,适合初学者阅读(无指针)

本文档详细介绍了如何创建一个最多容纳50人的通讯录管理系统,包括结构体定义、主函数、菜单功能和各个操作函数,如录入、排序、查询、插入、删除、修改和查看信息。通过结构体变量作为函数参数和返回值,实现了通讯录信息的管理,并提供了防止缓冲区问题的处理。此外,还给出了功能实现的技巧和注意事项。
摘要由CSDN通过智能技术生成

目录

实验目的及其要求:

引用头文件、全局变量定义以及函数声明;

结构体定义 

主函数 

菜单函数

输入信息函数

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

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

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

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

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

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

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

BUG及技巧:


创建一个最多包含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[])//1、录入:通讯录使用前的信息录用函数
{
    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[])//2、排:按照年龄从小到大进行排序
{
    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[])//3、查:根据输入的姓名查找并输出其相关全部信息
{
    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[])//4、增:插入某人的信息,插入后仍然保持通讯录排好的顺序
{
    int i;
    printf("putchar message\n");
    getchar();
    stu[n]=input();
    printf("插入成功!!!!\n\n");
    n+=1;
    sort(stu);
}

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

void delete1(struct student stu[]) //5、删:输入某人的姓名,可以从通讯录中删除该人
{
    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[])//6、改:可以修改某人的特定信息,如电话。
{
    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[])//7、看:查看学生管理系统信息
{
    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布,如有侵权,联系删除。

设计一个《学生通讯录管理系统》,在动态链表程序的基础上,设计要求如下 (必须使用结构体和链表等数据结构) 1建立文件 存储文件使用指定文件名或默认文件名; 可以不保存输入记录,但需要确认是否保存输入记录 如果已有文件,只能在其后追加; 新增记录可以不存入原文件中,以可以用原来的文件覆盖内存的内容; 可以将多个个文件记录合并到一个文件中; 2文件的存取和显示 可以单独存取文件; 可以随时显示内存中记录的全部内容; 可以直接存取默认文件或指定文件; 3删除记录 可以按“姓名”或“电话”方式删除记录并更新内存链表内容; 能给出被删除的信息,输出没有找到的信息; 如果已经是空表,上出时应给出信息并返回主菜单; 如果没有要删除的信息,输出没有找到的信息; 删除操作仅限于内存,只有执行记录时,才能覆盖原记录; 4查询记录 可以按“姓名”或“电话”或“宿舍”方式查询记录 能给出查询记录的信息; 如果查询的信息不存在,输出没有找到的信息; 5 整体功能 a可以随时检索、删除、或增加新记录,保存或取消新的记录 b使姓名可由16位字符和数字的混合编码组成 c使电话号码可由18位字符和数字组成 d将输出信息加上输出信息信息栏,例如 姓名 电话 性别 年龄 生日 宿舍 李四 1234 男 21 7月1日 东二333 e使用菜单实现功能的正确的选择 f 所有节点信息都是动态生成。 6测试程序 应列出测试大纲对程序进行测试; 应保证测试用例测试到程序的各种边缘情况
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胖虎不秃头

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

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

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

打赏作者

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

抵扣说明:

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

余额充值