一道关于学生档案的编程c语言

img


不太懂希望能帮帮我
这是关于学生档案的管理编程 关于那几个功能怎么实现我很不清楚 学结构体这章内容时有点晕 😭

参考代码如下:

img

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
    char sn[10];
    char name[10];
    char sex[3];
    char class[12];
}Student;
void input(Student *T,int n)//输入函数
{
    int i;
    printf("输入:学号 姓名 性别 班号(用空格隔开)\n");
    for(i=0;i<n;i++)
        scanf("%s%s%s%s",T[i].sn,T[i].name,T[i].sex,T[i].class);
}
void display(Student *T,int n)//输出函数
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%s\t%s\t%s\t%s\n",T[i].sn,T[i].name,T[i].sex,T[i].class);
    }
}
void sou(Student *T,int n)
{
    int i;
    char sn[10];
    printf("请输入学号:");
    scanf("%s", sn);
    for(i=0;i<n;i++)
    {
        if (strcmp(sn, T[i].sn)==0)
        {
              printf("%s\t%s\t%s\t%s\n",T[i].sn,T[i].name,T[i].sex,T[i].class);
            return;
        }
    }
    printf("没有找到\n");
}

int main()
{
    Student *T;//定义一个结构体类型指针T;
    int n;
    printf("录入学生人数:\n");
    scanf("%d",&n);
    T=(Student *)malloc(sizeof(Student)*n);
    input(T,n);//调用输入函数
    printf("\n");
    printf("输出信息:\n");
    display(T,n);//调用输出函数
    sou(T,n);
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

如果使用的是c语言编译器,把scanf_s改为scanf,如果用的是visual studio就不用改


#include"stdio.h"
#include"stdlib.h"
#define Max 100
#define SIZE 12
void showMenu()//菜单功能
{
    printf("\t*************************\n") ;
    printf("\t***** 1、添加联系人 *****\n") ;
    printf("\t***** 2、显示联系人 *****\n") ;
    printf("\t***** 3、姓名查找人 *****\n") ;
    printf("\t***** 4、学号查找人 *****\n") ;
    printf("\t***** 5、修改联系人 *****\n") ;
    printf("\t***** 6、删除联系人 *****\n") ;
    printf("\t***** 7、清空通讯录 *****\n") ;
    printf("\t***** 0、退出通讯录 *****\n") ;
    printf("\t*************************\n") ;
}
struct student
{
    char s_Name[SIZE];//学生姓名
    int  s_No;//学生学号
    int  s_Age;//学生年龄
    char s_Phone[SIZE];//电话号码
    char s_Class[SIZE];//所在班级
    int  s_Address[SIZE];//寝室地址
};
struct studentAddressBooks
{
    struct student S[Max];//创建学生通讯录数组
    int s_size = 0;//记录当前学生通讯录大小
};
void addStudent(studentAddressBooks* abc)//添加联系人
{
    if (abc->s_size >= Max)
    {
        printf("通讯录已满,添加失败\n");
    }
    else {
        printf("添加联系人名字  :\n");
        scanf_s("%s", &abc->S[abc->s_size].s_Name);
        printf("联系人学号为    :\n");
        scanf_s("%d",&abc->S[abc->s_size].s_No);
        printf("联系人年龄为    :\n");
        scanf_s("%d",&abc->S[abc->s_size].s_Age);
        printf("联系人电话      :\n");
        scanf_s("%s", abc->S[abc->s_size].s_Phone);
        printf("联系人所在班级为:\n");
        scanf_s("%s", abc->S[abc->s_size].s_Class);
        printf("联系人宿舍号为  :\n");
        scanf_s("%s", abc->S[abc->s_size].s_Address);
        printf("添加成功\n");
        //更新通讯录人数
        abc->s_size++;
        system("pause"); system("cls");
    }
}
void showStudent(studentAddressBooks* abc)
{
    if (abc->s_size == 0) printf("当前记录为空\n");
    else {
        for (int i = 0; i < abc->s_size; i++) {
            printf("姓名:   %s\t", abc->S[i].s_Name);
            printf("学号:   %d\t", abc->S[i].s_No);
            printf("年龄:   %d\t", abc->S[i].s_Age);
            printf("电话:   %s\t", abc->S[i].s_Phone);
            printf("所在班级:%s\t", abc->S[i].s_Class);
            printf("宿舍号: %s\t", abc->S[i].s_Address);
            printf("\n");
        }
    }
    system("pause"); system("cls");
}
int isExit1(studentAddressBooks* abc, char name[])//姓名判定通讯录是否有此人
{
    for (int i = 0; i < abc->s_size; i++)
    {
        if (*abc->S[i].s_Name == *name) return i;
    }
    return -1;
}
int isExit2(studentAddressBooks* abc, int Sno)//学号判定通讯录是否有此人
{
    for (int i = 0; i < abc->s_size; i++)
    {
        if (abc->S[i].s_No == Sno) return i;
    }
    return -1;
}
void nfindStudent(studentAddressBooks* abc)
{
    printf("输入要查找联系人的名字:\n");
    char name[SIZE]; scanf_s("%s",&name);
    int i = isExit1(abc, name);
    if (i != -1)
    {
        printf("姓名:   %s\t", abc->S[i].s_Name);
        printf("学号:   %d\t", abc->S[i].s_No);
        printf("年龄:   %d\t", abc->S[i].s_Age);
        printf("电话:   %s\t", abc->S[i].s_Phone);
        printf("所在班级:%s\t", abc->S[i].s_Class);
        printf("宿舍号: %s\t", abc->S[i].s_Address);
        printf("\n");
    }
    else {
        printf("查无此人\n");
    }
    system("pause"); system("cls");
}
void sfindStudent(studentAddressBooks* abc)
{
    printf("输入要查找联系人的学号:\n");
    int Sno=0; scanf_s("%d",&Sno);
    int i = isExit2(abc, Sno);
    if (i != -1)
    {
        printf("姓名:   %s\t", abc->S[i].s_Name);
        printf("学号:   %d\t", abc->S[i].s_No);
        printf("年龄:   %d\t", abc->S[i].s_Age);
        printf("电话:   %s\t", abc->S[i].s_Phone);
        printf("所在班级:%s\t", abc->S[i].s_Class);
        printf("宿舍号: %s\t", abc->S[i].s_Address);
        printf("\n");
    }
    else {
        printf("查无此人\n");
    }
    system("pause"); system("cls");
}
void modifyStudent(studentAddressBooks* abc)
{
    printf("输入要修改的联系人名字\n");
    char name[SIZE]; scanf_s("%s", &name);
    int v = isExit1(abc, name);
    if (v != -1)
    {
        printf("更改后联系人名字  :\n");
        scanf_s("%s", &abc->S[v].s_Name);
        printf("更改后联系人学号为    :\n");
        scanf_s("%d", &abc->S[v].s_No);
        printf("更改后联系人年龄为    :\n");
        scanf_s("%d", &abc->S[v].s_Age);
        printf("更改后联系人电话      :\n");
        scanf_s("%s", abc->S[v].s_Phone);
        printf("更改后联系人所在班级为:\n");
        scanf_s("%s", abc->S[v].s_Class);
        printf("更改后联系人宿舍号为  :\n");
        scanf_s("%s", abc->S[v].s_Address);
        printf("更改成功\n");
    }
    else {
        printf("查无此人\n");
    }
    system("pause"); system("cls");
}
void deleteStudent(studentAddressBooks* abc)
{
    if (abc->s_size == 0)
    {
        printf("当前记录为空\n");
    }
    else {
        printf("输入要删除的联系人:\n"); 
        char name[SIZE]; scanf_s("%s", &name);
        int v = isExit1(abc, name);
        if (v == -1) {
            printf("查无此人\n");
        }
        else if (v != -1) {
            for (int i = v; i < abc->s_size; i++)
            {
                abc->S[i] = abc->S[i + 1];
            }
            abc->s_size--;
            printf("删除成功\n");
        }
    }
    system("pause"); system("cls");
}
void clearStudent(studentAddressBooks* abc)
{
    abc->s_size = 0;
    printf("通讯录已清空\n");
    system("pause"); system("cls");
}
int main()
{
    
    //创建通讯录结构体变量
    studentAddressBooks abc;
    while (1) {
        showMenu();
        int select = 0;
        printf("请选择你的操作:");
        scanf_s("%d", &select);
        switch (select)
        {
        case 1://添加联系人
            addStudent(&abc);
            break;
        case 2://显示联系人
            showStudent(&abc);
            break;
        case 3://按照姓名查找联系人
        {
            nfindStudent(&abc);
        }
        break;
        case 4://按照学号查找联系人
        {
            sfindStudent(&abc);
        }
        break;
        case 5://修改联系人
            modifyStudent(&abc);
            break;
        case 6://删除联系人
        {
            deleteStudent(&abc);
        }//case 语句 里的代码多的话就用{}括起来,不报错
        break;
        case 7://清空通讯录
            clearStudent(&abc);
            break;
        case 0://退出通讯录
            printf("欢迎下次使用,祝您生活愉快\n"); return 0;  break;
        default:
            printf("请合理输入操作数0~7:\n");
            scanf_s("%d", &select);
            break;
        }
    }
}

多看看课本 肯定能写出来的
哪里出bug来了再来问
授人鱼不如授人以渔