码迷,mamicode.com
首页 > 编程语言 > 详细

C语言学生管理系统源代码

时间:2017-06-03 11:16:09      阅读:492      评论:0      收藏:0      [点我收藏+]

标签:管理系统   c语言   源代码   课程   

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

/*
    功能:
    1.添加学生信息(学号,姓名,性别,5门课程成绩)
    2.按学号或者姓名查找、修改、删除和保存各个学生的信息
    3.按学号或者总分排序输出每个学生的信息以及总分、平均分和名次
    4.计算全班各门功课的平均分,显示每门课程低于平均分的学生信息
    5.显示每门课程成绩在90分以上的,以及每门课程不及格的学生信息
    
    注意:必须排序后才能排出名次
*/

#define N 50

/*定义结构类型*/
struct student
{
    int stuNo;
    char name[10];
    char sex[5];
    float score1 ;
    float score2;
    float score3;
    float score4;
    float score5;
    float sumScore;
    float avgScore;
    int ranking;      //排名

}stu[N];

/*函数声明*/
int login();
void add();
void del();
void delByIndex(int i);
void search();
int searchByNo();
int searchByName();
void update();
void updateByIndex(int i);
void display();
void sort();
void sortByNo();
void sortBySum();
void writeFile();
void readFile();
struct student input();
void lowScoreAvg();
void greaterThanNinty();
void failed();

int count=0;  //存储当前已有的学生人数

/*程序入口*/
void main()
{
    int select;
    int isSuccess;
    int c = 0;//记录登入的次数
    do
    {
        isSuccess = login();
        if(!isSuccess)
        {
            printf("\n\t\t\t用户名不存在或密码错误,请检查后重新输入!\n");
            printf("\n\t\t\t<您还有 %d 次机会!>",2-c);
            c++;
            if(c==3)
            {
                printf("\n\t\t您已尝试登入三次且失败,系统将退出!!!\n");
                exit(1);
            }
            fflush(stdin);
            getch();
        }
        else
            break;
    }while(1);

    do
    {
        system("cls");
        printf("\n\t\t欢迎进入学生成绩管理系统\n");
        printf("\n***********************************************\n");
        printf("\n1.添加学生信息\n");
        printf("\n2.删除学生信息\n");
        printf("\n3.修改学生信息\n");
        printf("\n4.查找学生信息\n");
        printf("\n5.显示学生信息\n");
        printf("\n6.学生信息排序\n");        
        printf("\n7.单门课程低于课程平均分的学生信息\n");
        printf("\n8.每门课程成绩在90分以上的学生信息\n");
        printf("\n9.每门课程不及格的学生信息\n");
        printf("\n10.保存文件\n");     
        printf("\n11.打开文件\n");     
        printf("\n12.退出系统\n");
        printf("\n**********************************************\n");
        printf("\n\t请选择<1--12>:");
        scanf("%d",&select);
        if(select == 12)
        {
            printf("\n\t~~bye!!!\n");
            break;
        }
        switch(select)
        {
        case 1:
            add();
            break;
        case 2:
            del();
            break;
        case 3:
            update();
            break;
        case 4:
            search();
            break;
        case 5:
            display();
            break;
        case 6:
            sort();
            display();
            printf("\n排序已完成,按任意键继续...");
            fflush(stdin);
            getch();
            break;
        case 7:
            lowScoreAvg();
            break;
        case 8:
            greaterThanNinty();
            break;
        case 9:
            failed();
            break;
        case 10:
            writeFile();
            break;
        case 11:
            readFile();
            break;
        default:
            printf("\n\t您输入的选项无效!按任意键重新输入...\n");
            getch();
        }

    }while(1);
}

/*登录界面*/
int login()
{
    int i=0;
    char uname[20];
    char pwd[20];
    system("cls");
    printf("\n\t-----------------------------------------------------------\n");
    printf("\n\t\t用户名:");
    gets(uname);
    printf("\n\t\t密  码:");
    fflush(stdin);

    do
    {
        pwd[i] = getch();
        if(pwd[i]!=‘\r‘)
        {
            i++;
            printf("*");
        }
    }while(pwd[i]!=‘\r‘);
    pwd[i]=‘\0‘;

    //验证帐号密码
    if(strcmp(uname,"admin")==0 && strcmp(pwd,"admin")==0)
        return 1;
    else
        return 0;
}

