您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > C语言课程设计报告_学生学籍管理系统
1题目:学生学籍管理系统目的:1、了解和熟悉VisualC++软件编程开发环境2、熟练掌握结构化程序设计的步骤和模块化设计方法3、熟练掌握C语言数据类型,熟记字符型数据和整形数据的定义和使用4、熟练掌握用while语句、do…while语句和for语句实现循环结构程序设计的方法5、掌握一维数组、二维数组的定义、赋值和输入输出的方法6、掌握与数组有关的算法(特别是排序算法,熟练掌握冒泡排序法)7、熟悉函数的定义、声明方法及全局变量和局部变量的概念与用法,掌握函数的调用方法8、掌握结构体类型变量的定义和使用及结构体类型数组的概念和应用设计要求:学生学籍信息管理系统设计1、需求分析学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。2、总体设计整个系统可以设计为数据录入模块、数据查询模块、数据删除模块和数据排序模块。3、详细设计设计学生基本信息和学生成绩基本信息结构体数组。Struct{intstuNo;//学号charname[20];//姓名charsex[2];//性别intdomNum;//宿舍号inttel;//电话号码}StuInfo;//学生基本信息结构体Struct{intstuNo;//学号charcourseNo;//课程编号charcourseName;//课程名称intcreditHour;//学分InttriGrade;//平时成绩IntexperiGrade;//实验成绩IntexamGrade;//卷面成绩FloattotalGrade;//综合成绩FloatfinalCreHour;//实得学分}StuGraInfo;//学生成绩基本信息结构体(1)数据录入模块:学生基本信息文件可以在磁盘建立,采用写文件方式录入学生成绩基本信息。综合成绩和实得学分通过计算得到。2(2)查询模块:通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,按照基本查找算法查找A.TXT,然后把查找结果输出若选择后者,则先在A.TXT中查找学号对应的姓名,再在B.TXT中查找该学生的课程情况,并统计科目和实得总学分,输出结果。(3)删除模块:通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在A.TXT和B.TXT中查找该生信息,删除之;或者输入学生的姓名,先在A.TXT中得到该生的学号,删除该生信息,再在B.TXT中删除该学号对应的信息。注意:C语言中没有直接删除信息的函数,需要自己实现,可以采取读出数据,判断数据(如果不删除,则进入缓冲区,否则删除),写入数据(把缓冲区中的数据写入文件)的步骤进行。(4)排序模块:通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果。1.2本程序设计的知识点陈述开发过程中用到的知识点,如结构体、数组、指针等。二、功能设计2.1总体设计其中包含数据录入模块、查询模块、删除模块、排序模块四大功能功能模块2.2详细设计显示主菜单查询功能数据录入删除功能排序功能退出功能按综合成绩排序按实得学分排序学生基本情况查询成绩查询按学号按宿舍号码按学号学籍信息管理系统32.3分块设计显示一系列功能选项根据x的值调用各功能模块函数结束开始开始输入学号课程编号课程名称学分平时成绩实验成绩卷面成绩结束数据输入开始数据查询x=1?Y=1?输入学号输入宿舍号输入学号结束4三、程序实现⑴利用了组合体的方式定义结构体数组,提供学生基本信息,定义如下:typedefstruct{intId;//学号charname[10];//姓名charsex[6];//性别introom;//宿舍号inttel;//电话号码}StudentInfo;//定义学生信息的结构体类型⑵同时定义了另一结构体数组,提供学生成绩基本信息,定义如下:typedefstruct{intId;charcourseNo[10];//课程编号charcourseName[20];//课程名开始数据删除结束输入学号5floata;//课程学分floatb;//平时成绩floatc;//实验成绩floatd;//卷面成绩floate;//综合成绩floatf;//实际学分}MarkInfo;//定义课程信息的结构体类型voidReadFile();//读取文件voidDisplayMainMenu();//显示主菜单voidDataInput();//数据录入voidDataQuery();//数据查询voidDataDelete();//数据删除voidDataSort();//数据排序voidQueryById(int);//按学号查询voidQueryByRoom(int);//按宿舍查询voidQueryMark(int);//按成绩查询voidsort1();//按综合成绩排序voidsort2();//按实得学分排序voidmarkput();//成绩输出StudentInfosi[30];//学生信息结构数组MarkInfomi[150];//学生成绩结构数组intsp=0;//学生信息结构数组中学生数intmp=0;//学生成绩结构数组中成绩数***************读取数据、计算***************在这段功能模块中,利用指针变量来读取结构体数组文件中的相应信息,是程序的编写、阅读和运行变得简洁明了。此外,在这段程序中,还对文件中的数据按照题目的具体要求对综合成绩和学分做了自动计算。voidReadFile(){FILE*fp;if((fp=fopen(A.txt,r))==NULL)printf(cantopenthefile\n);while(!feof(fp)){fscanf(fp,%d%s%s%d%d,&si[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].tel);sp++;}fclose(fp);fp=fopen(B.txt,r);6while(!feof(fp)){fscanf(fp,%d%s%s%d%d%d%d,&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c,&mi[mp].d);if(mi[mp].c==-1)mi[mp].e=0.3*mi[mp].b+0.7*mi[mp].d;elsemi[mp].e=0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;if(mi[mp].e=90.)mi[mp].f=mi[mp].a;elseif(mi[mp].e=80.)mi[mp].f=mi[mp].a*0.8;elseif(mi[mp].e=70.)mi[mp].f=mi[mp].a*0.75;elseif(mi[mp].e=60.)mi[mp].f=mi[mp].a*0.6;elsemi[mp].f=0;mp++;}fclose(fp);}***************显示主菜单***************这部分是对本程序的主要功能做出的展示,体现了本程序的五大功能,简洁明白,一目了然。VoidDisplayMainMenu(){printf(“\n1)数据录入\n2)数据查询\n3)数据删除\n4)数据排序\n5)程序结束\n“);}***************数据录入模块*******************录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据,即对关于学生成绩基本信息的结构体数组进行输入,也就是文件B.TXT中的内容。voidDataInput(){FILE*fp;inti;printf(学生的学号课程编号课程名称学分平时成绩实验成绩卷面成绩\n);while(1)7{scanf(%d%s%s%d%d%d%d,&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c,&mi[mp].d);if(mi[mp].Id==-1)break;if(mi[mp].c==-1)mi[mp].e=0.3*mi[mp].b+0.7*mi[mp].d;elsemi[mp].e=0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;if(mi[mp].e=90.)mi[mp].f=mi[mp].a;elseif(mi[mp].e=80.)mi[mp].f=mi[mp].a*0.8;elseif(mi[mp].e=70.)mi[mp].f=mi[mp].a*0.75;elseif(mi[mp].e=60.)mi[mp].f=mi[mp].a*0.6;elsemi[mp].f=0;mp++;}fp=fopen(B.txt,r+);for(i=0;imp;i++)fprintf(fp,%d%s%s%d%d%d%d,&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[mp].b,&mi[i].c,&mi[i].d);fclose(fp);}*******************查询模块********************此段程序是为实现信息查询功能而设计的。总体来讲,分为两大功能模块,一是学生基本信息查询,二是对学生成绩的查询。在第一种查询,即对学生基本信息的查询中,又提供了两种查询方式,一种是按学号对学生基本信息进行查询,一种是按宿舍号码对学生基本信息进行查询。VoidDataQuery(){intx,y,z;printf(“\n1)学生基本情况查询\n2)成绩查询\n”);--------------------------选择查询内容scanf(“%d”,&x);if(x==1)//查询学生信息{printf(“1)按学号查询2)按宿舍查询\n”);-------------------------------选择查询方式scanf(“%d”,&y);if(y==1){printf(“输入学号\n”);-----------------------------------------------按学生学号查询scanf(“%d”,&z);QueryById(z);8}if(y==2){}if(x==2)//查询成绩信息---------------------------------------查询学生成绩(输入学号){printf(“输入学号\n”);scanf(“%d”,&y);QueryMark(y);}}******************删除模块*******************此模块提供了按学号实现删除学生信息的功能,当在文件A.TXT中删除一个学生时,自动地在文件B.TXT中删除此人所有信息。voidDataDelete(){FILE*fp;intx;inti=0;intk,d;printf(输入学号\n);scanf(%d,&x);while(si[i].Id!=x)i++;if(isp-1){for(k=i;ksp-1;k++){si[k]=si[k+1];}}if(isp)sp--;d=0;for(k=0;kmp;k++){if(mi[k].Id==x)d++;elsemi[k-d]=mi[k];}mp=mp-d;fp=fopen(D:B.txt,r+);for(i=0;imp;i++)fprintf(fp,%d%s%s%d%d%d%d,&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c,&mi[i].d);9}**********
本文标题:C语言课程设计报告_学生学籍管理系统
链接地址:https://www.777doc.com/doc-2908631 .html