C语言 学生信息管理系统【图文背景丰富+代码】

选题目标

设计一个能够保证信息的准确性和时效性,随时通过计算机对系统进行管理,使得学生信息处于最新状态,保证统计数据和分析准确的具有增删改查学生成绩信息的系统,并为高校学生信息管理提供一种更加高效实用的管理手段,为学生信息的存储、计算、统计、分析、交流提供一种更加安全快捷的信息平台。

选题意义

随着高校规模的不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,各类学生的统计分析工作也越来越困难,面对如此繁杂的工作,计算机设计的系统能够为高校学生信息管理提供一种更加高效实用的管理手段,为学生信息的存储、计算、统计、分析、交流提供一种更加安全快捷的信息平台,并且能够减少大量的人工操作,以及在人工操作中由于人为因素而引起的数据错误,保证学生信息数据的安全性和完整性,使学生管理人员能够轻松,正确无误地完成各项工作,为学生管理工作服务。

实现的系统功能

学员信息录入(输入个人的学号、姓名、性别、各科成绩等信息,并将这些信息存盘),对学生成绩进行处理统计(计算个人平均成绩及总成绩,并进行存储),进行成绩排序(分别最总分和单科进行高分到低分的排序,显示成绩最高者)。输出统计结果,显示对应模块化功能的效果。可以根据实际情况,对学生的数目和信息进行及时、灵活的调整。

个性化设计说明

为了能够使得这一学生管理系统更加的灵活,以解决学生学籍调动引起的突发状况,设计了学生信息的增删改系统。可以随时对学生的所有信息进行整体的增删和单个信息的改动,使得程序更加的人性化,更加符合现实中不可预测的情况。分数grade原本的要求是整数,考虑到实际情况中分数存在有小数的情况,故而用float浮点型进行存储总成绩sum,三门分成绩(由高到低排序后的)score1,score2,score3,以及对应学生的三门成绩的平均值。不用人为地进行分数的四舍五入,再进行读入,省去了很多麻烦。同时设计了学生成绩信息直接查询系统,各项信息(学号,各科成绩等均能快速直接地展现)。此外,这一系统对于管理学生的数目的调控是很人性化的,最大管理人数MAX是在宏定义中的,定义结构体数组后,可以对MAX进行修改,保证学生信息管理系统所管理的学生的数目符合实际生活中的要求。

心得体会【很水的,紫薯加分哦,哈哈】

通过这一次课程设计,我明白了计算机系统的诸多裨益,清晰的了解到了计算机设计的系统在现在科技社会中不可或缺的地位以及重要性,就这一学生信息管理系统而言,它有着如下的优势:

①减轻劳动强度、提高工作效率、增加学生管理的透明度。高校学生管理信息系统可以发挥计算机的强大功能,让管理人员从大量繁琐的手工劳动中解放出来,将单调枯燥的纸张涂写变成灵活的电子信息操作。并充分利用网络优势,加快学校内部学生信息和文档的发布、传送和获取,改善和优化学生工作,使各个部门之间的工作联系紧密、井然有序、清楚明晰,大大减轻工作负担,提高工作效率,增加学生管理的透明度。
②降低管理成本,由于采用本系统的原因,使辅导员管理工作一改往日埋在各种表格中的被动局面,基本实现了无纸化办公,根除了很多日常管理中的浪费现象,体现出现代化学生管理的优势。
③规范化管理,由于采用了计算机统计分析学生信息,一些原始信息在录入时就必须要求准确录入,这就要求管理人员在提供信息时要准确,同时要求在录入时也要十分认真,这样做是为了将错误降到最低,提高系统工作的准确率,从而实现学生管理工作规范化。

在这一课程的实践操作中,模块化程序之间的联系显得尤为重要,一个完整的系统,各个模块之间要相互承接,它们之间既不能出现数据的误差,也不能出现语法的错误,否则很容易导致整个系统程序瘫痪,它们需要在相互协调的同时,共同为系统服务。这就需要我有分化处理与结合处理的能力,心怀纵观全局的理念,着眼于每个模块的细节,对人的耐心和能力的考验是极其之大,充分体现了这一课程设计对于学生综合能力的考核与提高。

