C语言实习——用户管理系统(大一C语言实习)

该文详细描述了一个使用C语言编写的人员基本信息管理系统的设计思路和主要代码模块,包括用户登录、信息录入、查询、修改、删除等功能,以及数据的文件存储和读取。系统分为管理员登录模块和用户信息模块,采用结构体表示数据,并提供了相应的操作函数。
摘要由CSDN通过智能技术生成

选题:人员基本信息管理系统

调研、选择一个典型人员基本信息管理案例 (例如:流动人口管理、小区楼栋居民管理等),实现分片或楼栋为数据库的人员基本信息管理。信息包括:序号、姓名、年龄、性别、出生年月、籍贯、电话及E-mail等信息。

2、信息管理系统的功能

(1) 用户登录:输入用户名和密码,三次输入错误,则自动退出系统,否则显示系统菜单。

(2)设计主菜单:可重复品示系统功能的提示信息。

(3)输入/添加/插入记录:能够完成对任意一条记录输入、添加或插入数据表中,并保持到数据文件中。

(4) 显示、查询记录:根据用户要求按所给关键字显示、查询一个或多个相关联记录的各项信息。

(5)修改记录:并对确定的任意记录进行修改,在修改过程中,应显示

记录信息,给出确认提示,并对更新的记录信息进行文件保存。

(6)删除记录:可以删除数据表中的任一记录,在删除过程中,应显示

记录信息,给出确认信息,并对新的数据库信息进行文件保存。

(7)统计功能:对数据表中与某关键字匹配的相关记录进行数据统计(包括:总数、平均值、分段信息等)。

(8)排序:按某一关键字或某几个关键字的组合对记录进行排序。

  (9)退出:结束程序运行。

一、思路:

将系统分为 1、管理员登陆模块 2、用户信息模块

将两个模块所包涵是内容,分别用结构体进行表示。

题目中每个模块的内容分别使用函数实现

定义两个结构体数组,贯穿全局,用于与单个函数内单个结构体形成关联与联系。

在用文件进行管理员账号信息与用户信息的保存,方便下次调用!

