C语言 学生成绩管理系统

//学生成绩管理系统
//用户名:enjoy65
//密码:  enjoy65


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

//定义全局变量x,i,j,n
char x;      
int i,j, n;

struct student   //定义结构体
{
    int id ;
    char name[20];
    float Math;
    float English;
    float Chinese;
    float average;
}stu[5];



/*----------------------------------





------------------------------------*/
void my_add()     //获取数据 并输出,最后退出
{
    FILE *fp;   //文件指针
    char t;
    int i;
    if((fp = fopen("stu_dat","w")) == NULL)
    {
        printf("cannot open file \n");
        return ;
    }
    for(i=0; i<5; i++)        //输入数据
    {
        printf("Please enter %d student ID:", i+1);
        scanf("%d",&stu[i].id);
        printf("Please enter %d student name:", i+1);
        scanf("%s",stu[i].name);
        printf("Please enter %d student Math score:", i+1);
        scanf("%f",&stu[i].Math);
        printf("Please enter %d student English score:", i+1);
        scanf("%f",&stu[i].English);
        printf("Please enter %d student Chinese score:", i+1);
        scanf("%f",&stu[i].Chinese);
        stu[i].average = (stu[i].Math + stu[i].English + stu[i].Chinese)/3;
        printf("\n");
        fwrite(&stu[i], sizeof(struct student), 1, fp);   //将stu的数据写入文件中保存

    }

    fclose(fp);  //关闭文件
        system("cls");  //清屏
    printf("num\tID\tname\tMath\tEnglish\t  Chinese\taverage\n");

    for(i=0 ; i<5; i++)
    {
        printf("%d\t%d\t%s\t%.2f\t%.2f\t  %.2f\t\t%.2f\n",
                i+1 ,stu[i].id,stu[i].name,stu[i].Math,stu[i].English,
                stu[i].Chinese,stu[i].average);
        printf("\n");
    }         //按格式显示所输入数据
    printf("Press any key to exit : ");
    getchar();   
    scanf("%c",&x);  
}


/*----------------------------------



------------------------------------*/
void my_View()          //将所得数据按平均分进行排序  从大到小 并输出排序后的数据,最后退出     
{   char x;
    struct student temp;
    FILE *fp;
    if((fp = fopen("stu_dat","w")) == NULL)
    {
        printf("cannot open file\n");
        return;
    }
    fread(stu, sizeof(struct student), 5, fp);       //读取硬盘文件中数据到内存

    for(i=0; i<4; i++)
        for(j=0; j<4-i; j++)          //进行冒泡排序   小的在最右边   从大到小  
            if(stu[j].average<stu[j+1].average)
            {
                temp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = temp;
            }
    fwrite(stu, sizeof(struct student), 5, fp);               //将更改后的数据写入硬盘文件
        fclose(fp);  //关闭文件
        system("cls");  //清空屏幕
    printf("num\tID\tname\tMath\tEnglish\tChinese\t\tAve\n");               //按格式显示修改之后的数据
    for(i=0; i<5; i++)
    {
        printf("%d\t%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\n",
                i+1 ,stu[i].id,stu[i].name,stu[i].Math,
                stu[i].English,stu[i].Chinese,stu[i].average);
    }
    printf("\n");
    printf("press any key to exit \n");
    getchar();
    scanf("%c",&x);
}


/*----------------------------------




------------------------------------*/
void average(struct student mt[5])      //求得并输出数学、英语、语文的成绩平均值,最后退出
{
    int i;
    char x;
    float sum1 = 0, sum2 = 0, sum3 = 0;
    float ave1, ave2, ave3;
    for(i=0; i<5; i++)
    {
        sum1 = sum1 + mt[i].Math;
        sum2 = sum2 + mt[i].English;
        sum3 = sum3 + mt[i].Chinese;
    }    //分别求数学、英语、语文的成绩总和
    ave1 = sum1 / 5;
    ave2 = sum2 / 5;
    ave3 = sum3 / 5;         //分别求数学、英语、语文的成绩平均值
    printf("Average score of the class:\n");
    printf("Math     : %.2f\n", ave1);
    printf("English  : %.2f\n", ave2);
    printf("Chinese  : %.2f\n", ave3);
    printf("\n");     //分别输出数学、英语、语文的成绩平均值
    printf("Press any key to exit : ");
    getchar();
    scanf("%c",&x);
}



