学生信息管理系统(C语言)

这个代码是用最简单的C语言编写
特别适合最初接触C语言的人阅读
第一次发博客
很多都不懂,希望大家多多指教

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

int n;

/* 学生数据结构 */
struct Info
{
    long num;
    char name[20];
    char sex[3];
    char phone[20];
};Info info[200];

/* 函数声明 */
void openInfo();
int Menu();
void addInfo();
int seekInfo(long number);
void editInfo();
void delInfo();
void showInfo();
void saveInfo();

/* 主函数 */
void main()
{
    int choice;
    char c;
    printf("是否打开已保存文件(Y or N)?");
    scanf("%c",&c);
    if(c=='Y')
        openInfo();
    printf("请按任意键进入主菜单!");
    getch();
    while(1)
    {
        system("cls");
        choice=Menu();
        switch(choice)
        {
                /* 添加信息 */
            case 1:
                addInfo();
                break;
                /* 修改信息 */
            case 2:
                editInfo();
                break;
                /* 删除信息 */
            case 3:
                delInfo();
                break;
                /* 显示信息 */
            case 4:
                showInfo();
                break;
                /* 保存信息 */
            case 5:
                saveInfo();
                break;
                /* 结束 */
            default:exit(1);
        }
        getch();
    }
}

/* 主菜单 */
int Menu()
{
    int choice;
    printf("   学生信息管理系统  \n");
    printf("---------------------\n");
    printf("   1- 增加学生信息   \n");
    printf("   2- 修改学生信息   \n");
    printf("   3- 删除学生信息   \n");
    printf("   4- 显示学生信息   \n");
    printf("   5- 保存学生信息   \n");
    printf("   0- 退出           \n");
    printf("---------------------\n");
    printf("请选择(0 ~ 5):");
    scanf("%d",&choice);
    return choice;
}

void openInfo()
{
    FILE *fp;
    if((fp=fopen("a.txt","r"))==NULL)
    {
        printf("文件a.txt读取失败!\n");
        exit(1);
    }
    else 
    {
        printf("文件a.txt读取成功!\n");
        fscanf(fp,"%d",&n);
        printf("%d\n",n);
        for(int i=0;i<n;i++)
        {
            fscanf(fp,"%ld",&info[i].num);
            printf("%ld ",info[i].num);
            fscanf(fp,"%s",info[i].name);
            printf("%s ",info[i].name);
            fscanf(fp,"%s",info[i].sex);
            printf("%s ",info[i].sex);
            fscanf(fp,"%s",info[i].phone);
            printf("%s\n",info[i].phone);

        }
        printf("学生信息读取完毕!请按任意键返回主菜单");
    }
    fclose(fp);
}

/* 添加学生信息 */
void addInfo()
{
    system("cls");
    int a;
    int b=1;
    int sex;
    int c;
    long number;
    printf("有多少个学生的信息需要增加:");
    scanf("%d",&a);
    printf("------------------------------\n");
    for(b=1;b<=a;b++)
    {
        /* 判断学号是否已存在 */
        do
        {
            printf("请输入学号:");
            scanf("%ld",&number);
            c=seekInfo(number);
            if(c!=0)
                printf("该学号已存在!请重新输入!\n");
            else
                info[n].num=number;
        }while(c!=0);
        printf("请输入姓名:");
        scanf("%s",info[n].name);
        /* 判断输入的性别选项是否正确 */
        do
        {
            printf("请输入性别(1-男 2-女):");
            scanf("%d",&sex);
            if(sex==1)
                strcpy(info[n].sex,"男");
            else
            {
                if(sex==2)
                    strcpy(info[n].sex,"女");
                else
                    printf("输入的性别有误!请重新输入!\n");
            }
        }while(sex!=1&&sex!=2);
        printf("请输入号码:");
        scanf("%s",info[n].phone);
        printf("第 %d 个学生输入完毕!\n",b);
        printf("------------------------------\n");
        n++;
    }
    printf("\n学生信息添加完毕,请按任意键返回主菜单");
}

/* 根据学号判断是否该学生信息存在 */
int seekInfo(long number)
{
    for(int i=0;i<n;i++)
    {
        if(info[i].num==number)
            return i+1;
    }
    return 0;
}

/* 修改学生信息 */
void editInfo()
{
    system("cls");
    int c;
    int d;
    int choice;
    long number;
    long newnumber;
    /* 判断学号是否已存在 */
    do
    {
        printf("请输入待修改学生的学号:");
        scanf("%ld",&number);
        c=seekInfo(number);
        if(c==0)
            printf("该学号不存在!请重新输入!\n");
        /* 修改信息 */
        else   
        {
            printf("\n%-14ld|%-14s|%-14s|%-14s\n",info[c-1].num,info[c-1].name,info[c-1].sex,info[c-1].phone);
            printf("\n1.学号     2.姓名     3.性别     4.电话     ");     /* 五个空格 */
            /* 判断输入的修改选项是否正确 */
            do
            {
                printf("\n请选择要修改的选项(1~4):");
                scanf("%d",&choice);
                if(choice<1||choice>4)
                    printf("修改选项错误!请重新输入选项!");
                /* 根据选项修改相应信息 */
                else
                {
                    switch(choice)
                    {
                        /* 修改学号 */
                        case 1:
                            do
                            {   
                                printf("请输入新的学号:");
                                scanf("%ld",&newnumber);
                                d=seekInfo(newnumber);
                                if(d!=0)
                                    printf("该学号已存在!请重新输入!\n");
                                else
                                    info[c-1].num=newnumber;
                            }while(d!=0);
                            break;
                        /* 修改姓名 */
                        case 2:
                            printf("请输入新的姓名!");
                            scanf("%s",info[c-1].name);
                            break;
                        /* 修改性别 */
                        case 3:
                            printf("请输入新的性别(男or女)!");
                            scanf("%s",info[c-1].sex);
                            break;
                        /* 修改电话 */
                        case 4:printf("请输入新的电话!");
                            scanf("%s",info[c-1].phone);
                            break;
                    }
                    printf("信息修改成功!\n");
                    printf("\n%-14ld|%-14s|%-14s|%-14s\n",info[c-1].num,info[c-1].name,info[c-1].sex,info[c-1].phone);
                }
            }while(choice<1||choice>4);

        }
    }while(c==0);
    printf("\n学生信息修改完毕,请按任意键返回主菜单");
}

