c语言学生管理系统以及---音乐鉴赏成绩管理系统(随意改上交)c语言结课作业再也不担心了(私信我获取源代码程序以及运行环境)
一、音乐鉴赏管理系统的由来以及需求分析
1.引言
1.1研究背景
随着科技的不断发展,音乐鉴赏考试学生巨量增加。在我国的各个音乐搞笑中,因为兴趣爱好的增加许多高校都还在扩招,大大增加了音乐鉴赏考试后期的管理体制,而管理音乐鉴赏考试信息系统已经进入高校,但还未完全普及入各个高校,因此,开发一套适合、兼容性好的c语言系统是很有必要的。
1.2研究意义
根据开发的需求,音乐鉴赏考试信息管理系统主要应用于各个高校的教育系统其次为音乐辅导机构的需求,完成在高频对于音乐鉴赏以及学生成绩信息快速的计算机管理,使学院职员工轻工作压力,同时,减少成绩出问题所要造成调整的难度,加快查询速度、加强管理,加快国家和部门关于信息化的步伐,使管理更加规范化。音乐鉴赏考试管理系统是时代的产物。
1.3需求分析
编写一个音乐鉴赏管理系统,每个学生信息包括:姓名、编号、高级鉴赏人比分、中级鉴赏人比分、普通鉴赏人比分、不合格鉴赏人比分。而关于该系统具体功能如下:
(1)创建鉴赏人信息并以磁盘文件保存;
(2)读取磁盘文件并显示输出所有学生的成绩;
(3)按编号或姓名查询比分;
(4)添加比分记录;
(5)修改指定姓名或编号的鉴赏人的成绩并可存盘;
(6)删除指定姓名或编号的鉴赏人成绩并可存盘;
(7)打印所有学生成绩单。
二、功能模块展现
2.音乐鉴赏考试管理系统功能截图
2.1首页

1.1音乐鉴赏考试管理系统首页
2.2录入业绩中占有信息公司对于每场音乐鉴赏的权重以及响应编号的记录如姓名,编号,高级鉴赏人,中级鉴赏人,普通鉴赏人,不合格鉴赏人。
(1)、录入鉴赏人信息,并且完成记录显示,以及查找

1.2鉴赏考试人员信息录入

1.3鉴赏考试信息的显示

1.4鉴赏考试的查找
2.3其他
- 、音乐鉴赏考试管理系统的修改、删除、统计功能
3.1音乐鉴赏考试管理系统修改功能

3.2音乐鉴赏考试管理系统删除功能

3.3音乐鉴赏考试管理系统统计功能

- 总结:
通过本次实训,使我进一步了解到了c语言内部核心,从老师的银临以及自己的思考设计,一步一步直到程序成功建立。从实训中我感受到非常有趣的C语言,而其中的代码也活灵活现。虽然在实训的过程中有枯燥乏味,但是将程序编写出来的成就感让我久久难以忘怀。通过本次实训我选择的音乐鉴赏考试管理系统,我从人员录入想到删除想到修改以及代码指针的录入,一步一步想着如何将这个程序编好,作为我学习C语言的结束的标志。在编写程序的过程中,也陆陆续续出现了很多问题,在老师细心的教导以及网上查阅资料,我深入的了解并且处理了问题。尤其对c程序和c文件有了更深入的了解。更重要的是,通过这次实训,培养了自己的逻辑能力和独立思考的能力。
源码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#define N 20
typedef struct
{
  char name[10];
  int num;
  float c;
  float by;
  float sjk;
  float lssx;
}stu;
void menu() 
{
   system("cls");  //清屏
   printf("\n\n\n\n\t\t\t*********   音乐鉴赏公司考试管理系统  ***********\n");
   printf("\t\t\t             Time:2022年12月12日              \n");       
   printf("\t\t\t|==========================================|\n");
   printf("\t\t\t|*************1.  录入业绩  ***************|\n");
   printf("\t\t\t|*************2.  查询业绩  ***************|\n");
   printf("\t\t\t|*************3.  修改信息  ***************|\n");
   printf("\t\t\t|*************4.  添加音乐鉴赏人  ***************|\n");
   printf("\t\t\t|*************5.  删除业绩  ***************|\n");
   printf("\t\t\t|*************6.  显示业绩  ***************|\n");
   printf("\t\t\t|*************7.    统计    ***************|\n");
   printf("\t\t\t|*************0.    退出    ***************|\n");
   printf("\t\t\t|==========================================|\n");
   printf("\t\t\t|******************************************|\n");
   printf("\n\n\t\t\t      请选择相应的功能<输入编号>:");
}
//录入信息
 