而这一报告书是对这一产品的直接说明与形象体现,为我们日后想公司和客户进行产品说明做了很好的铺垫,打下了良好的基础。
最难之出并不在于代码的调试和图文的结合说明,虽然很多程序在写完之后很容易出现问题,运行时会遇到各种各样、五花八门的错误,需要细心、耐心的品质与强大的代码能力和扎实的基础功底,在图文说明的思路方面也要下很多心思去构造。

但是更难的是成果的叙述和价值的呈现。这个过程可谓用心良苦,精益求精啊,为了能让读者有更好的体验,符合自我的不懈追求,我经历了无数次的失败,并从中吸取了教训,汲取了经验,在老师的指导下,一步步地将自己的努力和成果的价值更好地呈现了出来。

最后,这一课程设计真的让我受益颇多,让我在辛苦劳碌和不断的尝试、调试和修改之中,实现了知识的迁移与应用,强化了自己的综合技能,开拓了自己的视野,促进了和老师之间的交流。

功能模块组成图展示

在这里插入图片描述

部分效果图展示【人机交互界面】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

下面奉上最最重要的源代码

#include<stdio.h>
#include <time.h>
#include<conio.h> /*清屏*/
#include <stdlib.h> /*显示目录*/
#include<string.h> 
#define MAX 202  

void input();  /*输入数据函数*/
void sort();  /*排序数据函数*/
void sort1(); 
void sort2(); 
void sort3();  
void display(); /*显示数据函数*/ 
void display1();
void insert(); /*插入数据函数*/
void del();  /*删除数据函数*/
void average(); /*平均值函数*/
void find(); /*查找数据函数*/
void find1();
void find2(); 
void dis_grade();  /*等级评定*/
void save(); /*保存数据函数*/
void read(); /*读出数据函数*/
void del_file();  /*删除文件函数*/
void modify(); /*修改文件函数*/
int now_no=0; 

struct student 
{
    
     
  int no,testScore; 
  char name[20]; 
  char sex[4]; 
  float score1,score2,score3; 
  float sort,ave,sum; 
}; 
struct student stu[MAX],*p; 

main()/*主函数*/ 
{
    
     
int as;
  char ch;
  do{
    
    
 
     start: printf("\n\n\n\t\t\t欢迎使用 XX 的学生成绩管理系统\n"); 
       printf("\n\n\n\n\n\n\t\t******************按任意键继续********************");
       ch=getch();
    }
  while(!ch); 
  system("cls");
 /*一下为功能选择模块*/ 
 do 
 {
    
     
    printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员总成绩信息\n\t\t\t\t3.对总成绩排序\n\t\t\t\t4.显示学员单科成绩排序\n\t\t\t\t5.添加学员信息\n\t\t\t\t6.删除学员信息\n\t\t\t\t7.修改学员信息\n\t\t\t\t8.查询学员信息\n\t\t\t\t9.从文件读入学员信息\n\t\t\t\t10.删除文件中学员信息\n\t\t\t\t11.保存学员信息\n\t\t\t\t12.各学员学科平均成绩等级评定\n\t\t\t\t13.退出\n"); 
    printf("\t\t\t\t选择功能选项(输入所选功能前的数字):"); 
    fflush(stdin);
    /*可用可不用,用于清除缓存防止下次用scanf输入是出现错误*/ 
    scanf("%d",&as); 
    switch(as) 
    {
    
     
       case 1:system("cls");
              input();
              break; 
       case 2:system("cls");
              display();
              break;
       case 3:system("cls");
              sort();
              break;
       case 4:system("cls");
              display1();
              break;
       case 5:system("cls");
              insert();
              break;
       case 6:system("cls");
              del();
              break; 
       case 7:system("cls");
              modify();
              break; 
       case 8:system("cls");
              find();
              break; 
       case 9:system("cls");
              read();
              break; 
       case 10:system("cls");
              del_file();
              break; 
       
       case 11:system("cls");
              save();
              break; 
       
	   case 12:system("cls");
              dis_grade(); 
              break; 
       case 13:system("exit");
              exit(0);       
	   default:system("cls");
              goto start; 
    } 
 }while(1);/*while(1),1表示真,所以while(1)表示永远循环下去,一般在while(1)的循环体内都有break 或者return 跳出循环*/ 
       /*至此功能选择结束*/ 
} 

