用c语言编写校园出入管理系统

一、总体介绍

  1. 项目名称:校园出入管理系统
  2. 项目简介: 随着信息化时代的到来,人员信息管理都趋向智能化、系统化。为方便进出校园信
    息的管理,设计与开发一个校园出入管理系统。 该系统基本信息包括:人员身份、姓名、编号、联系方式、身份证号、出/入校,
    出/入校时间。人员身份分为学生、教职工和其他三种类型;人员身份为学生时编号为 学号,教职工的编号是职工号,其他身份编号填无;出/入校用 0/1 表示,0 代表出校, 1 代表入校;出/入校时间格式为年/月/日。
    二、具体要求
  3. 系统功能要求
    以菜单的方式完成以下功能,菜单形式参考下图。

(1)录入出入校园人员信息
提示用户按一定格式以及需要输入的各项信息。
(2)保存出入校园人员信息
将人员信息存入文件,并提示保存是否成功。
(3)浏览出入校园人员信息 在屏幕上显示所有出入校园人员信息,并注意将各项数据对齐,若无信息,则给出
相关提示。
(4)查询出入校园人员信息
提示用户可分别按照人员身份、姓名、出/入校进行信息查询,并根据用户提供的 选择进行查询结果显示,下图仅供参考。
(5)增加出入校园人员信息 提示用户按一定格式输入要增加的出入校园人员信息,并提示是否添加成功。 (6)删除出入校园人员信息 提示用户输入姓名、身份证号、出/入校、出/入校时间,根据输入确定要删除的人
员信息,若没有该人员信息,则提示系统没有该人员信息;如有,先输入该人员的全部

信息,后提示用户是否确认删除该数据 y/n? 输入 y 后则删除人员信息,并提示相应信 息。下图仅供参考。
(7)修改出入校园人员信息
提示用户输入姓名、身份证号、出/入校、出/入校时间,根据输入确定要修改的人 员信息,若没有该人员信息,则提示系统没有该人员信息;若有,则先输出该人员的全 部信息,并询问用户修改哪项信息,选择后,输入新信息,并提示用户确实要修改吗 y/n?输入 y 后则修改人员信息。下图仅供参考。
注意:对于增加、删除、修改的人员信息均需更新保存至文件中,并提示保存是否 成功。
(8)统计出入校园人员信息
提示用户输入需要统计的出校信息或入校信息,输入 0 或 1,然后对出校或入校人 员信息进行统计,按人员身份进行统计人数,并输出统计结果以及统计的所有人员信 息。下图仅供参考。
(9)按出入校园人员信息进行排序 按姓名对出入校园人员信息进行升序显示,同名人员按入校时间进行升序显示。 (10)退出

提示用户是否退出该系统。
2. 程序设计要求 (1)要合理使用枚举、结构体、结构体数组、结构体指针访问数组。 (2)逻辑独立的功能定义在函数中,并利用指针进行参数传递。 (3)要有合理提示,例如修改、删除需提示确认。 (4)考虑程序鲁棒性,对不合法数据要有错误处理机制。 (5)所有数据保存在文件中。

img

img

img

img

显示数据的时候做了一下优化,入校/出校不是显示的0/1,而是直接用中文显示的,看着更直观。
运行结果:
(1)

img

(2)

img

(3)

img

(4)

img

(5)

img

(6)

img

(7)

img

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OUT_SCHOOL (int)0
#define IN_SCHOOL (int)1

//身份类型
enum eType
{
    e_student=1,
    e_teacher=2,
    e_other
};

//日期
typedef struct _date
{
    int y,m,d;
}Date;

typedef struct _person
{
    eType type;//人员身份
    char name[20];//姓名
    char id[10];//编号 不能超过9位数
    char phone[12];//联系方式
    char sfz[20];//身份证号
    int op; //出/入校
    Date time;
}Person;

void save(Person ps[],int n);//先声明一下

