福建工程学院软件学院c语言及数据结构与算法课程设计题目:学生信息管理系统专业:物联网工程1401班姓名:黄志华学号:3148120119同组其他学生(学号):2656572015年6月24日目录一、需求分析............................................................................3二、总体设计............................................................................3三、详细设计............................................................................4四、调试与测试......................................................................16五、测试结果..........................................................................16六、用户手册..........................................................................16七、附录..................................................................................16一、需求分析问题描述学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:系统以菜单方式工作学生信息录入功能---输入学生信息浏览功能---输出查询、排序功能---算法按学号查询、按姓名查询、学生信息的删除与修改(可选项)(2)功能要求界面比较美观;有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入;最好用链表的方式实现。二、总体设计开始主菜单选择语句switch(a)录入学生信息函数浏览学生信息查询学生信息删除学生信息修改学生信息退出系统12345主菜单0录入信息YN浏览学生信息1按提示,录入学生信息选择是否继续输入学生信息返回主菜单2输出之前保存的所有学生信息返回主菜单查询学生信息NY3输入已保存的学生学号输入是否正确输出符合学号的学生信息提示输入有误返回主菜单删除学生信息YN4输入已保存的学生学号输入是否正确删除已保存的学生信息提示输入有误返回主菜单修改学生信息NY5输入已保存的学生学号输入是否正确返回主菜单提示输入有误选择修改的内容修改的新内容直至取消修改三、详细设计各调用函数的设计与运行情况:(//录入学生信息voidrecord(){structstudent*p0;p0=(structstudent*)malloc(LEN);printf(请输入学生的姓名:);scanf(%s,p0-name);printf(请输入学生的学号:);scanf(%ld,&p0-num);printf(请输入学生的性别:);scanf(%s,p0-sex);printf(请输入学生的年龄:);scanf(%d,&p0-age);printf(请输入学生的地址:);scanf(%s,p0-address);printf(请输入学生的电话:);scanf(%lf,&p0-tele_num);printf(请输入学生的E-mail:);scanf(%s,p0-E_mail);insert(p0);printf(该学生的信息为:\n);printf(-------------------------------------------------------------------------------\n);printf(姓名\t学号\t年龄\t性别\t地址\t\t电话\t\tE-mail\n);display(p0);}voidinsert(structstudent*stu){structstudent*p0,*p1,*p2;p1=head;p0=stu;if(head==NULL){head=p0;p0-next=NULL;}else{while((p0-nump1-num)&&(p1-next!=NULL)){p2=p1;p1=p1-next;}if(p0-num=p1-num){if(head==p1)head=p0;elsep2-next=p0;p0-next=p1;}else{p1-next=p0;p0-next=NULL;}}TOTAL_NUM++;}voiddisplay(structstudent*p){printf(%s\t%ld\t%d\t%s\t%s\t%.0f\t%s\n,p-name,p-num,p-age,p-sex,p-address,p-tele_num,p-E_mail);}//浏览学生信息voiddisplayAll(){structstudent*p;printf(学生总数:%d\n,TOTAL_NUM);p=head;if(head!=NULL){printf(\n姓名\t学号\t年龄\t性别\t地址\t\t电话\t\tE-mail\n);printf(-------------------------------------------------------------------------------\n);do{display(p);p=p-next;}while(p!=NULL);}printf(\n);}//按学号查询学生信息voidquery_by_num(){intnum;structstudent*p1;printf(请输入学生的学号:);scanf(%ld,&num);if(head==NULL){printf(无学生记录!\n);return;}p1=head;while(num!=p1-num&&p1-next!=NULL)p1=p1-next;if(num==p1-num){printf(姓名\t学号\t年龄\t性别\t地址\t\t电话\t\tE-mail\n);printf(-------------------------------------------------------------------------------\n);display(p1);}elseprintf(没有该学生记录,请核对!);}//删除学生信息voiddel(){structstudent*p1,*p2;longintnum;if(head==NULL){printf(无学生记录!\n);return;}printf(请输入您要删除的学生的学号:);scanf(%ld,&num);p1=head;while(num!=p1-num&&p1-next!=NULL){p2=p1;p1=p1-next;}if(num==p1-num){if(p1==head)head=p1-next;elsep2-next=p1-next;free(p1);TOTAL_NUM--;}elseprintf(没有该学生记录,请核对!\n);}//修改学生信息voidchange(){structstudent*p1,*p2;longintnum;if(head==NULL){printf(无学生记录!\n);return;}printf(请输入您要修改的学生的学号:);scanf(%ld,&num);p1=head;while(num!=p1-num&&p1-next!=NULL){p2=p1;p1=p1-next;}if(num==p1-num)devise(p1);elseprintf(没有该学生记录,请核对!\n);}voiddevise(structstudent*p){intchoice;choice=-1;do{printf(请选择您要修改的学生的信息内容:\n);printf(+----------------------+\n);printf(|姓名请按1|\n);printf(|学号请按2|\n);printf(|性别请按3|\n);printf(|年龄请按4|\n);printf(|地址请按5|\n);printf(|电话请按6|\n);printf(|E-mail请按7|\n);printf(|取消请按0|\n);printf(+----------------------+\n);printf(请输入您的选择:);scanf(%d,&choice);switch(choice){case0:return;case1:printf(请输入新姓名:);scanf(%s,p-name);break;case2:printf(请输入新学号:);scanf(%d,&p-num);break;case3:printf(请输入新性别:);scanf(%s,p-sex);break;case4:printf(请输入新年龄:);scanf(%s,&p-age);break;case5:printf(请输入新地址:);scanf(%s,p-address);break;case6:printf(请输入新电话:);scanf(%lf,&p-tele_num);break;case7:printf(请输入新E-mail:);scanf(%s,p-E_mail);break;default:printf(\n无效选项!);break;}}while(choice!=0);}模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等))四、调试与测试设计一个程序,错误是难免不了的。但我们可以根据编辑系统给出的一些提示去查看程序错误。对不敢肯定正确的,翻翻书,看一下这一知识。对难度大的就和同学们一起讨论,问一问老师。开发一个系统,耐心是必要的,认真也很重要,构思要明确。认为是哪里错误的,有时用“/**/”注释起来进行,看看是否还有错误。常错有以下几种情况:1.使用变量,但未有定义,则先定义。2.不该用分号的,用到了,把它去掉。3.行最后若有分号则删除,中间若有分号则改成逗号4.若错误行中有if、while、for则要特别注意条件表达式的错误。5.若条件表达式中只有一个等于号,则改成两个等于号。6.for中要用分号分隔表达式,而不是用逗号7.缺少分号,若错误行中有语句没有用分号结束,则加上分号。8.大小写不对,若错误行中有大写字母则一般都改成小写字母。9.若有return语句则函数的类型必须与return后变量的类型一致。调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施五、测试结果测试数据运行结果详见“三·具体设计”(程序运行的截图)六、用户手册按提示输入数据。七、附录源程序代码#includestdio.h#includemalloc.h#includestring.h#includestdlib.h#defineNULL0#defineLENsizeof(structstudent)structstudent{charname[20];longintnum;charsex[4];intage;charaddress[30];doubletele_num;charE_mail[20];structstudent*next;};//定义一个结构题intTOTAL_NUM=0;//学生总数structstudent*head=NULL;voidwelcome();//欢迎界面voidmainmenu();//主界面voidrecord();//记录数据voidinsert(structstudent*stu);//插入数据