C语言课程设计报告-菜单设计

article/2025/10/8 7:15:52

 

 

 

源代码:https://blog.csdn.net/queen00000/article/details/94468911

 

 

                                    xxx大学

 

                                 C语言课程设计报告

 

 

                                                  题    目            菜单设计                

                                                  专业班级                                        

                                                   组    别                                          

                                                   学生姓名                                        

                                                   院 (系)                                       

                                                   指导教师(职称)                          

                                                   完成时间                                        

 

 

 

                                     课程设计任务书

 

 

                                                     题目               菜单设计                       

                                                     班级                                                      

                                                     学号                           姓名                                       

                                                     学号                           姓名                    

                                                     学号                           姓名                    

 

 

 

  • 主要内容:

本课程设计结合本学期所学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.3 课程设计报告内容及分工情况

1.3.1 课程设计报告内容

    (1)系统功能模块结构图

    (2)数据结构设计及用法说明

    (3)程序结构(画功能模块图或流程图)

    (4)各模块的功能

    (5)实验结果(包括输入数据和输出结果)

    (6)设计体会

    (7)参考文献

 

1.3.2 课程设计分工情况

本组共有3人,具体分工情况如下:

          (1)学号:   ,姓名:    ,具体负责写全部代码和功能实现并完成大部分课程设计报告。

          (2)学号:   ,姓名:   ,具体负责流程图的制作。

          (3)学号:   ,姓名:   ,具体负责流程图的制作。

 

 

 

2 总体设计

2.1 功能模块图

本学生成绩管理菜单系统分为九个功能模块,分别是录入,删除,查找,修改,增加,排序,统计,存盘功能。功能模块图如图2-1所示。

2.2 主函数 main()

函数的功能:用于联系各个功能函数模块,以及退出程序时的退出画面提示。

函数的入口:整个程序是从主函数开始的。

 函数的出口:当从main()的ove函数开始中进入,即显示出欢迎使用界面; 跳出while循环,然后退出main()函数,即:退出整个程序。

函数调用关系:该函数不被其它函数调用。

 

 

                                                                        图2.1学生成绩管理菜单系统模块图

 

3 详细设计

 

3.1 函数

   (1)函数void ShowMenu( )

 调用dos命令cls清屏,然后直接用printf语句输出界面即可。C语言中system函数可以执行DOS命令。

 

   (2)函数void PrintTitle( )

 用printf语句输出表头“学号 姓名 语文 数学 英语 C语言 总分 平均名次” 中,在程序中要注意表头和具体的数据对其。

 

  (3)函数PrintData(Node *p)

将p指定的结构体信息输出,具体的数据项应该和PrintTitle( )函数中输出的数据项对其。

 

  (4)函数Node* Locate(Link list,char findstring[],char nameornum[] )

 nameornum中只能存放“num”或“name”,当存放的是“num”时则按学号查找,当存放的是“name”时则按姓名查找。

 

    (5)函数void StringInput(char *t, int lens, char *msg) 

输入字符串时进行长度验证,如果不符合要求则提示信息msg后让用户再次输入。在函数内部定义一个临时缓冲区char str[16],接收用户输入,当输入的字符串长度大于lens时,则再次要求用户输入,并给出提示信息。

    (6)函数int NumberIput(char *msg)

要求输入某一范围内的数字,其算法思想和StringIput( )函数类似。

 

    (7)函数void DisplayAll(Link list)

该函数显示链表中,所有学生的信息。先输出表头,然后输出链表中学生的数据即可。

   (8)函数void AddStudent(Link lidt)

该函数用于输入学生信息,先将指针移动到链表的末尾,新加入的学生信息放在链表的末尾。因为系统中不会有两个相同学好的学生,录入数据时,首先判断输入的学号是否已经存在,如果用户录入了已经存在的学号,则给用户提示重新录入。学号正常后,则申请节点空间,录入其他数据项,再将该节点加入的链表的末尾。

 

   (9)函数void Insert(Link list)

该函数在某一特定学号之后插入一个学生的信息。

(10)函数void Query(Link list)