/*信息录入*/
struct student input()
{
    int i;
    struct student st;
    do{
        printf("\n输入学号:");
        scanf("%d",&st.stuNo);
        if(searchByNo(st.stuNo)!=-1)
        {
            printf("\n您输入的学号已存在!!!按任意键重新输入...\n");
        }
        else
        {
            break;
        }
    }while(1);
    fflush(stdin);

    do{
        printf("请输入姓名:");
        scanf("%s",st.name);
        //gets(st.name);
        if(searchByName(st.name)!=-1)
        {
            printf("\n您输入的姓名已存在!!!按任意键重新输入...\n");
        }
        else
        {
            break;
        }
    }while(1);
    fflush(stdin);

    printf("请输入性别:");
    scanf("%s",st.sex);
    //gets(st.sex);
    printf("请输入课程1的成绩:");
    scanf("%f",&st.score1);
    printf("请输入课程2的成绩:");
    scanf("%f",&st.score2);
    printf("请输入课程3的成绩:");
    scanf("%f",&st.score3);
    printf("请输入课程4的成绩:");
    scanf("%f",&st.score4);
    printf("请输入课程5的成绩:");
    scanf("%f",&st.score5);
    st.sumScore = st.score1 + st.score2 + st.score3 + st.score4 + st.score5 ;
    st.avgScore =st.sumScore / 5;

    return st;
}

/*添加学生*/
void add()
{
    char ans;
    do
    {
        stu[count] = input();
        count++;
        printf("\n\t信息录入完成,是否继续(y|n):");
        fflush(stdin);
        ans = getchar();
    }while(ans == ‘y‘||ans == ‘Y‘);
}

/*删除界面*/
void del()
{
        int op;
        char name[10];
        int no;
        int i;
        do{
            system("cls");
            printf("主界面>删除界面");
            printf("\n\t\t***********************************************\n");
            printf("\n\t\t\t 1.根据学号删除\n");
            printf("\n\t\t\t 2.根据姓名删除\n");
            printf("\n\t\t\t 0.返回主菜单 \n");
            printf("\n\t\t***********************************************\n");
            printf("\n\t请选择: ");
            scanf("%d",&op);
            if(op == 0)
            {
                break;
            }
            switch(op)
            {
                case 1:
                    printf("请输入需要修改的学生信息的学号:");
                    scanf("%d",&no);
                    i=searchByNo();
                    if(i!=-1){
                        delByIndex(i);
                    }
                    else{
                        printf("\n您输入的学号不存在!!!\n");
                    }
                    break;
                case 2:            
                    printf("请输入需要修改的学生信息的姓名:");
                    scanf("%s",name);
                    //gets(name);
                    i=searchByName(name);
                    if(i!=-1){
                        delByIndex(i);
                    }
                    else{
                        printf("\n您输入的姓名不存在!!!\n");
                    }
                    break;
                default:
                    printf("\n您输入的选项无效!!!按任意键重新输入...\n");
                    fflush(stdin);
                    getch();
            }
        }while(1);
}

/*根据学号删除学生信息*/
void delByIndex(int i)
{
    char ans;
    do
    {
        printf("\n需要删除的学生信息如下:\n");
        printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
        printf("-------------------------------------------------------------------------------\n");
        printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
        stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
        stu[i].sumScore,stu[i].avgScore);
        printf("\n确认删除该学生信息吗?<y|n>:");
        fflush(stdin);
        ans = getchar();
        if(ans == ‘y‘ || ans ==‘Y‘)
        {
            int j;
            for(j = i;j>count-1 ; j++)
            {stu[j] = stu[j+1];}
            count--;
            printf("\n删除操作完成,按任意键继续...");
            fflush(stdin);
            getch();
        }    
            
        printf("\n是否继续执行删除操作?<y|n>:");
        fflush(stdin);
        ans = getchar();
        if(ans == ‘y‘||ans == ‘Y‘)
            continue;
        else
            break;
    }while(1);
}