int menu()
{
    int op;
    system("cls"); //清屏
    printf("************欢迎使用校园出入管理系统**************\n");
    printf("--------------------------------------------------\n");
    printf("---------1.录入出入校园人员信息-------------------\n");
    printf("---------2.保存出入校园人员信息-------------------\n");
    printf("---------3.浏览出入校园人员信息-------------------\n");
    printf("---------4.查询出入校园人员信息-------------------\n");
    printf("---------5.增加出入校园人员信息-------------------\n");
    printf("---------6.删除出入校园人员信息-------------------\n");
    printf("---------7.修改出入校园人员信息-------------------\n");
    printf("---------8.统计出入校园人员信息-------------------\n");
    printf("---------9.对出入校园人员信息进行排序-------------\n");
    printf("---------10.退出----------------------------------\n");
    printf("--------------------------------------------------\n");
    printf("*****************谢谢使用*************************\n");
    printf("请选择(1-10): ");
    scanf("%d",&op);
    return op;
}

//1.录入信息
int input(Person ps[],int n)
{
    int flag = 0;
    int t;
    while(1)
    {
        system("cls");//清屏
        while(1)
        {
            printf("请输入人员身份(1.学生 2.教职工 3.其他):");
            scanf("%d",&t);
            if(t == 1)
            {
                ps[n].type = e_student;
                printf("请输入学号:");
                scanf("%s",ps[n].id);
                break;
            }else if(t == 2)
            {
                ps[n].type = e_teacher;
                printf("请输入教职工号:");
                scanf("%s",ps[n].id);
                break;
            }else if(t == 3)
            {
                ps[n].type = e_other;
                ps[n].id[0] = 0;
                break;
            }else
                printf("输入错误!");
        }
        printf("请输入姓名:");
        scanf("%s",ps[n].name);
        printf("请输入联系方式:");
        scanf("%s",ps[n].phone);
        printf("请输入身份证号:");
        scanf("%s",ps[n].sfz);
        printf("0.出校 1.入校:");
        scanf("%d",&ps[n].op);
        if(ps[n].op == OUT_SCHOOL)
            printf("请输入离校时间(YYYY/MM/DD):");
        else
            printf("请输入入校时间(YYYY/MM/DD):");
        scanf("%d/%d/%d",&ps[n].time.y,&ps[n].time.m,&ps[n].time.d);

        printf("录入成功!\n");
        n++;
        while(1)
        {
            printf("是否继续录入(1.是 0.否):");
            scanf("%d",&flag);
            if(flag == 0 || flag == 1)
                break;
        }
        if(flag == 0)
            break;

    }
    save(ps,n); //保存信息
    return n;
}

//2.保存
void save(Person ps[],int n)
{
    FILE* fp = fopen("data.txt","w");
    //system("cls");//清屏
    for(int i = 0;i<n;i++)
    {
        if(ps[i].type == e_student)
            fprintf(fp,"1 %s %s %s %s %d %d %d %d\n",ps[i].name,ps[i].id,ps[i].phone,ps[i].sfz,ps[i].op,ps[i].time.y,ps[i].time.m,ps[i].time.d);
        else if(ps[i].type == e_teacher)
            fprintf(fp,"2 %s %s %s %s %d %d %d %d\n",ps[i].name,ps[i].id,ps[i].phone,ps[i].sfz,ps[i].op,ps[i].time.y,ps[i].time.m,ps[i].time.d);
        else
            fprintf(fp,"1 %s %s %s %s %d %d %d %d\n",ps[i].name,"无",ps[i].phone,ps[i].sfz,ps[i].op,ps[i].time.y,ps[i].time.m,ps[i].time.d);
    }
    fclose(fp);
    printf("数据已保存到data.txt中!\n");
    system("pause");
}