该函数是先按学号或按姓名查找。根据用户的输入确定按什么查找,在这里调用前面已定义的locat( )函数即可实现查询,然后将查询到的结果显示出来。

 (11)函数void Delete(Link list)

该函数实现按学号或者按姓名删除某个节点。根据用户的输入确定按什么进行删除。

 (12)函数void Modify(Link list)

该函数用来修改某个学生的信息,注意学号不能被修改。

 (13)函数void Statistic(Link list)

该函数显示该班的总分第一和单科第一的人,统计各科不及格人数。

   (14)函数void Sort(Link list)

该函数实现将链表中的节点按总分从高到低排序。本项目使用插入排序的方法,从本质上来看,链表的排序和数组的排序思想相同,但程序表达比数组稍微复杂。

  (15)函数viod Save(Linl list)

该函数实现将链表中的节点按顺序保存到文件。每一个学生的数据是一个结构体,不同学生的数据在内存中的大小是相同的,用sizeof(Node)可以计算出来。

 

 

 

3.2函数流程图

(1)Locate函数主流程

 

 

 

(2)定位节点的算法

 

 

(3)StringInput函数算法

 

 

(4)DisplayAll函数算法

 

(5)AddStudent算法

 

 

(6)Query算法

4运行结果与调试

4.1运行结果:

 

  1. 在程序开始的时候,是登陆界面。该界面可以进行添加学生信息、浏览学生信息、查询学生信息、修改学生信息、删除学生信息等。界面如图4-1所示。

                                                                                               4-1

 

(2)输入1,就会弹出添加信息界面,根据提示信息,进行完善即可。如图4-2所示。

                                                                                             4-2

 

(3)在存入信息的基础上,选择2,即浏览学生信息,即出现自己所添加的页面,如图4-3所示。

                                                                                             4-3

 

 

 

4.2软件调试

(1) 每个选择界面之后,前一屏幕的内容依旧存在,影响界面的美观;经过老会长的帮助及上网搜索,发现利用“system(“cls”);”可以消去前一屏幕的内容;然而接下来又出现新的问题:每次在执行完讲数据保存到文件的函数后都会输出紊乱。经过多次调试和修改后,发现把是因为freopen(”CON”,stdout)运行不稳定导致,在更换了保存数据的方法后结决了此问题。

(2) 在增加了切换账号功能后,在创建新账号后保存到文件的用户借还书记录总是出错但内存中没错,经过调试发现是因为在新增账号时用于存储新账号借还书记录的指针名与一个变量名相同造成每次都判断错误。最后更换了变量名,并使该指针每次使用前都指向NULL。

 

(3)最开始在每次关闭程序后在下次使用前需要手动恢复文件中的数据,不能连续的使用数据,最后加了一个文件来保存各类数据的数量以使数据能够连续自主的调用,不需要再人工修改。

 

 

 

 

结束语

本系统包含了很多函数,实现了学生成绩管理菜单系统所需的基本功能。系统主要包含了九个模块,分别是添加学生信息、浏览学生信息、查询学生信息、修改学生信息、删除学生信息、排列学生信息、读取文件学生、保存到文件、退出系统。

xxx:在该设计中主要完成了所有代码的实现,并最终调试实现了该学生成绩管理系统的全部功能并完成了大部分的设计报告。在设计的过程中熟练了对文件的各种操作,链表和结构数组的使用,清屏函数和暂停函数的使用,对做一个项目的过程有了一个大概的认识,知道了大致的规划。在设计过程中发现一些文件的操作和清屏函数会有冲突,通过改变对文件的操作解决了此问题。

 

xxx:除了xxx设计的这个学生成绩管理系统,我自己也尝试着设计了一个学生成绩管理系统的功能,因此也发现了很多问题,比如说:在用add()函数添加新增学生信息时,我就忘了字符型数据本身会吃掉回车的这一特点,忘了在%c前面加上空格,导致程序在循环的过程中一直无法正常显示结果。但是,通过仔细耐心的检查与对错误的分析,又在课本的相关章节进行了查阅,最终发现了这一问题。同时,我更加熟悉了结构体的使用,对函数的调用方式更加清楚。还有就是初步了解了函数指针的概念,能够使用基础的函数指针。同时,这也是我第一次尝试画各种各样的流程图,虽然画的不好,但这确实是我的第一次尝试,也觉得充满了乐趣。

 