/*修改界面*/
void update()
{
        int op;
        char name[10];
        int no;
        int i;
        do{
            system("cls");
            printf("主界面>修改界面");
            printf("\n\t\t***********************************************\n");
            printf("\n\t\t\t 1.根据学号修改\n");
            printf("\n\t\t\t 2.根据姓名修改\n");
            printf("\n\t\t\t 0.返回主菜单 \n");
            printf("\n\t\t***********************************************\n");
            printf("\n\t请选择: ");
            scanf("%d",&op);
            if(op == 0)
            {
                break;
            }
            switch(op)
            {
                case 1:
                    printf("请输入需要修改的学生信息的学号:");                    
                    scanf("%d",&no);
                    i=searchByNo();
                    if(i!=-1){
                        updateByIndex(i);
                    }
                    else{
                        printf("\n您输入的学号不存在!!!\n");
                    }
                    break;
                case 2:                    
                    printf("请输入需要修改的学生信息的姓名:");
                    scanf("%s",name);
                    //gets(name);
                    i=searchByName();
                    if(i!=-1){
                        updateByIndex(i);
                    }
                    else{
                        printf("\n您输入的姓名不存在!!!\n");
                    }
                    break;
                default:
                    printf("\n您输入的选项无效!!!按任意键重新输入...\n");
                    fflush(stdin);
                    getch();
            }
        }while(1);
}

/*根据下标修改信息*/
void updateByIndex(int i)
{
    printf("请输入修改后的性别:");
    scanf("%s",stu[i].sex);
    //gets(stu[i].sex);
    printf("请输入修改后的课程1的成绩:");
    scanf("%f",&stu[i].score1);
    printf("请输入修改后的课程2的成绩:");
    scanf("%f",&stu[i].score2);
    printf("请输入修改后的课程3的成绩:");
    scanf("%f",&stu[i].score3);
    printf("请输入修改后的课程4的成绩:");
    scanf("%f",&stu[i].score4);
    printf("请输入修改后的课程5的成绩:");    
    scanf("%f",&stu[i].score5);
    stu[i].sumScore = stu[i].score1 + stu[i].score2 + stu[i].score3 + stu[i].score4 + stu[i].score5 ;
    stu[i].avgScore =stu[i].sumScore / 5;
}

/*查找界面*/
void search()
{
    int op;
    int no;
    char name[10];
    int i;
    do{
        system("cls");
        printf("主界面>查找界面");
        printf("\n\t\t***********************************************\n");
        printf("\n\t\t\t 1.根据学号查找\n");
        printf("\n\t\t\t 2.根据姓名查找\n");
        printf("\n\t\t\t 0.返回主菜单 \n");
        printf("\n\t\t***********************************************\n");
        printf("\n\t请选择: ");
        scanf("%d",&op);
        if(op == 0)
        {
            break;
        }
        switch(op)
        {
        case 1:            
            printf("请输入要查找的学生信息的学号:");
            scanf("%d",&no);
            i=searchByNo(no);
            printf("\n查询结果:\n");
            printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
            printf("-------------------------------------------------------------------------------\n");
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
            break;
        case 2:    
            printf("请输入姓名:");
            scanf("%s",name);
            //gets(name);
            i=searchByName(name);
            printf("\n查询结果:\n");
            printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
            printf("-------------------------------------------------------------------------------\n");
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
            break;
        default:
            printf("\n您输入的选项无效!!!按任意键重新输入...\n");
            fflush(stdin);
            getch();
        }
    }while(1);
}

/*根据学号查找*/
int searchByNo(int stuNo)
{
    int i;
    for(i=0;i<count;i++)
    {
        if(stu[i].stuNo == stuNo)
            return i;
    }
    return -1;
}

/*根据姓名查找*/
int searchByName(char stuName[])
{    
    int i;    
    for(i=0;i<count;i++)
    {
        if(strcmp(stu[i].name,stuName)==0)
            return i;
    }
    return -1;
}

/*显示信息*/
void display()
{
    system("cls");
    int i;
    printf("\n\t\t*** 显示学生 ***\n");
    printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
    printf("===============================================================================\n");
    for(i=0;i<count;i++)
    {
        printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
            stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
            stu[i].sumScore,stu[i].avgScore);
    }
    printf("===============================================================================\n");
    printf("\n\t\t按任意键返回主菜单...");
    fflush(stdin);
    getch();
}

/*排序界面*/
void sort()
{
    int op;
    do{
        system("cls");
        printf("主界面>排序界面");
        printf("\n\t\t***********************************************\n");
        printf("\n\t\t\t 1.按学号排序<升序> \n");
        printf("\n\t\t\t 2.按总分排序<降序> \n");
        printf("\n\t\t\t 0.返回主菜单 \n");
        printf("\n\t\t***********************************************\n");
        printf("\n\t请选择: ");
        scanf("%d",&op);
        if(op == 0)
        {
            break;
        }
        switch(op)
        {
        case 1:
            sortByNo();
            break;
        case 2:
            sortBySum();
            break;
        default:
            printf("\n您输入的选项无效!!!按任意键重新输入...\n");
            fflush(stdin);
            getch();
        }
    }while(1);
}