//显示单条信息
void showSingle(Person ps)
{
    if(ps.type == e_student)
    {
        if(ps.op == OUT_SCHOOL)
            printf("%-6s %-10s %-9s %s %s %s %d/%d/%d\n","学生",ps.name,ps.id,ps.phone,ps.sfz,"出校",ps.time.y,ps.time.m,ps.time.d);
        else
            printf("%-6s %-10s %-9s %s %s %s %d/%d/%d\n","学生",ps.name,ps.id,ps.phone,ps.sfz,"入校",ps.time.y,ps.time.m,ps.time.d);
    }
    else if(ps.type == e_teacher)
    {
        if(ps.op == OUT_SCHOOL)
            printf("%-6s %-10s %-9s %s %s %s %d/%d/%d\n","教职工",ps.name,ps.id,ps.phone,ps.sfz,"出校",ps.time.y,ps.time.m,ps.time.d);
        else
            printf("%-6s %-10s %-9s %s %s %s %d/%d/%d\n","教职工",ps.name,ps.id,ps.phone,ps.sfz,"入校",ps.time.y,ps.time.m,ps.time.d);

    }else
    {
        if(ps.op == OUT_SCHOOL)
            printf("%-6s %-10s %-9s %s %s %s %d/%d/%d\n","其他",ps.name,"无",ps.phone,ps.sfz,"出校",ps.time.y,ps.time.m,ps.time.d);
        else
            printf("%-6s %-10s %-9s %s %s %s %d/%d/%d\n","其他",ps.name,"无",ps.phone,ps.sfz,"入校",ps.time.y,ps.time.m,ps.time.d);
    }
}

//3.浏览
void show(Person ps[],int n)
{
    system("cls");//清屏
    for(int i = 0;i<n;i++)
    {
        showSingle(ps[i]);
    }
    system("pause");
}

//4.查询
void search(Person ps[],int n)
{
    int i,t;
    int op;
    char sel;
    char tmp[20];
    int flag = 0;
    while(1) //多次操作
    {
        system("cls");
        flag = 0;
        rewind(stdin);
        printf("A.按人员身份查询\n");
        printf("B.按姓名查询\n");
        printf("C.按出/入校查询\n");
        printf("D.退出\n");
        printf("请选择(A-D):");
        sel = getchar();
        getchar();
        switch(sel)
        {
        case 'A':
            printf("请输入人员身份(1.学生 2.教职工 3.其他):");
            scanf("%d",&t);
            for(i=0;i<n;i++)
            {
                if(ps[i].type == t)
                {
                    flag = 1;
                    showSingle(ps[i]);
                }
            }
            if(flag == 0)
                printf("未找到符合条件的人员信息\n");
            break;
        case 'B':
            printf("请输入人员姓名:");
            scanf("%s",tmp);
            for(i=0;i<n;i++)
            {
                if(strcmp(ps[i].name,tmp) == 0)
                {
                    flag = 1;
                    showSingle(ps[i]);
                }
            }
            if(flag == 0)
                printf("未找到符合条件的人员信息\n");
            break;
        case 'C':
            printf("1.出校  2.入校 \n请选择:");
            scanf("%d",&op);
            for(i=0;i<n;i++)
            {
                if(ps[i].op == op)
                {
                    flag = 1;
                    showSingle(ps[i]);
                }
            }
            if(flag == 0)
                printf("未找到符合条件的人员信息\n");
            break;
        case 'D':
            return ;

        }
        system("pause");
    }
}
//5.增加人员信息,input函数中可以修改信息数量,所以这个功能,直接调用input函数即可
int add(Person ps[],int n)
{
    return input(ps,n);
}
//6.删除
int del(Person ps[],int n)
{
    int i,j;
    char name[20],sfz[20];
    int op;
    int y,m,d;
    char ch;
    system("cls");//清屏
    rewind(stdin);//清空输入缓存
    printf("输入姓名、身份证号、出/入校、出/入校时间: ");
    scanf("%s %s %d %d/%d/%d",name,sfz,&op,&y,&m,&d);
    for(i=0;i<n;i++)
    {
        if(strcmp(ps[i].name,name)==0 && strcmp(ps[i].sfz,sfz)==0 && ps[i].op==op && ps[i].time.y ==y && ps[i].time.m ==m && ps[i].time.d ==d)
        {
            showSingle(ps[i]);
            break;
        }
    }
    if(i==n)
    {
        printf("没有该人员信息\n");
        system("pause");
    }
    else
    {
        while(1)
        {
            printf("确认删除(y/n)? ");
            rewind(stdin);
            ch = getchar();
            if(ch =='y' || ch=='Y')
            {
                for(j=i;j<n-1;j++)
                    ps[j] = ps[j+1];
                printf("删除成功!\n");
                n--;
                break;
            }
        }
        save(ps,n);
    }
    
    return n;
}