void input()
{
    FILE *fp;
    stu xs;                                   /*定义一个结构体变量来装从文件中读出来的数据*/
    if((fp=fopen("student.dat","ab"))==NULL)  //判断文件能否打开
	{
	   printf("can't open the file!\n");exit(0);     //正常退出
	}
    printf("\n录入格式: 姓名 编号 高级鉴赏人比分 中级鉴赏人比分 普通鉴赏人比分 不合格鉴赏人比分 \n");
	printf("当输入姓名为<End>结束录入\n");
    while(1)                                
	{
        scanf("%s",xs.name);
        if(strcmp(xs.name,"End")==0) break;   //判断姓名是否为LAST,用字符串判断
        scanf("%d%f%f%f%f",&xs.num,&xs.c,&xs.by,&xs.sjk,&xs.lssx);
        fwrite(&xs,sizeof(stu),1,fp);        //将业绩信息写入文件
	}
    fclose(fp);
}
//姓名定义
 
void xingming()
{
    FILE *fp;
    stu xs;
    char name[10];
    printf("\n请输入需要查询的音乐鉴赏人姓名: ");
	scanf("%s",name);
    if((fp=fopen("student.dat","rb"))==NULL) 
	{
	   printf("can't open the file!\n");exit(0);
	}
    while(!feof(fp))                           //判断文件是否到达末尾,即读取文件失败时
	{
        fread(&xs,sizeof(stu),1,fp);
        if(strcmp(xs.name,name)==0)//按姓名查询时判断输入的姓名是否存在,会循环从数据中找取
		{
           printf(" 音乐鉴赏人的信息如下:\n");
           printf("\n%10s %6s %6s %6s %6s %6s \n","姓名","编号","高级鉴赏人比分","中级鉴赏人比分","普通鉴赏人比分","不合格鉴赏人比分");
           printf("%10s %6d %6.2f %6.2f   %6.2f  %6.2f \n",xs.name,xs.num,xs.c,xs.by,xs.sjk,xs.lssx);
           break;
		}
	}
    if(feof(fp))
		printf("ERROR,查找失败!!!"); /*音乐鉴赏人不存在*/
    fclose(fp);
}
 
//编号定义
 
void xuehao()
{
    FILE *fp;
    stu xs;
    int num;
    printf("\n请输入需要查询的音乐鉴赏人编号: ");
	scanf("%d",&num);
    if((fp=fopen("student.dat","rb"))==NULL)
	{
	    printf("can't open the file");exit(0);
	}
    while(!feof(fp))
	{
        fread(&xs,sizeof(stu),1,fp);
        if(xs.num==num)/*按编号查询时判断输入的编号是否存在,会循环从数据中找取*/
		{
             printf(" 音乐鉴赏人的信息如下:\n");
           printf("\n%10s %6s %6s %6s %6s %6s \n","姓名","编号","高级鉴赏人比分","中级鉴赏人比分","普通鉴赏人比分","不合格鉴赏人比分");
           printf("%10s %6d %6.2f %6.2f   %6.2f   %6.2f \n",xs.name,xs.num,xs.c,xs.by,xs.sjk,xs.lssx);
             break;
		}
	}
     if(feof(fp)) 
		 printf("ERROR,查找失败!!!");
     fclose(fp);
}
 
//查询
 
void search()
{
	char ch1;
	system("cls");
    printf("请选择何种方式查询<编号>:\n");
    printf("1->姓名,2->编号:");
    ch1=getchar();              /*用字符接收*/
    switch(ch1)                 /*判断*/
  {
    case '1':xingming();break;
    case '2':xuehao();break;
  }
getch();                       /*让屏幕停留同时按任意键返回*/ }
 
//修改:输入音乐鉴赏人的姓名,查找该音乐鉴赏人,若找到则修改该音乐鉴赏人的编号信息,并显示修改前后的结果;
 