二、代码模块:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PEOPLE 100
#define MAX_PERSONAL 20
struct Personal
{
    char account[30];
    char password[30];
};
struct Peoples
{
    char id[20],name[20],sex[10],addr[30],phone_num[30],E_mail[30];
    char birth[30];
    int age;
};
struct Peoples peoples[MAX_PEOPLE];
struct Peoples peoples_temp[MAX_PEOPLE];
int people_num=0;
struct Personal personals[MAX_PERSONAL];
struct Personal personals_temp[MAX_PERSONAL];
int personal_num=0;
void add_Code()//增加管理员账号
{
    if(personal_num>=MAX_PERSONAL)
    {
        printf("用户注册人数已满!\n");
        return;
    }
    struct Personal code;
    printf("请输入账号(学号):\n");
    scanf("%s",code.account);
    printf("请输入密码(学号密码):\n");
    scanf("%s",code.password);
    char mima[30];
    int index=-1;
    int i;
    for(i=3;i>0;i--)
    {
        printf("你还有%d次机会验证密码!\n",i);
        printf("请确认密码:\n");
        scanf("%s",mima);
        if(strcmp(code.password,mima)==0)
        {
            index=i;
            break;
        }
        else
        {
            printf("与前面密码不同,请重新输入:\n");
        }
    }
    if(index==-1)
    {
        printf("机会以用完,请退出系统!\n");
        return;
    }
    personals[personal_num]=code;
    personal_num++;
    printf("创建用户成功!\n");
}
void detate_Code()//删除管理员账号
{
    printf("请输入要删除的用户的账号:\n");
    char zhanghao[30];
    scanf("%s",zhanghao);
    printf("请输入要删除的用户的密码:\n");
    char mima[30];
    scanf("%s",mima);
    int i;
    int index=-1;
    for(i=0;i<personal_num;i++)
    {
        if(strcmp(personals[i].account,zhanghao)==0)
        {
           if(strcmp(personals[i].password,mima)==0)
           {
               index=i;
               break;
           }
        }
    }
    if(index==-1)
    {
        printf("未找到此用户!\n");
        return;
    }
    for(i=0;i<index;i++)
    {
        personals_temp[i]=personals[i];
    }
    for(i=index+1;i<personal_num;i++)
    {
        personals_temp[i-1]=personals[i];
    }
    personal_num--;
    for(i=0;i<personal_num;i++)
    {
        personals[i]=personals_temp[i];
    }
    printf("管理员账号删除成功!\n");
    FILE * fp;
    fp=fopen("D:\\c语言\\C语言文件\\cade2.txt","w");
    if(fp==NULL)
    {
        printf("文件夹为空!\n");
    }
    else
    {
        for(i=0;i<personal_num;i++)
        {
            fprintf(fp,"%s %s\n",personals[i].account,personals[i].password);
        }
    }
    fclose(fp);
}
void save_People()//保存用户信息到文件
{
    FILE * fp;
    int i;
    fp=fopen("D:\\people.txt","w");
    if(fp==NULL)
    {
        printf("文件夹为空!\n");
    }
    else
    {
        for(i=0;i<people_num;i++)
        {
            fprintf(fp,"%s %s %d %s %s %s %s %s\n", peoples[i].id, peoples[i].name, peoples[i].age, peoples[i].sex,peoples[i].birth,peoples[i].addr,peoples[i].phone_num,peoples[i].E_mail);
        }
    }
    fclose(fp);
    printf("文件保存成功!\n");
}
void load_People()//读取用户信息
{
    FILE *fp = fopen("D:\\people.txt", "r");
    int i=0;
    if(fp==NULL)
    {
        printf("文件为空!\n");
        return;
    }
    else
    {
        while(feof(fp)==0)
        {
            fscanf(fp,"%s %s %d %s %s %s %s %s\n",peoples[i].id, peoples[i].name, &peoples[i].age, peoples[i].sex,peoples[i].birth,peoples[i].addr,peoples[i].phone_num,peoples[i].E_mail);
            people_num++;
            i++;
        }
    }
    fclose(fp);
    printf("文件读取成功!\n");
}
void add_People()//添加人员!!
{
    struct Peoples people;
    if(people_num>=MAX_PEOPLE)
    {
        printf("人员已满,无法继续添加!\n");
        return;
    }
    printf("请输入人员序号:\n");
    scanf("%s",people.id);
    printf("请输入人员姓名:\n");
    scanf("%s",people.name);
    printf("请输入人员年龄:\n");
    scanf("%d",&people.age);
    printf("请输入人员性别:\n");
    scanf("%s",people.sex);
    printf("请输入人员出生年月:\n");
    scanf("%s",people.birth);
    printf("请输入人员籍贯:\n");
    scanf("%s",people.addr);
    printf("请输入人员电话:\n");
    scanf("%s",people.phone_num);
    printf("请输入人员电子邮箱:\n");
    scanf("%s",people.E_mail);
    peoples[people_num]=people;
    people_num++;
    printf("人员添加成功!\n");
}
void delete_People()//删除人员!!
{
    int i;
    printf("请输入要删除的人员编号:\n");
    char id[20];
    int index=-1;
    scanf("%s",id);
    for(i=0;i<people_num;i++)
    {
        if(strcmp(peoples[i].id,id)==0)
        {
            index=i;
            break;
        }
    }
    if(index==-1)
    {
        printf("删除人员不存在!\n");
        return;
    }
    for(i=0;i<index;i++)
    {
        peoples_temp[i]=peoples[i];
    }
    for(i=index+1;i<people_num;i++)
    {
        peoples_temp[i-1]=peoples[i];
    }
    people_num--;
    for(i=0;i<people_num;i++)
    {
        peoples[i]=peoples_temp[i];
    }
    printf("人员删除成功!\n");
}
void change_People()//修改人员!!
{
    printf("请输入要修改人员的编号:\n");
    char id[20];
    scanf("%s",id);
    int index=-1;
    int i;
    for(i=0;i<people_num;i++)
    {
        if(strcmp(peoples[i].id,id)==0)
        {
            index=i;
            break;
        }
    }
    if(index==-1)
    {
        printf("未找到编号为%s的人员!\n",id);
        return;
    }
    struct Peoples people;
    people=peoples[index];
    printf("请输入要修改内容的编号:\n");
    printf("1.修改姓名\n");
    printf("2.修改年龄\n");
    printf("3.修改性别\n");
    printf("4.修改出生年月\n");
    printf("5.修改籍贯\n");
    printf("6.修改电话\n");
    printf("7.修改电子邮箱\n");
    int m;
    scanf("%d",&m);
    switch(m)
    {
    case 1:
        {
            printf("请输入修改后的姓名:\n");
            scanf("%s",people.name);
        }
        break;
    case 2:
        {
            printf("请输入修改后的年龄:\n");
            scanf("%d",&people.age);
        }
        break;
    case 3:
        {
            printf("请输入修改后的性别:\n");
            scanf("%s",people.sex);
        }
        break;
    case 4:
        {
            printf("请输入修改后的出生年月:\n");
            scanf("%s",people.birth);
        }
        break;
    case 5:
        {
            printf("请输入修改后的籍贯:\n");
            scanf("%s",people.addr);
        }
        break;
    case 6:
        {
            printf("请输入修改后的电话:\n");
            scanf("%s",people.phone_num);
        }
        break;
    case 7:
        {
            printf("请输入修改后的电子邮箱:\n");
            scanf("%s",people.E_mail);
        }
        break;
    default:
        printf("输入有误!!\n");
        break;
    }
    peoples[index]=people;
    printf("修改完成!\n");
}
void find_People()//查找人员!!
{
    printf("请输入要查询人的姓名:\n");
    char name[30];
    scanf("%s",name);
    int i;
    int index=-1;
    for(i=0;i<people_num;i++)
    {
        if(strcmp(peoples[i].name,name)==0)
        {
            index=i;
            break;
        }
    }
    if(index==-1)
    {
        printf("未找到此人!\n");
        return;
    }
    struct Peoples people;
    people=peoples[index];
    printf("编号:\t姓名:\t年龄:\t性别:\t出生年月:\t籍贯:\t电话:\t电子邮件:\n");
    printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",people.id,people.name,people.age,people.sex,people.birth,people.addr,people.phone_num,people.E_mail);
    printf("查询完毕!\n");
}
void return_People()//显示模块!!
{
    struct Peoples people;
    for(int i=0;i<people_num;i++)
    {
        people=peoples[i];
        printf("编号:\t姓名:\t年龄:\t性别:\t出生年月:\t籍贯:\t电话:\t电子邮件:\n");
        printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",people.id,people.name,people.age,people.sex,people.birth,people.addr,people.phone_num,people.E_mail);
    }
    printf("人员显示完成!\n");
}
void main()
{
    struct Personal Code;
    int j;
    do
    {
        FILE *fp = fopen("D:\\c语言\\C语言文件\\cade2.txt", "r");
        int i=0;
        if(fp==NULL)
        {
            printf("文件夹打开失败!\n");
        }
        else
        {
            while(feof(fp)==0)
            {
                fscanf(fp,"%s %s",personals[i].account,personals[i].password);
                personal_num++;
                i++;
            }
        }
        fclose(fp);//此处添加文件用于系统每次运行都主动读取管理员账号文件中的信息
        //printf("用户读取成功!\n");
        printf("*****************************************\n");
        printf("     欢迎使用人员基本信息管理系统!\n");
        printf("             请输入序号:\n");
        printf("            1.创建新账户\n");//创建账户!!
        printf("            2.使用现有账户\n");//使用现有账号!!
        printf("*****************************************\n");
        int a;
        scanf("%d",&a);
        switch(a)
        {
            case 1:add_Code();
                FILE * fp;
                fp=fopen("D:\\c语言\\C语言文件\\cade2.txt","w");
                if(fp==NULL)
                {
                    printf("文件夹为空!\n");
                }
                else
                {
                    for(i=0;i<personal_num;i++)
                    {
                        fprintf(fp,"%s %s\n",personals[i].account,personals[i].password);
                    }
                }
                fclose(fp);
                printf("用户保存成功!\n");
                break;
            case 2:
                if(personal_num==0)
                {
                    printf("系统中没有用户!\n");
                    break;
                }
                for(int k=3;k>0;k--)
                {
                    printf("您有%d次机会输入您的账号与密码!\n",k);
                    char zhanghao[30];
                    printf("请输入账号:\n");
                    scanf("%s",zhanghao);
                    char code[30];
                    printf("请输入密码:\n");
                    scanf("%s",code);
                    for(j=2;j>=0;j--)
                    {
                        Code=personals[j];
                        if(strcmp(Code.account,zhanghao)==0)
                        {
                            if(strcmp(Code.password,code)==0)
                            {
                                printf("登录成功!\n");
                                //load_People();
                                while(1)//无限循环
                                {
                                    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("*****************************************\n");
                                    int m;
                                    scanf("%d",&m);
                                    switch(m)
                                    {
                                        case 1:add_People();break;
                                        case 2:delete_People();break;
                                        case 3:change_People();break;
                                        case 4:find_People();break;
                                        case 5:return_People();break;
                                        case 6:detate_Code();break;
                                        case 7:load_People();break;
                                        case 8:save_People();break;
                                        case 9:
                                            save_People();
                                            printf("期待与您的再次相遇!\n");
                                            return;
                                        default:
                                            printf("输入有误!\n");
                                            return;
                                    }
                                }
                            }
                        }
                    }
                    printf("账号或密码有误!\n");
                }
                printf("账号或密码输入错误多次,自动退出系统!\n");
                return;
            }
    }while(1);
}

感谢观看!喜欢的话点个关注➕

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值