xxx:在本系统的设计中我参加设计了少量函数语句以及制作流程图等任务,在这次的设计前我原本对函数和结构体等了解并不太清楚,通过这次的设计我清楚了这些语句的运用,并且我学会了文件的操作,在文件的修改等地方出现了问题,后来通过查阅资料和讨论解决了这个问题。

 

 

参考资料

 

[1] C语言程序设计(第二版)》,甘勇等编著,中国铁道出版社,20159月

[2] 《C语言程序设计》,苏小红等主编,高等教育出版社,2011年

[3] 《C和指针》,徐波译,人民邮电出版社,2008年

[4] 《C Primer Plus 第6版 中文版》,姜佑 译,人民邮电出版社,2016年

[5] 《大话数据结构》,程杰,清华大学出版社,2011年6月

[6] 《啊哈!算法》,啊哈磊,人民邮电出版社


http://chatgpt.dhexx.cn/article/lPgaabl6.shtml

相关文章

连续邮资问题

1、实验环境 Visual C 6.0 2、实验目的和要求 利用回溯法解决连续邮资问题。假设某国家发行了n种不同面值的邮票并且规定每张信封上最多只允许贴m张。对于给定的n和m的值,给出邮票面值的最佳设计,使得可在1张信封上贴出从邮资1开始,增量为…

寄信收信问题

问题 在一个村庄里有i个人,他们每个人只能寄出一封信,接收一封信,并且不能给自己寄信。那么请问一共有多少种寄信收信方式。 思路 遇到此类问题,应该从简单的情况考虑。比如,当村里只有两个人的时候,只有…

【图论】中国邮递员问题、平面图上最大割问题的多项式时间算法

文章目录 一、中国邮递员问题1. 与欧拉回路的关系2. Edmonds-Johnson算法3. 一个例子 二、平面图上的最大割问题1. 割2. 最大割及其 N P \bold{NP} NP完全性3. 平面图上的最大割问题4. 奇回路覆盖5. 转化为一般图最大匹配6. 一个例子 三、顶点图上最大割问题的 N P \bold{NP} N…

AMPL实现中国邮递员问题,你get到了吗

本文所有代码全部使用AMPL语言实现 中国邮递员问题和旅行商问题不太相同,旅行商问题是不能回头的,而邮递员问题要求是访问所有街道,也就是说每个街道必须访问到。 1、哥尼斯堡七桥问题 要解出中国邮递员问题,首先我们一起来了解…

关于中国邮递员问题和欧拉图应用

关于中国邮递员问题和欧拉图应用 中国邮递员问题: 1962年有管梅谷先生提出中国邮递员问题(简称CPP)。一个邮递员从邮局出发,要走完他所管辖的每一条街道,可重复走一条街道,然后返回邮局。任何选择一条尽可…

欧拉环游和中国邮递员问题

文章目录 前言欧拉环游Fleury算法中国邮递员问题 前言 这篇文章介绍了欧拉环游的定义判定,Fleury算法求欧拉图中的欧拉环游,最后给出了中国邮递员问题的解决步骤。 欧拉环游 所谓欧拉环游就是指在一个无向图中,从一个点出发,每…

中国邮递员问题最短路径(代码+实现)

奇点需要配合LINGO进行去除,有需要请联系1822285076qq.com,需要一定费用。 总程序: 奇点消除lingo代码:

一笔画问题(中国邮递员问题)