void input()/*原始数据录入模块*/ 
{
    
     
  int i=0; 
  char ch; 
  do 
   {
    
     
         printf("\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n",i+1); 
         printf("\n输入学生编号:"); 
         scanf("%d",&stu[i].no); 
         fflush(stdin); 
         printf("\n输入学员姓名:"); 
         fflush(stdin); 
         gets(stu[i].name); 
         printf("\n输入学员性别:"); 
         fflush(stdin); 
         gets(stu[i].sex); 
         printf("\n输入学员成绩1:"); 
         scanf("%f",&stu[i].score1); 
         printf("\n输入学员成绩2:"); 
         fflush(stdin); 
         scanf("%f",&stu[i].score2); 
         printf("\n输入学员成绩3:"); 
         fflush(stdin); 
         scanf("%f",&stu[i].score3); 
         printf("\n\n"); 
         i++; 
         now_no=i; 
         printf("是否继续输入?(Y/N)"); 
         fflush(stdin); 
         ch=getch(); 
         system("cls"); 
   } 
   while(ch!='n'&&ch!='N'); 
   system("cls"); 
} 

void sort()/*排序数据函数*/ 
{
    
     
    struct student temp; 
    int i,j; 
    average();
    for(i=1;i<now_no;i++) 
    {
    
     
      for(j=1;j<=now_no-i;j++) 
         {
    
     
            if(stu[j-1].ave<stu[j].ave) 
               {
    
     
                  temp=stu[j]; 
                  stu[j]=stu[j-1]; 
                  stu[j-1]=temp; 
                } 
         } 
    } 
    printf("排序以完成进入功能2可进行显示\n");
    system("pause");
    system("cls");
} 

void sort1()/*排序数据函数*/ 
{
    
     
  struct student temp; 
  int i,j; 
  for(i=1;i<now_no;i++) 
   {
    
     
      for(j=1;j<=now_no-i;j++) 
         {
    
     
             if(stu[j-1].score1<stu[j].score1) 
                {
    
     
                     temp=stu[j]; 
                     stu[j]=stu[j-1]; 
                     stu[j-1]=temp; 
                } 
          } 
   } 
} 

void sort2()/*排序数据函数*/ 
{
    
     
     struct student temp; 
     int i,j; 
     for(i=1;i<now_no;i++) 
      {
    
     
        for(j=1;j<=now_no-i;j++) 
          {
    
     
             if(stu[j-1].score2<stu[j].score2) 
                 {
    
     
                    temp=stu[j]; 
                    stu[j]=stu[j-1]; 
                    stu[j-1]=temp; 
                 } 
          } 
      } 
} 

void sort3()/*排序数据函数*/ 
{
    
     
     struct student temp; 
     int i,j; 
     for(i=1;i<now_no;i++) 
       {
    
     
          for(j=1;j<=now_no-i;j++) 
            {
    
     
               if(stu[j-1].score3<stu[j].score3) 
                  {
    
     
                      temp=stu[j]; 
                      stu[j]=stu[j-1]; 
                      stu[j-1]=temp; 
                  } 
            } 
       } 
}

void display()/*显示数据函数*/ 
{
    
     
  int i; 
  char as; 
  average();    
  do 
   {
    
     
      printf("\t\t\t班级学员信息列表\n"); 
      printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n"); 
      for(i=0;i<now_no&&stu[i].name[0];i++) 
         printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); 
      printf("\t\t按任意键返回主菜单."); 
      fflush(stdin); 
      as=getch(); 
   } 
  while(!as); 
  system("cls"); 
}

