学生成绩管理系统(C语言实现)

来源:互联网 发布:淘宝客的收入怎么提走 编辑:程序博客网 时间:2024/06/07 23:49
//学生成绩管理系统(C语言实现)
#include<stdio.h> #include<stdlib.h>#include<string.h>//C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等#include<conio.h>//用getchar()、getch()就要包含<conio.h>#include<dos.h> #define LEN sizeof(struct student)#define FORMAT "%d%10s%16d%13d%15d%19.2f\n"#define DATA  stu[i].num,stu[i].name,stu[i].gaos_score,stu[i].cyy_socre,stu[i].English_score,stu[i].sumstruct student//定义结构体 {int num;//学号 char name[20];//姓名 int gaos_score;//高数成绩        由于在vc++里不能对浮点型进行初始化,故定义为int型而不是定义成float,double等 int cyy_socre;//C语言成绩 int English_score;//大英成绩 float sum;//总成绩 }stu[100];//由于不知道输入多少名学生信息,故直接定义足够大的数组长度 int main(){  //对各函数模板进行声明void show();//显示信息 void input();//输入信息 void search();//查询信息void del();//删除信息void modify();//修改信息void insert();//插入信息void order();//排序void number();//统计学生人数 void menu();//菜单 void bben();//版本信息 int n;bben();menu();  scanf("%d",&n);//输入选择功能的编号  while(n)  { switch(n)     { case 1: input();break;       case 2: search();break;       case 3: del();break;       case 4: modify();break;       case 5: insert();break;       case 6: order();break;       case 7: number();break;       case 8: show();printf("请按任意键返回菜单!\n");break;       default:break;     }    getch();    menu();//执行完功能再次显示菜单界面    scanf("%d",&n);//输入选择功能的编号  }  return 0;}void bben(){int i,j;system("cls");printf("\n\n\n\n\n");printf("                                           *                            *            \n");printf("                                          ***                          ***           \n");printf("                                         *****                        *****          \n"); printf("                               ***************欢迎进入学生成绩管理系统***************\n");printf("                               **                                                  **\n");printf("                               **                                                  **\n");printf("                               **                    版本1.2                       **\n");printf("                               **                                                  **\n");printf("                               **                                                  **\n");printf("                               **                  16网络工程x                     **\n");printf("                               **                                                  **\n");printf("                               **                                                  **\n");printf("                               **                     某某某                       **\n");printf("                               **                                                  **\n");printf("                               ******************************************************\n");printf("\n\n\n\n\n\n\n"); system("pause");//画面停止 }void menu(){system("cls");//清屏 printf("\n\n\n\n\n                                    ********************菜单********************\n");printf("                                    *                                          *\n");printf("                                    *               0.退出                     *\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("                                    *                                          *\n");printf("                                    ********************************************\n");printf("                                    请输入您要执行的序号(0--8):");}void show() { FILE *fp;   int i,a=0;   fp=fopen("data.txt","rb");//打开文件    while(!feof(fp))//判断文件指针*fp是否指向文件末尾    {   if(fread(&stu[a] ,LEN,1,fp)==1)    a++;   }     fclose(fp);   printf("学号        姓名           高数         C语言         大学英语         总分\t\n");   for(i=0;i<a;i++)       {    printf(FORMAT,DATA);//将信息打印       }}void input()//录入学生信息模块 {int i,a=0,n;//a是记录的条数char ch[2];FILE *fp;//定义文件指针if((fp=fopen("data.txt","a+"))==NULL)//打开指定文件  a+:为读/写打开一个指定文件  第一次打开文件,寻找原本存在的学生信息并且显示出来 {printf("不能打开文件\n");return;} while(!feof(fp)){if(fread(&stu[a],LEN,1,fp)==1)a++;                             //记录当前条数 }fclose(fp);if(a==0)printf("不能记录!\n");else{system("cls");show();    }    if((fp=fopen("data.txt","wb"))==NULL)//wb:(只写)为输出打开一个二进制文件   第二次打开文件,往文件里写入学生信息     {    printf("不能打开文件\n");    return;    }    for(i=0;i<a;i++)    fwrite(&stu[i],LEN,1,fp);    printf("请输入y/n(提示,输入y继续输入,输入n结束输入):");    scanf("%s",ch);    while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)    {    printf("学号");scanf("%d",&stu[a].num);for(i=0;i<a;i++)if(stu[i].num==stu[a].num){printf("该学号已存在,请按任何键继续!");getch();fclose(fp);return;}printf("姓名:");scanf("%s",stu[a].name);printf("高数:");scanf("%d",&stu[a].gaos_score);printf("C语言:");scanf("%d",&stu[a].cyy_socre);printf("英语:");scanf("%d",&stu[a].English_score);stu[a].sum=stu[a].gaos_score+stu[a].cyy_socre+stu[a].English_score;if(fwrite(&stu[a],LEN,1,fp)!=1){printf("不能保存!");getch();}else{printf("%s 已被保存!\n",stu[a].name);a++;}printf("是否继续y/n(提示,输入y继续输入,输入n结束输入):");scanf("%s",ch);    }    fclose(fp);    printf("OK!请按任意键返回主菜单!\n");}void search()//查询学生信息 {FILE *fp;int snum,i,a=0;char ch[2];if((fp=fopen("data.txt","rb"))==NULL)//rb:(只读)以二进制形式 { printf("不能打开文件\n"); return;}while(!feof(fp)) {if(fread(&stu[a],LEN,1,fp)==1)  a++;  }    fclose(fp);if(a==0){printf("没有记录!\n");return;}printf("请输入要查询学生的学号:");scanf("%d",&snum);for(i=0;i<a;i++)if(snum==stu[i].num){printf("已经找出该学生,是否要显示(y/n):");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf("学号        姓名           高数         C语言        大学英语         总分\t\n");printf(FORMAT,DATA); break;}}if(i==a) printf("未能找到要查询的信息!\n");printf("请按任意键返回主菜单!\n");}void del()//删除学生信息 {FILE *fp;int snum,i,j,a=0;char ch[2];if((fp=fopen("data.txt","r+"))==NULL){ printf("不能打开文件\n"); return;}while(!feof(fp))  if(fread(&stu[a],LEN,1,fp)==1)  a++;  fclose(fp);if(a==0){printf("没有记录!\n");return;}printf("请输入要删除学生的学号:");scanf("%d",&snum);for(i=0;i<a;i++)if(snum==stu[i].num)break;printf("已经找到该学生,是否删除(y/n):");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)//判断是否要进行删除      for(j=i;j<a;j++)      stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置      a--;//记录的总个数减1      if((fp=fopen("data.txt","wb"))==NULL)     {  printf("不能打开文件\n"); return; }  for(j=0;j<a;j++)//将更改后的记录重新写入指定的磁盘文件中      if(fwrite(&stu[j] ,LEN,1,fp)!=1)       {    printf("不能保存!\n");      getch();  }  fclose(fp);  printf("修改成功!\n");  printf("请按任意键返回主菜单!\n");}void modify()//修改学生信息{FILE  *fp;int snum,i,j,a=0;if((fp=fopen("data.txt","r+"))==NULL){printf("不能打开文件!\n");return;}while(!feof(fp))  //判断文件指针是否指到文件末尾if(fread(&stu[a],LEN,1,fp)==1)a++;if(a==0){printf("没有记录!\n");fclose(fp);return;}    printf("请输入你想修改的信息的学生学号!\n");   scanf("%d",&snum);   for(i=0;i<a;i++)   if(snum==stu[i].num)   break;   printf("已经找到该学生,请进行修改!\n");   printf("姓名:");scanf("%s",stu[i].name);printf("高数:");scanf("%d",&stu[i].gaos_score);printf("C语言:");scanf("%d",&stu[i].cyy_socre);printf("英语:");scanf("%d",&stu[i].English_score);stu[i].sum=stu[i].gaos_score+stu[i].cyy_socre+stu[i].English_score;if((fp=fopen("data.txt","wb"))==NULL){printf("不能够打开文件!\n");return;}for(j=0;j<a;j++)if(fwrite(&stu[j],LEN,1,fp)!=1){printf("不能保存!\n");getch();}fclose(fp);printf("请按任意键返回主菜单!\n");}void insert()//插入学生信息 {FILE *fp;int i,j,k,snum,m=0;if((fp=fopen("data.txt","r+"))==NULL){printf("不能打开文件!\n");return; }while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;if(m==0){printf("没有记录!\n");fclose(fp);}    printf("请选择你要插入的位置!(输入要插入的已存在的学号)\n");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==stu[i].num)break;for(j=m-1;j>i;j--)//将i以后的数字依次推后一位 stu[j+1]=stu[j];printf("请输入新的信息!\n");printf("学号:");scanf("%d",&stu[i+1].num);for(k=0;k<m;k++)if(stu[k].num==stu[i+1].num){printf("学生信息已经成功插入,请按任意键继续!\n");getch();fclose(fp);      } printf("姓名:");scanf("%s",stu[i+1].name);printf("高数成绩:");scanf("%d",&stu[i+1].gaos_score);printf("C语言成绩:");scanf("%d",&stu[i+1].cyy_socre);printf("英语成绩:");scanf("%d",&stu[i+1].English_score);stu[i+1].sum =stu[i+1].gaos_score+stu[i+1].cyy_socre+stu[i+1].English_score;     if((fp=fopen("data.txt","wb"))==NULL){printf("不能够打开文件!\n");return;} for(k=0;k<m+1;k++)    if(fwrite(&stu[k] ,LEN,1,fp)!=1){printf("不能够保存!\n");getch();}fclose(fp);printf("请按任意键返回主菜单!\n");}void order()//将成绩进行排序并输出 {FILE *fp;struct student t;int i,j,m=0;if((fp=fopen("data.txt","r+"))==NULL){printf("不能够打开文件!\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("没有记录!\n");return;}if((fp=fopen("data.txt","wb"))==NULL){printf("不能打开文件!\n");return;}for(i=0;i<m-1;i++)for(j=i+1;j<m;j++)if(stu[i].sum<stu[j].sum){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data.txt","wb"))==NULL){printf("不能打开!\n");return; }for(j=0;j<m;j++)if(fwrite(&stu[j],LEN,1,fp)!=1)       {         printf("%s不能储存!\n");         getch();      }  fclose(fp);    show();  printf("请按任意键返回主菜单!\n");}void number()//统计学生数量 {  FILE *fp;  int m=0;  if((fp=fopen("data.txt","r+"))==NULL)  {  printf("不能够打开文件!\n");  return;  }  while(!feof(fp))  if(fread(&stu[m],LEN,1,fp)==1)  m++;  if(m==0)  {  printf("不能够记录!\n");  fclose(fp);  return;  }  printf("这个班共有%d个学生!\n",m);  fclose(fp);  printf("请按任意键返回主菜单!\n");}