一笔画与中国邮递员问题 一、引述 一笔画问题: 节点可以重复走边不可以重复走要求把所有边都走一次 欧拉图(Euler graph): 从任何节点开始,都可以一笔画 每一个节点都是偶数价(价数指的是从该节点能够伸出去的边的数目&#x…

用遗传算法解决中国邮递员问题

中国邮递员问题 所谓中国邮递员问题,见下面无向图 ,假设邮递员初始位置在A点,现在他要访问所有其他4个结点以便投递邮件,结点与结点之间的距离已经标注在边上。问:邮递员应该依次访问哪些结点才能以最短路径遍历所有结…

中国邮路问题邮递员问题欧拉路径图论C++

下载链接:https://download.csdn.net/download/RONNIE_Zz/13094843 通路:在无向图中由点边交替组成的序列就是通路(如果这个图是简单的,那么也可以使用点的序列来表示),如果首尾的点相同,则称为…

邮局问题

原题:POJ 1160 题意: 一些村庄被建立在一条笔直的高速公路边上,我们用一条坐标轴来描述这条高速公路,每一个村庄的坐标都是整数,没有两个村庄坐标相同。两个村庄间的距离,定义为它们的坐标值差的绝对值。我们需要在一…

c语言邮递员问题算法,中国邮递员问题的求解实例

中国邮递员问题的求解实例 前面已经讲过,对于欧拉图,可以直接用Fleury算法找出一条欧拉巡回路线;对于半欧拉图,可以先求出奇点u和v之间的最短路径P,令G G P,贝U G *为欧拉图,然后用Fleury算法来确定一个G *…

ACM图论算法—邮递员投递问题

题目描述 著名图论问题之一。邮递员从邮局出发送信,要求对辖区内每条街,都至少通过一次,再回邮局。在此条件下,怎样选择一条最短路线?此问题由中国数学家管梅谷于1960年首先研究并给出算法,故名。 中国邮…

百子作业 —— 中国邮递员问题

题目 严老师和宋老板去勘测武威市区的道路网,每一条路都需要勘测,且需要两人合作.武威市区可以近似地看成六横六纵组成的道路网,自西向东依次为学府路、民勤路、西关路、中关路、富民路、滨河路;自北向南依次为雷海路、宣武路、祁…

邮递员算法问题之c++实现

目录 前言演示问题介绍思路代码复现尾言 前言 大家好,我是Ericam_。 近些时间,通过一个项目接触到了邮递员算法问题,还是挺有意思的(虽然做起来经历了不少的困难)。最后勉强复现了吧,写个文章就当记录一下。…

中国邮递员问题+代码实现(cpp)

中国邮递员问题是一个和旅行商问题比较相关但又不太相同的一个问题,而且个人感觉理解的难度更大一点,当然,这就是仁者见仁,智者见智了,旅行商问题是不能回头的,一个节点访问过了不能回来了,并不…

离散数学实验----中国邮递员问题

实验目的和要求 实验目的: 理解什么是欧拉图,熟悉欧拉路和欧拉回路的概念。掌握Dijkstra算法,求解最短路径掌握Fleury算法,求解欧拉回路。了解Edmonds-Johnson算法解决中国邮递员问题的基本思路。通过程序实现中国邮递员问题&…

数据结构——中国邮递员问题

问题描述 代码 #include <stdio.h> #include <stdlib.h> #include <string.h>#define min(a,b) ( (a) < (b) ? (a) : (b) ) #define MAX_NODE 100 #define MAX_EDGE 100 #define INF 0x7fffffff // 表示两点不连通typedef struct {int number; …

[算法导论] 邮递员问题

邮递员问题 旅行商问题&#xff1a;给定一系列城市和每对城市之间的距离&#xff0c;求解访问每一座城市一次并回到起始城市的最短回路。&#xff08;遍历点&#xff0c;回到起点&#xff09; 哈密顿路径 哈密顿图 中国邮递员问题&#xff1a;邮差要设法找到一条最短路径&…

中国邮递员问题的深入剖析与算法实现(附例题及MATLAB、LINGO代码)

中国邮递员问题的深入剖析与算法实现 一、研究背景1.1 哥尼斯堡七桥问题1.2 欧拉图1.3 中国邮递员问题 二、中国邮递员问题深入解读2.1 问题重述2.2 奇偶点图上作业法[^1]2.3 最小二分匹配法1) 针对无向图2) 针对有向图 2.4 $fleury$算法 三、经典中国邮递员问题的具体实现3.1 …