//7.修改
void change(Person ps[],int n)
{
    int i,j,t;
    char name[20],sfz[20];
    int op;
    int y,m,d;
    char ch;
    system("cls");//清屏
    rewind(stdin);//清空输入缓存
    printf("输入姓名、身份证号、出/入校、出/入校时间: ");
    scanf("%s %s %d %d/%d/%d",name,sfz,&op,&y,&m,&d);
    for(i=0;i<n;i++)
    {
        if(strcmp(ps[i].name,name)==0 && strcmp(ps[i].sfz,sfz)==0 && ps[i].op==op && ps[i].time.y ==y && ps[i].time.m ==m && ps[i].time.d ==d)
        {
            showSingle(ps[i]);
            break;
        }
    }
    if(i==n)
    {
        printf("没有该人员信息\n");
        system("pause");
    }
    else
    {
        rewind(stdin);
        while(1)
        {
            printf("是否修改身份类型(y/n):");
            ch = getchar(); getchar();
            if(ch =='y' || ch=='Y')
            {
                printf("请输入人员身份(1.学生 2.教职工 3.其他):");
                scanf("%d",&t);
                if(t==1)
                    ps[i].type = e_student;
                else if(t==2)
                    ps[i].type = e_teacher;
                else if(t == 3)
                    ps[i].type = e_other;
                break;
            }
        }
        rewind(stdin);
        printf("是否修改姓名(y/n):");
        ch = getchar(); getchar();
        if(ch =='y' || ch=='Y')
        {
            printf("请输入姓名:");
            scanf("%s",ps[i].name);
        }
        rewind(stdin);
        if(ps[i].type == e_student)
        {
            printf("是否修改学号(y/n):");
            ch = getchar(); getchar();
            if(ch =='y' || ch=='Y')
            {
                printf("请输入学号:");
                scanf("%s",ps[i].id);
            }
        }else if(ps[i].type == e_teacher)
        {
            printf("是否修改教职工编号(y/n):");
            ch = getchar(); getchar();
            if(ch =='y' || ch=='Y')
            {
                printf("请输入教职工编号:");
                scanf("%s",ps[i].id);
            }
        }

        rewind(stdin);
        printf("是否修改联系方式(y/n):");
        ch = getchar(); getchar();
        if(ch =='y' || ch=='Y')
        {
            printf("请输入联系方式:");
            scanf("%s",ps[i].phone);
        }

        rewind(stdin);
        printf("是否修改身份证号(y/n):");
        ch = getchar(); getchar();
        if(ch =='y' || ch=='Y')
        {
            printf("请输入身份证号:");
            scanf("%s",ps[i].sfz);
        }

        rewind(stdin);
        printf("是否修改出/入校(y/n):");
        ch = getchar(); getchar();
        if(ch =='y' || ch=='Y')
        {
            printf("请输入0.出校 / 1.入校:");
            scanf("%d",&ps[i].op);
        }

        rewind(stdin);
        printf("是否修改出/入校时间(y/n):");
        ch = getchar(); getchar();
        if(ch =='y' || ch=='Y')
        {
            printf("请输入出入校时间(YYYY/MM/DD):");
            scanf("%d/%d/%d",&ps[i].time.y,&ps[i].time.m,&ps[i].time.d);
        }
        printf("修改成功!\n");
        save(ps,n);
    }
}


//统计
void tongji(Person ps[],int n)
{
    int i;
    int a[3]={0};
    int op;
    system("cls");
    printf("输入0.出校  1.入校:");
    scanf("%d",&op);
    for(i=0;i<n;i++)
    {
        if(ps[i].op == op)
        {
            if(ps[i].type == e_student)
                a[0]++;
            else if(ps[i].type == e_teacher)
                a[1]++;
            else if(ps[i].type == e_other)
                a[2]++;
        }
    }
    if(op == OUT_SCHOOL)
        printf("出校统计结果: ");
    else
        printf("入校统计结果: ");
    printf("学生%d人,教职工%d人,其他人%d人\n",a[0],a[1],a[2]);
    for(i=0;i<n;i++)
    {
        if(ps[i].op == op)
        {
            showSingle(ps[i]);
        }
    }
    system("pause");
}

