学生基本信息管理项目

设计目的

在完成C语言基础内容学习的基础上,结合数组、字符串、结构体与链表等内容,继续综合应用相关理论和编程技术,分析、设计并完成一个可应用的小项目。通过本项目,更为系统地建立知识的关联性,通过对问题的分析和实现方法的设计,进一步培养解决复杂工程问题的能力。

main函数

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
//打印菜单
void menu()
{
    printf("*******************************\n");
    printf("*******1.add     2.del   *******\n");
    printf("*******3.census  4.mod   ******\n");
    printf("*******5.search  6.print ******\n");
    printf("*********    0.exit    ********\n");
    printf("*******************************\n");
}
//枚举
enum Option
{
    exit,
    add,
    del,
    search,
    mod,
    sort,
    print,
    census
};
int main()
{
    int input = 0;
    //创建通讯录
    Contact con;
    //初始化数据表
    Init(&con);
    do
    {
        menu();
        printf("请选择\n");
        scanf("%d", &input);
        switch (input)
        {
        case exit:
            printf("退出通讯录\n");
            break;
        case add:
            printf("******************************\n");
            printf("******   《专业类型》    *****\n");
            printf("*******1.软件工程       ******\n");
            printf("*******2.计算机科学     ******\n");
            printf("*******3.数学           ******\n");
            printf("*******4.人工智能       ******\n");
            printf("******************************\n");
            Add(&con);
            break;
        case del:
            Delete(&con);
            break;
        case search:
            Query(&con);
            break;
        case mod:
            Modify(&con);
            break;
        case census://待完善
            break;
        case print:
            Output(&con);
            break;
        default:
            printf("请重新输入:\n");
            break;
        }
    }
    while (input);
    return 0;
}

源文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
//通过姓名查找学生
static int FindByName(Contact* pc, char name[])
{
    for (int i = 0; i < pc->length; i++)
    {
        if (strcmp(pc->data[i].name, name) == 0)
        {
            return i;
        }
    }
    return -1;
}

//初始化数据表
void Init(Contact* pc)
{
    pc->length = 0;
    memset(pc->data, 0, sizeof(pc->data));
}

//添加学生
void Add(Contact* pc)
{
    if (pc->length == NUM)
    {
        printf("通讯录已满,无法添加!\n");
        return;
    }
    //添加学生
    printf("请输入专业\n");
    scanf("%s", pc->data[pc->length].spec);
    printf("请输入学号\n");
    scanf("%s", pc->data[pc->length].Number);
    printf("请输入姓名\n");
    scanf("%s", pc->data[pc->length].name);
    printf("请输入年龄\n");
    scanf("%d", &(pc->data[pc->length].age));
    printf("请输入性别\n");
    scanf("%s", pc->data[pc->length].sex);
    printf("请输入入学分数\n");
    scanf("%f", &(pc->data[pc->length].score));
    pc->length++;
    printf("添加成功!\n");
}

//删除学生
void Delete(Contact* pc)
{
    char name[20] = { 0 };
    if (pc->length == 0)
    {
        printf("数据表为空!\n");
        return;
    }
    printf("请输入您要删除的学生\n");
    scanf("%s", name);
    int pos = FindByName(pc, name);
    //判断有无
    if (pos == -1)
    {
        printf("没有该学生!\n");
        return;
    }
    //删除学生
    int i = 0;
    for (i = pos; i < pc->length-1; i++)
    {
        pc->data[i] = pc->data[i + 1];
    }
    pc->length--;
    printf("删除成功!\n");
}

//查找学生
void Query(Contact* pc)
{
    char name[20] = { 0 };
    printf("请输入您要查找的学生姓名:\n");
    scanf("%s", name);
    int pos = FindByName(pc, name);
    //判断有无
    if (pos == -1)
    {
        printf("没有该学生人!\n");
        return;
    }
    //打印
    else
    {
        printf("专业:%s 学号:%d 姓名:%s 年龄:%d 性别:%c 入学分数:%.1f", pc->data[pos].spec, pc->data[pos].Number, pc->data[pos].name, pc->data[pos].age, pc->data[pos].score);
    }
}