/*按学号排序*/
void sortByNo()      
{
    sortBySum();
    int i,j;
    struct student temp;
    for(i=0;i<count;i++)
    {
        for(j=0;j<count-1-i;j++)
        {
            if(stu[j].stuNo>stu[j+1].stuNo)
            {
                temp=stu[j+1];
                stu[j+1]=stu[j];
                stu[j]=temp;
            }
        }
    }
}

/*按总分排序*/
void sortBySum()    
{
    int i,j;
    struct student temp;
    for(i=0;i<count;i++)
    {
        for(j=0;j<count-1-i;j++)
        {
            if(stu[j].sumScore<stu[j+1].sumScore)
            {
                temp=stu[j+1];
                stu[j+1]=stu[j];
                stu[j]=temp;
            }
        }
    }
    //排名
    for(i=0;i<count;i++)
    {
        stu[i].ranking=i+1;
    }
}

/*保存文件*/
void writeFile()
{
    FILE *fp;
    fp = fopen("stu.txt","wb");

    int i;

    for(i=0;i<count;i++)
    {
        printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
            stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
            stu[i].sumScore,stu[i].avgScore);
        fwrite(&stu[i],sizeof(struct student),1,fp);
    }
    
    fclose(fp);
    printf("\n文件保存完毕,按任意键继续...\n");
    printf("\n");
    fflush(stdin);
    getch();
}

/*读取文件*/
void readFile()
{
    FILE *fp;
    fp = fopen("stu.txt","rb");

    if(fp==NULL)
    {
        printf("\nSorry,您要打开的文件不存在。按任意键继续...\n");
        fflush(stdin);
        getch();
    }
    else
    {
        fseek(fp,0,2);
        count= ftell(fp)/sizeof (struct student);
        rewind(fp);
        int i;
        for(i=0;i<count;i++)
        {
            fread(&stu[i],sizeof(struct student),1,fp);
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
        }
        fclose(fp);
        printf("\n文件打开完成,按任意键返回...\n");
        printf("\n");
        fflush(stdin);
        getch();
    }

}

/*单门课程低于课程平均分的学生信息*/
void lowScoreAvg()
{
     int i;
     float avgCourseScore[5];    
     for(i=0;i<count;i++)
     {
        avgCourseScore[0]+=stu[i].score1;
        avgCourseScore[1]+=stu[i].score2;
        avgCourseScore[2]+=stu[i].score3;
        avgCourseScore[3]+=stu[i].score4;
        avgCourseScore[4]+=stu[i].score5;
     }
    //求出每门课的平均分
     for(i=0;i<5;i++)
     {
        avgCourseScore[i]=avgCourseScore[i]/5;
     }
     printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
     for(i=0;i<count;i++)
     {
        if(stu[i].score1<avgCourseScore[0]||stu[i].score2<avgCourseScore[1]||stu[i].score3<avgCourseScore[2]||stu[i].score4<avgCourseScore[3]||stu[i].score5<avgCourseScore[4])
        {
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
        }
     }
}

/*每门课程成绩在90分以上的学生信息*/
void greaterThanNinty()
{
    int i;
    printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
    for(i=0;i<count;i++)
     {
        if(stu[i].score1>90&&stu[i].score2>90&&stu[i].score3>90&&stu[i].score4>90&&stu[i].score5>90)
        {
            printf("%d\t%s\t%s\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
        }
     }
}

/*每门课程不及格的学生信息*/
void failed()
{
    int i;
    printf("\n学号\t姓名\t性别\t课程1\t课程2\t课程3\t课程4\t课程5\t总分\t平均分\n");
    for(i=0;i<count;i++)
     {
        if(stu[i].score1<60&&stu[i].score2<60&&stu[i].score3<60&&stu[i].score4<60&&stu[i].score5<60)
        {
            printf("%d\t%s\t%s\t%5.2f\t


%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\t%5.2f\n",                
                stu[i].stuNo,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].score5,
                stu[i].sumScore,stu[i].avgScore);
            fflush(stdin);
            getch();
        }
     }
}



C语言学生管理系统源代码

标签:管理系统   c语言   源代码   课程   

原文地址:http://12502074.blog.51cto.com/12492074/1931833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!