C语言——学生管理系统.docx_第1页
C语言——学生管理系统.docx_第2页
C语言——学生管理系统.docx_第3页
C语言——学生管理系统.docx_第4页
C语言——学生管理系统.docx_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

辽宁师范大学综合设计性上机实验报告 计算机与信息技术学院计算机科学与技术(师范)专业课程名称: C语言课程设计实验题目: 学生管理系统班 级: 2014 级 2 班学 号: 201421012737姓 名: 呼培英指导老师: 蔡静完 成 日 期: 2015 年 6 月 6 日学生管理系统课程设计实验报告目 录1、 问题定义 12、 开发工具 13、 数据结构 13.1.系统包含头文件 13.2.模块功能及程序说明 13.3.定义全局变量 23.4.结构体的定义及应用 24、 算法描述 34.1.系统功能设计 34.2.程序总体框架 34.3.录入流程图 44.4.显示流程图 44.5.排序流程图 54.6.增删改流程图 5 4.6.1.增加学生信息 6 4.6.2.删除学生信息 64.7.多功能查询流程图 65、 程序调试情况 76、 问题分析及总结 177、 个人心得体会 188、 参考文献或网站 189、 源代码 附录题目:学生管理系统 问题定义:管理内容包括:学院、学号、姓名、出生日期、性别、七门课成绩 ;主要实现软件功能:菜单显示软件能实现功能(界面友好): 1、录入至少十个学生信息 2、显示学生信息 3、计算总分平均分,并排序 4、针对不同科目进行排序 5、统计输出每门课程总分平均分 6、显示最高分学生 7、显示高于、低于、等于平均成绩的人数 8、根据平均成绩分为优秀、良好、中等、及格、不及格 9、对学生信息进行增、删、改的操作 10、多种查询功能(根据学院、学号、姓名查询一个或多个学生信息) 开发工具:Microsoft Visual C+ 6.0数据结构:1、 本系统包含的头文件: #include /程序中用到字符串函数 #define STU struct student /用STU替换struct student #define N 1000 /用N替换录入学生个数(一共能存多少人的信息)#define K 7 /用K替换学生课程数2、 模块功能及程序说明:1、void ISI() /Input Students Information 录入学生信息2、void OSI() /Output Students Information 显示学生信息3、void TSI() /Tongji Students Information 统计学生信息(计算总分、平均分并排序)4、void CourseSort() /分别将各科成绩进行排序5、void CourseSum() /统计每门课程的总分平均分并显示输出float fsumK=0, faveK; /定义fsum,fave用来存放每门课程总分平均分6、void ShowHighest() /展示最高分学生(成绩相同的全部显示)7、void Average() /显示高于、低于、等于平均成绩人数 8、void GradeScore() /根据平均成绩分等级(优秀、良好、中等、及格、不及格)9、void ADC() /根据用户需求编辑函数进行增删改,分别调用: void Add() /增加学生个数; void Delete() /删除相应学生信息; void Change() /修改指定学生信息 实现指定学生信息的增加、删除、修改10、 void Inquire() /根据用户需求进行多功能查询: 分别调用: void ixy() /根据学院查询信息; void id() /根据学院查询信息; void nam() /根据姓名查询学生信息 实现一个或多个学生的查询3、 定义全局变量int n /在录入函数中根据用户需求选择录入人数,输出人数根据n变化;int m /在编辑学生信息时,根据用户需求选择须操作的人数,并将操作后的信息存入,并显示;int z=m+n /在输出函数中,控制显示学生个数为用户录入和编辑学生信息后总共人数 ,方便表示 .4、 结构体的定义和作用 STU /定义学生信息 char xy20; /学院 char ID20; /学号 char name20; /姓名 struct date /定义出生日期的结构体(嵌套) long year; /年 int month; /月 int day; /日 birth; /定义出生日期的结构体变量 char sex; /性别 float scoreK; /K门课成绩 float sum; /总分 float ave; /平均分 stuN /定义结构体数组算法描述:页面设计:开始欢迎界面:仅用于美观,Enter键进入主菜单;主菜单界面:在此界面,用户可以选择要操作的选项,回车之后即可进入相应界面进行操作,所有操作均有提示语,比较人性化的管理4.1.系统功能设计 4.2.程序总体框架 main() i!=0 else 4.3.录入学生信息ISI() Y N j+ i+4.4.显示学生信息OSI() Y N i+4.5.计算总分平均分,并排序TSI() Y N N/i+ 4.6.增删改学生信息ADC()4.6.1增加学生信息Add() 4.6.2 删除学生信息 Delete() N Y N i+ Y4.7.根据用户要求查询信息 Inquire() 程序调试情况:上机调试使用的测试用例以及调试的结果1、欢迎界面(Enter键进入主菜单)2、 菜单界面(为用操作信息户提供)3、 录入学生信息(根据提醒,输入相应信息)4、 显示录入信息(基本信息与成绩分别显示)5、 计算总成绩平均分并排序6、 对不同科目进行排序(根据用户选择)7、 统计每门课所有人的总成绩平均分(并显示)8、 显示最高分学生(相同的全部显示)9、 显示高于、低于、等于平均成绩的人数10、 根据平均成绩分等级分别为为(优秀、良好、中等、及格、不及格)11、 根据用户需求选择如何编辑学生信息(增删改)(1)增加学生信息(2) 删除学生信息(3) 修改学生信息选择不同修改种类(姓名,单科成绩,出生日期)如下图所示注:在修改和删除过程中若输入学生不存在,则显示下图结果:12、 根据要求查询信息(学院、学号、姓名)(1)根据学号查询(2) 根据学号查询(3)根据姓名查询注:若查询信息不存在则显示下图所示13、退出学生管理系统问题分析及总结:一、问题分析:1、 在while()循环中,i控制循环,switch(ichoioce)中间进行选择调用的语句,需要根据用户的输入调用不同函数,当ichoioce为0时,则进行语句i=0,跳出while循环,及退出系统。在开始设计程序时,不能利用i控制循环结束。2、 在录入函数中,忽略字符串的录入前需要吸收回车,导致在运行时后面的信息无法录入。解决方案:在字符串信息录入前,定义char ch; ch=getchar();用来吸收回车。3、 清屏文件运用不好,刚开始出现无法进入函数,一闪而过,直接返回主菜单,解决方案:加入getchar()语句使程序暂停。4、 再增加学生信息函数中,在函数外定义的全局变量m,根据用户要求控制需增加人数,并使其能够显示,太麻烦,应直接使控制录入学生数的n,n+,使其实现功能,通过用户是否继续增加学生来控制增加人数。5、 在增删改函数中,嵌套三个函数,在修改函数中,根据不同信息找寻相应的学生,然后在根据用户选择,查找需要修改的项目,do.while(),和switch()语句一层层的嵌套,容易丢掉应有的括号,需要一层层的找到并加上。二、总结:1.数组在程序中有着很重要的作用,对数据的贮存、输入、读取起着很重要的作用,本程序几乎所有数据都以数组进行输入、贮存、读取方便了对数据的处理和输入,数组的的使用在本程序中有很大的好处。2.函数是实现模块化编程的基础,它使程序变得方面易懂,对修改起了很大作用,也降低了编程的难度,一个函数就是一个功能,它使各个功能之间有了一定的独立性,一个函数的错误,不会导致整个程序的失败(主函数除外),对函数的良好应用时在本程序中又以深刻的体会。也有了很大提高。3.结构体的使用,为本程序提供了很大方面,也提高了本程序的可读性,结构数组方面了对数据的管理。4.文件的读取与存贮使数据可以保存下来,这也是在学校的学习过程中没有掌握的内容,在开始时遇到了不小的困难。个人心得体会:1、 在本课题中,由于个人对指针和文件学习掌握的不牢固,选择了用最简单的数组来实现课程需求。然而指针是C语言的灵魂,虽然本程序中,对指针的运用很少,但是在之后,我会加强对指针的学习。2、 同时,通过对学生管理系统的编程,我的C语言编程能力也有所提高,特别是在数组、函数、结构体、清屏方面有了很大的提高。其次,在调试程序,和检验程序上有很多收获,在编程上也能够认真减少失误,并且尽量解决错误。通过一次次实践,我觉得自己并不会害怕错误,能够从容的解决许多错误,有了很大提高。3、 然而,最重要的是在这次课程设计中,把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。并让我明白了,在编程之前,前期的分析问题,了解需求,并进行系统功能设计的部分是很重要的,把自己的思路理清楚,然后分成不同的函数块,一块一块的完成实现。还有,在编程时,应该集中精力,分大块的时间来做,才能提高效率和质量。4、 最后,对学生管理系统的编程之后,我深刻体会到自己需要在编程方面进一步提高,也提高了自己对编程的兴趣,使自己对编程有了更深的理解,体会到编程的乐趣。开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。今后,我将更加努力的学习C语言!参考文献或网站:一 谭浩强著 C语言程序设计第三版 北京:清华大学出版社 2014 附 录:源程序代码附 录:/ 期 末 大 作 业 /学 生 管 理 系 统/#include stdio.h#include string.h /程序中用到字符串函数#include stdlib.h/#include ctype.h#define STU struct student /利用宏替换 STU 替换 struct student #define N 10 /N代替学生数量#define K 7 /void show(); /*声明函数*/int system(const char*string); /定义清屏函数void ISI(); /ISI: Input Students Informationvoid OSI(); /OSI: Output Students Informationvoid TSI(); /TSI: 统计学生信息(计算总分平均分并排序)void CourseSort(); /CourseSort: 进行各科成绩排序void CourseSum(); /CourseSum: 统计每门课程的总分平均分 void ShowHighest(); /ShowHighest: 展示最高分学生void Average(); /Average: 显示高于低于等于平均成绩人数 void GradeScore(); /GradeScore: 根据平均成绩分等级void ADC(); /ADC: Add,Delete,changevoid Inquire(); /Inquire: 多种查询功能(根据学号、姓名、学院)/*void open();void save();*/STU /定义一个结构体char xy20;char ID20;char name20; struct date /嵌套一个表示出生日期的结构体(包含年月日) long year; int month; int day; birth;char sex;float scoreK;float sum;float ave;stuN; /定义一个结构体数组 /定义全局变量int n,m=0; /定义m:在增加学生信息函数中,选择需增加学生个数,并且能够显示int z=m+n; /定义z来表示m+n的和,方便表示void main(void)int ichoice,i=1;/int flag=1; struct student stuN,*p=stu; char ch;do /利用dowhile循环,实现界面美观(注意while()中条件) printf(nnnnnnnnn); printf(tt-n); /欢迎界面 printf( ttt欢迎来到学生管理系统n); printf(n ttt辽宁师范大学计算机与信息技术学院n); printf(nttttt 呼培英201421012737n); printf(tt-n);printf(Press the Enter to Coming. ); ch=getchar();while(!ch); system(cls);while(i) /使用while循环,使用户能够重复选择printf(n-辽宁师范大学*学生信息管理系统-n);printf(n*);printf(n1、 录入学生信息);printf(n2、 显示学生信息);printf(n3、 计算总成绩平均分并排序);printf(n4、 对不同科目分别排序);printf(n5、 统计每门课程总分平均分);printf(n6、 显示最高分学生);printf(n7、 显示平均成绩分布);printf(n8、 根据平均成绩分等级);printf(n9、 增删改学生信息);printf(n10、根据要求查询信息);/printf(n11、保存到文件中); /将录入以及修改后的信息保存至文件中/printf(n12、从文件读取);printf(n0、退出);printf(n*);printf(n-请选择所需服务-);printf(nPlease chioce 0-10:); /输入ichioce进行选择需要进行的操作scanf(%d,&ichoice);system(cls);switch(ichoice) /通过switch(ichoice)调用函数case 1: ISI();break;case 2: OSI();break; case 3: TSI();break;case 4: CourseSort();break;case 5: CourseSum();break;case 6: ShowHighest();break;case 7: Average();break;case 8: GradeScore();break;case 9: ADC();break;case 10: Inquire();break;/ case 12: save();break;/case 11: open();break; case 0: printf(nnnnnnnnn); /结束界面人性化 printf(tt-n); printf( ttt感谢使用学生管理系统n); printf(n ttt欢迎下次使用n); printf(nttttt 呼培英201421012737n); printf(tt-n); i=0;break; default : i=1;break;/*1.输入学生信息ISI:Input Student Information*/void ISI()int i,j; /定义i,j用于循环 char ch;printf(n录入学生信息);printf(n信息之间用Tab键隔开t(性别女/男:w/m)t(日期之间用空格隔开)n);/注明用户操作要求 printf(请输入须录入学生数目(=10):); scanf(%d,&n);for(i=0;in+m;i+) /i控制学生数量的循环 printf(n输入第%d个学生基本信息:,i+1); printf(n学院tIDtnamet生日(年月日)tsexn);scanf(%s%s%s%ld%d%d%c,stui.xy,stui.ID,,&stui.birth.year,&stui.birth.month,&stui.birth.day,&stui.sex);ch=getchar(); /利用ch吸收多余的回车printf(各科成绩:);printf(n英语t物理t离散t模电tC语言t高数t体育n);for(j=0;jK;j+) /j控制学生科目的循环scanf(%f,&stui.scorej);printf(n);ch=getchar();printf(输入Enter键返回:); ch=getchar();system(cls); /利用清屏,返回主菜单/*2.显示学生信息OSI:Output Student Information*/void OSI()int i,j;char ch;printf(n显示学生信息); printf(nn); /将学生基本信息和成绩分别显示 printf(n学院tnametIDt生日(年月日)tsexn);for(i=0;in+m;i+) /i,j用法与录入函数相同printf(%st%st%st%ld %d %d %cn,stui.xy,stui.ID,,stui.birth.year,stui.birth.month,stui.birth.day,stui.sex);printf(nn); printf(nnumtnamet英语t物理t离散t模电tC语言t高数t体育n); for(i=0;in+m;i+) printf(%st%s,stui.ID,); for(j=0;jK;j+) printf(t%4.1f,stui.scorej); printf(n);ch=getchar(); /两个getchar:一个用来吸收回车,一个用来接收Enter printf(n输入Enter键返回:);ch=getchar();system(cls);/*3.统计学生成绩(计算总成绩、平均分、排序、成绩分级)*/void TSI()int i,j;STU t;char ch;printf(n统计学生信息);printf(n);for(i=0;in+m;i+) /计算总分、平均分stui.sum=0;for(j=0;jK;j+) /利用循环将每个学生的K门课总成绩保存至stui.sumstui.sum+=stui.scorej; /每个学生的平均成绩保存至stui.avestui.ave= stui.sum/K;for(i=0;in+m;i+) /根据总分排序for(j=0;jn+m-i-1;j+) /利用冒泡排序法将总成绩排序(i控制轮数,j控制每轮比较次数)if(stuj.sumstuj+1.sum)t=stuj; /比较大小后进行交换stuj=stuj+1;stuj+1=t;printf(tIDtnamet总成绩t 平均成绩nn);for(i=0;in+m;i+) n/利用循环输出排序后学生信息printf(第%d名:t%s t%s t%5.1f t%5.1fn,i+1,stui.ID,,stui.sum,stui.ave);ch=getchar();printf(n输入Enter键返回:);ch=getchar();system(cls);/*4.对不同科目分别排序void ObjectSort()*/void CourseSort()int i,j,k,m=1;STU t;char ch,cour710=英语,物理,离散,模电,C语言,高数,体育; /定义一个二维数组用来存放学科,在下面根据选择显示相应科目printf(根据用户选择对相应科目进行排序);printf(n请选择需进行排序的科目:n);printf(1.英语t2.物理t3.离散t4.模电t5.C语言t6.高数t7.体育t0.返回继续选择n);printf(Please chioce 0-7:); scanf(%d,&k); /利用k的输入选择要排序的科目 while(k)printf(ntIDtnamet总成绩t %dn,courk10);for(i=0;in+m;i+) /计算总分、平均分stui.sum=0;for(j=0;jK;j+)stui.sum+=stui.scorej; for(i=1;in+m;i+) /根据科目,利用冒泡排序法排序 for(j=0;jn+m-i-1;j+) if(stuj.scorek-1stuj+1.scorek-1) t=stuj; stuj=stuj+1; stuj+1=t; for(i=0;in+m-1;i+) /循环输出结果printf(n第%d名:t%s t%s t%5.1f t%5.1f,i+1,stui.ID,,stui.sum,stui.scorek-1);k=0;ch=getchar();printf(nn输入Enter键返回:);ch=getchar();system(cls);/*5.统计每门课程总分平均分CourseSum()*/void CourseSum()printf(n统计每门课程总分平均分);int i,j;char ch;float fsumK=0, faveK; /定义fsum,fave用来存放每门课程总分平均分for(i=0;iK;i+) /利用冒泡排序法排序,并显示for(j=0;jn+m;j+)fsumi+=stuj.scorei;favei=fsumi/n; printf(nt 英语t 物理t离散t模电tC语言t 高数t体育n);printf(n总分:t);for(i=0;iK;i+) /利用循环显示总分平均分printf(%5.1ft,fsumi);printf(n平均分:t);for(i=0;iK;i+)printf(%5.1ft,favei);ch=getchar();printf(nn输入Enter键返回:);ch=getchar();system(cls);/*6.显示最高分学生ShowHighest()*/void ShowHighest()printf(n显示最高分学生n);int i,j;STU t;char ch;for(i=0;in+m;i+) /根据总分利用冒泡法排序for(j=0;jn+m-i-1;j+)if(stuj.sumstuj+1.sum)t=stuj;stuj=stuj+1;stuj+1=t;printf(n最高分的学生有:n);for(i=0;in+m;i+) /排序后第一个则为最高分向下移动有第一个相同的均为最高分if(stu0.sum=stui.sum) printf(t学号为%s,姓名为%s,总成绩为%5.1f,平均成绩%5.1fn,stui.ID,,stui.sum,stui.ave);ch=getchar();printf(nn输入Enter键返回:);ch=getchar();system(cls);/*7.显示高于、低于和等于平均成绩的人数Average()*/void Average()printf(n显示高于、低于和等于平均成绩的人数n);int i,j;int a=0,b=0,c=0; /定义a,b,c用来存放高于、低于和等于平均成绩的人数float fsum=0,fave=0; /定义fsum,fave分别存放所有人总分及平均分char ch;for(i=0;in+m;i+) /计算总分、总分的平均分stui.sum=0;for(j=0;jK;j+)stui.sum+=stui.scorej;for(i=0;in+m;i+) fsum+=stui.sum;fave=fsum/z;for(i=0;in+m;i+)if(favestui.sum) /if语句判断高于平均分,等于平均分,低于平均分的人数a+;elseif(fave=stui.sum)b+;else c+;printf(n所输入学生的总分的平均分为:%5.1f,fave);printf(n高于平均分的人数有 %d 人n等于平均分的人数有 %d 人n低于平均分的人数有 %d 人n,a,b,c);ch=getchar();printf(nn输入Enter键返回:);ch=getchar();system(cls);/*8.根据平均成绩分为优秀.良好.中等.及格.不及格*/void GradeScore()printf(n根据平均成绩分等级n);printf(n优秀(90100)、良好(8089)、中等(7079)、及格(6069)、不及格(059)n);int a=0,b=0,c=0,d=0,e=0,i,j;double A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;char ch;for(i=0;in+m;i+) /计算总分、平均分stui.sum=0;for(j=0;jK;j+)stui.sum+=stui.scorej;stui.ave= stui.sum/K;for(i=0;i=90) /利用if语句计算高于90分人数a+;else if(stui.ave=80) /然后依次计算低于90高于80的b+;else if(stui.ave=70)c+;else if(stui.ave=6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论