void modify1()
{
 
    stu xs;
    FILE *fp;
    char name[10];
    printf("\n请输入要修改的音乐鉴赏人姓名: ");
	scanf("%s",name);
    if((fp=fopen("student.dat","rb+"))==NULL)
	{
     	printf("can't open the file!\n");exit(0);
	}
    while(!feof(fp))
	{
         fread(&xs,sizeof(stu),1,fp);
         if(strcmp(xs.name,name)==0)                      /*判断输入要修改的姓名是否存在*/
		 {
            printf(" 修改前音乐鉴赏人的信息:\n");
            printf("\n%10s %6s %6s %6s %6s %6s \n","姓名","编号","高级鉴赏人比分","中级鉴赏人比分","普通鉴赏人比分","不合格鉴赏人比分");
            printf("%10s %6d %6.2f %6.2f  %6.2f  %6.2f \n",xs.name,xs.num,xs.c,xs.by,xs.sjk,xs.lssx);
            printf("\n请依次输入 高级鉴赏人比分 中级鉴赏人比分 普通鉴赏人比分 不合格鉴赏人比分的数据:");
			scanf("%f%f%f%f",&xs.c,&xs.by,&xs.sjk,&xs.lssx);
            break;
		 }
	}
    if(!feof(fp))
	{
         printf(" \n 修改后的音乐鉴赏人的信息如下:\n");
         printf("\n%10s %6s %6s %6s %6s %6s \n","姓名","编号","高级鉴赏人比分","中级鉴赏人比分","普通鉴赏人比分","普普通通物品");
         printf("%10s %6d %6.2f %6.2f  %6.2f  %6.2f \n",xs.name,xs.num,xs.c,xs.by,xs.sjk,xs.lssx);
		 fseek(fp,-sizeof(stu),1);   //负号表示后退,1表示文件当前位置
		 fwrite(&xs,sizeof(stu),1,fp);  //再重新写入,同时把之前的要修改的覆盖掉
	}
    else
         printf("\nERROR,音乐鉴赏人不存在,修改失败!!");
    fclose(fp);
	getch();
    
}
 
//修改:输入音乐鉴赏人的编号,查找该音乐鉴赏人,若找到则修改该生的成绩信息,并显示修改前后的结果;
 
void modify2()
{
    stu xs;
    FILE *fp;
    int num;
    printf("\n请输入要修改的音乐鉴赏人编号: ");
	scanf("%d",&num);
    if((fp=fopen("student.dat","rb+"))==NULL)
	{
	    printf("can't open the file!\n");exit(0);
	}
 
    while(!feof(fp))
	{
       fread(&xs,sizeof(stu),1,fp);
         if(xs.num==num)/*判断输入要修改的姓名是否存在*/
		 {
            printf(" 修改前音乐鉴赏人的信息如下:\n");
            printf("\n%10s %6s %6s %6s %6s %6s \n","姓名","编号","高级鉴赏人比分","中级鉴赏人比分","普通鉴赏人比分","普普通通物品");
            printf("%10s %6d %6.2f %6.2f  %6.2f  %6.2f \n",xs.name,xs.num,xs.c,xs.by,xs.sjk,xs.lssx);
            printf("\n请依次输入高级鉴赏人比分 中级鉴赏人比分 普通鉴赏人比分以及不合格鉴赏人比分的成绩:");
			scanf("%f%f%f%f",&xs.c,&xs.by,&xs.sjk,&xs.lssx);
            break;
		 }
	}
    if(!feof(fp))
	{
        printf(" \n 修改后的音乐鉴赏人的信息如下:\n");
         printf("\n%10s %6s %6s %6s %6s %6s \n","姓名","编号","高级鉴赏人比分","中级鉴赏人比分","普通鉴赏人比分","不合格鉴赏人比分");
         printf("%10s %6d %6.2f %6.2f  %6.2f  %6.2f \n",xs.name,xs.num,xs.c,xs.by,xs.sjk,xs.lssx);
		fseek(fp,-sizeof(stu),1);
		fwrite(&xs,sizeof(stu),1,fp);
	}
    else
        printf("\nERROR,音乐鉴赏人不存在,修改失败!!");
	getch();
    fclose(fp);
    
}
//选择修改方式
void modiway()
{
    char ch1;
    system("cls");
    printf("请输入按何种方式修改<编号>:\n");
    printf("1->姓名,2->编号:");
    ch1=getchar();       /*用字符接收*/
    switch(ch1)          /*判断*/
	{
      case '1':modify1();break;
      case '2':modify2();break;
	}
 
    getch();/*让屏幕停留同时按任意键返回*/ 
}
 
