栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言学生信息管理系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言学生信息管理系统

功能在菜单中

远古代码,好操蛋

课程名称可以保存在字符串数组,这样方便扩展课程(可改进的地方)

可以用链表来储存信息,那样难度高,具有挑战性,而且加分啊!

 

// author daijunjie
#include 
#include 
#include 
#define N 500
 int  nf ,ns , rate[N] , check[N] , c=0 ;// nf 学生人数  ns enter()函数中确定增加的学生人数  rate记录排名信息 check检测学号是否重复 
 float ave[N];
 char filename[50];
 struct student                                 
{
    int stunum;                          
	char sex;                            
	char name[50];                       
	int score[4];                        
	float average;                       
} stuarr[N],stuenter[N],*Node; // 可用结构体数组保存信息然后操作文件,也可以用链表,结构体作为一个结点 比如 Node stu即是一个结点指针 
void people()                                   //校正文件所存入学生数量 
{ int i=0;                                      //即得到文件内学生信息数量nf 
  FILE *fp;
  fp=fopen(filename,"r");    //可用 filename 记录文件名,这样可以打开用户自定义名称的文件 
  if(fp==NULL)  
	{  printf("File cannot open! 请自行在同文件夹目录下创建文件 " );
	   exit(1);
	}  
	else while(!feof(fp)){
	fscanf(fp,"%d %c %s %d %d %d %d",&stuarr[i].stunum, &stuarr[i].sex, &stuarr[i].name, &stuarr[i].score[0], &stuarr[i].score[1], &stuarr[i].score[2], &stuarr[i].score[3]);        
  	   i+=1;             } 
   nf=i-1; 
   fclose(fp);
}
void scan()                                     //将文件信息导入到数组,方便进行信息查询,求平均分,按平均分排名次 //简称读盘 
{ int i=0; 
   FILE *fp;
   fp=fopen("student.txt","r");
   if(fp==NULL){
   printf("文件打开失败!");
   exit(1);} 
   while(!feof(fp)){                          //while(!feof(fp)),文件指针到位置末尾则!feof(fp)==0,否则为1
  	   fscanf(fp,"%d %c %s %d %d %d %d",&stuarr[i].stunum, &stuarr[i].sex, &stuarr[i].name, &stuarr[i].score[0], &stuarr[i].score[1], &stuarr[i].score[2], &stuarr[i].score[3]);
		 i++;                                 //以此作为 while的循环条件,每读取一次,结构体数组的信息就则增加一个“结构体 ” 
   }  
   fclose(fp);
}
void average()                                  //平均数调用函数 
{ scan(); 
  float a;
  int i,j;
  for(i=0;i>>数据存盘成功!n");
   fclose(fp);
} 
 void reload()                                  //覆盖写入,供xiugai和del调用,实现数据修改和删除 
{ int i; 
  FILE *fp;
  fp=fopen(filename,"w+");
  for(i=0;i=90&& stuarr[i].score[j]<=100)       s[j][0]+=1;
		  else if(stuarr[i].score[j]>=80&&stuarr[i].score[j]<90)     s[j][1]+=1;
		  else if(stuarr[i].score[j]>=60&&stuarr[i].score[j]<80)     s[j][2]+=1;
		  else if(stuarr[i].score[j]<60)                             s[j][3]+=1; 
		              } 
		  printf("n分数段     C语言     高等数学    英语    线性代数n");
	      printf("90-100      %d         %d           %d        %dn"     ,s[0][0],s[1][0],s[2][0],s[3][0]) ;
	      printf("80-89       %d         %d           %d         %dn"     ,s[0][1],s[1][1],s[2][1],s[3][1]) ;
		  printf("60-79       %d         %d           %d         %dn"     ,s[0][2],s[1][2],s[2][2],s[3][2]) ;
		  printf("60以下      %d         %d           %d         %dn"     ,s[0][3],s[1][3],s[2][3],s[3][3]) ;
	  }