void display1()/*显示数据函数*/
{
    
    
   int i; 
   char as;   
   do 
    {
    
     
       printf("\t\t\t班级学员score1成绩排序\n"); 
       printf("\t编号\t姓名\t性别\t成绩1\n");
       sort1();
       for(i=0;i<now_no&&stu[i].name[0];i++)
          printf("\t%d\t%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1); 
       printf("\t\t\t班级学员score2成绩排序\n"); 
       printf("\t编号\t姓名\t性别\t成绩2\n");
       sort2();
       for(i=0;i<now_no&&stu[i].name[0];i++)
           printf("\t%d\t%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score2);  
       printf("\t\t\t班级学员score3成绩排序\n"); 
       printf("\t编号\t姓名\t性别\t成绩3\n");
       sort3();
       for(i=0;i<now_no&&stu[i].name[0];i++)
           printf("\t%d\t%s\t%s\t%.2f\t\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score3);  
       printf("\t\t按任意键返回主菜单."); 
       fflush(stdin); 
       as=getch(); 
    } 
   while(!as); 
   system("cls"); 
}

void dis_grade()
{
    
    
	int i;
	char as;
	do 
   {
    
     
	  printf("________________________________________________________\n");
	  printf("     |90分以上:A | 80~89分:B | 70~79分:C | 60~69分:D | 60分以下:E \n");
	  printf("--------------------------------------------------------\n");
      for(i=0; i<now_no&&stu[i].name[0]; i++) 
      {
    
    
      	printf("\t%d\t%s\t%s",stu[i].no,stu[i].name,stu[i].sex);
      	if(stu[i].ave>=90) printf("\t等级:A");
      	else if(stu[i].ave>=80&&stu[i].ave<=89) printf("\t等级:B");
      	else if(stu[i].ave>=70&&stu[i].ave<=79) printf("\t等级:C");
      	else if(stu[i].ave>=60&&stu[i].ave<=69) printf("\t等级:D");
      	else if(stu[i].ave<60) printf("\t等级:E");
	  }
	  printf("--------------------------------------------------------\n");
      printf("\t\t按任意键返回主菜单."); 
      fflush(stdin); 
      as=getch(); 
   } 
  while(!as); 
  system("cls"); 
}

void insert()/*插入数据函数*/ 
{
    
     
   char ch; 
   do 
    {
    
     
        printf("\n\t\t输入新插入学员队信息\n"); 
        printf("\n输入学生编号:"); 
        scanf("%d",&stu[now_no].no); 
        fflush(stdin); 
        printf("\n输入学员姓名:"); 
        fflush(stdin); 
        gets(stu[now_no].name); 
        printf("\n输入学员性别:"); 
        fflush(stdin); 
        gets(stu[now_no].sex); 
        printf("\n输入学员成绩1:"); 
        fflush(stdin); 
        scanf("%f",&stu[now_no].score1); 
        printf("\n输入学员成绩2:"); 
        fflush(stdin); 
        scanf("%f",&stu[now_no].score2); 
        printf("\n输入学员成绩3:"); 
        fflush(stdin); 
        scanf("%f",&stu[now_no].score3); 
        printf("\n\n"); 
        now_no=now_no+1; 
        sort(); 
        printf("是否继续输入?(Y/N)"); 
        fflush(stdin); 
        ch=getch(); 
        system("cls"); 
     } 
     while(ch!='n'&&ch!='N'); 
} 

void del()/*删除数据函数*/ 
{
    
     
    int inum,i; 
    printf("输入要删除学员的编号:"); 
    fflush(stdin); 
    scanf("%d",&inum); 
    for(i=0;i<now_no;i++) 
      {
    
     
        if(stu[i].no==inum) 
          {
    
     
             if(i==now_no)now_no-=1; 
             else 
               {
    
     
                   stu[i]=stu[now_no-1]; 
                   now_no-=1; 
               } 
             sort(); 
             break; 
          } 
       } 
     system("cls"); 
} 

void save()/*保存数据函数*/ 
{
    
     
    FILE *fp; 
    int i; 
    char filepath[20]; 
    printf("输入要保存的文件路径:"); 
    fflush(stdin); 
    gets(filepath); 
    if((fp=fopen(filepath,"w"))==NULL) 
      {
    
     
          printf("\n保存失败!"); 
          exit(0); 
      } 
    for(i=0;i<now_no;i++) 
         {
    
     
              stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; 
              stu[i].ave=stu[i].sum/3; 
              fprintf(fp,"\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); 
         } 
    fclose(fp); 
    printf("学生信息已保存在%s中!\n",filepath); 
    system("pause"); 
    system("cls"); 
} 

void find()/*查询函数*/ 
{
    
     
    int i; 
    char str[20],as; 
    do 
     {
    
     
        printf("输入要查询的学生姓名:"); 
        fflush(stdin); 
        gets(str); 
        for(i=0;i<now_no;i++) 
        if(!strcmp(stu[i].name,str)) 
           {
    
     
              printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n"); 
              printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave); 
           } 
        printf("\t\t按任意键返回主菜单."); 
        fflush(stdin); 
        as=getch(); 
      } 
    while(!as); 
    system("cls"); 
} 

void average()/*求平均数*/ 
{
    
     
  int i; 
  for(i=0;i<now_no;i++) 
    {
    
     
        stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3; 
        stu[i].ave=stu[i].sum/3; 
    } 
} 

void modify()/*修改数据函数*/ 
{
    
     
  int i; 
  char str[20]; 
  printf("输入要修改的学生姓名:"); 
  fflush(stdin); 
  gets(str); 
  for(i=0;i<now_no;i++) 
  {
    
    
     if(!strcmp(stu[i].name,str)) 
        {
    
     
        system("cls"); 
        printf("\n\t\t输入新插入学员队信息\n"); 
        printf("\n输入学生编号:"); 
        fflush(stdin); 
        scanf("%d",&stu[i].no); 
        printf("\n输入学员性别:"); 
        fflush(stdin); 
        gets(stu[i].sex); 
        printf("\n输入学员成绩1:"); 
        fflush(stdin); 
        scanf("%f",&stu[i].score1); 
        printf("\n输入学员成绩2:"); 
        fflush(stdin); 
        scanf("%f",&stu[i].score2); 
        printf("\n输入学员成绩3:"); 
        fflush(stdin); 
        scanf("%f",&stu[i].score3); 
        printf("\n\n"); 
        sort(); 
        break; 
       }
  }
  system("cls"); 
} 

void read() 
{
    
     
  FILE *fp; 
  int i; 
  char filepath[20]; 
  printf("输入要读入的文件路径:"); 
  fflush(stdin); 
  gets(filepath); 
  if((fp=fopen(filepath,"r"))==NULL) 
    {
    
     
       printf("找不到%s文件!\n",filepath); 
       system("pause"); 
       exit(0); 
    } 
 now_no=0; 
 for(i=0;i<MAX&&!feof(fp);i++) 
    {
    
     
       fscanf(fp,"\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n",&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2,&stu[i].score3,&stu[i].ave); 
       now_no++; 
    } 
 fclose(fp); 
 printf("保存的在文件%s中的所有信息已经读入!\n",filepath); 
 system("pause"); /*按任意键继续*/
 system("cls"); 
} 

void del_file() 
{
    
     
 FILE *fp; 
 char filepath[20]; 
 printf("输入要删除的文件路径:"); 
 fflush(stdin); 
 gets(filepath); 
 fp=fopen(filepath,"w"); 
 fclose(fp); 
 printf("保存的在文件%s中的所有信息已经删除!\n",filepath); 
 system("pause"); 
 system("cls"); 
}

猜你喜欢

转载自blog.csdn.net/Luoxiaobaia/article/details/107575147