//插入:输入音乐鉴赏人的平时的各项成绩,插入到指定位置;当指定的位置超出范围时,将其插入到全班的最后,并显示插入成功后的结果
void insert()
{
	int i=0,j,k,lenth;
    FILE *fp;
    stu s,xs[N];
    system("cls");
    printf("\n请输入添加的音乐鉴赏人的姓名:");
	scanf("%s",&s.name);
    printf("\n音乐鉴赏人的编号:");scanf("%d",&s.num);
    printf("\n音乐鉴赏人的成绩:高级鉴赏人比分、中级鉴赏人比分、普通鉴赏人比分、不合格鉴赏人比分:");scanf("%f %f %f %f",&s.c,&s.by,&s.sjk,&s.lssx);
    printf("\n请输入插入到第几行:");scanf("%d",&k); 
    if((fp=fopen("student.dat","rb"))==NULL)
	{
	    printf("can't open the file!\n");exit(0);
	}
    while(!feof(fp))
	{
        fread(&xs[i],sizeof(stu),1,fp);/*把数据读入到结构体数组中*/
        if(feof(fp)) break;
        i++;
	}
    fclose(fp);
    lenth=i;                            //记录此时lenth最大
    if(k<lenth && k>=0)                 /*k的位置要位于数组范围之内*/
	{
       for(j=lenth-1;j>=k;j--)
           xs[j+1]=xs[j];               /*一开始j是最大的,往后移一个这样移动避免数据被覆盖*/
           xs[k]=s;                     /*将输入的音乐鉴赏人信息加入这个k位置*/
           lenth++;                   //增加一个音乐鉴赏人空间,否则会少一个数据
       if((fp=fopen("student.dat","wb"))==NULL)
	   {
	        printf("不能建立文件!!\n");exit(0);
	   }
       for(i=0;i<lenth;i++)
       fwrite(&xs[i],sizeof(stu),1,fp);  //存入数据
	}
    else/*不再数组范围之内*/
	{
        if((fp=fopen("student.dat","ab"))==NULL) 
		{
	       printf("不能建立文件!!\n");exit(0);
		}
    fwrite(&s,sizeof(stu),1,fp);
	}
	fclose(fp);
}
 
//显示
 
void print()
{
    FILE *fp;
    stu s;
    system("cls");
    if((fp=fopen("student.dat","rb"))==NULL)
	{
	    printf("can't open the file!\n");exit(0);
	}
    printf("\n%10s %s %6s %6s %6s %6s \n","姓名","编号","高级鉴赏人比分","中级鉴赏人比分","普通鉴赏人比分","不合格鉴赏人比分");
    while(!feof(fp))
	{
        fread(&s,sizeof(stu),1,fp);  //从文件中读取成绩信息
           if(feof(fp)) break;       //判断是否文件尾
              printf("%10s %4d %6.2f %6.2f  %6.2f  %6.2f \n",s.name,s.num,s.c,s.by,s.sjk,s.lssx);
	}
    fclose(fp);
    getch();
}
 
//删除:输入音乐鉴赏人姓名,若该音乐鉴赏人存在,则删除,并显示删除后余下的音乐鉴赏人成绩信息
 
void delete1()
{
 
    stu xs[N];
    FILE *fp;
    char name[10];
    int i=0,len,k=-1/*k<0是为后面if判断用的*/;
    system("cls");
    printf("\n请输入要删除的音乐鉴赏人姓名: ");scanf("%s",name);
    if((fp=fopen("student.dat","rb+"))==NULL) 
	{
	    printf("can't open the file!\n");exit(0);
	}
    while(!feof(fp))
	{
       fread(&xs[i],sizeof(stu),1,fp);
       if(feof(fp)) break;
       if(strcmp(xs[i].name,name)==0) k=i;
       i++;
	}
    fclose(fp);
 
//以下是删除后重新写文件
 
    len=i;/*结构体数组上限*/
    if(k>=0)/*k>0说明找到删除音乐鉴赏人位置*/
	{
      if((fp=fopen("student.dat","wb+"))==NULL) 
	  {
	      printf("can't open the file!\n");exit(0);
	  }
      for(i=0;i<len;i++)
	  {
      if(i==k) continue;/*从这个位置开始写入*/
      fwrite(&xs[i],sizeof(stu),1,fp);
	  }
      fclose(fp);
	}
      else {printf("ERROR,删除失败!!!\n");getch();} /*失败后重新返回菜单*/
      print();
}
 
 
//删除:输入音乐鉴赏人编号,若该音乐鉴赏人存在,则删除,并显示删除后余下的音乐鉴赏人成绩信息
 
