利用结构体数组创建简单的一个学生管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
#define N 100
typedef struct Student
{
char xm[20];
char xb[4];
int xh;
float gaoshu;
float daying;
float xiandai;
float wuli;
float zf;
}xs;
xs Student[N];
int renshu;
int ad;
char yh[10]="abcdef";//起始用户名
char mm[20]="00000000";//起始密码
char cyh[10],cmm[20];
void zhucaidan(void)
{
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t\t    欢迎使用学生管理系统\t\n");
    printf("\t\t\t\t\t|----------------------------|\n");;
    printf("\t\t\t\t\t      一(1)、格式化并初始化学生信息。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      二(2)、查找学生信息。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      三(3)、将学生按学号排序。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      四(4)、增加学生的数据。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      五(5)、删除学生数据。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      六(6)、显示当前信息。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      七(7)、修改学生信息。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      八(8)、保存当前信息。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      九(9)、加载文件数据。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      零(0)、退出系统。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
    printf("\t\t\t\t\t      注意:在进行相关操作之后要保存信息才行。\n");
    printf("\t\t\t\t\t|------------------------------------|\n");
}
void xcaidan()
{
    printf("|--------------------------------------|\n");
    printf("|          修改数据子菜单              |\n");
    printf("|--------------------------------------|\n");
    printf("|   1.修改该同学的学号。               |\n");
    printf("|--------------------------------------|\n");
    printf("|   2.修改该同学的性别。               |\n");
    printf("|--------------------------------------|\n");
    printf("|   3.修改该同学的姓名                 |\n");
    printf("|--------------------------------------|\n");
    printf("|   4.修改该同学的高数分数。           |\n");
    printf("|--------------------------------------|\n");
    printf("|   5.修改该同学的英语分数。           |\n");
    printf("|--------------------------------------|\n");
    printf("|   6.修改该同学的代数分数。           |\n");
    printf("|--------------------------------------|\n");
    printf("|   7.修改该同学的物理分数。           |\n");
    printf("|--------------------------------------|\n");
}
void chuangjian()
{
    yh[10]=0;
    mm[20]=0;
    printf("请输入您的用户名:\n");
    scanf("%s",&cyh);
    printf("请您输入您的密码:\n");
    scanf("%s",&cmm);
    if(yh&&mm)
        printf("创建成功!:\n");
    else
        printf("创建失败!:\n");
}
int cdenglu()
{
    char a[10],b[20];
    int s=0,q=0,h=0,i,j,count;
    char m[20],cj;
    scanf("%d",&cj);
    for(i=1;i<=3;i++)
    {count=3;
    scanf("%s",&a);
    if(strcmp(cyh,a)==0)
    {
        s=1;
        printf("用户名输入正确!\n");
        break;
    }
    else
    printf("用户名错误!请再次输入:你还有%d次机会!\n",count-i);
    }
    for(j=1;j<=3;j++)
    {count=3;
    printf("请输入用户密码:\n");
    scanf("%s",&b);
    if(strcmp(cmm,b)==0)
    {
        q=1;
        printf("用户密码输入正确!\n");
        break;
    }
    else
    printf("用户密码输入错误!请重新输入:(你还有%d次机会)\n",count-j);
    }
    if(s&&q)
        h=1;
    return h;
}
int denglu()
{
    char a[10],b[20];
    int s=0,q=0,h=0,i,j,count;
    char m[20],cj;
    printf("     -------------------------|\n");
    printf("\t欢迎使用学生管理系统\t\n");
    printf("|------------------------------------------------------------|\n");
    printf("| 请输入用户名:(若没有账号按E创建用户名和密码按任意键开始登录)\n");
    printf("|------------------------------------------------------------|\n");
    printf("| 若错误次数超3次将自动退出系统!\n");
    printf("-------------------------------------------------------------|\n");
    cj=getchar();
    //scanf("%c",&cj);
    if(cj=='E')
    {
        chuangjian();
        system("CLS");
        printf("请再次登录!\n");
        printf("请输入用户名:\n");
        cdenglu();
    }
    else
    {
        printf("请输入用户名:\n");
    for(i=1;i<=3;i++)
    {count=3;
    scanf("%s",&a);
    if(strcmp(yh,a)==0)
    {
        s=1;
        printf("用户名输入正确!\n");
        break;
    }
    else
    {
        if((count-i)==0)
            exit(0);
    printf("用户名错误!请再次输入:你还有%d次机会!\n",count-i);
    }
    }
    system("CLS");
    printf("请输入登录密码:\n");
    for(j=1;j<=3;j++)
    {count=3;
    printf("请输入用户密码:\n");
    scanf("%s",&b);
    if(strcmp(mm,b)==0)
    {
        q=1;
        printf("用户密码输入正确!\n");
        break;
    }
    else
    printf("用户密码输入错误!请重新输入:(你还有%d次机会)\n",count-j);
    }
    }
    if(s&&q)
        h=1;
    return h;
}
void shuru()
{
    int i=0,j;
    int f=0;
    printf("请输入您要存入多少学生的数据作为初始数据\n");
    scanf("%d",&renshu);
    while(i<renshu)
    {
        printf("请输入该学生的学号:\n");
        scanf("%d",&Student[i].xh);
        for(j=0;j<i;j++)
        {
            if(Student[i].xh==Student[j].xh)
                f=1;
        }
        if(f)
        {
            printf("该学号已存在!请重新输入\n");
            continue;
        }
        else
        {
        printf("请输入学生的姓名:\n");
        scanf("%s",&Student[i].xm);
        printf("请输入学生的性别:\n");
        scanf("%s",&Student[i].xb);
        printf("请输入学生高数分数:\n");
        scanf("%f",&Student[i].gaoshu);
        printf("请输入学生大学英语分数:\n");
        scanf("%f",&Student[i].daying);
        printf("请输入学生线性代数分数:\n");
        scanf("%f",&Student[i].xiandai);
        printf("请输入学生大学物理分数:\n");
        scanf("%f",&Student[i].wuli);
        Student[i].zf=Student[i].gaoshu+Student[i].daying+Student[i].xiandai+Student[i].wuli;
        i++;
        }
    }
}
void find()
{
    int i,c,f;
    char xingming[20];
    printf("请输入您需要的查找方式:(1.按学号查找 。2.按姓名查找)\n");
    scanf("%d",&c);
    switch(c)
    {
    case 1:
        printf("请输入您需要查找的学号:\n");
        scanf("%d",&f);
        for(i=0;i<(renshu+ad);i++)
        {
            if(f==Student[i].xh)
                break;
        }
        if(f==Student[i].xh)
        {
            printf("该学生的信息是:\n");
            printf("姓名 | 学号 | 性别 | 高数 | 英语 | 线代 | 物理 | 总分 |\n ");
             printf("%s     %d     %s    %.1f   %.1f   %.1f   %.1f   %.1f",Student[i].xm,Student[i].xh,Student[i].xb,Student[i].gaoshu,Student[i].daying,Student[i].xiandai,Student[i].wuli,Student[i].zf);
        }
        else
            printf("查询不到该学生或系统无该学生!\n");
        break;
    case 2:
        printf("请输入该学生的姓名:\n");
        scanf("%s",&xingming);
        for(i=0;i<(renshu+ad);i++)
        {
        if(strcmp(xingming,Student[i].xm)==0)
        {
            printf("该学生的信息是:\n");
            printf("姓名 | 学号 | 性别 | 高数 | 英语 | 线代 | 物理 | 总分 |\n ");
            printf("%s     %d     %s    %.1f   %.1f   %.1f   %.1f   %.1f",Student[i].xm,Student[i].xh,Student[i].xb,Student[i].gaoshu,Student[i].daying,Student[i].xiandai,Student[i].wuli,Student[i].zf);
        }
        else
            printf("查询不到该学生或系统无该学生!\n");
        }
    }
}
void add()
{
    int i=renshu,j=1;
    int k,s,f=1;
    int add;
    printf("请输入您要增加学生数据的个数:\n");
    scanf("%d",&add);
    renshu+=add;
    while(i<renshu)
    {
        printf("请输入第%d个要增加的学生的学号\n",j);
        scanf("%d",&k);
        for(s=0;s<renshu;s++)
        {
            if(k==Student[s].xh)
            {
                f=0;
                printf("此学号已有同学!\n");
                break;
            }
        }
        if(f)
        {
            Student[i].xh=k;
        printf("请输入学生的姓名:\n");
        scanf("%s",&Student[i].xm);
        printf("请输入学生的性别:\n");
        scanf("%s",&Student[i].xb);
        printf("请输入学生高数分数:\n");
        scanf("%f",&Student[i].gaoshu);
        printf("请输入学生大学英语分数:\n");
        scanf("%f",&Student[i].daying);
        printf("请输入学生线性代数分数:\n");
        scanf("%f",&Student[i].xiandai);
        printf("请输入学生大学物理分数:\n");
        scanf("%f",&Student[i].wuli);
        Student[i].zf=Student[i].gaoshu+Student[i].daying+Student[i].xiandai+Student[i].wuli;
        i++;
        j++;
        }
    }
}
void def()//
{
    int h,i,s;
    printf("请您选择您要删除学生的序号:\n");
    scanf("%d",&h);
    for(i=0;i<(renshu+ad);i++)
    {
        if(h==Student[i].xh)
            break;
    }
    if(h==Student[i].xh)
    {
        for(s=i;s<(renshu+ad);s++)
        {
            Student[s].xh=Student[s+1].xh;
            strcpy(Student[s].xm,Student[s+1].xm);
            strcpy(Student[s].xb,Student[s+1].xb);
            Student[s].gaoshu=Student[s+1].gaoshu;
            Student[s].daying=Student[s+1].daying;
            Student[s].xiandai=Student[s+1].xiandai;
            Student[s].wuli=Student[s+1].wuli;
            Student[s].zf=Student[s+1].zf;
        }
        printf("删除成功!\n");
        renshu=renshu-1;
    }
    else
        printf("该学号的学生不存在!\n");
}
void gai()//修改函数
{
    int i,j,k;
    int s=1;
    printf("请您输入该学生的学号:\n");
    scanf("%d",&j);
    for(k=0;k<renshu;k++)
    {
        if(j==Student[k].xh)
            break;
    }
    if(j==Student[k].xh)
    {
    while(s)
    {
       xcaidan();
       printf("请输入您的操作:\n");
       scanf("%d",&i);
       switch(i)
       {
       case 1:
           printf("请输入您想要修改学号的值:");
           scanf("%d",&Student[k].xh);
           break;
       case 2:
           printf("请输入要修改的性别:\n");
           scanf("%s",&Student[k].xb);
           break;
       case 3:
           printf("请输入要修改的姓名:\n");
           scanf("%s",&Student[k].xm);
           break;
       case 4:
           printf("请输入要修改的高数分数:\n");
           scanf("%f",&Student[k].gaoshu);
           break;
        case 5:
           printf("请输入要修改的英语分数:\n");
           scanf("%f",&Student[k].daying);
           break;
         case 6:
           printf("请输入要修改的代数分数:\n");
           scanf("%f",&Student[k].xiandai);
           break;
       case 7:
           printf("请输入要修改的物理分数:\n");
           scanf("%f",&Student[k].wuli);
           break;
       default:
           printf("输入错误!\n");
           break;
       }
       printf("您是否继续这个子版块?(输入1继续0退出)\n");
       scanf("%d",&s);
    }
    }
    else
        printf("该学号不存在\n");
}
void paixu()
{
    int i,j,f;
    int p;
    float q;
    char x[20],b[4];
    printf("请您选择排序的方式:(1.按学号排序 2.按成绩排序)\n");
    scanf("%d",&f);
    switch(f)
    {
    case 1:
        for(i=0;i<renshu;i++)
        {
            for(j=i+1;j<renshu;j++)
            {
                if(Student[i].xh<Student[j].xh)
                {
                    p=Student[i].xh;
                    Student[i].xh=Student[j].xh;
                    Student[j].xh=p;
                    //
                    strcpy(x,Student[i].xm);
                    strcpy(Student[i].xm,Student[j].xm);
                    strcpy(Student[j].xm,x);
                    /
                    strcpy(b,Student[i].xb);
                    strcpy(Student[i].xb,Student[j].xb);
                    strcpy(Student[j].xb,b);
                    //
                    q=Student[i].gaoshu;
                    Student[i].gaoshu=Student[j].gaoshu;
                    Student[j].gaoshu=q;
                    /
                    q=Student[i].daying;
                    Student[i].daying=Student[j].daying;
                    Student[j].daying=q;
                    ///
                    q=Student[i].xiandai;
                    Student[i].xiandai=Student[j].xiandai;
                    Student[j].xiandai=q;
                    /
                    q=Student[i].wuli;
                    Student[i].wuli=Student[j].wuli;
                    Student[j].wuli=q;
                    //
                    q=Student[i].zf;
                    Student[i].zf=Student[j].zf;
                    Student[j].zf=q;
                }
            }
        }
        break;
    case 2:
        for(i=0;i<renshu+ad;i++)
        {
            for(j=i+1;j<renshu+ad;j++)
            {
                if(Student[i].zf<Student[j].zf)
                {
                    p=Student[i].xh;
                    Student[i].xh=Student[j].xh;
                    Student[j].xh=p;
                //
                strcpy(x,Student[i].xm);
                strcpy(Student[i].xm,Student[j].xm);
                strcpy(Student[j].xm,x);
                /
                strcpy(b,Student[i].xb);
                strcpy(Student[i].xb,Student[j].xb);
                strcpy(Student[j].xb,b);
                //
                q=Student[i].gaoshu;
                Student[i].gaoshu=Student[j].gaoshu;
                Student[j].gaoshu=q;
                /
                q=Student[i].daying;
                Student[i].daying=Student[j].daying;
                Student[j].daying=q;
                ///
                q=Student[i].xiandai;
                Student[i].xiandai=Student[j].xiandai;
                Student[j].xiandai=q;
                /
                q=Student[i].wuli;
                Student[i].wuli=Student[j].wuli;
                Student[j].wuli=q;
                //
                q=Student[i].zf;
                Student[i].zf=Student[j].zf;
                Student[j].zf=q;
                }
            }
        }
        break;
    default:
        printf("输入错误!\n");
        break;
    }
}
void wenjian()//对文件进行操作的函数
{
    int i=0,h;
    char xming[20],xbie[4];
  
    FILE *fp=fopen("(请自行输入文件的位置).txt","r");//在此请自己输入文件的位置
    //memset(&Student,0,sizeof(Student));//将结构体清零(事实证明此操作对此程序无效!)

    while(!feof(fp))
    {
        fscanf(fp,"%s  %d  %s  %f  %f  %f  %f  %f",Student[i].xm,&Student[i].xh,Student[i].xb,&Student[i].gaoshu,&Student[i].daying,&Student[i].xiandai,&Student[i].wuli,&Student[i].zf);
        //不能用.1f这种控制,否则会在文件读入时出现读入不正确
        //printf("%s     %d     %s    %.1f   %.1f   %.1f   %.1f   %.1f\n",Student[i].xm,Student[i].xh,Student[i].xb,Student[i].gaoshu,Student[i].daying,Student[i].xiandai,Student[i].wuli,Student[i].zf);
        i++;
    }
    renshu=i-1;
    fclose(fp);
}
void save()//把学生的信息保存到文件中
{
    int i;
    FILE *fp=fopen("(请自行输入文件的位置).txt","w");//这里也是自行输入文本文件位置
    for(i=0;i<renshu;i++)
    {
        fprintf(fp,"%s  %d  %s  %.1f  %.1f  %.1f  %.1f  %.1f\n",Student[i].xm,Student[i].xh,Student[i].xb,Student[i].gaoshu,Student[i].daying,Student[i].xiandai,Student[i].wuli,Student[i].zf);//写入数据
         printf("%s     %d     %s    %.1f   %.1f   %.1f   %.1f   %.1f\n",Student[i].xm,Student[i].xh,Student[i].xb,Student[i].gaoshu,Student[i].daying,Student[i].xiandai,Student[i].wuli,Student[i].zf);
         //在写入时可以用.1f这样的控制写入文件的格式(读入则不行)
    }
    printf("保存成功!\n");
    fclose(fp);
    system("pause");
}
void dayin()
{
    int i;
    system("CLS");
    printf("姓名 | 学号 | 性别 | 高数 | 英语 | 线代 | 物理 | 总分 |\n ");
    for(i=0;i<renshu;i++)
    {
       printf("----------------------------------------------|\n");
       printf("%s     %d     %s    %.1f   %.1f   %.1f   %.1f   %.1f\n",Student[i].xm,Student[i].xh,Student[i].xb,Student[i].gaoshu,Student[i].daying,Student[i].xiandai,Student[i].wuli,Student[i].zf);
    }
}
int main()
{
    int i,j,x=1,p;
    int ji=0;
    p=denglu();
    while(p!=0)
    {
    system("CLS");
    zhucaidan();
    
    while(x)
    {
        system("CLS");
    zhucaidan();
    printf("请您输入相关的数字进行操作!\n");
    scanf("%d",&i);
    switch(i)
    {
    case 1:
        printf("请输入学生的相关信息:\n");
        shuru();
        dayin();
        system("pause");
        break;
    case 2:
        printf("请输入您要查找的学生信息:(1.按学号查找。2.按姓名查找。)\n");
        find();
        break;
    case 3:
        printf("将学生按学号排序后为:\n");
        paixu();
        dayin();
        break;
    case 4:
        add();
        dayin();
        break;
    case 5:
        def();
        break;
    case 6:
        dayin();
        break;
    case 7:
        gai();
        break;
    case 8:
        save();
        break;
    case 9:
        wenjian();
        break;
    case 0:
        printf("您是否确定退出?(是就按”y“按其他键取消)\n");
        j=getchar();
        if(j=='y'||j=='Y')
            exit(0);
        break;
    default:
        break;
    }
    system("pause");
    printf("是否继续?(输入1继续0退出)\n");
    scanf("%d",&x);
    }
    }
    return 0;
}

在vc2010中运行的界面

 

这个代码不足的地方还有很多,但是它能实现基本功能(我是个刚学c语言的新手,做的不好大佬勿怪)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值