/*----------------------------------




------------------------------------*/
void my_modify_function( int n )  //    只对某位学号为n的学生的基本数据进行修改,并输出
                                  //修改后的总数据,如没有学号为n的学生则报错,最后退出
{ 
    FILE *fp;
    FILE *ofp;
    if((fp = fopen("stu_dat","w+")) == NULL)   
    {
        printf("cannot open file \n");
        return ;
    }
    fread(stu, sizeof(struct student), 5, fp);    //读取文件中的数据
    for(i=0; i<5; i++)
    {
        if(n == stu[i].id)  // 找到某位学号为n的学生 并对其数据进行修改
        {

            printf("Please enter  student name:");    //修改的数据包括:名字,数学、英语、语文成绩,三科平均分
            scanf("%s",stu[i].name);
            printf("Please enter student Math score:");
            scanf("%f",&stu[i].Math);
            printf("Please enter student English score:");
            scanf("%f",&stu[i].English);
            printf("Please enter student Chinese score:");
            scanf("%f",&stu[i].Chinese);
            stu[i].average = (stu[i].Math + stu[i].English + stu[i].Chinese)/3;
            for(i=0; i<5; i++)
                fwrite(&stu[i],sizeof(struct student),1,fp);   //将修改后的数据重新写入文件中
            fclose(fp);   //关闭文件
            printf("\n");   
            system("cls");   //清屏
            printf("num\tID\tname\tMath\tEng\tChinese\t\tave\n");    //按指定格式输出总数据
            for(i=0 ; i<5; i++)
                printf("%d\t%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\n",
                         i ,stu[i].id,stu[i].name,stu[i].Math,stu[i].English,stu[i].Chinese,stu[i].average);
            printf("\n");
            printf("Press any key to exit : ");   //按任意键退出
            getchar();
            scanf("%c",&x);
            return;
        }
    }
    fclose(fp);   //如果没有学号为n的学生   则关闭文件
    printf("cannot find the student ID!");   //报错
    printf("\n");
    printf("Press any key to exit : ");   //退出
    getchar();
    scanf("%c",&x);
}

/*----------------------------------




------------------------------------*/
void my_modefy()     //要求输入需要修改的学生学号n,并调用函数my_modify_function 进行具体修改
{
    int n;
            while(1)
            {
            printf("Please enter you need modify student ID:\n");
            scanf("%d",&n);
            my_modify_function(n);
            break;
            }
}



/*----------------------------------




------------------------------------*/
void my_find()     //根据学号得到某位学生的基本数据并输出,最后退出
{
    int fd;
    printf("Please enter the student ID : ");   //输入所求学生学号
    scanf("%d",&fd);
    system("cls");   //清屏
    for(i=0; fd != stu[i].id; i++)  ;                     //    如果i和学生学号不符合,则不进行任何操作,并让i继续累加
                                                          // 直至i与学生学号相等时结束for循环,即根据所输入学号fd找出所
                                                          // 求学生stu[i]。
    printf("num\tID\tname\tMath\tEnglish\t   Chinese\n");       
    printf("%d\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\n",           //按格式输出该学生的基本数据            
                stu[i].id,stu[i].name,stu[i].Math,
                stu[i].English,stu[i].Chinese,stu[i].average);
    printf("Press any key to exit : ");    //退出
    getchar();
    scanf("%c",&x);
}





/*----------------------------------




------------------------------------*/
void my_exit(char *T)   //退出
{
            printf("--------------------------------------\n\n\n\n\n\n\n\n\n\n\n");
            printf("Whether out of this link Y/N : ");
            getchar();      //接收所输入字符
            scanf("%c",T);   
}

int my_doc()
{
        system("cls");  //清空屏幕
        printf("\t*******************************************************\n");
        printf("\t*******************************************************\n");
        printf("\t**                                                   **\n");
        printf("\t**                                                   **\n");
        printf("\t**             STUDENT MANAGEMENT SYSTEM             **\n");
        printf("\t**                                                   **\n");
        printf("\t**                   Please choose!                  **\n");
        printf("\t**          1 : Add five student information         **\n");     //调用函数 my_add()
        printf("\t**          2 : View all results                     **\n");     //调用函数 my_View()
        printf("\t**          3 : Average score of the class           **\n");     //调用函数 average
        printf("\t**          4 : Find student score                   **\n");     //调用函数 my_find()
        printf("\t**          5 : Modify student information           **\n");     //调用函数 my_modefy()、my_modify_function
        printf("\t**          0 : Exit                                 **\n");     //调用函数 my_exit
        printf("\t**                                                   **\n");
        printf("\t**                                                   **\n");
        printf("\t*******************************************************\n");
        printf("\t*******************************************************\n");
        printf("\n\n\n\n\n\n\n");
        printf("\tyou are choose:");
        scanf("%d",&n);     //接收选取结果
        return n;
}