void delete2()
{
    stu xs[N];
    FILE *fp;
    int num;
    int i=0,len,k=-1/*k<0是为后面if判断用的*/;
    system("cls");
    printf("\n请输入要删除的音乐鉴赏人编号: ");
	scanf("%d",&num);
    if((fp=fopen("student.dat","rb+"))==NULL) 
	{
	printf("can't open the file!\n");exit(0);
	}
    while(!feof(fp))
	{
        fread(&xs[i],sizeof(stu),1,fp);
        if(feof(fp)) break;
        if(xs[i].num==num)
			k=i;
            i++;
	}
    fclose(fp);
//以下是删除后重新写文件
 
    len=i;/*结构体数组上限*/
    if(k>=0)/*k>0说明找到删除音乐鉴赏人位置*/
	{
    if((fp=fopen("student.dat","wb+"))==NULL) 
	{
	     printf("can't openfile!\n");exit(0);
	}
    for(i=0;i<len;i++)
	{
       if(i==k) continue;/*从这个位置开始写入*/
       fwrite(&xs[i],sizeof(stu),1,fp);
	}
    fclose(fp);
	}
    else {printf("ERROR,删除失败!!!\n");getch();} /*失败后重新返回菜单*/
    print();
}
 
 
//删除
 
void deleteway()
{
    char ch1;
    system("cls");
    printf("请输入按何种方式删除:\n");
    printf("1->姓名,2->编号:");
    ch1=getchar();/*用字符接收*/
    switch(ch1)/*判断*/
	{
	case '1':delete1();break;
    case '2':delete2();break;
	}
	getch();/*让屏幕停留同时按任意键返回*/
}
 
//统计高级鉴赏人比分成绩情况
 
void count() 
{
    int i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u;   //j,k,m,l分别是指各个分数段,n,p,q,r也是
    FILE *fp;
    stu s[N], *p1[N],*p2[N],*p3[N],*p4[N];/*用指针数组*/
    system("cls");
    if((fp=fopen("student.dat","rb"))==NULL)
	{
	    printf("can't open the file!\n");exit(0);
	}
    while(!feof(fp))
	{
        fread(&s[i++],sizeof(stu),1,fp);/*读入数据*/
        if(feof(fp)) break;  //到文件末尾中断程序
	}
    t=i;i=0;           //t 指最大
    for(u=0;u<t;u++)/*以下每个指针数组用于指向各分数段的音乐鉴赏人信息*/
	{
        if(s[i].c<60) 
		{
			p1[j++]=&s[i++];continue;
		}                                     /*每个音乐鉴赏人信息只能位于一个分数段*/
        if(s[i].c>=60 && s[i].c<80) 
		{
			p2[k++]=&s[i++];continue;
		}
        if(s[i].c>=80 && s[i].c<90) 
		{
			p3[l++]=&s[i++];continue;
		}
        if(s[i].c>=90)
		{
			p4[m++]=&s[i++];continue;
		}
	}
    printf("     不及格:姓名 编号 高级鉴赏人比分\n");
    for(n=0;n<j-1;n++)
	{
        printf("%14s %4d %6.2f\n",p1[n]->name,p1[n]->num,p1[n]->c);      //逐个显示个分数段信息,显示上面指针的内容
	}
    printf(" 60-79分之间:姓名 编号 高级鉴赏人比分\n");
    for(p=0;p<k;p++)
	{
        printf("%16s %4d %6.2f\n",p2[p]->name,p2[p]->num,p2[p]->c);
	}
    printf(" 80-89分之间:姓名 编号 高级鉴赏人比分\n");
    for(q=0;q<l;q++)
	{
        printf("%16s %4d %6.2f\n",p3[q]->name,p3[q]->num,p3[q]->c);
	}
    printf("90以上:姓名 编号 高级鉴赏人比分\n");
    for(r=0;r<m;r++)
	{
        printf("%12s %4d %6.2f\n",p4[r]->name,p4[r]->num,p4[r]->c);
	}
    fclose(fp);
    getch();
}
 
 
//菜单选择
 
int main()
{
	char ch;
    while(1)
	{
      menu();// 显示菜单
      ch=getch();//选择菜单
      if(ch=='0') 
		  break;
      switch(ch)//判断功能项
	  {
      case '1':input();break;
      case '2':search();break;
      case '3':modiway();break;
      case '4':insert();break;
	  case '5':deleteway();break;
      case '6':print();break;
	  case '7':count();break;
	  }
	} 
	printf("\n\n\n\t\t\t\tWelcome to use,Goodbye!\02!\n");
} 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号