《C语言程序设计》课程设计报告(2).docx_第1页
《C语言程序设计》课程设计报告(2).docx_第2页
《C语言程序设计》课程设计报告(2).docx_第3页
《C语言程序设计》课程设计报告(2).docx_第4页
《C语言程序设计》课程设计报告(2).docx_第5页
已阅读5页,还剩125页未读 继续免费阅读

下载本文档

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

文档简介

华中科技大学计算机学院C语言程序设计课程设计课程设计报告题目:招生查询系统课程名称: C语言程序与设计 专业班级: 信息安全1302班 学 号: 姓 名: 指导教师: 报告日期: 2014年10月1日 计算机科学与技术学院任务书题目:招生查询系统一、主要内容建立招生信息系统,提供创建、编辑和综合查询等基本业务管理和服务。二、任务要求收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交课程设计报告。三、参考文献1曹计昌,卢萍,李开. C语言程序设计,北京:科学出版社,20132李开,卢萍,曹计昌. C语言实验与课程设计,北京:科学出版社,20113张引. C程序设计基础课程设计, 杭州:浙江大学出版社,20074黄明,梁旭,万洪莉. C语言课程设计,北京:电子工业出版社,2006四、基本要求只能使用C语言,源程序要有适当的注释,使程序容易阅读。要有用户界面。要求至少采用教材p215-p216类似的简易菜单;鼓励采用文本菜单界面甚至采用图形菜单界面。必须使用结构和十字交叉链表等数据结构。使用文件保存数据。鼓励自行增加新功能。设计测试的模拟数据,完成系统测试。撰写课程设计报告(要求正规双面打印,A4幅面)内容包括:题目、系统功能模块结构图、数据结构设计及用法说明、程序结构(画流程图)、各模块的功能、试验结果(包括输入数据和输出结果)、体会、参考文献和附录:程序清单。课程设计报告封面统一格式,标准格式详见本科生课程设计规范化要求。课程设计资料(包括课程设计报告、源程序、目标程序和测试用例等)刻录光盘。目录目录III1引言11.1课题背景和意义11.2国内外研究现状11.3课程设计的主要研究工作22系统需求分析与总体设计32.1系统需求分析32.2 系统总体设计33系统详细设计93.1有关数据结构的定义93.2主要算法设计134系统实现与测试314.1系统实现314.2 系统测试365总结与展望445.1全文总结445.2工作展望44参考文献46附录程序清单471引言1.1课题背景和意义想进入一所满意的大学,七分靠成绩三分靠志愿。 如果说高考检验的是学生成绩,比的是个人实力,那么,填报志愿绝对是个技术活儿,考验的是决策能力,拼的是群体智慧。怎样才能在千余所学校、10多万个录取位置中,找到适合自己的一个,这就需要选择、对比、权衡、把握、决策同时还需要对各个高校信息的了解与查询。因此网上招生信息的查询就有着他独特的意义。同时网络招生查询系统具有以下的优点:有利于招生信息及时更新和发布。与传统纸质材料相比,网络招生查询系统制作比较简单,开发周期短,信息传播更及时更方便,信息留存的时间长也便于检索,并且更新信息的成本低,能够让最新的信息在第一时间传播到用户手中。用户查找信息更加快捷、方便、全面,并且能够对学、专业和分数线进行纵向和横向的比对,做出最合适的选择,适应复杂的招生数据的处理的需求。有利于节约时间,节约资源,提高工作效率,提高服务质量。1.2国内外研究现状信息管理系统在现代社会已经深入到各行各业,由于计算机技术的发展和普及,信息管理系统事实上已经成为了计算机管理信息系统。管理信息系统是一个不断发展的新型学科,它的定义随着计算机技术的发展和通讯技术的进步也在不断更新。管理信息由信息的采集,信息的传递,信息存储,信息加工,信息的维护和信息的使用五个方面组成。任何地方只要有管理,就必然有信息。如果形成系统就形成管理信息系统,计算机设备使管理信息系统更加有效。尤其是现代社会,管理信息系统已经和计算机设备不可分离。信息管理系统一词在中国出现在70年代末80年代初,根据中国的特点,许多从事管理信息系统的学者给管理信息系统也下了一个定义,该定义为:“管理信息系统,是一个由人和计算机等组成的能进行信息的收集,管理,加工,维护和使用的系统。管理信息系统能实测企业的各种运行情况,利用过去的数据预测未来;从企业全局出发辅助企业进行决策,利用信息控制企业行为,帮助企业实习其规划目标。”自20世纪80年代以来,在西方国家中的大型企业里相继出现了“信息总监”(CIO)这样引人瞩目的高级管理职位。20世纪90年代以来,随着知识管理新概念的出现,CIO开始逐步向“知识总监”(CKO)演变。CIO和CKO的出现使信息资源管理者的行政地位提高到了最高决策层,标志着微观层次的信息资源管理的地位与作用日益重要。为了适应新形式下现代化企业管理的需要,建立一个高效、可靠的计算机管理系统,并且在其上开发符合企业需要的生产信息管理系统已经越来越成为一个现代化企业的标志,它必将为企业生产、科学调度等方面带来深远的影响。1.3课程设计的主要研究工作课程设计是以考生以及家长对查询招生信息的需求为背景,基于全国高等学校招生实际情况,设计出招生查询系统。使用Code Blocks作为开发工具,系统具有文件维护,数据维护,数据查询,数据统计,帮助五个功能大类,包括数据加载,数据备份,数据恢复,数据保存,高校信息查询、修改、增加、删除等24个子模块。能够满足数据查询,修改,增加,删除,以及数据统计等功能。并且可以进行模糊查询,让用户对信息进行横向和纵向的对比。本系统可以用鼠标和键盘两种操作方式,方便快捷,便于使用。2系统需求分析与总体设计2.1系统需求分析使用招生查询系统的有两类人,一是用户,二是系统管理员。用户需要查询高校信息,专业信息和专业每一年的招生信息。在不清楚高校和专业的具体编号和名称的时候,也能够通过某些条件进行模糊查找。在实际生活中,用户也会需要每一年招生的统计信息,来作为选择学校时的参考。对于系统管理员而言,除了查询之外最重要的功能就是修改和删除信息。为了能够方便修改,需要能够选择性的修改,没有选择的部分保持原数据。通过输入编号选择删除的高校或者专业的信息。同时为了防止误删数据,也设计数据保存、备份和恢复的功能。系统主要是提供招生信息的快速查询、检索和统计。应该具有按高校、按专业等查询招生信息;组合条件检索招生信息;统计招生情况等。2.2 系统总体设计系统分成五个大的模块,分别是文件,数据维护,数据查询,数据统计,帮助。招生信息查询系统文件数据维护数据查询数据统计帮助文件模块的功能包括一系列与系统启动运行和系统结束运行相关的环境维护和数据操作,其进一步分化为4个子模块:数据保存、数据备份、数据恢复和退出系统。其功能结构如图所示:文件数据备份数据恢复退出系统数据保存数据保存子模块:用于将内存中的代码表数据和链表数据按照缺省路径分别保存到各个文件中。当数据保存失败时,输出提示信息并让用户输入存储数据文件的新路径,然后按用户指定的新路径保存数据。数据备份子模块:用于将存放在多个数据文件中的代码数据和基础数据按用户指定的路径转储到一个数据文件之中,当系统数据在破坏或者丢失时用来恢复数据。数据恢复子模块:与系统备份模块相对应,能从备份数据中恢复得到的系统数据,并加载数据到内存中。用于提高系统的稳定性和可靠性。退出系统子模块:释放程序运行过程中申请的动态存储区,关闭控制台标准输入和输出句柄,将标题栏设置为“运行结束”,清楚屏幕窗口信息,结束系统运行。数据维护模块完成为系统代码数据和三种基础数据信息的录入、修改和删除功能,保证数据的准确性、完整性和有效性。该模块按信息种类划分为:高校信息、专业信息和招生信息三个子模块,如下图所示:删除招生信息修改招生信息录入招生信息录入专业信息修改专业信息删除专业信息数据维护高校信息专业信息招生信息录入高校信息修改高校信息删除高校信息高校信息子模块:用于插入,修改和删除高校基本信息,保证高校信息的准确性。并且将高校的数据存入数据链表,并保存到高校信息数据文件中,以保证内存和外存在两种存储介质上数据内容的一致性。专业信息子模块:用于插入,修改和删除专业基本信息,保证专业信息的准确性。并且将专业的数据存入数据链表,并保存到专业信息数据文件中,以保证内存和外存在两种存储介质上数据内容的一致性。招生信息子模块:用于插入,修改和删除招生基本信息,保证招生信息的准确性。并且将招生的数据存入数据链表,并保存到招生信息数据文件中,以保证内存和外存在两种存储介质上数据内容的一致性。数据查询模块提供对三种基本数据信息按多种条件进行查询的功能。该模块按信息种类分为高校信息、专业信息和招生信息三个子模块,如图所示:数据查询招生信息高校信息专业信息高校信息查询子模块:用于学校信息的查询,是模糊查找高校信息,普通用户往往不了解高校编号,则可以通过高校名称或者地址等信息进行搜索,输出所有符合条件的高校信息。专业信息查询子模块:用于专业信息的查询,是模糊查找专业信息,普通用户往往不了解高校编号和专业编号,则可以通过专业名称等信息进行搜索,输出所有符合条件的专业信息。招生信息查询子模块:用于招生信息的查询,是模糊查找招生信息,普通用户往往不了解高校编号和专业编号,则可以通过专业名称和招生年份,招生人数等信息进行搜索,输出所有符合条件的招生信息。数据统计对三类基础数据进行多方面统计的功能,按照统计条件,划分为各学校专业热门度统计,各年份招生人数统计,高校信息统计,全录入信息统计,如图所示:数据统计全录入信息统计高校信息统计各年份招生人数统计各学校专业热门度统计各学校专业热门度统计:用于对各个学校各个专业招生时长、人数的统计,并根据该专业平均每年录取的人数为依据,计算该专业的热门程度,从高到底排列。各年份招生人数统计:用于对武汉高校每年实际、计划招生数的统计,并按各年实际招生数的高低排序后输出这些统计数据。高校信息统计:用于对武汉各所高校的基本信息的统计,统计各个高校专业数量,和该高校每年的计划和实际招生人数,全录入信息统计:输出已经录入的所有信息,高校信息中输出该高校的编号,专业信息输出该专业的名称,招生信息中输出招生的年份。帮助模块为用户使用系统提供帮助,同时还提供系统版本信息和系统版权信息,分为帮助主题子模块和系统说明子模块,如图所示:帮助关于帮助主题帮助主题子模块:能够时用户对系统的功能更加了解,使用更加方便。关于系统子模块:简要介绍系统的功能,以及版权声明,开发者的联系方式,便于用户进行反馈和对程序进行更好的修正。3系统详细设计3.1有关数据结构的定义按照任务要求,系统需要处理的基础信息有三种:高校信息,专业信息和招生信息。这三种信息存在这样的关联:专业信息中的高校编号与高校信息中的高校编号存在关联,招生信息中的专业编号与专业信息中的专业编号存在关联。这三种数据通过录入,成为系统的基础数据。系统进行统计时需要使用到以上三种数据,统计的结果形成新的数据。本系统的统计模块生成四种数据,分别表示专业历史统计信息、招生统计信息、高校分类统计信息、总录入信息统计信息。下面分别是设计本系统涉及的代码数据、基础数据和生成数据的数据结构,以及数据在内存和外存中的存储结构。(1) 高校信息表:数据项名称数据项标志数据类型数据长度取值范围示例高校名称nameString20“华中科技大学”高校编号uni_idString3“001-999”“001”地址addrString20“湖北省珞瑜路”联系电话telString20l 在内存中的存储结构:存放在十字交叉链表的主链接点上,每一个主链接点除了保存下一个结点的地址外,还保存该学校专业信息链表的头结点地址。l 数据文件的存储结构:每条信息作为一条记录存放到二进制文件。(2) 专业信息表:数据项名称数据项标志数据类型数据长度取值范围示例高校编号uni_idString3“001-999”“001”专业名称nameString20“华科信安”专业编号maj_idString12“01is”l 在内存中的存储结构:存放在十字交叉链表的主链接点上,每一个主链接点除了保存下一个结点的地址外,还保存该学校专业信息链表的头结点地址。l 数据文件的存储结构:每条信息作为一条记录存放到二进制文件。(3) 招生信息表:数据项名称数据项标志数据类型数据长度取值范围示例专业名称nameString10“华科信安”专业编号maj_idString12“01is”招生年份yearString10“2014”计划人数planint2“0-65535”“500”实际人数realint2“0-65535”“450”最高分maxint2“0-65535”“660”最低分minint2“0-65535”“600”l 在内存中的存储结构:存放在十字交叉链表中该专业信息链结点的招生信息链结点上,每一个结点保存下一个招生信息结点的地址。l 数据文件的存储结构:每条信息作为一条记录存放到二进制文件。(4) 专业历史统计信息链结点结构:数据项名称数据项标志数据类型数据长度取值范围示例招生时长num_yearlong8“3”专业名称nameString20“华科信安”总人数reallong8“1654”每年人数real_averdouble8“654.3”l 在内存中的存储结构:存放在专业历史统计信息的单向链表的结点中。l 数据文件的存储结构:不存入外存。(5) 招生统计信息:数据项名称数据项标志数据类型数据长度取值范围示例招生年份yearString15“2013”实际总人数realint2“0-65535”“365”计划总人数planint2“0-65535”“221”l 在内存中的存储结构:存放在招生统计信息的单向链表的结点中。l 数据文件的存储结构:不存入外存。(6) 高校分类统计信息:数据项名称数据项标志数据类型数据长度取值范围示例高校编号uni_idString3“001-999”“001”高校名称nameString20“华中科技大学”专业数量num_majint2“0-65535”“100”招生信息数量num_claint2“0-65535”“300”平均每年实际招生数realint2“0-65535”“7800”平均每年计划招生数planint2“0-65535”“7456”l 在内存中的存储结构:存放在高校分类统计信息的单向链表的结点中。l 数据文件的存储结构:不存入外存。(7) 总录入信息统计信息:数据项名称数据项标志数据类型数据长度取值范围示例高校编号uni_idString3“001-999”“001”专业名称nameString15“华科信安”招生年份yearString15“2014”l 在内存中的存储结构:存放在总录入信息统计信息的单向链表的结点中。l 数据文件的存储结构:不存入外存。系统主要涉及“高校”、“专业”和“招生”3类信息。“高校”信息由高校编号、高校名称、高校地址和联系电话等数据项目组成,“专业”信息由专业编号、专业名称等数据项目组成,“招生”信息由招生年份、招生计划、实际招生、最高分数和最低分数等数据项目组成。在磁盘上,采用3个文件分别存储“高校”、“专业”和“招生”的数据。在“专业”信息中增加高校编号,在“招生”信息中增加高校编号和专业编号。高校信息表,专业信息表和招生信息表在内存中构成一个三向十字交叉链表。3.2主要算法设计这部分主要描述系统中的模块实现的流程,可采用流程图的方式表示各模块的算法流程。1. 数据保存模块算法思想:(1) 分别打开三个需要被写入信息的文件 (2) 将存在在链表中的信息写入文件 (3) 保存文件并关闭 函数原型:/* * 函数名称: SaveSysData * 函数功能: 保存系统代码表和三类基础数据. * 输入参数: hd 主链头结点指针 * 输出参数: * 返 回 值: BOOL类型, 总是为TRUE * * 调用说明: */BOOL SaveSysData(UNI_NODE *hd) UNI_NODE *pUniNode=hd; FILE *pFile; pFile=fopen(gp_uni_info_filename,wb); while(pUniNode!=NULL) fwrite(pUniNode,sizeof(UNI_NODE),1,pFile); pUniNode=pUniNode-next; fclose(pFile); MAJ_NODE *pMajNode; UNI_NODE *pUniNode1=hd; pFile=fopen(gp_maj_info_filename,wb); while(pUniNode1!=NULL) pMajNode=pUniNode1-snext; while(pMajNode!=NULL) fwrite(pMajNode,sizeof(MAJ_NODE),1,pFile); pMajNode=pMajNode-next; pUniNode1=pUniNode1-next; fclose(pFile); UNI_NODE *pUniNode2=hd; MAJ_NODE *pMajNode1; CLA_NODE *pClaNode; pFile=fopen(gp_cla_info_filename,wb); while(pUniNode2!=NULL) pMajNode1=pUniNode2-snext; while(pMajNode1!=NULL) pClaNode=pMajNode1-cnext; while(pClaNode!=NULL) fwrite(pClaNode,sizeof(CLA_NODE),1,pFile); pClaNode=pClaNode-next; pMajNode1=pMajNode1-next; pUniNode2=pUniNode2-next; fclose(pFile); return TRUE;2. 数据备份模块:算法思想:(1) 创建一个以时间为文件名称的空文件 (2) 分别从三个已经保存的文件中读出信息并按顺序写入该文件中 (3) 保存文件,并关闭。函数原型:/* * 函数名称: BackupSysData * 函数功能: 将系统代码表和三类基础数据备份到一个数据文件. * 输入参数: hd 主链头结点指针 * * 输出参数: * 返 回 值: BOOL类型, 总是为TRUE * * 调用说明: */BOOL BackupSysData(UNI_NODE *hd) char i=0; UNI_NODE *pUniNode=hd; char num3=0; StatNum(num); time_t now; time(&now); char*fileName=ctime(&now); FILE *pFile; deletech(fileName,15); char *pl=.dat; fileName=strcat(fileName,pl); if(pFile=fopen(fileName,wb)=NULL) return FALSE; fwrite(num,sizeof(num),1,pFile); for(i=0;inext; MAJ_NODE *pMajNode; UNI_NODE *pUniNode1=gp_head; while(pUniNode1!=NULL) pMajNode=pUniNode1-snext; while(pMajNode!=NULL) fwrite(pMajNode,sizeof(MAJ_NODE),1,pFile); pMajNode=pMajNode-next; pUniNode1=pUniNode1-next; UNI_NODE *pUniNode2=gp_head; MAJ_NODE *pMajNode1; CLA_NODE *pChargerNode; while(pUniNode2!=NULL) pMajNode1=pUniNode2-snext; while(pMajNode1!=NULL) pChargerNode=pMajNode1-cnext; while(pChargerNode!=NULL) fwrite(pChargerNode,sizeof(CLA_NODE),1,pFile); pChargerNode=pChargerNode-next; pMajNode1=pMajNode1-next; pUniNode2=pUniNode2-next; fclose(pFile); return TRUE;3. 数据恢复模块:算法思想:(1) 输入需要读取的文件的文件名 (2) 从该文件中读出信息并按顺序分别写入三个保存信息的文件中 (3) 保存文件,并关闭。函数原型:BOOL RestoreSysData(UNI_NODE *phead, char *filename) UNI_NODE *hd = NULL, *pUniNode, tmp1; MAJ_NODE *pMajNode, tmp2; CLA_NODE *pClaNode, tmp3; FILE *pFile; int find; int re = 0; char num3; char i=0; if (pFile = fopen(filename, rb) = NULL) return FALSE; fread(num,sizeof(num),1,pFile); for(i=0;isnext = NULL; pUniNode-next = hd; hd = pUniNode; gp_head=hd; for(i=0;icnext = NULL; pUniNode = hd; while (pUniNode != NULL& strcmp(pUniNode-uni_id, pMajNode-uni_id) != 0) pUniNode = pUniNode-next; if (pUniNode != NULL) pMajNode-next = pUniNode-snext; pUniNode-snext = pMajNode; else free(pMajNode); for(i=0;isnext; while (pMajNode != NULL & find = 0) if (strcmp(pMajNode-maj_id, pClaNode-maj_id) = 0) find = 1; break; pMajNode = pMajNode-next; pUniNode = pUniNode-next; if (find) pClaNode-next = pMajNode-cnext; pMajNode-cnext = pClaNode; else free(pClaNode); fclose(pFile); return TRUE;4. 录入高校信息模块:算法思想:(1) 输入需要录入的高校的信息 (2) 将信息写入高校信息的链表中函数原型: if(selectnum=1) char *plabel_temp= 高校编号: ,高校名称: ,联系电话: ,高校地址: ,确定 取消; if(ShowModuleInput(plabel_temp,5)=(13+5) peel(plabel_temp,4); UNI_NODE *puni_node=(UNI_NODE*)malloc(sizeof(UNI_NODE); strcpy(puni_node-uni_id,plabel_temp0); strcpy(puni_node-name,plabel_temp1); strcpy(puni_node-tel,plabel_temp2); strcpy(puni_node-addr,plabel_temp3); puni_node-snext=NULL; puni_node-next=NULL; if(SeekUniNode(gp_head,puni_node-uni_id)=NULL) char *pCh=已经成功录入,确定; ShowModule(pCh,2); puni_node-next=gp_head; gp_head=puni_node; else char *pCh=已有该高校信息,确定; free(puni_node); ShowModule(pCh,2); 5. 修改高校信息模块:算法思想:(1) 输入需要修改的高校编码 (2) 读入需要修改的信息并保存 (3) 遍历高校信息链表,找到匹配的节点,将保存的信息写入找的节 点的位置函数原型: if(selectnum=2) char *plabel_temp=输入高校编号: ,确定 取消; if(ShowModuleInput(plabel_temp,2)=(13+2) peel(plabel_temp,1); if(SeekUniNode(gp_head,plabel_temp0)!=NULL) UNI_NODE *puni_node=SeekUniNode(gp_head,plabel_temp0); char *ppCh5; char a50,b50,c50,d50,*pl=确定 取消; sprintf(a,高校编号:改%-20s,puni_node-uni_id); sprintf(b,高校名称:改%-20s,puni_node-name); sprintf(c,联系电话:改%-20s,puni_node-tel); sprintf(d,高校地址:改%-20s,puni_node-addr); ppCh0=a; ppCh1=b; ppCh2=c; ppCh3=d; ppCh4=pl; if(ShowModuleInput(ppCh,5)=(13+5) peel(ppCh,4); if(strcmp(ppCh0,plabel_temp0)=0) if(*ppCh1!=0) strcpy(puni_node-name,ppCh1); if(*ppCh2!=0) strcpy(puni_node-tel,ppCh2); if(*ppCh3!=0) strcpy(puni_node-addr,ppCh3); char *pCh=修改成功,确定; ShowModule(pCh,2); else if(*ppCh0!=0) strcpy(puni_node-uni_id,ppCh0); if(*ppCh1!=0) strcpy(puni_node-name,ppCh1); if(*ppCh2!=0) strcpy(puni_node-tel,ppCh2); if(*ppCh3!=0) s

温馨提示

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

评论

0/150

提交评论