//修改学生人
void Modify(Contact* pc)
{
    char name[20] = { 0 };
    printf("请输入您要修改的学生姓名:\n");
    scanf("%s", name);
    int pos = FindByName(pc, name);
    //判断有无
    if (pos == -1)
    {
        printf("没有该学生人!\n");
        return;
    }
    //添加学生
    else
    {
        printf("请输入专业\n");
        scanf("%s", pc->data[pc->length].spec);
        printf("请输入学号\n");
        scanf("%s", pc->data[pc->length].Number);
        printf("请输入姓名\n");
        scanf("%s", pc->data[pc->length].name);
        printf("请输入年龄\n");
        scanf("%d", &(pc->data[pc->length].age));
        printf("请输入性别\n");
        scanf("%s", pc->data[pc->length].sex);
        printf("请输入入学分数\n");
        scanf("%f", &(pc->data[pc->length].score));
    }
}


//打印学生
void Output(Contact* pc)
{
    for (int i = 0; i < pc->length; i++)
    {
        printf("专业:%s 学号:%d 姓名:%s 年龄:%d 性别:%c 入学分数:%.1f", pc->data[i].spec, pc->data[i].Number, pc->data[i].name, pc->data[i].age, pc->data[i].score);
    }
}
void census(Contact* pc)
{
    int i,a=b=c=d=m=w=sum1=sum2=0;
    double age,score;
    char s1[20]="软件工程",s2[20]="计算机科学",s3[20]="数学",s4[20]="人工智能";
    char s5[]="M",s6[]="W";
    for(i=0;i<pc->length;i++)
    {
        if(strcmp(pc->data[i].spec,s1)==0)
        {
            a++;
        }
        if(strcmp(pc->data[i].spec,s2)==0)
        {
            b++;
        }
        if(strcmp(pc->data[i].spec,s3)==0)
        {
            c++;
        }
        if(strcmp(pc->data[i].spec,s4)==0)
        {
            d++;
        }
        if(pc->data[i].sex=="M")
        {
            m++;
        }
        if(pc->data[i].sex=="W")
        {
            w++;
        }
    }
    for(i=0;i<pc->length;i++)
    {
        sum1=sum1+pc->data[i].age;
    }
    age=(sum*1.0)/pc->length;
    for(i=0;i<pc->length;i++)
    {
        sum2=sum2+pc->data[i].score;
    }
    score=(sum2*1.0)/pc->length;
    printf("\n%s专业人数为:%d,%s专业人数为:%d,%s专业人数为:%d,%s专业人数为:%d",s1,a,s2,b,s3,c,s4,d);
    printf("\n男生人数为:%d,女生人数为:%d",m,w);
    printf("\n学生平均年龄为:%.2lf,学生平均成绩为:%.2lf",age,score);
}

头文件

#ifndef CONTACT_H_INCLUDED
#define CONTACT_H_INCLUDED
#pragma once
#include<stdio.h>
#include<string.h>

#define NUM 100
//学生信息类型定义
typedef struct STU
{
	char spec[20];   //专业
    char Number[8];  //学号
    char name[20];   //姓名
    int age;         //年龄
    char sex;        // M 代表男性  W代表女性
    float score      // 入学分数
}STU;

//数据表类型定义
typedef struct Contact
{
	STU data[NUM];//存放添加的人员信息
	int length;//记录当前数据表人员个数
}Contact;

//初始化数据表
void Init(Contact*pc);

//添加以及录入学生信息
void Input(Contact* pc);

//删除学生信息
void Delete(Contact* pc);

//查找学生信息
void Query(Contact* pc);

//修改学生信息
void Modify(Contact* pc);

//打印学生信息
void Output(Contact* pc);
void census(Contact* pc);

#endif // CONTACT_H_INCLUDED

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值