源代码:https://blog.csdn.net/queen00000/article/details/94468911
题 目 菜单设计
专业班级
组 别
学生姓名
院 (系)
指导教师(职称)
完成时间
题目 菜单设计
班级
学号 姓名
学号 姓名
学号 姓名
本课程设计结合本学期所学C语言知识,数组、函数、结构体、指针、链表、文件读取操作等等,准备设计开发一个简单的图书管理系统。设计开发这个系统需要用到链表、文件读取操作、结构体、函数、指针、等C语言知识。本课程设计将会实现对菜单的定义、菜单的显示、菜单选项的控制、及退出菜单等功能。本着简单、易用的设计原则,本课程设计在尽量优化界面在保证输入输出美观的同时又不失友好的交互界面。
本次设计主要学习内容包括:
(一)进一步学习并熟练掌握C语言语法和编程思想。
(二)学习C语言提供的库函数,熟悉CodeBlocks的开发工具。
(三)学习C语言函数、链表、结构体、文件读取、指针等知识。
(四)学习软件的设计与开发过程中所需要思想和细节。
二、基本要求:
(一)质量要求
(1)菜单的基本功能模块的设计应包括:显示菜单、定义菜单、画出菜单、菜单选项的控制和退出菜单。
(2)对菜单设计并进行调试、修复、完善、测试。测试主菜单和下拉菜单是否正确、测试信息的读取与存储是否正常、测试退出菜单后是否各项功能是否正常运行、测试评估界面是否合理,友好。
(3)定期主动向指导教师汇报任务进度,认真填写相关报告文档。
(4)按时完成各阶段工作,不突击,不抄袭。
(二)进度要求
(2)明确课程设计任务,搜集资料:2018年3月16日—3月30日。
(3)完成程序的设计与实现,撰写课程设计论文初稿:2018年3月31日—5月31日。
(4)与指导教师沟通,完成课程设计论文定稿:2018年6月1日—2017年6月8日。
(5)进入课程设计论文审阅阶段,准备答辩:2018年6月9日—6月22日。
三、主要参考资料:
[1] 甘勇,李晔,卢冰.中国铁道出版.《C语言程序设计(第二版) 》
[2] 河南工业大学同学的图书管理系统的功能的借鉴。
[3] 啊哈磊.人民邮电出版社.《啊哈!算法》
[4] 程杰,清华大学出版社.《大话数据结构》
完 成 期 限:
指导教师签名:
年 月 日
1.1 设计思想 .............................................................................................................................2
1.2 设计原则 .............................................................................................................................2
1.3 课程设计报告内容及分工情况 .............................................................................................3
1.3.1 课程设计报告内容 ............................................................................................................3
1.3.2 课程设计分工情况 ............................................................................................................3
2总体设计 ..................................................................................................................................4
2.1 功能模块图 ...........................................................................................................................4
2.2 主函数 main() .......................................................................................................................4
3 详细设计 ...................................................................................................................................6
4运行结果与调试 .........................................................................................................................15
4.1运行结果: .............................................................................................................................15
4-2软件调试 .................................................................................................................................17
结束语 .........................................................................................................................................18
参考资料 ......................................................................................................................................19
1概述
1.1 设计思想
(1)该系统的设计分成几个相对独立的模块,这些模块都进行集中式管理。
(2)分层的模块化程序设计思想,整个系统采用模块化结构设计作为应用程序,有较强的可操作性和扩展性。
(3)合理的数据设计,在应用系统设计中,相对独立的模块间以数据相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性 。
1.2 设计原则
为了使本系统功能齐全完备,操作简便,最大限度的提高用户的使用的体验,从而满足用户的实 际需要,在设计开发过程中遵循了如下原则:
(1)合法性原则:规范录入各种学生信息和各种数据,对用户的账号信息进行规范保存。
(2)实用性原则:根据用户对菜单信息浏览和登陆和查询的基本需求设计各种功能,并能够处理一些特殊情况的要求,此外,尽可能预留空间,以便扩充功能。
(3)易操作原则:要求设计的系统功能齐全,界面友好,操作方便,必要的地方进行提示。
(4)源程序可读性原则:为了便于其他设计,维护人员读懂代码或以后的代码修改,软件升级维护, 即可能做好代码注释工作。
(1)系统功能模块结构图
(2)数据结构设计及用法说明
(3)程序结构(画功能模块图或流程图)
(4)各模块的功能
(5)实验结果(包括输入数据和输出结果)
(6)设计体会
(7)参考文献
本组共有3人,具体分工情况如下:
(1)学号: ,姓名: ,具体负责写全部代码和功能实现并完成大部分课程设计报告。
(2)学号: ,姓名: ,具体负责流程图的制作。
(3)学号: ,姓名: ,具体负责流程图的制作。
本学生成绩管理菜单系统分为九个功能模块,分别是录入,删除,查找,修改,增加,排序,统计,存盘功能。功能模块图如图2-1所示。
函数的功能:用于联系各个功能函数模块,以及退出程序时的退出画面提示。
函数的入口:整个程序是从主函数开始的。
函数的出口:当从main()的ove函数开始中进入,即显示出欢迎使用界面; 跳出while循环,然后退出main()函数,即:退出整个程序。
函数调用关系:该函数不被其它函数调用。
图2.1学生成绩管理菜单系统模块图
调用dos命令cls清屏,然后直接用printf语句输出界面即可。C语言中system函数可以执行DOS命令。
用printf语句输出表头“学号 姓名 语文 数学 英语 C语言 总分 平均名次” 中,在程序中要注意表头和具体的数据对其。
将p指定的结构体信息输出,具体的数据项应该和PrintTitle( )函数中输出的数据项对其。
nameornum中只能存放“num”或“name”,当存放的是“num”时则按学号查找,当存放的是“name”时则按姓名查找。
输入字符串时进行长度验证,如果不符合要求则提示信息msg后让用户再次输入。在函数内部定义一个临时缓冲区char str[16],接收用户输入,当输入的字符串长度大于lens时,则再次要求用户输入,并给出提示信息。
要求输入某一范围内的数字,其算法思想和StringIput( )函数类似。
该函数显示链表中,所有学生的信息。先输出表头,然后输出链表中学生的数据即可。
该函数用于输入学生信息,先将指针移动到链表的末尾,新加入的学生信息放在链表的末尾。因为系统中不会有两个相同学好的学生,录入数据时,首先判断输入的学号是否已经存在,如果用户录入了已经存在的学号,则给用户提示重新录入。学号正常后,则申请节点空间,录入其他数据项,再将该节点加入的链表的末尾。
该函数在某一特定学号之后插入一个学生的信息。
该函数是先按学号或按姓名查找。根据用户的输入确定按什么查找,在这里调用前面已定义的locat( )函数即可实现查询,然后将查询到的结果显示出来。
该函数实现按学号或者按姓名删除某个节点。根据用户的输入确定按什么进行删除。
该函数用来修改某个学生的信息,注意学号不能被修改。
该函数显示该班的总分第一和单科第一的人,统计各科不及格人数。
该函数实现将链表中的节点按总分从高到低排序。本项目使用插入排序的方法,从本质上来看,链表的排序和数组的排序思想相同,但程序表达比数组稍微复杂。
该函数实现将链表中的节点按顺序保存到文件。每一个学生的数据是一个结构体,不同学生的数据在内存中的大小是相同的,用sizeof(Node)可以计算出来。
(1)Locate函数主流程
(2)定位节点的算法
(3)StringInput函数算法
(4)DisplayAll函数算法
(5)AddStudent算法
(6)Query算法
4.1运行结果:
4-1
(2)输入1,就会弹出添加信息界面,根据提示信息,进行完善即可。如图4-2所示。
4-2
(3)在存入信息的基础上,选择2,即浏览学生信息,即出现自己所添加的页面,如图4-3所示。
4-3
(1) 每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过老会长的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:每次在执行完讲数据保存到文件的函数后都会输出紊乱。经过多次调试和修改后,发现把是因为freopen(”CON”,stdout)运行不稳定导致,在更换了保存数据的方法后结决了此问题。
(2) 在增加了切换账号功能后,在创建新账号后保存到文件的用户借还书记录总是出错但内存中没错,经过调试发现是因为在新增账号时用于存储新账号借还书记录的指针名与一个变量名相同造成每次都判断错误。最后更换了变量名,并使该指针每次使用前都指向NULL。
(3)最开始在每次关闭程序后在下次使用前需要手动恢复文件中的数据,不能连续的使用数据,最后加了一个文件来保存各类数据的数量以使数据能够连续自主的调用,不需要再人工修改。
结束语
本系统包含了很多函数,实现了学生成绩管理菜单系统所需的基本功能。系统主要包含了九个模块,分别是添加学生信息、浏览学生信息、查询学生信息、修改学生信息、删除学生信息、排列学生信息、读取文件学生、保存到文件、退出系统。
xxx:在该设计中主要完成了所有代码的实现,并最终调试实现了该学生成绩管理系统的全部功能并完成了大部分的设计报告。在设计的过程中熟练了对文件的各种操作,链表和结构数组的使用,清屏函数和暂停函数的使用,对做一个项目的过程有了一个大概的认识,知道了大致的规划。在设计过程中发现一些文件的操作和清屏函数会有冲突,通过改变对文件的操作解决了此问题。
xxx:除了xxx设计的这个学生成绩管理系统,我自己也尝试着设计了一个学生成绩管理系统的功能,因此也发现了很多问题,比如说:在用add()函数添加新增学生信息时,我就忘了字符型数据本身会吃掉回车的这一特点,忘了在%c前面加上空格,导致程序在循环的过程中一直无法正常显示结果。但是,通过仔细耐心的检查与对错误的分析,又在课本的相关章节进行了查阅,最终发现了这一问题。同时,我更加熟悉了结构体的使用,对函数的调用方式更加清楚。还有就是初步了解了函数指针的概念,能够使用基础的函数指针。同时,这也是我第一次尝试画各种各样的流程图,虽然画的不好,但这确实是我的第一次尝试,也觉得充满了乐趣。
xxx:在本系统的设计中我参加设计了少量函数语句以及制作流程图等任务,在这次的设计前我原本对函数和结构体等了解并不太清楚,通过这次的设计我清楚了这些语句的运用,并且我学会了文件的操作,在文件的修改等地方出现了问题,后来通过查阅资料和讨论解决了这个问题。
[1] 《C语言程序设计(第二版)》,甘勇等编著,中国铁道出版社,2015年9月
[2] 《C语言程序设计》,苏小红等主编,高等教育出版社,2011年
[3] 《C和指针》,徐波译,人民邮电出版社,2008年
[4] 《C Primer Plus 第6版 中文版》,姜佑 译,人民邮电出版社,2016年
[5] 《大话数据结构》,程杰,清华大学出版社,2011年6月
[6] 《啊哈!算法》,啊哈磊,人民邮电出版社