/*----------------------------------




------------------------------------*/
int main()
{
    char name[20]="enjoy65",_name[20];
    char password[10]="enjoy65",_password[10];
    int f1,f2;
    int i;
    char T;
    printf("\t\t  ******* 欢迎进入学生成绩管理系统 *******\n\n");
    printf("\t\t          用户请登录\n\n");
    for(i=0;i!=5;)
    {
      printf("\t  用户名:");
      gets(_name);
      f1=strcmp(_name,name);
      printf("\t  密码:");
      gets(_password);
      f2=strcmp(_password,password);
      if(f1==0 && f2==0)
      {
        printf("\t\t\t\t    登陆成功!");
        break;
      }
      else
      {
        printf("\n\t\t     用户名或密码错误!");
        printf("您还有%d次机会\n\n",4-i);
        i++;
      }

    }

    if(i==5)
    {printf("对不起,您的输入次数过多\n");  return 0;}
    
    do     //先执行do语句
    {  
        switch(my_doc())      //switch语句:先调用函数my_doc()得到其返回值n,再判断
        
        {
            case 1:           //如果函数my_doc的返回值n为1,则调用函数my_add(), 并结束switch语句
                my_add();
                break;
            case 2:           
                my_View();
                break;
            case 3:
                average(stu);
                break;
            case 4:
                my_find();
                break;
            case 5:
                my_modefy();
                break;
            case 0:
                my_exit(&T);     //函数的地址传递,可改变实参T的值
                break;
            default:           //如果n与以上情况均不符合,则报错
                printf("Error! Please input the new.\n");
        }
    }while(T != 'y' && T != 'Y');     //    如果判断返回值n为0调用了my_exit函数,则字符T被赋初值,
                                      // 接着判断T是否为‘y’或‘Y’如果是,则不再执行do..while语句
                                      //    反之,如果n值不为0,而是1,2,3,4,5中任何一个,则在
                                      // 调用完对应函数后,while语句为真,返回继续执行do语句。
    system("cls");   //清屏                  
    return 0;
}
<p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: rgb(254, 254, 242);">这是闲来无事自己注释一个学生管理系统,个人认为主要是函数调用以及利用文件指针打开保存文件,对其中的一些易错或比较难理解的点进行了较详细的注释。与大家分享!</p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; line-height: 19.5px; font-size: 13px; font-family: Verdana, Arial, Helvetica, sans-serif; background-color: rgb(254, 254, 242);">但在注释过程中发现一个问题,在自定义函数中如my_add、my_view,如果去掉最后几行代码,则在主函数调用时,该函数不可正常工作,目前还不知道具体应该怎么理解。</p><pre style="margin-top: 0px; margin-bottom: 0px; padding: 0px; white-space: pre-wrap; word-wrap: break-word; font-size: 13px; line-height: 19.5px; background-color: rgb(254, 254, 242);">printf("Press any key to exit : "<span style="margin: 0px; padding: 0px; line-height: 1.5;">);
    getchar();   
    scanf("%c",&<span style="margin: 0px; padding: 0px; line-height: 1.5;">x); </span></span>

 


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<ctype.h> #define M 3 struct student {long num; char name[20]; char sex; int score[5]; int ave; }stu[M]; void init() { printf("\t\t********************************\n\n"); printf("\t\tStudent score management systerm \n"); printf("\n"); printf("\t\t Make by Maggiehe \n"); printf("\n"); printf("\t\t Student number is 3206***** \n\n"); printf("\t\t********************************\n\n"); } void input() { int i,j; printf("\nInput the student number name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) {scanf("%ld,%s,%c",&stu[i].num,stu[i].name,&stu[i].sex); for(j=0;j<5;j++) scanf("%d",&stu[i].score[j]); scanf("%d",&stu[i].ave); save(); } } void list() { int i,j; clrscr(); printf("\t**********************student****************************\n"); printf("num name sex math English PE maolun majing:\n"); for(i=0;i<M;i++) { printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } if((i+1)%10==0) { printf("\npress any key continue.......\n"); getch(); } printf("\t*************************end*********************************\n"); } void average() { int i,j; float sum[M]; for(i=0;i<M;i++) for(j=0;j<5;j++) sum[i]+=stu[i].score[j]; stu[i].ave=sum[i]/5.0; } void search_num() { long num; int i,j; printf("\nplease enter number which you want to search:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) if(stu[i].num!=num) printf("The number is not exist\n"); else { printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } } void search_nam() { int i,j; char name[20]; printf("\nplease enter name which you want to search:"); scanf("%s",&name); printf("\n"); for(i=0;i<M;i++) if(strcmp(stu[i].name,name)==0) { printf("number name sex math English PE maolun majing average:\n"); printf("%ld%s%c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); } else printf("\nThe name is not exist!!!\n"); } void search_ave() { int i,j,a=0; float k; printf("please enter average score which you want to search:"); scanf("%f",&k); printf("\n"); for(i=0;i<M;i++) if(stu[i].ave!=k) printf("The average score is not exist!!!\n"); else for(i=0;i<M;i++) { if(stu[i].ave<=k) printf("number name sex math English PE maolun majing average\n"); printf("%ld %s %c",stu[i].num,stu[i].name,stu[i].sex); for(j=0;j<5;j++) printf("%d",stu[i].score[j]); printf("%d",stu[i].ave); a++; } } void sort() { int i,j; struct student temp; for(i=0;i<M;i++) for(j=i+i;j<M;j++) if(stu[i].ave<stu[j].ave) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; } } void save() { int i; FILE *fp; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } for(i=0;i<M;i++) if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void delect() { int i,t; long num; printf("please enter number which you want to delect:"); scanf("%ld",&num); printf("\n"); for(i=0;i<M;i++) { if(stu[i].num!=num) printf("The number is not exist!!!\n"); if(stu[i].num==num) t=i; } for(i=t;i<M;i++) stu[i]=stu[i+1]; save(); } void insert() {FILE *fp; int i,n,t; struct student s; printf("please input record\n"); printf("number name sex math English PE maolun majing average\n"); scanf("%ld,%s,%c,%d%d%d%d%d%d",&s.num,s.name,&s.sex,&s.score[0],&s.score[1],&s.score[2],&s.score[3],&s.score[4],&s.ave); s.ave=(s.score[0]+s.score[1]+s.score[2]+s.score[3]+s.score[4])/3.0; if((fp=fopen("student.dat","wb"))==NULL) {printf("cannot open file\n"); return; } i=M; for(t=0;stu[i].ave>s.ave&&t<M;t++) if(fwrite(&s,sizeof(struct student),1,fp)!=1) printf("file write error\n"); fclose(fp); } void MainMenu() {clrscr(); printf("\t********************************************************************\n \n); Printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1. search record\n"); printf("\t 2. sort record\n"); printf("\t 3. insert record\n"); printf("\t 4. delect record\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t********************************************************************\n"); } void menu_select() {clrscr(); printf("\t******************************************************************\n\n"); printf(“\n”); printf("\t choose one of following:\n"); printf("\t 1.1 search by number\n"); printf("\t 1.2 search by name\n"); printf("\t 1.3 search by average score\n"); printf("\t please enter your choice:"); printf(“\n”); printf("\t******************************************************************\n"); } void search() { char ch; clrscr(); menu_select(); ch=getch(); switch(ch) { case '1':search_num();break; case '2':search_nam();break; case '3':search_ave();break; } } main() { char ch; clrscr(); init(); input(); list(); average(); save(); MainMenu(); ch=getch(); switch(ch) { case '1':search();break; case '2':sort();break; case '3':insert();break; case '4':delect();break; } search_num(); search_nam(); search_ave(); sort(); delect(); insert; }
C语言学生成绩管理系统(以包含文件的形式写的),结构体,链表,数组,以下是main.c #include #include #include #define m 3/*宏定义m的值为3*/ struct node/*链表初始化*/ { char name[20]; int no; float score[m]; float sum; float avg; struct node *next; }; char ch[m+4][20]={{"学号"},{"姓名"},{"语文"},{"数学"},{"英语"},{"总分"},{"平均分"}};/*定义并初始化一个全局二维字符数组*/ #include "save.c"/*包含保存文件*/ #include "read.c"/*包含读取文件*/ #include "output.c"/*包含打印文件*/ #include "set.c"/*包含录入文件*/ #include "demand.c"/*包含查询文件*/ #include "sort.c"/*包含排序文件*/ #include "modified.c"/*包含修改文件*/ #include "add.c"/*包含添加文件*/ #include "del.c"/*包含删除文件*/ void main() { int n; printf("\n\t\t\t欢迎使用学生成绩管理系统\n\n"); printf("\t\t\t\t\t\t制 作: XIA XIA\n"); do { printf("\n\n1:学生成绩录入,并保存\n"); printf("2:学生成绩查询\n"); printf("3:学生成绩的排序\n"); printf("4:学生成绩的修改\n"); printf("5:学生成绩的打印\n"); printf("6:学生信息的添加\n"); printf("7:学生信息的删除\n"); printf("0:退出学生成绩管理系统\n\n\n"); printf("输入你要执行操作的相应序号\n"); scanf("%d",&n);/*输入相就的操作的序号*/ switch (n) { case 1: set();break;/*调用录入函数*/ case 2: demand();break;/*调用查询函数*/ case 3: sort();break;/*调用排序函数*/ case 4: modified();break;/*调用修改函数*/ case 5: output();break;/*调用打印函数*/ case 6: add();break;/*调用添加函数*/ case 7: del();break;/*调用删除函数*/ case 0: printf("正在退出学生成绩管理系统......\n");exit(0);/*直到输入“0”退出学生成绩管理系统*/ default:printf("输入错误码,请重新输入\n"); } }while(1); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值