/* 删除学生信息 */
void delInfo()
{
    int c;
    long number;
    char choice;
    system("cls");
    /* 判断学号是否已存在 */
    do
    {
        printf("请输入待删除学生的学号:");
        scanf("%ld",&number);
        c=seekInfo(number);
        if(c==0)
            printf("该学号不存在!请重新输入!\n");
        /* 删除学生信息 */
        else   
        {
            printf("\n%-14ld|%-14s|%-14s|%-14s\n",info[c-1].num,info[c-1].name,info[c-1].sex,info[c-1].phone);
            printf("确定删除该学生信息(Y or N)?");
            getchar();
            scanf("%c",&choice);
            if(choice=='Y')
            {
                n=n-1;
                for(int j=c-1;j<n;j++)
                {
                    info[j].num=info[j+1].num;
                    strcpy(info[j].name,info[j+1].name);
                    strcpy(info[j].sex,info[j+1].sex);
                    strcpy(info[j].phone,info[j+1].phone);
                }
                printf("\n该学生信息删除成功!请按任意键返回主菜单");
            }
            else
                printf("\n该学生信息删除失败!请按任意键返回主菜单");
        }
    }while(c==0);
}

/* 显示学生信息 */
void showInfo()
{
    int choice,k;
    long temp1;
    char temp2[10],temp3[10],temp4[10];
    system("cls");
    printf("1-按学号由小到大的顺序输出\n");
    printf("2-按学号由大到小的顺序输出\n");
    /* 选择输出顺序 */
    do
    {
        printf("请输入选择(1 or 2):");
        scanf("%d",&choice);
        if(choice!=1&&choice!=2)
            printf("选择错误,请重新输入选择!\n");
    }while(choice!=1&&choice!=2);
    switch(choice)
    {
        /* 按学号由小到大排序 */
        case 1:for(k=1;k<n;k++)
               {
                   for(int j=0;j<n-k;j++)
                   {
                       if(info[j].num>info[j+1].num)
                       {
                           /* 学号的交换 */
                           temp1=info[j].num;
                           info[j].num=info[j+1].num;
                           info[j+1].num=temp1;
                           /* 姓名的交换 */
                           strcpy(temp2,info[j].name);
                           strcpy(info[j].name,info[j+1].name);
                           strcpy(info[j+1].name,temp2);
                           /* 性别的交换 */
                           strcpy(temp3,info[j].sex);
                           strcpy(info[j].sex,info[j+1].sex);
                           strcpy(info[j+1].sex,temp3);
                           /* 电话的交换 */
                           strcpy(temp4,info[j].phone);
                           strcpy(info[j].phone,info[j+1].phone);
                           strcpy(info[j+1].phone,temp4);
                       }
                   }
               }
               break;
        /* 按学号由大到小排序 */
        case 2:for(k=1;k<n;k++)
               {
                   for(int j=0;j<n-k;j++)
                   {
                       if(info[j].num<info[j+1].num)
                       {
                           temp1=info[j].num;
                           info[j].num=info[j+1].num;
                           info[j+1].num=temp1;
                           strcpy(temp2,info[j].name);
                           strcpy(info[j].name,info[j+1].name);
                           strcpy(info[j+1].name,temp2);
                           strcpy(temp3,info[j].sex);
                           strcpy(info[j].sex,info[j+1].sex);
                           strcpy(info[j+1].sex,temp3);
                           strcpy(temp4,info[j].phone);
                           strcpy(info[j].phone,info[j+1].phone);
                           strcpy(info[j+1].phone,temp4);
                       }
                   }
               }break;
    }
    printf("-----------------------------------------------------------\n");
    printf("学号          |姓名          |性别          |号码          \n");   /* 十个空格 */
    for(int i=0;i<n;i++)
    {
        printf("--------------|--------------|--------------|--------------\n");
        printf("%-14ld|%-14s|%-14s|%-14s\n",info[i].num,info[i].name,info[i].sex,info[i].phone);
    }
    printf("\n学生信息显示完毕,请按任意键返回主菜单");
}

/* 保存学生信息 */
void saveInfo()
{
    FILE *fp;
    if((fp=fopen("a.txt","w+"))==NULL)
    {
        printf("文件a.txt创建失败!\n");
        exit(1);
    }
    else 
    {
        printf("文件a.txt创建成功!\n");
        fprintf(fp,"%d\n",n);
        /* 将相关信息存入文件 */
        for(int i=0;i<n;i++)
        {
            fprintf(fp,"%ld %s %s %s\n",info[i].num,info[i].name,info[i].sex,info[i].phone);
        }
        printf("学生信息保存完毕!请按任意键返回主菜单");
    }
    fclose(fp);
}

“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值