void paixu( student stuarr[])                   //按平均成绩排序,并给出名次 
{int i,j,t;
 char s[50];
 for(i=0;i>>>>现有人数为:%d%n",nf);
    printf("请输入你要添加的学生的信息n");
    printf("请输入第%d个学生的信息:n",nf+1);
	stuarr[0].stunum=Repeatability_checking();  //调用Repeatability_checking函数,返回值为成功输入的学号 
        ch=getchar();
	    printf("请输入第%d名学生的性别:",nf+1);
	    scanf("%c",&stuarr[0].sex);
		ch=getchar();
	    printf("请输入第%d名学生的姓名:",nf+1);
	    gets(stuarr[0].name);
		printf("请输入第%d名学生的成绩:n",nf+1);
		printf("C语言   高等数学   英语    线性代数n");			
	    scanf("%d %d %d %d",&stuarr[0].score[0], &stuarr[0].score[1], &stuarr[0].score[2], &stuarr[0].score[3]);  
        ns=1;cunpan();
	    printf(">>>增加成功!n") ;
  }
void del()                                      //删除一条学生记录 
{  scan();                                      //将文件信息导入到结构体数组,对结构体数组的数据进行操作,修改or删除 
   int n,i,j,find=0;                            //完成相应操作以w+的覆盖写入方式导入回文件 
   char name[50],ch;
   printf(">>现有人数为:%d%n",nf);
   printf(">>请问你要删除哪位学生的信息n");
  printf("-------请选择检索方式----------n");
  printf("-------1--按学号查询-----------n");
  printf("-------2--按姓名查询-----------n");
  printf("-------3--返回主菜单-----------n");
  scanf("%d",&n);
  while(1){if(n<1||n>3) {printf("请在1到3之内输入n");scanf("%d",&n);} else break; }
  switch(n){
  case 1: 
    printf("请输入学号:");
    scanf("%d",&n);
                     //DEL[d]=n;d++;
    for(i=0;i>>删除成功!n");
	  system("pause");break;
         }
	  case 2:
	  ch=getchar();
	  printf("请输入所要删除的学生姓名:");
	  gets(name);
	for(i=0;i>>删除成功!n");
	  system("pause");break;
           }
	  case 3:break;
         }   
}
void xiugai()                                   //修改学生记录 
{ int num,i,j,n,find=0;
  char ch;
  printf("请问你要修改哪位学生的信息,请输入学号:");
  scanf("%d",&num);
  for(i=0;i6) printf("输入错误,请重新输入");
		else break; 
		  } while(1);
		  
		switch(n){
		case 1:printf("姓名:%s要改为:",stuarr[i].name);gets(stuarr[i].name);break;
		case 2:printf("性别:%c要改为:",stuarr[i].sex);scanf("%c",&stuarr[i].sex);break;
     	case 3:printf("C语言成绩为%d要改为:",stuarr[i].score[0]);scanf("%d",&stuarr[i].score[0]);break;
		case 4:printf("高数成绩为%d要改为:",stuarr[i].score[1]);scanf("%d",&stuarr[i].score[1]);break;
		case 5:printf("英语成绩为%d要改为:",stuarr[i].score[2]);scanf("%d",&stuarr[i].score[2]);break;
		case 6:printf("线性代数成绩为%d要改为:",stuarr[i].score[3]);scanf("%d",&stuarr[i].score[3]);break;
		         }  
		reload();				
		printf("修改成功!n");                      
		printf("请问是否还需要修改  0则退出修改操作  1表示继续修改   :");
		scanf("%d",&n);
		if(0==n)  break;
		} while(1);
		} 
		        }
		if(find!=1)   printf(">>>>>>无此人!n>>>>>>请重新选择菜单n");
}
void chaxun()                                   //查询学生信息                                                            
{ scan();
  int num,i,n,jud=0;
  char name[50];
  float a;
  printf("-------请选择查询方式----------n");
  printf("-------1--按学号查询-----------n");
  printf("-------2--按姓名查询-----------n");
  printf("-------3--返回主菜单-----------n");
  scanf("%d",&n);
  while(1){if(n<1||n>3) {printf("请在1到3之内输入n");scanf("%d",&n);} else break; }
  switch(n){
  	case 1:printf("请输入学号:");
	       scanf("%d",&num); 
           for(i=0;i=80&&stuarr[i].score[j]<90)     s[j][1]+=1;
		  else if(stuarr[i].score[j]>=60&&stuarr[i].score[j]<80)     s[j][2]+=1;
		  else if(stuarr[i].score[j]<60)                             s[j][3]+=1; 
		              } 
		  printf("n分数段     C语言     高等数学    英语    线性代数n");
		  printf("各科平均分 %.2f      %.2f      %.2f     %.2f     n",ave_sub[0],ave_sub[1],ave_sub[2],ave_sub[3]) ;
	      printf("90-100      %d         %d           %d        %dn"     ,s[0][0],s[1][0],s[2][0],s[3][0]) ;//这地方可改进
	      printf("80-89       %d         %d           %d         %dn"     ,s[0][1],s[1][1],s[2][1],s[3][1]) ;
		  printf("60-79       %d         %d           %d         %dn"     ,s[0][2],s[1][2],s[2][2],s[3][2]) ;
		  printf("60以下      %d         %d           %d         %dn"     ,s[0][3],s[1][3],s[2][3],s[3][3]) ;
  system("pause") ;
   }
void meun()                                     //主菜单 
{  int n;
	printf("请输入要操作的文件名: ");
	gets(filename);
   while(1)
   {
	   printf("------------------------------------------------------- n");
	   printf("-----------------学生信息管理系统---------------------- n");
	   printf("----------------------菜单----------------------------- n");
	   printf(" 1:数据的输入          | 2:计算各位同学的平均分         n");
	   printf(" 3:求每门课程的平均分数| 4:计算各分数段的人数           n"); 
	   printf(" 5:按平均分排序        | 6:选择增加,删除或修改学生记录  n"); 
	   printf(" 7:对数据进行查询      | 8:显示输出结果                n"); 
	   printf(" 0:退出                |                                n");
	   printf("------------------------------------------------------- n");
	   printf("------------更多功能,请关注公众号:退学通知书---------- n");
	   printf("------------------------------------------------------- n");
	   people();
	   printf(">>>>>当前文件中学生数量为:%dn",nf) ;
	   printf(">>>>>请选择菜单中的一项:");
	   scanf("%d",&n);
	   if(n==0) {printf("         see you next time!                 n");
	             printf("               再见!                 n");break;}  
	      else if(n<0||n>8)  {printf("输入错误!n");   system("pause") ;}
	      
	   switch(n){
		   case 1:enter();break;
		   case 2:studentave();break;
		   case 3:subjectave ();break;
		   case 4:personscore ();break;
		   case 5:average();paixu(stuarr);break;
		   case 6: printf("小提示:输入1-3以外数字可退回至主菜单n");//防误触 printf(">>>>>>子菜单>>>>>>n"); 
			    printf("1:增加学生记录---- 2:删除学生记录---- 3:修改学生记录>>>n"); 
			    printf("请输入您要选择的操作:");scanf("%d",&n);
		   		switch(n){
			         case 1:zengjia();break;
			         case 2:del();break;
			         case 3:xiugai();break;
			            } ;break;
	   case 7:chaxun();break; 
	   case 8:display();break;
	            }
   }
}
int main() 
{    
	 meun(); return 0; 
}
//author  daijunjie

tips:本人男,懒得改了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384332.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号