1课程设计课程设计名称:数据结构课程设计专业班级:学生姓名:学号:指导教师:课程设计时间:2012.6.11—2012.6.222计算机应用技术专业课程设计任务书学生姓名专业班级学号题目学生成绩管理系统课题性质A课题来源D指导教师韩萍同组姓名无主要内容1-完成一个学生信息管理系统,主要信息包括姓名学号性别以及5科期末考试成绩,并能够将所有学生相关信息储存至文件2-包括新建添加,查询(按学号,姓名),按各科成绩排序,修改学生信息,按学号删除学生信息等基本功能3-拓展新增了密码保护功能,人性化菜单提示4-完成实验报告,包括需求分析,概要设计,开发工具及编程语言,调试分析,测试结果,参考文献,心得体会任务要求熟练掌握一中乃至多种编辑器,养成良好的变成习惯综合运用和融化所学理论知识,提高分析和解决实际问题的能力,达到培养良好程序设计能力和习惯的目的,为开发满足问题要求的小型应用软件奠定基础,达到软件工程的综合性基础训练的目的。在规定的时间内完成报告,报告中对关键部分给出图表说明。要求格式规范,工作量饱满;语言表达准确,概念清楚;实验方法科学,分析归纳合理;整体构思合理,理论依据充分,设计完整,界面友好,有一定的实用价值。此外还要求数据准确,公式推导正确;设计格式、绘图、图纸、实验数据、较为标准的运用等符合有关标准和规定,设计过程认真。3参考文献《C语言程序设计》(第三版)谭浩强清华大学出版社《数据结构(C语言版)》严蔚敏清华大学出版社《CPrimerPlus》(第五版中文版)StephenPrata人民邮电出版社审查意见指导教师签字:教研室主任签字:2012年6月18日说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页填表说明1.“课题性质”一栏:A.工程设计;B.工程技术研究;C.软件工程(如CAI课题等);D.文献型综述;E.其它。2.“课题来源”一栏:A.自然科学基金与部、省、市级以上科研课题;B.企、事业单位委托课题;C.校、院(系、部)级基金课题;D.自拟课题。1需求分析本次数据结构设计以“学生信息管理系统”为题,题目要求开发一个学生信息管理系统,学生信息包括:姓名、学号、性别、英语成绩、Java成绩、数据结构成绩、数字逻辑电路成绩和计算机组成原理成绩等基本信息(也可以根据自己的当前能力进行扩充)。基本功能包括:1-实现对学生信息的新建添加,并能有效地储存至ASCII文件students_list.txt2-对已有的学生成绩信息进行排序,分别对各科成绩均作出排序并输出排序结果3-可以对已有的学生信息进行有效地修改,修改时按学号查找修改目标4-实现对已有学生全部信息的删除并保存至原文件中5-根据个人情况又在将基本功能全部实现的前提下增加了菜单选项和密码验证功能,使得程序整体更加人性化students_list.txt文件结构:姓名学号性别英语Java数据结构数字电路计算机zhao1001man78.089.090.098.087.0qian1002man67.065.063.061.060.0sun1003wom90.094.091.099.093.0zhou1004man38.048.059.028.060.0zhen1005man84.072.068.058.092.0wang1006wom59.087.089.099.077.0zhang1007wom78.066.088.065.072.02概要设计一,数据结构structstudents{charNum[10];/*字符型学生学号*/charName[20];/*字符型学生姓名*/charSex[3];/*字符型学生性别*/doubleEnglish;/*双精度实型英语成绩*/5doubleJava;/*双精度实型Java成绩*/doubleSjjg;/*双精度实数据结构*/doubleSzdl;/*双精度实型数字电路*/doubleJsj;/*计算机组成原理*/structstudents*next;/*用与构建连表指向下一结点*/};FILE*fp;/*定义全局变量fp*/二,模块划分voidRevisemenu();/*修改菜单*/voidSortmenu();/*排序菜单*/voidmenu();/*主菜单*/voidsecret();/*安全验证*/structstudents*Input();/*新建学生信息*/voidfprint(structstudents*head);/*将信息导入文件可追加*/voidfprint_(structstudents*head);/*将信息导入文件并覆盖*/voidBrowse(structstudents*head);/*浏览全部学生信息*/structstudents*create(structstudents*head,int*n);/*从tushu_list中读取数据构建链表*/voidFindofNum(structstudents*head);/*按学号查询学生信息*/voidFindofNname(structstudents*head);/*按姓名查询学生信息*/voidSortEnglish(structstudents*head);/*按英语成绩排序*/voidSortJava(structstudents*head);/*按Java成绩排序*/voidSortSjjg(structstudents*head);/*按数据结构成绩排序*/voidSortSzdl(structstudents*head);/*按数字逻辑电路成绩排序*/voidSortJsj(structstudents*head);/*按计算机组成原理成绩排序*/structstudents*Delete(structstudents*head,charm[15]);/*按学号删除学生成绩信息*/structstudents*Revise();/*修改学生信息(按编号修改)*/三,程序总体框架模块层次结构只确定了模块之间的关系以及函数原型,不是程序的执行步6骤。程序的总体框架是程序的总体流程图。此程序并非是按照顺序逐一执行的,其中有某些程序他们之间的关系并不是递进,而是并列。所以选取一个合适的菜单是最佳方案。程序的总体框架如下:3运行环境windows,linux等下都能运行,无需配置环境变量4开发工具和编程语言本程序全部代码均由MicrosoftVisualC++6.0编写并调试,使用C编程语言编写,由cmd命令行执行,DOC运行。由主函数进入程序密码验证通过后输出主菜单学生信息管理系统1-添加新同学2-浏览学生信息3-按学号查询4-按姓名查询5-按成绩排序6-修改学生信息7-删除学生信息0-退出系统未通过输入对应编号0-退出系统1-添加新同学2-浏览全部学生信息3-按学号查找1-英语排序2-Java排序3-数据结构排序4-数字电路排序5-计算机排序6-按编号删除图书7-修改图书5-调用排序菜单4-按姓名查询退出系统75详细设计菜单选项1.函数原型,及功能参数函数原型:voidmenu()/*主菜单*/voidRevisemenu()/*修改菜单*/voidSortmenu()/*排序菜单*/返回值均为空,无特殊参数,主要输出调试菜单2.程序清单voidmenu(){printf(学生信息管理系统\n);printf(---------------------------------------------------\n);printf(1-添加新同学2-浏览学生信息\n);printf(3-按学号查询4-按姓名查询\n);printf(5-按成绩排序6-修改学生信息\n);printf(7-删除学生信息0-退出系统\n);printf(---------------------------------------------------\n);}voidSortmenu(){printf(按成绩排序\n);printf(1-大学英语2-JAVA编程\n);printf(3-数据结构4-数字逻辑电路\n);printf(5-计算机组成原理0-返回上级菜单\n);}voidRevisemenu(){printf(1--修改学生姓名2--修改学生学号\n);printf(3--修改学生性别4--修改英语成绩\n);printf(5--修改JAVA成绩6--修改数据结构\n);printf(7--修改数字电路8--修改计算计\n);printf(0--返回上级菜单\n);8}密码验证1.函数原型,功能及形参说明函数原型:voidsecret()函数功能:实现系统的密码验证功能参数说明:chara[20]20个字符以内的密码输入system(cls);库函数清频2.程序清单voidsecret(){chara[20];printf(**进入学生信息管理系统前请先进行密码验证---);do{gets(a);/*输入密码*/system(cls);/*调用库函数清屏*/printf(对不起!您输入的密码有误,请重新输入---);}while(strcmp(a,0605)!=0);/*单一密码“0605”*/system(cls);printf(欢迎进入学生信息管理系统\n);}建立添加新同学及是否保存1.函数原型,功能及形参说明函数原型:structstudents*Input()函数功能:实现学生信息的添加及保存(其中调用函数voidfprint(structstudents*head);/*将信息导入文件可追加*/)参数说明:*head链表头结点指针*p1,*p2辅助结点局外变量2.程序清单structstudents*Input(){structstudents*p1,*p2,*head;/*建立辅助结点及头结点*/9charName;intn=0,x;printf(\n请按对应项输入学生信息以#结束:\n);printf(姓名学号性别英语Java数据结构数字电路计算机组成原理\n);p1=(structstudents*)malloc(sizeof(structstudents));head=p2=p1;do{/*使用dowhile语句输入学生信息*/scanf(%s,&p1-Name);if(strcmp(p1-Name,#)==0)break;/*判断结束符*/elsescanf(%s%s%lf%lf%lf%lf%lf,p1-Num,p1-Sex,&p1-English,&p1-Java,&p1-Sjjg,&p1-Szdl,&p1-Jsj);Name='#';p1=(structstudents*)malloc(sizeof(structstudents));p2-next=p1;p2=p1;n++;}while(1);p1-next=NULL;printf(学生信息输入结束!\n);getchar();printf(是否保存学生信息?(1.是/2.否):);scanf(%d,&x);if(x==1)fprint(head);/*调用函数保存至文件*/elseprintf(\n文件没有被保存!\n);returnhead;/*返回头指针*/}10将信息导入文件1.函数原型,功能及形参说明函数原型:voidfprint(structstudents*head)导入可追加voidfprint_(structstudents*head)导入并覆盖函数功能:实现学生的保存将信息导入文件可追加及覆盖参数说明:structstudents*head链表头结点指针2.程序清单voidfprint_(structstudents*head)与上者的区别仅在于文件的读取方式,即if((fp=fopen(students_list.txt,w))==NULL),其中“w”为“只写”voidfprint(structstudents*head){structstudents*p1