还剩12页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
信息学院课程设计Ⅰ报告课程名称___C语言程序设计___题目名称学生学籍管理系统学生学院_信息学院_____专业班级_计科12学号学生姓名指导教师____________2013年12月26日目录TOC\o1-3\h\z\u
一、设计目的与要求
31.1题目与设计要求
31.2本程序设计的知识点4
二、功能设计
42.1总体设计
42.2详细设计
54.1测试结果及分析12
五、总结14
六、____14
一、设计目的与要求
1.1题目与设计要求题目学生学籍管理系统目的
1、了解和熟悉VisualC++软件编程__环境
2、熟练掌握结构化程序设计的步骤和模块化设计方法
3、熟练掌握C语言数据类型,熟记字符型数据和整形数据的定义和使用
4、熟练掌握用while语句、do…while语句和for语句实现循环结构程序设计的方法
5、掌握一维数组、二维数组的定义、赋值和输入输出的方法
6、掌握与数组有关的算法(特别是排序算法,熟练掌握冒泡排序法)
7、熟悉函数的定义、声明方法及全局变量和局部变量的概念与用法,掌握函数的调用方法
8、掌握结构体类型变量的定义和使用及结构体类型数组的概念和应用设计要求学生学籍信息管理系统设计
1、需求分析学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择
2、总体设计整个系统可以设计为数据录入模块、数据查询模块、数据删除模块和数据排序模块
3、详细设计设计学生基本信息和学生成绩基本信息结构体数组Struct{intstuNo;//学号charname
[20];//姓名char___
[2];//性别intdomNum;//宿舍号inttel;//__号码}StuInfo;//学生基本信息结构体Struct{intstuNo;//学号charcourseNo;//课程编号charcourseName;//课程名称intcreditHour;//学分InttriGrade;//平时成绩IntexperiGrade;//实验成绩IntexamGrade;//卷面成绩FloattotalGrade;//综合成绩FloatfinalCreHour;//实得学分}StuGraInfo;//学生成绩基本信息结构体
(1)数据录入模块学生基本信息文件可以在磁盘建立,采用写文件方式录入学生成绩基本信息综合成绩和实得学分通过计算得到
(2)查询模块通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,按照基本查找算法查找A.___,然后把查找结果输出若选择后者,则先在A.___中查找学号对应的姓名,再在B.___中查找该学生的课程情况,并统计科目和实得总学分,输出结果
(3)删除模块通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在A.___和B.___中查找该生信息,删除之;或者输入学生的姓名,先在A.___中得到该生的学号,删除该生信息,再在B.___中删除该学号对应的信息注意C语言中没有直接删除信息的函数,需要自己实现,可以采取读出数据,判断数据(如果不删除,则进入缓冲区,否则删除),写入数据(把缓冲区中的数据写入文件)的步骤进行
(4)排序模块通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果
1.2本程序设计的知识点陈述__过程中用到的知识点,如结构体、数组、指针等
二、功能设计
2.1总体设计其中包含数据录入模块、查询模块、删除模块、排序模块四大功能功能模块
2.2详细设计
2.3分块设计
三、程序实现⑴利用了组合体的方式定义结构体数组,提供学生基本信息,定义如下typedefstruct{intId;//学号charname
[10];//姓名char___
[6];//性别introom;//宿舍号inttel;//__号码}StudentInfo;//定义学生信息的结构体类型⑵同时定义了另一结构体数组,提供学生成绩基本信息,定义如下typedefstruct{intId;charcourseNo
[10];//课程编号charcourseName
[20];//课程名floata;//课程学分floatb;//平时成绩floatc;//实验成绩floatd;//卷面成绩floate;//综合成绩floatf;//实际学分}__rkInfo;//定义课程信息的结构体类型使用以上结构体数组,使程序变得思路清晰,设计过程也变得相对简单同时,定义并使用了如下函数,声明和定义voidReadFile;//读取文件voidDisplay__i__enu;//显示主菜单voidDataInput;//数据录入voidDataQuery;//数据查询voidDataDelete;//数据删除voidDataSort;//数据排序voidQueryByIdint;//按学号查询voidQueryByRoomint;//按宿舍查询voidQuery__rkint;//按成绩查询voidsort1;//按综合成绩排序voidsort2;//按实得学分排序void__rkput;//成绩输出StudentInfosi
[30];//学生信息结构数组__rkInfomi
[150];//学生成绩结构数组intsp=0;//学生信息结构数组中学生数intmp=0;//学生成绩结构数组中成绩数***************读取数据、计算***************在这段功能模块中,利用指针变量来读取结构体数组文件中的相应信息,是程序的编写、阅读和运行变得简洁明了此外,在这段程序中,还对文件中的数据按照题目的具体要求对综合成绩和学分做了自动计算voidReadFile{FILE*fp;iffp=fopenA.___r==NULLprintfcantopenthefile\n;while!feoffp{fscanffp%d%s%s%d%dsi[sp].Idsi[sp].namesi[sp].___si[sp].roomsi[sp].tel;sp++;}fclosefp;fp=fopenB.___r;while!feoffp{fscanffp%d%s%s%d%d%d%dmi[mp].Idmi[mp].courseNomi[mp].courseNamemi[mp].ami[mp].bmi[mp].cmi[mp].d;ifmi[mp].c==-1mi[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;ifmi[mp].e=
90.mi[mp].f=mi[mp].a;elseifmi[mp].e=
80.mi[mp].f=mi[mp].a*
0.8;elseifmi[mp].e=
70.mi[mp].f=mi[mp].a*
0.75;elseifmi[mp].e=
60.mi[mp].f=mi[mp].a*
0.6;elsemi[mp].f=0;mp++;}fclosefp;}***************显示主菜单***************这部分是对本程序的主要功能做出的展示,体现了本程序的五大功能,简洁明白,一目了然VoidDisplay__i__enu{printf“\n1数据录入\n2数据查询\n3数据删除\n4数据排序\n5程序结束\n“;}***************数据录入模块*******************录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据,即对关于学生成绩基本信息的结构体数组进行输入,也就是文件B.___中的内容voidDataInput{FILE*fp;inti;printf学生的学号课程编号课程名称学分平时成绩实验成绩卷面成绩\n;while1{scanf%d%s%s%d%d%d%dmi[mp].Idmi[mp].courseNomi[mp].courseNamemi[mp].ami[mp].bmi[mp].cmi[mp].d;ifmi[mp].Id==-1break;ifmi[mp].c==-1mi[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;ifmi[mp].e=
90.mi[mp].f=mi[mp].a;elseifmi[mp].e=
80.mi[mp].f=mi[mp].a*
0.8;elseifmi[mp].e=
70.mi[mp].f=mi[mp].a*
0.75;elseifmi[mp].e=
60.mi[mp].f=mi[mp].a*
0.6;elsemi[mp].f=0;mp++;}fp=fopenB.___r+;fori=0;imp;i++fprintffp%d%s%s%d%d%d%dmi[i].Idmi[i].courseNomi[i].courseNamemi[i].ami[mp].bmi[i].cmi[i].d;fclosefp;}*******************查询模块********************此段程序是为实现信息查询功能而设计的总体来讲,分为两大功能模块,一是学生基本信息查询,二是对学生成绩的查询在第一种查询,即对学生基本信息的查询中,又提供了两种查询方式,一种是按学号对学生基本信息进行查询,一种是按宿舍号码对学生基本信息进行查询VoidDataQuery{intxyz;printf“\n1学生基本情况查询\n2成绩查询\n”;--------------------------选择查询内容scanf“%d”x;ifx==1//查询学生信息{printf“1按学号查询2按宿舍查询\n”;-------------------------------选择查询方式scanf“%d”y;ify==1{printf“输入学号\n”;-----------------------------------------------按学生学号查询scanf“%d”z;QueryByIdz;}ify==2{}ifx==2//查询成绩信息---------------------------------------查询学生成绩(输入学号){printf“输入学号\n”;scanf“%d”y;Query__rky;}}******************删除模块*******************此模块提供了按学号实现删除学生信息的功能,当在文件A.___中删除一个学生时,自动地在文件B.___中删除此人所有信息voidDataDelete{FILE*fp;intx;inti=0;intkd;printf输入学号\n;scanf%dx;whilesi[i].Id!=xi++;ifisp-1{fork=i;ksp-1;k++{si[k]=si[k+1];}}ifispsp--;d=0;fork=0;kmp;k++{ifmi[k].Id==xd++;elsemi[k-d]=mi[k];}mp=mp-d;fp=fopenD:B.___r+;fori=0;imp;i++fprintffp%d%s%s%d%d%d%dmi[i].Idmi[i].courseNomi[i].courseNamemi[i].ami[i].bmi[i].cmi[i].d;}***************排序模块******************利用voidsort1函数按计算所得的综合成绩进行排序voidsort1{intij;__rkInfot;fori=mp-1;i=1;i--{forj=0;ji;j++{ifmi[j].emi[j+1].e{t=mi[j];mi[j]=mi[j+1];mi[j+1]=t;}}}__rkput;}
四、测试分析
4.1测试结果及分析显示主菜单数据录入功能对成绩进行录入
(2)查询功能,按学号进行查询
(3)排序功能按综合成绩排序
(4)删除功能退出程序
五、总结这次学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来才能做好每一件事在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体、文件、指针等为了解决问题,最好就是多向同学,老师请教
六、________必须是在课程设计中真正阅读过和运用过的,文献按照在正文中的出现顺序排列
[1]谭浩强,《C语言程序设计》(第四版)[M],清华大学出版社,2008年
[2]谭浩强.编著.C程序设计题解与上机指导.北京清华大学出版社,1992
[3]潭浩.田淑清编著.PASCAL语言程序设计〔第二版〕.北京高等教育出版社,1998显示主菜单查询功能数据录入删除功能排序功能退出功能按综合成绩排序按实得学分排序学生基本情况查询成绩查询按学号按宿舍号码按学号学籍信息管理系统开始数据查询x=1?Y=1?输入学号输入宿舍号输入学号结束显示一系列功能选项根据x的值调用各功能模块函数结束开始开始输入学号课程编号课程名称学分平时成绩实验成绩卷面成绩结束数据输入开始数据删除结束输入学号。