//比较时间
int cmp(Date d1,Date d2)
{
    if(d1.y < d2.y)
        return -1;
    else if(d1.y > d2.y)
        return 1;
    else
    {
        if(d1.m < d2.m)
            return -1;
        else if(d1.m > d2.m)
            return 1;
        else
        {
            if(d1.d < d2.d)
                return -1;
            else if(d1.d > d2.d)
                return 1;
            else
                return 0;
        }
    }
}


//9.排序
void sortByName(Person ps[],int n)
{
    int i,j;
    Person t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(strcmp(ps[j].name,ps[j+1].name)> 0)
            {
                t = ps[j];
                ps[j] = ps[j+1];
                ps[j+1] = t;
            }else if(strcmp(ps[j].name,ps[j+1].name)== 0)
            {
                if(ps[j].op == IN_SCHOOL && ps[j+1].op == IN_SCHOOL)
                {
                    //按入校时间排序
                    if(cmp(ps[j].time,ps[j+1].time) > 0)
                    {
                        t = ps[j];
                        ps[j] = ps[j+1];
                        ps[j+1] = t;
                    }
                }
                
            }
        }
    }
    printf("排序后:\n");
    show(ps,n);
}



int main()
{
    int op;
    Person ps[500]; //保存所有信息
    int n = 0; //信息条数
    while(1)
    {
        op = menu();
        switch(op)
        {
        case 1: n = input(ps,n);break;//录入
        case 2: save(ps,n); break;//保存
        case 3: show(ps,n);break;//浏览
        case 4: search(ps,n);break;//查询
        case 5: n = add(ps,n);break;//增加
        case 6: n = del(ps,n);break;//删除
        case 7: change(ps,n);break;//修改
        case 8: tongji(ps,n);break;//统计
        case 9:sortByName(ps,n);break;//排序
        case 10:return 0;//退出
        }
    }
    
    return 0;
}


这多

没个大几百行代码怕是搞不下来哦

有时间限制没有啊???

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

基于c语言的校园外来人员进出监控与管理系统
如有帮助,望采纳

#pragma once
#include<stdio.h>
#include<Windows.h>
#include<conio.h>
#include<time.h>
#include<string.h>

#define N 10 //代表最多的管理员数量
#define M 300 //容纳的最多的申请

//申请人或领队人信息: 缺少的信息统一为 -1 或‘N'
typedef struct 
{
    int is_team;//判断是否是团队入校:0---个人,1---团队
    char name[20];//姓名
    int sex;//性别:男---1,女---0
    char telephone[20];//联系电话
    char id_number[30];//身份证号
    char work[50];//工作单位
    int car_number[10];//车牌信息
    char surety_name[20];//担保人姓名
    char surety_phone[20];//担保人电话
    int health_code;//健康码:绿码---1,黄码---2,紫码---3,红码---4
    int health_cough;//是否身体有咳嗽发热: 有---1,无---0
    int in_danger_area;//是否在14天内到过疫区: 有---1,无---0
    char apply_in_time[20];//申请进入时间:格式为:2021/06/03/05/30或2021/06/03/12/50
    char apply_out_time[20];//申请出校时间
    char reason[30];//进校事由
    int apply_result;//申请是否通过:通过---1,驳回---0,未审批---2
    char real_in_time[20];//实际进入时间
    char real_out_time[20];//实际出校时间
}Guest;

//管理员信息
typedef struct 
{
    char user_name[30];//账号
    char password[30];//密码
}Admin;

void gotoxy(int, int);//将光标移动到指定位置
void hide();//隐藏光标

int menu();//菜单
void about();//介绍该系统
void administrator();//管理员登录
void guest();//访客登录
void write();//申请数据存盘
void read();//读取申请数据

//访客的功能函数
void request();//提出申请
void record_in();//记录进入时间
void record_out();//记录出校时间
void autoapprove();//自动审批

//管理员的功能函数
int check();//管理员登录验证
void add();//增加管理员
void seek();//查询界面
void approve();//审批
void data_seek();//按照日期查询
void info_seek();//按照人员信息查询

void name_seek();//按照申请人姓名查询
void id_seek();//申请人身份证号查询
void sex_seek();//申请人性别查询
void surety_seek();//担保人姓名查询
void telephone_seek();//申请人电话查询
void team_seek();//团队查询



https://blog.csdn.net/sheziqiong/article/details/126914463