西安郵電學院C语言课程设计报告书系部名称电子与信息工程系学生姓名薛文超专业名称电子信息工程班级电子0701学号05071030指导教师衡霞时间2008年06月09日至2008年06月20日实验题目学生信息管理系统一、实验目的1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。3.熟练运用if语句和switch语句以及嵌套应用。涉及循环调用的,了解并掌握三种控制语句while、do-while和for语句。4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。5.掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。6.掌握结构体类型变量、数组的定义和使用。7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表来储存学生信息。8.掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串二、实验内容学生信息的管理程序。该程序应该具有下列功能:(1)通过键盘输入某位学生的学生信息。学生信息要根据同学的真实信息输入;(2)显示输入的全部学生信息;(3)给定学生的姓名、学号、生日,显示该学生的所有学生信息;(4)会对学生信息进行添加和运用姓名对学生的信息进行修改;(5)给定某位学生的学号或姓名,删除该学生的学生信息;(6)能根据学生的班级、学号、以及个门考试成绩对学生进行排序;(7)会对学生的个门考试成绩进行统计;(8)用文件的形式将录入的数据进行存储,并从其中读取数据。开发工具—-Win-TC运行平台——中文DOS运行环境三、需求分析对所开发系统功能的描述,想要实现的目标,测试数据等(问题提出、功能要求)系统功能:1.显示全部的学生信息;2.给定某位学生的学号、生日或姓名,查询或修改该学生的学生信息;3.给定某位学生的学号或姓名,删除该学生的学生信息;4.增加学生信息;5.提供一些统计各类信息的功能。例如统计男女同学数,班级学生数,学生考试各门成绩的分布数;6.能够对学生成绩进行降序排序;7.用文件的形式将录入的数据进行存储,并从其中读取数据。8.密码保护;性能描述:各种功能都可以满足;程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。四、概要设计1方案设计对系统进行分析,给出结构图2、数据结构说明程序中定义的数据类型——结构体(各个成员的作用)structstud_type{charnum[10];charname[20];charsex;charclas[20];主程序输入模块统计模块排序模块查询模块更新模块输出模块模块保存模块插入信息删除信息修改信息按姓名查询按学号查询按生日查询统计性别统计人数统计各门课分数段人数按个门成绩排序floatscore[10];intmath;intenglish;intphysics;intclanguage;intmaodengsan;intPE;charzhuanye[60];intage;charbirthday[20];intpaiming;}students[max];*p,*q[max];3、模块功能说明对各个模块进行功能的描述save_message()用于储存所输入的学生信息到指定文件Input_message()用于输入学生信息out_message()用于输出学生信息read_message()用于从指定文件读取学生信息insert_message()用于插入一个新的学生信息revise_message()用于修改某个学号的学生信息renew_message()用于更新学生信息,可以插入一个新的学生信息或者修改某个学号的学生信息inquire_name()用于按姓名查找某个学生信息并打印该生信息inquire_num()用于按学号查找某个班的学生信息,并打印出来inquire_birthday()用于按生日查找某个学生信息并打印该生信息inquire_message()用于学生查找信息,可按姓名查找或查找某个班的学生信息delete_by_num()用于按学号删除某个学生的信息delete_by_name()用于按姓名删除某个学生信息delete_message()用于删除某个学生的信息count_message()用于统计某个学生的班级、男女生数、成绩等信息的统计;sort_message()用于按成绩排序,并按顺序输出学生的学号,姓名,专业,成绩;password()用于锁定程序;4.程序可以满足以下功能:1.各模块间通过菜单切换和调用2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。3.程序能够保证各模块功能的独立和数据共享。4.相近功能以级联菜单的形式集成。五、详细设计及运行结果各模块流程图,函数之间相互调用的图示,程序设计过程及编码(不必给出完整程序),运行结果。主函数输入函数输出函数更新函数查询函数统计函数排序函数插入函数删除函数修改函数按序号查按学号查按姓名查统计人数统计各门成绩成绩序号排行各门成绩排行结束结束结束结束结束结束保存函数结束主要函数之间相互调用如下:主函数main()的调用switch(choice){case1:input_message();break;case2:output_message();break;case3:save_message();break;case4:renew_message();break;case5:inquire_message();break;case6:count_message();break;case7:sort_message();break;case0:exit(0);}插入函数的调用:insert_message(){inti=sum,j,flag=0;charchoice;floaty;clrscr();printf(\n\n**********insertthestudentinformation:\n);do{strcpy(students[i].num,++sum);printf(inputname:\n);scanf(%s,students[i].name);printf(inputnum:\n);scanf(%d,&students[i].num);printf(inputsex:\n);getchar();scanf(%c,students[i].sex);printf(inputage:\n);scanf(%d,&students[i].age);开始打开文件得到学生总数sum,i←sum,flag=0;num=++sum;输入/输出学生信息choice=y/Y?flag=1;i++flag=0;结束printf(inputbirthday:\n);scanf(%s,students[i].birthday);printf(inputclas:\n);scanf(%s,students[i].clas);printf(inputzhuanye:\n);scanf(%s,students[i].zhuanye);printf(inputscore:\n);scanf(%f,&y);students[i].score=y;printf(\ncontinue?(Y/N));choice=getch();if(choice=='Y'||choice=='y'){printf(*****continue!*****\n);i++;flag=1;}elseflag=0;}while(flag==1);printf(pressanykeyreturntomainmenu!);bioskey(0);}开始:打开文件delet_num=0输入要删除的学号students[i].num==delet_numstudents[i].num=0f=1,i++isum?已删除该学号信息结束Break,i++——f==0删除函数的调用:intdelet_by_num(){intdelet_num=0,i,f=0;printf(\n\npleaseinputthestudentnum:);scanf(%d,&delet_num);for(i=0;isum;i++){if(strcmp(students[i].num,delet_num)==0){strcpy(students[i].num,0);printf(thestudents'informationhavebeendeleted!);f=1;break;}}if(f==0)printf(\n\n********cannotfindthestudent!*************\n\n);getchar();return0;}开始sum=read_message();i←0;j=i+1;students[i].numstudents[j].num?交换students[i].num和students[j].num的值i++;j++isum?输出结果结束排序函数的调用:sort_num(){structstud_type;inti,j,t;clrscr();printf(\nthenumsort\n);printf(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n);printf(\npaimingxuehaonamezhuanyescore\n);for(i=0;isum-1;i++)for(j=i+1;jsum;j++)if(students[i].numstudents[j].num){strcpy(t,”students[i].num”);strcpy(students[i].num,students[j].num);strcpy(students[j].num,t);}printf(thenumsort:\n);for(i=0;isum;i++)printf(\n%d%d%s%s%f,i+1,students[i].num,students[i].name,students[i].zhuanye,students[i].score);bioskey(0);}五、调试情况,设计技巧及体会(重点)1、测试数据(1)输入数据创建学生信息:学号姓名性别出生年月日年龄班级专业成绩(math|eng|phy|clan|mds|PE)05071030Xuewenchaom1986-02-0322dianzi0701dianzi98959498939905071088Xiaoyongw1987-05-0520dianzi0702dianzi90919295979805071099xiaozhaom1989-03-0321dian0703dianzi878698885868(2)输出信息Name-----num---sex-age-class-birthday-zhuanye--mathengphyclanmdsPE-------------------------------------------------------------------------------------------------------------------Xuewenchao05071030m22dianzi07011986-02-03dianzi989594989399Xiaoyong05071088w20dianzi07021988-05-05dianzi909192959798Xiaozhao05071002m21dianzi07031989-03-03dianzi878698885868Pressanykeytoreturn!(3)修改信息输入学号:05071001选择修改其年龄:22(能完整输出该生修改后的信息)Name---