西安郵電大學C语言课程设计报告题目:学生信息管理系统院系名称:通信与信息工程学院专业名称:广播电视工程班级:学生姓名:学号(8位):指导教师:设计起止时间:2012年06月18日~2012年06月27日一.设计目的(1)将上一学期的C语言知识进行复习,并将课本上的知识应用于实践中。(2)将学过的一部分一部分知识综合应用,自行设计并实现一个较为完整的小型管理信息系统或小型应用系统的设计与开发。(3)提高程序的抽象分析设计能力。(4)学会函数的调用,把一个整体划分成为部分,再分别对部分编程。(5)通过c语言程序设计,编译一个简单的学生成绩管理系统,对学生的信息进行比较简单的管理。在内容上,包括学生的姓名,学号及各科成绩等信息。可进行信息的输入,输出,查询,修改,添加,删除,排序,等操作。(6)通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一步巩固《C语言程序设计》课程学习的内容,掌握高级语言程序设计的基本方法;(7)通过系统分析、系统设计、编程调试,写实验报告等环节,初步掌握软件系统设计的法和步骤,训练灵活运用程序设计语言进行软件开发的能力,提高分析问题和解决问题的能力,提高程序设计水平,培养必要的工程实践动手能力。(8)学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力;二.设计内容(1)运用C语言程序设计基本知识,通过MicrosoftVisualC++程序设计平台,建立一个学生信息管理系统。(2)运用课本上的相关知识编辑一个简单的学生信息管理系统,使之能够完成学生基本信息的输入、修改、添加、查看、删除、排序、统计、输出、退出等操作。(3)排除编程过程中所遇到的各项错误和警告,并逐项修改调试,直到程序正确运行。(4)通过老师的指导,对程序进行更深入的掌握。三.概要设计1.功能模块图;主函数打开文件保存文件密码输入模块输出模块修改模块删除模块查询模块排序模块添加模块菜单模块输入学生的姓名等信息输出所有学生信息按照学号修改学生信息按照学号删除学生信息按照学号查询学生信息按照学号从小到大排序添加新学生的信息菜单选项2.各个模块详细的功能描述。输入模块学号姓名高数成绩英语成绩c语言成绩体育成绩保存文件爱你返回目录需要录入信息的个数添加模块学号姓名数学成绩英语成绩c语言成绩体育成绩保存到文件返回目录输入输出模块读取文件显示文件中的数据返回目录查询模块读取文件学号姓名高数成绩大英成绩c语言成绩体育成绩返回目录输出删除排序模块按照学号排序输出排序后的数据返回目录删除模块输入要删除学生的学号输出删除后的数据返回目录菜单模块选择操作进入该选项模块返回目录显示菜单选项密码模块输入密码,(三次错误退出系统)进入系统输入用户名,(错误则重新输入)修改模块打开文件输入要修改学生学号姓名学号高数成绩大英成绩c语言成绩大物成绩修改保存输出修改后的数据四.1.功能函数的调用关系图;2.各功能函数的数据流程图。(如上三.2功能详述)3.重点设计及编码。调用修改信息函数调用删除信息函数调用显示信息函数调用载入信息函数调用保存信息函数调用添加信息函数调用查找信息函数调用排列信息函数菜单模块主函数主函数输入姓名学号等修改信息(按学号)按学号删除按学号查询添加信息结束菜单五.测试数据及运行结果1.正常测试数据(3组)及运行结果;2.非正常测试数据(2组)及运行结果。六.调试情况,设计技巧及体会1.对自己的设计进行评价,指出合理和不足之处,提出改进方案;通过两周的编程,我完成了学生成绩管理这个小系统。进一步理解并掌握了C语言中的精华指针和结构体。程序可以运行,实现对数据的录入、修改、插入、删除、排序、查询、等基本功能。程序开始时从文件中读取数据,结束时对新数据或更新的数据进行保存,以便下次再次调用。2.对设计及调试过程的心得体会。本次课程设计我感受颇深,对我无疑是一次巨大大的挑战,实习过程中我深刻感受到我C语言编程方面的不足,我虽然完成了本次设计,今后我会在此方面多下工夫,熟练掌握他。还有此次实习对我函数,结构体,指针,文件,等各方面的知识来了一次系统的复习,是我明白自己还存在很多很多的不足,以后还需多下工夫,真正实现很完整优秀的编程。七.参考文献1.《C语言程序设计教程》张毅坤曹锰张亚玲西安交通大学出版社2.C语言课本八.源程序代码(电子版)#includestdio.h#includestring.h#includestdlib.h#includeconio.h#defineN100structst_type/*结构体类型定义*/{charnum[7];charname[20];floatmath;floatenglish;floatc;floatgym;}st[N],k;intread_file(st_typest[]){FILE*fp;inti=0;if((fp=fopen(student.txt,rt))==NULL){printf(\n\n------库文件不存在!请创建);return0;}while(feof(fp)!=1){fread(&st[i],sizeof(st_type),1,fp);if(st[i].num[0]=='\0')break;elsei++;}fclose(fp);returni;}voidsave_file(st_typest[]){FILE*fp;inti;if((fp=fopen(student.txt,wb))==NULL){printf(读文件错误!\n);return;}for(i=0;iN;i++)if(fwrite(&st[i],sizeof(st_type),1,fp)!=1)printf(写文件错误!\n);fclose(fp);}/*输入模块*/intinput(st_typest[]){inti;chark;system(cls);for(i=0;iN;i++){system(cls);printf(\n请输入第%d个学生的信息\n,i+1);printf(\n姓名:);scanf(%s,st[i].name);printf(\n学号:);scanf(%s,st[i].num);printf(\n数学成绩:\n);scanf(%f,&st[i].math);printf(\n英语成绩:\n);scanf(%f,&st[i].english);printf(\nc语言成绩:\n);scanf(%f,&st[i].c);printf(\n体育成绩:\n);scanf(%f,&st[i].gym);printf(是否继续(任意键继续/N退出):\n);scanf(%s,&k);if(k=='n'||k=='N')break;}printf(按任意键返回主菜单\n);getch();system(cls);return0;}/*输出模块*/voidoutput(st_typest[]){inti,j=0;system(cls);for(i=0;iN;i++){if(st[i].num[0]=='\0'&&st[i].name[0]=='\0'&&st[i].c==0&&st[i].english==0&&st[i].gym==0&&st[i].math==0)break;printf(\n姓名----学号----数学成绩----英语成绩----c语言成绩----体育成绩\n);printf(%-8s%-8s%-12.2f%-12.2f%-12.2f%-12.2f,st[i].name,st[i].num,st[i].math,st[i].english,st[i].c,st[i].gym);j++;}if(j==0)printf(\n无学生信息!\n);printf(\n按任意键返回主菜单);getch();system(cls);}/*修改模块*/voidmodify(){intchoice,i,k;charn[7];system(cls);for(i=0;iN;i++){if(st[i].num[0]=='\0'&&st[i].name[0]=='\0'&&st[i].c==0&&st[i].english==0&&st[i].gym==0&&st[i].math==0)break;printf(\n姓名----学号----数学成绩----英语成绩----c语言成绩----体育成绩\n);printf(%-8s%-8s%-12.2f%-12.2f%-12.2f%-12.2f,st[i].name,st[i].num,st[i].math,st[i].english,st[i].c,st[i].gym);}printf(\n请输入要修改学生成绩的学号:\n);scanf(%s,n);system(cls);for(i=0;iN;i++)if(!strcmp(n,st[i].num)){k=i;printf(\n姓名----学号----数学成绩----英语成绩----c语言成绩----体育成绩\n);printf(%-8s%-8s%-12.2f%-12.2f%-12.2f%-12.2f,st[i].name,st[i].num,st[i].math,st[i].english,st[i].c,st[i].gym);printf(\n输入修改选项:);printf(\n1.姓名2.学号3.数学成绩4.英语成绩5.c语言成绩6.体育成绩\n);scanf(%d,&choice);switch(choice){case1:printf(\n修改后的姓名:\n);scanf(%s,st[i].name);break;case2:printf(\n修改后的学号:\n);scanf(%s,st[i].num);break;case3:printf(\n修改后的数学成绩:\n);scanf(%f,&st[i].math);break;case4:printf(\n修改后的英语成绩:\n);scanf(%f,&st[i].english);break;case5:printf(\n修改后的c语言成绩:\n);scanf(%f,&st[i].c);break;case6:printf(\n修改后的体育成绩:\n);scanf(%f,&st[i].gym);break;}}printf(\n姓名----学号----数学成绩----英语成绩----c语言成绩----体育成绩\n);printf(%-8s%-8s%-12.2f%-12.2f%-12.2f%-12.2f,st[k].name,st[k].num,st[k].math,st[k].english,st[k].c,st[k].gym);printf(\n按任意键返回主菜单);getch();system(cls);}/*删除模块*/voiddel(){inti,j;charn[7];printf(\n按学号删除\n);system(cls);for(i=0;iN;i++){if(st[i].num[0]=='\0'&&st[i].name[0]=='\0'&&st[i].c==0&&st[i].english==0&&st[i].gym==0&&st[i].math==0)break;printf(\n姓名----学号----数学成绩----英语成绩----c语言成绩----体育成绩\n);printf(%-8s%-8s%-12.2f%-12.2f%-12.2f%-12.2f,st[i].name,st[i].num,st[i].math,st[i].english,st[i].c,st[i].gym);}printf(\n请输入要删除学生成绩的学号:\n);scanf(%s,n);for(j=0;jN;j++)for(i=0;iN;i++)if(!strcmp(n,st[i].num)){for(i;iN;i++)st[i]=st[i+1];}for(i=0;iN;i++){if(st[i].n